Unverified Commit 418d84ca by Paul-Louis NECH Committed by GitHub

Merge pull request #1 from PLNech/refact/gemini

ParVagues overhaul
parents 58c84ea4 9d190f0f
---
description:
globs: *.css
alwaysApply: false
---
# AVoid global css:
Global CSS cannot be imported from files other than your Custom <App>. Due to the Global nature of stylesheets, and to avoid conflicts, Please move all first-party global CSS imports to pages/_app.js. Or convert the import to Component-Level CSS (CSS Modules).
...@@ -28,3 +28,6 @@ yarn-error.log* ...@@ -28,3 +28,6 @@ yarn-error.log*
.env.development.local .env.development.local
.env.test.local .env.test.local
.env.production.local .env.production.local
# LLM exchanges
code2prompt.json
# Dependencies to Install
These packages need to be installed for the improved ParVagues landing:
```bash
npm install @react-icons/all-files
```
## New icons dependencies:
- **@react-icons/all-files**: For streaming platform icons
## Alternative approach (if size matters):
```bash
npm install react-icons
```
Then import specific icons only.
import { useState, useEffect, useRef } from 'react';
export default function GlitchText({ text, className, burstFrequency = 30000 }) {
const [displayText, setDisplayText] = useState(text);
const [isBursting, setIsBursting] = useState(false);
const burstTimeoutRef = useRef(null);
const glitchIntervalRef = useRef(null);
// Collection of diacritical marks to add to characters
const diacritics = [
'\u0301', // Acute accent
'\u0300', // Grave accent
'\u0308', // Diaeresis
'\u0303', // Tilde
'\u0327', // Cedilla
'\u0306', // Breve
'\u0304', // Macron
'\u0302', // Circumflex
'\u030C', // Caron
'\u0307', // Dot above
'\u0328', // Ogonek
'\u0323', // Dot below
'\u0331', // Macron below
'\u0337', // Short overlay
];
// More intense effects for burst mode
const cursedCombiningMarks = [
'\u035C', // Double breve below
'\u035F', // Combining double macron below
'\u0360', // Combining double tilde
'\u0361', // Combining double inverted breve
'\u0362', // Combining double rightwards arrow below
'\u0489', // Combining cyrillic millions sign
'\u036F', // Combining latin small letter x
'\u033E', // Combining vertical tilde
'\u035D', // Combining double breve
'\u0346', // Combining bridge above
'\u031A', // Combining left angle above
'\u0359', // Combining asterisk below
];
const applyRandomDiacritic = (char) => {
// Don't apply diacritics to spaces
if (char === ' ') return char;
const shouldAddDiacritic = Math.random() < (isBursting ? 0.8 : 0.1);
if (!shouldAddDiacritic) return char;
// During bursts, possibly apply multiple diacritics
if (isBursting && Math.random() < 0.4) {
const numMarks = Math.floor(Math.random() * 3) + 1;
let result = char;
const allMarks = [...diacritics, ...cursedCombiningMarks];
for (let i = 0; i < numMarks; i++) {
const mark = allMarks[Math.floor(Math.random() * allMarks.length)];
result += mark;
}
return result;
}
// Normal mode - just add a single diacritic
const diacritic = diacritics[Math.floor(Math.random() * diacritics.length)];
return char + diacritic;
};
const glitchText = () => {
const glitchIntensity = isBursting ? 0.8 : 0.05;
// Apply glitch to the text
const glitchedText = Array.from(text).map(char => {
// Chance to apply a diacritic
if (Math.random() < glitchIntensity) {
return applyRandomDiacritic(char);
}
return char;
}).join('');
setDisplayText(glitchedText);
};
const startBurst = () => {
setIsBursting(true);
// Clear any existing interval
if (glitchIntervalRef.current) {
clearInterval(glitchIntervalRef.current);
}
// Create a faster interval during burst
glitchIntervalRef.current = setInterval(glitchText, 100);
// End burst after 1-2 seconds
setTimeout(() => {
setIsBursting(false);
clearInterval(glitchIntervalRef.current);
glitchIntervalRef.current = setInterval(glitchText, 2000);
}, 1000 + Math.random() * 1000);
};
// Setup effect - runs when component mounts or when burstFrequency changes
useEffect(() => {
// Clean up any existing intervals and timeouts
if (glitchIntervalRef.current) {
clearInterval(glitchIntervalRef.current);
}
if (burstTimeoutRef.current) {
clearTimeout(burstTimeoutRef.current);
}
// Initial setup - slow glitch every 2 seconds
glitchIntervalRef.current = setInterval(glitchText, 2000);
// Set up random bursts
const scheduleBurst = () => {
const nextBurstTime = burstFrequency + (Math.random() * burstFrequency * 0.5);
burstTimeoutRef.current = setTimeout(() => {
startBurst();
scheduleBurst();
}, nextBurstTime);
};
// Trigger immediate glitch to show effect immediately
glitchText();
// Schedule the first burst
scheduleBurst();
// Cleanup on unmount or when dependencies change
return () => {
clearInterval(glitchIntervalRef.current);
clearTimeout(burstTimeoutRef.current);
};
}, [burstFrequency]); // Add burstFrequency as a dependency
return (
<span className={className} data-text={text}>
{displayText}
</span>
);
}
\ No newline at end of file
// next/components/ImageGallery.js
import { useState } from 'react';
import Image from 'next/image';
import Masonry from 'react-masonry-css';
export default function ImageGallery({ images, slug }) {
const [selectedImage, setSelectedImage] = useState(null);
const breakpointColumns = {
default: 3,
768: 2,
480: 1
};
return (
<>
<div className="mt-8">
<h3 className="text-xl font-semibold mb-4 text-purple-400">Galerie</h3>
<Masonry
breakpointCols={breakpointColumns}
className="masonry-grid" // Ensure this class or its child provides relative positioning for 'fill'
columnClassName="masonry-grid_column"
>
{images.map((imageSrc, i) => (
<div
key={i}
className="mb-4 cursor-pointer hover:opacity-75 transition-opacity"
onClick={() => setSelectedImage(imageSrc)}
>
{/* Ensure this div is the relatively positioned parent for fill */}
<div className="relative aspect-square rounded-lg overflow-hidden"> {/* Tailwind's aspect-square utility */}
<Image
src={imageSrc}
alt={`${slug} image ${i + 1}`}
fill
className="object-cover" // object-cover will fill the square, cropping if necessary
/>
</div>
</div>
))}
</Masonry>
</div>
{/* Lightbox */}
{selectedImage && (
<div
className="fixed inset-0 z-50 bg-black/90 flex items-center justify-center cursor-zoom-out"
onClick={() => setSelectedImage(null)}
>
<div className="relative max-w-[90vw] max-h-[90vh]">
<Image
src={selectedImage}
alt="Selected image"
width={1200} // These are for the lightbox, not the gallery thumbs
height={800} // These define the max dimensions and aspect ratio for the lightbox image
className="max-w-full max-h-full object-contain" // object-contain is good for lightbox
/>
<button
className="absolute top-4 right-4 text-white text-2xl hover:text-purple-400 transition-colors"
onClick={(e) => {
e.stopPropagation();
setSelectedImage(null);
}}
>
×
</button>
</div>
</div>
)}
</>
);
}
\ No newline at end of file
import React from 'react';
import Link from 'next/link';
import Image from 'next/image';
import { FaEnvelope, FaInstagram, FaTwitter } from 'react-icons/fa';
import { SiMastodon, SiBluesky } from 'react-icons/si';
import styles from '@/styles/parvagues.module.css';
export default function ParVaguesFooter() {
const socialLinks = [
{ icon: <FaEnvelope />, label: 'email', url: 'mailto:parvagues@nech.pl' },
{ icon: <SiMastodon />, label: 'mastodon', url: 'https://chaos.social/@PixelNoir' },
{ icon: <FaTwitter />, label: 'twitter', url: 'https://x.com/ParVagues' },
{ icon: <SiBluesky />, label: 'bluesky', url: '#' },
{ icon: <FaInstagram />, label: 'instagram', url: 'https://instagram.com/parvagues.mp3' }
];
const year = new Date().getFullYear();
return (
<footer className="bg-black border-t border-[#d900ff]/20 py-8 relative overflow-hidden">
<div className={styles.neonGradient}></div>
<div className="max-w-6xl mx-auto px-4 relative z-10">
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
{/* About Column */}
<div>
<p className="text-gray-400 text-sm mb-4">
Livecoding de musique libre<br />
Performances algorithmiques en direct.
</p>
</div>
{/* Social Column */}
<div className="flex flex-col items-center md:items-end">
<div className="flex justify-center w-full">
<div className="relative">
<Image
src="/images/parvagues/logo.png"
alt="ParVagues Logo"
width={240}
height={240}
className="mx-auto mb-4"
/>
</div>
</div>
<div className="flex flex-wrap gap-4 justify-center md:justify-end">
{socialLinks.map((link, index) => (
<a
key={index}
href={link.url}
target="_blank"
rel="noopener noreferrer"
className="bg-gray-800 hover:bg-[#8900b3]/60 text-white p-3 rounded-full transition-colors shadow-md hover:shadow-[#d900ff]/40"
aria-label={link.label}
>
{link.icon}
</a>
))}
</div>
</div>
</div>
{/* Navigation Links - more compact */}
<div className="w-full bg-black py-4">
<div className="flex justify-center items-center space-x-8 text-xs tracking-widest uppercase flex-wrap">
<Link href="/parvagues#music" className="text-gray-300 hover:text-[#ff3d7b] transition-colors tracking-wider px-3">
MUSIQUE
</Link>
<Link href="/parvagues#performances" className="text-gray-300 hover:text-[#ff3d7b] transition-colors tracking-wider px-3">
PERFORMANCES
</Link>
<Link href="/parvagues#about" className="text-gray-300 hover:text-[#ff3d7b] transition-colors tracking-wider px-3">
À PROPOS
</Link>
<a
href="mailto:parvagues@nech.pl?subject=Booking Request"
className="text-gray-300 hover:text-[#ff3d7b] transition-colors tracking-wider px-3"
>
RÉSERVER
</a>
</div>
</div>
</div>
</footer>
);
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import Link from 'next/link';
import Image from 'next/image';
import { FaEnvelope } from 'react-icons/fa';
import styles from '@/styles/parvagues.module.css';
import { useRouter } from 'next/router';
// Custom hook to track scroll position
function useScrolledPast(threshold = 100) {
const [scrolled, setScrolled] = useState(false);
useEffect(() => {
const onScroll = () => {
setScrolled(window.scrollY > threshold);
};
// Initial check
onScroll();
window.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, [threshold]);
return scrolled;
}
export default function ParVaguesHeader({ eventName = null, title = null }) {
const router = useRouter();
const isHome = router.pathname === '/parvagues';
const showInHeader = useScrolledPast(300);
const headerTitle = title || eventName || 'ParVagues';
return (
<header className="sticky top-0 left-0 w-full z-50 bg-black/80 backdrop-blur-md border-b border-[#d900ff]/20">
<div className={`${styles.neonGradient} opacity-5 absolute inset-0`}></div>
<div className="max-w-6xl mx-auto px-4 py-3 flex items-center justify-between">
{/* Logo and Title with Navigation */}
<div className="flex items-center justify-between w-full">
<Link href="/parvagues" className="flex items-center group">
<div className="h-10 w-10 relative flex-shrink-0">
<Image
src="/images/parvagues/logo.png"
alt="ParVagues Logo"
width={48}
height={48}
className="object-contain transition-all duration-300 group-hover:filter group-hover:drop-shadow-[0_0_8px_rgba(217,0,255,0.7)]"
/>
</div>
<div className="overflow-hidden ml-2">
<span
className={`text-white font-bold transition-all duration-500 ${
showInHeader || !isHome ? 'opacity-100 translate-y-0' : 'opacity-0 -translate-y-8'
}`}
style={{
textShadow: '0 0 5px rgba(217, 0, 255, 0.7), 0 0 10px rgba(217, 0, 255, 0.5)',
color: 'var(--neon-high)'
}}
>
{headerTitle}
</span>
</div>
</Link>
{/* Navigation and CTA */}
<div className="flex items-center space-x-6">
{/* Navigation Links */}
<nav className="flex items-center space-x-6 text-sm tracking-wider">
<Link href="/parvagues#music" className="text-gray-300 hover:text-[#ff3d7b] transition-colors">
Music
</Link>
<Link href="/parvagues#performances" className="text-gray-300 hover:text-[#ff3d7b] transition-colors">
Performances
</Link>
<Link href="/parvagues#about" className="text-gray-300 hover:text-[#ff3d7b] transition-colors">
About
</Link>
</nav>
{/* CTA button */}
<Link
href="/book"
className={`${styles.outlineButton} py-2 px-4 text-sm flex items-center whitespace-nowrap`}
>
<FaEnvelope className="mr-2 flex-shrink-0" />
<span>Book</span>
</Link>
</div>
</div>
</div>
</header>
);
}
---
title: "[38C3] Secret Toilet Rave"
date: "2024-12-28"
time: "01:37"
location: "Hamburg, Germany"
address: "CCH, Hamburg"
description: "TODO"
ctaURL: "https://soundcloud.com/parvagues/live-38c3-secret-toilet-rave"
ctaText: "SECRETSecret Toilet Algorave Set ㊙️🕺🪠"
video: ""
audio: "https://soundcloud.com/parvagues/live-38c3-secret-toilet-rave"
archive: "https://soundcloud.com/parvagues/live-38c3-secret-toilet-rave"
tags: ["livecoding", "170BPM", "DNB", "Techno", "live"]
---
Secret Toilet Algorave Set ㊙️🕺🪠
Played live at the CCC 38C3 edition (Ghosts in the Toilets composed on the spot 🤟)
Tracklist:
- Ghosts in the Toilets
- Nouveau Punk
- Pitbul Punk
- Acidulé
- L'or Bleu
\ No newline at end of file
---
title: "[CCC] Cookie Collective Compilation Release Party"
date: "2024-10-25"
time: "XX:XX"
location: "Lieu tenu secret"
address: "Paris, France"
description: ""
# ctaURL: "https://nech.pl/algorave-lyon"
# ctaText: "Plus d'infos"
# teasing1: |
# # AlgoRave preparation
# ```tidal
# d1 $ degradeBy 0.25 $ sound "jungle:45"
# d2 $ every 3 (fast 2) $ sound "cp"
# ```
# Set in preparation for Lyon
# teasing2: |
# # Week countdown...
# ```tidal
# d8 $ chop 16 $ loopAt 2 $ sound "jungle_breaks:45"
# ```
# Details coming soon
# teasing3: |
# # Final call
# ```tidal
# d1 $ stack [sound "cp", sound "ho:3"]
# ```
# Tonight @ Lyon
# video: ""
# audio: ""
# archive: ""
# tags: ["livecoding", "algorave", "lyon", "tidal"]
# ---
# # AlgoRave Lyon 2025
# Détails à venir...
---
title: "AlgoRave Lyon 2025"
date: "2025-05-25"
time: "XX:XX"
location: "GR TBD"
address: " GRRRND ZERO VAULX, 56 - 60 Avenue Bohlen, Vaulx-en-Velin"
description: "AlgoRave 18h-06h avec musique installations et performances audiovisuelles."
ctaURL: "https://www.grrrndzero.org/index.php/2672-sam-24-05-algorave"
# ctaText: "Plus d'infos"
teasing1: |
# AlgoRave preparation
```tidal
d1 $ degradeBy 0.25 $ sound "jungle:45"
d2 $ every 3 (fast 2) $ sound "cp"
```
Set in preparation for Lyon
teasing2: |
# Week countdown...
```tidal
d8 $ chop 16 $ loopAt 2 $ sound "jungle_breaks:45"
```
Details coming soon
teasing3: |
# Final call
```tidal
d1 $ stack [sound "cp", sound "ho:3"]
```
Tonight @ Lyon
video: ""
audio: ""
archive: ""
tags: ["livecoding", "algorave", "lyon", "tidal"]
---
# AlgoRave Lyon 2025
Détails à venir...
---
title: "LIVE CODING @ENSAD"
date: "2025-05-22"
time: "18:30-20:00"
location: "ENSAD Paris"
address: "20 cours Saint Vincent, Issy"
description: "breakbeat.nujazz.hybrid()"
ctaURL: "https://nech.pl/ensad"
ctaText: "Sur inscription gratuite"
teasing1: |
# Loading breaks, please wait...
```tidal
d1 $ s "bazart:22.05" # orbit 8
d2 $ cookies # "collab" # gain 1.2
```
LIVE CODING @ensad.paris
22.05 > 18:30-23h30
BAZART // cookie collective
w/ @bubobubo @azertype @cyber_flemme
@z0rg_ @neon_delice @incontinentlab
teasing2: |
# SNEAK PEEK // BAZART '25 // NEXT WEEK
```tidal
d12 $ gM3 $ gF3 -- TODO: DRINK ME <3
-- $ slice 16 (slow 8 $ rev $ run 16)
$ (note "<d3 d3 <g3!3 fs3> <fs3!3 a4>>")
# "moogBass"
# cut 12
# pan (slow 16 $ range 1 0.6 saw)
# room 0.8 # dry 0.4
```
20 cours Saint Vincent
Jeudi 22 mai
teasing3: |
# C'est jeudi :D
```tidal
d8 $ gF1 $ gM1 -- BROKEN BEAT | BREAKS STACK
$ loopAt 2 $ chop 16
$ midiOn "^92" (ply 2)
$ midiOn "^60" ( -- Broken Beat!
whenmod 8 "<7 7 7 3>" rev
. splice 8 "0 3 2 7 . [1 5]*<1!3 2> [4 6]*<1 2>")
$ midiOn "^36" (# n "29")
$ midiOn "^56" (# n "25")
$ "jungle_breaks:24"
```
18:30 live @ ENSAD Issy-les-Moulineaux
https://nech.pl/ensad for details
video: ""
audio: ""
archive: ""
tags: ["livecoding", "bazart", "ensad", "nujazz", "breakbeat", "paris", "issy"]
---
# BAZART @ ENSAD
Session live coding breakbeat/nujazz au sein de l'exposition BAZART Numerique à l'ENSAD Paris lors du festival VivaIssy.
Une exploration sonore à la croisée du breakbeat et du nujazz, avec un setup live coding TidalCycles.
## Programme
- 16:00 : Ouverture des portes, demos des travaux de l'ENSAD sur la VR et les UX hommes-machines
- 18:00 : Discours de lancement
- 18:30 : Live coding session
- 20:00 : ???
- 23:30 : PROFIT
# ParVagues Live Events System
## Quick Start
1. **Install dependencies**:
```bash
npm install marked prismjs react-masonry-css
```
2. **Create a new event**:
```bash
# Create markdown file in appropriate year directory
# Follow the _template.md format
cp content/lives/_template.md content/lives/2025/my-event-YYYY-MM-DD.md
```
3. **Add images**:
```bash
# Create directory matching event slug
mkdir -p public/images/parvagues/lives/2025/my-event-YYYY-MM-DD/
# Add jpg/png/gif/webp files to this directory
```
4. **Test locally**:
```bash
npm run dev
# Visit: http://localhost:3000/parvagues
# Check: http://localhost:3000/parvagues/live/my-event-YYYY-MM-DD
```
## How it works
### Event Lifecycle
1. **Pre-event**: Shows countdown with teasings based on days remaining
- J-14+: teasing1
- J-7 to J-3: teasing2
- J-3 to event: teasing3
2. **Post-event**: Shows full content with:
- Video/audio links (if provided)
- Image gallery (automatic)
- Collapsible teasings (for nostalgia)
### Event Metadata Structure
```yaml
---
title: "Event Title"
date: "2025-05-22"
time: "18:30-20:00"
location: "Venue Name"
address: "Full Address"
description: "Brief description"
ctaURL: "https://..."
ctaText: "RSVP"
# ... teasings, video, audio etc.
---
```
### File Structure
```
content/lives/
├── 2025/
│ ├── ensad-2025-05-22.md
│ └── algorave-lyon-2025-XX-XX.md
└── 2022/
└── (historical events)
public/images/parvagues/lives/
├── 2025/
│ ├── ensad-2025-05-22/
│ │ ├── photo1.jpg
│ │ └── photo2.jpg
│ └── algorave-lyon-2025-XX-XX/
└── 2022/
└── (historical images)
```
## URL Structure
- Landing: `/parvagues`
- Event page: `/parvagues/live/[slug]`
- Slug format: `event-name-YYYY-MM-DD`
## URL Shortener Integration
Create short URLs for events:
- `nech.pl/ensad``/parvagues/live/ensad-2025-05-22`
- `nech.pl/lyon``/parvagues/live/algorave-lyon-2025-XX-XX`
## Development Notes
- Page regenerates every minute for countdown accuracy
- Images are loaded dynamically from filesystem
- Support markdown in all text fields
- Code blocks use Haskell syntax highlighting
---
title: "Event Title"
date: "2025-XX-XX"
time: "XX:XX"
location: "Location Name"
address: "Full Address"
description: "Brief event description"
ctaURL: "https://nech.pl/shortlink"
ctaText: "RSVP / TICKETS"
teasing1: |
# Teasing 1 - J-14
Markdown content with code blocks, images, etc.
```tidal
d1 $ sound "cp"
```
teasing2: |
# Teasing 2 - J-7
Another teasing markdown content
teasing3: |
# Teasing 3 - J-3
Final teasing content
video: ""
audio: ""
archive: ""
tags: ["livecoding", "algorave", "nujazz"]
---
# Event Description
Main event content goes here...
# ParVagues Site Upgrade - Implementation Checklist
## Phase 1: File Structure Setup
- [x] Create `/content/lives/` directory
- [x] Create `/content/lives/2025/` subdirectory
- [x] Create `/content/lives/2022/` subdirectory
- [x] Create `/content/lives/_template.md`
- [x] Create event metadata files:
- [x] `/content/lives/2025/ensad-2025-05-22.md`
- [x] `/content/lives/2025/algorave-lyon-2025-XX-XX.md`
- [x] Create image directories:
- [x] `/public/images/parvagues/live-placeholder.jpg`
- [x] `/public/images/parvagues/code-sample-1.png`
- [x] `/public/images/parvagues/setup-placeholder.jpg`
- [x] `/public/images/parvagues/lives/2025/ensad-2025-05-22/`
- [x] `/public/images/parvagues/lives/2025/algorave-lyon-2025-XX-XX/`
## Phase 2: Dynamic Live Page Implementation
- [x] Create `/pages/parvagues/live/[id].js`
- [x] Implement getStaticPaths to read lives directory
- [x] Implement getStaticProps to load markdown metadata
- [x] Create countdown component
- [x] Create teasing display logic
- [x] Create post-event archive layout
- [x] Add collapsible teasing section
- [x] Implement gallery component (masonry layout)
- [ ] Add responsive design
## Phase 3: Landing Page Redesign
- [x] Backup existing `/pages/parvagues.js`
- [x] Create new hero section with cyberpunk theme
- [x] Add code sample section with highlight.js
- [x] Implement live events sidebar/list
- [x] Add dark theme with purple/pink gradients
- [x] Add subtle rain/glitch effects
- [ ] Create responsive layout
- [ ] Add scroll animations
## Phase 4: Content Creation
- [x] Create ENSAD event metadata
- [x] Create AlgoRave Lyon metadata (placeholder date)
- [x] Write teasing content for both events
- [x] Add placeholder images with descriptive names
- [x] Create sample TidalCycles code snippets
## Phase 5: Testing & Verification
- [ ] Test countdown functionality
- [ ] Test gallery display
- [ ] Test responsive design
- [ ] Verify markdown rendering
- [ ] Test live page routing
- [ ] Verify image loading
- [ ] Test date logic for pre/post event states
## Phase 6: Polish & Deployment
- [ ] Add accessibility attributes
- [ ] Optimize image loading
- [ ] Add loading states
- [ ] Test SEO metadata
- [ ] Verify all links work
- [ ] Final visual polish
## Dependencies to Install
- [x] marked (for markdown rendering)
- [x] prismjs (for syntax highlighting)
- [x] react-masonry-css (for gallery layout)
- [ ] NOTE: Run `npm install marked prismjs react-masonry-css`
---
*Last updated: May 11, 2025*
# Stratégie Web ParVagues - Mai 2025
## Vue d'ensemble
Mise en place d'un système complet de gestion d'événements live sur le site ParVagues avec :
- Landing page redessinée (cyberpunk aesthetic)
- Pages d'événements dynamiques avec countdown
- Système de teasings programmés
- Galerie de photos automatique
## Architecture Implémentée
### Structure des Fichiers
```
next/
├── pages/
│ ├── parvagues.js (nouvelle landing)
│ └── parvagues/live/[id].js (pages événements)
├── components/
│ └── ImageGallery.js (gallery masonry)
├── lib/
│ └── livesData.js (logique de chargement)
├── content/lives/
│ ├── 2025/
│ │ ├── ensad-2025-05-22.md
│ │ └── algorave-lyon-2025-XX-XX.md
│ └── _template.md
└── public/images/parvagues/lives/
└── [year]/[event-slug]/
```
### Fonctionnalités Clés
#### 1. Système d'Events Live
- **URL pattern**: `/parvagues/live/[slug]`
- **Countdown dynamique** : J-14, J-7, J-3 avec teasings différents
- **Mode pre/post** : Affichage conditionnel selon la date
- **Metadata YAML** : title, date, location, teasings, etc.
#### 2. Landing Page
- **Cyberpunk design** : Dark theme + purple/pink gradients
- **Rain effects** : Animations canvas pour atmosphère
- **Code samples** : Syntax highlighting TidalCycles
- **Events sidebar** : Liste des événements à venir/passés
#### 3. Galerie de Photos
- **Masonry layout** : Disposition automatique des images
- **Lightbox** : Vue agrandie des photos
- **Auto-detection** : Scan du dossier pour images
## Événements Programmés
### ENSAD Paris - 22 Mai 2025
- **Date**: 2025-05-22, 18:30-20:00
- **URL**: `/parvagues/live/ensad-2025-05-22`
- **Short link**: `nech.pl/ensad`
- **Teasings**: 3 phases programmées avec code TidalCycles
### AlgoRave Lyon - Date TBD
- **URL**: `/parvagues/live/algorave-lyon-2025-XX-XX`
- **Short link**: `nech.pl/lyon`
- **Status**: Template créé, à finaliser
## Workflow d'Utilisation
### Ajouter un Nouvel Événement
1. **Créer le fichier markdown**:
```bash
cp content/lives/_template.md content/lives/2025/mon-event-YYYY-MM-DD.md
```
2. **Ajouter les images**:
```bash
mkdir -p public/images/parvagues/lives/2025/mon-event-YYYY-MM-DD/
# Puis copier les photos (jpg/png/gif/webp)
```
3. **Configurer l'URL courte**:
- Créer `nech.pl/monlien``/parvagues/live/mon-event-YYYY-MM-DD`
## Stratégie de Communication
### Timeline Promo ENSAD
- **J-7**: Post Instagram avec teasing1 + lien nech.pl/ensad
- **J-3**: Stories avec countdown
- **J-DAY**: Live updates sur Instagram/Bluesky/Mastodon
### Content Strategy
- **Pre-event**: Focus sur l'attente, mystery, code samples
- **Post-event**: Archives, photos, liens streaming
- **Teasings**: Progression narrative avec révélations
## Next Steps
### Technique
1. **Installer dépendances**:
```bash
npm install marked prismjs react-masonry-css
```
2. **Remplacer placeholders** par vraies images
3. **Setup URL shortener** pour nech.pl/{ensad,lyon,parvagues}
### Content
1. **Photos ENSAD**: Préparer visuels pour le 22 mai
2. **Code samples**: Sélectionner meilleurs exemples TidalCycles
3. **Bio/description**: Finaliser texte de présentation
### Marketing
1. **Cross-platform**: Instagram → Mastodon → Bluesky
2. **Tracking**: Mesurer trafic via URL courtes
3. **Community**: Engager Cookie collective
## Architecture Technique
### Frontend
- **Next.js** : Static generation avec revalidation
- **Prism.js** : Syntax highlighting pour code Haskell
- **Masonry CSS** : Layout gallery responsive
- **Canvas animations** : Effets cyberpunk
### Data Flow
1. Pages pre-renders avec getStaticProps
2. Countdown updates côté client
3. Images chargées dynamiquement
4. Revalidation toutes les minutes
## Optimisations SEO
### Meta Tags
- Title dynamique par événement
- Description basée sur metadata
- Open Graph pour partage social
### Performance
- Images lazy loading
- Static generation
- Minimal JavaScript
## Maintenance
### Ajout d'Événement
- Simple : Copier template + ajouter images
- Auto-détection par filesystem
- Zero config pour nouveaux événements
### Archivage
- Passage auto pre→post event
- Photos visibles immédiatement
- Teasings cachés mais accessibles
---
**Status**: Prêt pour déploiement
**Last Update**: 11 Mai 2025
**Dependencies**: `marked prismjs react-masonry-css`
# Dependencies to Install
These packages need to be installed for the ParVagues site upgrade:
```bash
npm install marked prismjs react-masonry-css
```
## New dependencies:
- **marked**: For markdown rendering
- **prismjs**: For syntax highlighting
- **react-masonry-css**: For gallery layout
## Already installed:
- **gray-matter**: For frontmatter parsing ✓
- **next**: For the Next.js framework ✓
- **react**: For React components ✓
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
const livesDirectory = path.join(process.cwd(), 'content/lives');
export function getAllLives() {
const lives = [];
// Read all years
const years = fs.readdirSync(livesDirectory).filter(item =>
fs.statSync(path.join(livesDirectory, item)).isDirectory()
);
years.forEach(year => {
const yearPath = path.join(livesDirectory, year);
const yearFiles = fs.readdirSync(yearPath);
yearFiles.forEach(fileName => {
if (fileName.endsWith('.md')) {
const slug = fileName.replace(/\.md$/, '');
const fullPath = path.join(yearPath, fileName);
const fileContents = fs.readFileSync(fullPath, 'utf8');
const { data } = matter(fileContents);
lives.push({
slug,
year,
...data,
});
}
});
});
// Sort by date, most recent first
return lives.sort((a, b) => new Date(b.date) - new Date(a.date));
}
export async function getLiveData(slug) {
// Find the file across all year directories
const years = fs.readdirSync(livesDirectory).filter(item =>
fs.statSync(path.join(livesDirectory, item)).isDirectory()
);
for (const year of years) {
const filePath = path.join(livesDirectory, year, `${slug}.md`);
if (fs.existsSync(filePath)) {
const fileContents = fs.readFileSync(filePath, 'utf8');
const { data, content } = matter(fileContents);
return {
slug,
year,
frontmatter: data,
content,
};
}
}
throw new Error(`Live with slug "${slug}" not found`);
}
export function getLivesImages(slug) {
const years = fs.readdirSync(livesDirectory).filter(item =>
fs.statSync(path.join(livesDirectory, item)).isDirectory()
);
for (const year of years) {
const imagesPath = path.join(process.cwd(), 'public/images/parvagues/lives', year, slug);
if (fs.existsSync(imagesPath)) {
const files = fs.readdirSync(imagesPath);
return files
.filter(file => /\.(jpg|jpeg|png|gif|webp)$/i.test(file))
.map(file => `/images/parvagues/lives/${year}/${slug}/${file}`);
}
}
return [];
}
...@@ -8,18 +8,26 @@ ...@@ -8,18 +8,26 @@
"name": "pln-www", "name": "pln-www",
"version": "0.2.0", "version": "0.2.0",
"dependencies": { "dependencies": {
"@tailwindcss/aspect-ratio": "^0.4.2",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"date-fns": "^3.3.1", "date-fns": "^3.3.1",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"hydra-synth": "^1.3.29", "hydra-synth": "^1.3.29",
"marked": "^15.0.11",
"next": "^15.3.0", "next": "^15.3.0",
"prismjs": "^1.30.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^5.5.0",
"react-instantsearch": "^7.15.7",
"react-instantsearch-dom": "^6.40.4",
"react-masonry-css": "^1.0.16",
"react-player": "^2.14.1", "react-player": "^2.14.1",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
"remark": "^14.0.0", "remark": "^14.0.0",
"remark-html": "^15.0.0" "remark-html": "^15.0.0",
"swiper": "^11.2.6"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.2.61", "@types/react": "^18.2.61",
...@@ -29,6 +37,175 @@ ...@@ -29,6 +37,175 @@
"node": ">=18.17.0" "node": ">=18.17.0"
} }
}, },
"node_modules/@algolia/cache-browser-local-storage": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz",
"integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/cache-common": "4.24.0"
}
},
"node_modules/@algolia/cache-common": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz",
"integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==",
"license": "MIT",
"peer": true
},
"node_modules/@algolia/cache-in-memory": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz",
"integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/cache-common": "4.24.0"
}
},
"node_modules/@algolia/client-account": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz",
"integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/client-common": "4.24.0",
"@algolia/client-search": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/@algolia/client-analytics": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz",
"integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/client-common": "4.24.0",
"@algolia/client-search": "4.24.0",
"@algolia/requester-common": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/@algolia/client-common": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
"integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/requester-common": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/@algolia/client-personalization": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz",
"integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/client-common": "4.24.0",
"@algolia/requester-common": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/@algolia/client-search": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
"integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/client-common": "4.24.0",
"@algolia/requester-common": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/@algolia/events": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz",
"integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==",
"license": "MIT"
},
"node_modules/@algolia/logger-common": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz",
"integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==",
"license": "MIT",
"peer": true
},
"node_modules/@algolia/logger-console": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz",
"integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/logger-common": "4.24.0"
}
},
"node_modules/@algolia/recommend": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz",
"integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/cache-browser-local-storage": "4.24.0",
"@algolia/cache-common": "4.24.0",
"@algolia/cache-in-memory": "4.24.0",
"@algolia/client-common": "4.24.0",
"@algolia/client-search": "4.24.0",
"@algolia/logger-common": "4.24.0",
"@algolia/logger-console": "4.24.0",
"@algolia/requester-browser-xhr": "4.24.0",
"@algolia/requester-common": "4.24.0",
"@algolia/requester-node-http": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/@algolia/requester-browser-xhr": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz",
"integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/requester-common": "4.24.0"
}
},
"node_modules/@algolia/requester-common": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz",
"integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==",
"license": "MIT",
"peer": true
},
"node_modules/@algolia/requester-node-http": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz",
"integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/requester-common": "4.24.0"
}
},
"node_modules/@algolia/transporter": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz",
"integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/cache-common": "4.24.0",
"@algolia/logger-common": "4.24.0",
"@algolia/requester-common": "4.24.0"
}
},
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.19.4", "version": "7.19.4",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
...@@ -42,9 +219,9 @@ ...@@ -42,9 +219,9 @@
} }
}, },
"node_modules/@emnapi/runtime": { "node_modules/@emnapi/runtime": {
"version": "1.4.0", "version": "1.4.3",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
"integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
...@@ -577,6 +754,7 @@ ...@@ -577,6 +754,7 @@
"version": "15.3.1", "version": "15.3.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz",
"integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@rollup/pluginutils": "^5.0.1", "@rollup/pluginutils": "^5.0.1",
"@types/resolve": "1.20.2", "@types/resolve": "1.20.2",
...@@ -600,6 +778,7 @@ ...@@ -600,6 +778,7 @@
"version": "5.1.4", "version": "5.1.4",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
"integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/estree": "^1.0.0", "@types/estree": "^1.0.0",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
...@@ -632,18 +811,41 @@ ...@@ -632,18 +811,41 @@
"tslib": "^2.8.0" "tslib": "^2.8.0"
} }
}, },
"node_modules/@tailwindcss/aspect-ratio": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz",
"integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==",
"license": "MIT",
"peerDependencies": {
"tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
}
},
"node_modules/@types/debug": { "node_modules/@types/debug": {
"version": "4.1.12", "version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/ms": "*" "@types/ms": "*"
} }
}, },
"node_modules/@types/dom-speech-recognition": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.1.tgz",
"integrity": "sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw==",
"license": "MIT"
},
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
"license": "MIT"
},
"node_modules/@types/google.maps": {
"version": "3.58.1",
"resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz",
"integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==",
"license": "MIT"
}, },
"node_modules/@types/hast": { "node_modules/@types/hast": {
"version": "2.3.4", "version": "2.3.4",
...@@ -654,10 +856,17 @@ ...@@ -654,10 +856,17 @@
"@types/unist": "*" "@types/unist": "*"
} }
}, },
"node_modules/@types/hogan.js": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.5.tgz",
"integrity": "sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA==",
"license": "MIT"
},
"node_modules/@types/mdast": { "node_modules/@types/mdast": {
"version": "3.0.15", "version": "3.0.15",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
"integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2" "@types/unist": "^2"
} }
...@@ -665,17 +874,20 @@ ...@@ -665,17 +874,20 @@
"node_modules/@types/mdast/node_modules/@types/unist": { "node_modules/@types/mdast/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/@types/ms": { "node_modules/@types/ms": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"license": "MIT"
}, },
"node_modules/@types/parse5": { "node_modules/@types/parse5": {
"version": "6.0.3", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
"integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
"license": "MIT"
}, },
"node_modules/@types/prop-types": { "node_modules/@types/prop-types": {
"version": "15.7.5", "version": "15.7.5",
...@@ -684,6 +896,12 @@ ...@@ -684,6 +896,12 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/qs": {
"version": "6.9.18",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
"integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==",
"license": "MIT"
},
"node_modules/@types/react": { "node_modules/@types/react": {
"version": "18.3.20", "version": "18.3.20",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz",
...@@ -698,7 +916,8 @@ ...@@ -698,7 +916,8 @@
"node_modules/@types/resolve": { "node_modules/@types/resolve": {
"version": "1.20.2", "version": "1.20.2",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
"integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
"license": "MIT"
}, },
"node_modules/@types/unist": { "node_modules/@types/unist": {
"version": "3.0.3", "version": "3.0.3",
...@@ -706,6 +925,48 @@ ...@@ -706,6 +925,48 @@
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"license": "ISC"
},
"node_modules/algoliasearch": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz",
"integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/cache-browser-local-storage": "4.24.0",
"@algolia/cache-common": "4.24.0",
"@algolia/cache-in-memory": "4.24.0",
"@algolia/client-account": "4.24.0",
"@algolia/client-analytics": "4.24.0",
"@algolia/client-common": "4.24.0",
"@algolia/client-personalization": "4.24.0",
"@algolia/client-search": "4.24.0",
"@algolia/logger-common": "4.24.0",
"@algolia/logger-console": "4.24.0",
"@algolia/recommend": "4.24.0",
"@algolia/requester-browser-xhr": "4.24.0",
"@algolia/requester-common": "4.24.0",
"@algolia/requester-node-http": "4.24.0",
"@algolia/transporter": "4.24.0"
}
},
"node_modules/algoliasearch-helper": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz",
"integrity": "sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw==",
"license": "MIT",
"dependencies": {
"@algolia/events": "^4.0.1"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 6"
}
},
"node_modules/argparse": { "node_modules/argparse": {
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
...@@ -718,12 +979,14 @@ ...@@ -718,12 +979,14 @@
"node_modules/babel-plugin-add-module-exports": { "node_modules/babel-plugin-add-module-exports": {
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz",
"integrity": "sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g==" "integrity": "sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g==",
"license": "MIT"
}, },
"node_modules/bail": { "node_modules/bail": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
"integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -752,6 +1015,7 @@ ...@@ -752,6 +1015,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
"license": "MIT",
"dependencies": { "dependencies": {
"buffer-alloc-unsafe": "^1.1.0", "buffer-alloc-unsafe": "^1.1.0",
"buffer-fill": "^1.0.0" "buffer-fill": "^1.0.0"
...@@ -760,17 +1024,20 @@ ...@@ -760,17 +1024,20 @@
"node_modules/buffer-alloc-unsafe": { "node_modules/buffer-alloc-unsafe": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
"license": "MIT"
}, },
"node_modules/buffer-fill": { "node_modules/buffer-fill": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
"integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
"license": "MIT"
}, },
"node_modules/buffer-from": { "node_modules/buffer-from": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"license": "MIT"
}, },
"node_modules/busboy": { "node_modules/busboy": {
"version": "1.6.0", "version": "1.6.0",
...@@ -807,6 +1074,7 @@ ...@@ -807,6 +1074,7 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -826,6 +1094,7 @@ ...@@ -826,6 +1094,7 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
"integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -921,7 +1190,8 @@ ...@@ -921,7 +1190,8 @@
"node_modules/core-util-is": { "node_modules/core-util-is": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.1.1", "version": "3.1.1",
...@@ -944,6 +1214,7 @@ ...@@ -944,6 +1214,7 @@
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/dct/-/dct-0.1.0.tgz", "resolved": "https://registry.npmjs.org/dct/-/dct-0.1.0.tgz",
"integrity": "sha512-/uUtEniuMq1aUxvLAoDtAduyl12oM1zhA/le2f83UFN/9+4KDHXFB6znEfoj5SDDLiTpUTr26NpxC7t8IFOYhQ==", "integrity": "sha512-/uUtEniuMq1aUxvLAoDtAduyl12oM1zhA/le2f83UFN/9+4KDHXFB6znEfoj5SDDLiTpUTr26NpxC7t8IFOYhQ==",
"license": "MIT",
"engines": { "engines": {
"node": ">=0.12.0" "node": ">=0.12.0"
} }
...@@ -952,6 +1223,7 @@ ...@@ -952,6 +1223,7 @@
"version": "4.4.0", "version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"license": "MIT",
"dependencies": { "dependencies": {
"ms": "^2.1.3" "ms": "^2.1.3"
}, },
...@@ -968,6 +1240,7 @@ ...@@ -968,6 +1240,7 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
"integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
"license": "MIT",
"dependencies": { "dependencies": {
"character-entities": "^2.0.0" "character-entities": "^2.0.0"
}, },
...@@ -980,6 +1253,7 @@ ...@@ -980,6 +1253,7 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
"integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -998,6 +1272,7 @@ ...@@ -998,6 +1272,7 @@
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
...@@ -1016,6 +1291,7 @@ ...@@ -1016,6 +1291,7 @@
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"license": "BSD-3-Clause",
"engines": { "engines": {
"node": ">=0.3.1" "node": ">=0.3.1"
} }
...@@ -1036,12 +1312,14 @@ ...@@ -1036,12 +1312,14 @@
"node_modules/estree-walker": { "node_modules/estree-walker": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT"
}, },
"node_modules/events": { "node_modules/events": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==",
"license": "MIT",
"engines": { "engines": {
"node": ">=0.4.x" "node": ">=0.4.x"
} }
...@@ -1049,7 +1327,8 @@ ...@@ -1049,7 +1327,8 @@
"node_modules/extend": { "node_modules/extend": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
}, },
"node_modules/extend-shallow": { "node_modules/extend-shallow": {
"version": "2.0.1", "version": "2.0.1",
...@@ -1080,6 +1359,7 @@ ...@@ -1080,6 +1359,7 @@
"version": "0.0.4", "version": "0.0.4",
"resolved": "https://registry.npmjs.org/fftjs/-/fftjs-0.0.4.tgz", "resolved": "https://registry.npmjs.org/fftjs/-/fftjs-0.0.4.tgz",
"integrity": "sha512-nIWxQyth1LVD6NH8a+YZUv+McjzbOY6dMe4wv6Pq5cGfP+c8Rd1T8Dsd50DCWlNgzSqA3y9lOkpD6dZD3qHa1A==", "integrity": "sha512-nIWxQyth1LVD6NH8a+YZUv+McjzbOY6dMe4wv6Pq5cGfP+c8Rd1T8Dsd50DCWlNgzSqA3y9lOkpD6dZD3qHa1A==",
"license": "MIT",
"dependencies": { "dependencies": {
"babel-plugin-add-module-exports": "^0.2.1" "babel-plugin-add-module-exports": "^0.2.1"
} }
...@@ -1096,6 +1376,7 @@ ...@@ -1096,6 +1376,7 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
...@@ -1119,6 +1400,7 @@ ...@@ -1119,6 +1400,7 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"function-bind": "^1.1.2" "function-bind": "^1.1.2"
}, },
...@@ -1130,6 +1412,7 @@ ...@@ -1130,6 +1412,7 @@
"version": "7.1.2", "version": "7.1.2",
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz",
"integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0", "@types/hast": "^2.0.0",
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
...@@ -1147,12 +1430,14 @@ ...@@ -1147,12 +1430,14 @@
"node_modules/hast-util-from-parse5/node_modules/@types/unist": { "node_modules/hast-util-from-parse5/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/hast-util-from-parse5/node_modules/comma-separated-tokens": { "node_modules/hast-util-from-parse5/node_modules/comma-separated-tokens": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1162,6 +1447,7 @@ ...@@ -1162,6 +1447,7 @@
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz",
"integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0" "@types/hast": "^2.0.0"
}, },
...@@ -1174,6 +1460,7 @@ ...@@ -1174,6 +1460,7 @@
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz",
"integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0", "@types/hast": "^2.0.0",
"comma-separated-tokens": "^2.0.0", "comma-separated-tokens": "^2.0.0",
...@@ -1190,6 +1477,7 @@ ...@@ -1190,6 +1477,7 @@
"version": "6.5.0", "version": "6.5.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
"integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1199,6 +1487,7 @@ ...@@ -1199,6 +1487,7 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1218,6 +1507,7 @@ ...@@ -1218,6 +1507,7 @@
"version": "7.2.3", "version": "7.2.3",
"resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz",
"integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0", "@types/hast": "^2.0.0",
"@types/parse5": "^6.0.0", "@types/parse5": "^6.0.0",
...@@ -1240,6 +1530,7 @@ ...@@ -1240,6 +1530,7 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz", "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz",
"integrity": "sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==", "integrity": "sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0" "@types/hast": "^2.0.0"
}, },
...@@ -1252,6 +1543,7 @@ ...@@ -1252,6 +1543,7 @@
"version": "8.0.4", "version": "8.0.4",
"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz",
"integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==", "integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0", "@types/hast": "^2.0.0",
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
...@@ -1273,12 +1565,14 @@ ...@@ -1273,12 +1565,14 @@
"node_modules/hast-util-to-html/node_modules/@types/unist": { "node_modules/hast-util-to-html/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/hast-util-to-html/node_modules/comma-separated-tokens": { "node_modules/hast-util-to-html/node_modules/comma-separated-tokens": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1288,6 +1582,7 @@ ...@@ -1288,6 +1582,7 @@
"version": "6.5.0", "version": "6.5.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
"integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1297,6 +1592,7 @@ ...@@ -1297,6 +1592,7 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1306,6 +1602,7 @@ ...@@ -1306,6 +1602,7 @@
"version": "7.1.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz",
"integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0", "@types/hast": "^2.0.0",
"comma-separated-tokens": "^2.0.0", "comma-separated-tokens": "^2.0.0",
...@@ -1323,6 +1620,7 @@ ...@@ -1323,6 +1620,7 @@
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1332,6 +1630,7 @@ ...@@ -1332,6 +1630,7 @@
"version": "6.5.0", "version": "6.5.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
"integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1341,6 +1640,7 @@ ...@@ -1341,6 +1640,7 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1350,6 +1650,7 @@ ...@@ -1350,6 +1650,7 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
"integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
"license": "MIT",
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
...@@ -1387,10 +1688,29 @@ ...@@ -1387,10 +1688,29 @@
"integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
"license": "CC0-1.0" "license": "CC0-1.0"
}, },
"node_modules/hogan.js": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz",
"integrity": "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==",
"dependencies": {
"mkdirp": "0.3.0",
"nopt": "1.0.10"
},
"bin": {
"hulk": "bin/hulk"
}
},
"node_modules/htm": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz",
"integrity": "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==",
"license": "Apache-2.0"
},
"node_modules/html-void-elements": { "node_modules/html-void-elements": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
"integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1400,6 +1720,7 @@ ...@@ -1400,6 +1720,7 @@
"version": "1.3.29", "version": "1.3.29",
"resolved": "https://registry.npmjs.org/hydra-synth/-/hydra-synth-1.3.29.tgz", "resolved": "https://registry.npmjs.org/hydra-synth/-/hydra-synth-1.3.29.tgz",
"integrity": "sha512-KK1wMGpo9AuVivvD9SP7ukPS7T/rMaYA7XMlnRF3oFbTw9u4l4aVTyexG+KmCd5XDD/4GulR1jVzySZlAuGPCw==", "integrity": "sha512-KK1wMGpo9AuVivvD9SP7ukPS7T/rMaYA7XMlnRF3oFbTw9u4l4aVTyexG+KmCd5XDD/4GulR1jVzySZlAuGPCw==",
"license": "AGPL",
"dependencies": { "dependencies": {
"meyda": "^5.5.1", "meyda": "^5.5.1",
"raf-loop": "^1.1.3", "raf-loop": "^1.1.3",
...@@ -1409,7 +1730,40 @@ ...@@ -1409,7 +1730,40 @@
"node_modules/inherits": { "node_modules/inherits": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/instantsearch-ui-components": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/instantsearch-ui-components/-/instantsearch-ui-components-0.11.1.tgz",
"integrity": "sha512-ZqUbJYYgObQ47J08ftXV1KNC1vdEoiD4/49qrkCdW46kRzLxLgYXJGuEuk48DQwK4aBtIoccgTyfbMGfcqNjxg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.1.2"
}
},
"node_modules/instantsearch.js": {
"version": "4.78.3",
"resolved": "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.78.3.tgz",
"integrity": "sha512-0i7vyX9jHEIKSfhu+CZHL/ySnbMAe7e98YUJiZX5D7AiXo2WvAPbnV/3CXIPR0whNWOXKGvlv7Ji7Pt4Yrn+Aw==",
"license": "MIT",
"dependencies": {
"@algolia/events": "^4.0.1",
"@types/dom-speech-recognition": "^0.0.1",
"@types/google.maps": "^3.55.12",
"@types/hogan.js": "^3.0.0",
"@types/qs": "^6.5.3",
"algoliasearch-helper": "3.25.0",
"hogan.js": "^3.0.2",
"htm": "^3.0.0",
"instantsearch-ui-components": "0.11.1",
"preact": "^10.10.0",
"qs": "^6.5.1 < 6.10",
"search-insights": "^2.17.2"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 6"
}
}, },
"node_modules/is-alphabetical": { "node_modules/is-alphabetical": {
"version": "1.0.4", "version": "1.0.4",
...@@ -1460,6 +1814,7 @@ ...@@ -1460,6 +1814,7 @@
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
], ],
"license": "MIT",
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
...@@ -1468,6 +1823,7 @@ ...@@ -1468,6 +1823,7 @@
"version": "2.16.1", "version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"license": "MIT",
"dependencies": { "dependencies": {
"hasown": "^2.0.2" "hasown": "^2.0.2"
}, },
...@@ -1510,12 +1866,14 @@ ...@@ -1510,12 +1866,14 @@
"node_modules/is-module": { "node_modules/is-module": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
"integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
"license": "MIT"
}, },
"node_modules/is-plain-obj": { "node_modules/is-plain-obj": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"license": "MIT",
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
...@@ -1526,7 +1884,8 @@ ...@@ -1526,7 +1884,8 @@
"node_modules/isarray": { "node_modules/isarray": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"license": "MIT"
}, },
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
...@@ -1560,6 +1919,7 @@ ...@@ -1560,6 +1919,7 @@
"version": "4.1.5", "version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
...@@ -1574,6 +1934,7 @@ ...@@ -1574,6 +1934,7 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
"integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -1605,10 +1966,23 @@ ...@@ -1605,10 +1966,23 @@
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
} }
}, },
"node_modules/marked": {
"version": "15.0.11",
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.11.tgz",
"integrity": "sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/mdast-util-definitions": { "node_modules/mdast-util-definitions": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
"integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
...@@ -1622,12 +1996,14 @@ ...@@ -1622,12 +1996,14 @@
"node_modules/mdast-util-definitions/node_modules/@types/unist": { "node_modules/mdast-util-definitions/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/mdast-util-from-markdown": { "node_modules/mdast-util-from-markdown": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz",
"integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
...@@ -1650,12 +2026,14 @@ ...@@ -1650,12 +2026,14 @@
"node_modules/mdast-util-from-markdown/node_modules/@types/unist": { "node_modules/mdast-util-from-markdown/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/mdast-util-phrasing": { "node_modules/mdast-util-phrasing": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
"integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"unist-util-is": "^5.0.0" "unist-util-is": "^5.0.0"
...@@ -1669,6 +2047,7 @@ ...@@ -1669,6 +2047,7 @@
"version": "12.3.0", "version": "12.3.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
"integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/hast": "^2.0.0", "@types/hast": "^2.0.0",
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
...@@ -1688,6 +2067,7 @@ ...@@ -1688,6 +2067,7 @@
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
"integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
...@@ -1706,12 +2086,14 @@ ...@@ -1706,12 +2086,14 @@
"node_modules/mdast-util-to-markdown/node_modules/@types/unist": { "node_modules/mdast-util-to-markdown/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/mdast-util-to-string": { "node_modules/mdast-util-to-string": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
"integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0" "@types/mdast": "^3.0.0"
}, },
...@@ -1730,6 +2112,10 @@ ...@@ -1730,6 +2112,10 @@
"version": "5.6.3", "version": "5.6.3",
"resolved": "https://registry.npmjs.org/meyda/-/meyda-5.6.3.tgz", "resolved": "https://registry.npmjs.org/meyda/-/meyda-5.6.3.tgz",
"integrity": "sha512-fAdwfzIi1WDoL0idUQvCD7dZ7EN74FYH83G+jZQO3Nr9yOEBtzFvcMg2KLdLlu6psSP8XFlO0kYynG5o/E681Q==", "integrity": "sha512-fAdwfzIi1WDoL0idUQvCD7dZ7EN74FYH83G+jZQO3Nr9yOEBtzFvcMg2KLdLlu6psSP8XFlO0kYynG5o/E681Q==",
"license": "MIT",
"workspaces": [
"docs"
],
"dependencies": { "dependencies": {
"@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-node-resolve": "^15.2.3",
"dct": "0.1.0", "dct": "0.1.0",
...@@ -1755,6 +2141,7 @@ ...@@ -1755,6 +2141,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"@types/debug": "^4.0.0", "@types/debug": "^4.0.0",
"debug": "^4.0.0", "debug": "^4.0.0",
...@@ -1789,6 +2176,7 @@ ...@@ -1789,6 +2176,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"decode-named-character-reference": "^1.0.0", "decode-named-character-reference": "^1.0.0",
"micromark-factory-destination": "^1.0.0", "micromark-factory-destination": "^1.0.0",
...@@ -1822,6 +2210,7 @@ ...@@ -1822,6 +2210,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
"micromark-util-symbol": "^1.0.0", "micromark-util-symbol": "^1.0.0",
...@@ -1842,6 +2231,7 @@ ...@@ -1842,6 +2231,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
"micromark-util-symbol": "^1.0.0", "micromark-util-symbol": "^1.0.0",
...@@ -1863,6 +2253,7 @@ ...@@ -1863,6 +2253,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
"micromark-util-types": "^1.0.0" "micromark-util-types": "^1.0.0"
...@@ -1882,6 +2273,7 @@ ...@@ -1882,6 +2273,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-factory-space": "^1.0.0", "micromark-factory-space": "^1.0.0",
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
...@@ -1903,6 +2295,7 @@ ...@@ -1903,6 +2295,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-factory-space": "^1.0.0", "micromark-factory-space": "^1.0.0",
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
...@@ -1924,6 +2317,7 @@ ...@@ -1924,6 +2317,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-symbol": "^1.0.0", "micromark-util-symbol": "^1.0.0",
"micromark-util-types": "^1.0.0" "micromark-util-types": "^1.0.0"
...@@ -1943,6 +2337,7 @@ ...@@ -1943,6 +2337,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-symbol": "^1.0.0" "micromark-util-symbol": "^1.0.0"
} }
...@@ -1961,6 +2356,7 @@ ...@@ -1961,6 +2356,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
"micromark-util-symbol": "^1.0.0", "micromark-util-symbol": "^1.0.0",
...@@ -1981,6 +2377,7 @@ ...@@ -1981,6 +2377,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-chunked": "^1.0.0", "micromark-util-chunked": "^1.0.0",
"micromark-util-types": "^1.0.0" "micromark-util-types": "^1.0.0"
...@@ -2000,6 +2397,7 @@ ...@@ -2000,6 +2397,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-symbol": "^1.0.0" "micromark-util-symbol": "^1.0.0"
} }
...@@ -2018,6 +2416,7 @@ ...@@ -2018,6 +2416,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"decode-named-character-reference": "^1.0.0", "decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
...@@ -2038,7 +2437,8 @@ ...@@ -2038,7 +2437,8 @@
"type": "OpenCollective", "type": "OpenCollective",
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
] ],
"license": "MIT"
}, },
"node_modules/micromark-util-html-tag-name": { "node_modules/micromark-util-html-tag-name": {
"version": "1.2.0", "version": "1.2.0",
...@@ -2053,7 +2453,8 @@ ...@@ -2053,7 +2453,8 @@
"type": "OpenCollective", "type": "OpenCollective",
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
] ],
"license": "MIT"
}, },
"node_modules/micromark-util-normalize-identifier": { "node_modules/micromark-util-normalize-identifier": {
"version": "1.1.0", "version": "1.1.0",
...@@ -2069,6 +2470,7 @@ ...@@ -2069,6 +2470,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-symbol": "^1.0.0" "micromark-util-symbol": "^1.0.0"
} }
...@@ -2087,6 +2489,7 @@ ...@@ -2087,6 +2489,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-types": "^1.0.0" "micromark-util-types": "^1.0.0"
} }
...@@ -2105,6 +2508,7 @@ ...@@ -2105,6 +2508,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-character": "^1.0.0", "micromark-util-character": "^1.0.0",
"micromark-util-encode": "^1.0.0", "micromark-util-encode": "^1.0.0",
...@@ -2125,6 +2529,7 @@ ...@@ -2125,6 +2529,7 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"micromark-util-chunked": "^1.0.0", "micromark-util-chunked": "^1.0.0",
"micromark-util-symbol": "^1.0.0", "micromark-util-symbol": "^1.0.0",
...@@ -2145,7 +2550,8 @@ ...@@ -2145,7 +2550,8 @@
"type": "OpenCollective", "type": "OpenCollective",
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
] ],
"license": "MIT"
}, },
"node_modules/micromark-util-types": { "node_modules/micromark-util-types": {
"version": "1.1.0", "version": "1.1.0",
...@@ -2160,12 +2566,24 @@ ...@@ -2160,12 +2566,24 @@
"type": "OpenCollective", "type": "OpenCollective",
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
] ],
"license": "MIT"
},
"node_modules/mkdirp": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
"integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==",
"deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
"license": "MIT/X11",
"engines": {
"node": "*"
}
}, },
"node_modules/mri": { "node_modules/mri": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
"integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
"license": "MIT",
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
...@@ -2173,7 +2591,8 @@ ...@@ -2173,7 +2591,8 @@
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.11", "version": "3.3.11",
...@@ -2251,10 +2670,26 @@ ...@@ -2251,10 +2670,26 @@
"version": "0.3.2", "version": "0.3.2",
"resolved": "https://registry.npmjs.org/node-getopt/-/node-getopt-0.3.2.tgz", "resolved": "https://registry.npmjs.org/node-getopt/-/node-getopt-0.3.2.tgz",
"integrity": "sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q==", "integrity": "sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q==",
"license": "MIT",
"engines": { "engines": {
"node": ">= 0.6.0" "node": ">= 0.6.0"
} }
}, },
"node_modules/nopt": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
"license": "MIT",
"dependencies": {
"abbrev": "1"
},
"bin": {
"nopt": "bin/nopt.js"
},
"engines": {
"node": "*"
}
},
"node_modules/object-assign": { "node_modules/object-assign": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
...@@ -2285,17 +2720,20 @@ ...@@ -2285,17 +2720,20 @@
"node_modules/parse5": { "node_modules/parse5": {
"version": "6.0.1", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"license": "MIT"
}, },
"node_modules/path-parse": { "node_modules/path-parse": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"license": "MIT"
}, },
"node_modules/performance-now": { "node_modules/performance-now": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"license": "MIT"
}, },
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.1.1", "version": "1.1.1",
...@@ -2307,6 +2745,7 @@ ...@@ -2307,6 +2745,7 @@
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"license": "MIT",
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
...@@ -2342,10 +2781,20 @@ ...@@ -2342,10 +2781,20 @@
"node": "^10 || ^12 || >=14" "node": "^10 || ^12 || >=14"
} }
}, },
"node_modules/preact": {
"version": "10.26.6",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.26.6.tgz",
"integrity": "sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/preact"
}
},
"node_modules/prismjs": { "node_modules/prismjs": {
"version": "1.29.0", "version": "1.30.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
"integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
...@@ -2375,10 +2824,23 @@ ...@@ -2375,10 +2824,23 @@
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
} }
}, },
"node_modules/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/raf": { "node_modules/raf": {
"version": "3.4.1", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
"license": "MIT",
"dependencies": { "dependencies": {
"performance-now": "^2.1.0" "performance-now": "^2.1.0"
} }
...@@ -2387,6 +2849,7 @@ ...@@ -2387,6 +2849,7 @@
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/raf-loop/-/raf-loop-1.1.3.tgz", "resolved": "https://registry.npmjs.org/raf-loop/-/raf-loop-1.1.3.tgz",
"integrity": "sha512-fcIuuIdjbD6OB0IFw4d+cjqdrzDorKkIpwOiSnfU4Tht5PTFiJutR8hnCOGslYqZDyIzwpF5WnwbnTTuo9uUUA==", "integrity": "sha512-fcIuuIdjbD6OB0IFw4d+cjqdrzDorKkIpwOiSnfU4Tht5PTFiJutR8hnCOGslYqZDyIzwpF5WnwbnTTuo9uUUA==",
"license": "MIT",
"dependencies": { "dependencies": {
"events": "^1.0.2", "events": "^1.0.2",
"inherits": "^2.0.1", "inherits": "^2.0.1",
...@@ -2425,12 +2888,111 @@ ...@@ -2425,12 +2888,111 @@
"integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/react-icons": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
"integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
"license": "MIT",
"peerDependencies": {
"react": "*"
}
},
"node_modules/react-instantsearch": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/react-instantsearch/-/react-instantsearch-7.15.7.tgz",
"integrity": "sha512-UX81UyyuCe0uoAes9M8f7NKv1CkAdRWw1QgR+DucGWqnVeE9srntPprtNbMBGzcXUuV4wur8AP6iRYXn5tm+Vg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.1.2",
"instantsearch-ui-components": "0.11.1",
"instantsearch.js": "4.78.3",
"react-instantsearch-core": "7.15.7"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 6",
"react": ">= 16.8.0 < 20",
"react-dom": ">= 16.8.0 < 20"
}
},
"node_modules/react-instantsearch-core": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-7.15.7.tgz",
"integrity": "sha512-9FOHY66VMD0FnxF1dT9g5eEPmGybeKwVAa/T2JX1AqLJCQMHysjEl6qH4+/F8M82KdCqzBof4mpFosPiAVuruA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "3.25.0",
"instantsearch.js": "4.78.3",
"use-sync-external-store": "^1.0.0"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 6",
"react": ">= 16.8.0 < 20"
}
},
"node_modules/react-instantsearch-dom": {
"version": "6.40.4",
"resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.40.4.tgz",
"integrity": "sha512-Oy8EKEOg/dfTE8tHc7GZRlzUdbZY4Mxas1x2OtvSNui+YAbIWafIf1g98iOGyVTB2qI5WH91YyUJTLPNfLrs6Q==",
"deprecated": "package has moved to react-instantsearch",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "3.14.0",
"classnames": "^2.2.5",
"prop-types": "^15.6.2",
"react-fast-compare": "^3.0.0",
"react-instantsearch-core": "6.40.4"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 5",
"react": ">= 16.3.0 < 19",
"react-dom": ">= 16.3.0 < 19"
}
},
"node_modules/react-instantsearch-dom/node_modules/algoliasearch-helper": {
"version": "3.14.0",
"resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz",
"integrity": "sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ==",
"license": "MIT",
"dependencies": {
"@algolia/events": "^4.0.1"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 6"
}
},
"node_modules/react-instantsearch-dom/node_modules/react-instantsearch-core": {
"version": "6.40.4",
"resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.40.4.tgz",
"integrity": "sha512-sEOgRU2MKL8edO85sNHvKlZ5yq9OFw++CDsEqYpHJvbWLE/2J2N49XAUY90kior09I2kBkbgowBbov+Py1AubQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "3.14.0",
"prop-types": "^15.6.2",
"react-fast-compare": "^3.0.0"
},
"peerDependencies": {
"algoliasearch": ">= 3.1 < 5",
"react": ">= 16.3.0 < 19"
}
},
"node_modules/react-is": { "node_modules/react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/react-masonry-css": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/react-masonry-css/-/react-masonry-css-1.0.16.tgz",
"integrity": "sha512-KSW0hR2VQmltt/qAa3eXOctQDyOu7+ZBevtKgpNDSzT7k5LA/0XntNa9z9HKCdz3QlxmJHglTZ18e4sX4V8zZQ==",
"license": "MIT",
"peerDependencies": {
"react": ">=16.0.0"
}
},
"node_modules/react-player": { "node_modules/react-player": {
"version": "2.16.0", "version": "2.16.0",
"resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz", "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz",
...@@ -2468,6 +3030,7 @@ ...@@ -2468,6 +3030,7 @@
"version": "1.1.14", "version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
"inherits": "~2.0.1", "inherits": "~2.0.1",
...@@ -2508,12 +3071,14 @@ ...@@ -2508,12 +3071,14 @@
"node_modules/regl": { "node_modules/regl": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz", "resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz",
"integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==",
"license": "MIT"
}, },
"node_modules/remark": { "node_modules/remark": {
"version": "14.0.3", "version": "14.0.3",
"resolved": "https://registry.npmjs.org/remark/-/remark-14.0.3.tgz", "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.3.tgz",
"integrity": "sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==", "integrity": "sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"remark-parse": "^10.0.0", "remark-parse": "^10.0.0",
...@@ -2529,6 +3094,7 @@ ...@@ -2529,6 +3094,7 @@
"version": "15.0.2", "version": "15.0.2",
"resolved": "https://registry.npmjs.org/remark-html/-/remark-html-15.0.2.tgz", "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-15.0.2.tgz",
"integrity": "sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==", "integrity": "sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"hast-util-sanitize": "^4.0.0", "hast-util-sanitize": "^4.0.0",
...@@ -2545,6 +3111,7 @@ ...@@ -2545,6 +3111,7 @@
"version": "10.0.2", "version": "10.0.2",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz",
"integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"mdast-util-from-markdown": "^1.0.0", "mdast-util-from-markdown": "^1.0.0",
...@@ -2559,6 +3126,7 @@ ...@@ -2559,6 +3126,7 @@
"version": "10.0.3", "version": "10.0.3",
"resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz",
"integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==", "integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/mdast": "^3.0.0", "@types/mdast": "^3.0.0",
"mdast-util-to-markdown": "^1.0.0", "mdast-util-to-markdown": "^1.0.0",
...@@ -2573,6 +3141,7 @@ ...@@ -2573,6 +3141,7 @@
"version": "1.22.10", "version": "1.22.10",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
"integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"license": "MIT",
"dependencies": { "dependencies": {
"is-core-module": "^2.16.0", "is-core-module": "^2.16.0",
"path-parse": "^1.0.7", "path-parse": "^1.0.7",
...@@ -2591,12 +3160,14 @@ ...@@ -2591,12 +3160,14 @@
"node_modules/right-now": { "node_modules/right-now": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz",
"integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==" "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==",
"license": "MIT"
}, },
"node_modules/sade": { "node_modules/sade": {
"version": "1.8.1", "version": "1.8.1",
"resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
"integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
"license": "MIT",
"dependencies": { "dependencies": {
"mri": "^1.1.0" "mri": "^1.1.0"
}, },
...@@ -2613,6 +3184,12 @@ ...@@ -2613,6 +3184,12 @@
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
} }
}, },
"node_modules/search-insights": {
"version": "2.17.3",
"resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz",
"integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==",
"license": "MIT"
},
"node_modules/section-matter": { "node_modules/section-matter": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
...@@ -2719,6 +3296,7 @@ ...@@ -2719,6 +3296,7 @@
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
"integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"debug": "2" "debug": "2"
} }
...@@ -2727,6 +3305,7 @@ ...@@ -2727,6 +3305,7 @@
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": { "dependencies": {
"ms": "2.0.0" "ms": "2.0.0"
} }
...@@ -2734,7 +3313,8 @@ ...@@ -2734,7 +3313,8 @@
"node_modules/stream-parser/node_modules/ms": { "node_modules/stream-parser/node_modules/ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
}, },
"node_modules/streamsearch": { "node_modules/streamsearch": {
"version": "1.1.0", "version": "1.1.0",
...@@ -2747,12 +3327,14 @@ ...@@ -2747,12 +3327,14 @@
"node_modules/string_decoder": { "node_modules/string_decoder": {
"version": "0.10.31", "version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
"license": "MIT"
}, },
"node_modules/stringify-entities": { "node_modules/stringify-entities": {
"version": "4.0.4", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
"integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
"license": "MIT",
"dependencies": { "dependencies": {
"character-entities-html4": "^2.0.0", "character-entities-html4": "^2.0.0",
"character-entities-legacy": "^3.0.0" "character-entities-legacy": "^3.0.0"
...@@ -2766,6 +3348,7 @@ ...@@ -2766,6 +3348,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
"integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -2807,6 +3390,7 @@ ...@@ -2807,6 +3390,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"license": "MIT",
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
}, },
...@@ -2814,10 +3398,37 @@ ...@@ -2814,10 +3398,37 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/swiper": {
"version": "11.2.6",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz",
"integrity": "sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q==",
"funding": [
{
"type": "patreon",
"url": "https://www.patreon.com/swiperjs"
},
{
"type": "open_collective",
"url": "http://opencollective.com/swiper"
}
],
"license": "MIT",
"engines": {
"node": ">= 4.7.0"
}
},
"node_modules/tailwindcss": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.6.tgz",
"integrity": "sha512-j0cGLTreM6u4OWzBeLBpycK0WIh8w7kSwcUsQZoGLHZ7xDTdM69lN64AgoIEEwFi0tnhs4wSykUa5YWxAzgFYg==",
"license": "MIT",
"peer": true
},
"node_modules/trim-lines": { "node_modules/trim-lines": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
"integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -2827,6 +3438,7 @@ ...@@ -2827,6 +3438,7 @@
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
"integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -2856,6 +3468,7 @@ ...@@ -2856,6 +3468,7 @@
"version": "10.1.2", "version": "10.1.2",
"resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
"integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
"bail": "^2.0.0", "bail": "^2.0.0",
...@@ -2873,12 +3486,14 @@ ...@@ -2873,12 +3486,14 @@
"node_modules/unified/node_modules/@types/unist": { "node_modules/unified/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/unist-util-generated": { "node_modules/unist-util-generated": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
"integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
"license": "MIT",
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
...@@ -2888,6 +3503,7 @@ ...@@ -2888,6 +3503,7 @@
"version": "5.2.1", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
"integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0" "@types/unist": "^2.0.0"
}, },
...@@ -2899,12 +3515,14 @@ ...@@ -2899,12 +3515,14 @@
"node_modules/unist-util-is/node_modules/@types/unist": { "node_modules/unist-util-is/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/unist-util-position": { "node_modules/unist-util-position": {
"version": "4.0.4", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
"integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0" "@types/unist": "^2.0.0"
}, },
...@@ -2916,12 +3534,14 @@ ...@@ -2916,12 +3534,14 @@
"node_modules/unist-util-position/node_modules/@types/unist": { "node_modules/unist-util-position/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/unist-util-stringify-position": { "node_modules/unist-util-stringify-position": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
"integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0" "@types/unist": "^2.0.0"
}, },
...@@ -2933,12 +3553,14 @@ ...@@ -2933,12 +3553,14 @@
"node_modules/unist-util-stringify-position/node_modules/@types/unist": { "node_modules/unist-util-stringify-position/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/unist-util-visit": { "node_modules/unist-util-visit": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
"integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
"unist-util-is": "^5.0.0", "unist-util-is": "^5.0.0",
...@@ -2953,6 +3575,7 @@ ...@@ -2953,6 +3575,7 @@
"version": "5.1.3", "version": "5.1.3",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
"integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
"unist-util-is": "^5.0.0" "unist-util-is": "^5.0.0"
...@@ -2965,17 +3588,29 @@ ...@@ -2965,17 +3588,29 @@
"node_modules/unist-util-visit-parents/node_modules/@types/unist": { "node_modules/unist-util-visit-parents/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/unist-util-visit/node_modules/@types/unist": { "node_modules/unist-util-visit/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
},
"node_modules/use-sync-external-store": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
"integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
"license": "MIT",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
}, },
"node_modules/uvu": { "node_modules/uvu": {
"version": "0.5.6", "version": "0.5.6",
"resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
"integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
"license": "MIT",
"dependencies": { "dependencies": {
"dequal": "^2.0.0", "dequal": "^2.0.0",
"diff": "^5.0.0", "diff": "^5.0.0",
...@@ -2993,6 +3628,7 @@ ...@@ -2993,6 +3628,7 @@
"version": "5.3.7", "version": "5.3.7",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
"integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
"is-buffer": "^2.0.0", "is-buffer": "^2.0.0",
...@@ -3008,6 +3644,7 @@ ...@@ -3008,6 +3644,7 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz",
"integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
"vfile": "^5.0.0" "vfile": "^5.0.0"
...@@ -3020,12 +3657,14 @@ ...@@ -3020,12 +3657,14 @@
"node_modules/vfile-location/node_modules/@types/unist": { "node_modules/vfile-location/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/vfile-message": { "node_modules/vfile-message": {
"version": "3.1.4", "version": "3.1.4",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
"integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@types/unist": "^2.0.0", "@types/unist": "^2.0.0",
"unist-util-stringify-position": "^3.0.0" "unist-util-stringify-position": "^3.0.0"
...@@ -3038,17 +3677,20 @@ ...@@ -3038,17 +3677,20 @@
"node_modules/vfile-message/node_modules/@types/unist": { "node_modules/vfile-message/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/vfile/node_modules/@types/unist": { "node_modules/vfile/node_modules/@types/unist": {
"version": "2.0.11", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
}, },
"node_modules/wav": { "node_modules/wav": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz",
"integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==",
"license": "MIT",
"dependencies": { "dependencies": {
"buffer-alloc": "^1.1.0", "buffer-alloc": "^1.1.0",
"buffer-from": "^1.0.0", "buffer-from": "^1.0.0",
...@@ -3061,6 +3703,7 @@ ...@@ -3061,6 +3703,7 @@
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": { "dependencies": {
"ms": "2.0.0" "ms": "2.0.0"
} }
...@@ -3068,12 +3711,14 @@ ...@@ -3068,12 +3711,14 @@
"node_modules/wav/node_modules/ms": { "node_modules/wav/node_modules/ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
}, },
"node_modules/web-namespaces": { "node_modules/web-namespaces": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
...@@ -3092,6 +3737,7 @@ ...@@ -3092,6 +3737,7 @@
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
"integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
"license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
......
...@@ -11,18 +11,26 @@ ...@@ -11,18 +11,26 @@
"node": ">=18.17.0" "node": ">=18.17.0"
}, },
"dependencies": { "dependencies": {
"@tailwindcss/aspect-ratio": "^0.4.2",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"date-fns": "^3.3.1", "date-fns": "^3.3.1",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"hydra-synth": "^1.3.29", "hydra-synth": "^1.3.29",
"marked": "^15.0.11",
"next": "^15.3.0", "next": "^15.3.0",
"prismjs": "^1.30.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^5.5.0",
"react-instantsearch": "^7.15.7",
"react-instantsearch-dom": "^6.40.4",
"react-masonry-css": "^1.0.16",
"react-player": "^2.14.1", "react-player": "^2.14.1",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
"remark": "^14.0.0", "remark": "^14.0.0",
"remark-html": "^15.0.0" "remark-html": "^15.0.0",
"swiper": "^11.2.6"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.2.61", "@types/react": "^18.2.61",
......
import 'bootstrap/dist/css/bootstrap.css' import 'bootstrap/dist/css/bootstrap.css'
import '../styles/globals.css'
import '../styles/main.css' import '../styles/main.css'
import '../styles/masonry.css'
export default function MyApp({ Component, pageProps }) { export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} /> return <Component {...pageProps} />
......
...@@ -39,7 +39,6 @@ export async function getStaticPaths() { ...@@ -39,7 +39,6 @@ export async function getStaticPaths() {
} }
export default function Hydra({ hydraData, sourceCode }) { export default function Hydra({ hydraData, sourceCode }) {
const [showCode, setShowCode] = useState(false);
return ( return (
<Layout> <Layout>
...@@ -74,31 +73,15 @@ export default function Hydra({ hydraData, sourceCode }) { ...@@ -74,31 +73,15 @@ export default function Hydra({ hydraData, sourceCode }) {
); );
} }
// Suggestion for later: // Suggestion for later:
// // TODO: refactor to Dynamic import with SSR enabled.
// Dynamic import with SSR disabled // DISCUSS: What would be the benefit of this?
// AI opinion: It would be better to use a dynamic import with SSR enabled,
// >because the HydraSynth component is not needed on the server side.
// >It's a client-side component that needs to be rendered on the client side.
// >So it's better to use a dynamic import with SSR enabled.
// Human: Ok -> TODO for next time someone changes this file, please do refactor to Dynamic import with SSR enabled.
// const HydraSynth = dynamic( // const HydraSynth = dynamic(
// () => import('../../components/hydra-view'), // () => import('../../components/hydra-view'),
// { ssr: false } // { ssr: false }
// ) // )
// \ No newline at end of file
// export default function Hydra({ hydraData, sourceCode }) {
// const canvasRef = useRef(null);
//
// return (
// <Layout>
// {/* ... rest of your component ... */}
//
// {/* Now this will only run on the client side */}
// <HydraSynth
// width={700}
// height={475}
// canvasRef={canvasRef}
// source={hydraData.source}
// />
//
// {/* ... rest of your component ... */}
// </Layout>
// );
// }
import Image from "next/image"; import Head from 'next/head';
import Link from "next/link"; import Link from 'next/link';
import Head from "next/head"; import Image from 'next/image';
import Layout from "../components/layout"; import { useState, useEffect, useRef } from 'react';
import utilStyles from "../styles/utils.module.css"; import { getAllLives } from '@/lib/livesData';
import styles from '@/styles/parvagues.module.css';
import dynamic from 'next/dynamic';
import ParVaguesHeader from '@/components/ParVaguesHeader';
import ParVaguesFooter from '@/components/ParVaguesFooter';
import GlitchText from '@/components/GlitchText';
import SyntaxHighlighter from "react-syntax-highlighter"; import SyntaxHighlighter from "react-syntax-highlighter";
import { atomOneDark } from "react-syntax-highlighter/dist/cjs/styles/hljs";
// React Icons imports
import { FaSpotify, FaDeezer, FaYoutube, FaApple, FaAmazon, FaInstagram, FaTwitter, FaEnvelope } from 'react-icons/fa';
import { SiTidal, SiBluesky, SiMastodon } from 'react-icons/si';
import { MdPlayArrow, MdPause } from 'react-icons/md';
import React from "react"; function CodeBlock({ children, height = '400px', isTerminal = false }) {
import ReactPlayer from "react-player"; return (
<div className={`${styles.codeContainer} ${isTerminal ? styles.terminalContainer : ''}`} style={{ maxHeight: height }}>
{isTerminal && (
<div className={styles.terminalHeader}>
<div className={styles.terminalControls}>
<span className={styles.redCircle}></span>
<span className={styles.yellowCircle}></span>
<span className={styles.greenCircle}></span>
</div>
<div className={styles.terminalTitle}>ParVagues@tidal:~</div>
</div>
)}
<SyntaxHighlighter
language="haskell"
style={atomOneDark}
wrapLongLines={true}
customStyle={{
margin: 0,
borderRadius: isTerminal ? '0 0 8px 8px' : '8px',
height: 'auto',
maxHeight: isTerminal ? `calc(${height} - 30px)` : height,
fontSize: '0.85rem'
}}
>
{children}
</SyntaxHighlighter>
</div>
);
}
export async function getStaticProps(context) { // Define all posters and their positions
const tidalSampleUrl = const posterImages = [
"https://git.plnech.fr/pln/Tidal/raw/f5bfbc74e68dcaac0f6afa93f2b47d35321274c8/live/dnb/automne_electrique.tidal"; '/images/parvagues/lives/2022/Bazurto/poster.jpg',
const response = await fetch(tidalSampleUrl); '/images/parvagues/lives/2022/OPERATE/poster.png',
const source = await response.text(); '/images/parvagues/lives/2024/ccc_release_party/poster.png',
// Remove working title '/images/parvagues/lives/2025/algorave-lyon/poster.jpeg',
const sourceClean = source.split("\n").slice(1).join("\n"); '/images/parvagues/lives/2025/ensad/poster.png',
];
return { export default function ParVagues({ lives }) {
props: { const [tidalCode, setTidalCode] = useState('');
urlSC: "https://soundcloud.com/parvagues/", const [showPlayers, setShowPlayers] = useState({});
urlTwitch: "https://twitch.tv/parvagues/", const [isPlaying, setIsPlaying] = useState(false);
urlTwitchExample: "https://www.twitch.tv/videos/965233250", const [selectedSection, setSelectedSection] = useState('potentiel');
urlAutomne: "https://soundcloud.com/parvagues/automne-electrique", const [sectionImages, setSectionImages] = useState([]);
tidalSample: sourceClean, const [currentImageIndex, setCurrentImageIndex] = useState(0);
const [currentAlbumIndex, setCurrentAlbumIndex] = useState(0);
const backgroundRef = useRef(null);
const audioRef = useRef(null);
// Filter future events
const futureEvents = lives.filter(live => {
return new Date(live.date) > new Date();
});
// Define section content
const sections = {
potentiel: {
type: 'carousel',
images: [
'/images/parvagues/samples_crop.png',
// '/images/parvagues/code.png',
]
},
composition: {
type: 'carousel',
images: [
'/images/parvagues/gear1_crop.jpg',
]
}, },
performance: {
type: 'carousel',
images: [
// '/images/parvagues/live.jpg',
'/images/parvagues/hands.jpg'
]
}
}; };
}
// Fetch Tidal code with proxy or fallback
useEffect(() => {
// Use fallback code since CORS is blocking
const code = `do
setcps (120/60/4) -- 120 BPM
d1 $ "k . k(<3!3 5>,8)" . "jazz" -- Kick chaloupé
d2 $ "~ s ~ s*<1 2>" # "snare:42" -- Snare régulier
d3 $ whenmod 8 6 (degradeBy 0.2)
$ fast "<1 1 2 <1 2>>"
$ "dr*[8 16]" # "h2ogmhh:2" -- Drumroll
d4 $ note ("<e3 fs3 <gs3 d4> <a3 df4>>" - 12)
# "bassWarsaw" -- BASSLINE`;
setTidalCode(code);
}, []);
// Update section images based on selection
useEffect(() => {
const sectionContent = sections[selectedSection];
if (sectionContent && sectionContent.type === 'carousel') {
setSectionImages(sectionContent.images);
setCurrentImageIndex(0);
}
}, [selectedSection]);
// Auto-advance carousel for section images
useEffect(() => {
if (sections[selectedSection]?.images?.length > 1) {
const interval = setInterval(() => {
setCurrentImageIndex(prev => (prev + 1) % sections[selectedSection].images.length);
}, 2500);
return () => clearInterval(interval);
}
}, [selectedSection, sections]);
// Carousel navigation functions
const nextSectionImage = () => {
const imagesArray = sections[selectedSection].images;
setCurrentImageIndex(prev => (prev + 1) % imagesArray.length);
};
const prevSectionImage = () => {
const imagesArray = sections[selectedSection].images;
setCurrentImageIndex(prev => (prev === 0 ? imagesArray.length - 1 : prev - 1));
};
// Carousel effect for albums
useEffect(() => {
if (albums.length > 1) {
const interval = setInterval(() => {
setCurrentAlbumIndex(prev => (prev + 1) % albums.length);
}, 5000);
return () => clearInterval(interval);
}
}, []);
const scrollToSection = (e) => {
e.preventDefault();
const section = document.getElementById('section1');
section?.scrollIntoView({ behavior: 'smooth' });
};
const togglePlayer = (albumId) => {
setShowPlayers(prev => ({
...prev,
[albumId]: !prev[albumId]
}));
};
const toggleAudio = () => {
if (audioRef.current) {
if (isPlaying) {
audioRef.current.pause();
} else {
audioRef.current.play();
}
setIsPlaying(!isPlaying);
}
};
const albums = [
{
id: '2024_opal',
title: 'Livecoding (Opal Festival 2024)',
image: '/images/parvagues/albums/2024_opal/cover.jpg',
links: [
{ platform: 'YouTube', url: 'https://www.youtube.com/playlist?list=OLAK5uy_l4MF3OCIXcdPMpsHGVX2Q9MiX6oU1zT6g', icon: <FaYoutube /> },
{ platform: 'Deezer', url: 'https://www.deezer.com/us/album/656760591', icon: <FaDeezer /> },
{ platform: 'Spotify', url: 'https://open.spotify.com/album/1VKLZWeolFNfES2bWzYCWZ', icon: <FaSpotify /> },
{ platform: 'Apple', url: 'https://music.apple.com/fr/album/livecoding-opal-festival-2024/1773790990', icon: <FaApple /> },
{ platform: 'Tidal', url: 'https://listen.tidal.com/album/393127518', icon: <SiTidal /> },
{ platform: 'Amazon', url: 'https://amazon.com/dp/B0DK298L1X', icon: <FaAmazon /> }
]
},
{
id: '2023_connexion',
title: 'Connexion Etablie EP',
image: '/images/parvagues/albums/2023_connexion/cover.jpg',
links: [
{ platform: 'YouTube', url: 'https://www.youtube.com/watch?v=VODSdQKrzyw&list=OLAK5uy_nzlx3b7YJYzrbagXF5swhENsCg5vJkT_Q', icon: <FaYoutube /> },
{ platform: 'Spotify', url: 'https://open.spotify.com/album/4uzSN6Uv9IwcYeHdRtkUmM', icon: <FaSpotify /> },
{ platform: 'Deezer', url: 'https://www.deezer.com/album/498443581', icon: <FaDeezer /> },
{ platform: 'Apple', url: 'https://music.apple.com/fr/album/_/1711226283', icon: <FaApple /> },
{ platform: 'Amazon', url: 'https://music.amazon.com/albums/B0CKTZMFDF', icon: <FaAmazon /> }
]
}
];
const renderSectionContent = () => {
const sectionContent = sections[selectedSection];
if (!sectionContent) return null;
export default function ParVagues({ return (
urlSC, <div className="w-full flex flex-col items-center">
urlTwitch, {/* Image Frame: 4/3 aspect ratio, max-width 50vw */}
urlTwitchExample, <div className="w-full max-w-[50vw] aspect-[4/3] bg-black rounded-lg overflow-hidden shadow-xl mb-4">
tidalSample, <img
}) { src={sectionContent.images[currentImageIndex]}
alt={selectedSection}
className="w-full h-full object-cover"
/>
</div>
{sectionContent.images.length > 1 && (
<div className="flex items-center">
<button
onClick={prevSectionImage}
className="bg-black/30 hover:bg-black/50 p-2 rounded-full transition-colors mx-2"
aria-label="Image précédente"
>
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 19l-7-7 7-7" />
</svg>
</button>
<button
onClick={nextSectionImage}
className="bg-black/30 hover:bg-black/50 p-2 rounded-full transition-colors mx-2"
aria-label="Image suivante"
>
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
</svg>
</button>
</div>
)}
</div>
);
};
return ( return (
<Layout> <>
<Head> <Head>
<meta name="viewport" content="width=device-width, initial-scale=1" /> <title>ParVagues - Musique Algorithmique</title>
<title>ParVagues</title> <meta name="description" content="Livecoding de musique open-source avec TidalCycles et contrôleur MIDI" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/images/parvagues/favicon.ico" />
</Head> </Head>
<div>
<section className={utilStyles.headingMd}> <div className="flex flex-col min-h-screen bg-black text-white">
<h1>I create music with patterns</h1> <ParVaguesHeader />
<h4>
<i> {/* Main content flex-auto to push footer to bottom */}
ParVagues, c'est des ondes sonores qui naissent dans un océan <main className="flex-auto">
binaire pour parfois s'échouer sur vos plages sonores. {/* Hero Section */}
</i> <section className={`${styles.heroSection} mt-0`}>
</h4> <div className={styles.posterCollage} ref={backgroundRef}>
{/*<Image {posterImages.map((src, i) => (
alt="ParVagues performing" <img
src="/images/ParVagues.jpg" key={i}
layout="fill" src={src}
width={700} alt={`Poster ${i + 1}`}
height={475} fill
/>*/} className={styles.posterImage}
</section> priority={i < 3}
<section className={utilStyles.headingMd}> />
<h5> ))}
A source sample: the code behind <a href="">Automne Électrique</a>: </div>
</h5>
<SyntaxHighlighter {/* Audio element */}
className="source-code" <audio
width="64em" ref={audioRef}
language="haskell" src="/parvagues.mp3"
wrapLines={true} loop
> onPlay={() => setIsPlaying(true)}
{tidalSample} onPause={() => setIsPlaying(false)}
</SyntaxHighlighter>
</section>
<section className={utilStyles.headingMd}>
<h4>
I sometimes post recordings on <a href={urlSC}>SoundCloud</a>
</h4>
<div className="player-wrapper">
<ReactPlayer
className="react-player"
url={urlSC}
width="100%"
height="32em"
controls={true}
config={{
soundcloud: {
options: {
auto_play: false,
},
},
}}
/>
</div>
</section>
<section className={utilStyles.headingMd}>
<h4>
I sometimes do live performances on <a href={urlTwitch}>Twitch</a>
</h4>
<div className="player-wrapper">
<ReactPlayer
className="react-player"
url={urlTwitchExample}
width="100%"
height="32em"
controls={true}
/> />
<div className={styles.contentOverlay}>
<div className={styles.heroContent}>
{/* Left side: Title and content */}
<div className="md:w-1/2">
<h1 className={styles.heroTitle}>
<GlitchText
text="ParVagues"
className={styles.glitchEffect}
burstFrequency={4500}
/>
</h1>
<p className={styles.heroSubtitle}>
Livecoding de musique open-source avec TidalCycles et contrôleur MIDI
</p>
<div className="flex flex-col sm:flex-row gap-4 mt-6">
<a href="#section1" onClick={scrollToSection} className={styles.plungeButton}>
Plonger
</a>
{futureEvents.length > 0 && (
<Link href="#performances" className={`${styles.outlineButton} group`}>
<span>LIVE</span>
<div className="absolute inset-x-0 bottom-0 h-0.5 bg-gradient-to-r from-purple-500 to-pink-500 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left"></div>
</Link>
)}
</div>
</div>
{/* Right side: Code sample with play overlay */}
<div className="md:w-1/2 relative">
<div className="relative">
<CodeBlock className="h-full" isTerminal={true}>
{tidalCode}
</CodeBlock>
{/* Pretty Play overlay */}
<button
onClick={toggleAudio}
className="absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center transition-all duration-300 hover:bg-black/80 group"
>
<div className="bg-gradient-to-br from-purple-500 to-pink-500 rounded-full p-8 shadow-xl shadow-purple-500/50 transition-all duration-300 group-hover:scale-110 group-hover:shadow-2xl group-hover:shadow-purple-500/30">
{isPlaying ? (
<MdPause className="w-16 h-16 text-white" />
) : (
<MdPlayArrow className="w-16 h-16 text-white" />
)}
</div>
<div className="absolute bottom-4 left-1/2 transform -translate-x-1/2 text-sm text-purple-300 opacity-0 group-hover:opacity-100 transition-opacity">
{isPlaying ? 'Pause' : 'Écouter le mix'}
</div>
</button>
</div>
</div>
</div>
</div>
</section>
{/* Section 1: Interactive Sections */}
<section id="section1" className={styles.sectionContainer}>
<div className={styles.splitSection}>
<div>
<div
className={`cursor-pointer transition-all duration-300 hover:bg-purple-500/10 rounded-lg p-2 ${selectedSection === 'potentiel' ? 'text-purple-400 border-l-2 border-purple-400 pl-4' : ''}`}
onClick={() => setSelectedSection('potentiel')}
>
<h3 className={`${styles.bulletPoint} text-xl font-semibold text-purple-400 mb-2 group relative inline-block`} style={{ margin: '1em 0', textDecorationLine: 'underline', textDecorationColor: 'darkviolet', textDecorationThickness: '3px' }}>
Potentiel
<span className="absolute bottom-0 left-0 w-0 h-0.5 bg-gradient-to-r from-purple-400 to-pink-500 group-hover:w-full transition-all duration-300"></span>
</h3>
<p className="text-gray-300">Samples glanés et synthés SuperCollider</p>
</div>
<div
className={`cursor-pointer transition-all duration-300 hover:bg-purple-500/10 rounded-lg p-2 ${selectedSection === 'composition' ? 'text-purple-400 border-l-2 border-purple-400 pl-4' : ''}`}
onClick={() => setSelectedSection('composition')}
>
<h3 className={`${styles.bulletPoint} text-xl font-semibold text-purple-400 mb-2 group relative inline-block`} style={{ margin: '1em 0', textDecorationLine: 'underline', textDecorationColor: 'darkviolet', textDecorationThickness: '3px' }}>
Composition
<span className="absolute bottom-0 left-0 w-0 h-0.5 bg-gradient-to-r from-purple-400 to-pink-500 group-hover:w-full transition-all duration-300"></span>
</h3>
<p className="text-gray-300">Code Haskell TidalCycles + input MIDI</p>
</div>
<div
className={`cursor-pointer transition-all duration-300 hover:bg-purple-500/10 rounded-lg p-2 ${selectedSection === 'performance' ? 'text-purple-400 border-l-2 border-purple-400 pl-4' : ''}`}
onClick={() => setSelectedSection('performance')}
>
<h3 className={`${styles.bulletPoint} text-xl font-semibold text-purple-400 mb-2 group relative inline-block`} style={{ margin: '1em 0', textDecorationLine: 'underline', textDecorationColor: 'darkviolet', textDecorationThickness: '3px' }}>
Performance
<span className="absolute bottom-0 left-0 w-0 h-0.5 bg-gradient-to-r from-purple-400 to-pink-500 group-hover:w-full transition-all duration-300"></span>
</h3>
<p className="text-gray-300">Performance live avec improvisation au contrôleur MIDI</p>
</div>
</div>
<div>
{renderSectionContent()}
</div>
</div>
</section>
{/* Section 2: Music */}
<section id="music" className={styles.sectionContainer}>
<h2 className="text-3xl font-bold mb-8 text-center">
<span className="bg-gradient-to-r from-purple-400 to-pink-600 bg-clip-text text-transparent">
Sorties
</span>
</h2>
<div className="grid grid-cols-2 gap-6 justify-center items-stretch max-w-4xl mx-auto">
{albums.map(album => (
<div
key={album.id}
className="flex justify-center w-xs py-4">
<Image
src={album.image}
alt={album.title}
width={480}
height={480}
className="mx-auto mb-4"
/>
<div className="flex flex-col items-center text-center">
<h3 className="text-lg font-bold text-white mb-3 truncate w-full">{album.title}</h3>
<div className="flex flex-wrap gap-2 justify-center">
{album.links.map(link => (
<a
key={link.platform}
href={link.url}
target="_blank"
rel="noopener noreferrer"
className="bg-black/50 backdrop-blur-sm hover:bg-purple-500/70 text-white rounded-full p-2 transition-all duration-300 hover:shadow-glow"
title={link.platform}
>
<span className="text-xl">{link.icon}</span>
</a>
))}
</div>
</div>
</div>
))}
</div> </div>
</section> </section>
{/* Section: Performances */}
{futureEvents.length > 0 && (
<section id="performances" className={styles.sectionContainer}>
<h2 className="text-3xl font-bold mb-8 text-center">
<span className="bg-gradient-to-r from-purple-400 to-pink-600 bg-clip-text text-transparent">
Prochains Événements
</span>
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{futureEvents.slice(0, 3).map(live => (
<Link href={`/parvagues/live/${live.slug}`} key={live.slug} legacyBehavior>
<a className="block bg-black/30 border border-purple-500/20 rounded-lg overflow-hidden hover:border-purple-500/70 transition-all hover:shadow-glow hover:-translate-y-1">
<div className="relative h-40">
<img
src={`/images/parvagues/lives/${live.year}/${live.slug}/poster.jpg`}
alt={live.title}
fill
className="object-cover"
/>
<div className="absolute top-2 right-2 bg-black/60 text-white text-xs px-2 py-1 rounded">
{new Date(live.date).toLocaleDateString('fr-FR', {
day: 'numeric',
month: 'short',
year: 'numeric'
})}
</div>
</div>
<div className="p-4">
<h3 className="text-lg font-bold text-white">{live.title}</h3>
<p className="text-purple-300 text-sm mt-1">{live.location}</p>
<p className="text-gray-400 text-sm mt-2 line-clamp-2">{live.description}</p>
</div>
</a>
</Link>
))}
</div>
{/* TODO: Consider a 'all lives' page */}
{/* <div className="flex justify-center mt-10">
<Link href="/parvagues/lives" className={styles.outlineButton}>
Voir tous les événements
</Link>
</div> */}
</section>
)}
{/* Section 3: About */}
<section id="about" className={`${styles.sectionContainer} pb-24`}>
<h2 className="text-3xl font-bold mb-8 text-center">
<span className="bg-gradient-to-r from-purple-400 to-pink-600 bg-clip-text text-transparent">
À propos
</span>
</h2>
<div className="max-w-3xl mx-auto text-gray-300 space-y-4">
<p>
ParVagues, c'est des ondes qui naissent dans un océan binaire pour parfois s'échouer sur vos plages sonores.
</p>
<p>
Codé avec TidalCycles, chaque enregistrement est issu d'une structure algorithmique, au code source libre et réutilisable.
</p>
<p>
En particulier, ParVagues existe grâce :
</p>
<ul className="list-disc pl-6 space-y-2">
<li>à <a href="https://tidalcycles.org" className="text-purple-400 hover:text-purple-300">Yaxu</a> et la <a href="https://tidalcycles.org/community" className="text-purple-400 hover:text-purple-300">communauté TidalCycles</a></li>
<li>à <a href="https://supercollider.github.io" className="text-purple-400 hover:text-purple-300">SuperCollider</a> et les <a href="https://github.com/supercollider/sc3-plugins" className="text-purple-400 hover:text-purple-300">SC3-Plugins</a></li>
<li>à <a href="https://github.com/musikinformatik/SuperDirt" className="text-purple-400 hover:text-purple-300">SuperDirt</a> et ses samples</li>
<li>au Santa Clara Laptop Orchestra (<a href="https://www.scu.edu/cas/music/ensembles/sclork/" className="text-purple-400 hover:text-purple-300">www.scu.edu/cas/music/ensembles/sclork/</a>)</li>
<li>aux projets <a href="https://pickleddiscs.bandcamp.com/album/blood-sport-sample-pack" className="text-purple-400 hover:text-purple-300">BloodSport Samples</a> et <a href="https://hydrogen-music.org/" className="text-purple-400 hover:text-purple-300">Hydrogen</a></li>
</ul>
<p>
Le résultat final est publié sous license CC-BY-SA : <br />
vous êtes libres de les récupérer, modifier et repartager, tant que vous mentionnez leur origine.
</p>
<p>
Le code source final de chaque partition est disponible sur <a href="https://nech.pl/parvagues" className="text-purple-400 hover:text-purple-300">nech.pl/parvagues</a>.<br/>
Les enregistrements originaux sont disponibles sur demande.
</p>
</div>
</section>
</main>
{/* Footer - not sticky */}
<ParVaguesFooter />
</div> </div>
</Layout> </>
); );
} }
export async function getStaticProps() {
const lives = getAllLives();
return {
props: {
lives,
},
revalidate: 60,
};
}
import Image from "next/image";
import Link from "next/link";
import Head from "next/head";
import Layout from "../components/layout";
import utilStyles from "../styles/utils.module.css";
import SyntaxHighlighter from "react-syntax-highlighter";
import React from "react";
import ReactPlayer from "react-player";
export async function getStaticProps(context) {
const tidalSampleUrl =
"https://git.plnech.fr/pln/Tidal/raw/f5bfbc74e68dcaac0f6afa93f2b47d35321274c8/live/dnb/automne_electrique.tidal";
const response = await fetch(tidalSampleUrl);
const source = await response.text();
// Remove working title
const sourceClean = source.split("\n").slice(1).join("\n");
return {
props: {
urlSC: "https://soundcloud.com/parvagues/",
urlTwitch: "https://twitch.tv/parvagues/",
urlTwitchExample: "https://www.twitch.tv/videos/965233250",
urlAutomne: "https://soundcloud.com/parvagues/automne-electrique",
tidalSample: sourceClean,
},
};
}
export default function ParVagues({
urlSC,
urlTwitch,
urlTwitchExample,
tidalSample,
}) {
return (
<Layout>
<Head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>ParVagues</title>
</Head>
<div>
<section className={utilStyles.headingMd}>
<h1>I create music with patterns</h1>
<h4>
<i>
ParVagues, c'est des ondes sonores qui naissent dans un océan
binaire pour parfois s'échouer sur vos plages sonores.
</i>
</h4>
{/*<Image
alt="ParVagues performing"
src="/images/ParVagues.jpg"
layout="fill"
width={700}
height={475}
/>*/}
</section>
<section className={utilStyles.headingMd}>
<h5>
A source sample: the code behind <a href="">Automne Électrique</a>:
</h5>
<SyntaxHighlighter
className="source-code"
width="64em"
language="haskell"
wrapLines={true}
>
{tidalSample}
</SyntaxHighlighter>
</section>
<section className={utilStyles.headingMd}>
<h4>
I sometimes post recordings on <a href={urlSC}>SoundCloud</a>
</h4>
<div className="player-wrapper">
<ReactPlayer
className="react-player"
url={urlSC}
width="100%"
height="32em"
controls={true}
config={{
soundcloud: {
options: {
auto_play: false,
},
},
}}
/>
</div>
</section>
<section className={utilStyles.headingMd}>
<h4>
I sometimes do live performances on <a href={urlTwitch}>Twitch</a>
</h4>
<div className="player-wrapper">
<ReactPlayer
className="react-player"
url={urlTwitchExample}
width="100%"
height="32em"
controls={true}
/>
</div>
</section>
</div>
</Layout>
);
}
import { useEffect, useState, useRef } from 'react';
import { getAllLives, getLiveData, getLivesImages } from '../../../lib/livesData';
import ImageGallery from '@/components/ImageGallery';
import ParVaguesHeader from '@/components/ParVaguesHeader';
import ParVaguesFooter from '@/components/ParVaguesFooter';
import Head from 'next/head';
import Link from 'next/link';
import Image from 'next/image';
import { marked } from 'marked';
import SyntaxHighlighter from "react-syntax-highlighter";
import { atomOneDark } from "react-syntax-highlighter/dist/cjs/styles/hljs";
import styles from '@/styles/parvagues.module.css';
import { FaEnvelope, FaYoutube } from 'react-icons/fa';
export default function Live({ data, slug, images }) {
const [timeToEvent, setTimeToEvent] = useState(null);
const [timeString, setTimeString] = useState('');
const [currentTeasing, setCurrentTeasing] = useState(null);
const [pastEvent, setPastEvent] = useState(false);
const [teasingsToShow, setTeasingsToShow] = useState([]);
const [upcomingDrops, setUpcomingDrops] = useState([]);
const [posterImage, setPosterImage] = useState(null);
const [mainColor, setMainColor] = useState('#a855f7');
const [scrolled, setScrolled] = useState(false);
const headerRef = useRef(null);
// Find poster or live image for background
useEffect(() => {
if (images && images.length > 0) {
const poster = images.find(img => img.includes('poster.'));
const liveImage = images.find(img => img.includes('live.'));
if (poster) {
setPosterImage(poster);
} else if (liveImage) {
setPosterImage(liveImage);
}
}
}, [images]);
// Calculate time to event and set appropriate teasings
useEffect(() => {
const updateCountdown = () => {
const now = new Date();
const eventDate = new Date(data.frontmatter.date);
const timeDiff = eventDate - now;
const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
// Format precise time string (HH:MM:SS)
const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
const hours = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
setTimeString(`${days}j ${hours}h ${minutes}m ${seconds}s`);
if (timeDiff > 0) {
setTimeToEvent(daysDiff);
setPastEvent(false);
// Set which teasings to show based on days remaining
const teasings = [];
if (data.frontmatter.teasing1) teasings.push(data.frontmatter.teasing1);
if (daysDiff <= 14 && data.frontmatter.teasing2) {
teasings.push(data.frontmatter.teasing2);
}
if (daysDiff <= 2 && data.frontmatter.teasing3) {
teasings.push(data.frontmatter.teasing3);
}
// Always show most recent teasing at the top
setTeasingsToShow(teasings.reverse());
// Set upcoming drops information
const drops = [];
if (data.frontmatter.drop1date && new Date(data.frontmatter.drop1date) > now) {
drops.push({
date: new Date(data.frontmatter.drop1date),
name: data.frontmatter.drop1name || "Teasing mysterieux"
});
}
if (data.frontmatter.drop2date && new Date(data.frontmatter.drop2date) > now) {
drops.push({
date: new Date(data.frontmatter.drop2date),
name: data.frontmatter.drop2name || "Révélation cryptique"
});
}
if (data.frontmatter.drop3date && new Date(data.frontmatter.drop3date) > now) {
drops.push({
date: new Date(data.frontmatter.drop3date),
name: data.frontmatter.drop3name || "Manifestation finale"
});
}
setUpcomingDrops(drops);
} else {
setTimeToEvent(-1);
setPastEvent(true);
// Show all teasings for past events
const teasings = [];
if (data.frontmatter.teasing3) teasings.push(data.frontmatter.teasing3);
if (data.frontmatter.teasing2) teasings.push(data.frontmatter.teasing2);
if (data.frontmatter.teasing1) teasings.push(data.frontmatter.teasing1);
setTeasingsToShow(teasings);
}
};
updateCountdown();
const interval = setInterval(updateCountdown, 1000); // Update every second
return () => clearInterval(interval);
}, [data.frontmatter]);
// Helper function to render markdown
const renderMarkdown = (content) => {
if (!content) return { __html: '' };
const html = marked(content);
return { __html: html };
};
// Helper function to format date for display
const formatEventDate = (dateString) => {
const date = new Date(dateString);
return new Intl.DateTimeFormat('fr-FR', {
day: 'numeric',
month: 'long',
year: 'numeric'
}).format(date);
};
// Scroll to details section
const scrollToSection = (e) => {
e.preventDefault();
const section = document.getElementById('details-section');
section?.scrollIntoView({ behavior: 'smooth' });
};
// Calculate time difference in precise format
const getTimeDifferenceString = (targetDate) => {
const now = new Date();
const timeDiff = targetDate - now;
if (timeDiff <= 0) return "Maintenant";
const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
const hours = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
if (days > 0) {
return `${days}j ${hours}h ${minutes}m`;
} else {
return `${hours}h ${minutes}m`;
}
};
// Render YouTube embed if URL is provided
const renderYouTubeEmbed = (url) => {
if (!url) return null;
// Extract YouTube video ID
const videoId = url.match(/(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))([^?&]+)/)?.[1];
if (!videoId) return null;
return (
<div className="aspect-video w-full rounded-lg overflow-hidden shadow-lg">
<iframe
width="100%"
height="100%"
src={`https://www.youtube.com/embed/${videoId}`}
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen>
</iframe>
</div>
);
};
// Render audio player if URL is provided
const renderAudioPlayer = (url) => {
if (!url) return null;
return (
<div className="my-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Audio</h3>
<audio
controls
className="w-full"
src={url}>
Votre navigateur ne supporte pas l'élément audio.
</audio>
</div>
);
};
// Render code blocks with SyntaxHighlighter
const renderCodeBlock = (code, language = 'haskell') => {
return (
<div className={styles.codeContainer}>
<SyntaxHighlighter
language={language}
style={atomOneDark}
wrapLongLines={true}
customStyle={{
margin: 0,
borderRadius: '8px',
fontSize: '0.85rem',
maxHeight: '200px' // Limit height
}}
>
{code}
</SyntaxHighlighter>
</div>
);
};
return (
<>
<Head>
<title>{data.frontmatter.title} - ParVagues</title>
<meta name="description" content={data.frontmatter.description || `ParVagues live: ${data.frontmatter.title}`} />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/images/parvagues/favicon.ico" />
</Head>
<div className="flex flex-col min-h-screen bg-black text-white">
{/* Header with event title */}
<ParVaguesHeader title={data.frontmatter.title} />
<main className="flex-auto">
{/* Hero Section - More compact */}
<section className="relative min-h-[60vh] md:min-h-[50vh] flex items-center overflow-hidden">
{/* FIXME: Rewrite the Background Image with gradient overlay */}
{/* {posterImage && (
<div className="z-0">
<img
src={posterImage}
alt={data.frontmatter.title}
fill
className="object-cover"
priority
/>
<div className="absolute inset-0 bg-gradient-to-b from-black/80 via-black/60 to-black"></div>
</div>
)} */}
<div className="container mx-auto px-4 py-8 relative z-10">
<div className="max-w-5xl mx-auto">
<div className="grid md:grid-cols-2 gap-6 items-center">
{/* Left Side: Event Info */}
<div>
<h1 className="text-4xl md:text-5xl font-bold mb-2 text-white">{data.frontmatter.title}</h1>
{pastEvent ? (
<div className="inline-block bg-gray-800 text-white text-sm px-3 py-1 rounded-full mb-4">
Événement passé
</div>
) : (
<div className="inline-block bg-purple-800 text-white text-sm px-3 py-1 rounded-full mb-4">
{timeToEvent === 0 ? "Aujourd'hui" : `Dans ${timeString}`}
</div>
)}
<div className="flex flex-col space-y-2 mb-4">
<div className="flex items-center">
<span className="text-purple-400 w-24">Date:</span>
<span>{formatEventDate(data.frontmatter.date)}</span>
</div>
<div className="flex items-center">
<span className="text-purple-400 w-24">Lieu:</span>
<span>{data.frontmatter.venue || 'À annoncer'}</span>
</div>
{data.frontmatter.city && (
<div className="flex items-center">
<span className="text-purple-400 w-24">Ville:</span>
<span>{data.frontmatter.city}</span>
</div>
)}
</div>
{/* Action Buttons */}
<div className="flex flex-wrap gap-2 mt-4">
{data.frontmatter.ticketLink && !pastEvent && (
<a
href={data.frontmatter.ticketLink}
target="_blank"
rel="noopener noreferrer"
className="bg-gradient-to-r from-purple-600 to-pink-600 px-4 py-2 rounded-md text-white font-medium hover:from-purple-700 hover:to-pink-700 transition-all shadow-lg"
>
Billets
</a>
)}
{data.frontmatter.eventLink && (
<a
href={data.frontmatter.eventLink}
target="_blank"
rel="noopener noreferrer"
className="bg-gray-800 hover:bg-gray-700 px-4 py-2 rounded-md text-white font-medium transition-all"
>
Info Event
</a>
)}
<a
href="#details-section"
onClick={scrollToSection}
className="bg-transparent border border-purple-500 hover:bg-purple-900/30 px-4 py-2 rounded-md text-white font-medium transition-all"
>
Détails
</a>
</div>
</div>
{/* Right Side: Upcoming Drops or Latest Teasing */}
<div>
{!pastEvent && upcomingDrops.length > 0 ? (
<div className="bg-black/60 backdrop-blur p-4 rounded-lg border border-purple-500/30">
<h3 className="text-lg font-semibold text-purple-400 mb-3">Prochains drops</h3>
<ul className="space-y-2">
{upcomingDrops.map((drop, i) => (
<li key={i} className="flex items-center justify-between bg-black/50 p-2 rounded">
<span className="text-sm">{drop.name}</span>
<span className="text-xs bg-purple-900/60 px-2 py-1 rounded">
{getTimeDifferenceString(drop.date)}
</span>
</li>
))}
</ul>
</div>
) : teasingsToShow.length > 0 ? (
<div className="bg-black/60 backdrop-blur p-4 rounded-lg border border-purple-500/30">
<h3 className="text-lg font-semibold text-purple-400 mb-2">
{pastEvent ? "Highlights" : "Teasing"}
</h3>
<div dangerouslySetInnerHTML={renderMarkdown(teasingsToShow[0])} className="prose prose-sm prose-invert max-w-none" />
</div>
) : null}
</div>
</div>
</div>
</div>
</section>
{/* Details Section - More compact */}
<section id="details-section" className="bg-black py-8">
<div className="container mx-auto px-4">
<div className="max-w-5xl mx-auto grid md:grid-cols-12 gap-6">
{/* Main Content */}
<div className="md:col-span-8">
{/* Main Content */}
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h2 className="text-xl font-bold mb-3 text-purple-400">À propos</h2>
<div
dangerouslySetInnerHTML={renderMarkdown(data.content)}
className="prose prose-sm prose-invert max-w-none"
/>
</div>
{/* Media */}
{data.frontmatter.youtubeUrl && (
<div className="mb-4">
{renderYouTubeEmbed(data.frontmatter.youtubeUrl)}
</div>
)}
{data.frontmatter.audioUrl && renderAudioPlayer(data.frontmatter.audioUrl)}
{/* Code Sample */}
{data.frontmatter.codeSnippet && (
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Code Snippet</h3>
{renderCodeBlock(data.frontmatter.codeSnippet)}
</div>
)}
</div>
{/* Sidebar */}
<div className="md:col-span-4">
{/* More Teasings */}
{teasingsToShow.length > 1 && (
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Plus de teasings</h3>
<div className="space-y-3">
{teasingsToShow.slice(1).map((teasing, i) => (
<div
key={i}
className="bg-black/60 p-3 rounded"
>
<div
dangerouslySetInnerHTML={renderMarkdown(teasing)}
className="prose prose-xs prose-invert max-w-none"
/>
</div>
))}
</div>
</div>
)}
{/* Artists */}
{data.frontmatter.artists && (
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Artistes</h3>
<div
dangerouslySetInnerHTML={renderMarkdown(data.frontmatter.artists)}
className="prose prose-sm prose-invert max-w-none"
/>
</div>
)}
{/* Mini Gallery - Limited to 3 images */}
{images && images.length > 0 && (
<div className="bg-gray-900/40 rounded-lg p-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Photos</h3>
<div className="grid grid-cols-3 gap-2">
{images.slice(0, 3).map((image, i) => (
<div key={i} className="relative aspect-square rounded overflow-hidden">
<img
src={image}
alt={`${data.frontmatter.title} - image ${i+1}`}
fill
className="live-gallery-image object-cover hover:scale-110 transition-transform duration-300 max-w-sm"
/>
</div>
))}
</div>
{images.length > 3 && (
<div className="mt-2 text-center">
<button
onClick={() => {
const gallery = document.getElementById('full-gallery');
gallery?.scrollIntoView({ behavior: 'smooth' });
}}
className="text-xs text-purple-400 hover:text-purple-300"
>
Voir les {images.length} photos →
</button>
</div>
)}
</div>
)}
</div>
</div>
{/* Full Gallery - only if more than 3 images */}
{images && images.length > 3 && (
<div id="full-gallery" className="max-w-5xl mx-auto mt-8">
<ImageGallery images={images} slug={slug} />
</div>
)}
</div>
</section>
</main>
<ParVaguesFooter />
</div>
</>
);
}
export async function getStaticPaths() {
const lives = getAllLives();
const paths = lives.map(live => ({
params: { id: live.slug }
}));
return {
paths,
fallback: false,
};
}
export async function getStaticProps({ params }) {
try {
const liveData = await getLiveData(params.id);
const images = await getLivesImages(params.id);
return {
props: {
data: liveData,
slug: params.id,
images,
},
revalidate: 60,
};
} catch (error) {
console.error(`Error getting data for ${params.id}:`, error);
return {
notFound: true,
};
}
}
import { useEffect } from 'react';
import { useRouter } from 'next/router';
export default function LiveRedirect() {
const router = useRouter();
useEffect(() => {
router.replace('/parvagues');
}, [router]);
return (
<div className="min-h-screen bg-black text-white flex items-center justify-center">
<div className="text-center">
<h1 className="text-2xl mb-4">Redirection...</h1>
<p>Vous allez être redirigé vers la page principale de ParVagues.</p>
</div>
</div>
);
}
\ No newline at end of file
This image diff could not be displayed because it is too large. You can view the blob instead.
/* Add the ParVagues color variables globally */
:root {
--neon-down: #8900b3;
--neon-low: #a700d1;
--neon-high: #d900ff;
--coral: #ff3d7b;
--biomod: #5bc091;
--cigarette: #ff8c00;
}
/* Shine animation for album covers */
@keyframes shine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
:global(.hover\:shadow-glow:hover) {
box-shadow: 0 0 15px rgba(217, 0, 255, 0.7);
}
:global(.animate-shine) {
animation: shine 1.5s ease-in-out;
}
.masonry-grid {
display: flex;
margin-left: -1rem; /* gutter size offset */
width: auto;
}
.masonry-grid_column {
padding-left: 1rem; /* gutter size */
background-clip: padding-box;
}
/* Style different sized items */
.masonry-grid_column > div {
margin-bottom: 1rem;
}
/* ParVagues specific styles */
/* New Color Palette */
/* Fixing CSS Modules compatibility - defining colors in a local class */
.colorRoot {
--neon-down: #8900b3;
--neon-low: #a700d1;
--neon-high: #d900ff;
--coral: #ff3d7b;
--biomod: #5bc091;
--cigarette: #ff8c00;
}
/* This class can be added to the main container to provide color variables to all children */
.colorContainer {
composes: colorRoot;
}
.heroSection {
min-height: 100vh;
position: relative;
overflow: hidden;
padding-top: 2rem;
}
.heroTitle {
font-size: clamp(4rem, 9vw, 9rem);
font-weight: 800;
margin-bottom: 1.5rem 0;
padding-top: 0.5em;
padding-bottom: 0.1em;
-webkit-background-clip: text;
background-clip: text;
line-height: 0.9;
letter-spacing: -0.05em;
text-shadow: 0 0 10px rgba(217, 0, 255, 0.5);
}
.bgImage {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0.4;
filter: blur(8px);
transform: scale(1.1);
}
.contentOverlay {
position: relative;
z-index: 10;
min-height: 100vh;
background: linear-gradient(135deg, rgba(9,9,11,0.95) 0%, rgba(137,0,179,0.9) 50%, rgba(9,9,11,0.95) 100%);
}
.heroContent {
/* max width should be 80% */
max-width: 80%;
margin: 0 auto;
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: space-between;
gap: 4rem;
}
@media (max-width: 768px) {
.heroContent {
flex-direction: column;
justify-content: center;
gap: 2rem;
}
}
.heroSubtitle {
font-size: clamp(1.125rem, 3vw, 1.5rem);
color: rgba(255, 255, 255, 0.8);
max-width: 600px;
line-height: 1.5;
margin-bottom: 3rem;
position: relative;
}
.heroSubtitle::after {
content: "";
position: absolute;
bottom: -10px;
left: 0;
width: 60%;
height: 3px;
background: var(--coral);
border-radius: 3px;
box-shadow: 0 0 10px var(--coral);
}
.ctaButton {
position: fixed;
top: 1.5rem;
right: 1.5rem;
z-index: 50;
background: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(8px);
border: 1px solid rgba(217, 0, 255, 0.3);
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
color: var(--neon-high);
transition: all 0.3s ease;
text-decoration: none;
font-weight: 500;
}
.ctaButton:hover {
background: rgba(217, 0, 255, 0.1);
border-color: var(--neon-high);
color: var(--coral);
box-shadow: 0 0 15px rgba(217, 0, 255, 0.5);
}
.plungeButton {
display: inline-flex;
align-items: center;
background: linear-gradient(45deg, var(--neon-low), var(--coral));
color: white;
padding: 1rem 2rem;
border-radius: 0.5rem;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
gap: 0.5rem;
position: relative;
overflow: hidden;
}
.plungeButton::before {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(45deg, var(--neon-down), var(--neon-high), var(--coral), var(--cigarette));
z-index: -1;
animation: rotate 3s linear infinite;
opacity: 0;
transition: opacity 0.3s ease;
border-radius: 0.6rem;
}
.plungeButton:hover::before {
opacity: 1;
}
@keyframes rotate {
0% {
background-position: 0% 0%;
}
100% {
background-position: 200% 200%;
}
}
.plungeButton:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(217, 0, 255, 0.3);
}
.outlineButton {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 1rem 2rem;
border-radius: 0.5rem;
font-weight: 600;
text-decoration: none;
color: white;
border: 1px solid rgba(217, 0, 255, 0.5);
background: rgba(217, 0, 255, 0.1);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.outlineButton:hover {
background: rgba(217, 0, 255, 0.2);
border-color: var(--neon-high);
color: var(--neon-high);
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(217, 0, 255, 0.2);
}
.sectionContainer {
padding: 5rem 1rem;
max-width: 1200px;
margin: 0 auto;
width: 100%;
}
.splitSection {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
@media (max-width: 768px) {
.splitSection {
grid-template-columns: 1fr;
gap: 2rem;
}
}
.bulletPoint {
margin-bottom: 1.5rem;
padding-left: 2rem;
position: relative;
transition: all 0.3s ease;
}
.bulletPoint::before {
content: "→";
position: absolute;
left: 0;
color: var(--neon-high);
font-weight: bold;
}
.codeContainer {
background: rgba(0, 0, 0, 0.7);
border: 1px solid rgba(217, 0, 255, 0.2);
border-radius: 0.5rem;
overflow: hidden;
position: relative;
box-shadow: 0 5px 15px rgba(137, 0, 179, 0.2);
}
.terminalContainer {
background: #1e1e1e;
border: 1px solid #333;
border-radius: 0.5rem;
overflow: hidden;
}
.terminalHeader {
background: #262626;
padding: 0.5rem 1rem;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #444;
}
.terminalControls {
display: flex;
gap: 0.5rem;
}
.redCircle, .yellowCircle, .greenCircle {
width: 12px;
height: 12px;
border-radius: 50%;
}
.redCircle {
background: var(--coral);
}
.yellowCircle {
background: var(--cigarette);
}
.greenCircle {
background: var(--biomod);
}
.terminalTitle {
font-family: monospace;
font-size: 0.875rem;
color: #ddd;
}
.terminalContainer pre {
background: #1e1e1e;
color: #f8f8f2;
padding: 1rem;
margin: 0;
font-family: 'Menlo', 'Monaco', 'Courier New', monospace;
font-size: 0.875rem;
line-height: 1.5;
}
.codeContainer pre {
max-height: inherit;
overflow-y: auto;
margin: 0;
padding: 1rem;
}
.codeContainer::-webkit-scrollbar,
.terminalContainer pre::-webkit-scrollbar {
width: 6px;
}
.codeContainer::-webkit-scrollbar-track,
.terminalContainer pre::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.3);
}
.codeContainer::-webkit-scrollbar-thumb,
.terminalContainer pre::-webkit-scrollbar-thumb {
background: var(--neon-high);
border-radius: 3px;
}
.albumGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 3rem;
}
.albumCard {
background: rgba(0, 0, 0, 0.4);
border: 1px solid rgba(217, 0, 255, 0.2);
border-radius: 0.5rem;
padding: 1.5rem;
transition: all 0.3s ease;
}
.albumCard:hover {
background: rgba(217, 0, 255, 0.05);
border-color: var(--neon-high);
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(217, 0, 255, 0.2);
}
.playerContainer {
margin-top: 1rem;
display: grid;
gap: 0.5rem;
}
.playerButton {
display: inline-flex;
align-items: center;
gap: 0.5rem;
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
padding: 0.5rem 0.75rem;
transition: all 0.3s ease;
font-size: 0.875rem;
border-radius: 0.25rem;
background: rgba(217, 0, 255, 0.1);
border: 1px solid rgba(217, 0, 255, 0.2);
}
.playerButton:hover {
color: var(--neon-high);
background: rgba(217, 0, 255, 0.2);
border-color: var(--neon-high);
transform: translateY(-1px);
box-shadow: 0 0 10px rgba(217, 0, 255, 0.3);
}
.socialLinks {
display: flex;
flex-wrap: wrap;
gap: 1rem;
justify-content: center;
margin-top: 2rem;
}
.socialLink {
color: rgba(255, 255, 255, 0.6);
text-decoration: none;
transition: all 0.3s ease;
padding: 0.75rem 1.5rem;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 0.5rem;
display: inline-flex;
align-items: center;
gap: 0.5rem;
background: rgba(0, 0, 0, 0.3);
}
.socialLink:hover {
color: var(--neon-high);
border-color: var(--neon-high);
background: rgba(217, 0, 255, 0.05);
transform: translateY(-2px);
}
.bulletPoint.cursor-pointer:hover {
background: rgba(217, 0, 255, 0.05);
border-radius: 0.5rem;
}
.footer {
text-align: center;
padding: 2rem;
border-top: 1px solid rgba(217, 0, 255, 0.1);
background: rgba(0, 0, 0, 0.5);
}
.posterCollage {
position: absolute;
inset: 0;
opacity: 0.6; /* Base opacity for the container */
filter: grayscale(100%) brightness(0.3) contrast(1.2);
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 0.5rem;
}
.posterBackground {
position: absolute;
inset: 0;
opacity: 0.6;
filter: grayscale(100%) brightness(0.3) contrast(1.2);
}
.posterImage {
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0; /* Initial opacity to be controlled by JS */
/* The transition for opacity is now handled by the JS effect,
but you can keep a CSS transition if preferred for when JS changes style.opacity */
transition: opacity 0.5s ease;
}
.posterGradient {
position: absolute;
inset: 0;
background: radial-gradient(circle at center, rgba(217, 0, 255, 0.2), rgba(0, 0, 0, 0.9));
}
.highlightText {
position: relative;
display: inline-block;
}
.highlightText::after {
content: "";
position: absolute;
bottom: -2px;
left: 0;
width: 100%;
height: 2px;
background: var(--coral);
border-radius: 2px;
box-shadow: 0 0 8px var(--coral);
}
.glitchEffect {
position: relative;
display: inline-block;
animation: subtle-pulse 4s infinite alternate;
letter-spacing: -0.03em;
color: white;
text-shadow:
0 0 5px rgba(217, 0, 255, 0.7),
0 0 10px rgba(217, 0, 255, 0.5);
font-weight: 900;
}
@keyframes subtle-pulse {
0% {
text-shadow:
0 0 5px rgba(217, 0, 255, 0.7),
0 0 10px rgba(217, 0, 255, 0.5);
}
100% {
text-shadow:
0 0 8px rgba(217, 0, 255, 0.9),
0 0 15px rgba(217, 0, 255, 0.7),
0 0 25px rgba(217, 0, 255, 0.5);
}
}
.glitchEffect::before,
.glitchEffect::after {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
width: 100%;
opacity: 0;
}
.glitchEffect::before {
left: 2px;
text-shadow: -2px 0 var(--coral);
clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%);
}
.glitchEffect::after {
left: -2px;
text-shadow: -2px 0 var(--neon-high);
clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%);
}
.neonGradient {
background: linear-gradient(90deg,
var(--neon-down),
var(--neon-low),
var(--neon-high),
var(--coral)
);
opacity: 0.15;
position: absolute;
inset: 0;
mix-blend-mode: screen;
pointer-events: none;
}
.logoContainer {
display: flex;
flex-direction: column;
align-items: center;
max-width: 300px;
margin-bottom: 2rem;
}
.logoImage {
width: 100%;
height: auto;
filter: drop-shadow(0 0 10px rgba(217, 0, 255, 0.5));
}
/* Shine animation for album covers
NOTE: KEPT HERE FOR REFERENCE, THESE ARE COPIED IN THE MAIN GLOBAL.CSS
AS MODULE CSS FORBIDS ROOT VARIABLES
@keyframes shine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
:global(.hover\:shadow-glow:hover) {
box-shadow: 0 0 15px rgba(217, 0, 255, 0.7);
}
:global(.animate-shine) {
animation: shine 1.5s ease-in-out;
}
*/
#section1 > .h3 {
margin: 1em 0;
text-decoration-line: underline;
text-decoration-color: var(--neon-down);
text-decoration-thickness: 3px;
}
img.live-gallery-image {
max-width: 1em;
}
...@@ -365,7 +365,6 @@ ...@@ -365,7 +365,6 @@
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
} }
/* Hover Popup Styles */ /* Hover Popup Styles */
.hoverReveal { .hoverReveal {
position: relative; position: relative;
...@@ -474,12 +473,18 @@ ...@@ -474,12 +473,18 @@
.hoverPopup { .hoverPopup {
position: absolute; position: absolute;
left: 50%; left: 50%;
bottom: calc(100% + 15px);
transform: translateX(-50%); transform: translateX(-50%);
z-index: 100; z-index: 100;
min-width: 380px; min-width: 250px;
max-width: 500px; max-width: 30vw;
width: max-content;
max-height: 80vh;
overflow: hidden;
top: 10vh;
bottom: auto;
margin: 0 10vw;
animation: fadeIn 0.2s ease-in-out; animation: fadeIn 0.2s ease-in-out;
} }
...@@ -573,12 +578,25 @@ ...@@ -573,12 +578,25 @@
/* Mobile responsiveness */ /* Mobile responsiveness */
@media (max-width: 768px) { @media (max-width: 768px) {
.hoverPopup { .hoverPopup {
min-width: 280px; min-width: auto;
max-width: 340px; max-width: calc(100vw - 40px); /* 20px margin on each side */
width: max-content;
left: 50%;
transform: translateX(-50%);
} }
.popupContent { .popupContent {
padding: 0.8rem; padding: 0.8rem;
font-size: 0.9rem; font-size: 0.9rem;
} }
.popupLinks {
flex-direction: column;
align-items: stretch;
}
.popupLinks a {
text-align: center;
width: 100%;
}
} }
...@@ -2,7 +2,133 @@ ...@@ -2,7 +2,133 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/runtime@^7.3.1": "@algolia/cache-browser-local-storage@4.24.0":
"integrity" "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww=="
"resolved" "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/cache-common" "4.24.0"
"@algolia/cache-common@4.24.0":
"integrity" "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g=="
"resolved" "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz"
"version" "4.24.0"
"@algolia/cache-in-memory@4.24.0":
"integrity" "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w=="
"resolved" "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/cache-common" "4.24.0"
"@algolia/client-account@4.24.0":
"integrity" "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA=="
"resolved" "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/client-common" "4.24.0"
"@algolia/client-search" "4.24.0"
"@algolia/transporter" "4.24.0"
"@algolia/client-analytics@4.24.0":
"integrity" "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg=="
"resolved" "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/client-common" "4.24.0"
"@algolia/client-search" "4.24.0"
"@algolia/requester-common" "4.24.0"
"@algolia/transporter" "4.24.0"
"@algolia/client-common@4.24.0":
"integrity" "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA=="
"resolved" "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/requester-common" "4.24.0"
"@algolia/transporter" "4.24.0"
"@algolia/client-personalization@4.24.0":
"integrity" "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w=="
"resolved" "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/client-common" "4.24.0"
"@algolia/requester-common" "4.24.0"
"@algolia/transporter" "4.24.0"
"@algolia/client-search@4.24.0":
"integrity" "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA=="
"resolved" "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/client-common" "4.24.0"
"@algolia/requester-common" "4.24.0"
"@algolia/transporter" "4.24.0"
"@algolia/events@^4.0.1":
"integrity" "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ=="
"resolved" "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz"
"version" "4.0.1"
"@algolia/logger-common@4.24.0":
"integrity" "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA=="
"resolved" "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz"
"version" "4.24.0"
"@algolia/logger-console@4.24.0":
"integrity" "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg=="
"resolved" "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/logger-common" "4.24.0"
"@algolia/recommend@4.24.0":
"integrity" "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw=="
"resolved" "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/cache-browser-local-storage" "4.24.0"
"@algolia/cache-common" "4.24.0"
"@algolia/cache-in-memory" "4.24.0"
"@algolia/client-common" "4.24.0"
"@algolia/client-search" "4.24.0"
"@algolia/logger-common" "4.24.0"
"@algolia/logger-console" "4.24.0"
"@algolia/requester-browser-xhr" "4.24.0"
"@algolia/requester-common" "4.24.0"
"@algolia/requester-node-http" "4.24.0"
"@algolia/transporter" "4.24.0"
"@algolia/requester-browser-xhr@4.24.0":
"integrity" "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA=="
"resolved" "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/requester-common" "4.24.0"
"@algolia/requester-common@4.24.0":
"integrity" "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA=="
"resolved" "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz"
"version" "4.24.0"
"@algolia/requester-node-http@4.24.0":
"integrity" "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw=="
"resolved" "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/requester-common" "4.24.0"
"@algolia/transporter@4.24.0":
"integrity" "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA=="
"resolved" "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/cache-common" "4.24.0"
"@algolia/logger-common" "4.24.0"
"@algolia/requester-common" "4.24.0"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1":
"integrity" "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==" "integrity" "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA=="
"resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz" "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz"
"version" "7.19.4" "version" "7.19.4"
...@@ -26,6 +152,13 @@ ...@@ -26,6 +152,13 @@
optionalDependencies: optionalDependencies:
"@img/sharp-libvips-linux-x64" "1.1.0" "@img/sharp-libvips-linux-x64" "1.1.0"
"@img/sharp-linuxmusl-x64@0.34.1":
"integrity" "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg=="
"resolved" "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz"
"version" "0.34.1"
optionalDependencies:
"@img/sharp-libvips-linuxmusl-x64" "1.1.0"
"@next/env@15.3.0": "@next/env@15.3.0":
"integrity" "sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==" "integrity" "sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA=="
"resolved" "https://registry.npmjs.org/@next/env/-/env-15.3.0.tgz" "resolved" "https://registry.npmjs.org/@next/env/-/env-15.3.0.tgz"
...@@ -78,6 +211,11 @@ ...@@ -78,6 +211,11 @@
dependencies: dependencies:
"tslib" "^2.8.0" "tslib" "^2.8.0"
"@tailwindcss/aspect-ratio@^0.4.2":
"integrity" "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ=="
"resolved" "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz"
"version" "0.4.2"
"@types/debug@^4.0.0": "@types/debug@^4.0.0":
"integrity" "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==" "integrity" "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="
"resolved" "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" "resolved" "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz"
...@@ -85,11 +223,21 @@ ...@@ -85,11 +223,21 @@
dependencies: dependencies:
"@types/ms" "*" "@types/ms" "*"
"@types/dom-speech-recognition@^0.0.1":
"integrity" "sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw=="
"resolved" "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.1.tgz"
"version" "0.0.1"
"@types/estree@^1.0.0": "@types/estree@^1.0.0":
"integrity" "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" "integrity" "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="
"resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz" "resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz"
"version" "1.0.7" "version" "1.0.7"
"@types/google.maps@^3.55.12":
"integrity" "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ=="
"resolved" "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz"
"version" "3.58.1"
"@types/hast@^2.0.0": "@types/hast@^2.0.0":
"integrity" "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==" "integrity" "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g=="
"resolved" "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz" "resolved" "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz"
...@@ -97,6 +245,11 @@ ...@@ -97,6 +245,11 @@
dependencies: dependencies:
"@types/unist" "*" "@types/unist" "*"
"@types/hogan.js@^3.0.0":
"integrity" "sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA=="
"resolved" "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.5.tgz"
"version" "3.0.5"
"@types/mdast@^3.0.0": "@types/mdast@^3.0.0":
"integrity" "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==" "integrity" "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ=="
"resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz" "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz"
...@@ -119,6 +272,11 @@ ...@@ -119,6 +272,11 @@
"resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
"version" "15.7.5" "version" "15.7.5"
"@types/qs@^6.5.3":
"integrity" "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA=="
"resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz"
"version" "6.9.18"
"@types/react@^18.2.61": "@types/react@^18.2.61":
"integrity" "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==" "integrity" "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg=="
"resolved" "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz" "resolved" "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz"
...@@ -147,6 +305,46 @@ ...@@ -147,6 +305,46 @@
"resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz" "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz"
"version" "2.0.11" "version" "2.0.11"
"abbrev@1":
"integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
"resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
"version" "1.1.1"
"algoliasearch-helper@3.14.0":
"integrity" "sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ=="
"resolved" "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz"
"version" "3.14.0"
dependencies:
"@algolia/events" "^4.0.1"
"algoliasearch-helper@3.25.0":
"integrity" "sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw=="
"resolved" "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz"
"version" "3.25.0"
dependencies:
"@algolia/events" "^4.0.1"
"algoliasearch@>= 3.1 < 5", "algoliasearch@>= 3.1 < 6":
"integrity" "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g=="
"resolved" "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz"
"version" "4.24.0"
dependencies:
"@algolia/cache-browser-local-storage" "4.24.0"
"@algolia/cache-common" "4.24.0"
"@algolia/cache-in-memory" "4.24.0"
"@algolia/client-account" "4.24.0"
"@algolia/client-analytics" "4.24.0"
"@algolia/client-common" "4.24.0"
"@algolia/client-personalization" "4.24.0"
"@algolia/client-search" "4.24.0"
"@algolia/logger-common" "4.24.0"
"@algolia/logger-console" "4.24.0"
"@algolia/recommend" "4.24.0"
"@algolia/requester-browser-xhr" "4.24.0"
"@algolia/requester-common" "4.24.0"
"@algolia/requester-node-http" "4.24.0"
"@algolia/transporter" "4.24.0"
"argparse@^1.0.7": "argparse@^1.0.7":
"integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="
"resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
...@@ -239,7 +437,7 @@ ...@@ -239,7 +437,7 @@
"resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz"
"version" "1.1.4" "version" "1.1.4"
"classnames@^2.5.1": "classnames@^2.2.5", "classnames@^2.5.1":
"integrity" "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" "integrity" "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
"resolved" "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz" "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz"
"version" "2.5.1" "version" "2.5.1"
...@@ -538,6 +736,19 @@ ...@@ -538,6 +736,19 @@
"resolved" "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz" "resolved" "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz"
"version" "1.0.0" "version" "1.0.0"
"hogan.js@^3.0.2":
"integrity" "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg=="
"resolved" "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz"
"version" "3.0.2"
dependencies:
"mkdirp" "0.3.0"
"nopt" "1.0.10"
"htm@^3.0.0":
"integrity" "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ=="
"resolved" "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz"
"version" "3.1.1"
"html-void-elements@^2.0.0": "html-void-elements@^2.0.0":
"integrity" "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==" "integrity" "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
"resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz" "resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz"
...@@ -557,6 +768,31 @@ ...@@ -557,6 +768,31 @@
"resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
"version" "2.0.4" "version" "2.0.4"
"instantsearch-ui-components@0.11.1":
"integrity" "sha512-ZqUbJYYgObQ47J08ftXV1KNC1vdEoiD4/49qrkCdW46kRzLxLgYXJGuEuk48DQwK4aBtIoccgTyfbMGfcqNjxg=="
"resolved" "https://registry.npmjs.org/instantsearch-ui-components/-/instantsearch-ui-components-0.11.1.tgz"
"version" "0.11.1"
dependencies:
"@babel/runtime" "^7.1.2"
"instantsearch.js@4.78.3":
"integrity" "sha512-0i7vyX9jHEIKSfhu+CZHL/ySnbMAe7e98YUJiZX5D7AiXo2WvAPbnV/3CXIPR0whNWOXKGvlv7Ji7Pt4Yrn+Aw=="
"resolved" "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.78.3.tgz"
"version" "4.78.3"
dependencies:
"@algolia/events" "^4.0.1"
"@types/dom-speech-recognition" "^0.0.1"
"@types/google.maps" "^3.55.12"
"@types/hogan.js" "^3.0.0"
"@types/qs" "^6.5.3"
"algoliasearch-helper" "3.25.0"
"hogan.js" "^3.0.2"
"htm" "^3.0.0"
"instantsearch-ui-components" "0.11.1"
"preact" "^10.10.0"
"qs" "^6.5.1 < 6.10"
"search-insights" "^2.17.2"
"is-alphabetical@^1.0.0": "is-alphabetical@^1.0.0":
"integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" "integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="
"resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz"
...@@ -665,6 +901,11 @@ ...@@ -665,6 +901,11 @@
"fault" "^1.0.0" "fault" "^1.0.0"
"highlight.js" "~10.7.0" "highlight.js" "~10.7.0"
"marked@^15.0.11":
"integrity" "sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA=="
"resolved" "https://registry.npmjs.org/marked/-/marked-15.0.11.tgz"
"version" "15.0.11"
"mdast-util-definitions@^5.0.0": "mdast-util-definitions@^5.0.0":
"integrity" "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==" "integrity" "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA=="
"resolved" "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz" "resolved" "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz"
...@@ -945,6 +1186,11 @@ ...@@ -945,6 +1186,11 @@
"micromark-util-types" "^1.0.1" "micromark-util-types" "^1.0.1"
"uvu" "^0.5.0" "uvu" "^0.5.0"
"mkdirp@0.3.0":
"integrity" "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew=="
"resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz"
"version" "0.3.0"
"mri@^1.1.0": "mri@^1.1.0":
"integrity" "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" "integrity" "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
"resolved" "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" "resolved" "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz"
...@@ -993,6 +1239,13 @@ ...@@ -993,6 +1239,13 @@
"resolved" "https://registry.npmjs.org/node-getopt/-/node-getopt-0.3.2.tgz" "resolved" "https://registry.npmjs.org/node-getopt/-/node-getopt-0.3.2.tgz"
"version" "0.3.2" "version" "0.3.2"
"nopt@1.0.10":
"integrity" "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg=="
"resolved" "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz"
"version" "1.0.10"
dependencies:
"abbrev" "1"
"object-assign@^4.1.1": "object-assign@^4.1.1":
"integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
"resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
...@@ -1044,17 +1297,22 @@ ...@@ -1044,17 +1297,22 @@
"picocolors" "^1.0.0" "picocolors" "^1.0.0"
"source-map-js" "^1.0.2" "source-map-js" "^1.0.2"
"prismjs@^1.27.0": "preact@^10.10.0":
"integrity" "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" "integrity" "sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g=="
"resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz" "resolved" "https://registry.npmjs.org/preact/-/preact-10.26.6.tgz"
"version" "1.29.0" "version" "10.26.6"
"prismjs@^1.27.0", "prismjs@^1.30.0":
"integrity" "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="
"resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz"
"version" "1.30.0"
"prismjs@~1.27.0": "prismjs@~1.27.0":
"integrity" "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" "integrity" "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="
"resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz" "resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz"
"version" "1.27.0" "version" "1.27.0"
"prop-types@^15.7.2": "prop-types@^15.6.2", "prop-types@^15.7.2":
"integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
"resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
"version" "15.8.1" "version" "15.8.1"
...@@ -1075,6 +1333,11 @@ ...@@ -1075,6 +1333,11 @@
"resolved" "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz" "resolved" "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz"
"version" "6.5.0" "version" "6.5.0"
"qs@^6.5.1 < 6.10":
"integrity" "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw=="
"resolved" "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz"
"version" "6.9.7"
"raf-loop@^1.1.3": "raf-loop@^1.1.3":
"integrity" "sha512-fcIuuIdjbD6OB0IFw4d+cjqdrzDorKkIpwOiSnfU4Tht5PTFiJutR8hnCOGslYqZDyIzwpF5WnwbnTTuo9uUUA==" "integrity" "sha512-fcIuuIdjbD6OB0IFw4d+cjqdrzDorKkIpwOiSnfU4Tht5PTFiJutR8hnCOGslYqZDyIzwpF5WnwbnTTuo9uUUA=="
"resolved" "https://registry.npmjs.org/raf-loop/-/raf-loop-1.1.3.tgz" "resolved" "https://registry.npmjs.org/raf-loop/-/raf-loop-1.1.3.tgz"
...@@ -1092,7 +1355,7 @@ ...@@ -1092,7 +1355,7 @@
dependencies: dependencies:
"performance-now" "^2.1.0" "performance-now" "^2.1.0"
"react-dom@^18.2.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0": "react-dom@^18.2.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom@>= 16.3.0 < 19", "react-dom@>= 16.8.0 < 20":
"integrity" "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==" "integrity" "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="
"resolved" "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
"version" "18.3.1" "version" "18.3.1"
...@@ -1100,16 +1363,68 @@ ...@@ -1100,16 +1363,68 @@
"loose-envify" "^1.1.0" "loose-envify" "^1.1.0"
"scheduler" "^0.23.2" "scheduler" "^0.23.2"
"react-fast-compare@^3.0.1": "react-fast-compare@^3.0.0", "react-fast-compare@^3.0.1":
"integrity" "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" "integrity" "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA=="
"resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz"
"version" "3.2.0" "version" "3.2.0"
"react-icons@^5.5.0":
"integrity" "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="
"resolved" "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz"
"version" "5.5.0"
"react-instantsearch-core@6.40.4":
"integrity" "sha512-sEOgRU2MKL8edO85sNHvKlZ5yq9OFw++CDsEqYpHJvbWLE/2J2N49XAUY90kior09I2kBkbgowBbov+Py1AubQ=="
"resolved" "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.40.4.tgz"
"version" "6.40.4"
dependencies:
"@babel/runtime" "^7.1.2"
"algoliasearch-helper" "3.14.0"
"prop-types" "^15.6.2"
"react-fast-compare" "^3.0.0"
"react-instantsearch-core@7.15.7":
"integrity" "sha512-9FOHY66VMD0FnxF1dT9g5eEPmGybeKwVAa/T2JX1AqLJCQMHysjEl6qH4+/F8M82KdCqzBof4mpFosPiAVuruA=="
"resolved" "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-7.15.7.tgz"
"version" "7.15.7"
dependencies:
"@babel/runtime" "^7.1.2"
"algoliasearch-helper" "3.25.0"
"instantsearch.js" "4.78.3"
"use-sync-external-store" "^1.0.0"
"react-instantsearch-dom@^6.40.4":
"integrity" "sha512-Oy8EKEOg/dfTE8tHc7GZRlzUdbZY4Mxas1x2OtvSNui+YAbIWafIf1g98iOGyVTB2qI5WH91YyUJTLPNfLrs6Q=="
"resolved" "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.40.4.tgz"
"version" "6.40.4"
dependencies:
"@babel/runtime" "^7.1.2"
"algoliasearch-helper" "3.14.0"
"classnames" "^2.2.5"
"prop-types" "^15.6.2"
"react-fast-compare" "^3.0.0"
"react-instantsearch-core" "6.40.4"
"react-instantsearch@^7.15.7":
"integrity" "sha512-UX81UyyuCe0uoAes9M8f7NKv1CkAdRWw1QgR+DucGWqnVeE9srntPprtNbMBGzcXUuV4wur8AP6iRYXn5tm+Vg=="
"resolved" "https://registry.npmjs.org/react-instantsearch/-/react-instantsearch-7.15.7.tgz"
"version" "7.15.7"
dependencies:
"@babel/runtime" "^7.1.2"
"instantsearch-ui-components" "0.11.1"
"instantsearch.js" "4.78.3"
"react-instantsearch-core" "7.15.7"
"react-is@^16.13.1": "react-is@^16.13.1":
"integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
"resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
"version" "16.13.1" "version" "16.13.1"
"react-masonry-css@^1.0.16":
"integrity" "sha512-KSW0hR2VQmltt/qAa3eXOctQDyOu7+ZBevtKgpNDSzT7k5LA/0XntNa9z9HKCdz3QlxmJHglTZ18e4sX4V8zZQ=="
"resolved" "https://registry.npmjs.org/react-masonry-css/-/react-masonry-css-1.0.16.tgz"
"version" "1.0.16"
"react-player@^2.14.1": "react-player@^2.14.1":
"integrity" "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==" "integrity" "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ=="
"resolved" "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz" "resolved" "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz"
...@@ -1133,7 +1448,7 @@ ...@@ -1133,7 +1448,7 @@
"prismjs" "^1.27.0" "prismjs" "^1.27.0"
"refractor" "^3.6.0" "refractor" "^3.6.0"
"react@^18.2.0", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react@^18.3.1", "react@>= 0.14.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", "react@>=16.6.0": "react@*", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18.2.0", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react@^18.3.1", "react@>= 0.14.0", "react@>= 16.3.0 < 19", "react@>= 16.8.0 < 20", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", "react@>=16.0.0", "react@>=16.6.0":
"integrity" "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==" "integrity" "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="
"resolved" "https://registry.npmjs.org/react/-/react-18.3.1.tgz" "resolved" "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
"version" "18.3.1" "version" "18.3.1"
...@@ -1236,6 +1551,11 @@ ...@@ -1236,6 +1551,11 @@
dependencies: dependencies:
"loose-envify" "^1.1.0" "loose-envify" "^1.1.0"
"search-insights@^2.17.2":
"integrity" "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ=="
"resolved" "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz"
"version" "2.17.3"
"section-matter@^1.0.0": "section-matter@^1.0.0":
"integrity" "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==" "integrity" "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="
"resolved" "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" "resolved" "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz"
...@@ -1348,6 +1668,16 @@ ...@@ -1348,6 +1668,16 @@
"resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
"version" "1.0.0" "version" "1.0.0"
"swiper@^11.2.6":
"integrity" "sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q=="
"resolved" "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz"
"version" "11.2.6"
"tailwindcss@>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1":
"integrity" "sha512-j0cGLTreM6u4OWzBeLBpycK0WIh8w7kSwcUsQZoGLHZ7xDTdM69lN64AgoIEEwFi0tnhs4wSykUa5YWxAzgFYg=="
"resolved" "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.6.tgz"
"version" "4.1.6"
"trim-lines@^3.0.0": "trim-lines@^3.0.0":
"integrity" "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==" "integrity" "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="
"resolved" "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz" "resolved" "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz"
...@@ -1424,6 +1754,11 @@ ...@@ -1424,6 +1754,11 @@
"unist-util-is" "^5.0.0" "unist-util-is" "^5.0.0"
"unist-util-visit-parents" "^5.1.1" "unist-util-visit-parents" "^5.1.1"
"use-sync-external-store@^1.0.0":
"integrity" "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="
"resolved" "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz"
"version" "1.5.0"
"uvu@^0.5.0": "uvu@^0.5.0":
"integrity" "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==" "integrity" "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA=="
"resolved" "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz" "resolved" "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment