diff --git a/.env b/.env index 1b856b4b..e52fdc0f 100644 --- a/.env +++ b/.env @@ -16,6 +16,11 @@ TESTING=True URL_API=http://localhost:8000/api/ +# CORS Configuration +# For local development - allows localhost on different ports +# For production - add your Vercel URL: https://your-app.vercel.app +CORS_ORIGINS=http://localhost:3000,http://localhost:8000,http://127.0.0.1:3000 + # REACT # React env variables are fixed when building the app - but overwritten when setting up the docker container. diff --git a/.gitignore b/.gitignore index 95e4782b..b23f2d9d 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,6 @@ start_macOs_Intell/* start_macOS_M4/* +# Local documentation (symlinked) +docs/ + diff --git a/PULL_REQUEST.md b/PULL_REQUEST.md deleted file mode 100644 index 4eb15c9a..00000000 --- a/PULL_REQUEST.md +++ /dev/null @@ -1,210 +0,0 @@ -# Pull Request: SEO-Friendly URLs and Search Functionality Fixes - -## Summary - -This PR implements SEO-friendly URLs for all entity types and fixes search functionality across datasets, tasks, flows, and runs. - -## Changes Overview - -### 1. **SEO-Friendly URL Structure** ✨ - -Migrated all entity detail pages to use descriptive, SEO-optimized URLs: - -| Entity | Old URL | New URL (Canonical) | Status | -| -------- | -------- | ------------------- | ----------- | -| Datasets | `/d/:id` | `/datasets/:id` | ✅ Complete | -| Tasks | `/t/:id` | `/tasks/:id` | ✅ Complete | -| Flows | `/f/:id` | `/flows/:id` | ✅ Complete | -| Runs | `/r/:id` | `/runs/:id` | ✅ Complete | - -**Benefits:** - -- Better Google indexing and SEO ranking -- More intuitive, user-friendly URLs -- Improved sharing and citation experience -- Professional URL structure for academic references - -### 2. **Backward Compatibility Redirects** 🔄 - -Old URLs automatically redirect to new canonical URLs to maintain compatibility with: - -- Academic papers and citations -- Bookmarks and saved links -- External references - -**Implementation:** - -- `/d/[dataId].js` → Redirects to `/datasets/[id]` -- `/t/[taskId].js` → Redirects to `/tasks/[id]` -- `/f/[flowId].js` → Redirects to `/flows/[id]` -- `/r/[runId].js` → Redirects to `/runs/[id]` - -### 3. **Fixed Search Result Navigation** 🔍 - -Search results now correctly navigate to the new SEO-friendly URLs: - -**Files Modified:** - -- `app/src/components/search/ResultCard.js` - - Added entity type detection via `_meta.rawHit._type` - - Added ID field mapping for each entity type - - Implemented URL generation based on entity type - -**Logic:** - -```javascript -// Maps entity types to correct ID fields -data → data_id -task → task_id -flow → flow_id -run → run_id - -// Generates SEO-friendly URLs -data → /datasets/:id -task → /tasks/:id -flow → /flows/:id -run → /runs/:id -``` - -### 4. **Elasticsearch Connector Improvements** 🔧 - -Enhanced `OpenMLSearchConnector.js` to properly handle entity types: - -**Changes:** - -- Added `_meta.rawHit._type` field with index name -- Ensures entity type is correctly passed to search results -- Enables proper routing based on entity type - -### 5. **Search Configuration Updates** ⚙️ - -Updated search configs to include necessary ID fields: - -**Files Modified:** - -- `app/src/search_configs/runConfig.js` - Added `run_id` to result_fields - -### 6. **Component Fixes** 🐛 - -Fixed display issues in search result cards: - -**Files Modified:** - -- `app/src/components/search/taskCard.js` - - - Fixed Title to use `tasktype.name` and `source_data.name` - - Was incorrectly using run fields - -- `app/src/components/search/flowCard.js` - - Fixed Title to use `name` field - - Was incorrectly using run fields - -### 7. **Detail Page Migrations** 📄 - -Moved all entity detail pages to their new canonical locations: - -**Datasets:** - -- Content moved: `/d/[dataId].js` → `/datasets/[id].js` -- Updated param name: `params.dataId` → `params.id` -- Updated internal links to use new URLs - -**Tasks:** - -- Content moved: `/t/[taskId].js` → `/tasks/[id].js` -- Updated param name: `params.taskId` → `params.id` -- Updated internal links: `/d/` → `/datasets/` - -**Flows:** - -- Content moved: `/f/[flowId].js` → `/flows/[id].js` -- Updated param name: `params.flowId` → `params.id` - -**Runs:** - -- Content moved: `/r/[runId].js` → `/runs/[id].js` -- Updated param name: `params.runId` → `params.id` -- Updated internal links: `/d/` → `/datasets/`, `/t/` → `/tasks/`, `/f/` → `/flows/` - -## Testing Checklist ✅ - -- [x] Datasets search page displays correctly -- [x] Tasks search page displays correctly -- [x] Flows search page displays correctly -- [x] Runs search page displays correctly -- [x] Clicking dataset leads to `/datasets/:id` -- [x] Clicking task leads to `/tasks/:id` -- [x] Clicking flow leads to `/flows/:id` -- [x] Clicking run leads to `/runs/:id` -- [x] Old `/d/:id` URLs redirect to `/datasets/:id` -- [x] Old `/t/:id` URLs redirect to `/tasks/:id` -- [x] Old `/f/:id` URLs redirect to `/flows/:id` -- [x] Old `/r/:id` URLs redirect to `/runs/:id` -- [x] Detail pages load correctly with new URLs -- [x] Internal links use new URL structure - -## Files Changed - -### New Files Created: - -- `/app/src/pages/datasets/[id].js` - Dataset detail page (canonical) -- `/app/src/pages/tasks/[id].js` - Task detail page (canonical) -- `/app/src/pages/flows/[id].js` - Flow detail page (canonical) -- `/app/src/pages/runs/[id].js` - Run detail page (canonical) - -### Modified Files: - -- `/app/src/pages/d/[dataId].js` - Now redirects to `/datasets/:id` -- `/app/src/pages/t/[taskId].js` - Now redirects to `/tasks/:id` -- `/app/src/pages/f/[flowId].js` - Now redirects to `/flows/:id` -- `/app/src/pages/r/[runId].js` - Now redirects to `/runs/:id` -- `/app/src/components/search/ResultCard.js` - Added entity-aware URL generation -- `/app/src/components/search/taskCard.js` - Fixed Title component -- `/app/src/components/search/flowCard.js` - Fixed Title component -- `/app/src/services/OpenMLSearchConnector.js` - Added entity type metadata -- `/app/src/search_configs/runConfig.js` - Added run_id field - -## SEO Impact 📈 - -**Before:** - -- URLs like `/d/123`, `/t/456` are not descriptive -- Search engines can't understand content from URL -- Poor user experience when sharing links - -**After:** - -- URLs like `/datasets/123`, `/tasks/456` are self-documenting -- Better search engine indexing -- Professional appearance for academic citations -- Improved social media sharing with descriptive URLs - -## Breaking Changes ⚠️ - -**None** - All old URLs continue to work via automatic redirects. - -## Migration Notes - -For developers working with links: - -- Update any hardcoded links to use new URL structure -- Internal links already updated in this PR -- External links will redirect automatically - -## Documentation Updated - -- `TEAM_REPORT.md` - Updated with new URL structure and redirect information - -## Related Issues - -Fixes navigation issues where clicking on search results led to incorrect URLs. - -## Deployment Notes - -No special deployment steps required. Changes are backward compatible. - ---- - -**Tested on:** Next.js 15.3.1 with Turbopack -**Browser Compatibility:** Chrome, Firefox, Safari, Edge -**Status:** Ready for review and merge diff --git a/app-next/DEPLOYMENT.md b/app-next/DEPLOYMENT.md new file mode 100644 index 00000000..36dbccf4 --- /dev/null +++ b/app-next/DEPLOYMENT.md @@ -0,0 +1,244 @@ +# Deploying app-next to Vercel + +## Quick Start + +### 1. Push to GitHub + +```bash +git add . +git commit -m "Prepare for Vercel deployment" +git push origin main +``` + +### 2. Import to Vercel + +1. Go to [vercel.com](https://vercel.com) +2. Click **Add New** → **Project** +3. Import your `openml.org` repository +4. Select the **app-next** directory as the root directory +5. Framework Preset: **Next.js** (auto-detected) +6. Click **Deploy** + +### 3. Configure Environment Variables + +After deployment, go to **Project Settings** → **Environment Variables** and add: + +#### Minimal Configuration (Using Public OpenML API) + +```bash +# API Configuration +NEXT_PUBLIC_API_URL=https://www.openml.org +NEXT_PUBLIC_URL_API=https://www.openml.org/api/v1 +NEXT_PUBLIC_URL_SITE_BACKEND=https://www.openml.org + +# Elasticsearch +NEXT_PUBLIC_ENABLE_ELASTICSEARCH=true +NEXT_PUBLIC_ELASTICSEARCH_SERVER=https://www.openml.org/es +NEXT_PUBLIC_URL_ELASTICSEARCH=https://www.openml.org/es +NEXT_PUBLIC_ELASTICSEARCH_VERSION_MAYOR=8 + +# MinIO (File Storage) +NEXT_PUBLIC_ENABLE_MINIO=true +NEXT_PUBLIC_URL_MINIO=https://www.openml.org/data + +# Node Environment +NODE_ENV=production +NEXT_TELEMETRY_DISABLED=1 +``` + +For each variable: + +- Click **Add New** +- Enter **Name** and **Value** +- Select: **Production**, **Preview**, **Development** +- Click **Save** + +### 4. Redeploy + +After adding environment variables: + +1. Go to **Deployments** tab +2. Click **⋯** on latest deployment +3. Click **Redeploy** + +Your app will be live at `https://your-project.vercel.app` + +--- + +## Optional Configurations + +### Analytics (Recommended) + +#### Vercel Analytics + +Automatically enabled on Vercel. No configuration needed. + +#### Google Analytics + +Add to environment variables: + +```bash +NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX +``` + +### OAuth Login (GitHub) + +1. Create GitHub OAuth App: + - Go to: https://github.com/settings/developers + - Click **New OAuth App** + - **Application name**: OpenML + - **Homepage URL**: https://your-project.vercel.app + - **Authorization callback URL**: https://your-project.vercel.app/api/auth/github/callback + - Click **Register application** + - Copy **Client ID** and generate **Client Secret** + +2. Add to Vercel environment variables: + +```bash +NEXT_PUBLIC_GITHUB_OAUTH_CLIENT_ID=your_github_client_id +GITHUB_OAUTH_CLIENT_SECRET=your_github_client_secret +``` + +### Error Tracking (Sentry) + +1. Create Sentry project at [sentry.io](https://sentry.io) +2. Get your DSN +3. Add to environment variables: + +```bash +SENTRY_DSN=https://xxx@xxx.ingest.sentry.io/xxx +NEXT_PUBLIC_SENTRY_DSN=https://xxx@xxx.ingest.sentry.io/xxx +``` + +### Custom Domain + +1. Go to **Settings** → **Domains** +2. Add your domain (e.g., `openml.org`) +3. Update DNS records as instructed by Vercel +4. Vercel automatically provisions SSL certificate + +--- + +## Advanced: Deploy Your Own Backend + +If you want to deploy the Python backend (`server/`) separately: + +### Option 1: Railway + +1. Go to [railway.app](https://railway.app) +2. Create new project from GitHub +3. Select `server/` directory +4. Add environment variables (PostgreSQL, etc.) +5. Deploy + +### Option 2: Fly.io + +```bash +cd server +fly launch +fly deploy +``` + +### Update Frontend Environment Variables + +```bash +NEXT_PUBLIC_API_URL=https://your-backend.railway.app +NEXT_PUBLIC_URL_API=https://your-backend.railway.app/api/v1 +NEXT_PUBLIC_URL_SITE_BACKEND=https://your-backend.railway.app +``` + +--- + +## Troubleshooting + +### Build Errors + +**Issue**: Module not found errors + +- **Solution**: Check `package.json` dependencies are installed +- Run `npm install` locally to verify + +**Issue**: Environment variable not found + +- **Solution**: Ensure variables starting with `NEXT_PUBLIC_` are set in Vercel + +### Runtime Errors + +**Issue**: API calls failing + +- **Solution**: Check CORS settings on backend +- Verify `NEXT_PUBLIC_API_URL` is correct + +**Issue**: Images not loading + +- **Solution**: Verify `remotePatterns` in `next.config.ts` +- Check MinIO URL is correct + +### Performance Issues + +**Issue**: Slow page loads + +- **Solution**: Enable Vercel Analytics to identify bottlenecks +- Use dynamic imports for heavy components: + ```tsx + const HeavyComponent = dynamic(() => import("./HeavyComponent"), { + loading: () => , + }); + ``` + +--- + +## Monitoring + +### Vercel Dashboard + +Monitor your deployment: + +- **Analytics**: Page views, performance metrics +- **Logs**: Runtime logs and errors +- **Deployments**: Build history and status + +### Health Checks + +Create a health check endpoint: + +```tsx +// app/api/health/route.ts +export async function GET() { + return Response.json({ status: "ok", timestamp: new Date().toISOString() }); +} +``` + +Test: `https://your-project.vercel.app/api/health` + +--- + +## Security Checklist + +- [ ] Environment variables set in Vercel (not in `.env.production`) +- [ ] Secrets (API keys, OAuth secrets) are private +- [ ] CORS configured correctly on backend +- [ ] OAuth callback URLs match deployment domain +- [ ] CSP headers configured (if needed) +- [ ] Rate limiting on API routes (if applicable) + +--- + +## Next Steps + +1. ✅ Deploy to Vercel +2. ✅ Configure environment variables +3. ✅ Test all pages and functionality +4. ⬜ Add custom domain +5. ⬜ Enable analytics +6. ⬜ Set up error tracking (Sentry) +7. ⬜ Configure OAuth for login +8. ⬜ Monitor performance and errors + +--- + +## Support + +- **Vercel Docs**: https://vercel.com/docs +- **Next.js Docs**: https://nextjs.org/docs +- **OpenML GitHub**: https://github.com/openml/openml.org diff --git a/app-next/README.md b/app-next/README.md index e215bc4c..734284f8 100644 --- a/app-next/README.md +++ b/app-next/README.md @@ -14,7 +14,7 @@ pnpm dev bun dev ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +Open [http://localhost:3050](http://localhost:3050) with your browser to see the result. You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. diff --git a/app-next/TEAM_ROADMAP.md b/app-next/TEAM_ROADMAP.md new file mode 100644 index 00000000..3ef5ae6b --- /dev/null +++ b/app-next/TEAM_ROADMAP.md @@ -0,0 +1,208 @@ +# OpenML Next.js - Deployment Roadmap + +## Strategy + +**Phase 1 (NOW)**: OpenML credentials login → Vercel + Development +**Phase 2 (LATER)**: OAuth + Sign-up → TU/e Production + +--- + +## Phase 1: OpenML Credentials Login ✅ + +### Status + +- ✅ Development working (localhost:3050) +- 🔄 Vercel ready for testing +- ⏳ TU/e backend needs CORS update + +### Required Backend Changes + +**CORS Configuration** (Flask): + +```python +CORS_ORIGINS = [ + "https://openmlorg.vercel.app", + "https://www.openml.org", + "http://localhost:3050" +] +``` + +**Endpoints** (should exist): + +- `POST /login` → Returns JWT +- `GET /profile` → Returns user data (needs JWT in Authorization header) +- `POST /image` → Avatar upload (optional) + +### Testing Checklist + +- [ ] Login at `https://openmlorg.vercel.app/auth/signin` +- [ ] Avatar/initials appear in header +- [ ] Profile page loads (`/auth/profile`) +- [ ] Session persists across navigation +- [ ] Logout works +- [ ] No CORS errors in console + +--- + +## Phase 2: OAuth & Sign-Up (Prepared) + +### Frontend Status + +✅ Code implemented, needs production config + +### Backend Requirements + +#### 1. GitHub OAuth + +**Create OAuth App**: + +``` +URL: https://github.com/settings/developers +Homepage: https://www.openml.org +Callback: https://www.openml.org/api/auth/callback/github +``` + +**Environment Variables**: + +```bash +GITHUB_ID= +GITHUB_SECRET= +``` + +**Backend Endpoint** (`POST /auth/oauth/github`): + +```python +# Request body: +{ + "provider": "github", + "providerId": "12345678", + "email": "user@example.com", + "name": "John Doe", + "image": "https://avatars.githubusercontent.com/..." +} + +# Response: +{ + "access_token": "jwt_token", + "id": 123, + "username": "johndoe" +} + +# Logic: +# 1. Find/create user by providerId or email +# 2. Link OAuth provider to account +# 3. Return JWT +``` + +#### 2. Google OAuth (Optional) + +**Create OAuth App**: + +``` +URL: https://console.cloud.google.com/ +Authorized origins: https://www.openml.org +Callback: https://www.openml.org/api/auth/callback/google +``` + +**Environment Variables**: + +```bash +GOOGLE_ID= +GOOGLE_SECRET= +``` + +**Backend**: Same as GitHub, endpoint `/auth/oauth/google` + +#### 3. Email Verification + +**SMTP Configuration**: + +```bash +SMTP_SERVER=smtp.sendgrid.net +SMTP_PORT=587 +SMTP_LOGIN=apikey +SMTP_PASS= +EMAIL_SENDER=noreply@openml.org +``` + +**Backend Endpoints**: + +- `POST /register` → Create inactive user, send verification email +- `GET /verify-email/` → Activate account + +#### 4. Database Schema + +```sql +-- OAuth linking (option 1: add columns to users table) +ALTER TABLE users ADD oauth_provider VARCHAR(50); +ALTER TABLE users ADD oauth_provider_id VARCHAR(255); +ALTER TABLE users ADD email_verified BOOLEAN DEFAULT FALSE; + +-- OAuth linking (option 2: separate table) +CREATE TABLE oauth_providers ( + id SERIAL PRIMARY KEY, + user_id INT REFERENCES users(id), + provider VARCHAR(50), + provider_id VARCHAR(255), + created_at TIMESTAMP DEFAULT NOW() +); +``` + +--- + +## Security Checklist (Production) + +```python +# Flask +JWT_SECRET_KEY = +APP_SECRET_KEY = +SESSION_COOKIE_SECURE = True +CSRF_COOKIE_SECURE = True + +# CORS (production only) +CORS_ORIGINS = ["https://www.openml.org", "https://openml.org"] + +# Database +DATABASE_URI = "postgresql://..." # SSL enabled +``` + +--- + +## Current Status + +| Feature | Dev | Vercel | Production | +| --------------- | --- | ------ | ---------- | +| OpenML Login | ✅ | 🔄 | ⏳ CORS | +| Avatar/Initials | ✅ | ✅ | ✅ | +| Profile Display | ✅ | ✅ | ✅ | +| Logout | ✅ | ✅ | ✅ | +| GitHub OAuth | ⚠️ | ❌ | ⏳ Setup | +| Google OAuth | ❌ | ❌ | ⏳ Setup | +| Sign Up | ⚠️ | ❌ | ⏳ SMTP | + +**Legend**: ✅ Working | 🔄 Ready | ⚠️ Partial | ❌ Not configured | ⏳ Needs setup + +--- + +## Next Steps + +### Immediate (This Week) + +1. Push to Vercel: `git push origin clean-app-next-v2` +2. Backend: Add Vercel domain to CORS +3. Test login flow on Vercel +4. Document issues + +### Future (Before TU/e Production) + +1. Create GitHub OAuth app +2. Configure SMTP (SendGrid recommended) +3. Implement backend OAuth endpoints +4. Update database schema +5. Configure production secrets + +--- + +**Version**: 1.0 +**Updated**: Dec 18, 2025 +**Status**: Phase 1 ready for Vercel testing diff --git a/app-next/docs/examples/localized-routing-examples.tsx b/app-next/docs/examples/localized-routing-examples.tsx deleted file mode 100644 index 6e20f60b..00000000 --- a/app-next/docs/examples/localized-routing-examples.tsx +++ /dev/null @@ -1,236 +0,0 @@ -// Example usage of localized routing in Next.js components - -import { Link } from "@/config/routing"; -import { useRouter, usePathname } from "@/config/routing"; - -// ============================================ -// Example 1: Basic Link Usage -// ============================================ -export function NavigationExample() { - return ( - - ); -} - -// ============================================ -// Example 2: Dynamic Routes with Parameters -// ============================================ -export function DatasetCard({ id }: { id: string }) { - return ( - - View Dataset {id} - - /* Renders: - EN: /datasets/123 - NL: /datasets/123 - FR: /ensembles-de-donnees/123 - DE: /datensatze/123 - */ - ); -} - -// ============================================ -// Example 3: Programmatic Navigation -// ============================================ -export function SearchResults() { - const router = useRouter(); - - const handleDatasetClick = (id: string) => { - // Navigate programmatically - automatically localized - router.push({ - pathname: "/datasets/[id]", - params: { id }, - }); - }; - - return ( - - ); -} - -// ============================================ -// Example 4: Get Current Pathname -// ============================================ -export function ActiveNavItem() { - const pathname = usePathname(); - // Returns internal pathname: "/datasets" (not the localized URL) - - const isActive = pathname === "/datasets"; - - return
Datasets
; -} - -// ============================================ -// Example 5: Nested Routes -// ============================================ -export function BenchmarksMenu() { - return ( -
    -
  • - Task Suites - {/* Renders: - EN: /benchmarks/tasks-suites - NL: /benchmarks/taak-suites - FR: /benchmarks/suites-de-taches - DE: /benchmarks/aufgaben-suiten - */} -
  • -
  • - Run Studies - {/* Renders: - EN: /benchmarks/run-studies - NL: /benchmarks/run-studies - FR: /benchmarks/etudes-d-executions - DE: /benchmarks/lauf-studien - */} -
  • -
- ); -} - -// ============================================ -// Example 6: Auth Routes -// ============================================ -export function AuthButtons() { - return ( -
- Sign In - {/* Renders: - EN: /auth/sign-in - NL: /auth/inloggen - FR: /auth/connexion - DE: /auth/anmelden - */} - - Sign Up - {/* Renders: - EN: /auth/sign-up - NL: /auth/aanmelden - FR: /auth/inscription - DE: /auth/registrieren - */} -
- ); -} - -// ============================================ -// Example 7: Server-Side Redirect -// ============================================ -import { redirect } from "@/config/routing"; - -export default async function ProtectedPage() { - const session = await getSession(); - - if (!session) { - // Redirect with automatic localization - redirect("/auth/sign-in"); - } - - return
Protected content
; -} - -// ============================================ -// Example 8: Complex Navigation with Search Params -// ============================================ -export function FilteredDatasets() { - const router = useRouter(); - - const applyFilters = (filters: Record) => { - const searchParams = new URLSearchParams(filters); - - router.push({ - pathname: "/datasets", - // @ts-ignore - search params support - query: Object.fromEntries(searchParams), - }); - }; - - return ( - - ); -} - -// ============================================ -// Example 9: Language Switcher -// ============================================ -import { useLocale } from "next-intl"; - -export function LanguageSwitcher() { - const locale = useLocale(); - const pathname = usePathname(); - - return ( -
- {/* Current locale: {locale} */} - {/* To switch languages, use with locale prop */} - - Nederlands - - - Français - - - Deutsch - -
- ); -} - -// ============================================ -// Testing URLs -// ============================================ -/* -Test these URLs in your browser: - -English (default - no prefix): -- http://localhost:3050/datasets -- http://localhost:3050/tasks -- http://localhost:3050/datasets/123 -- http://localhost:3050/benchmarks/tasks-suites -- http://localhost:3050/auth/sign-in - -Dutch (nl prefix): -- http://localhost:3050/nl/datasets -- http://localhost:3050/nl/taken -- http://localhost:3050/nl/datasets/123 -- http://localhost:3050/nl/benchmarks/taak-suites -- http://localhost:3050/nl/auth/inloggen - -French (fr prefix + localized URLs): -- http://localhost:3050/fr/ensembles-de-donnees -- http://localhost:3050/fr/taches -- http://localhost:3050/fr/ensembles-de-donnees/123 -- http://localhost:3050/fr/benchmarks/suites-de-taches -- http://localhost:3050/fr/auth/connexion - -German (de prefix + localized URLs): -- http://localhost:3050/de/datensatze -- http://localhost:3050/de/aufgaben -- http://localhost:3050/de/datensatze/123 -- http://localhost:3050/de/benchmarks/aufgaben-suiten -- http://localhost:3050/de/auth/anmelden -*/ diff --git a/app-next/messages/de.json b/app-next/messages/de.json index af3ea9b7..f6bd4b14 100644 --- a/app-next/messages/de.json +++ b/app-next/messages/de.json @@ -4,7 +4,8 @@ "datasets": "Datensätze", "tasks": "Aufgaben", "flows": "Flows", - "runs": "Läufe", + "runs": "Runs", + "users": "Benutzerprofile", "collections": "Sammlungen", "taskCollections": "Aufgaben", "runCollections": "Läufe", @@ -25,10 +26,24 @@ "meetUp": "Treffen", "discussions": "Diskussionen", "extra": "EXTRA", + "users": "Benutzerprofile", + "account": "Konto", "auth": "Authentifizierung", "signIn": "Anmelden", "signUp": "Registrieren", "resetPassword": "Passwort Zurücksetzen", + "continueWith": "Oder fortfahren mit", + "signInWithGitHub": "Mit GitHub anmelden", + "signInWithGoogle": "Mit Google anmelden", + "emailOrUsername": "E-Mail oder Benutzername", + "password": "Passwort", + "forgotPassword": "Passwort vergessen?", + "firstName": "Vorname", + "lastName": "Nachname", + "username": "Benutzername", + "email": "E-Mail", + "confirmPassword": "Passwort Bestätigen", + "createAccount": "Konto Erstellen", "pageNotFound": "Seite Nicht Gefunden", "serverError": "Serverfehler" }, @@ -51,7 +66,7 @@ "java": "Java", "community": "Community", "aboutUs": "Über uns", - "contributing": "Beitragen", + "contribute": "Beitragen", "team": "Team", "publications": "Publikationen", "blog": "Blog", @@ -137,8 +152,749 @@ } }, "common": { - "loading": "Laden...", + "loading": "Wird geladen...", "error": "Fehler", "noResults": "Keine Ergebnisse gefunden" + }, + "home": { + "hero": { + "version": "Version 3.0: Entwickelt für reproduzierbare Wissenschaft", + "title": "Das globale Labor für Machine-Learning-Forschung", + "subtitle": "Machine Learning lebt von Transparenz. OpenML ist die offene, kollaborative Umgebung, in der Wissenschaftler FAIR-Daten teilen, Experimente organisieren und auf modernsten Algorithmen aufbauen.", + "description": "Machine Learning lebt von Transparenz. OpenML ist die offene, kollaborative Umgebung, in der Wissenschaftler FAIR-Daten teilen, Experimente organisieren und auf modernsten Algorithmen aufbauen.", + "startTracking": "Fang an zu tracken und zu teilen!", + "readManifesto": "Lies das Manifest", + "trustedWorldwide": "Weltweit vertraut für objektives Benchmarking von Algorithmen.", + "stats": "+99,99 % Reproduzierbarkeit 500k+ Datensätze 10M+ Runs+", + "joinCommunity": "Tritt der Community bei!" + }, + "ecosystem": { + "overline": "Das Ökosystem", + "heading": "Reibungslose Integration", + "subtitle": "Nahtlos Daten importieren und Experimente aus deiner gewohnten wissenschaftlichen Umgebung exportieren.", + "button": "API-Dokumentation ansehen" + }, + "threePillars": { + "title": "Die drei Säulen von OpenML", + "subtitle": "Offene Plattform zum Teilen von Datensätzen, Algorithmen und Experimenten, um ein globales Machine-Learning-Repository aufzubauen", + "fairData": { + "title": "FAIR-Daten in großem Maßstab", + "description": "Zugriff auf Tausende einheitlich formatierte Datensätze. Jeder Datensatz ist versioniert, mit Metadaten versehen und sofort einsatzbereit für deine Analyse-Pipeline.", + "button": "Datensätze erkunden" + }, + "objectiveEvaluation": { + "title": "Objektive Bewertung", + "description": "Hör auf zu raten. Führe deine Algorithmen auf standardisierten Tasks mit vordefinierten Train/Test-Splits aus, um vergleichbare und peer-review-fähige Ergebnisse zu erzielen.", + "button": "Benchmark-Tasks ansehen" + }, + "frictionlessFlows": { + "title": "Reibungslose ML-Flows", + "description": "Behandle Experimente als Objekte. Teile automatisch deine Model-Pipelines (Flows) und Ergebnisse (Runs), um einen transparenten wissenschaftlichen Nachweis zu erzeugen.", + "button": "Flows erkunden" + } + }, + "accessibility": { + "title": "Zugänglichkeit & Integration", + "subtitle": "Nutze OpenML über die Web-UI, Notebooks oder die Kommandozeile – überall dort, wo du bereits arbeitest.", + "webInterface": { + "title": "Die Web-Oberfläche", + "description": "Entdecke OpenML über ein interaktives Web-Dashboard zum Erkunden von Datensätzen und Experimenten.", + "features": [ + "Suche, filtere und bookmarke Datensätze nach Task-Typ, Größe und Domäne.", + "Untersuche Metadaten, Zielvariablen und Verteilungen, bevor du Code schreibst.", + "Vergleiche Versionen, verfolge Provenienz und springe direkt zu verwandten Tasks, Flows und Runs." + ], + "summary": "Alles an einem Ort browsen, visualisieren und organisieren – ideal für explorative Analyse, Lehre und schnelle Demos.", + "button": "Datensätze durchstöbern" + }, + "codeApis": { + "title": "Der Code (APIs)", + "description": "Direkt in deinen Code integrieren. Nutze unsere Client-Bibliotheken, um programmatisch Datensätze herunterzuladen, Tasks auszuführen und Ergebnisse hochzuladen, ohne deine IDE zu verlassen.", + "viewGithub": "Auf GitHub ansehen", + "downloadZip": "ZIP herunterladen", + "button": "API-Docs ansehen" + } + }, + "benchmarking": { + "title": "Benchmarking-Suites", + "subtitle": "Die wissenschaftliche Methode für rigorose Evaluation", + "description": "Validiere deine Modelle an kuratierten Benchmarking-Suites aus Bereichen wie Gesundheitswesen, Finanzen und Computer Vision. Stelle sicher, dass dein Algorithmus robust über viele Datensätze hinweg ist, nicht nur auf einem einzelnen Benchmark.", + "tasks": { + "title": "Tasks", + "subtitle": "Das Problem", + "description": "Standardisierte Machine-Learning-Herausforderungen mit festen Evaluationsmetriken (AUC, RMSE, Accuracy). Jede Task liefert vordefinierte Train/Test-Splits, um vergleichbare und peer-review-fähige Ergebnisse zu gewährleisten.", + "button": "Tasks ansehen" + }, + "suites": { + "title": "Suites", + "subtitle": "Die Sammlung", + "description": "Kuratierte Sammlungen von Tasks (z. B. \"AutoML Benchmark\", \"Medical Diagnosis Suite\") für umfassende Stresstests von Algorithmen über mehrere Datensätze und Problemdomänen.", + "button": "Suites durchstöbern" + } + }, + "workflowLoop": { + "title": "Der OpenML-Workflow-Loop", + "subtitle": "Integriere OpenML in jeden Schritt deines ML-Workflows.", + "import": { + "title": "Importieren", + "description": "Lade OpenML-Datensätze mit einer einzigen Codezeile, kompatibel mit scikit-learn, PyTorch, TensorFlow, XGBoost und mehr.", + "button": "Einstiegsanleitung" + }, + "buildRun": { + "title": "Bauen & Ausführen", + "description": "Trainiere und evaluiere Modelle auf diesen Tasks mit deinen bevorzugten ML-Bibliotheken. Probiere verschiedene Pipelines und Hyperparameter, bis du mit den Ergebnissen zufrieden bist." + }, + "export": { + "title": "Exportieren & Publizieren", + "description": "Automatisch publizieren: Lade deine Workflows (Flows), Experimente (Runs) und Evaluationsmetriken auf OpenML hoch, damit andere sie vergleichen und wiederverwenden können.", + "flows": "Flows", + "flowsLabel": "Workflows", + "runs": "Runs", + "runsLabel": "Experimente", + "metrics": "Metrics", + "metricsLabel": "Evaluation" + }, + "knowledgeBase": { + "title": "Wissensbasis", + "subtitle": "Trage zur globalen Wissensbasis bei", + "description": "Generiere persistente Identifikatoren (DOIs) für deine Datensätze, Workflows und Experimente – für FAIR-Konformität und reproduzierbare Wissenschaft.", + "citationTitle": "Der Zitations-Lebenszyklus", + "citationDescription": "Lass deine Forschung nicht auf einer Festplatte sterben. Das Hochladen auf OpenML erzeugt zitierfähige, versionierte Artefakte mit Provenienz-Tracking. Deine Arbeit wird Teil des globalen ML-Benchmark-Korpus, zitiert von Peers und treibt Meta-Forschung voran." + } + }, + "academicImpact": { + "title": "Trage zur globalen Wissensbasis bei", + "intro": "Generiere persistente Identifikatoren (DOIs) für deine Datensätze, Workflows und Experimente – für FAIR-Konformität und reproduzierbare Wissenschaft.", + "subtitle": "Der Zitations-Lebenszyklus", + "text": "Lass deine Forschung nicht auf einer Festplatte sterben. Das Hochladen auf OpenML erzeugt zitierfähige, versionierte Artefakte mit Provenienz-Tracking. Deine Arbeit wird Teil des globalen ML-Benchmark-Korpus, zitiert von Peers und treibt Meta-Forschung voran." + }, + "faq": { + "title": "OpenML FAQ", + "heading": "Klare Antworten auf die wichtigsten Fragen", + "description": "Ob du dein erstes Modell trainierst oder großangelegte Benchmarks durchführst, OpenML optimiert jeden Schritt deines Workflows. Diese Q&A hebt hervor, was OpenML einzigartig macht und wie es deine tägliche ML-Arbeit vereinfachen kann.", + "questions": [ + { + "question": "Warum ist OpenML ideal für ML-Forschung?", + "answer": "OpenML macht deine Experimente vollständig reproduzierbar.", + "details": [ + "Algorithmen", + "Hyperparameter", + "Datensatzversionen", + "Metriken", + "Hardware" + ], + "footer": "Jeder kann deine Ergebnisse exakt wiederholen." + }, + { + "question": "Wie macht OpenML Ergebnisse vergleichbar?", + "answer": "Alle Datensätze und Tasks sind standardisiert. Du kannst vergleichen:", + "details": ["Algorithmen", "Pipelines", "Hyperparameter"], + "footer": "über identische Evaluierungsprotokolle — essentiell für Benchmarking." + }, + { + "question": "Kann ich frühere Experimente durchsuchen?", + "answer": "Ja. Jedes Experiment wird mit reichhaltigen, maschinenlesbaren Metadaten protokolliert. Du kannst Dinge abfragen wie:", + "details": [ + "\"Welche Modelle funktionieren am besten auf kleinen tabellarischen Datensätzen?\"" + ], + "footer": "Das macht OpenML leistungsstark für Meta-Learning." + }, + { + "question": "Was macht OpenML wissenschaftlich rigoros?", + "answer": "OpenML setzt durch:", + "details": [ + "kuratierte Datensätze", + "standardisierte Tasks", + "konsistente Train/Test-Splits", + "dokumentierte Metadaten" + ], + "footer": "Ideal für akademische Arbeiten, reproduzierbare Forschung und ML-Wettbewerbe." + }, + { + "question": "Wie macht OpenML Ergebnisse vergleichbar?", + "answer": "Alle Ergebnisse folgen standardisierten Evaluierungsprotokollen:", + "details": [ + "einheitliche Datensatzformate", + "gemeinsame Tasks mit festen Splits", + "konsistente Metriken", + "identische Benchmarking-Bedingungen" + ], + "footer": "Du kannst Algorithmen, Pipelines und Hyperparameter direkt im großen Maßstab vergleichen." + }, + { + "question": "Kann ich frühere Experimente durchsuchen?", + "answer": "Ja. Jedes Experiment wird mit maschinenlesbaren Metadaten gespeichert:", + "details": [ + "Datensatzeigenschaften", + "Algorithmus-Einstellungen", + "Performance-Metriken", + "Task-Typ und -Struktur" + ], + "footer": "Du kannst Tausende von Runs abfragen, um herauszufinden, was für dein Problem am besten funktioniert." + } + ] + }, + "about": { + "meta": { + "title": "Über OpenML - Offene Machine Learning Plattform", + "description": "Erfahre mehr über OpenMLs Mission, Machine Learning einfach, zugänglich und kollaborativ zu gestalten. Trete unserer Gemeinschaft von Forschern und Praktikern bei, die ein offenes Ökosystem von ML-Daten, Modellen und Benchmarks aufbauen." + }, + "hero": { + "title": "Über OpenML", + "subtitle": "Aufbau eines nahtlosen, offenen Ökosystems von Machine Learning Daten, Modellen und Benchmarks — KI offen vorantreiben zum Nutzen der gesamten Menschheit." + }, + "toc": { + "onThisPage": "Auf Dieser Seite" + } + }, + "contribute": { + "meta": { + "title": "Zu OpenML Beitragen - Trete Unserer Community Bei", + "description": "Hilf dabei, die Zukunft des offenen Machine Learning zu gestalten. Trage Code bei, teile Datensätze, verbessere die Dokumentation oder engagiere dich in unserer Community. Jeder Beitrag macht einen Unterschied." + }, + "hero": { + "title": "Zu OpenML Beitragen", + "subtitle": "Hilf uns, die Zukunft des offenen Machine Learning zu gestalten. Egal ob Entwickler, Forscher oder Enthusiast, es gibt viele Möglichkeiten, sich einzubringen und etwas zu bewirken." + } + }, + "documentation": { + "meta": { + "title": "OpenML Dokumentation - Erste Schritte Anleitung", + "description": "Lerne, wie du die OpenML-Plattform nutzt. Erkunde Datensätze, führe Experimente durch, teile deine Arbeit und arbeite mit der globalen Machine Learning Community zusammen. Vollständige Anleitungen für Python, R und Java." + }, + "hero": { + "title": "Dokumentation", + "subtitle": "Alles, was du brauchst, um mit OpenML zu beginnen. Lerne, wie du Datensätze erkundest, Experimente durchführst und mit der globalen ML-Community zusammenarbeitest." + }, + "alert": { + "title": "Vollständige Dokumentation", + "description": "Für umfassende API-Referenzen, Tutorials und erweiterte Anleitungen besuche unsere vollständige Dokumentation auf" + } + }, + "api": { + "meta": { + "title": "OpenML APIs - Python, R, Java & REST", + "description": "Programmatischer Zugriff auf Tausende von ML-Datensätzen, Aufgaben und Experimenten. Baue reproduzierbare Machine Learning Pipelines mit Python, R, Java oder unserer REST-API." + }, + "version": "v1.0", + "title": "OpenML APIs", + "subtitle": "Programmatischer Zugriff auf Tausende von ML-Datensätzen, Aufgaben und Experimenten. Baue reproduzierbare Machine Learning Pipelines mit Python, R, Java oder unserer REST-API.", + "quickLinks": { + "python": "Python", + "rPackage": "R-Paket", + "java": "Java", + "restApi": "REST-API" + }, + "toc": { + "onThisPage": "Auf dieser Seite", + "overview": "Übersicht", + "gettingStarted": "Erste Schritte", + "installation": "Installation", + "authentication": "Authentifizierung", + "workingWith": "Arbeiten mit", + "datasets": "Datensätze", + "tasks": "Aufgaben", + "flows": "Flows", + "runs": "Läufe", + "apiReference": "API-Referenz", + "endpoints": "Endpunkte", + "rateLimits": "Rate-Limits", + "resources": "Ressourcen" + }, + "overview": { + "title": "Übersicht", + "description": "OpenML bietet eine einheitliche Schnittstelle für den Zugriff auf Machine Learning-Ressourcen in mehreren Programmiersprachen. Ob du Datensätze erkunden, Experimente durchführen oder Algorithmen vergleichen möchtest – unsere APIs machen es einfach, OpenML in deinen Workflow zu integrieren.", + "datasets": { + "title": "10.000+ Datensätze", + "description": "Zugriff auf ML-Datensätze mit umfangreichen Metadaten" + }, + "tasks": { + "title": "50.000+ Aufgaben", + "description": "Vordefinierte ML-Aufgaben mit standardisierter Evaluation" + }, + "runs": { + "title": "10M+ Läufe", + "description": "Reproduzierbare Experimente und Benchmarks" + } + }, + "gettingStarted": { + "title": "Erste Schritte", + "installation": "Installation", + "authentication": { + "title": "Authentifizierung", + "alertTitle": "API-Schlüssel für Uploads erforderlich", + "alertDescription": "Das Lesen öffentlicher Daten erfordert keine Authentifizierung. Um jedoch Datensätze, Läufe hochzuladen oder auf private Ressourcen zuzugreifen, benötigst du einen API-Schlüssel.", + "howToGet": "So erhältst du deinen API-Schlüssel:", + "step1": "Erstelle ein Konto oder melde dich bei OpenML an", + "step2": "Gehe zu deinen Kontoeinstellungen", + "step3": "Finde deinen API-Schlüssel im API-Bereich", + "getApiKey": "API-Schlüssel erhalten" + } + }, + "workingWith": { + "title": "Arbeiten mit", + "datasets": { + "title": "Datensätze", + "description": "Datensätze sind das Fundament von OpenML. Sie enthalten die tatsächlichen Daten, die für Machine Learning-Experimente verwendet werden." + }, + "tasks": { + "title": "Aufgaben", + "description": "Aufgaben definieren ein spezifisches Machine Learning-Problem: welcher Datensatz verwendet werden soll, welches Ziel vorhergesagt werden soll und wie evaluiert werden soll." + }, + "flows": { + "title": "Flows", + "description": "Flows repräsentieren Machine Learning-Pipelines oder Algorithmen. Sie beschreiben die genauen Schritte und Parameter, die verwendet wurden." + }, + "runs": { + "title": "Läufe", + "description": "Läufe sind die Ergebnisse der Anwendung eines Flows auf eine Aufgabe. Sie enthalten Vorhersagen, Evaluationen und Laufzeitinformationen." + } + }, + "apiReference": { + "title": "API-Referenz", + "endpoints": { + "title": "Endpunkte", + "data": { + "title": "Daten-API", + "description": "Datensatz-Operationen", + "list": "Datensätze auflisten", + "get": "Datensatz-Details abrufen", + "features": "Datensatz-Features abrufen" + }, + "task": { + "title": "Aufgaben-API", + "description": "Aufgaben-Operationen", + "list": "Aufgaben auflisten", + "get": "Aufgaben-Details abrufen" + }, + "flow": { + "title": "Flow-API", + "description": "Flow-Operationen", + "list": "Flows auflisten", + "get": "Flow-Details abrufen" + }, + "run": { + "title": "Lauf-API", + "description": "Lauf-Operationen", + "list": "Läufe auflisten", + "get": "Lauf-Details abrufen" + } + }, + "rateLimits": { + "title": "Rate-Limits", + "description": "Um eine faire Nutzung zu gewährleisten, hat die API Rate-Limits:", + "anonymous": "Anonym: 100 Anfragen/Minute", + "authenticated": "Authentifiziert: 1000 Anfragen/Minute", + "note": "Wenn du höhere Limits für Forschungszwecke benötigst, kontaktiere uns bitte." + } + }, + "resources": { + "title": "Ressourcen", + "documentation": { + "title": "Dokumentation", + "python": "Python API-Docs", + "r": "R-Paket-Docs", + "rest": "REST-API-Referenz" + }, + "community": { + "title": "Community", + "github": "GitHub-Repository", + "slack": "Slack-Community", + "discussions": "Diskussionen" + } + }, + "languages": { + "python": { + "name": "Python", + "description": "Die Python-API bietet den umfassendsten Zugang zu OpenML-Funktionen mit voller Unterstützung für scikit-learn, PyTorch und TensorFlow." + }, + "r": { + "name": "R", + "description": "Das R-Paket integriert sich nahtlos mit mlr3 und bietet Zugang zu allen OpenML-Ressourcen." + }, + "java": { + "name": "Java", + "description": "Der Java-API-Connector bietet programmatischen Zugang zu OpenML für JVM-basierte Anwendungen." + }, + "julia": { + "name": "Julia", + "description": "Das Julia-Paket bietet Hochleistungszugang zu OpenML-Datensätzen und -Aufgaben." + }, + "rest": { + "name": "REST-API", + "description": "Greife direkt über unsere REST-API auf OpenML zu – für jede Programmiersprache oder Umgebung." + } + } + }, + "meetUs": { + "meta": { + "title": "Triff Uns - OpenML Hackathons & Events", + "description": "Nimm an OpenML Hackathons und Community-Events teil. Triff das Team, arbeite an Open-Science-Projekten und hilf Machine Learning zu demokratisieren." + }, + "hero": { + "title": "Lass uns Treffen!", + "subtitle": "Nimm an einem unserer Hackathons teil und hilf die Zukunft des offenen Machine Learnings zu gestalten" + }, + "why": { + "title": "Die Welt zu verändern erfordert fokussierte, tiefgreifende Arbeit", + "description": "Bei Hackathon-Events brechen wir aus der Routine aus und arbeiten wochenlang an neuen Ideen, die die wissenschaftliche Gemeinschaft voranbringen. Vom Bauen cooler OpenML-Erweiterungen bis zum Lösen datengetriebener Probleme auf neue Weise – wir glauben an offene Wissenschaft und die Demokratisierung von Machine Learning für alle.", + "bringLaptop": "Bring einfach deinen Laptop mit", + "drinksSnacks": "Wir stellen Getränke & Snacks", + "greatCompany": "Tolle Gesellschaft garantiert" + }, + "upcoming": { + "title": "Kommende Events", + "featured": "Empfohlen", + "register": "Registrieren (Kostenlos)", + "schedule": "Zeitplan & Mehr", + "howToPrepare": "Wie man sich Vorbereitet", + "viewVenue": "Veranstaltungsort ansehen", + "slackAlert": "Tritt unserem Slack-Kanal bei, um auf dem Laufenden zu bleiben und an der Diskussion teilzunehmen!" + }, + "sponsor": { + "title": "Ein Event Sponsern", + "subtitle": "Sponsoring kann einen tollen Hackathon noch besser machen!", + "description": "Wir freuen uns immer über Sponsoring, um den nächsten Hackathon noch besser zu machen. Sponsoring erfolgt über die OpenML Foundation und wird direkt zum Nutzen der Teilnehmer verwendet: Snacks, soziale Aktivitäten, Geschenke (z.B. T-Shirts)...", + "acknowledgment": "Wir würden deinen Support gerne auf der OpenML-Website würdigen und dich einladen, eine Präsentation beim Event zu halten.", + "contactUs": "Kontaktiere Uns für Sponsoring" + }, + "memories": { + "title": "Erinnerungen", + "pastEvents": "Vergangene Events", + "photoGallery": "Fotogalerie", + "photoDescription": "Sieh dir Bilder von früheren Events an", + "viewPhotos": "Fotos auf Flickr ansehen" + }, + "cta": { + "title": "Bereit Mitzumachen?", + "description": "Egal ob erfahrener ML-Experte oder Anfänger – unsere Hackathons sind der perfekte Ort zum Lernen, Zusammenarbeiten und Etwas Bewirken.", + "registerNext": "Für Nächstes Event Registrieren", + "joinSlack": "Slack-Community Beitreten" + } + }, + "terms": { + "meta": { + "title": "Nutzungsbedingungen & Zitation - OpenML", + "description": "Erfahren Sie mehr über OpenML-Lizenzen, wie Sie OpenML in Ihrer Forschung zitieren und unsere Nutzungsbedingungen und Datenschutzrichtlinien." + }, + "title": "Nutzungsbedingungen & Zitation", + "subtitle": "Lizenzen, Zitationen und Bedingungen für die Verwendung von OpenML in Ihrer Forschung und Projekten.", + "licenses": { + "title": "Lizenzen", + "description": "OpenML unterstützt mehrere offene Lizenzen, um Zugänglichkeit und Wiederverwendung zu maximieren. Jeder Datensatz und jede Ressource auf OpenML ist mit seiner spezifischen Lizenz gekennzeichnet.", + "ccby": "Namensnennung erforderlich. Frei teilen und anpassen mit korrekter Quellenangabe.", + "cc0": "Keine Rechte vorbehalten. Frei verwendbar ohne Einschränkungen.", + "bsd": "Für Quellcode. Permissive Lizenz mit minimalen Einschränkungen." + }, + "citation": { + "title": "Zitierweise", + "subtitle": "Bitte zitieren Sie OpenML, wenn Sie es in Ihrer Forschung verwenden. Es hilft uns, die Wirkung zu demonstrieren und die Entwicklung fortzusetzen.", + "openml": { + "title": "OpenML-Plattform zitieren", + "description": "Vanschoren et al., SIGKDD Explorations 2013" + }, + "python": { + "title": "Python-API zitieren", + "description": "Feurer et al., JMLR 2021" + }, + "r": { + "title": "R-API zitieren", + "description": "Casalicchio et al., Computational Statistics 2017" + }, + "benchmark": { + "title": "Benchmarking Suites zitieren", + "description": "Bischl et al., NeurIPS 2021" + } + }, + "termsOfUse": { + "title": "Nutzungsbedingungen", + "honorCode": { + "title": "Ehrenkodex", + "subtitle": "Richtlinien für ethische Nutzung von OpenML", + "items": { + "cite": "Geben Sie korrekte Quellenangaben und zitieren Sie die ursprünglichen Autoren von Datensätzen und Artikeln", + "share": "Teilen Sie Ihre Beiträge offen, damit andere auf Ihrer Arbeit aufbauen können", + "respect": "Respektieren Sie Datensatz-Lizenzen und befolgen Sie deren Bedingungen", + "quality": "Laden Sie hochwertige, gut dokumentierte Daten und Experimente hoch", + "feedback": "Geben Sie konstruktives Feedback, um die Plattform zu verbessern" + } + }, + "usageTerms": { + "title": "Nutzungsregeln", + "subtitle": "Regeln für die Nutzung von OpenML-Diensten", + "intro": "Mit der Nutzung von OpenML stimmen Sie folgenden Bedingungen zu:", + "items": { + "free": "OpenML ist kostenlos für Forschung, Bildung und nicht-kommerzielle Zwecke", + "api": "Die API-Nutzung sollte vernünftige Ratenbegrenzungen einhalten, um fairen Zugang für alle zu gewährleisten", + "abuse": "Automatisiertes Scraping oder Missbrauch von Diensten kann zu Zugangsbeschränkungen führen", + "warranty": "Daten und Dienste werden \"wie besehen\" ohne jegliche Garantie bereitgestellt" + } + }, + "privacy": { + "title": "Datenschutzrichtlinie", + "subtitle": "Wie wir mit Ihren Daten umgehen", + "intro": "Wir nehmen Ihre Privatsphäre ernst. So gehen wir mit Ihren Informationen um:", + "items": { + "collect": "Wir erfassen minimale persönliche Informationen, die zur Bereitstellung unserer Dienste erforderlich sind", + "usage": "Nutzungsdaten helfen uns, OpenML zu verbessern und zu verstehen, wie es verwendet wird", + "share": "Wir verkaufen oder teilen Ihre persönlichen Daten nicht mit Dritten", + "cookies": "Wir verwenden Cookies für die Authentifizierung und zur Verbesserung Ihrer Erfahrung" + } + } + }, + "contact": { + "title": "Fragen?", + "description": "Bei Fragen zu Lizenzen, Zitation oder Nutzungsbedingungen kontaktieren Sie uns bitte.", + "button": "OpenML-Team kontaktieren" + } + } + }, + "dashboard": { + "meta": { + "title": "Dashboard - OpenML", + "description": "Dein persönliches OpenML Dashboard. Verfolge deine Beiträge, Reputation und Einfluss auf die Machine Learning Forschung." + }, + "welcome": "Willkommen, {name}!", + "subtitle": "OpenML ist der Ort, um Datensätze, Workflows zu teilen und an Machine Learning Forschung zusammenzuarbeiten.", + "signOut": "Abmelden", + "loading": "Laden...", + "stats": { + "reputation": "REPUTATION", + "researchImpact": "Forschungseinfluss-Score", + "downloads": "Downloads", + "citations": "Zitationen", + "flowReuses": "Flow-Wiederverwendungen", + "discussions": "Diskussionen", + "publicActivity": "ÖFFENTLICHE AKTIVITÄT", + "activeDays": "{count} aktive Tage diese Woche", + "totalContributions": "GESAMTBEITRÄGE", + "total": "Gesamtbeiträge" + }, + "contributions": { + "datasets": "Datensätze", + "flows": "Flows", + "runs": "Läufe", + "created": "erstellt", + "experiments": "Experimente", + "inPublications": "in Publikationen", + "reusesByOthers": "{count} Wiederverwendungen durch andere" + }, + "topContributions": { + "title": "Deine Top-Beiträge", + "mostDownloaded": "Meistgeladener Datensatz", + "mostReused": "Meistgenutzter Flow", + "downloads": "Downloads", + "reuses": "Wiederverwendungen" + }, + "focus": { + "title": "Wie beginnen: Wähle einen Fokus für heute", + "subtitle": "Hilf uns, relevante Vorschläge für dich zu machen", + "datasets": { + "title": "Datensätze", + "description": "Erkunde und teile Datensätze" + }, + "tasks": { + "title": "Aufgaben", + "description": "Definiere ML-Probleme und Benchmarks" + }, + "flows": { + "title": "Flows", + "description": "Teile ML-Workflows und Modelle" + } + }, + "hideStats": "Statistiken ausblenden" + }, + "auth": { + "signIn": { + "title": "Anmelden - OpenML", + "description": "Melden Sie sich bei Ihrem OpenML-Konto an", + "welcome": "Willkommen bei OpenML", + "subtitle": "Melden Sie sich bei Ihrem Konto an oder erstellen Sie ein neues", + "continueWithGithub": "Mit GitHub fortfahren", + "continueWithGoogle": "Mit Google fortfahren", + "orContinueWith": "Oder fortfahren mit", + "emailLabel": "E-Mail oder Benutzername", + "emailPlaceholder": "Geben Sie Ihre E-Mail oder Ihren Benutzernamen ein", + "passwordLabel": "Passwort", + "passwordPlaceholder": "Geben Sie Ihr Passwort ein", + "signInButton": "Anmelden", + "signingIn": "Anmelden...", + "forgotPassword": "Passwort vergessen?", + "noAccount": "Sie haben noch kein Konto?", + "signUpLink": "Registrieren", + "invalidCredentials": "Ungültige E-Mail oder Passwort", + "error": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.", + "oauthError": "Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut." + } + }, + "dataset": { + "header": { + "uploadedOn": "Hochgeladen am {date}", + "by": "von", + "active": "Aktiv", + "deactivated": "Deaktiviert", + "inPreparation": "In Vorbereitung" + }, + "stats": { + "instances": "Instanzen", + "features": "Merkmale", + "classes": "Klassen", + "missing": "Fehlend", + "tasks": "Aufgaben", + "runs": "Ausführungen", + "downloads": "Downloads", + "likes": "Likes" + }, + "actions": { + "download": "Herunterladen", + "downloadDataset": "Datensatz Herunterladen", + "originalFile": "Original ARFF/CSV Datei", + "showCode": "Code Anzeigen", + "codeSnippets": "Python, R, Julia, cURL", + "quickCopy": "Schnell Kopieren", + "like": "Like", + "bookmark": "Lesezeichen", + "bookmarked": "Gespeichert", + "addToCollection": "Zur Sammlung Hinzufügen", + "share": "Teilen", + "copyLink": "Link Kopieren", + "linkCopied": "Link Kopiert!", + "openNotebook": "In Notebook Öffnen", + "reportIssue": "Problem Melden" + }, + "codeDialog": { + "title": "Datensatz Laden: {name}", + "description": "Verwenden Sie diese Code-Snippets, um diesen Datensatz in Ihrer bevorzugten Programmiersprache zu laden", + "copy": "Kopieren", + "copied": "Kopiert!", + "installation": "Installation" + }, + "tabs": { + "dataDetail": "Datendetails", + "analysis": "Analyse", + "tasks": "Aufgaben", + "runs": "Ausführungen" + }, + "description": { + "showMore": "Mehr Anzeigen", + "showLess": "Weniger Anzeigen", + "originalSource": "Originalquelle", + "relatedPaper": "Zugehöriges Paper" + }, + "features": { + "title": "Merkmale", + "description": "Detaillierte Informationen zu jedem Attribut im Datensatz", + "searchPlaceholder": "Merkmale suchen...", + "filterTypes": "Typen Filtern", + "showAll": "Alle {count} Merkmale Anzeigen", + "showLess": "Weniger Anzeigen", + "noMatch": "Keine passenden Merkmale gefunden", + "target": "Ziel", + "distinct": "Eindeutig", + "missing": "Fehlend", + "statistics": "Statistiken", + "type": "Typ", + "featureName": "Merkmalname", + "types": { + "numeric": "Numerisch", + "nominal": "Nominal", + "string": "String", + "date": "Datum" + }, + "stats": { + "minimum": "Minimum", + "maximum": "Maximum", + "mean": "Mittelwert", + "stdDev": "Std Abweichung", + "distinctValues": "Eindeutige Werte", + "missingValues": "Fehlende Werte" + }, + "valueDistribution": "Werteverteilung" + }, + "information": { + "title": "Datensatz-Informationen", + "description": "Technische Details und Metadaten" + }, + "citation": { + "title": "Zitation", + "description": "Wie Sie diesen Datensatz in akademischen Arbeiten zitieren", + "copy": "Zitation Kopieren" + }, + "analysis": { + "title": "Datenvisualisierungen", + "description": "Visuelle Erkundung des Datensatzes", + "comingSoon": "Visualisierungen Demnächst Verfügbar", + "comingSoonDesc": "Merkmalsverteilungen, Korrelationen und Datenqualitätsmetriken werden hier angezeigt.", + "classBalance": "Klassenbalance", + "classBalanceDesc": "Verteilung der Zielklassen", + "missingValues": "Fehlende Werte", + "missingValuesDesc": "Datenvollständigkeit", + "dimensionality": "Dimensionalität", + "dimensionalityDesc": "Merkmale pro Instanz" + }, + "tasks": { + "title": "Verwandte Aufgaben", + "description": "Auf diesem Datensatz definierte Machine-Learning-Aufgaben", + "available": "{count} Aufgabe(n) auf diesem Datensatz verfügbar", + "viewAll": "Alle Aufgaben anzeigen", + "noTasks": "Noch keine Aufgaben definiert", + "createTask": "Aufgabe Erstellen" + }, + "runs": { + "title": "ML Ausführungen", + "description": "Machine-Learning-Experimente auf diesem Datensatz", + "recorded": "{count} Ausführung(en) auf diesem Datensatz aufgezeichnet", + "viewAll": "Alle Ausführungen anzeigen", + "noRuns": "Noch keine Ausführungen aufgezeichnet", + "runExperiment": "Experiment Ausführen", + "bestAccuracy": "Beste Genauigkeit", + "topFlows": "Top Flows", + "leaderboardComingSoon": "Bestenliste demnächst verfügbar...", + "bestAlgorithms": "Leistungsstärkste Algorithmen..." + }, + "collection": { + "dialogTitle": "Zur Sammlung Hinzufügen", + "dialogDescription": "Fügen Sie \"{name}\" zu einer Ihrer Sammlungen hinzu oder erstellen Sie eine neue.", + "signInPrompt": "Melden Sie sich an, um Datensätze zu Ihren Sammlungen hinzuzufügen", + "createNew": "Neue Sammlung Erstellen", + "cancel": "Abbrechen" + }, + "report": { + "dialogTitle": "Problem Melden", + "dialogDescription": "Helfen Sie uns, OpenML zu verbessern, indem Sie Probleme mit diesem Datensatz melden.", + "issueType": "Problemtyp", + "selectType": "Problemtyp auswählen...", + "types": { + "incorrectData": "Falsche oder beschädigte Daten", + "missingMetadata": "Fehlende oder falsche Metadaten", + "duplicate": "Doppelter Datensatz", + "license": "Lizenzverletzung", + "privacy": "Datenschutzbedenken", + "other": "Andere" + }, + "descriptionLabel": "Beschreibung", + "descriptionPlaceholder": "Bitte beschreiben Sie das Problem im Detail...", + "emailLabel": "Ihre E-Mail (optional)", + "emailPlaceholder": "email@beispiel.de", + "emailHint": "Wir verwenden diese für Rückfragen bei Bedarf", + "cancel": "Abbrechen", + "submit": "Bericht Senden" + }, + "qualities": { + "title": "Datensatz-Qualitäten", + "description": "Meta-Merkmale und statistische Maße", + "searchPlaceholder": "Qualitäten suchen...", + "categories": { + "counts": "Anzahlen", + "statistics": "Statistiken", + "informationTheory": "Informationstheorie", + "ratios": "Verhältnisse", + "other": "Andere" + } + }, + "deactivated": { + "title": "Datensatz Deaktiviert", + "message": "Dieser Datensatz wurde deaktiviert und ist nicht mehr verfügbar." + } } } diff --git a/app-next/messages/en.json b/app-next/messages/en.json index 6fedc9e8..0d4dabc6 100644 --- a/app-next/messages/en.json +++ b/app-next/messages/en.json @@ -5,6 +5,7 @@ "tasks": "Tasks", "flows": "Flows", "runs": "Runs", + "users": "User Profiles", "collections": "Collections", "taskCollections": "Tasks", "runCollections": "Runs", @@ -25,10 +26,24 @@ "meetUp": "Meet Up", "discussions": "Discussions", "extra": "EXTRA", + "users": "User Profiles", + "account": "Account", "auth": "Auth", "signIn": "Sign In", "signUp": "Sign Up", "resetPassword": "Reset Password", + "continueWith": "Or continue with", + "signInWithGitHub": "Sign in with GitHub", + "signInWithGoogle": "Sign in with Google", + "emailOrUsername": "Email or Username", + "password": "Password", + "forgotPassword": "Forgot password?", + "firstName": "First Name", + "lastName": "Last Name", + "username": "Username", + "email": "Email", + "confirmPassword": "Confirm Password", + "createAccount": "Create Account", "pageNotFound": "Page Not Found", "serverError": "Server Error" }, @@ -79,7 +94,7 @@ "java": "Java", "community": "Community", "aboutUs": "About Us", - "contributing": "Contributing", + "contribute": "contribute", "team": "Team", "publications": "Publications", "blog": "Blog", @@ -125,5 +140,744 @@ "loading": "Loading...", "error": "Error", "noResults": "No results found" + }, + "home": { + "hero": { + "version": "Version 3.0: Built for Reproducible Science", + "title": "The Global Lab for Machine Learning Research", + "subtitle": "Machine learning thrives on transparency. OpenML is the open, collaborative environment where scientists share FAIR data, organize experiments, and build upon state-of-the-art algorithms.", + "description": "Machine learning thrives on transparency. OpenML is the open, collaborative environment where scientists share FAIR data, organize experiments, and build upon state-of-the-art algorithms.", + "startTracking": "Start Tracking and Sharing!", + "readManifesto": "Read the Manifesto", + "trustedWorldwide": "Trusted worldwide to benchmark algorithms objectively.", + "stats": "+99.99% Reproducibility 500k+ Datasets 10M+ Runs+", + "joinCommunity": "Join the Community!" + }, + "ecosystem": { + "overline": "The Ecosystem", + "heading": "Frictionless Integration", + "subtitle": "Seamlessly import data and export experiments from your native scientific environment.", + "button": "View API Documentation" + }, + "threePillars": { + "title": "The Three Pillars of OpenML", + "subtitle": "Open platform for sharing datasets, algorithms, and experiments to build a global machine learning repository", + "fairData": { + "title": "FAIR Data at Scale", + "description": "Access thousands of uniformly formatted datasets. Every dataset is versioned, meta-tagged, and ready for immediate loading into your analysis pipeline.", + "button": "Explore Datasets" + }, + "objectiveEvaluation": { + "title": "Objective Evaluation", + "description": "Stop guessing. Run your algorithms on standardized tasks with predefined train/test splits to ensure your results are comparable and peer-review ready.", + "button": "View Benchmark Tasks" + }, + "frictionlessFlows": { + "title": "Frictionless ML Flows", + "description": "Treat experiments as objects. Share your model pipelines (flows) and results (runs) automatically to create a transparent scientific record.", + "button": "Explore Flows" + } + }, + "accessibility": { + "title": "Accessibility & Integration", + "subtitle": "Use OpenML from the web UI, notebooks, or the command line—wherever you already work.", + "webInterface": { + "title": "The Web Interface", + "description": "Discover OpenML through an interactive web dashboard for exploring datasets and experiments.", + "features": [ + "Search, filter, and bookmark datasets by task type, size, and domain.", + "Inspect metadata, target variables, and distributions before you ever write code.", + "Compare versions, track provenance, and jump directly into related tasks, flows, and runs." + ], + "summary": "Browse, visualize, and organize everything from one place—ideal for exploratory analysis, teaching, and quick demos.", + "button": "Browse Datasets" + }, + "codeApis": { + "title": "The Code (APIs)", + "description": "Integrate directly into your code. Use our client libraries to programmatically download datasets, run tasks, and upload results without leaving your IDE.", + "viewGithub": "View on GitHub", + "downloadZip": "Download ZIP", + "button": "View API Docs" + } + }, + "benchmarking": { + "title": "Benchmarking Suites", + "subtitle": "The Scientific Method for Rigorous Evaluation", + "description": "Validate your models on curated benchmarking suites spanning domains such as healthcare, finance, and computer vision. Ensure your algorithm is robust across many datasets, not just a single benchmark.", + "tasks": { + "title": "Tasks", + "subtitle": "The Problem", + "description": "Standardized machine learning challenges with fixed evaluation metrics (AUC, RMSE, Accuracy). Each task provides predefined train/test splits to ensure your results are comparable and peer-review ready.", + "button": "View Tasks" + }, + "suites": { + "title": "Suits (or Suites)", + "subtitle": "The Collection", + "description": "Curated collections of tasks (e.g., \"AutoML Benchmark,\" \"Medical Diagnosis Suite\") for comprehensive algorithm stress-testing across multiple datasets and problem domains.", + "button": "Browse Suites" + } + }, + "workflowLoop": { + "title": "The OpenML Workflow Loop", + "subtitle": "Integrate OpenML into every step of your ML workflow.", + "import": { + "title": "Import", + "description": "Load OpenML datasets in a single line of code, compatible with scikit-learn, PyTorch, TensorFlow, XGBoost, and more.", + "button": "Get Started Guide" + }, + "buildRun": { + "title": "Build & Run", + "description": "Train and evaluate models on those tasks using your favorite ML libraries. Try different pipelines and hyperparameters until you get results you are happy with." + }, + "export": { + "title": "Export & Publish", + "description": "Automatically publish: Upload your workflows (flows), experiments (runs), and evaluation metrics back to OpenML so others can compare and reuse them.", + "flows": "Flows", + "flowsLabel": "workflows", + "runs": "Runs", + "runsLabel": "experiments", + "metrics": "Metrics", + "metricsLabel": "evaluation" + }, + "knowledgeBase": { + "title": "Knowledge Base", + "subtitle": "Contribute to the Global Knowledge Base", + "description": "Generate persistent identifiers (DOIs) for your datasets, workflows, and experiments—ensuring FAIR compliance and enabling reproducible science.", + "citationTitle": "The Citation Lifecycle", + "citationDescription": "Don't let your research die on a hard drive. Uploading to OpenML creates citable, versioned artifacts with provenance tracking. Your work becomes part of the global ML benchmark corpus, cited by peers and powering meta-research." + } + }, + "academicImpact": { + "title": "Contribute to the Global Knowledge Base", + "intro": "Generate persistent identifiers (DOIs) for your datasets, workflows, and experiments—ensuring FAIR compliance and enabling reproducible science.", + "subtitle": "The Citation Lifecycle", + "text": "Don't let your research die on a hard drive. Uploading to OpenML creates citable, versioned artifacts with provenance tracking. Your work becomes part of the global ML benchmark corpus, cited by peers and powering meta-research." + }, + "faq": { + "title": "OpenML FAQ", + "heading": "Clear answers to the most important questions", + "description": "Whether you're training your first model or running large-scale benchmarks, OpenML streamlines every step of your workflow. This Q&A highlights what makes OpenML unique and how it can simplify your daily ML work.", + "questions": [ + { + "question": "Why is OpenML ideal for ML research?", + "answer": "OpenML makes your experiments fully reproducible.", + "details": [ + "algorithms", + "hyperparameters", + "dataset versions", + "metrics", + "hardware" + ], + "footer": "Anyone can repeat your results exactly." + }, + { + "question": "How does OpenML make results comparable?", + "answer": "All datasets and tasks are standardized. You can compare:", + "details": ["algorithms", "pipelines", "hyperparameters"], + "footer": "across identical evaluation protocols — essential for benchmarking." + }, + { + "question": "Can I search previous experiments?", + "answer": "Yes. Every experiment is logged with rich, machine-readable metadata. You can query things like:", + "details": ["\"Which models work best on small tabular datasets?\""], + "footer": "This makes OpenML powerful for meta-learning." + }, + { + "question": "What makes OpenML scientifically rigorous?", + "answer": "OpenML enforces:", + "details": [ + "curated datasets", + "standardized tasks", + "consistent train/test splits", + "documented metadata" + ], + "footer": "Ideal for academic papers, reproducible research, and ML competitions." + }, + { + "question": "How does OpenML make results comparable?", + "answer": "All results follow standardized evaluation protocols:", + "details": [ + "uniform dataset formats", + "shared tasks with fixed splits", + "consistent metrics", + "identical benchmarking conditions" + ], + "footer": "You can directly compare algorithms, pipelines, and hyperparameters at scale." + }, + { + "question": "Can I search previous experiments?", + "answer": "Yes. Every experiment is stored with machine-readable metadata:", + "details": [ + "dataset properties", + "algorithm settings", + "performance metrics", + "task type and structure" + ], + "footer": "You can query thousands of runs to discover what works best for your problem." + } + ] + }, + "about": { + "meta": { + "title": "About OpenML - Open Machine Learning Platform", + "description": "Learn about OpenML's mission to make machine learning simple, accessible, and collaborative. Join our community of researchers and practitioners building an open ecosystem of ML data, models, and benchmarks." + }, + "hero": { + "title": "About OpenML", + "subtitle": "Building a seamless, open ecosystem of machine learning data, models, and benchmarks — advancing AI openly for the benefit of all humanity." + }, + "toc": { + "onThisPage": "On This Page" + } + }, + "contribute": { + "meta": { + "title": "Contribute to OpenML - Join Our Community", + "description": "Help build the future of open machine learning. Contribute code, share datasets, improve documentation, or engage with our community. Every contribution makes a difference." + }, + "hero": { + "title": "Contribute to OpenML", + "subtitle": "Help us build the future of open machine learning. Whether you're a developer, researcher, or enthusiast, there are many ways to get involved and make an impact." + } + }, + "documentation": { + "meta": { + "title": "OpenML Documentation - Getting Started Guide", + "description": "Learn how to use OpenML platform. Explore datasets, run experiments, share your work, and collaborate with the global machine learning community. Complete guides for Python, R, and Java." + }, + "hero": { + "title": "Documentation", + "subtitle": "Everything you need to get started with OpenML. Learn how to explore datasets, run experiments, and collaborate with the global ML community." + }, + "alert": { + "title": "Complete Documentation", + "description": "For comprehensive API references, tutorials, and advanced guides, visit our complete documentation at" + } + }, + "api": { + "meta": { + "title": "OpenML APIs - Python, R, Java & REST", + "description": "Access thousands of ML datasets, tasks, and experiments programmatically. Build reproducible machine learning pipelines with Python, R, Java, or our REST API." + }, + "version": "v1.0", + "title": "OpenML APIs", + "subtitle": "Access thousands of ML datasets, tasks, and experiments programmatically. Build reproducible machine learning pipelines with Python, R, Java, or our REST API.", + "quickLinks": { + "python": "Python", + "rPackage": "R Package", + "java": "Java", + "restApi": "REST API" + }, + "toc": { + "onThisPage": "On this page", + "overview": "Overview", + "gettingStarted": "Getting Started", + "installation": "Installation", + "authentication": "Authentication", + "workingWith": "Working with", + "datasets": "Datasets", + "tasks": "Tasks", + "flows": "Flows", + "runs": "Runs", + "apiReference": "API Reference", + "endpoints": "Endpoints", + "rateLimits": "Rate Limits", + "resources": "Resources" + }, + "overview": { + "title": "Overview", + "description": "OpenML provides a unified interface to access machine learning resources across multiple programming languages. Whether you're exploring datasets, running experiments, or benchmarking algorithms, our APIs make it easy to integrate OpenML into your workflow.", + "datasets": { + "title": "10,000+ Datasets", + "description": "Access curated ML datasets with rich metadata" + }, + "tasks": { + "title": "50,000+ Tasks", + "description": "Pre-defined ML tasks with standardized evaluation" + }, + "runs": { + "title": "10M+ Runs", + "description": "Reproducible experiments and benchmarks" + } + }, + "gettingStarted": { + "title": "Getting Started", + "installation": "Installation", + "authentication": { + "title": "Authentication", + "alertTitle": "API Key Required for Uploads", + "alertDescription": "Reading public data doesn't require authentication. However, to upload datasets, runs, or access private resources, you'll need an API key.", + "howToGet": "How to get your API key:", + "step1": "Create an account or sign in to OpenML", + "step2": "Go to your Account Settings", + "step3": "Find your API key in the API section", + "getApiKey": "Get Your API Key" + } + }, + "workingWith": { + "title": "Working with", + "datasets": { + "title": "Datasets", + "description": "Datasets are the foundation of OpenML. They contain the actual data used for machine learning experiments." + }, + "tasks": { + "title": "Tasks", + "description": "Tasks define a specific machine learning problem: which dataset to use, which target to predict, and how to evaluate." + }, + "flows": { + "title": "Flows", + "description": "Flows represent machine learning pipelines or algorithms. They describe the exact steps and parameters used." + }, + "runs": { + "title": "Runs", + "description": "Runs are the results of applying a flow to a task. They contain predictions, evaluations, and runtime information." + } + }, + "apiReference": { + "title": "API Reference", + "endpoints": { + "title": "Endpoints", + "data": { + "title": "Data API", + "description": "Dataset operations", + "list": "List datasets", + "get": "Get dataset details", + "features": "Get dataset features" + }, + "task": { + "title": "Task API", + "description": "Task operations", + "list": "List tasks", + "get": "Get task details" + }, + "flow": { + "title": "Flow API", + "description": "Flow operations", + "list": "List flows", + "get": "Get flow details" + }, + "run": { + "title": "Run API", + "description": "Run operations", + "list": "List runs", + "get": "Get run details" + } + }, + "rateLimits": { + "title": "Rate Limits", + "description": "To ensure fair usage, the API has rate limits:", + "anonymous": "Anonymous: 100 requests/minute", + "authenticated": "Authenticated: 1000 requests/minute", + "note": "If you need higher limits for research purposes, please contact us." + } + }, + "resources": { + "title": "Resources", + "documentation": { + "title": "Documentation", + "python": "Python API Docs", + "r": "R Package Docs", + "rest": "REST API Reference" + }, + "community": { + "title": "Community", + "github": "GitHub Repository", + "slack": "Slack Community", + "discussions": "Discussions" + } + }, + "languages": { + "python": { + "name": "Python", + "description": "The Python API provides the most comprehensive access to OpenML functionality, with full support for scikit-learn, PyTorch, and TensorFlow." + }, + "r": { + "name": "R", + "description": "The R package integrates seamlessly with mlr3 and provides access to all OpenML resources." + }, + "java": { + "name": "Java", + "description": "The Java API connector provides programmatic access to OpenML for JVM-based applications." + }, + "julia": { + "name": "Julia", + "description": "The Julia package provides high-performance access to OpenML datasets and tasks." + }, + "rest": { + "name": "REST API", + "description": "Access OpenML directly through our REST API for any programming language or environment." + } + } + }, + "meetUs": { + "meta": { + "title": "Meet Us - OpenML Hackathons & Events", + "description": "Join OpenML hackathons and community events. Meet the team, collaborate on open science projects, and help democratize machine learning." + }, + "hero": { + "title": "Let's Meet Up!", + "subtitle": "Join one of our hackathons and help shape the future of open machine learning" + }, + "why": { + "title": "Changing the world requires focused, deep work", + "description": "In hackathon-style events, we break away from routine and work for entire weeks on new ideas that push the scientific community forward. From building cool extensions of OpenML itself to solving data-driven problems in novel ways, we believe in open science and democratizing machine learning for everyone.", + "bringLaptop": "Just bring your laptop", + "drinksSnacks": "We provide drinks & snacks", + "greatCompany": "Great company guaranteed" + }, + "upcoming": { + "title": "Upcoming Events", + "featured": "Featured", + "register": "Register (Free)", + "schedule": "Schedule & More", + "howToPrepare": "How to Prepare", + "viewVenue": "View venue details", + "slackAlert": "Join our Slack channel to stay updated and join the discussion!" + }, + "sponsor": { + "title": "Sponsor an Event", + "subtitle": "Sponsoring can turn a great hackathon into an awesome one!", + "description": "We are always very happy with sponsorship to make the next hackathon even better. Sponsoring an event can be done through the OpenML Foundation and will be used directly for the benefit of the participants: to provide snacks, social activities, free stuff (e.g. t-shirts)...", + "acknowledgment": "We'd be happy to acknowledge your support on the OpenML website, and invite you to give a presentation at the event.", + "contactUs": "Contact Us About Sponsoring" + }, + "memories": { + "title": "Memories", + "pastEvents": "Past Events", + "photoGallery": "Photo Gallery", + "photoDescription": "Check out pictures from previous events", + "viewPhotos": "View Photos on Flickr" + }, + "cta": { + "title": "Ready to Join Us?", + "description": "Whether you're a seasoned ML expert or just getting started, our hackathons are the perfect place to learn, collaborate, and make an impact.", + "registerNext": "Register for Next Event", + "joinSlack": "Join Slack Community" + } + }, + "terms": { + "meta": { + "title": "Terms & Citation - OpenML", + "description": "Learn about OpenML's licenses, how to cite OpenML in your research, and our terms of use and privacy policy." + }, + "title": "Terms & Citation", + "subtitle": "Licenses, citations, and terms for using OpenML in your research and projects.", + "licenses": { + "title": "Licenses", + "description": "OpenML supports multiple open licenses to maximize accessibility and reuse. Each dataset and resource on OpenML is tagged with its specific license.", + "ccby": "Attribution required. Share and adapt freely with proper credit.", + "cc0": "No rights reserved. Use freely without any restrictions.", + "bsd": "For source code. Permissive license with minimal restrictions." + }, + "citation": { + "title": "How to Cite", + "subtitle": "Please cite OpenML if you use it in your research. It helps us demonstrate impact and continue development.", + "openml": { + "title": "Cite OpenML Platform", + "description": "Vanschoren et al., SIGKDD Explorations 2013" + }, + "python": { + "title": "Cite Python API", + "description": "Feurer et al., JMLR 2021" + }, + "r": { + "title": "Cite R API", + "description": "Casalicchio et al., Computational Statistics 2017" + }, + "benchmark": { + "title": "Cite Benchmarking Suites", + "description": "Bischl et al., NeurIPS 2021" + } + }, + "termsOfUse": { + "title": "Terms of Use", + "honorCode": { + "title": "Honor Code", + "subtitle": "Guidelines for ethical use of OpenML", + "items": { + "cite": "Give proper attribution and cite the original authors of datasets and papers", + "share": "Share your contributions openly so others can build upon your work", + "respect": "Respect dataset licenses and follow their terms", + "quality": "Upload high-quality, well-documented data and experiments", + "feedback": "Provide constructive feedback to help improve the platform" + } + }, + "usageTerms": { + "title": "Usage Terms", + "subtitle": "Rules governing the use of OpenML services", + "intro": "By using OpenML, you agree to the following terms:", + "items": { + "free": "OpenML is free to use for research, education, and non-commercial purposes", + "api": "API usage should follow reasonable rate limits to ensure fair access for all users", + "abuse": "Automated scraping or abuse of services may result in access restrictions", + "warranty": "Data and services are provided \"as is\" without warranty of any kind" + } + }, + "privacy": { + "title": "Privacy Policy", + "subtitle": "How we handle your data", + "intro": "We take your privacy seriously. Here's how we handle your information:", + "items": { + "collect": "We collect minimal personal information necessary to provide our services", + "usage": "Usage data helps us improve OpenML and understand how it's being used", + "share": "We do not sell or share your personal information with third parties", + "cookies": "We use cookies for authentication and to improve your experience" + } + } + }, + "contact": { + "title": "Questions?", + "description": "If you have questions about licenses, citation, or terms of use, please contact us.", + "button": "Contact OpenML Team" + } + } + }, + "dashboard": { + "meta": { + "title": "Dashboard - OpenML", + "description": "Your personal OpenML dashboard. Track your contributions, reputation, and impact on machine learning research." + }, + "welcome": "Welcome, {name}!", + "subtitle": "OpenML is the place to share datasets, workflows, and collaborate on machine learning research.", + "signOut": "Sign Out", + "loading": "Loading...", + "stats": { + "reputation": "REPUTATION", + "researchImpact": "research impact score", + "downloads": "Downloads", + "citations": "Citations", + "flowReuses": "Flow Reuses", + "discussions": "Discussions", + "publicActivity": "PUBLIC ACTIVITY", + "activeDays": "{count} active days this week", + "totalContributions": "TOTAL CONTRIBUTIONS", + "total": "total contributions" + }, + "contributions": { + "datasets": "Datasets", + "flows": "Flows", + "runs": "Runs", + "created": "created", + "experiments": "experiments", + "inPublications": "in publications", + "reusesByOthers": "{count} reuses by others" + }, + "topContributions": { + "title": "Your Top Contributions", + "mostDownloaded": "Most Downloaded Dataset", + "mostReused": "Most Reused Flow", + "downloads": "downloads", + "reuses": "reuses" + }, + "focus": { + "title": "How to start: Choose a focus for today", + "subtitle": "Help us make relevant suggestions for you", + "datasets": { + "title": "Datasets", + "description": "Explore and share datasets" + }, + "tasks": { + "title": "Tasks", + "description": "Define ML problems and benchmarks" + }, + "flows": { + "title": "Flows", + "description": "Share ML workflows and models" + } + }, + "hideStats": "Hide stats" + }, + "auth": { + "signIn": { + "title": "Sign In - OpenML", + "description": "Sign in to your OpenML account", + "welcome": "Welcome to OpenML", + "subtitle": "Sign in to your account or create a new one", + "continueWithGithub": "Continue with GitHub", + "continueWithGoogle": "Continue with Google", + "orContinueWith": "Or continue with", + "emailLabel": "Email or Username", + "emailPlaceholder": "Enter your email or username", + "passwordLabel": "Password", + "passwordPlaceholder": "Enter your password", + "signInButton": "Sign In", + "signingIn": "Signing in...", + "forgotPassword": "Forgot password?", + "noAccount": "Don't have an account?", + "signUpLink": "Sign up", + "invalidCredentials": "Invalid email or password", + "error": "An error occurred. Please try again.", + "oauthError": "Authentication failed. Please try again." + } + }, + "dataset": { + "header": { + "uploadedOn": "Uploaded {date}", + "by": "by", + "active": "Active", + "deactivated": "Deactivated", + "inPreparation": "In Preparation" + }, + "stats": { + "instances": "Instances", + "features": "Features", + "classes": "Classes", + "missing": "Missing", + "tasks": "Tasks", + "runs": "Runs", + "downloads": "Downloads", + "likes": "Likes" + }, + "actions": { + "download": "Download", + "downloadDataset": "Download Dataset", + "originalFile": "Original ARFF/CSV file", + "showCode": "Show Code", + "codeSnippets": "Python, R, Julia, cURL", + "quickCopy": "Quick Copy", + "like": "Like", + "bookmark": "Bookmark", + "bookmarked": "Bookmarked", + "addToCollection": "Add to Collection", + "share": "Share", + "copyLink": "Copy Link", + "linkCopied": "Link Copied!", + "openNotebook": "Open in Notebook", + "reportIssue": "Report Issue" + }, + "codeDialog": { + "title": "Load Dataset: {name}", + "description": "Use these code snippets to load this dataset in your preferred programming language", + "copy": "Copy", + "copied": "Copied!", + "installation": "Installation" + }, + "tabs": { + "dataDetail": "Data Detail", + "analysis": "Analysis", + "tasks": "Tasks", + "runs": "Runs" + }, + "description": { + "showMore": "Show More", + "showLess": "Show Less", + "originalSource": "Original Source", + "relatedPaper": "Related Paper" + }, + "features": { + "title": "Features", + "description": "Detailed information about each attribute in the dataset", + "searchPlaceholder": "Search features...", + "filterTypes": "Filter Types", + "showAll": "Show All {count} Features", + "showLess": "Show Less", + "noMatch": "No features match your search", + "target": "Target", + "distinct": "Distinct", + "missing": "Missing", + "statistics": "Statistics", + "type": "Type", + "featureName": "Feature Name", + "types": { + "numeric": "Numeric", + "nominal": "Nominal", + "string": "String", + "date": "Date" + }, + "stats": { + "minimum": "Minimum", + "maximum": "Maximum", + "mean": "Mean", + "stdDev": "Std Dev", + "distinctValues": "Distinct Values", + "missingValues": "Missing Values" + }, + "valueDistribution": "Value Distribution" + }, + "information": { + "title": "Dataset Information", + "description": "Technical details and metadata" + }, + "citation": { + "title": "Citation", + "description": "How to cite this dataset in academic work", + "copy": "Copy Citation" + }, + "analysis": { + "title": "Data Visualizations", + "description": "Visual exploration of the dataset", + "comingSoon": "Visualizations Coming Soon", + "comingSoonDesc": "Feature distributions, correlations, and data quality metrics will be displayed here.", + "classBalance": "Class Balance", + "classBalanceDesc": "Distribution of target classes", + "missingValues": "Missing Values", + "missingValuesDesc": "Data completeness", + "dimensionality": "Dimensionality", + "dimensionalityDesc": "Features per instance" + }, + "tasks": { + "title": "Related Tasks", + "description": "Machine learning tasks defined on this dataset", + "available": "{count} task(s) available on this dataset", + "viewAll": "View all tasks", + "noTasks": "No tasks have been defined yet", + "createTask": "Create a Task" + }, + "runs": { + "title": "ML Runs", + "description": "Machine learning experiments on this dataset", + "recorded": "{count} run(s) recorded on this dataset", + "viewAll": "View all runs", + "noRuns": "No runs have been recorded yet", + "runExperiment": "Run an Experiment", + "bestAccuracy": "Best Accuracy", + "topFlows": "Top Flows", + "leaderboardComingSoon": "Leaderboard coming soon...", + "bestAlgorithms": "Best performing algorithms..." + }, + "collection": { + "dialogTitle": "Add to Collection", + "dialogDescription": "Add \"{name}\" to one of your collections or create a new one.", + "signInPrompt": "Sign in to add datasets to your collections", + "createNew": "Create New Collection", + "cancel": "Cancel" + }, + "report": { + "dialogTitle": "Report an Issue", + "dialogDescription": "Help us improve OpenML by reporting issues with this dataset.", + "issueType": "Issue Type", + "selectType": "Select an issue type...", + "types": { + "incorrectData": "Incorrect or corrupt data", + "missingMetadata": "Missing or wrong metadata", + "duplicate": "Duplicate dataset", + "license": "License violation", + "privacy": "Privacy concern", + "other": "Other" + }, + "descriptionLabel": "Description", + "descriptionPlaceholder": "Please describe the issue in detail...", + "emailLabel": "Your Email (optional)", + "emailPlaceholder": "email@example.com", + "emailHint": "We'll use this to follow up if needed", + "cancel": "Cancel", + "submit": "Submit Report" + }, + "qualities": { + "title": "Dataset Qualities", + "description": "Meta-features and statistical measures", + "searchPlaceholder": "Search qualities...", + "categories": { + "counts": "Counts", + "statistics": "Statistics", + "informationTheory": "Information Theory", + "ratios": "Ratios", + "other": "Other" + } + }, + "deactivated": { + "title": "Dataset Deactivated", + "message": "This dataset has been deactivated and is no longer available." + } } } diff --git a/app-next/messages/fr.json b/app-next/messages/fr.json index 5c3347a4..4c4f6166 100644 --- a/app-next/messages/fr.json +++ b/app-next/messages/fr.json @@ -5,6 +5,7 @@ "tasks": "Tâches", "flows": "Flux", "runs": "Exécutions", + "users": "Profils d'Utilisateurs", "collections": "Collections", "taskCollections": "Tâches", "runCollections": "Exécutions", @@ -25,10 +26,24 @@ "meetUp": "Rencontres", "discussions": "Discussions", "extra": "EXTRA", + "users": "Profils d'Utilisateurs", + "account": "Compte", "auth": "Authentification", "signIn": "Se Connecter", - "signUp": "S'Inscrire", + "signUp": "S'inscrire", "resetPassword": "Réinitialiser le Mot de Passe", + "continueWith": "Ou continuer avec", + "signInWithGitHub": "Se connecter avec GitHub", + "signInWithGoogle": "Se connecter avec Google", + "emailOrUsername": "E-mail ou Nom d'utilisateur", + "password": "Mot de passe", + "forgotPassword": "Mot de passe oublié ?", + "firstName": "Prénom", + "lastName": "Nom", + "username": "Nom d'utilisateur", + "email": "E-mail", + "confirmPassword": "Confirmer le Mot de Passe", + "createAccount": "Créer un Compte", "pageNotFound": "Page Non Trouvée", "serverError": "Erreur Serveur" }, @@ -51,7 +66,7 @@ "java": "Java", "community": "Communauté", "aboutUs": "À propos", - "contributing": "Contribuer", + "contribute": "Contribuer", "team": "Équipe", "publications": "Publications", "blog": "Blog", @@ -140,5 +155,746 @@ "loading": "Chargement...", "error": "Erreur", "noResults": "Aucun résultat trouvé" + }, + "home": { + "hero": { + "version": "Version 3.0 : Construite pour une science reproductible", + "title": "Le laboratoire mondial pour la recherche en apprentissage automatique", + "subtitle": "L'apprentissage automatique prospère grâce à la transparantie. OpenML est l'environnement ouvert et collaboratif où les scientifiques partagent des données FAIR, organisent des expériences et s'appuient sur des algorithmes de pointe.", + "description": "L'apprentissage automatique prospère grâce à la transparantie. OpenML est l'environnement ouvert et collaboratif où les scientifiques partagent des données FAIR, organisent des expériences et s'appuient sur des algorithmes de pointe.", + "startTracking": "Commencez à suivre et partager !", + "readManifesto": "Lire le Manifeste", + "trustedWorldwide": "Utilisé dans le monde entier pour évaluer objectivement les algorithmes.", + "stats": "+99,99 % de reproductibilité Plus de 500 000 jeux de données Plus de 10 millions d'exécutions", + "joinCommunity": "Rejoignez la communauté !" + }, + "ecosystem": { + "overline": "L'Écosystème", + "heading": "Intégration sans friction", + "subtitle": "Importez des données et exportez des expériences de manière fluide depuis votre environnement scientifique habituel.", + "button": "Voir la documentation API" + }, + "threePillars": { + "title": "Les trois piliers d'OpenML", + "subtitle": "Plateforme ouverte pour partager jeux de données, algorithmes et expériences afin de construire un dépôt mondial d'apprentissage automatique", + "fairData": { + "title": "Données FAIR à grande échelle", + "description": "Accédez à des milliers de jeux de données au format uniforme. Chaque jeu de données est versionné, méta-étiqueté et prêt à être chargé immédiatement dans votre pipeline d'analyse.", + "button": "Explorer les jeux de données" + }, + "objectiveEvaluation": { + "title": "Évaluation objective", + "description": "Arrêtez de deviner. Exécutez vos algorithmes sur des tâches standardisées avec des divisions train/test prédéfinies pour garantir que vos résultats sont comparables et prêts pour l'évaluation par les pairs.", + "button": "Voir les tâches de benchmark" + }, + "frictionlessFlows": { + "title": "Flux ML sans friction", + "description": "Traitez les expériences comme des objets. Partagez automatiquement vos pipelines de modèles (flows) et résultats (runs) pour créer un registre scientifique transparent.", + "button": "Explorer les flows" + } + }, + "accessibility": { + "title": "Accessibilité et intégration", + "subtitle": "Utilisez OpenML depuis l'interface web, les notebooks ou la ligne de commande — là où vous travaillez déjà.", + "webInterface": { + "title": "L'interface web", + "description": "Découvrez OpenML via un tableau de bord web interactif pour explorer jeux de données et expériences.", + "features": [ + "Recherchez, filtrez et mettez en signet les jeux de données par type de tâche, taille et domaine.", + "Inspectez les métadonnées, variables cibles et distributions avant même d'écrire du code.", + "Comparez les versions, suivez la provenance et passez directement aux tâches, flows et runs associés." + ], + "summary": "Naviguez, visualisez et organisez tout au même endroit — idéal pour l'analyse exploratoire, l'enseignement et les démos rapides.", + "button": "Parcourir les jeux de données" + }, + "codeApis": { + "title": "Le code (API)", + "description": "Intégrez directement dans votre code. Utilisez nos bibliothèques clientes pour télécharger programmatiquement des jeux de données, exécuter des tâches et uploader des résultats sans quitter votre IDE.", + "viewGithub": "Voir sur GitHub", + "downloadZip": "Télécharger ZIP", + "button": "Voir la doc API" + } + }, + "benchmarking": { + "title": "Suites de benchmarking", + "subtitle": "La méthode scientifique pour une évaluation rigoureuse", + "description": "Validez vos modèles sur des suites de benchmarking curatées couvrant des domaines comme la santé, la finance et la vision par ordinateur. Assurez-vous que votre algorithme est robuste sur de nombreux jeux de données, pas seulement un seul benchmark.", + "tasks": { + "title": "Tâches", + "subtitle": "Le problème", + "description": "Défis d'apprentissage automatique standardisés avec des métriques d'évaluation fixes (AUC, RMSE, Accuracy). Chaque tâche fournit des divisions train/test prédéfinies pour garantir que vos résultats sont comparables et prêts pour l'évaluation par les pairs.", + "button": "Voir les tâches" + }, + "suites": { + "title": "Suites", + "subtitle": "La collection", + "description": "Collections curatées de tâches (ex. « AutoML Benchmark », « Medical Diagnosis Suite ») pour des tests de résistance complets des algorithmes sur plusieurs jeux de données et domaines problématiques.", + "button": "Parcourir les suites" + } + }, + "workflowLoop": { + "title": "La boucle de workflow OpenML", + "subtitle": "Intégrez OpenML à chaque étape de votre workflow ML.", + "import": { + "title": "Importer", + "description": "Chargez des jeux de données OpenML en une seule ligne de code, compatible avec scikit-learn, PyTorch, TensorFlow, XGBoost et plus.", + "button": "Guide de démarrage" + }, + "buildRun": { + "title": "Construire et exécuter", + "description": "Entraînez et évaluez des modèles sur ces tâches en utilisant vos bibliothèques ML préférées. Testez différents pipelines et hyperparamètres jusqu'à obtenir des résultats satisfaisants." + }, + "export": { + "title": "Exporter et publier", + "description": "Publiez automatiquement : uploadez vos workflows (flows), expériences (runs) et métriques d'évaluation sur OpenML pour que d'autres puissent les comparer et les réutiliser.", + "flows": "Flows", + "flowsLabel": "workflows", + "runs": "Runs", + "runsLabel": "expériences", + "metrics": "Metrics", + "metricsLabel": "évaluation" + }, + "knowledgeBase": { + "title": "Base de connaissances", + "subtitle": "Contribuez à la base de connaissances mondiale", + "description": "Générez des identifiants persistants (DOI) pour vos jeux de données, workflows et expériences — assurant la conformité FAIR et permettant une science reproductible.", + "citationTitle": "Le cycle de vie des citations", + "citationDescription": "Ne laissez pas votre recherche mourir sur un disque dur. Uploader sur OpenML crée des artefacts citables, versionnés avec suivi de provenance. Votre travail fait partie du corpus mondial de benchmarks ML, cité par les pairs et alimentant la méta-recherche." + } + }, + "academicImpact": { + "title": "Contribuez à la base de connaissances mondiale", + "intro": "Générez des identifiants persistants (DOI) pour vos jeux de données, workflows et expériences — assurant la conformité FAIR et permettant une science reproductible.", + "subtitle": "Le cycle de vie des citations", + "text": "Ne laissez pas votre recherche mourir sur un disque dur. Uploader sur OpenML crée des artefacts citables, versionnés avec suivi de provenance. Votre travail fait partie du corpus mondial de benchmarks ML, cité par les pairs et alimentant la méta-recherche." + }, + "faq": { + "title": "FAQ OpenML", + "heading": "Réponses claires aux questions les plus importantes", + "description": "Que vous entraîniez votre premier modèle ou exécutiez des benchmarks à grande échelle, OpenML simplifie chaque étape de votre workflow. Cette FAQ met en évidence ce qui rend OpenML unique et comment il peut simplifier votre travail ML quotidien.", + "questions": [ + { + "question": "Pourquoi OpenML est-il idéal pour la recherche en ML ?", + "answer": "OpenML rend vos expériences pleinement reproductibles.", + "details": [ + "algorithmes", + "hyperparamètres", + "versions de jeux de données", + "métriques", + "matériel" + ], + "footer": "N'importe qui peut reproduire vos résultats exactement." + }, + { + "question": "Comment OpenML rend-il les résultats comparables ?", + "answer": "Tous les jeux de données et tâches sont standardisés. Vous pouvez comparer :", + "details": ["algorithmes", "pipelines", "hyperparamètres"], + "footer": "sur des protocoles d'évaluation identiques — essentiel pour le benchmarking." + }, + { + "question": "Puis-je rechercher des expériences précédentes ?", + "answer": "Oui. Chaque expérience est enregistrée avec des métadonnées riches et lisibles par machine. Vous pouvez interroger des choses comme :", + "details": [ + "\"Quels modèles fonctionnent le mieux sur de petits jeux de données tabulaires ?\"" + ], + "footer": "Cela rend OpenML puissant pour le meta-learning." + }, + { + "question": "Qu'est-ce qui rend OpenML scientifiquement rigoureux ?", + "answer": "OpenML impose :", + "details": [ + "jeux de données curatés", + "tâches standardisées", + "divisions train/test cohérentes", + "métadonnées documentées" + ], + "footer": "Idéal pour les articles académiques, la recherche reproductible et les compétitions ML." + }, + { + "question": "Comment OpenML rend-il les résultats comparables ?", + "answer": "Tous les résultats suivent des protocoles d'évaluation standardisés :", + "details": [ + "formats de jeux de données uniformes", + "tâches partagées avec splits fixes", + "métriques cohérentes", + "conditions de benchmarking identiques" + ], + "footer": "Vous pouvez comparer directement algorithmes, pipelines et hyperparamètres à grande échelle." + }, + { + "question": "Puis-je rechercher des expériences précédentes ?", + "answer": "Oui. Chaque expérience est stockée avec des métadonnées lisibles par machine :", + "details": [ + "propriétés des jeux de données", + "paramètres d'algorithmes", + "métriques de performance", + "type de tâche et structure" + ], + "footer": "Vous pouvez interroger des milliers d'exécutions pour découvrir ce qui fonctionne le mieux pour votre problème." + } + ] + }, + "about": { + "meta": { + "title": "À propos d'OpenML - Plateforme d'Apprentissage Automatique Ouverte", + "description": "Découvrez la mission d'OpenML de rendre l'apprentissage automatique simple, accessible et collaboratif. Rejoignez notre communauté de chercheurs et de praticiens construisant un écosystème ouvert de données ML, modèles et benchmarks." + }, + "hero": { + "title": "À propos d'OpenML", + "subtitle": "Construire un écosystème ouvert et fluide de données, modèles et benchmarks d'apprentissage automatique — faire progresser l'IA de manière ouverte pour le bénéfice de toute l'humanité." + }, + "toc": { + "onThisPage": "Sur Cette Page" + } + }, + "contribute": { + "meta": { + "title": "Contribuer à OpenML - Rejoignez Notre Communauté", + "description": "Aidez à construire l'avenir de l'apprentissage automatique ouvert. Contribuez du code, partagez des jeux de données, améliorez la documentation ou engagez-vous avec notre communauté. Chaque contribution fait la différence." + }, + "hero": { + "title": "Contribuer à OpenML", + "subtitle": "Aidez-nous à construire l'avenir de l'apprentissage automatique ouvert. Que vous soyez développeur, chercheur ou passionné, il existe de nombreuses façons de vous impliquer et d'avoir un impact." + } + }, + "documentation": { + "meta": { + "title": "Documentation OpenML - Guide de Démarrage", + "description": "Apprenez à utiliser la plateforme OpenML. Explorez les jeux de données, exécutez des expériences, partagez votre travail et collaborez avec la communauté mondiale d'apprentissage automatique. Guides complets pour Python, R et Java." + }, + "hero": { + "title": "Documentation", + "subtitle": "Tout ce dont vous avez besoin pour commencer avec OpenML. Apprenez à explorer des jeux de données, à exécuter des expériences et à collaborer avec la communauté ML mondiale." + }, + "alert": { + "title": "Documentation Complète", + "description": "Pour des références API complètes, des tutoriels et des guides avancés, visitez notre documentation complète sur" + } + }, + "api": { + "meta": { + "title": "APIs OpenML - Python, R, Java & REST", + "description": "Accédez à des milliers de jeux de données, tâches et expériences ML par programmation. Construisez des pipelines d'apprentissage automatique reproductibles avec Python, R, Java ou notre API REST." + }, + "version": "v1.0", + "title": "APIs OpenML", + "subtitle": "Accédez à des milliers de jeux de données, tâches et expériences ML par programmation. Construisez des pipelines d'apprentissage automatique reproductibles avec Python, R, Java ou notre API REST.", + "quickLinks": { + "python": "Python", + "rPackage": "Package R", + "java": "Java", + "restApi": "API REST" + }, + "toc": { + "onThisPage": "Sur cette page", + "overview": "Aperçu", + "gettingStarted": "Commencer", + "installation": "Installation", + "authentication": "Authentification", + "workingWith": "Travailler avec", + "datasets": "Jeux de données", + "tasks": "Tâches", + "flows": "Flows", + "runs": "Exécutions", + "apiReference": "Référence API", + "endpoints": "Points de terminaison", + "rateLimits": "Limites de débit", + "resources": "Ressources" + }, + "overview": { + "title": "Aperçu", + "description": "OpenML fournit une interface unifiée pour accéder aux ressources d'apprentissage automatique dans plusieurs langages de programmation. Que vous exploriez des jeux de données, exécutiez des expériences ou compariez des algorithmes, nos APIs facilitent l'intégration d'OpenML dans votre workflow.", + "datasets": { + "title": "10 000+ Jeux de données", + "description": "Accès à des jeux de données ML avec des métadonnées riches" + }, + "tasks": { + "title": "50 000+ Tâches", + "description": "Tâches ML prédéfinies avec évaluation standardisée" + }, + "runs": { + "title": "10M+ Exécutions", + "description": "Expériences et benchmarks reproductibles" + } + }, + "gettingStarted": { + "title": "Commencer", + "installation": "Installation", + "authentication": { + "title": "Authentification", + "alertTitle": "Clé API requise pour les téléversements", + "alertDescription": "La lecture des données publiques ne nécessite pas d'authentification. Cependant, pour téléverser des jeux de données, des exécutions ou accéder à des ressources privées, vous aurez besoin d'une clé API.", + "howToGet": "Comment obtenir votre clé API:", + "step1": "Créez un compte ou connectez-vous à OpenML", + "step2": "Allez dans les Paramètres de votre compte", + "step3": "Trouvez votre clé API dans la section API", + "getApiKey": "Obtenir Votre Clé API" + } + }, + "workingWith": { + "title": "Travailler avec", + "datasets": { + "title": "Jeux de données", + "description": "Les jeux de données sont le fondement d'OpenML. Ils contiennent les données réelles utilisées pour les expériences d'apprentissage automatique." + }, + "tasks": { + "title": "Tâches", + "description": "Les tâches définissent un problème d'apprentissage automatique spécifique: quel jeu de données utiliser, quelle cible prédire et comment évaluer." + }, + "flows": { + "title": "Flows", + "description": "Les flows représentent des pipelines ou algorithmes d'apprentissage automatique. Ils décrivent les étapes exactes et les paramètres utilisés." + }, + "runs": { + "title": "Exécutions", + "description": "Les exécutions sont les résultats de l'application d'un flow à une tâche. Elles contiennent des prédictions, des évaluations et des informations d'exécution." + } + }, + "apiReference": { + "title": "Référence API", + "endpoints": { + "title": "Points de terminaison", + "data": { + "title": "API Data", + "description": "Opérations sur les jeux de données", + "list": "Lister les jeux de données", + "get": "Obtenir les détails du jeu de données", + "features": "Obtenir les caractéristiques du jeu de données" + }, + "task": { + "title": "API Tâche", + "description": "Opérations sur les tâches", + "list": "Lister les tâches", + "get": "Obtenir les détails de la tâche" + }, + "flow": { + "title": "API Flow", + "description": "Opérations sur les flows", + "list": "Lister les flows", + "get": "Obtenir les détails du flow" + }, + "run": { + "title": "API Exécution", + "description": "Opérations sur les exécutions", + "list": "Lister les exécutions", + "get": "Obtenir les détails de l'exécution" + } + }, + "rateLimits": { + "title": "Limites de débit", + "description": "Pour garantir une utilisation équitable, l'API a des limites de débit:", + "anonymous": "Anonyme: 100 requêtes/minute", + "authenticated": "Authentifié: 1000 requêtes/minute", + "note": "Si vous avez besoin de limites plus élevées à des fins de recherche, veuillez nous contacter." + } + }, + "resources": { + "title": "Ressources", + "documentation": { + "title": "Documentation", + "python": "Docs API Python", + "r": "Docs Package R", + "rest": "Référence API REST" + }, + "community": { + "title": "Communauté", + "github": "Dépôt GitHub", + "slack": "Communauté Slack", + "discussions": "Discussions" + } + }, + "languages": { + "python": { + "name": "Python", + "description": "L'API Python fournit l'accès le plus complet aux fonctionnalités OpenML, avec un support complet pour scikit-learn, PyTorch et TensorFlow." + }, + "r": { + "name": "R", + "description": "Le package R s'intègre parfaitement avec mlr3 et fournit un accès à toutes les ressources OpenML." + }, + "java": { + "name": "Java", + "description": "Le connecteur API Java fournit un accès programmatique à OpenML pour les applications basées sur JVM." + }, + "julia": { + "name": "Julia", + "description": "Le package Julia fournit un accès haute performance aux jeux de données et tâches OpenML." + }, + "rest": { + "name": "API REST", + "description": "Accédez directement à OpenML via notre API REST pour n'importe quel langage de programmation ou environnement." + } + } + }, + "meetUs": { + "meta": { + "title": "Rencontrez-Nous - Hackathons & Événements OpenML", + "description": "Rejoignez les hackathons et événements communautaires OpenML. Rencontrez l'équipe, collaborez sur des projets de science ouverte et aidez à démocratiser l'apprentissage automatique." + }, + "hero": { + "title": "Rencontrons-Nous !", + "subtitle": "Rejoignez l'un de nos hackathons et aidez à façonner l'avenir de l'apprentissage automatique ouvert" + }, + "why": { + "title": "Changer le monde nécessite un travail concentré et approfondi", + "description": "Lors d'événements de type hackathon, nous sortons de la routine et travaillons pendant des semaines entières sur de nouvelles idées qui font avancer la communauté scientifique. De la création d'extensions cool d'OpenML à la résolution de problèmes data-driven de manière innovante, nous croyons en la science ouverte et à la démocratisation de l'apprentissage automatique pour tous.", + "bringLaptop": "Apportez juste votre ordinateur", + "drinksSnacks": "Nous fournissons boissons & snacks", + "greatCompany": "Bonne compagnie garantie" + }, + "upcoming": { + "title": "Événements à Venir", + "featured": "En Vedette", + "register": "S'inscrire (Gratuit)", + "schedule": "Programme & Plus", + "howToPrepare": "Comment se Préparer", + "viewVenue": "Voir les détails du lieu", + "slackAlert": "Rejoignez notre canal Slack pour rester informé et participer à la discussion !" + }, + "sponsor": { + "title": "Sponsoriser un Événement", + "subtitle": "Le sponsoring peut transformer un super hackathon en quelque chose d'incroyable !", + "description": "Nous sommes toujours très heureux de recevoir du sponsoring pour rendre le prochain hackathon encore meilleur. Sponsoriser un événement peut se faire via la Fondation OpenML et sera utilisé directement au profit des participants : snacks, activités sociales, cadeaux (ex: t-shirts)...", + "acknowledgment": "Nous serons heureux de reconnaître votre soutien sur le site OpenML et de vous inviter à faire une présentation lors de l'événement.", + "contactUs": "Contactez-Nous pour Sponsoriser" + }, + "memories": { + "title": "Souvenirs", + "pastEvents": "Événements Passés", + "photoGallery": "Galerie Photo", + "photoDescription": "Découvrez les photos des événements précédents", + "viewPhotos": "Voir les Photos sur Flickr" + }, + "cta": { + "title": "Prêt à Nous Rejoindre ?", + "description": "Que vous soyez un expert ML chevronné ou débutant, nos hackathons sont l'endroit idéal pour apprendre, collaborer et avoir un impact.", + "registerNext": "S'inscrire au Prochain Événement", + "joinSlack": "Rejoindre la Communauté Slack" + } + }, + "terms": { + "meta": { + "title": "Conditions & Citation - OpenML", + "description": "Découvrez les licences OpenML, comment citer OpenML dans vos recherches, ainsi que nos conditions d'utilisation et politique de confidentialité." + }, + "title": "Conditions & Citation", + "subtitle": "Licences, citations et conditions d'utilisation d'OpenML dans vos recherches et projets.", + "licenses": { + "title": "Licences", + "description": "OpenML prend en charge plusieurs licences ouvertes pour maximiser l'accessibilité et la réutilisation. Chaque jeu de données et ressource sur OpenML est étiqueté avec sa licence spécifique.", + "ccby": "Attribution requise. Partagez et adaptez librement avec mention appropriée.", + "cc0": "Aucun droit réservé. Utilisez librement sans aucune restriction.", + "bsd": "Pour le code source. Licence permissive avec restrictions minimales." + }, + "citation": { + "title": "Comment Citer", + "subtitle": "Veuillez citer OpenML si vous l'utilisez dans vos recherches. Cela nous aide à démontrer l'impact et à poursuivre le développement.", + "openml": { + "title": "Citer la Plateforme OpenML", + "description": "Vanschoren et al., SIGKDD Explorations 2013" + }, + "python": { + "title": "Citer l'API Python", + "description": "Feurer et al., JMLR 2021" + }, + "r": { + "title": "Citer l'API R", + "description": "Casalicchio et al., Computational Statistics 2017" + }, + "benchmark": { + "title": "Citer les Suites de Benchmarking", + "description": "Bischl et al., NeurIPS 2021" + } + }, + "termsOfUse": { + "title": "Conditions d'Utilisation", + "honorCode": { + "title": "Code d'Honneur", + "subtitle": "Directives pour une utilisation éthique d'OpenML", + "items": { + "cite": "Donnez une attribution appropriée et citez les auteurs originaux des jeux de données et articles", + "share": "Partagez vos contributions ouvertement pour que d'autres puissent construire sur votre travail", + "respect": "Respectez les licences des jeux de données et suivez leurs conditions", + "quality": "Téléchargez des données et expériences de haute qualité, bien documentées", + "feedback": "Fournissez des commentaires constructifs pour améliorer la plateforme" + } + }, + "usageTerms": { + "title": "Règles d'Utilisation", + "subtitle": "Règles régissant l'utilisation des services OpenML", + "intro": "En utilisant OpenML, vous acceptez les conditions suivantes:", + "items": { + "free": "OpenML est gratuit pour la recherche, l'éducation et les fins non commerciales", + "api": "L'utilisation de l'API doit respecter des limites de débit raisonnables pour garantir un accès équitable à tous", + "abuse": "Le scraping automatisé ou l'abus des services peut entraîner des restrictions d'accès", + "warranty": "Les données et services sont fournis \"tels quels\" sans aucune garantie" + } + }, + "privacy": { + "title": "Politique de Confidentialité", + "subtitle": "Comment nous gérons vos données", + "intro": "Nous prenons votre vie privée au sérieux. Voici comment nous traitons vos informations:", + "items": { + "collect": "Nous collectons un minimum d'informations personnelles nécessaires pour fournir nos services", + "usage": "Les données d'utilisation nous aident à améliorer OpenML et comprendre comment il est utilisé", + "share": "Nous ne vendons ni ne partageons vos informations personnelles avec des tiers", + "cookies": "Nous utilisons des cookies pour l'authentification et améliorer votre expérience" + } + } + }, + "contact": { + "title": "Questions?", + "description": "Si vous avez des questions sur les licences, la citation ou les conditions d'utilisation, contactez-nous.", + "button": "Contacter l'Équipe OpenML" + } + } + }, + "dashboard": { + "meta": { + "title": "Tableau de Bord - OpenML", + "description": "Votre tableau de bord OpenML personnel. Suivez vos contributions, votre réputation et votre impact sur la recherche en apprentissage automatique." + }, + "welcome": "Bienvenue, {name} !", + "subtitle": "OpenML est l'endroit pour partager des jeux de données, des workflows et collaborer sur la recherche en apprentissage automatique.", + "signOut": "Se déconnecter", + "loading": "Chargement...", + "stats": { + "reputation": "RÉPUTATION", + "researchImpact": "score d'impact recherche", + "downloads": "Téléchargements", + "citations": "Citations", + "flowReuses": "Réutilisations Flow", + "discussions": "Discussions", + "publicActivity": "ACTIVITÉ PUBLIQUE", + "activeDays": "{count} jours actifs cette semaine", + "totalContributions": "CONTRIBUTIONS TOTALES", + "total": "contributions totales" + }, + "contributions": { + "datasets": "Jeux de Données", + "flows": "Flows", + "runs": "Exécutions", + "created": "créé", + "experiments": "expériences", + "inPublications": "dans les publications", + "reusesByOthers": "{count} réutilisations par d'autres" + }, + "topContributions": { + "title": "Vos Meilleures Contributions", + "mostDownloaded": "Jeu de Données le Plus Téléchargé", + "mostReused": "Flow le Plus Réutilisé", + "downloads": "téléchargements", + "reuses": "réutilisations" + }, + "focus": { + "title": "Comment commencer : Choisissez un focus pour aujourd'hui", + "subtitle": "Aidez-nous à faire des suggestions pertinentes pour vous", + "datasets": { + "title": "Jeux de Données", + "description": "Explorez et partagez des jeux de données" + }, + "tasks": { + "title": "Tâches", + "description": "Définissez des problèmes ML et des benchmarks" + }, + "flows": { + "title": "Flows", + "description": "Partagez des workflows et modèles ML" + } + }, + "hideStats": "Masquer les statistiques" + }, + "auth": { + "signIn": { + "title": "Se connecter - OpenML", + "description": "Connectez-vous à votre compte OpenML", + "welcome": "Bienvenue sur OpenML", + "subtitle": "Connectez-vous à votre compte ou créez-en un nouveau", + "continueWithGithub": "Continuer avec GitHub", + "continueWithGoogle": "Continuer avec Google", + "orContinueWith": "Ou continuez avec", + "emailLabel": "E-mail ou nom d'utilisateur", + "emailPlaceholder": "Entrez votre e-mail ou nom d'utilisateur", + "passwordLabel": "Mot de passe", + "passwordPlaceholder": "Entrez votre mot de passe", + "signInButton": "Se connecter", + "signingIn": "Connexion...", + "forgotPassword": "Mot de passe oublié?", + "noAccount": "Vous n'avez pas de compte?", + "signUpLink": "S'inscrire", + "invalidCredentials": "E-mail ou mot de passe invalide", + "error": "Une erreur s'est produite. Veuillez réessayer.", + "oauthError": "L'authentification a échoué. Veuillez réessayer." + } + }, + "dataset": { + "header": { + "uploadedOn": "Téléchargé le {date}", + "by": "par", + "active": "Actif", + "deactivated": "Désactivé", + "inPreparation": "En Préparation" + }, + "stats": { + "instances": "Instances", + "features": "Caractéristiques", + "classes": "Classes", + "missing": "Manquant", + "tasks": "Tâches", + "runs": "Exécutions", + "downloads": "Téléchargements", + "likes": "J'aime" + }, + "actions": { + "download": "Télécharger", + "downloadDataset": "Télécharger le Dataset", + "originalFile": "Fichier ARFF/CSV original", + "showCode": "Afficher le Code", + "codeSnippets": "Python, R, Julia, cURL", + "quickCopy": "Copie Rapide", + "like": "J'aime", + "bookmark": "Favoris", + "bookmarked": "En Favoris", + "addToCollection": "Ajouter à une Collection", + "share": "Partager", + "copyLink": "Copier le Lien", + "linkCopied": "Lien Copié!", + "openNotebook": "Ouvrir dans un Notebook", + "reportIssue": "Signaler un Problème" + }, + "codeDialog": { + "title": "Charger le Dataset: {name}", + "description": "Utilisez ces extraits de code pour charger ce dataset dans votre langage préféré", + "copy": "Copier", + "copied": "Copié!", + "installation": "Installation" + }, + "tabs": { + "dataDetail": "Détails des Données", + "analysis": "Analyse", + "tasks": "Tâches", + "runs": "Exécutions" + }, + "description": { + "showMore": "Afficher Plus", + "showLess": "Afficher Moins", + "originalSource": "Source Originale", + "relatedPaper": "Article Associé" + }, + "features": { + "title": "Caractéristiques", + "description": "Informations détaillées sur chaque attribut du dataset", + "searchPlaceholder": "Rechercher des caractéristiques...", + "filterTypes": "Filtrer par Types", + "showAll": "Afficher les {count} Caractéristiques", + "showLess": "Afficher Moins", + "noMatch": "Aucune caractéristique correspondante", + "target": "Cible", + "distinct": "Distincts", + "missing": "Manquants", + "statistics": "Statistiques", + "type": "Type", + "featureName": "Nom de la Caractéristique", + "types": { + "numeric": "Numérique", + "nominal": "Nominal", + "string": "Chaîne", + "date": "Date" + }, + "stats": { + "minimum": "Minimum", + "maximum": "Maximum", + "mean": "Moyenne", + "stdDev": "Écart Type", + "distinctValues": "Valeurs Distinctes", + "missingValues": "Valeurs Manquantes" + }, + "valueDistribution": "Distribution des Valeurs" + }, + "information": { + "title": "Informations sur le Dataset", + "description": "Détails techniques et métadonnées" + }, + "citation": { + "title": "Citation", + "description": "Comment citer ce dataset dans les travaux académiques", + "copy": "Copier la Citation" + }, + "analysis": { + "title": "Visualisations des Données", + "description": "Exploration visuelle du dataset", + "comingSoon": "Visualisations Bientôt Disponibles", + "comingSoonDesc": "Les distributions de caractéristiques, corrélations et métriques de qualité des données seront affichées ici.", + "classBalance": "Équilibre des Classes", + "classBalanceDesc": "Distribution des classes cibles", + "missingValues": "Valeurs Manquantes", + "missingValuesDesc": "Complétude des données", + "dimensionality": "Dimensionnalité", + "dimensionalityDesc": "Caractéristiques par instance" + }, + "tasks": { + "title": "Tâches Associées", + "description": "Tâches de machine learning définies sur ce dataset", + "available": "{count} tâche(s) disponible(s) sur ce dataset", + "viewAll": "Voir toutes les tâches", + "noTasks": "Aucune tâche n'a encore été définie", + "createTask": "Créer une Tâche" + }, + "runs": { + "title": "Exécutions ML", + "description": "Expériences de machine learning sur ce dataset", + "recorded": "{count} exécution(s) enregistrée(s) sur ce dataset", + "viewAll": "Voir toutes les exécutions", + "noRuns": "Aucune exécution n'a encore été enregistrée", + "runExperiment": "Lancer une Expérience", + "bestAccuracy": "Meilleure Précision", + "topFlows": "Meilleurs Flows", + "leaderboardComingSoon": "Classement bientôt disponible...", + "bestAlgorithms": "Algorithmes les plus performants..." + }, + "collection": { + "dialogTitle": "Ajouter à une Collection", + "dialogDescription": "Ajoutez \"{name}\" à l'une de vos collections ou créez-en une nouvelle.", + "signInPrompt": "Connectez-vous pour ajouter des datasets à vos collections", + "createNew": "Créer une Nouvelle Collection", + "cancel": "Annuler" + }, + "report": { + "dialogTitle": "Signaler un Problème", + "dialogDescription": "Aidez-nous à améliorer OpenML en signalant des problèmes avec ce dataset.", + "issueType": "Type de Problème", + "selectType": "Sélectionnez un type de problème...", + "types": { + "incorrectData": "Données incorrectes ou corrompues", + "missingMetadata": "Métadonnées manquantes ou incorrectes", + "duplicate": "Dataset en double", + "license": "Violation de licence", + "privacy": "Problème de confidentialité", + "other": "Autre" + }, + "descriptionLabel": "Description", + "descriptionPlaceholder": "Veuillez décrire le problème en détail...", + "emailLabel": "Votre E-mail (optionnel)", + "emailPlaceholder": "email@exemple.com", + "emailHint": "Nous l'utiliserons pour vous recontacter si nécessaire", + "cancel": "Annuler", + "submit": "Soumettre le Rapport" + }, + "qualities": { + "title": "Qualités du Dataset", + "description": "Méta-caractéristiques et mesures statistiques", + "searchPlaceholder": "Rechercher des qualités...", + "categories": { + "counts": "Comptages", + "statistics": "Statistiques", + "informationTheory": "Théorie de l'Information", + "ratios": "Ratios", + "other": "Autre" + } + }, + "deactivated": { + "title": "Dataset Désactivé", + "message": "Ce dataset a été désactivé et n'est plus disponible." + } } } diff --git a/app-next/messages/nl.json b/app-next/messages/nl.json index 0e48329c..4ee80ea3 100644 --- a/app-next/messages/nl.json +++ b/app-next/messages/nl.json @@ -5,6 +5,7 @@ "tasks": "Taken", "flows": "Flows", "runs": "Runs", + "users": "Gebruikersprofielen", "collections": "Collecties", "taskCollections": "Taken", "runCollections": "Runs", @@ -25,10 +26,24 @@ "meetUp": "Bijeenkomsten", "discussions": "Discussies", "extra": "EXTRA", + "users": "Gebruikersprofielen", + "account": "Account", "auth": "Authenticatie", "signIn": "Inloggen", "signUp": "Registreren", "resetPassword": "Wachtwoord Resetten", + "continueWith": "Of ga verder met", + "signInWithGitHub": "Inloggen met GitHub", + "signInWithGoogle": "Inloggen met Google", + "emailOrUsername": "E-mail of Gebruikersnaam", + "password": "Wachtwoord", + "forgotPassword": "Wachtwoord vergeten?", + "firstName": "Voornaam", + "lastName": "Achternaam", + "username": "Gebruikersnaam", + "email": "E-mail", + "confirmPassword": "Bevestig Wachtwoord", + "createAccount": "Account Aanmaken", "pageNotFound": "Pagina Niet Gevonden", "serverError": "Serverfout" }, @@ -51,7 +66,7 @@ "java": "Java", "community": "Gemeenschap", "aboutUs": "Over ons", - "contributing": "Bijdragen", + "contribute": "Bijdragen", "team": "Team", "publications": "Publicaties", "blog": "Blog", @@ -140,5 +155,746 @@ "loading": "Laden...", "error": "Fout", "noResults": "Geen resultaten gevonden" + }, + "home": { + "hero": { + "version": "Versie 3.0: Gebouwd voor reproduceerbare wetenschap", + "title": "Het wereldwijde lab voor machine learning onderzoek", + "subtitle": "Machine learning gedijt bij transparantie. OpenML is de open, samenwerkende omgeving waar wetenschappers FAIR-data delen, experimenten organiseren en bouwen op state-of-the-art algoritmen.", + "description": "Machine learning gedijt bij transparantie. OpenML is de open, samenwerkende omgeving waar wetenschappers FAIR-data delen, experimenten organiseren en bouwen op state-of-the-art algoritmen.", + "startTracking": "Begin met bijhouden en delen!", + "readManifesto": "Lees het Manifest", + "trustedWorldwide": "Wereldwijd vertrouwd voor objectieve benchmarking van algoritmen.", + "stats": "+99,99% Reproduceerbaarheid 500k+ Datasets 10M+ Runs+", + "joinCommunity": "Sluit je aan bij de community!" + }, + "ecosystem": { + "overline": "Het Ecosysteem", + "heading": "Naadloze integratie", + "subtitle": "Importeer naadloos data en exporteer experimenten vanuit je eigen wetenschappelijke omgeving.", + "button": "Bekijk API-documentatie" + }, + "threePillars": { + "title": "De drie pijlers van OpenML", + "subtitle": "Open platform voor het delen van datasets, algoritmen en experimenten om een wereldwijde machine learning repository op te bouwen", + "fairData": { + "title": "FAIR-data op schaal", + "description": "Toegang tot duizenden uniform geformatteerde datasets. Elk dataset is geversioneerd, voorzien van metadata en direct klaar voor laden in je analysepipeline.", + "button": "Datasets verkennen" + }, + "objectiveEvaluation": { + "title": "Objectieve evaluatie", + "description": "Stop met gokken. Voer je algoritmen uit op gestandaardiseerde taken met vooraf gedefinieerde train/test-splits om te zorgen dat je resultaten vergelijkbaar en peer-review-klaar zijn.", + "button": "Bekijk benchmarktaken" + }, + "frictionlessFlows": { + "title": "Frictieloze ML-flows", + "description": "Behandel experimenten als objecten. Deel automatisch je model-pipelines (flows) en resultaten (runs) om een transparant wetenschappelijk record te creëren.", + "button": "Flows verkennen" + } + }, + "accessibility": { + "title": "Toegankelijkheid & integratie", + "subtitle": "Gebruik OpenML vanuit de webinterface, notebooks of de command line — waar je al werkt.", + "webInterface": { + "title": "De webinterface", + "description": "Ontdek OpenML via een interactief webdashboard voor het verkennen van datasets en experimenten.", + "features": [ + "Zoek, filter en bookmark datasets op taaktype, grootte en domein.", + "Bekijk metadata, doelvariabelen en distributies voordat je code schrijft.", + "Vergelijk versies, volg herkomst en spring direct naar gerelateerde taken, flows en runs." + ], + "summary": "Browse, visualiseer en organiseer alles op één plek — ideaal voor exploratieve analyse, onderwijs en snelle demo's.", + "button": "Datasets browsen" + }, + "codeApis": { + "title": "De code (API's)", + "description": "Integreer direct in je code. Gebruik onze client libraries om programmatisch datasets te downloaden, taken uit te voeren en resultaten te uploaden zonder je IDE te verlaten.", + "viewGithub": "Bekijk op GitHub", + "downloadZip": "ZIP downloaden", + "button": "API-docs bekijken" + } + }, + "benchmarking": { + "title": "Benchmarking-suites", + "subtitle": "De wetenschappelijke methode voor rigoureuze evaluatie", + "description": "Valideer je modellen op samengestelde benchmarking-suites over domeinen zoals gezondheidszorg, financiën en computer vision. Zorg dat je algoritme robuust is over veel datasets, niet slechts één benchmark.", + "tasks": { + "title": "Taken", + "subtitle": "Het probleem", + "description": "Gestandaardiseerde machine learning uitdagingen met vaste evaluatiemetrics (AUC, RMSE, Accuracy). Elke taak biedt vooraf gedefinieerde train/test-splits om te zorgen dat je resultaten vergelijkbaar en peer-review-klaar zijn.", + "button": "Taken bekijken" + }, + "suites": { + "title": "Suites", + "subtitle": "De collectie", + "description": "Samengestelde collecties van taken (bijv. \"AutoML Benchmark\", \"Medical Diagnosis Suite\") voor uitgebreide stresstests van algoritmen over meerdere datasets en probleemgebieden.", + "button": "Suites browsen" + } + }, + "workflowLoop": { + "title": "De OpenML-workflowloop", + "subtitle": "Integreer OpenML in elke stap van je ML-workflow.", + "import": { + "title": "Importeren", + "description": "Laad OpenML-datasets in één regel code, compatibel met scikit-learn, PyTorch, TensorFlow, XGBoost en meer.", + "button": "Startgids" + }, + "buildRun": { + "title": "Bouwen & uitvoeren", + "description": "Train en evalueer modellen op die taken met je favoriete ML-bibliotheken. Probeer verschillende pipelines en hyperparameters tot je tevreden bent met de resultaten." + }, + "export": { + "title": "Exporteren & publiceren", + "description": "Publiceer automatisch: Upload je workflows (flows), experimenten (runs) en evaluatiemetrics naar OpenML zodat anderen ze kunnen vergelijken en hergebruiken.", + "flows": "Flows", + "flowsLabel": "workflows", + "runs": "Runs", + "runsLabel": "experimenten", + "metrics": "Metrics", + "metricsLabel": "evaluatie" + }, + "knowledgeBase": { + "title": "Kennisbasis", + "subtitle": "Draag bij aan de globale kennisbasis", + "description": "Genereer persistente identifiers (DOI's) voor je datasets, workflows en experimenten — voor FAIR-compliance en reproduceerbare wetenschap.", + "citationTitle": "De citatie-levenscyclus", + "citationDescription": "Laat je onderzoek niet sterven op een harde schijf. Uploaden naar OpenML creërt citeerbare, geversioneerde artefacten met herkomsttracking. Je werk wordt deel van het globale ML-benchmarkcorpus, geciteerd door peers en voedend meta-onderzoek." + } + }, + "academicImpact": { + "title": "Draag bij aan de globale kennisbasis", + "intro": "Genereer persistente identifiers (DOI's) voor je datasets, workflows en experimenten — voor FAIR-compliance en reproduceerbare wetenschap.", + "subtitle": "De citatie-levenscyclus", + "text": "Laat je onderzoek niet sterven op een harde schijf. Uploaden naar OpenML creëert citeerbare, geversioneerde artefacten met herkomsttracking. Je werk wordt deel van het globale ML-benchmarkcorpus, geciteerd door peers en voedend meta-onderzoek." + }, + "faq": { + "title": "OpenML FAQ", + "heading": "Duidelijke antwoorden op de belangrijkste vragen", + "description": "Of je nu je eerste model traint of grootschalige benchmarks uitvoert, OpenML stroomlijnt elke stap van je workflow. Deze Q&A benadrukt wat OpenML uniek maakt en hoe het je dagelijkse ML-werk kan vereenvoudigen.", + "questions": [ + { + "question": "Waarom is OpenML ideaal voor ML-onderzoek?", + "answer": "OpenML maakt je experimenten volledig reproduceerbaar.", + "details": [ + "algoritmen", + "hyperparameters", + "datasetversies", + "metrics", + "hardware" + ], + "footer": "Iedereen kan je resultaten exact herhalen." + }, + { + "question": "Hoe maakt OpenML resultaten vergelijkbaar?", + "answer": "Alle datasets en taken zijn gestandaardiseerd. Je kunt vergelijken:", + "details": ["algoritmen", "pipelines", "hyperparameters"], + "footer": "over identieke evaluatieprotocollen — essentieel voor benchmarking." + }, + { + "question": "Kan ik eerdere experimenten doorzoeken?", + "answer": "Ja. Elk experiment wordt gelogd met rijke, machineleesbare metadata. Je kunt dingen opvragen zoals:", + "details": [ + "\"Welke modellen werken het beste op kleine tabulaire datasets?\"" + ], + "footer": "Dit maakt OpenML krachtig voor meta-learning." + }, + { + "question": "Wat maakt OpenML wetenschappelijk rigoureus?", + "answer": "OpenML handhaaft:", + "details": [ + "gecureerde datasets", + "gestandaardiseerde taken", + "consistente train/test-splits", + "gedocumenteerde metadata" + ], + "footer": "Ideaal voor academische papers, reproduceerbaar onderzoek en ML-competities." + }, + { + "question": "Hoe maakt OpenML resultaten vergelijkbaar?", + "answer": "Alle resultaten volgen gestandaardiseerde evaluatieprotocollen:", + "details": [ + "uniforme datasetformaten", + "gedeelde taken met vaste splits", + "consistente metrics", + "identieke benchmarkingcondities" + ], + "footer": "Je kunt algoritmen, pipelines en hyperparameters direct vergelijken op schaal." + }, + { + "question": "Kan ik eerdere experimenten doorzoeken?", + "answer": "Ja. Elk experiment wordt opgeslagen met machineleesbare metadata:", + "details": [ + "dataseteigenschappen", + "algoritme-instellingen", + "prestatiemetrics", + "taaktype en -structuur" + ], + "footer": "Je kunt duizenden runs doorzoeken om te ontdekken wat het beste werkt voor jouw probleem." + } + ] + }, + "about": { + "meta": { + "title": "Over OpenML - Open Machine Learning Platform", + "description": "Leer meer over de missie van OpenML om machine learning eenvoudig, toegankelijk en collaboratief te maken. Sluit je aan bij onze gemeenschap van onderzoekers en practitioners die een open ecosysteem bouwen van ML-data, modellen en benchmarks." + }, + "hero": { + "title": "Over OpenML", + "subtitle": "Het bouwen van een naadloos, open ecosysteem van machine learning data, modellen en benchmarks — openlijk AI bevorderen ten voordele van de hele mensheid." + }, + "toc": { + "onThisPage": "Op Deze Pagina" + } + }, + "contribute": { + "meta": { + "title": "Bijdragen aan OpenML - Sluit Je Aan Bij Onze Gemeenschap", + "description": "Help mee de toekomst van open machine learning te bouwen. Draag code bij, deel datasets, verbeter documentatie, of ga in gesprek met onze gemeenschap. Elke bijdrage maakt verschil." + }, + "hero": { + "title": "Bijdragen aan OpenML", + "subtitle": "Help ons de toekomst van open machine learning te bouwen. Of je nu ontwikkelaar, onderzoeker of enthousiast bent, er zijn vele manieren om betrokken te raken en impact te maken." + } + }, + "documentation": { + "meta": { + "title": "OpenML Documentatie - Aan de Slag Gids", + "description": "Leer hoe je het OpenML-platform gebruikt. Verken datasets, voer experimenten uit, deel je werk en werk samen met de wereldwijde machine learning gemeenschap. Volledige gidsen voor Python, R en Java." + }, + "hero": { + "title": "Documentatie", + "subtitle": "Alles wat je nodig hebt om aan de slag te gaan met OpenML. Leer hoe je datasets verkent, experimenten uitvoert en samenwerkt met de wereldwijde ML-gemeenschap." + }, + "alert": { + "title": "Volledige Documentatie", + "description": "Voor uitgebreide API-referenties, tutorials en geavanceerde gidsen, bezoek onze volledige documentatie op" + } + }, + "api": { + "meta": { + "title": "OpenML APIs - Python, R, Java & REST", + "description": "Krijg programmatische toegang tot duizenden ML datasets, taken en experimenten. Bouw reproduceerbare machine learning pipelines met Python, R, Java of onze REST API." + }, + "version": "v1.0", + "title": "OpenML APIs", + "subtitle": "Krijg programmatische toegang tot duizenden ML datasets, taken en experimenten. Bouw reproduceerbare machine learning pipelines met Python, R, Java of onze REST API.", + "quickLinks": { + "python": "Python", + "rPackage": "R Pakket", + "java": "Java", + "restApi": "REST API" + }, + "toc": { + "onThisPage": "Op deze pagina", + "overview": "Overzicht", + "gettingStarted": "Aan de Slag", + "installation": "Installatie", + "authentication": "Authenticatie", + "workingWith": "Werken met", + "datasets": "Datasets", + "tasks": "Taken", + "flows": "Flows", + "runs": "Runs", + "apiReference": "API Referentie", + "endpoints": "Endpoints", + "rateLimits": "Snelheidslimieten", + "resources": "Bronnen" + }, + "overview": { + "title": "Overzicht", + "description": "OpenML biedt een uniforme interface voor toegang tot machine learning bronnen in meerdere programmeertalen. Of je nu datasets verkent, experimenten uitvoert of algoritmes benchmarkt, onze APIs maken het eenvoudig om OpenML in je workflow te integreren.", + "datasets": { + "title": "10.000+ Datasets", + "description": "Toegang tot gecureerde ML datasets met rijke metadata" + }, + "tasks": { + "title": "50.000+ Taken", + "description": "Voorgedefinieerde ML taken met gestandaardiseerde evaluatie" + }, + "runs": { + "title": "10M+ Runs", + "description": "Reproduceerbare experimenten en benchmarks" + } + }, + "gettingStarted": { + "title": "Aan de Slag", + "installation": "Installatie", + "authentication": { + "title": "Authenticatie", + "alertTitle": "API Sleutel Vereist voor Uploads", + "alertDescription": "Het lezen van openbare data vereist geen authenticatie. Om echter datasets, runs te uploaden of toegang te krijgen tot privé bronnen, heb je een API sleutel nodig.", + "howToGet": "Hoe krijg je je API sleutel:", + "step1": "Maak een account aan of log in bij OpenML", + "step2": "Ga naar je Account Instellingen", + "step3": "Vind je API sleutel in de API sectie", + "getApiKey": "Haal Je API Sleutel" + } + }, + "workingWith": { + "title": "Werken met", + "datasets": { + "title": "Datasets", + "description": "Datasets zijn de basis van OpenML. Ze bevatten de daadwerkelijke data die wordt gebruikt voor machine learning experimenten." + }, + "tasks": { + "title": "Taken", + "description": "Taken definiëren een specifiek machine learning probleem: welke dataset te gebruiken, welk doel te voorspellen, en hoe te evalueren." + }, + "flows": { + "title": "Flows", + "description": "Flows representeren machine learning pipelines of algoritmes. Ze beschrijven de exacte stappen en parameters die worden gebruikt." + }, + "runs": { + "title": "Runs", + "description": "Runs zijn de resultaten van het toepassen van een flow op een taak. Ze bevatten voorspellingen, evaluaties en runtime informatie." + } + }, + "apiReference": { + "title": "API Referentie", + "endpoints": { + "title": "Endpoints", + "data": { + "title": "Data API", + "description": "Dataset operaties", + "list": "Lijst datasets", + "get": "Haal dataset details", + "features": "Haal dataset kenmerken" + }, + "task": { + "title": "Taak API", + "description": "Taak operaties", + "list": "Lijst taken", + "get": "Haal taak details" + }, + "flow": { + "title": "Flow API", + "description": "Flow operaties", + "list": "Lijst flows", + "get": "Haal flow details" + }, + "run": { + "title": "Run API", + "description": "Run operaties", + "list": "Lijst runs", + "get": "Haal run details" + } + }, + "rateLimits": { + "title": "Snelheidslimieten", + "description": "Om eerlijk gebruik te garanderen, heeft de API snelheidslimieten:", + "anonymous": "Anoniem: 100 verzoeken/minuut", + "authenticated": "Geauthenticeerd: 1000 verzoeken/minuut", + "note": "Als je hogere limieten nodig hebt voor onderzoeksdoeleinden, neem dan contact met ons op." + } + }, + "resources": { + "title": "Bronnen", + "documentation": { + "title": "Documentatie", + "python": "Python API Docs", + "r": "R Pakket Docs", + "rest": "REST API Referentie" + }, + "community": { + "title": "Gemeenschap", + "github": "GitHub Repository", + "slack": "Slack Gemeenschap", + "discussions": "Discussies" + } + }, + "languages": { + "python": { + "name": "Python", + "description": "De Python API biedt de meest uitgebreide toegang tot OpenML functionaliteit, met volledige ondersteuning voor scikit-learn, PyTorch en TensorFlow." + }, + "r": { + "name": "R", + "description": "Het R pakket integreert naadloos met mlr3 en biedt toegang tot alle OpenML bronnen." + }, + "java": { + "name": "Java", + "description": "De Java API connector biedt programmatische toegang tot OpenML voor JVM-gebaseerde applicaties." + }, + "julia": { + "name": "Julia", + "description": "Het Julia pakket biedt high-performance toegang tot OpenML datasets en taken." + }, + "rest": { + "name": "REST API", + "description": "Krijg rechtstreeks toegang tot OpenML via onze REST API voor elke programmeertaal of omgeving." + } + } + }, + "meetUs": { + "meta": { + "title": "Ontmoet Ons - OpenML Hackathons & Evenementen", + "description": "Neem deel aan OpenML hackathons en community evenementen. Ontmoet het team, werk samen aan open science projecten, en help machine learning te democratiseren." + }, + "hero": { + "title": "Laten we Afspreken!", + "subtitle": "Neem deel aan een van onze hackathons en help de toekomst van open machine learning vorm te geven" + }, + "why": { + "title": "De wereld veranderen vereist gerichte, diepgaande inspanning", + "description": "In hackathon-achtige evenementen breken we met de routine en werken we wekenlang aan nieuwe ideeën die de wetenschappelijke gemeenschap vooruit helpen. Van coole uitbreidingen van OpenML zelf tot het oplossen van data-gedreven problemen op nieuwe manieren, we geloven in open science en het democratiseren van machine learning voor iedereen.", + "bringLaptop": "Breng gewoon je laptop mee", + "drinksSnacks": "Wij zorgen voor drankjes & snacks", + "greatCompany": "Gezellig gezelschap gegarandeerd" + }, + "upcoming": { + "title": "Aankomende Evenementen", + "featured": "Uitgelicht", + "register": "Registreer (Gratis)", + "schedule": "Schema & Meer", + "howToPrepare": "Hoe Voor te Bereiden", + "viewVenue": "Bekijk locatie details", + "slackAlert": "Word lid van ons Slack kanaal om op de hoogte te blijven en mee te doen aan de discussie!" + }, + "sponsor": { + "title": "Sponsor een Evenement", + "subtitle": "Sponsoring kan een geweldige hackathon nog beter maken!", + "description": "We zijn altijd erg blij met sponsoring om de volgende hackathon nog beter te maken. Sponsoren kan via de OpenML Foundation en wordt direct gebruikt ten behoeve van de deelnemers: voor snacks, sociale activiteiten, gratis spullen (zoals t-shirts)...", + "acknowledgment": "We erkennen graag uw steun op de OpenML website, en nodigen u uit om een presentatie te geven op het evenement.", + "contactUs": "Neem Contact Op Over Sponsoring" + }, + "memories": { + "title": "Herinneringen", + "pastEvents": "Eerdere Evenementen", + "photoGallery": "Fotogalerij", + "photoDescription": "Bekijk foto's van eerdere evenementen", + "viewPhotos": "Bekijk Foto's op Flickr" + }, + "cta": { + "title": "Klaar om Mee te Doen?", + "description": "Of je nu een ervaren ML expert bent of net begint, onze hackathons zijn de perfecte plek om te leren, samen te werken en impact te maken.", + "registerNext": "Registreer voor Volgend Evenement", + "joinSlack": "Word Lid van Slack Community" + } + }, + "terms": { + "meta": { + "title": "Voorwaarden & Citatie - OpenML", + "description": "Meer informatie over OpenML-licenties, hoe u OpenML in uw onderzoek kunt citeren, en onze gebruiksvoorwaarden en privacybeleid." + }, + "title": "Voorwaarden & Citatie", + "subtitle": "Licenties, citaties en voorwaarden voor het gebruik van OpenML in uw onderzoek en projecten.", + "licenses": { + "title": "Licenties", + "description": "OpenML ondersteunt meerdere open licenties om toegankelijkheid en hergebruik te maximaliseren. Elke dataset en bron op OpenML is getagd met de specifieke licentie.", + "ccby": "Naamsvermelding vereist. Vrij delen en aanpassen met juiste vermelding.", + "cc0": "Geen rechten voorbehouden. Vrij te gebruiken zonder beperkingen.", + "bsd": "Voor broncode. Permissieve licentie met minimale beperkingen." + }, + "citation": { + "title": "Hoe te Citeren", + "subtitle": "Citeer OpenML als u het in uw onderzoek gebruikt. Het helpt ons impact aan te tonen en ontwikkeling voort te zetten.", + "openml": { + "title": "Citeer OpenML Platform", + "description": "Vanschoren et al., SIGKDD Explorations 2013" + }, + "python": { + "title": "Citeer Python API", + "description": "Feurer et al., JMLR 2021" + }, + "r": { + "title": "Citeer R API", + "description": "Casalicchio et al., Computational Statistics 2017" + }, + "benchmark": { + "title": "Citeer Benchmarking Suites", + "description": "Bischl et al., NeurIPS 2021" + } + }, + "termsOfUse": { + "title": "Gebruiksvoorwaarden", + "honorCode": { + "title": "Erecode", + "subtitle": "Richtlijnen voor ethisch gebruik van OpenML", + "items": { + "cite": "Geef juiste naamsvermelding en citeer de oorspronkelijke auteurs van datasets en papers", + "share": "Deel uw bijdragen openlijk zodat anderen op uw werk kunnen voortbouwen", + "respect": "Respecteer dataset-licenties en volg hun voorwaarden", + "quality": "Upload hoogwaardige, goed gedocumenteerde data en experimenten", + "feedback": "Geef constructieve feedback om het platform te helpen verbeteren" + } + }, + "usageTerms": { + "title": "Gebruiksregels", + "subtitle": "Regels voor het gebruik van OpenML-diensten", + "intro": "Door OpenML te gebruiken, gaat u akkoord met de volgende voorwaarden:", + "items": { + "free": "OpenML is gratis te gebruiken voor onderzoek, onderwijs en niet-commerciële doeleinden", + "api": "API-gebruik moet redelijke snelheidslimieten volgen om eerlijke toegang voor alle gebruikers te garanderen", + "abuse": "Geautomatiseerd scrapen of misbruik van diensten kan leiden tot toegangsbeperkingen", + "warranty": "Data en diensten worden geleverd \"zoals ze zijn\" zonder enige garantie" + } + }, + "privacy": { + "title": "Privacybeleid", + "subtitle": "Hoe wij met uw gegevens omgaan", + "intro": "Wij nemen uw privacy serieus. Zo gaan wij om met uw informatie:", + "items": { + "collect": "We verzamelen minimale persoonlijke informatie die nodig is om onze diensten te leveren", + "usage": "Gebruiksgegevens helpen ons OpenML te verbeteren en te begrijpen hoe het wordt gebruikt", + "share": "Wij verkopen of delen uw persoonlijke informatie niet met derden", + "cookies": "Wij gebruiken cookies voor authenticatie en om uw ervaring te verbeteren" + } + } + }, + "contact": { + "title": "Vragen?", + "description": "Als u vragen heeft over licenties, citatie of gebruiksvoorwaarden, neem dan contact met ons op.", + "button": "Contact OpenML Team" + } + } + }, + "dashboard": { + "meta": { + "title": "Dashboard - OpenML", + "description": "Uw persoonlijke OpenML dashboard. Volg uw bijdragen, reputatie en impact op machine learning onderzoek." + }, + "welcome": "Welkom, {name}!", + "subtitle": "OpenML is de plek om datasets, workflows te delen en samen te werken aan machine learning onderzoek.", + "signOut": "Uitloggen", + "loading": "Laden...", + "stats": { + "reputation": "REPUTATIE", + "researchImpact": "onderzoeksimpact score", + "downloads": "Downloads", + "citations": "Citaties", + "flowReuses": "Flow Hergebruik", + "discussions": "Discussies", + "publicActivity": "PUBLIEKE ACTIVITEIT", + "activeDays": "{count} actieve dagen deze week", + "totalContributions": "TOTALE BIJDRAGEN", + "total": "totale bijdragen" + }, + "contributions": { + "datasets": "Datasets", + "flows": "Flows", + "runs": "Runs", + "created": "gemaakt", + "experiments": "experimenten", + "inPublications": "in publicaties", + "reusesByOthers": "{count} keer hergebruikt door anderen" + }, + "topContributions": { + "title": "Uw Top Bijdragen", + "mostDownloaded": "Meest Gedownloade Dataset", + "mostReused": "Meest Hergebruikte Flow", + "downloads": "downloads", + "reuses": "hergebruik" + }, + "focus": { + "title": "Hoe te beginnen: Kies een focus voor vandaag", + "subtitle": "Help ons relevante suggesties voor u te maken", + "datasets": { + "title": "Datasets", + "description": "Verken en deel datasets" + }, + "tasks": { + "title": "Taken", + "description": "Definieer ML problemen en benchmarks" + }, + "flows": { + "title": "Flows", + "description": "Deel ML workflows en modellen" + } + }, + "hideStats": "Statistieken verbergen" + }, + "auth": { + "signIn": { + "title": "Inloggen - OpenML", + "description": "Log in op uw OpenML-account", + "welcome": "Welkom bij OpenML", + "subtitle": "Log in op uw account of maak een nieuwe aan", + "continueWithGithub": "Doorgaan met GitHub", + "continueWithGoogle": "Doorgaan met Google", + "orContinueWith": "Of ga verder met", + "emailLabel": "E-mail of gebruikersnaam", + "emailPlaceholder": "Voer uw e-mail of gebruikersnaam in", + "passwordLabel": "Wachtwoord", + "passwordPlaceholder": "Voer uw wachtwoord in", + "signInButton": "Inloggen", + "signingIn": "Inloggen...", + "forgotPassword": "Wachtwoord vergeten?", + "noAccount": "Heeft u geen account?", + "signUpLink": "Registreren", + "invalidCredentials": "Ongeldige e-mail of wachtwoord", + "error": "Er is een fout opgetreden. Probeer het opnieuw.", + "oauthError": "Authenticatie mislukt. Probeer het opnieuw." + } + }, + "dataset": { + "header": { + "uploadedOn": "Geüpload op {date}", + "by": "door", + "active": "Actief", + "deactivated": "Gedeactiveerd", + "inPreparation": "In Voorbereiding" + }, + "stats": { + "instances": "Instanties", + "features": "Kenmerken", + "classes": "Klassen", + "missing": "Ontbrekend", + "tasks": "Taken", + "runs": "Runs", + "downloads": "Downloads", + "likes": "Likes" + }, + "actions": { + "download": "Downloaden", + "downloadDataset": "Dataset Downloaden", + "originalFile": "Origineel ARFF/CSV bestand", + "showCode": "Code Tonen", + "codeSnippets": "Python, R, Julia, cURL", + "quickCopy": "Snel Kopiëren", + "like": "Like", + "bookmark": "Bladwijzer", + "bookmarked": "Opgeslagen", + "addToCollection": "Toevoegen aan Collectie", + "share": "Delen", + "copyLink": "Link Kopiëren", + "linkCopied": "Link Gekopieerd!", + "openNotebook": "Openen in Notebook", + "reportIssue": "Probleem Melden" + }, + "codeDialog": { + "title": "Dataset Laden: {name}", + "description": "Gebruik deze codefragmenten om deze dataset te laden in uw favoriete programmeertaal", + "copy": "Kopiëren", + "copied": "Gekopieerd!", + "installation": "Installatie" + }, + "tabs": { + "dataDetail": "Data Details", + "analysis": "Analyse", + "tasks": "Taken", + "runs": "Runs" + }, + "description": { + "showMore": "Meer Tonen", + "showLess": "Minder Tonen", + "originalSource": "Originele Bron", + "relatedPaper": "Gerelateerd Paper" + }, + "features": { + "title": "Kenmerken", + "description": "Gedetailleerde informatie over elk attribuut in de dataset", + "searchPlaceholder": "Zoek kenmerken...", + "filterTypes": "Filter Types", + "showAll": "Toon Alle {count} Kenmerken", + "showLess": "Minder Tonen", + "noMatch": "Geen kenmerken gevonden", + "target": "Doel", + "distinct": "Uniek", + "missing": "Ontbrekend", + "statistics": "Statistieken", + "type": "Type", + "featureName": "Kenmerknaam", + "types": { + "numeric": "Numeriek", + "nominal": "Nominaal", + "string": "String", + "date": "Datum" + }, + "stats": { + "minimum": "Minimum", + "maximum": "Maximum", + "mean": "Gemiddelde", + "stdDev": "Std Afwijking", + "distinctValues": "Unieke Waarden", + "missingValues": "Ontbrekende Waarden" + }, + "valueDistribution": "Waarde Verdeling" + }, + "information": { + "title": "Dataset Informatie", + "description": "Technische details en metadata" + }, + "citation": { + "title": "Citatie", + "description": "Hoe deze dataset te citeren in academisch werk", + "copy": "Citatie Kopiëren" + }, + "analysis": { + "title": "Data Visualisaties", + "description": "Visuele verkenning van de dataset", + "comingSoon": "Visualisaties Binnenkort Beschikbaar", + "comingSoonDesc": "Kenmerk distributies, correlaties en datakwaliteitsmetrieken worden hier weergegeven.", + "classBalance": "Klasse Balans", + "classBalanceDesc": "Verdeling van doelklassen", + "missingValues": "Ontbrekende Waarden", + "missingValuesDesc": "Data volledigheid", + "dimensionality": "Dimensionaliteit", + "dimensionalityDesc": "Kenmerken per instantie" + }, + "tasks": { + "title": "Gerelateerde Taken", + "description": "Machine learning taken gedefinieerd op deze dataset", + "available": "{count} taak/taken beschikbaar op deze dataset", + "viewAll": "Bekijk alle taken", + "noTasks": "Er zijn nog geen taken gedefinieerd", + "createTask": "Taak Aanmaken" + }, + "runs": { + "title": "ML Runs", + "description": "Machine learning experimenten op deze dataset", + "recorded": "{count} run(s) geregistreerd op deze dataset", + "viewAll": "Bekijk alle runs", + "noRuns": "Er zijn nog geen runs geregistreerd", + "runExperiment": "Experiment Uitvoeren", + "bestAccuracy": "Beste Nauwkeurigheid", + "topFlows": "Top Flows", + "leaderboardComingSoon": "Ranglijst binnenkort beschikbaar...", + "bestAlgorithms": "Best presterende algoritmes..." + }, + "collection": { + "dialogTitle": "Toevoegen aan Collectie", + "dialogDescription": "Voeg \"{name}\" toe aan een van uw collecties of maak een nieuwe.", + "signInPrompt": "Log in om datasets aan uw collecties toe te voegen", + "createNew": "Nieuwe Collectie Aanmaken", + "cancel": "Annuleren" + }, + "report": { + "dialogTitle": "Probleem Melden", + "dialogDescription": "Help ons OpenML te verbeteren door problemen met deze dataset te melden.", + "issueType": "Probleem Type", + "selectType": "Selecteer een probleem type...", + "types": { + "incorrectData": "Onjuiste of corrupte data", + "missingMetadata": "Ontbrekende of verkeerde metadata", + "duplicate": "Dubbele dataset", + "license": "Licentie overtreding", + "privacy": "Privacy probleem", + "other": "Anders" + }, + "descriptionLabel": "Beschrijving", + "descriptionPlaceholder": "Beschrijf het probleem in detail...", + "emailLabel": "Uw E-mail (optioneel)", + "emailPlaceholder": "email@voorbeeld.com", + "emailHint": "We gebruiken dit om indien nodig contact op te nemen", + "cancel": "Annuleren", + "submit": "Rapport Versturen" + }, + "qualities": { + "title": "Dataset Kwaliteiten", + "description": "Meta-features en statistische metingen", + "searchPlaceholder": "Zoek kwaliteiten...", + "categories": { + "counts": "Tellingen", + "statistics": "Statistieken", + "informationTheory": "Informatietheorie", + "ratios": "Verhoudingen", + "other": "Anders" + } + }, + "deactivated": { + "title": "Dataset Gedeactiveerd", + "message": "Deze dataset is gedeactiveerd en niet meer beschikbaar." + } } } diff --git a/app-next/next.config.ts b/app-next/next.config.ts index 5263f8ef..d6491210 100644 --- a/app-next/next.config.ts +++ b/app-next/next.config.ts @@ -4,15 +4,89 @@ import createNextIntlPlugin from "next-intl/plugin"; const withNextIntl = createNextIntlPlugin("./src/i18n.ts"); const nextConfig: NextConfig = { + // Vercel-specific optimizations + output: "standalone", // Optimize for Vercel deployment + + // Enable WebAssembly support for parquet-wasm + experimental: { + serverActions: { + bodySizeLimit: "10mb", + }, + }, + + // Configure webpack to handle WASM files + webpack: (config, { isServer }) => { + // Enable WebAssembly + config.experiments = { + ...config.experiments, + asyncWebAssembly: true, + }; + + // Add rule for WASM files + config.module.rules.push({ + test: /\.wasm$/, + type: "webassembly/async", + }); + + // Fix for WASM file resolution + if (!isServer) { + config.resolve.fallback = { + ...config.resolve.fallback, + fs: false, + path: false, + }; + } + + return config; + }, + + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "www.openml.org", + port: "", + pathname: "/**", // Allow all paths for profile images + }, + { + protocol: "http", + hostname: "www.openml.org", + port: "", + pathname: "/**", // Some avatar URLs use http (legacy) + }, + { + protocol: "https", + hostname: "avatars.githubusercontent.com", + port: "", + pathname: "/**", // GitHub profile avatars + }, + { + protocol: "https", + hostname: "lh3.googleusercontent.com", + port: "", + pathname: "/**", // Google user avatars + }, + { + protocol: "https", + hostname: "avatars.githubusercontent.com", + port: "", + pathname: "/**", // GitHub user avatars + }, + { + protocol: "https", + hostname: "live.staticflickr.com", + pathname: "/**", + }, + ], + // Vercel automatically optimizes images + formats: ["image/avif", "image/webp"], + }, + // Built-in 301 redirects for backward compatibility // Academic papers and external links often cite OpenML entities using short URLs + // Entity detail pages: /d/123 → /datasets/123 (no locale prefix for English) async redirects() { return [ - // ======================================== - // SIMPLE PATH-BASED REDIRECTS (✅ Works in next.config.ts) - // ======================================== - - // Entity detail pages: /d/123 → /datasets/123 (no locale prefix for English) { source: "/d/:id", destination: "/datasets/:id", @@ -45,7 +119,6 @@ const nextConfig: NextConfig = { destination: "/collections/:id", permanent: true, }, - // Search page redirects: /d/search → /datasets { source: "/d/search", @@ -67,29 +140,6 @@ const nextConfig: NextConfig = { destination: "/runs", permanent: true, }, - - // ======================================== - // QUERY-BASED REDIRECTS (❌ Cannot be done here) - // ======================================== - // These URLs require middleware because they have query parameters - // that need to be parsed and transformed: - // - // /search?type=data&id=1464 → /datasets/1464 (English) - // /search?type=task → /tasks - // /search?type=flow → /flows - // /search?type=run → /runs - // /search?type=study&id=123 → /collections/123 - // /search?type=study&study_type=task → /collections/tasks - // /search?type=study&study_type=run → /collections/runs - // /search?type=benchmark&id=383 → /benchmarks/383 - // /search?type=benchmark&study_type=task → /benchmarks/tasks - // /search?type=benchmark&study_type=run → /benchmarks/runs - // /search?type=task_type → /task-types - // /search?type=measure&measure_type=data_quality → /measures/data-qualities - // /search?type=measure&measure_type=evaluation_measure → /measures/evaluation-measures - // /search?type=measure&measure_type=estimation_procedure → /measures/estimation-procedures - // - // Solution: Create src/middleware.ts (see implementation) ]; }, }; diff --git a/app-next/package-lock.json b/app-next/package-lock.json index ecb4d084..b91c0566 100644 --- a/app-next/package-lock.json +++ b/app-next/package-lock.json @@ -11,36 +11,49 @@ "dependencies": { "@elastic/react-search-ui": "^1.24.2", "@elastic/search-ui-elasticsearch-connector": "^1.24.2", + "@fortawesome/fontawesome-svg-core": "^7.1.0", + "@fortawesome/free-brands-svg-icons": "^7.1.0", "@fortawesome/free-solid-svg-icons": "^7.1.0", - "@fortawesome/react-fontawesome": "^3.1.0", + "@fortawesome/react-fontawesome": "^3.1.1", "@hookform/resolvers": "^5.2.2", "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-avatar": "^1.1.11", "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toast": "^1.2.15", "@radix-ui/react-toggle": "^1.1.10", "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@tanstack/react-query": "^5.90.10", + "@vercel/blob": "^2.0.0", + "apache-arrow": "^21.1.0", "axios": "^1.13.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "lucide-react": "^0.554.0", - "next": "16.0.3", + "next": "^16.0.10", + "next-auth": "^4.24.13", "next-intl": "^4.5.8", "next-themes": "^0.4.6", + "parquet-wasm": "^0.7.1", + "plotly.js": "^3.3.1", "react": "19.2.0", "react-dom": "19.2.0", "react-hook-form": "^7.66.1", + "react-icons": "^5.5.0", "react-markdown": "^10.1.0", + "react-plotly.js": "^2.6.0", "recharts": "^3.4.1", "tailwind-merge": "^3.4.0", "zod": "^4.1.12" @@ -52,6 +65,7 @@ "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "16.0.3", + "next-unused": "^0.0.6", "prettier": "^3.6.2", "prettier-plugin-tailwindcss": "^0.7.1", "tailwindcss": "^4", @@ -102,7 +116,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -312,6 +325,24 @@ "node": ">=6.9.0" } }, + "node_modules/@choojs/findup": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", + "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "license": "MIT", + "dependencies": { + "commander": "^2.15.1" + }, + "bin": { + "findup": "bin/findup.js" + } + }, + "node_modules/@choojs/findup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, "node_modules/@elastic/elasticsearch": { "version": "8.19.1", "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.19.1.tgz", @@ -684,6 +715,15 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/@floating-ui/core": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", @@ -796,7 +836,18 @@ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.1.0.tgz", "integrity": "sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==", "license": "MIT", - "peer": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-7.1.0.tgz", + "integrity": "sha512-9byUd9bgNfthsZAjBl6GxOu1VPHgBuRUP9juI7ZoM98h8xNPTCTagfwUFyYscdZq4Hr7gD1azMfM9s5tIWKZZA==", + "license": "(CC-BY-4.0 AND MIT)", "dependencies": { "@fortawesome/fontawesome-common-types": "7.1.0" }, @@ -817,9 +868,9 @@ } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.1.0.tgz", - "integrity": "sha512-5OUQH9aDH/xHJwnpD4J7oEdGvFGJgYnGe0UebaPIdMW9UxYC/f5jv2VjVEgnikdJN0HL8yQxp9Nq+7gqGZpIIA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.1.1.tgz", + "integrity": "sha512-EDllr9hpodc21odmUywHS1alXNiCd4E8sp5GJ5s7wYINz8vSmMiNWpALTiuYODb865YyQ/NlyiN4mbXp7HCNqg==", "license": "MIT", "engines": { "node": ">=20" @@ -1401,6 +1452,110 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==", + "license": "ISC" + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "license": "BSD-3-Clause", + "peerDependencies": { + "mapbox-gl": ">=0.32.1 <2.0.0" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -1415,9 +1570,9 @@ } }, "node_modules/@next/env": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.3.tgz", - "integrity": "sha512-IqgtY5Vwsm14mm/nmQaRMmywCU+yyMIYfk3/MHZ2ZTJvwVbBn3usZnjMi1GacrMVzVcAxJShTCpZlPs26EdEjQ==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.10.tgz", + "integrity": "sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -1431,9 +1586,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.3.tgz", - "integrity": "sha512-MOnbd92+OByu0p6QBAzq1ahVWzF6nyfiH07dQDez4/Nku7G249NjxDVyEfVhz8WkLiOEU+KFVnqtgcsfP2nLXg==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.10.tgz", + "integrity": "sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==", "cpu": [ "arm64" ], @@ -1447,9 +1602,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.3.tgz", - "integrity": "sha512-i70C4O1VmbTivYdRlk+5lj9xRc2BlK3oUikt3yJeHT1unL4LsNtN7UiOhVanFdc7vDAgZn1tV/9mQwMkWOJvHg==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.10.tgz", + "integrity": "sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==", "cpu": [ "x64" ], @@ -1463,9 +1618,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.3.tgz", - "integrity": "sha512-O88gCZ95sScwD00mn/AtalyCoykhhlokxH/wi1huFK+rmiP5LAYVs/i2ruk7xST6SuXN4NI5y4Xf5vepb2jf6A==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.10.tgz", + "integrity": "sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==", "cpu": [ "arm64" ], @@ -1479,9 +1634,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.3.tgz", - "integrity": "sha512-CEErFt78S/zYXzFIiv18iQCbRbLgBluS8z1TNDQoyPi8/Jr5qhR3e8XHAIxVxPBjDbEMITprqELVc5KTfFj0gg==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.10.tgz", + "integrity": "sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==", "cpu": [ "arm64" ], @@ -1495,9 +1650,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.3.tgz", - "integrity": "sha512-Tc3i+nwt6mQ+Dwzcri/WNDj56iWdycGVh5YwwklleClzPzz7UpfaMw1ci7bLl6GRYMXhWDBfe707EXNjKtiswQ==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.10.tgz", + "integrity": "sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==", "cpu": [ "x64" ], @@ -1511,9 +1666,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.3.tgz", - "integrity": "sha512-zTh03Z/5PBBPdTurgEtr6nY0vI9KR9Ifp/jZCcHlODzwVOEKcKRBtQIGrkc7izFgOMuXDEJBmirwpGqdM/ZixA==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.10.tgz", + "integrity": "sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==", "cpu": [ "x64" ], @@ -1527,9 +1682,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.3.tgz", - "integrity": "sha512-Jc1EHxtZovcJcg5zU43X3tuqzl/sS+CmLgjRP28ZT4vk869Ncm2NoF8qSTaL99gh6uOzgM99Shct06pSO6kA6g==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.10.tgz", + "integrity": "sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==", "cpu": [ "arm64" ], @@ -1543,9 +1698,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.3.tgz", - "integrity": "sha512-N7EJ6zbxgIYpI/sWNzpVKRMbfEGgsWuOIvzkML7wxAAZhPk1Msxuo/JDu1PKjWGrAoOLaZcIX5s+/pF5LIbBBg==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.10.tgz", + "integrity": "sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==", "cpu": [ "x64" ], @@ -1611,7 +1766,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -1640,6 +1794,143 @@ "node": ">=14" } }, + "node_modules/@panva/hkdf": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", + "integrity": "sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@plotly/d3": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz", + "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==", + "license": "BSD-3-Clause" + }, + "node_modules/@plotly/d3-sankey": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", + "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } + }, + "node_modules/@plotly/d3-sankey-circular": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", + "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", + "license": "MIT", + "dependencies": { + "d3-array": "^1.2.1", + "d3-collection": "^1.0.4", + "d3-shape": "^1.2.0", + "elementary-circuits-directed-graph": "^1.0.4" + } + }, + "node_modules/@plotly/d3-sankey-circular/node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause" + }, + "node_modules/@plotly/d3-sankey-circular/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/@plotly/d3-sankey-circular/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/@plotly/d3-sankey/node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause" + }, + "node_modules/@plotly/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/@plotly/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/@plotly/mapbox-gl": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz", + "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==", + "license": "SEE LICENSE IN LICENSE.txt", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/@plotly/point-cluster": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", + "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", + "license": "MIT", + "dependencies": { + "array-bounds": "^1.0.1", + "binary-search-bounds": "^2.0.4", + "clamp": "^1.0.1", + "defined": "^1.0.0", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.2", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/@plotly/regl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", + "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==", + "license": "MIT" + }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -1739,6 +2030,90 @@ } } }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -2473,6 +2848,29 @@ } } }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-menu": { "version": "2.1.16", "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", @@ -3262,15 +3660,24 @@ } } }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -3287,19 +3694,100 @@ } } }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", - "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -4307,6 +4795,77 @@ "react": "^18 || ^19" } }, + "node_modules/@turf/area": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.3.1.tgz", + "integrity": "sha512-9nSiwt4zB5QDMcSoTxF28WpK1f741MNKcpUJDiHVRX08CZ4qfGWGV9ZIPQ8TVEn5RE4LyYkFuQ47Z9pdEUZE9Q==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.1.tgz", + "integrity": "sha512-/IyMKoS7P9B0ch5PIlQ6gMfoE8gRr48+cSbzlyexvEjuDuaAV1VURjH1jAthS0ipFG8RrFxFJKnp7TLL1Skong==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/centroid": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.3.1.tgz", + "integrity": "sha512-hRnsDdVBH4pX9mAjYympb2q5W8TCMUMNEjcRrAF7HTCyjIuRmjJf8vUtlzf7TTn9RXbsvPc1vtm3kLw20Jm8DQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -4417,6 +4976,21 @@ "@types/estree": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -4439,6 +5013,23 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", @@ -4470,12 +5061,17 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "license": "MIT" }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT" + }, "node_modules/@types/react": { "version": "19.2.7", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -4486,7 +5082,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -4500,6 +5095,15 @@ "@types/react": "*" } }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -4558,7 +5162,6 @@ "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.0", "@typescript-eslint/types": "8.48.0", @@ -5058,12 +5661,45 @@ "win32" ] }, + "node_modules/@vercel/blob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-2.0.0.tgz", + "integrity": "sha512-oAj7Pdy83YKSwIaMFoM7zFeLYWRc+qUpW3PiDSblxQMnGFb43qs4bmfq7dr/+JIfwhs6PTwe1o2YBwKhyjWxXw==", + "license": "Apache-2.0", + "dependencies": { + "async-retry": "^1.3.3", + "is-buffer": "^2.0.5", + "is-node-process": "^1.2.0", + "throttleit": "^2.1.0", + "undici": "^5.28.4" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@vercel/blob/node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==", + "license": "MIT" + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5096,6 +5732,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5146,6 +5792,13 @@ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5183,6 +5836,12 @@ "node": ">=12.17" } }, + "node_modules/array-bounds": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", + "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==", + "license": "MIT" + }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", @@ -5200,6 +5859,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-includes": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", @@ -5223,6 +5891,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-normalize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", + "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", + "license": "MIT", + "dependencies": { + "array-bounds": "^1.0.0" + } + }, + "node_modules/array-range": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", + "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==", + "license": "MIT" + }, + "node_modules/array-rearrange": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/array-rearrange/-/array-rearrange-2.2.2.tgz", + "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -5343,6 +6042,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -5360,6 +6069,15 @@ "node": ">= 0.4" } }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5444,6 +6162,36 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/baseline-browser-mapping": { "version": "2.8.31", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", @@ -5454,6 +6202,46 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-search-bounds": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==", + "license": "MIT" + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==", + "license": "MIT" + }, + "node_modules/bitmap-sdf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==", + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -5497,7 +6285,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -5512,11 +6299,42 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -5588,6 +6406,15 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canvas-fit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/canvas-fit/-/canvas-fit-1.5.0.tgz", + "integrity": "sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==", + "license": "MIT", + "dependencies": { + "element-size": "^1.1.1" + } + }, "node_modules/ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", @@ -5669,6 +6496,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==", + "license": "MIT" + }, "node_modules/class-variance-authority": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", @@ -5687,12 +6520,48 @@ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", "license": "MIT" }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -5718,6 +6587,24 @@ "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, + "node_modules/color-alpha": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", + "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", + "license": "MIT", + "dependencies": { + "color-parse": "^1.3.8" + } + }, + "node_modules/color-alpha/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5730,12 +6617,76 @@ "node": ">=7.0.0" } }, + "node_modules/color-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", + "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", + "license": "MIT", + "dependencies": { + "clamp": "^1.0.1" + } + }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/color-normalize": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", + "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", + "license": "MIT", + "dependencies": { + "clamp": "^1.0.1", + "color-rgba": "^2.1.1", + "dtype": "^2.0.0" + } + }, + "node_modules/color-normalize/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-normalize/node_modules/color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "license": "MIT", + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/color-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.0.tgz", + "integrity": "sha512-g2Z+QnWsdHLppAbrpcFWo629kLOnOPtpxYV69GCqm92gqSgyXbzlfyN3MXs0412fPBkFmiuS+rXposgBgBa6Kg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-rgba": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", + "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", + "license": "MIT", + "dependencies": { + "color-parse": "^2.0.0", + "color-space": "^2.0.0" + } + }, + "node_modules/color-space": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.3.2.tgz", + "integrity": "sha512-BcKnbOEsOarCwyoLstcoEztwT0IJxqqQkNwDuA3a65sICvvHL2yoeV13psoDFh5IuiOMnIOKdQDwB4Mk3BypiA==", + "license": "Unlicense" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5796,6 +6747,23 @@ "node": ">=12.20.0" } }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", @@ -5808,6 +6776,57 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -5815,6 +6834,21 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -5831,6 +6865,12 @@ "node": ">=10" } }, + "node_modules/country-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", + "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5845,12 +6885,84 @@ "node": ">= 8" } }, + "node_modules/css-font": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", + "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", + "license": "MIT", + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "pick-by-alias": "^1.2.0", + "string-split-by": "^1.0.0", + "unquote": "^1.1.0" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==", + "license": "MIT" + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==", + "license": "MIT" + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==", + "license": "MIT" + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==", + "license": "MIT" + }, + "node_modules/css-global-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", + "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==", + "license": "MIT" + }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==", + "license": "MIT" + }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT" + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/d3-array": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", @@ -5863,6 +6975,12 @@ "node": ">=12" } }, + "node_modules/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "license": "BSD-3-Clause" + }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", @@ -5872,6 +6990,12 @@ "node": ">=12" } }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "license": "BSD-3-Clause" + }, "node_modules/d3-ease": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", @@ -5881,6 +7005,24 @@ "node": ">=12" } }, + "node_modules/d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-force/node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "license": "BSD-3-Clause" + }, "node_modules/d3-format": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", @@ -5890,6 +7032,58 @@ "node": ">=12" } }, + "node_modules/d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-geo-projection": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", + "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "2", + "d3-array": "1", + "d3-geo": "^1.12.0", + "resolve": "^1.1.10" + }, + "bin": { + "geo2svg": "bin/geo2svg", + "geograticule": "bin/geograticule", + "geoproject": "bin/geoproject", + "geoquantize": "bin/geoquantize", + "geostitch": "bin/geostitch" + } + }, + "node_modules/d3-geo-projection/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/d3-geo-projection/node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-geo/node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "license": "BSD-3-Clause" + }, "node_modules/d3-interpolate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", @@ -5911,6 +7105,12 @@ "node": ">=12" } }, + "node_modules/d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "license": "BSD-3-Clause" + }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", @@ -6101,12 +7301,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "license": "MIT" }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -6141,6 +7364,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6150,31 +7382,338 @@ "node": ">=0.4.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/dependency-tree": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-8.1.2.tgz", + "integrity": "sha512-c4CL1IKxkKng0oT5xrg4uNiiMVFqTGOXqHSFx7XEFdgSsp6nw3AGGruICppzJUrfad/r7GLqt26rmWU4h4j39A==", + "dev": true, "license": "MIT", + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "filing-cabinet": "^3.0.1", + "precinct": "^8.0.0", + "typescript": "^3.9.7" + }, + "bin": { + "dependency-tree": "bin/cli.js" + }, "engines": { - "node": ">=6" + "node": "^10.13 || ^12 || >=14" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "devOptional": true, - "license": "Apache-2.0", + "node_modules/dependency-tree/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dependency-tree/node_modules/precinct": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", + "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.3", + "detective-amd": "^3.1.0", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.1", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + }, + "bin": { + "precinct": "bin/cli.js" + }, "engines": { - "node": ">=8" + "node": "^10.13 || ^12 || >=14" } }, - "node_modules/detect-node-es": { + "node_modules/dependency-tree/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-kerning": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", + "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, + "node_modules/detective-amd": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz", + "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-module-types": "^3.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^3.0.0", + "node-source-walk": "^4.2.0" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-cjs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz", + "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-es6": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz", + "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-less": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-postcss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", + "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.1", + "is-url": "^1.2.4", + "postcss": "^8.1.7", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/detective-sass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz", + "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-scss": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz", + "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-stylus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz", + "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/detective-typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz", + "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "^4.33.0", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.10" + }, + "engines": { + "node": "^10.13 || >=12.0.0" + } + }, + "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/detective-typescript/node_modules/ast-module-types": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", + "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", + "dev": true, + "license": "MIT" + }, + "node_modules/detective-typescript/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/detective-typescript/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/detective-typescript/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -6188,6 +7727,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -6232,6 +7784,25 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/draw-svg-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", + "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", + "license": "MIT", + "dependencies": { + "abs-svg-path": "~0.1.1", + "normalize-svg-path": "~0.1.0" + } + }, + "node_modules/dtype": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -6246,6 +7817,66 @@ "node": ">= 0.4" } }, + "node_modules/dup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", + "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==", + "license": "MIT" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, "node_modules/electron-to-chromium": { "version": "1.5.260", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", @@ -6253,6 +7884,21 @@ "dev": true, "license": "ISC" }, + "node_modules/element-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", + "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==", + "license": "MIT" + }, + "node_modules/elementary-circuits-directed-graph": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", + "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", + "license": "MIT", + "dependencies": { + "strongly-connected-components": "^1.0.1" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -6260,6 +7906,25 @@ "dev": true, "license": "MIT" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.18.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", @@ -6274,6 +7939,19 @@ "node": ">=10.13.0" } }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -6466,12 +8144,64 @@ "benchmarks" ] }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6488,12 +8218,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint": { "version": "9.39.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -6679,7 +8439,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -6859,6 +8618,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -6876,6 +8650,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -6928,18 +8715,71 @@ "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6976,6 +8816,15 @@ "node": ">= 6" } }, + "node_modules/fast-isnumeric": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", + "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", + "license": "MIT", + "dependencies": { + "is-string-blank": "^1.0.1" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -7010,6 +8859,55 @@ "node": ">=16.0.0" } }, + "node_modules/filing-cabinet": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", + "integrity": "sha512-renEK4Hh6DUl9Vl22Y3cxBq1yh8oNvbAdXnhih0wVpmea+uyKjC9K4QeRjUaybIiIewdzfum+Fg15ZqJ/GyCaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-module-path": "^2.2.0", + "commander": "^2.20.3", + "debug": "^4.3.3", + "enhanced-resolve": "^5.8.3", + "is-relative-path": "^1.0.2", + "module-definition": "^3.3.1", + "module-lookup-amd": "^7.0.1", + "resolve": "^1.21.0", + "resolve-dependency-path": "^2.0.0", + "sass-lookup": "^3.0.0", + "stylus-lookup": "^3.0.1", + "tsconfig-paths": "^3.10.1", + "typescript": "^3.9.7" + }, + "bin": { + "filing-cabinet": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/filing-cabinet/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/filing-cabinet/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -7087,6 +8985,23 @@ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "license": "ISC" }, + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", + "dev": true, + "license": "MIT" + }, + "node_modules/flatten-vertex-data": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", + "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", + "license": "MIT", + "dependencies": { + "dtype": "^2.0.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", @@ -7107,6 +9022,24 @@ } } }, + "node_modules/font-atlas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", + "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", + "license": "MIT", + "dependencies": { + "css-font": "^1.0.0" + } + }, + "node_modules/font-measure": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", + "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", + "license": "MIT", + "dependencies": { + "css-font": "^1.2.0" + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -7139,6 +9072,59 @@ "node": ">= 6" } }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -7198,6 +9184,32 @@ "node": ">=6.9.0" } }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC" + }, + "node_modules/get-amd-module-type": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz", + "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.2.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/get-canvas-context": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", + "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==", + "license": "MIT" + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -7231,6 +9243,13 @@ "node": ">=6" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -7244,76 +9263,511 @@ "node": ">= 0.4" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gl-mat4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==", + "license": "Zlib" + }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT" + }, + "node_modules/gl-text": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.4.0.tgz", + "integrity": "sha512-o47+XBqLCj1efmuNyCHt7/UEJmB9l66ql7pnobD6p+sgmBUdzfMZXIF0zD2+KRfpd99DJN+QXdvTFAGCKCVSmQ==", + "license": "MIT", + "dependencies": { + "bit-twiddle": "^1.0.2", + "color-normalize": "^1.5.0", + "css-font": "^1.2.0", + "detect-kerning": "^2.1.2", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "font-atlas": "^2.1.0", + "font-measure": "^1.2.2", + "gl-util": "^3.1.2", + "is-plain-obj": "^1.1.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "parse-unit": "^1.0.1", + "pick-by-alias": "^1.2.0", + "regl": "^2.0.0", + "to-px": "^1.0.1", + "typedarray-pool": "^1.1.0" + } + }, + "node_modules/gl-text/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gl-util": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", + "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", + "license": "MIT", + "dependencies": { + "is-browser": "^2.0.1", + "is-firefox": "^1.0.3", + "is-plain-obj": "^1.1.0", + "number-is-integer": "^1.0.1", + "object-assign": "^4.1.0", + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" + } + }, + "node_modules/gl-util/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glsl-inject-defines": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", + "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", + "license": "MIT", + "dependencies": { + "glsl-token-inject-block": "^1.0.0", + "glsl-token-string": "^1.0.1", + "glsl-tokenizer": "^2.0.2" + } + }, + "node_modules/glsl-resolve": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", + "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", + "license": "MIT", + "dependencies": { + "resolve": "^0.6.1", + "xtend": "^2.1.2" + } + }, + "node_modules/glsl-resolve/node_modules/resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", + "license": "MIT" + }, + "node_modules/glsl-resolve/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/glsl-token-assignments": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", + "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", + "license": "MIT" + }, + "node_modules/glsl-token-defines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", + "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", + "license": "MIT", + "dependencies": { + "glsl-tokenizer": "^2.0.0" + } + }, + "node_modules/glsl-token-depth": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", + "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", + "license": "MIT" + }, + "node_modules/glsl-token-descope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", + "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", + "license": "MIT", + "dependencies": { + "glsl-token-assignments": "^2.0.0", + "glsl-token-depth": "^1.1.0", + "glsl-token-properties": "^1.0.0", + "glsl-token-scope": "^1.1.0" + } + }, + "node_modules/glsl-token-inject-block": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", + "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", + "license": "MIT" + }, + "node_modules/glsl-token-properties": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", + "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", + "license": "MIT" + }, + "node_modules/glsl-token-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", + "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", + "license": "MIT" + }, + "node_modules/glsl-token-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", + "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", + "license": "MIT" + }, + "node_modules/glsl-token-whitespace-trim": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", + "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", + "license": "MIT" + }, + "node_modules/glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "license": "MIT", + "dependencies": { + "through2": "^0.6.3" + } + }, + "node_modules/glsl-tokenizer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/glsl-tokenizer/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glsl-tokenizer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/glsl-tokenizer/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/glslify": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", + "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", + "license": "MIT", + "dependencies": { + "bl": "^2.2.1", + "concat-stream": "^1.5.2", + "duplexify": "^3.4.5", + "falafel": "^2.1.0", + "from2": "^2.3.0", + "glsl-resolve": "0.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glslify-bundle": "^5.0.0", + "glslify-deps": "^1.2.5", + "minimist": "^1.2.5", + "resolve": "^1.1.5", + "stack-trace": "0.0.9", + "static-eval": "^2.0.5", + "through2": "^2.0.1", + "xtend": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "glslify": "bin.js" } }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "dev": true, + "node_modules/glslify-bundle": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", + "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", + "license": "MIT", + "dependencies": { + "glsl-inject-defines": "^1.0.1", + "glsl-token-defines": "^1.0.0", + "glsl-token-depth": "^1.1.1", + "glsl-token-descope": "^1.0.2", + "glsl-token-scope": "^1.1.1", + "glsl-token-string": "^1.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glsl-tokenizer": "^2.0.2", + "murmurhash-js": "^1.0.0", + "shallow-copy": "0.0.1" + } + }, + "node_modules/glslify-deps": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", + "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", + "license": "ISC", + "dependencies": { + "@choojs/findup": "^0.2.0", + "events": "^3.2.0", + "glsl-resolve": "0.0.1", + "glsl-tokenizer": "^2.0.0", + "graceful-fs": "^4.1.2", + "inherits": "^2.0.1", + "map-limit": "0.0.1", + "resolve": "^1.0.0" + } + }, + "node_modules/glslify/node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", + "node_modules/glslify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/glslify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/glslify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/glslify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "minimist": "^1.2.5" }, - "engines": { - "node": ">= 0.4" + "bin": { + "gonzales": "bin/gonzales.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.6.0" } }, "node_modules/gopd": { @@ -7332,7 +9786,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -7342,6 +9795,25 @@ "dev": true, "license": "MIT" }, + "node_modules/graphviz": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", + "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "temp": "~0.4.0" + }, + "engines": { + "node": ">=0.6.8" + } + }, + "node_modules/grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "license": "ISC" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -7364,6 +9836,24 @@ "node": ">=8" } }, + "node_modules/has-hover": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", + "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", + "license": "MIT", + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/has-passive-events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", + "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "license": "MIT", + "dependencies": { + "is-browser": "^2.0.1" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -7536,6 +10026,38 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -7580,6 +10102,38 @@ "node": ">=0.8.19" } }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true, + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, "node_modules/inline-style-parser": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", @@ -7739,6 +10293,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==", + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/is-bun-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", @@ -7859,6 +10442,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-firefox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", + "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", @@ -7901,6 +10505,25 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-iexplorer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", + "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -7914,6 +10537,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-mobile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", + "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==", + "license": "MIT" + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -7927,6 +10556,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7954,6 +10589,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -7984,6 +10628,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", + "dev": true, + "license": "MIT" + }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", @@ -8030,6 +10691,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-string-blank": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==", + "license": "MIT" + }, + "node_modules/is-svg-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", + "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==", + "license": "MIT" + }, "node_modules/is-symbol": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", @@ -8064,6 +10737,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -8114,7 +10807,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -8151,6 +10843,15 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8213,6 +10914,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -8242,6 +10949,12 @@ "node": ">=4.0" } }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -8251,6 +10964,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -8545,11 +11267,39 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } }, "node_modules/locate-path": { "version": "6.0.0", @@ -8578,6 +11328,23 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -8619,6 +11386,61 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/madge": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/madge/-/madge-4.0.2.tgz", + "integrity": "sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "commander": "^6.2.1", + "commondir": "^1.0.1", + "debug": "^4.0.1", + "dependency-tree": "^8.0.0", + "detective-amd": "^3.0.1", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.1.0", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "graphviz": "0.0.9", + "ora": "^5.1.0", + "pluralize": "^8.0.0", + "precinct": "^7.0.0", + "pretty-ms": "^7.0.0", + "rc": "^1.2.7", + "typescript": "^3.9.5", + "walkdir": "^0.4.1" + }, + "bin": { + "madge": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/pahen" + } + }, + "node_modules/madge/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -8629,6 +11451,150 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "license": "MIT", + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/map-limit/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/mapbox-gl": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz", + "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/maplibre-gl": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^20.3.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.0", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/@mapbox/tiny-sdf": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz", + "integrity": "sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==", + "license": "BSD-2-Clause" + }, + "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/potpack": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", + "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/maplibre-gl/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -8638,6 +11604,15 @@ "node": ">= 0.4" } }, + "node_modules/math-log2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", + "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", @@ -8797,6 +11772,60 @@ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", "license": "MIT" }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -9284,6 +12313,16 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -9300,18 +12339,99 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/module-definition": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", + "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/module-lookup-amd": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", + "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0", + "glob": "^7.1.6", + "requirejs": "^2.3.5", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/module-lookup-amd/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/mouse-change": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", + "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==", + "license": "MIT", + "dependencies": { + "mouse-event": "^1.0.0" + } + }, + "node_modules/mouse-event": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", + "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==", + "license": "MIT" + }, + "node_modules/mouse-event-offset": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", + "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==", + "license": "MIT" + }, + "node_modules/mouse-wheel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", + "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==", + "license": "MIT", + "dependencies": { + "right-now": "^1.0.0", + "signum": "^1.0.0", + "to-px": "^1.0.1" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -9346,12 +12466,44 @@ "url": "https://opencollective.com/napi-postinstall" } }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "license": "MIT" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "license": "MIT" }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -9362,12 +12514,12 @@ } }, "node_modules/next": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-16.0.3.tgz", - "integrity": "sha512-Ka0/iNBblPFcIubTA1Jjh6gvwqfjrGq1Y2MTI5lbjeLIAfmC+p5bQmojpRZqgHHVu5cG4+qdIiwXiBSm/8lZ3w==", + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/next/-/next-16.0.10.tgz", + "integrity": "sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==", "license": "MIT", "dependencies": { - "@next/env": "16.0.3", + "@next/env": "16.0.10", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -9380,14 +12532,14 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.0.3", - "@next/swc-darwin-x64": "16.0.3", - "@next/swc-linux-arm64-gnu": "16.0.3", - "@next/swc-linux-arm64-musl": "16.0.3", - "@next/swc-linux-x64-gnu": "16.0.3", - "@next/swc-linux-x64-musl": "16.0.3", - "@next/swc-win32-arm64-msvc": "16.0.3", - "@next/swc-win32-x64-msvc": "16.0.3", + "@next/swc-darwin-arm64": "16.0.10", + "@next/swc-darwin-x64": "16.0.10", + "@next/swc-linux-arm64-gnu": "16.0.10", + "@next/swc-linux-arm64-musl": "16.0.10", + "@next/swc-linux-x64-gnu": "16.0.10", + "@next/swc-linux-x64-musl": "16.0.10", + "@next/swc-win32-arm64-msvc": "16.0.10", + "@next/swc-win32-x64-msvc": "16.0.10", "sharp": "^0.34.4" }, "peerDependencies": { @@ -9413,6 +12565,38 @@ } } }, + "node_modules/next-auth": { + "version": "4.24.13", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.13.tgz", + "integrity": "sha512-sgObCfcfL7BzIK76SS5TnQtc3yo2Oifp/yIpfv6fMfeBOiBJkDWF3A2y9+yqnmJ4JKc2C+nMjSjmgDeTwgN1rQ==", + "license": "ISC", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@panva/hkdf": "^1.0.2", + "cookie": "^0.7.0", + "jose": "^4.15.5", + "oauth": "^0.9.15", + "openid-client": "^5.4.0", + "preact": "^10.6.3", + "preact-render-to-string": "^5.1.19", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "@auth/core": "0.34.3", + "next": "^12.2.5 || ^13 || ^14 || ^15 || ^16", + "nodemailer": "^7.0.7", + "react": "^17.0.2 || ^18 || ^19", + "react-dom": "^17.0.2 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@auth/core": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, "node_modules/next-intl": { "version": "4.5.8", "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.5.8.tgz", @@ -9459,6 +12643,41 @@ "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/next-unused": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/next-unused/-/next-unused-0.0.6.tgz", + "integrity": "sha512-dHFNNBanFq4wvYrULtsjfWyZ6BzOnr5VYI9EYMGAZYF2vkAhFpj2JOuT5Wu2o3LbFSG92PmAZnSUF/LstF82pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "madge": "^4.0.1", + "ts-loader": "^7.0.0", + "typescript": "^4.2.3" + }, + "bin": { + "next-unused": "index.js" + } + }, + "node_modules/next-unused/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/next/node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -9488,19 +12707,56 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/normalize-svg-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", + "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==", + "license": "MIT" + }, + "node_modules/number-is-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", + "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.1" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=0.10.0" } }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==", "license": "MIT" }, "node_modules/object-assign": { @@ -9512,6 +12768,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -9639,6 +12904,73 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/oidc-token-hash": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz", + "integrity": "sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.7.1.tgz", + "integrity": "sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==", + "license": "MIT", + "dependencies": { + "jose": "^4.15.9", + "lru-cache": "^6.0.0", + "object-hash": "^2.2.0", + "oidc-token-hash": "^5.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/openid-client/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -9656,6 +12988,30 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -9716,6 +13072,18 @@ "node": ">=6" } }, + "node_modules/parenthesis": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==", + "license": "MIT" + }, + "node_modules/parquet-wasm": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/parquet-wasm/-/parquet-wasm-0.7.1.tgz", + "integrity": "sha512-fjEGpMApzt3mpI2pUxdRgQGu5G+s4nr0vm5xn43JO7jxdYzzu2fHrVrTHtfeEhtB6vfvTzJBz0WydDYzLWvszQ==", + "license": "MIT OR Apache-2.0" + }, "node_modules/parse-entities": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", @@ -9759,6 +13127,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", + "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", + "license": "MIT", + "dependencies": { + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", + "license": "MIT" + }, + "node_modules/parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9768,6 +13167,16 @@ "node": ">=8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -9792,6 +13201,31 @@ "node": ">=8" } }, + "node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/pick-by-alias": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", + "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -9811,12 +13245,116 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/plotly.js": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-3.3.1.tgz", + "integrity": "sha512-SrGSZ02HvCWQIYsbQX4sgjgGo7k4T+Oz8a+RQwE5Caz+yu1vputBM1UThmiOPY51B5HzO9ajym8Rl4pmLj+i9Q==", + "license": "MIT", + "dependencies": { + "@plotly/d3": "3.8.2", + "@plotly/d3-sankey": "0.7.2", + "@plotly/d3-sankey-circular": "0.33.1", + "@plotly/mapbox-gl": "1.13.4", + "@plotly/regl": "^2.1.2", + "@turf/area": "^7.1.0", + "@turf/bbox": "^7.1.0", + "@turf/centroid": "^7.1.0", + "base64-arraybuffer": "^1.0.2", + "canvas-fit": "^1.5.0", + "color-alpha": "1.0.4", + "color-normalize": "1.5.0", + "color-parse": "2.0.0", + "color-rgba": "3.0.0", + "country-regex": "^1.1.0", + "d3-force": "^1.2.1", + "d3-format": "^1.4.5", + "d3-geo": "^1.12.1", + "d3-geo-projection": "^2.9.0", + "d3-hierarchy": "^1.1.9", + "d3-interpolate": "^3.0.1", + "d3-time": "^1.1.0", + "d3-time-format": "^2.2.3", + "fast-isnumeric": "^1.1.4", + "gl-mat4": "^1.2.0", + "gl-text": "^1.4.0", + "has-hover": "^1.0.1", + "has-passive-events": "^1.0.0", + "is-mobile": "^4.0.0", + "maplibre-gl": "^4.7.1", + "mouse-change": "^1.4.0", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.2.0", + "native-promise-only": "^0.8.1", + "parse-svg-path": "^0.1.2", + "point-in-polygon": "^1.1.0", + "polybooljs": "^1.2.2", + "probe-image-size": "^7.2.3", + "regl-error2d": "^2.0.12", + "regl-line2d": "^3.1.3", + "regl-scatter2d": "^3.3.1", + "regl-splom": "^1.0.14", + "strongly-connected-components": "^1.0.1", + "superscript-text": "^1.0.0", + "svg-path-sdf": "^1.1.3", + "tinycolor2": "^1.4.2", + "to-px": "1.0.1", + "topojson-client": "^3.1.0", + "webgl-context": "^2.2.0", + "world-calendars": "^1.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/plotly.js/node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "license": "BSD-3-Clause" + }, + "node_modules/plotly.js/node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "license": "BSD-3-Clause" + }, + "node_modules/plotly.js/node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/po-parser": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/po-parser/-/po-parser-1.0.2.tgz", "integrity": "sha512-yTIQL8PZy7V8c0psPoJUx7fayez+Mo/53MZgX9MPuPHx+Dt+sRPNuRbI+6Oqxnddhkd68x4Nlgon/zizL1Xg+w==", "license": "MIT" }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", + "license": "MIT" + }, + "node_modules/polybooljs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.2.tgz", + "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg==", + "license": "MIT" + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -9856,6 +13394,204 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=6.14.4" + } + }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC" + }, + "node_modules/preact": { + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.0.tgz", + "integrity": "sha512-rytDAoiXr3+t6OIP3WGlDd0ouCUG1iCWzkcY3++Nreuoi17y6T5i/zRhe6uYfoVcxq6YU+sBtJouuRDsq8vvqA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", + "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", + "license": "MIT", + "dependencies": { + "pretty-format": "^3.8.0" + }, + "peerDependencies": { + "preact": ">=10" + } + }, + "node_modules/precinct": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-7.1.0.tgz", + "integrity": "sha512-I1RkW5PX51/q6Xl39//D7x9NgaKNGHpR5DCNaoxP/b2+KbzzXDNhauJUMV17KSYkJA41CSpwYUPRtRoNxbshWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "detective-amd": "^3.0.1", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.0", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^6.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, + "node_modules/precinct/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/precinct/node_modules/ast-module-types": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", + "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", + "dev": true, + "license": "MIT" + }, + "node_modules/precinct/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/precinct/node_modules/detective-typescript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-6.0.0.tgz", + "integrity": "sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "^4.8.2", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.7" + }, + "engines": { + "node": "^10.13 || >=12.0.0" + } + }, + "node_modules/precinct/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/precinct/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/precinct/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9871,7 +13607,6 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -9961,6 +13696,45 @@ } } }, + "node_modules/pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", + "license": "MIT" + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/probe-image-size": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", + "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "license": "MIT", + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -9988,12 +13762,25 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -10039,6 +13826,37 @@ ], "license": "MIT" }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, "node_modules/rc-pagination": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.3.0.tgz", @@ -10074,12 +13892,21 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { "version": "19.2.0", "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -10089,7 +13916,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -10102,7 +13928,6 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.1.tgz", "integrity": "sha512-2KnjpgG2Rhbi+CIiIBQQ9Df6sMGH5ExNyFl4Hw9qO7pIqMBR8Bvu9RQyjl3JM4vehzCh9soiNUM/xYMswb2EiA==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -10114,6 +13939,15 @@ "react": "^16.8.0 || ^17 || ^18 || ^19" } }, + "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-is": { "version": "19.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz", @@ -10148,12 +13982,24 @@ "react": ">=18" } }, + "node_modules/react-plotly.js": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-plotly.js/-/react-plotly.js-2.6.0.tgz", + "integrity": "sha512-g93xcyhAVCSt9kV1svqG1clAEdL6k3U+jjuSzfTV7owaSU9Go6Ph8bl25J+jKfKvIGAEYpe4qj++WHJuc9IaeA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "plotly.js": ">1.34.0", + "react": ">0.13.0" + } + }, "node_modules/react-redux": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -10278,6 +14124,21 @@ "react-dom": ">=16.6.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/recharts": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.5.0.tgz", @@ -10313,8 +14174,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -10368,6 +14228,104 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/regl/-/regl-2.1.1.tgz", + "integrity": "sha512-+IOGrxl3FZ8ZM9ixCWQZzFRiRn7Rzn9bu3iFHwg/yz4tlOUQgbO4PHLgG+1ZT60zcIV8tief6Qrmyl8qcoJP0g==", + "license": "MIT" + }, + "node_modules/regl-error2d": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", + "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", + "license": "MIT", + "dependencies": { + "array-bounds": "^1.0.1", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-line2d": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.3.tgz", + "integrity": "sha512-fkgzW+tTn4QUQLpFKsUIE0sgWdCmXAM3ctXcCgoGBZTSX5FE2A0M7aynz7nrZT5baaftLrk9te54B+MEq4QcSA==", + "license": "MIT", + "dependencies": { + "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", + "array-normalize": "^1.1.4", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0" + } + }, + "node_modules/regl-scatter2d": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.3.1.tgz", + "integrity": "sha512-seOmMIVwaCwemSYz/y4WE0dbSO9svNFSqtTh5RE57I7PjGo3tcUYKtH0MTSoshcAsreoqN8HoCtnn8wfHXXfKQ==", + "license": "MIT", + "dependencies": { + "@plotly/point-cluster": "^3.1.9", + "array-range": "^1.0.1", + "array-rearrange": "^2.2.2", + "clamp": "^1.0.1", + "color-id": "^1.1.0", + "color-normalize": "^1.5.0", + "color-rgba": "^2.1.1", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "is-iexplorer": "^1.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-scatter2d/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/regl-scatter2d/node_modules/color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "license": "MIT", + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/regl-splom": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", + "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", + "license": "MIT", + "dependencies": { + "array-bounds": "^1.0.1", + "array-range": "^1.0.1", + "color-alpha": "^1.0.4", + "flatten-vertex-data": "^1.0.2", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "raf": "^3.4.1", + "regl-scatter2d": "^3.2.3" + } + }, "node_modules/remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", @@ -10401,6 +14359,34 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/requirejs": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.8.tgz", + "integrity": "sha512-7/cTSLOdYkNBNJcDMWf+luFvMriVm7eYxp4BcFCsAX0wF421Vyce5SXP17c+Jd5otXKGNehIonFlyQXSowL6Mw==", + "dev": true, + "license": "MIT", + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/requirejs-config-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esprima": "^4.0.0", + "stringify-object": "^3.2.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/reselect": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", @@ -10427,6 +14413,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-dependency-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", + "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -10452,6 +14448,38 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -10463,6 +14491,12 @@ "node": ">=0.10.0" } }, + "node_modules/right-now": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", + "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==", + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -10487,6 +14521,12 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -10507,6 +14547,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -10542,6 +14603,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sass-lookup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", + "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.16.0" + }, + "bin": { + "sass-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sass-lookup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -10621,6 +14717,12 @@ "node": ">= 0.4" } }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "license": "MIT" + }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -10772,6 +14874,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/signum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", + "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -10807,6 +14932,23 @@ "dev": true, "license": "MIT" }, + "node_modules/stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", + "engines": { + "node": "*" + } + }, + "node_modules/static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "license": "MIT", + "dependencies": { + "escodegen": "^2.1.0" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -10821,6 +14963,55 @@ "node": ">= 0.4" } }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "license": "MIT", + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-split-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", + "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", + "license": "MIT", + "dependencies": { + "parenthesis": "^3.1.5" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -10948,6 +15139,34 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -10970,6 +15189,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strongly-connected-components": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", + "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==", + "license": "MIT" + }, "node_modules/style-to-js": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", @@ -11017,6 +15242,51 @@ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", "license": "MIT" }, + "node_modules/stylus-lookup": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", + "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0" + }, + "bin": { + "stylus-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/stylus-lookup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "license": "ISC", + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/supercluster/node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "license": "ISC" + }, + "node_modules/superscript-text": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", + "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==", + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11041,6 +15311,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==", + "license": "ISC" + }, + "node_modules/svg-path-bounds": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", + "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", + "license": "MIT", + "dependencies": { + "abs-svg-path": "^0.1.1", + "is-svg-path": "^1.0.1", + "normalize-svg-path": "^1.0.0", + "parse-svg-path": "^0.1.2" + } + }, + "node_modules/svg-path-bounds/node_modules/normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "license": "MIT", + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "node_modules/svg-path-sdf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", + "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", + "license": "MIT", + "dependencies": { + "bitmap-sdf": "^1.0.0", + "draw-svg-path": "^1.0.0", + "is-svg-path": "^1.0.1", + "parse-svg-path": "^0.1.2", + "svg-path-bounds": "^1.0.1" + } + }, "node_modules/table-layout": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", @@ -11085,6 +15395,73 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/temp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", + "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", + "dev": true, + "engines": [ + "node >=0.4.0" + ] + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -11097,6 +15474,12 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -11138,7 +15521,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -11146,6 +15528,27 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC" + }, + "node_modules/to-float32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", + "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==", + "license": "MIT" + }, + "node_modules/to-px": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz", + "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==", + "license": "MIT", + "dependencies": { + "parse-unit": "^1.0.1" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11159,6 +15562,26 @@ "node": ">=8.0" } }, + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" + } + }, + "node_modules/topojson-client/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -11192,6 +15615,128 @@ "typescript": ">=4.8.4" } }, + "node_modules/ts-loader": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.5.tgz", + "integrity": "sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-loader/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/ts-loader/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ts-loader/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-loader/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -11224,6 +15769,29 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/tw-animate-css": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", @@ -11234,6 +15802,12 @@ "url": "https://github.com/sponsors/Wombosvideo" } }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11324,13 +15898,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typedarray-pool": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", + "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", + "license": "MIT", + "dependencies": { + "bit-twiddle": "^1.0.0", + "dup": "^1.0.0" + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11426,6 +16015,13 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true, + "license": "MIT" + }, "node_modules/unist-util-is": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", @@ -11494,6 +16090,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -11560,6 +16162,12 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", + "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==", + "license": "MIT" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11649,6 +16257,21 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -11705,6 +16328,52 @@ "d3-timer": "^3.0.1" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", + "license": "Apache-2.0" + }, + "node_modules/webgl-context": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", + "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", + "license": "MIT", + "dependencies": { + "get-canvas-context": "^1.0.1" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11827,6 +16496,30 @@ "node": ">=12.17" } }, + "node_modules/world-calendars": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.4.tgz", + "integrity": "sha512-VGRnLJS+xJmGDPodgJRnGIDwGu0s+Cr9V2HB3EzlDZ5n0qb8h5SJtGUEkjrphZYAglEiXZ6kiXdmk0H/h/uu/w==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -11860,7 +16553,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/app-next/package.json b/app-next/package.json index b57775c2..a0f37415 100644 --- a/app-next/package.json +++ b/app-next/package.json @@ -10,7 +10,10 @@ "start": "next start -p 3050", "lint": "eslint", "format": "prettier --write .", - "format:check": "prettier --check ." + "format:check": "prettier --check .", + "check-pages": "npx tsx scripts/check-pages.ts", + "check-pages:vercel": "BASE_URL=https://openmlorg.vercel.app npx tsx scripts/check-pages.ts", + "find:unused": "next-unused" }, "browserslist": [ "chrome 111", @@ -21,36 +24,49 @@ "dependencies": { "@elastic/react-search-ui": "^1.24.2", "@elastic/search-ui-elasticsearch-connector": "^1.24.2", + "@fortawesome/fontawesome-svg-core": "^7.1.0", + "@fortawesome/free-brands-svg-icons": "^7.1.0", "@fortawesome/free-solid-svg-icons": "^7.1.0", - "@fortawesome/react-fontawesome": "^3.1.0", + "@fortawesome/react-fontawesome": "^3.1.1", "@hookform/resolvers": "^5.2.2", "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-avatar": "^1.1.11", "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toast": "^1.2.15", "@radix-ui/react-toggle": "^1.1.10", "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@tanstack/react-query": "^5.90.10", + "@vercel/blob": "^2.0.0", + "apache-arrow": "^21.1.0", "axios": "^1.13.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "lucide-react": "^0.554.0", - "next": "16.0.3", + "next": "^16.0.10", + "next-auth": "^4.24.13", "next-intl": "^4.5.8", "next-themes": "^0.4.6", + "parquet-wasm": "^0.7.1", + "plotly.js": "^3.3.1", "react": "19.2.0", "react-dom": "19.2.0", "react-hook-form": "^7.66.1", + "react-icons": "^5.5.0", "react-markdown": "^10.1.0", + "react-plotly.js": "^2.6.0", "recharts": "^3.4.1", "tailwind-merge": "^3.4.0", "zod": "^4.1.12" @@ -62,10 +78,20 @@ "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "16.0.3", + "next-unused": "^0.0.6", "prettier": "^3.6.2", "prettier-plugin-tailwindcss": "^0.7.1", "tailwindcss": "^4", "tw-animate-css": "^1.4.0", "typescript": "^5" + }, + "next-unused": { + "include": [ + "app", + "components" + ], + "entrypoints": [ + "app" + ] } } diff --git a/app-next/playground/Hero-Home.tsx b/app-next/playground/Hero-Home.tsx deleted file mode 100644 index ed8f5781..00000000 --- a/app-next/playground/Hero-Home.tsx +++ /dev/null @@ -1,154 +0,0 @@ -"use client"; -import React from "react"; -import Image from "next/image"; - -const HeroHomeExtra: React.FC = () => { - return ( -
-
-
- {/* Left Column - Text */} -
-
- Version 3.0 is here -
- -

- - The Global Lab - - for Machine Learning Research -

-

- Machine learning research should be easily accessible, reusable, - and reproducible. OpenML is a collaborative environment for - sharing, organizing, and building upon datasets, algorithms, and - experiments. -

- -
- - - {/* -
- -
-
- - - -
-
- {[...Array(5)].map((_, i) => ( - - - - ))} - - 4.9/5 (2k+ reviews) - -
-
-
- - {/* Right Column - Image with exact aspect ratio */} - {/* Right Column - Image */} -
- {/* Image with fixed aspect ratio */} -
-
-
- - Light mode - Dark mode -
- - {/* Badge now positioned from the bottom of the IMAGE container */} -
-
-
-
- - - -
-
-

- machine learning should be set free -

-

+9999%

-
-
-
-
-
-
-
-
-
- ); -}; - -export default HeroHomeExtra; diff --git a/app-next/playground/globals_extra.css b/app-next/playground/globals_extra.css deleted file mode 100644 index 435115ce..00000000 --- a/app-next/playground/globals_extra.css +++ /dev/null @@ -1,165 +0,0 @@ -@import "tailwindcss"; -@import "tw-animate-css"; - -@custom-variant dark (&:is(.dark *)); - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); - --color-sidebar-ring: var(--sidebar-ring); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar: var(--sidebar); - --color-chart-5: var(--chart-5); - --color-chart-4: var(--chart-4); - --color-chart-3: var(--chart-3); - --color-chart-2: var(--chart-2); - --color-chart-1: var(--chart-1); - --color-ring: var(--ring); - --color-input: var(--input); - --color-border: var(--border); - --color-destructive: var(--destructive); - --color-accent-foreground: var(--accent-foreground); - --color-accent: var(--accent); - --color-muted-foreground: var(--muted-foreground); - --color-muted: var(--muted); - --color-secondary-foreground: var(--secondary-foreground); - --color-secondary: var(--secondary); - --color-primary-foreground: var(--primary-foreground); - --color-primary: var(--primary); - --color-popover-foreground: var(--popover-foreground); - --color-popover: var(--popover); - --color-card-foreground: var(--card-foreground); - --color-card: var(--card); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); -} - -:root { - --radius: 0.625rem; /* Slightly more refined rounding */ - - /* Light Mode - Clean, professional academic palette */ - --background: oklch(0.99 0.005 250); /* Crisp white with subtle blue tint */ - --foreground: oklch(0.15 0.02 250); /* Deep navy for excellent readability */ - - --card: oklch(1 0 0); /* Pure white cards */ - --card-foreground: oklch(0.15 0.02 250); - - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.15 0.02 250); - - /* Primary - Deep navy blue, professional and trustworthy */ - --primary: oklch(0.28 0.05 250); /* Sophisticated navy */ - --primary-foreground: oklch(0.99 0 0); /* White */ - - /* Secondary - Warm gray for academic sophistication */ - --secondary: oklch(0.96 0.005 250); /* Light gray with blue undertone */ - --secondary-foreground: oklch(0.28 0.05 250); - - /* Muted - Professional gray scale */ - --muted: oklch(0.94 0.01 250); /* Very subtle blue tint */ - --muted-foreground: oklch(0.45 0.02 250); /* Medium gray for secondary text */ - - /* Accent - Teal/blue-green for scientific appeal */ - --accent: oklch(0.92 0.03 190); /* Fresh, clean teal accent */ - --accent-foreground: oklch(0.28 0.05 250); - - /* Destructive - Professional red for errors/warnings */ - --destructive: oklch(0.58 0.2 25); /* Muted but clear red */ - - /* Borders - Subtle and refined */ - --border: oklch(0.88 0.015 250); /* Very light blue-gray */ - --input: oklch(0.95 0.01 250); - --ring: oklch(0.28 0.05 250); /* Match primary */ - - /* Charts - Scientific color palette (colorblind friendly) */ - --chart-1: oklch(0.55 0.12 250); /* Navy */ - --chart-2: oklch(0.6 0.15 190); /* Teal */ - --chart-3: oklch(0.55 0.18 320); /* Purple */ - --chart-4: oklch(0.65 0.16 80); /* Olive green */ - --chart-5: oklch(0.58 0.14 30); /* Rust/orange */ - - /* Sidebar - Clean and distinct */ - --sidebar: oklch(0.98 0.008 250); /* Slightly tinted white */ - --sidebar-foreground: oklch(0.15 0.02 250); - --sidebar-primary: oklch(0.28 0.05 250); - --sidebar-primary-foreground: oklch(0.99 0 0); - --sidebar-accent: oklch(0.94 0.01 250); - --sidebar-accent-foreground: oklch(0.28 0.05 250); - --sidebar-border: oklch(0.88 0.015 250); - --sidebar-ring: oklch(0.55 0.08 250); -} - -.dark { - /* Dark Mode - Professional dark theme for research */ - --background: oklch(0.12 0.02 250); /* Deep navy-black */ - --foreground: oklch(0.98 0.005 250); /* Soft white */ - - /* Cards with subtle depth */ - --card: oklch(0.16 0.03 250); /* Slightly lighter than background */ - --card-foreground: oklch(0.98 0.005 250); - - --popover: oklch(0.16 0.03 250); - --popover-foreground: oklch(0.98 0.005 250); - - /* Primary - Bright but professional blue */ - --primary: oklch(0.75 0.12 250); /* Clear, readable blue */ - --primary-foreground: oklch(0.12 0.02 250); /* Dark background */ - - /* Secondary - Medium dark gray */ - --secondary: oklch(0.2 0.03 250); - --secondary-foreground: oklch(0.98 0.005 250); - - /* Muted - Professional dark grays */ - --muted: oklch(0.2 0.03 250); - --muted-foreground: oklch(0.65 0.03 250); /* Medium gray text */ - - /* Accent - Teal that works well in dark mode */ - --accent: oklch(0.3 0.08 190); - --accent-foreground: oklch(0.98 0.005 250); - - /* Destructive - Clear but not overwhelming */ - --destructive: oklch(0.65 0.18 25); - - /* Borders - Defined but subtle */ - --border: oklch(0.25 0.04 250); - --input: oklch(0.2 0.03 250); - --ring: oklch(0.75 0.12 250); /* Match primary */ - - /* Charts - Optimized for dark background */ - --chart-1: oklch(0.7 0.15 250); /* Bright navy */ - --chart-2: oklch(0.75 0.18 190); /* Bright teal */ - --chart-3: oklch(0.72 0.2 320); /* Bright purple */ - --chart-4: oklch(0.78 0.16 80); /* Bright olive */ - --chart-5: oklch(0.68 0.14 30); /* Bright rust */ - - /* Sidebar */ - --sidebar: oklch(0.14 0.025 250); - --sidebar-foreground: oklch(0.98 0.005 250); - --sidebar-primary: oklch(0.75 0.12 250); - --sidebar-primary-foreground: oklch(0.12 0.02 250); - --sidebar-accent: oklch(0.2 0.03 250); - --sidebar-accent-foreground: oklch(0.98 0.005 250); - --sidebar-border: oklch(0.25 0.04 250); - --sidebar-ring: oklch(0.65 0.08 250); -} - -@layer base { - * { - @apply border-border outline-ring/50; - } - body { - @apply bg-background text-foreground; - font-feature-settings: - "rlig" 1, - "calt" 1; - } -} diff --git a/app-next/playground/globals_original.css b/app-next/playground/globals_original.css deleted file mode 100644 index 435115ce..00000000 --- a/app-next/playground/globals_original.css +++ /dev/null @@ -1,165 +0,0 @@ -@import "tailwindcss"; -@import "tw-animate-css"; - -@custom-variant dark (&:is(.dark *)); - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); - --color-sidebar-ring: var(--sidebar-ring); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar: var(--sidebar); - --color-chart-5: var(--chart-5); - --color-chart-4: var(--chart-4); - --color-chart-3: var(--chart-3); - --color-chart-2: var(--chart-2); - --color-chart-1: var(--chart-1); - --color-ring: var(--ring); - --color-input: var(--input); - --color-border: var(--border); - --color-destructive: var(--destructive); - --color-accent-foreground: var(--accent-foreground); - --color-accent: var(--accent); - --color-muted-foreground: var(--muted-foreground); - --color-muted: var(--muted); - --color-secondary-foreground: var(--secondary-foreground); - --color-secondary: var(--secondary); - --color-primary-foreground: var(--primary-foreground); - --color-primary: var(--primary); - --color-popover-foreground: var(--popover-foreground); - --color-popover: var(--popover); - --color-card-foreground: var(--card-foreground); - --color-card: var(--card); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); -} - -:root { - --radius: 0.625rem; /* Slightly more refined rounding */ - - /* Light Mode - Clean, professional academic palette */ - --background: oklch(0.99 0.005 250); /* Crisp white with subtle blue tint */ - --foreground: oklch(0.15 0.02 250); /* Deep navy for excellent readability */ - - --card: oklch(1 0 0); /* Pure white cards */ - --card-foreground: oklch(0.15 0.02 250); - - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.15 0.02 250); - - /* Primary - Deep navy blue, professional and trustworthy */ - --primary: oklch(0.28 0.05 250); /* Sophisticated navy */ - --primary-foreground: oklch(0.99 0 0); /* White */ - - /* Secondary - Warm gray for academic sophistication */ - --secondary: oklch(0.96 0.005 250); /* Light gray with blue undertone */ - --secondary-foreground: oklch(0.28 0.05 250); - - /* Muted - Professional gray scale */ - --muted: oklch(0.94 0.01 250); /* Very subtle blue tint */ - --muted-foreground: oklch(0.45 0.02 250); /* Medium gray for secondary text */ - - /* Accent - Teal/blue-green for scientific appeal */ - --accent: oklch(0.92 0.03 190); /* Fresh, clean teal accent */ - --accent-foreground: oklch(0.28 0.05 250); - - /* Destructive - Professional red for errors/warnings */ - --destructive: oklch(0.58 0.2 25); /* Muted but clear red */ - - /* Borders - Subtle and refined */ - --border: oklch(0.88 0.015 250); /* Very light blue-gray */ - --input: oklch(0.95 0.01 250); - --ring: oklch(0.28 0.05 250); /* Match primary */ - - /* Charts - Scientific color palette (colorblind friendly) */ - --chart-1: oklch(0.55 0.12 250); /* Navy */ - --chart-2: oklch(0.6 0.15 190); /* Teal */ - --chart-3: oklch(0.55 0.18 320); /* Purple */ - --chart-4: oklch(0.65 0.16 80); /* Olive green */ - --chart-5: oklch(0.58 0.14 30); /* Rust/orange */ - - /* Sidebar - Clean and distinct */ - --sidebar: oklch(0.98 0.008 250); /* Slightly tinted white */ - --sidebar-foreground: oklch(0.15 0.02 250); - --sidebar-primary: oklch(0.28 0.05 250); - --sidebar-primary-foreground: oklch(0.99 0 0); - --sidebar-accent: oklch(0.94 0.01 250); - --sidebar-accent-foreground: oklch(0.28 0.05 250); - --sidebar-border: oklch(0.88 0.015 250); - --sidebar-ring: oklch(0.55 0.08 250); -} - -.dark { - /* Dark Mode - Professional dark theme for research */ - --background: oklch(0.12 0.02 250); /* Deep navy-black */ - --foreground: oklch(0.98 0.005 250); /* Soft white */ - - /* Cards with subtle depth */ - --card: oklch(0.16 0.03 250); /* Slightly lighter than background */ - --card-foreground: oklch(0.98 0.005 250); - - --popover: oklch(0.16 0.03 250); - --popover-foreground: oklch(0.98 0.005 250); - - /* Primary - Bright but professional blue */ - --primary: oklch(0.75 0.12 250); /* Clear, readable blue */ - --primary-foreground: oklch(0.12 0.02 250); /* Dark background */ - - /* Secondary - Medium dark gray */ - --secondary: oklch(0.2 0.03 250); - --secondary-foreground: oklch(0.98 0.005 250); - - /* Muted - Professional dark grays */ - --muted: oklch(0.2 0.03 250); - --muted-foreground: oklch(0.65 0.03 250); /* Medium gray text */ - - /* Accent - Teal that works well in dark mode */ - --accent: oklch(0.3 0.08 190); - --accent-foreground: oklch(0.98 0.005 250); - - /* Destructive - Clear but not overwhelming */ - --destructive: oklch(0.65 0.18 25); - - /* Borders - Defined but subtle */ - --border: oklch(0.25 0.04 250); - --input: oklch(0.2 0.03 250); - --ring: oklch(0.75 0.12 250); /* Match primary */ - - /* Charts - Optimized for dark background */ - --chart-1: oklch(0.7 0.15 250); /* Bright navy */ - --chart-2: oklch(0.75 0.18 190); /* Bright teal */ - --chart-3: oklch(0.72 0.2 320); /* Bright purple */ - --chart-4: oklch(0.78 0.16 80); /* Bright olive */ - --chart-5: oklch(0.68 0.14 30); /* Bright rust */ - - /* Sidebar */ - --sidebar: oklch(0.14 0.025 250); - --sidebar-foreground: oklch(0.98 0.005 250); - --sidebar-primary: oklch(0.75 0.12 250); - --sidebar-primary-foreground: oklch(0.12 0.02 250); - --sidebar-accent: oklch(0.2 0.03 250); - --sidebar-accent-foreground: oklch(0.98 0.005 250); - --sidebar-border: oklch(0.25 0.04 250); - --sidebar-ring: oklch(0.65 0.08 250); -} - -@layer base { - * { - @apply border-border outline-ring/50; - } - body { - @apply bg-background text-foreground; - font-feature-settings: - "rlig" 1, - "calt" 1; - } -} diff --git a/app-next/public/account.svg b/app-next/public/account.svg deleted file mode 100644 index dc34af5f..00000000 --- a/app-next/public/account.svg +++ /dev/null @@ -1 +0,0 @@ -Created by Warunk Iconfrom the Noun Project \ No newline at end of file diff --git a/app-next/public/bkg/bg01_light.jpg b/app-next/public/bkg/bg01_light.jpg deleted file mode 100644 index 9e810047..00000000 Binary files a/app-next/public/bkg/bg01_light.jpg and /dev/null differ diff --git a/app-next/public/bkg/bg03-donker.jpg b/app-next/public/bkg/bg03-donker.jpg deleted file mode 100644 index 2834bb0e..00000000 Binary files a/app-next/public/bkg/bg03-donker.jpg and /dev/null differ diff --git a/app-next/public/bkg/bg04-donker.jpg b/app-next/public/bkg/bg04-donker.jpg deleted file mode 100644 index fb864be0..00000000 Binary files a/app-next/public/bkg/bg04-donker.jpg and /dev/null differ diff --git a/app-next/public/create.svg b/app-next/public/create.svg deleted file mode 100644 index 86f8a4fe..00000000 --- a/app-next/public/create.svg +++ /dev/null @@ -1 +0,0 @@ -Created by Gregor Cresnarfrom the Noun Project \ No newline at end of file diff --git a/app-next/public/documentation.svg b/app-next/public/documentation.svg deleted file mode 100644 index 26a0fd14..00000000 --- a/app-next/public/documentation.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -Created by Mia Elysiafrom Noun Project \ No newline at end of file diff --git a/app-next/public/hero_dark.png b/app-next/public/hero_dark.png deleted file mode 100644 index 8b147fe4..00000000 Binary files a/app-next/public/hero_dark.png and /dev/null differ diff --git a/app-next/public/img/01.jpeg b/app-next/public/img/01.jpeg deleted file mode 100644 index 9499f47d..00000000 Binary files a/app-next/public/img/01.jpeg and /dev/null differ diff --git a/app-next/public/img/02.jpeg b/app-next/public/img/02.jpeg deleted file mode 100644 index e62f02ec..00000000 Binary files a/app-next/public/img/02.jpeg and /dev/null differ diff --git a/app-next/public/img/05.jpeg b/app-next/public/img/05.jpeg deleted file mode 100644 index 65e7d490..00000000 Binary files a/app-next/public/img/05.jpeg and /dev/null differ diff --git a/app-next/public/img/06.jpeg b/app-next/public/img/06.jpeg deleted file mode 100644 index 60f4edbd..00000000 Binary files a/app-next/public/img/06.jpeg and /dev/null differ diff --git a/app-next/public/img/07.jpeg b/app-next/public/img/07.jpeg deleted file mode 100644 index 064e9802..00000000 Binary files a/app-next/public/img/07.jpeg and /dev/null differ diff --git a/app-next/public/img/10.jpeg b/app-next/public/img/10.jpeg deleted file mode 100644 index 13d943b3..00000000 Binary files a/app-next/public/img/10.jpeg and /dev/null differ diff --git a/app-next/public/img/11.jpeg b/app-next/public/img/11.jpeg deleted file mode 100644 index 8e4a3945..00000000 Binary files a/app-next/public/img/11.jpeg and /dev/null differ diff --git a/app-next/public/img/bg-light_hero.png b/app-next/public/img/bg-light_hero.png new file mode 100644 index 00000000..79b19ddf Binary files /dev/null and b/app-next/public/img/bg-light_hero.png differ diff --git a/app-next/public/img/bg_lightMode_4_heroSection.png b/app-next/public/img/bg_lightMode_4_heroSection.png new file mode 100644 index 00000000..0a5e2b51 Binary files /dev/null and b/app-next/public/img/bg_lightMode_4_heroSection.png differ diff --git a/app-next/public/img/contribute-citations-dark.png b/app-next/public/img/contribute-citations-dark.png deleted file mode 100644 index d9655d23..00000000 Binary files a/app-next/public/img/contribute-citations-dark.png and /dev/null differ diff --git a/app-next/public/img/contribute-citations-light.png b/app-next/public/img/contribute-citations-light.png deleted file mode 100644 index 5a306a4c..00000000 Binary files a/app-next/public/img/contribute-citations-light.png and /dev/null differ diff --git a/app-next/public/img/contribute-citations-livecycle.png b/app-next/public/img/contribute-citations-livecycle.png deleted file mode 100644 index 35d01f0a..00000000 Binary files a/app-next/public/img/contribute-citations-livecycle.png and /dev/null differ diff --git a/app-next/public/img/hero02.png b/app-next/public/img/hero02.png new file mode 100644 index 00000000..a1966af6 Binary files /dev/null and b/app-next/public/img/hero02.png differ diff --git a/app-next/public/img/hero04.jpg b/app-next/public/img/hero04.jpg new file mode 100644 index 00000000..d8a62301 Binary files /dev/null and b/app-next/public/img/hero04.jpg differ diff --git a/app-next/public/img/hero07.avif b/app-next/public/img/hero07.avif new file mode 100644 index 00000000..bf9e97f4 Binary files /dev/null and b/app-next/public/img/hero07.avif differ diff --git a/app-next/public/img/lang/De_dark.png b/app-next/public/img/lang/De_dark.png new file mode 100644 index 00000000..d720f851 Binary files /dev/null and b/app-next/public/img/lang/De_dark.png differ diff --git a/app-next/public/img/lang/De_light.png b/app-next/public/img/lang/De_light.png new file mode 100644 index 00000000..b8add10f Binary files /dev/null and b/app-next/public/img/lang/De_light.png differ diff --git a/app-next/public/img/lang/Fr_light.png b/app-next/public/img/lang/Fr_light.png new file mode 100644 index 00000000..0793959e Binary files /dev/null and b/app-next/public/img/lang/Fr_light.png differ diff --git a/app-next/public/img/lang/Nl_dark.png b/app-next/public/img/lang/Nl_dark.png new file mode 100644 index 00000000..9a76b5d3 Binary files /dev/null and b/app-next/public/img/lang/Nl_dark.png differ diff --git a/app-next/public/img/lang/Nl_light.png b/app-next/public/img/lang/Nl_light.png new file mode 100644 index 00000000..d2da83a4 Binary files /dev/null and b/app-next/public/img/lang/Nl_light.png differ diff --git a/app-next/public/img/lang/fr_dark.png b/app-next/public/img/lang/fr_dark.png new file mode 100644 index 00000000..9ce31387 Binary files /dev/null and b/app-next/public/img/lang/fr_dark.png differ diff --git a/app-next/public/img/licensed-image.jpg b/app-next/public/img/licensed-image.jpg deleted file mode 100644 index db0e30f7..00000000 Binary files a/app-next/public/img/licensed-image.jpg and /dev/null differ diff --git a/app-next/public/licensed-image.jpg b/app-next/public/licensed-image.jpg deleted file mode 100644 index db0e30f7..00000000 Binary files a/app-next/public/licensed-image.jpg and /dev/null differ diff --git a/app-next/public/logo_openML_gray.png b/app-next/public/logo_openML_gray.png deleted file mode 100644 index 06e6f54a..00000000 Binary files a/app-next/public/logo_openML_gray.png and /dev/null differ diff --git a/app-next/public/notificationsvg.svg b/app-next/public/notificationsvg.svg deleted file mode 100644 index 7b4f233f..00000000 --- a/app-next/public/notificationsvg.svg +++ /dev/null @@ -1 +0,0 @@ -Created by IconMarkfrom the Noun Project \ No newline at end of file diff --git a/app-next/public/openML_logo_mini-sidebar.png b/app-next/public/openML_logo_mini-sidebar.png new file mode 100644 index 00000000..246d5a5e Binary files /dev/null and b/app-next/public/openML_logo_mini-sidebar.png differ diff --git a/app-next/public/svg/email.svg b/app-next/public/svg/email.svg deleted file mode 100644 index 0f92eff9..00000000 --- a/app-next/public/svg/email.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app-next/public/svg/github.svg b/app-next/public/svg/github.svg deleted file mode 100644 index 559ce6c0..00000000 --- a/app-next/public/svg/github.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app-next/public/svg/slack.svg b/app-next/public/svg/slack.svg deleted file mode 100644 index 1cee5234..00000000 --- a/app-next/public/svg/slack.svg +++ /dev/null @@ -1,2 +0,0 @@ - -logo--slack \ No newline at end of file diff --git a/app-next/public/svg/x.svg b/app-next/public/svg/x.svg deleted file mode 100644 index c3b51623..00000000 --- a/app-next/public/svg/x.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app-next/run_debug.json b/app-next/run_debug.json new file mode 100644 index 00000000..6a03b129 --- /dev/null +++ b/app-next/run_debug.json @@ -0,0 +1 @@ +{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"run","_type":"run","_id":"10586925","_score":1.0,"_source":{"run_id":"10586925","uploader":"Marc Boel","uploader_id":28997,"run_task":{"task_id":"9979","visibility":"public","tasktype":{"name":"Supervised Classification"},"source_data":{"data_id":"1466","name":"cardiotocography"},"estimation_procedure":{"name":"10-fold Crossvalidation"},"target_values":["1","2","3","4","5","6","7","8","9","10"]},"date":"2021-12-04 01:24:12","run_flow":{"flow_id":"19039","name":"sklearn.pipeline.Pipeline(columntransformer=sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder),gradientboostingclassifier=sklearn.ensemble._gb.GradientBoostingClassifier)(2)","parameters":[{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_n_jobs","value":"null"},{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_remainder","value":"\"drop\""},{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_sparse_threshold","value":"0.3"},{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_transformer_weights","value":"null"},{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_transformers","value":"[{\"oml-python:serialized_object\": \"component_reference\", \"value\": {\"key\": \"simpleimputer\", \"step_name\": \"simpleimputer\", \"argument_1\": {\"oml-python:serialized_object\": \"function\", \"value\": \"openml.extensions.sklearn.cont\"}}}, {\"oml-python:serialized_object\": \"component_reference\", \"value\": {\"key\": \"onehotencoder\", \"step_name\": \"onehotencoder\", \"argument_1\": {\"oml-python:serialized_object\": \"function\", \"value\": \"openml.extensions.sklearn.cat\"}}}]"},{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_verbose","value":"false"},{"parameter":"sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder)(2)_verbose_feature_names_out","value":"true"},{"parameter":"sklearn.impute._base.SimpleImputer(28)_add_indicator","value":"false"},{"parameter":"sklearn.impute._base.SimpleImputer(28)_copy","value":"true"},{"parameter":"sklearn.impute._base.SimpleImputer(28)_fill_value","value":"null"},{"parameter":"sklearn.impute._base.SimpleImputer(28)_missing_values","value":"NaN"},{"parameter":"sklearn.impute._base.SimpleImputer(28)_strategy","value":"\"most_frequent\""},{"parameter":"sklearn.impute._base.SimpleImputer(28)_verbose","value":"0"},{"parameter":"sklearn.preprocessing._encoders.OneHotEncoder(30)_categories","value":"\"auto\""},{"parameter":"sklearn.preprocessing._encoders.OneHotEncoder(30)_drop","value":"null"},{"parameter":"sklearn.preprocessing._encoders.OneHotEncoder(30)_dtype","value":"{\"oml-python:serialized_object\": \"type\", \"value\": \"np.float64\"}"},{"parameter":"sklearn.preprocessing._encoders.OneHotEncoder(30)_handle_unknown","value":"\"ignore\""},{"parameter":"sklearn.preprocessing._encoders.OneHotEncoder(30)_sparse","value":"true"},{"parameter":"sklearn.pipeline.Pipeline(columntransformer=sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder),gradientboostingclassifier=sklearn.ensemble._gb.GradientBoostingClassifier)(2)_memory","value":"null"},{"parameter":"sklearn.pipeline.Pipeline(columntransformer=sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder),gradientboostingclassifier=sklearn.ensemble._gb.GradientBoostingClassifier)(2)_steps","value":"[{\"oml-python:serialized_object\": \"component_reference\", \"value\": {\"key\": \"columntransformer\", \"step_name\": \"columntransformer\"}}, {\"oml-python:serialized_object\": \"component_reference\", \"value\": {\"key\": \"gradientboostingclassifier\", \"step_name\": \"gradientboostingclassifier\"}}]"},{"parameter":"sklearn.pipeline.Pipeline(columntransformer=sklearn.compose._column_transformer.ColumnTransformer(simpleimputer=sklearn.impute._base.SimpleImputer,onehotencoder=sklearn.preprocessing._encoders.OneHotEncoder),gradientboostingclassifier=sklearn.ensemble._gb.GradientBoostingClassifier)(2)_verbose","value":"false"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_ccp_alpha","value":"0.0"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_criterion","value":"\"friedman_mse\""},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_init","value":"null"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_learning_rate","value":"0.9412152183485434"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_loss","value":"\"deviance\""},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_max_depth","value":"3"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_max_features","value":"null"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_max_leaf_nodes","value":"437"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_min_impurity_decrease","value":"0.0"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_min_samples_leaf","value":"85"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_min_samples_split","value":"2"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_min_weight_fraction_leaf","value":"0.0"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_n_estimators","value":"100"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_n_iter_no_change","value":"12"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_random_state","value":"30782"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_subsample","value":"1.0"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_tol","value":"0.0001"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_validation_fraction","value":"0.35207744590286283"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_verbose","value":"0"},{"parameter":"sklearn.ensemble._gb.GradientBoostingClassifier(4)_warm_start","value":"false"}]},"output_files":{"description":{"url":"https:\/\/www.openml.org\/data\/download\/22100121\/description.xml","format":"xml"},"predictions":{"url":"https:\/\/www.openml.org\/data\/download\/22100122\/predictions.arff","format":"arff"}},"evaluations":[{"evaluation_measure":"area_under_roc_curve","value":0.6824,"stdev":0.2016,"array_data":[0.6785,0.6806,0.7088,0.6703,0.6858,0.7143,0.6585,0.6338,0.6453,0.7085],"per_fold":[[0.7937,0.5046,0.67,0.5236,0.9812,0.9057,0.4893,0.7695,0.9811,0.9672]]},{"evaluation_measure":"average_cost"},{"evaluation_measure":"f_measure","value":0.6313,"stdev":0.1539,"array_data":[0.6709,0.6924,0.3099,0.2172,0.244,0.713,0.6719,0.4615,0.4748,0.7302],"per_fold":[[0.6722,0.9566,0.9151,0.6396,0.9724,0.9596]]},{"evaluation_measure":"kappa","value":0.504,"stdev":0.4104,"per_fold":[[0.5768,0.0178,0.3131,0.0488,0.9497,0.8841,-0.0222,0.5466,0.9664,0.9496]]},{"evaluation_measure":"kb_relative_information_score","value":0.5232,"stdev":0.4161,"per_fold":[[0.6036,-0.0088,0.3246,0.0534,0.9394,0.8909,-0.0393,0.5451,0.9634,0.9586]]},{"evaluation_measure":"mean_absolute_error","value":0.0884,"stdev":0.078,"per_fold":[[0.0751,0.1878,0.1268,0.1795,0.0087,0.0201,0.1915,0.0799,0.0057,0.0082]]},{"evaluation_measure":"mean_prior_absolute_error","value":0.1679,"stdev":0.0001,"per_fold":[[0.1679,0.1679,0.1679,0.1679,0.1679,0.168,0.1679,0.168,0.168,0.1679]]},{"evaluation_measure":"weighted_recall","value":0.5588,"stdev":0.3903,"array_data":[0.5521,0.5423,0.6226,0.716,0.5694,0.6024,0.5079,0.5047,0.4783,0.5838],"per_fold":[[0.6244,0.061,0.3662,0.1033,0.9577,0.9014,0.0425,0.6038,0.9717,0.9575]]},{"evaluation_measure":"number_of_instances","value":2126.0,"stdev":0.5164,"array_data":[384.0,579.0,53.0,81.0,72.0,332.0,252.0,107.0,69.0,197.0],"per_fold":[[213.0,213.0,213.0,213.0,213.0,213.0,212.0,212.0,212.0,212.0]]},{"evaluation_measure":"precision","value":0.8114,"stdev":0.0844,"array_data":[0.8548,0.9573,0.2063,0.128,0.1553,0.8734,0.9922,0.4252,0.4714,0.9746],"per_fold":[[0.8518,0.9631,0.958,0.7723,0.9777,0.9712]]},{"evaluation_measure":"predictive_accuracy","value":0.5588,"stdev":0.3903,"per_fold":[[0.6244,0.061,0.3662,0.1033,0.9577,0.9014,0.0425,0.6038,0.9717,0.9575]]},{"evaluation_measure":"prior_entropy","value":2.9134,"stdev":0.0053,"per_fold":[[2.9103,2.9103,2.9093,2.9093,2.9093,2.9149,2.9133,2.9229,2.9229,2.9114]]},{"evaluation_measure":"relative_absolute_error","value":0.5262,"stdev":0.4648,"per_fold":[[0.4474,1.1184,0.755,1.0693,0.0519,0.1196,1.1406,0.4758,0.0339,0.0489]]},{"evaluation_measure":"root_mean_prior_squared_error","value":0.2897,"stdev":0.0001,"per_fold":[[0.2897,0.2897,0.2896,0.2896,0.2896,0.2899,0.2897,0.2898,0.2898,0.2897]]},{"evaluation_measure":"root_mean_squared_error","value":0.2958,"stdev":0.1507,"per_fold":[[0.2736,0.4318,0.356,0.4235,0.0915,0.1407,0.4376,0.2734,0.0746,0.0867]]},{"evaluation_measure":"root_relative_squared_error","value":1.0212,"stdev":0.5203,"per_fold":[[0.9445,1.4905,1.2292,1.4622,0.3161,0.4855,1.5107,0.9432,0.2574,0.2993]]},{"evaluation_measure":"total_cost"},{"evaluation_measure":"unweighted_recall","value":0.568,"stdev":0.3601,"array_data":[0.5521,0.5423,0.6226,0.716,0.5694,0.6024,0.5079,0.5047,0.4783,0.5838],"per_fold":[[0.6281,0.1056,0.4142,0.2044,0.9126,0.9104,0.0531,0.5504,0.9548,0.9457]]}],"error":"","error_message":"","run_details":"","visibility":"public","tags":[{"tag":"openml-python","uploader":"28997"},{"tag":"Sklearn_1.0.1.","uploader":"28997"}],"collections":[],"nr_of_issues":0,"nr_of_downvotes":0,"nr_of_likes":0,"nr_of_downloads":0,"total_downloads":0,"reach":0,"reuse":0,"impact_of_reuse":0,"reach_of_reuse":0,"impact":0}}]}} \ No newline at end of file diff --git a/app-next/scripts/check-pages.ts b/app-next/scripts/check-pages.ts new file mode 100644 index 00000000..2a62cdfd --- /dev/null +++ b/app-next/scripts/check-pages.ts @@ -0,0 +1,287 @@ +/** + * Page Health Check Script + * + * Crawls pages and checks for errors. + * Fetches real IDs from OpenML API to test dynamic pages. + * Saves errors to logs/check-pages-errors.log + * + * Usage: + * npm run check-pages # Check localhost:3050 + * npm run check-pages:vercel # Check Vercel deployment + * SAMPLE_SIZE=50 npm run check-pages # Check more pages per entity + */ + +import * as fs from "fs"; +import * as path from "path"; + +const BASE_URL = process.env.BASE_URL || "http://localhost:3050"; +const API_URL = "https://www.openml.org"; +const SAMPLE_SIZE = parseInt(process.env.SAMPLE_SIZE || "10", 10); + +// Error log file +const LOG_DIR = path.join(__dirname, "../logs"); +const LOG_FILE = path.join(LOG_DIR, "check-pages-errors.log"); + +// Static pages to always check +const STATIC_PAGES = [ + "/", + "/about", + "/documentation", + "/apis", + "/terms", + "/auth/signin", + "/datasets", + "/tasks", + "/flows", + "/runs", + "/collections", + "/benchmarks", + "/measures", + "/users", +]; + +interface CheckResult { + url: string; + status: number | "error"; + ok: boolean; + error?: string; + responseTime: number; +} + +interface EntityConfig { + name: string; + path: string; + apiEndpoint: string; + idField: string; +} + +interface EntityItem { + [key: string]: string | number; +} + +// Entity configurations for fetching real IDs +const ENTITIES: EntityConfig[] = [ + { + name: "datasets", + path: "/datasets", + apiEndpoint: "/api/v1/json/data/list", + idField: "did", + }, + { + name: "tasks", + path: "/tasks", + apiEndpoint: "/api/v1/json/task/list", + idField: "task_id", + }, + { + name: "flows", + path: "/flows", + apiEndpoint: "/api/v1/json/flow/list", + idField: "id", + }, + { + name: "users", + path: "/users", + apiEndpoint: "/api/v1/json/user/list", + idField: "id", + }, +]; + +/** + * Fetch sample IDs from OpenML API + */ +async function fetchEntityIds(entity: EntityConfig): Promise { + try { + const response = await fetch(`${API_URL}${entity.apiEndpoint}`); + if (!response.ok) { + console.warn(`⚠️ Could not fetch ${entity.name} list from API`); + return []; + } + + const data = await response.json(); + + // Navigate the nested response structure + let items: EntityItem[] = []; + + if (entity.name === "datasets" && data.data?.dataset) { + items = data.data.dataset; + } else if (entity.name === "tasks" && data.tasks?.task) { + items = data.tasks.task; + } else if (entity.name === "flows" && data.flows?.flow) { + items = data.flows.flow; + } else if (entity.name === "users" && data.users?.user) { + items = data.users.user; + } + + if (!Array.isArray(items)) { + console.warn(`⚠️ Unexpected API response for ${entity.name}`); + return []; + } + + // Get random sample of IDs + const allIds = items.map((item) => String(item[entity.idField])); + const shuffled = allIds.sort(() => Math.random() - 0.5); + return shuffled.slice(0, SAMPLE_SIZE); + } catch (error) { + console.warn(`⚠️ Error fetching ${entity.name}: ${error}`); + return []; + } +} + +/** + * Check a single page + */ +async function checkPage(path: string): Promise { + const url = `${BASE_URL}${path}`; + const start = Date.now(); + + try { + const response = await fetch(url, { + method: "GET", + headers: { + "User-Agent": "OpenML-PageChecker/1.0", + }, + }); + + const responseTime = Date.now() - start; + + // Check if response contains error indicators + const text = await response.text(); + const hasRuntimeError = + text.includes("Runtime Error") || + text.includes("Application error") || + text.includes("Internal Server Error") || + text.includes("is not configured under images") || + text.includes("Unhandled Runtime Error"); + + return { + url, + status: response.status, + ok: response.ok && !hasRuntimeError, + error: hasRuntimeError ? "Page contains runtime error" : undefined, + responseTime, + }; + } catch (error) { + return { + url, + status: "error", + ok: false, + error: error instanceof Error ? error.message : "Unknown error", + responseTime: Date.now() - start, + }; + } +} + +/** + * Main execution + */ +async function main() { + console.log(`\n🔍 OpenML Page Health Check`); + console.log(` Target: ${BASE_URL}`); + console.log(` Sample size per entity: ${SAMPLE_SIZE}`); + console.log("=".repeat(60)); + + const results: CheckResult[] = []; + + // Check static pages + console.log("\n📄 Static Pages:\n"); + for (const path of STATIC_PAGES) { + const result = await checkPage(path); + results.push(result); + printResult(path, result); + } + + // Check dynamic pages with real IDs from API + for (const entity of ENTITIES) { + console.log(`\n📦 ${entity.name} (fetching ${SAMPLE_SIZE} samples):\n`); + + const ids = await fetchEntityIds(entity); + if (ids.length === 0) { + console.log(` Skipping - no IDs fetched`); + continue; + } + + for (const id of ids) { + const path = `${entity.path}/${id}`; + const result = await checkPage(path); + results.push(result); + printResult(path, result); + } + } + + // Summary + printSummary(results); +} + +function printResult(path: string, result: CheckResult) { + const icon = result.ok ? "✅" : "❌"; + const status = typeof result.status === "number" ? result.status : "ERR"; + const time = `${result.responseTime}ms`; + + console.log(`${icon} [${status}] ${path} (${time})`); + if (result.error) { + console.log(` └─ ${result.error}`); + } +} + +function printSummary(results: CheckResult[]) { + console.log("\n" + "=".repeat(60)); + const passed = results.filter((r: CheckResult) => r.ok).length; + const failed = results.filter((r: CheckResult) => !r.ok).length; + + console.log(`\n📊 Results: ${passed} passed, ${failed} failed`); + console.log(` Total pages checked: ${results.length}`); + + if (failed > 0) { + console.log("\n❌ Failed pages:"); + const failedResults = results.filter((r) => !r.ok) as CheckResult[]; + failedResults.forEach((r) => { + console.log(` - ${r.url}`); + if (r.error) console.log(` ${r.error}`); + }); + + // Save errors to log file + saveErrorLog(failedResults); + + process.exit(1); + } else { + console.log("\n✅ All pages OK!"); + } +} + +/** + * Save errors to log file + */ +function saveErrorLog(failedResults: CheckResult[]) { + try { + // Create logs directory if it doesn't exist + if (!fs.existsSync(LOG_DIR)) { + fs.mkdirSync(LOG_DIR, { recursive: true }); + } + + const timestamp = new Date().toISOString(); + const logContent = [ + `=== OpenML Page Check Errors ===`, + `Timestamp: ${timestamp}`, + `Target: ${BASE_URL}`, + `Failed: ${failedResults.length} pages`, + ``, + `--- Failed Pages ---`, + ...failedResults.map((r) => { + const status = typeof r.status === "number" ? r.status : "ERR"; + return `[${status}] ${r.url}${r.error ? `\n Error: ${r.error}` : ""}`; + }), + ``, + `=====================================`, + ``, + ].join("\n"); + + // Append to log file + fs.appendFileSync(LOG_FILE, logContent); + console.log(`\n📝 Errors saved to: ${LOG_FILE}`); + } catch (err) { + console.warn(`⚠️ Could not save error log: ${err}`); + } +} + +main(); diff --git a/app-next/src/app/[locale]/(community)/about/page.tsx b/app-next/src/app/[locale]/(community)/about/page.tsx index 6f8b9cc1..efb869a8 100644 --- a/app-next/src/app/[locale]/(community)/about/page.tsx +++ b/app-next/src/app/[locale]/(community)/about/page.tsx @@ -1,4 +1,63 @@ -import { setRequestLocale } from "next-intl/server"; +import { setRequestLocale, getTranslations } from "next-intl/server"; +import { TableOfContents } from "@/components/about/table-of-contents"; +import { TeamSection } from "@/components/about/team-section"; +import { Card, CardContent } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; +import { Github, Mail, Users, Heart, Award, Zap } from "lucide-react"; +import type { Metadata } from "next"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string }>; +}): Promise { + const { locale } = await params; + const t = (await getTranslations({ + locale, + namespace: "home.about.meta", + })) as (key: string) => string; + + return { + title: t("title"), + description: t("description"), + keywords: [ + "OpenML", + "about", + "mission", + "open science", + "machine learning community", + "reproducible research", + "collaborative ML", + "open source AI", + ], + alternates: { + canonical: `/${locale}/about`, + }, + openGraph: { + title: t("title"), + description: t("description"), + type: "website", + url: `https://www.openml.org/${locale}/about`, + siteName: "OpenML", + images: [ + { + url: "https://www.openml.org/images/og/about.png", + width: 1200, + height: 630, + alt: "About OpenML - Open Science Machine Learning Platform", + }, + ], + }, + twitter: { + card: "summary_large_image", + title: t("title"), + description: t("description"), + site: "@open_ml", + images: ["https://www.openml.org/images/og/about.png"], + }, + }; +} export default async function AboutPage({ params, @@ -7,11 +66,302 @@ export default async function AboutPage({ }) { const { locale } = await params; setRequestLocale(locale); + const t = await getTranslations("home.about.hero"); + + const tocItems = [ + { id: "mission", title: "Our Mission", level: 2 }, + { id: "what-is-openml", title: "What is OpenML?", level: 2 }, + { id: "why-openml", title: "Why OpenML?", level: 2 }, + { id: "features", title: "Key Features", level: 2 }, + { id: "community", title: "Community", level: 2 }, + { id: "team", title: "Core Team", level: 2 }, + { id: "get-involved", title: "Get Involved", level: 2 }, + ]; return ( -
-

About Us

-

About OpenML - coming soon

+
+
+ {/* Main Content */} +
+ {/* Hero Section */} +
+

+ {t("title")} +

+

{t("subtitle")}

+
+ + {/* Mission */} +
+

Our Mission

+ + +

+ We want to make machine learning and data analysis{" "} + + simple, accessible, collaborative, and open + {" "} + with an optimal division of labour between computers and + humans. +

+

+ OpenML is committed to enabling{" "} + + reproducible science + + , fostering{" "} + + global collaboration + + , and accelerating AI research through standardized, + FAIR-compliant datasets, tasks, and model evaluations. +

+
+
+
+ + {/* What is OpenML */} +
+

What is OpenML?

+
+

+ OpenML is an{" "} + + open platform for sharing datasets, algorithms, and + experiments + {" "} + to build a global machine learning repository. It enables + researchers and practitioners to automatically share, organize, + and reuse machine learning experiments at scale. +

+

+ Think of OpenML as{" "} + GitHub for machine learning experiments — but + with automatic versioning, metadata tagging, evaluation + tracking, and collaborative benchmarking built in. +

+
+
+ + {/* Why OpenML */} +
+

Why OpenML?

+
+ + +
+ +
+

+ Reproducibility +

+

+ Every experiment is tracked with complete metadata — + algorithms, hyperparameters, datasets, metrics, and hardware + — ensuring full reproducibility. +

+
+
+ + + +
+ +
+

+ Standardization +

+

+ All datasets and tasks follow uniform protocols with + predefined train/test splits, making results directly + comparable across studies. +

+
+
+ + + +
+ +
+

Collaboration

+

+ Share workflows, compare algorithms, and build on others' + work. OpenML connects researchers worldwide in real-time. +

+
+
+ + + +
+ +
+

Meta-Learning

+

+ Query thousands of runs to discover patterns, understand + algorithm behavior, and enable automated model selection. +

+
+
+
+
+ + {/* Key Features */} +
+

Key Features

+ + +
    +
  • + +
    + + 1000s of FAIR datasets + {" "} + + — uniformly formatted, versioned, and ready to load + +
    +
  • +
  • + +
    + + Standardized tasks + {" "} + + — predefined benchmarks with fixed evaluation protocols + +
    +
  • +
  • + +
    + + Automatic experiment tracking + {" "} + + — flows (pipelines) and runs uploaded seamlessly + +
    +
  • +
  • + +
    + + Extensive APIs + {" "} + + — Python, R, Java, REST — integrate OpenML everywhere + +
    +
  • +
  • + +
    + + DOI generation + {" "} + + — make your datasets, flows, and runs citable + +
    +
  • +
  • + +
    + + Rich metadata & search + {" "} + + — machine-readable, queryable experiment logs + +
    +
  • +
+
+
+
+ + {/* Community */} +
+

Community

+

+ OpenML is built by a global community of researchers, developers, + and data scientists. We organize regular workshops, contribute to + open-source tools, and publish research advancing the field. +

+ + +
+
+
+ 25,000+ +
+
Datasets Shared
+
+
+
+ 15M+ +
+
Experiments Run
+
+
+
+ 10,000+ +
+
Active Users
+
+
+
+
+
+ + {/* Core Team */} +
+ +
+ + {/* Get Involved */} +
+

Get Involved

+

+ OpenML is an open-source project dependent on community + contributions. Whether you're a researcher, developer, educator, + or enthusiast — there's a place for you! +

+
+ + + + + + + + + +
+
+
+ + {/* Table of Contents - Right Sidebar */} + +
); } diff --git a/app-next/src/app/[locale]/(community)/meet-us/page.tsx b/app-next/src/app/[locale]/(community)/meet-us/page.tsx index 10c0311b..cbae4901 100644 --- a/app-next/src/app/[locale]/(community)/meet-us/page.tsx +++ b/app-next/src/app/[locale]/(community)/meet-us/page.tsx @@ -1,4 +1,147 @@ -import { setRequestLocale } from "next-intl/server"; +import { setRequestLocale, getTranslations } from "next-intl/server"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; +import { + Calendar, + MapPin, + Users, + ExternalLink, + Camera, + Heart, + Laptop, + Coffee, + PartyPopper, +} from "lucide-react"; +import { Alert, AlertDescription } from "@/components/ui/alert"; +import type { Metadata } from "next"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string }>; +}): Promise { + const { locale } = await params; + const t = (await getTranslations({ + locale, + namespace: "home.meetUs.meta", + })) as (key: string) => string; + + return { + title: t("title"), + description: t("description"), + keywords: [ + "OpenML hackathon", + "machine learning events", + "open science meetup", + "ML community", + "data science hackathon", + "OpenML workshop", + "machine learning conference", + ], + alternates: { + canonical: `/${locale}/meet-us`, + }, + openGraph: { + title: t("title"), + description: t("description"), + type: "website", + url: `https://www.openml.org/${locale}/meet-us`, + siteName: "OpenML", + images: [ + { + url: "https://www.openml.org/images/og/meet-us.png", + width: 1200, + height: 630, + alt: "OpenML Community Hackathons and Meetups", + }, + ], + }, + twitter: { + card: "summary_large_image", + title: t("title"), + description: t("description"), + site: "@open_ml", + images: ["https://www.openml.org/images/og/meet-us.png"], + }, + other: { + "event:organizer": "OpenML Foundation", + }, + }; +} + +// Upcoming events data +const upcomingEvents = [ + { + id: "winter-2026", + title: "2026 Winter Hackathon", + date: "February 16-20, 2026", + location: "Leiden University, Leiden, The Netherlands", + description: + "Join us at Leiden University to work on the next generation of OpenML. By day we'll be at the brand new Science Campus creating the next version of OpenML, and by night we'll relax in the cosy city center.", + registrationUrl: "https://forms.gle/iPAXC6k85k4L3fs46", + scheduleUrl: + "https://docs.google.com/document/d/1jtqKIb91sz8ry7FkJVRobSKD8CnGpwzylFSA97ZdSK4/edit?usp=sharing", + prepareUrl: "https://github.com/openml/openml.org/blob/master/meetups.md", + venueUrl: + "https://www.universiteitleiden.nl/en/dossiers/building-projects/gorlaeus-building", + isFeatured: true, + }, +]; + +// Past events for reference +const pastEvents = [ + { + year: "2024", + events: ["Spring Hackathon - Eindhoven", "Fall Workshop - Online"], + }, + { + year: "2023", + events: ["Summer Hackathon - Munich", "Winter Sprint - Amsterdam"], + }, +]; + +// JSON-LD structured data for events +function generateEventJsonLd() { + return { + "@context": "https://schema.org", + "@type": "Event", + name: "2026 Winter Hackathon", + description: + "Join us at Leiden University to work on the next generation of OpenML. By day we'll be at the brand new Science Campus creating the next version of OpenML, and by night we'll relax in the cosy city center.", + startDate: "2026-02-16", + endDate: "2026-02-20", + eventStatus: "https://schema.org/EventScheduled", + eventAttendanceMode: "https://schema.org/OfflineEventAttendanceMode", + location: { + "@type": "Place", + name: "Leiden University - Science Campus", + address: { + "@type": "PostalAddress", + addressLocality: "Leiden", + addressCountry: "NL", + }, + }, + organizer: { + "@type": "Organization", + name: "OpenML", + url: "https://www.openml.org", + }, + offers: { + "@type": "Offer", + price: "0", + priceCurrency: "EUR", + availability: "https://schema.org/InStock", + url: "https://forms.gle/iPAXC6k85k4L3fs46", + }, + }; +} export default async function MeetUsPage({ params, @@ -7,13 +150,264 @@ export default async function MeetUsPage({ }) { const { locale } = await params; setRequestLocale(locale); + const t = await getTranslations("home.meetUs"); + + const eventJsonLd = generateEventJsonLd(); return ( -
-

Meet Us

-

- Meet the OpenML team - coming soon -

-
+ <> + - - ); + return ( + + + + ); }; export class DatasetItem extends React.Component { - constructor() { - super(); - this.defaultFeatureListSizeLimit = 7; - this.featureSizeLimit = this.defaultFeatureListSizeLimit; - } + constructor() { + super(); + this.defaultFeatureListSizeLimit = 7; + this.featureSizeLimit = this.defaultFeatureListSizeLimit; + } - render() { - const featureTableColumns = [ - "", - "Feature Name", - "Type", - "Distinct/Missing Values", - "Ontology" - ]; - const qualityTableColumns = ["", "Quality Name", "Value"]; - const did = this.props.object.data_id; - // const did_padded = did.toString().padStart(4, "0"); - // const bucket_url = `${MINIO_URL}datasets/`; - // const bucket_bracket = Math.floor(did / 10000).toString().padStart(4, "0"); - // const croissant_url = bucket_url + bucket_bracket + "/" + did_padded + "/dataset_" + did + "_croissant.json"; - const croissant_url = "croissant/dataset/"+ did; - const full_croissant_url = new URL(`/croissant/dataset/${did}`, window.location.origin); + render() { + const featureTableColumns = [ + '', + 'Feature Name', + 'Type', + 'Distinct/Missing Values', + 'Ontology', + ]; + const qualityTableColumns = ['', 'Quality Name', 'Value']; + const did = this.props.object.data_id; + // const did_padded = did.toString().padStart(4, "0"); + // const bucket_url = `${MINIO_URL}datasets/`; + // const bucket_bracket = Math.floor(did / 10000).toString().padStart(4, "0"); + // const croissant_url = bucket_url + bucket_bracket + "/" + did_padded + "/dataset_" + did + "_croissant.json"; + const croissant_url = 'croissant/dataset/' + did; + const full_croissant_url = new URL( + `/croissant/dataset/${did}`, + window.location.origin + ); - const handleDownload = () => { - const datasetId = this.props.object.data_id; - const url = new URL(`/croissant/dataset/${datasetId}`, window.location.origin); - const filename = `dataset_${datasetId}_croissant.json`; - - const link = document.createElement("a"); - link.href = url; - link.download = filename; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - }; + const handleDownload = () => { + const datasetId = this.props.object.data_id; + const url = new URL( + `/croissant/dataset/${datasetId}`, + window.location.origin + ); + const filename = `dataset_${datasetId}_croissant.json`; - return ( - - - - - - {context => ( - - - { - e.preventDefault(); // Prevents default link behavior - handleDownload(); - }} - > - - - Croissant - - - - - - - - xml - - - - - - - - json - - - - - - - - download - - - - - - - - edit - - - - - )} - - - - - -    {this.props.object.name} - - - - - - - - - {" "} - {this.props.object.date.split(" ")[0]} - - - - { this.props.object.kaggle_url && - - - } - label="Find on Kaggle" - href={this.props.object.kaggle_url} - component="a" - clickable - /> - - } + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }; - - } - href={"search?type=data&sort=version&status=any&order=asc&exact_name=" + this.props.object.name} - component="a" - clickable - /> - + return ( + + + + + + {(context) => ( + + + { + e.preventDefault(); // Prevents default link behavior + handleDownload(); + }} + > + + + + Croissant + + + + + + + + + xml + + + + + + + + json + + + + + + + + + download + + + + + + + + + edit + + + + + )} + + + + + +    {this.props.object.name} + + + + + + + + + + + + + + + + + + {' '} + {this.props.object.date.split(' ')[0]} + + + + + + {this.props.object.kggl_url && ( + + + + + } + label='Find on kggl' + href={ + this.props.object + .kggl_url + } + component='a' + clickable + /> + + )} - - {this.props.object.uploader ? this.props.object.uploader.charAt(0) : "X"} - } - label={this.props.object.uploader} - href={"search?type=user&id=" + this.props.object.uploader_id} - component="a" - clickable - /> - - - - - - + + + + } + href={ + 'search?type=data&sort=version&status=any&order=asc&exact_name=' + + this.props.object.name + } + component='a' + clickable + /> + + - - - {this.props.tags} - - - + + + + {this.props.object.uploader + ? this.props.object.uploader.charAt( + 0 + ) + : 'X'} + + } + label={this.props.object.uploader} + href={ + 'search?type=user&id=' + + this.props.object.uploader_id + } + component='a' + clickable + /> + + + + + + + + + + + + + - - - - - Description - -
- -
-
-
-
- - - - ( - - )} - maxLength={7} - /> - - - + + + {' '} + {this.props.tags} + + +
- - - - ( - - )} - columns={qualityTableColumns} - maxLength={7} - /> - - - -
-
- ); - } + + + + + Description + +
+ +
+
+
+
+ + + + ( + + )} + maxLength={7} + /> + + + + + + + + ( + + )} + columns={qualityTableColumns} + maxLength={7} + /> + + + + + + ); + } } diff --git a/server/user/views.py b/server/user/views.py index 05b21b8d..960cbb59 100644 --- a/server/user/views.py +++ b/server/user/views.py @@ -13,7 +13,7 @@ ) from pathlib import Path -from server.extensions import Session +from server.extensions import Session, argon2 from server.extensions import jwt from server.user.models import User, UserGroups @@ -83,6 +83,73 @@ def login(): return jsonify(access_token=access_token), 200 +@user_blueprint.route("/register", methods=["POST"]) +def register(): + """ + Register new user + + 1. Takes JSON request with first_name, last_name, email, password + 2. Creates new user account + 3. Sends confirmation email + 4. Returns success message + """ + + jobj = request.get_json() + + # Validate required fields + required_fields = ["first_name", "last_name", "email", "password"] + for field in required_fields: + if field not in jobj or not jobj[field]: + return jsonify({"msg": f"{field} is required"}), 400 + + with Session() as session: + # Check if user already exists + existing_user = session.query(User).filter_by(email=jobj["email"]).first() + if existing_user: + return jsonify({"msg": "Email already registered"}), 400 + + # Generate username from email (before @) + username = jobj["email"].split("@")[0] + + # Check if username is taken, add number if needed + base_username = username + counter = 1 + while session.query(User).filter_by(username=username).first(): + username = f"{base_username}{counter}" + counter += 1 + + # Create new user + new_user = User( + username=username, + email=jobj["email"], + first_name=jobj["first_name"], + last_name=jobj["last_name"], + active=0, # Requires email confirmation + ) + new_user.set_password(jobj["password"]) + + session.add(new_user) + session.commit() + + # Send confirmation email + try: + confirmation_email(new_user.email, new_user.username) + except Exception as e: + print(f"Failed to send confirmation email: {e}") + # Don't fail registration if email fails + + return ( + jsonify( + { + "msg": "Account created successfully. Please check your email to confirm your account.", + "username": username, + "email": jobj["email"], + } + ), + 201, + ) + + @user_blueprint.route("/profile", methods=["GET", "POST"]) @jwt_required() def profile(): @@ -144,7 +211,9 @@ def image(): f = request.files["file"] Path("dev_data/" + str(user.username)).mkdir(parents=True, exist_ok=True) f.save( - os.path.join("dev_data/" + str(user.username) + "/", secure_filename(f.filename)) + os.path.join( + "dev_data/" + str(user.username) + "/", secure_filename(f.filename) + ) ) path = "imgs/dev_data/" + str(user.username) + "/" + secure_filename(f.filename) user.update_image_address(path) @@ -184,6 +253,8 @@ def apikey(): current_user = get_jwt_identity() with Session() as session: user = session.query(User).filter(User.username == current_user).first() + if not user: + return jsonify({"msg": "User not found"}), 404 if request.method == "GET": api_key = user.session_hash return jsonify({"apikey": api_key}), 200 @@ -241,10 +312,229 @@ def confirm_user(): return jsonify({"msg": "User confirmed"}), 200 +@user_blueprint.route("/auth/oauth/github", methods=["POST"]) +def oauth_github(): + """ + Handle GitHub OAuth authentication + + Expected JSON payload: + { + "provider": "github", + "providerId": "12345678", # GitHub user ID + "email": "user@example.com", + "name": "John Doe", + "image": "https://avatars.githubusercontent.com/u/12345678" + } + + Returns JWT access token for authenticated user + """ + data = request.get_json() + + if not data or not data.get("providerId") or not data.get("email"): + return jsonify({"msg": "Missing required OAuth data"}), 400 + + provider_id = data["providerId"] + email = data["email"] + name = data.get("name", "") + image = data.get("image", "") + + with Session() as session: + # Check if user already exists by email + user = session.query(User).filter_by(email=email).first() + + if user: + # Existing user - link GitHub account if not already linked + # You could store provider_id in a new column or table for OAuth linking + # For now, just return access token + access_token = create_access_token(identity=user.username) + # Ensure user has an API key (session_hash) + if not user.session_hash: + user.set_session_hash() + session.merge(user) + session.commit() + return ( + jsonify( + access_token=access_token, + id=user.id, + username=user.username, + email=user.email, + image=user.image or image, + apikey=user.session_hash, + ), + 200, + ) + else: + # New user - create account from OAuth data + # Generate username from email or name + from datetime import datetime + + username = email.split("@")[0] + + # Check if username exists, append number if needed + existing_user = session.query(User).filter_by(username=username).first() + if existing_user: + username = f"{username}_{provider_id[:6]}" + + # Create new user + new_user = User( + username=username, + email=email, + first_name=name.split()[0] if name else "", + last_name=" ".join(name.split()[1:]) if len(name.split()) > 1 else "", + image=image, + active="1", # Auto-activate OAuth users + bio="", + company="", + country="", + ip_address=request.remote_addr or "0.0.0.0", + created_on=datetime.now(), + password=argon2.generate_password_hash( + secrets.token_hex(32) + ), # Random password + ) + + session.add(new_user) + session.commit() + + # Create user group + user_group = UserGroups(user_id=new_user.id) + user_group.set_group() + session.add(user_group) + session.commit() + + # Generate API key for new user + new_user.set_session_hash() + session.merge(new_user) + session.commit() + + # Create access token + access_token = create_access_token(identity=new_user.username) + + return ( + jsonify( + access_token=access_token, + id=new_user.id, + username=new_user.username, + email=new_user.email, + image=new_user.image, + apikey=new_user.session_hash, + ), + 201, + ) + + +@user_blueprint.route("/auth/oauth/google", methods=["POST"]) +def oauth_google(): + """ + Handle Google OAuth authentication + + Expected JSON payload: + { + "provider": "google", + "providerId": "1234567890", # Google user ID + "email": "user@gmail.com", + "name": "John Doe", + "image": "https://lh3.googleusercontent.com/..." + } + + Returns JWT access token for authenticated user + """ + data = request.get_json() + + if not data or not data.get("providerId") or not data.get("email"): + return jsonify({"msg": "Missing required OAuth data"}), 400 + + provider_id = data["providerId"] + email = data["email"] + name = data.get("name", "") + image = data.get("image", "") + + with Session() as session: + # Check if user already exists by email + user = session.query(User).filter_by(email=email).first() + + if user: + # Existing user - return access token + access_token = create_access_token(identity=user.username) + # Ensure user has an API key (session_hash) + if not user.session_hash: + user.set_session_hash() + session.merge(user) + session.commit() + return ( + jsonify( + access_token=access_token, + id=user.id, + username=user.username, + email=user.email, + image=user.image or image, + apikey=user.session_hash, + ), + 200, + ) + else: + # New user - create account from OAuth data + from datetime import datetime + + username = email.split("@")[0] + + # Check if username exists + existing_user = session.query(User).filter_by(username=username).first() + if existing_user: + username = f"{username}_{provider_id[:6]}" + + # Create new user + new_user = User( + username=username, + email=email, + first_name=name.split()[0] if name else "", + last_name=" ".join(name.split()[1:]) if len(name.split()) > 1 else "", + image=image, + active="1", # Auto-activate OAuth users + bio="", + company="", + country="", + ip_address=request.remote_addr or "0.0.0.0", + created_on=datetime.now(), + password=argon2.generate_password_hash( + secrets.token_hex(32) + ), # Random password + ) + + session.add(new_user) + session.commit() + + # Create user group + user_group = UserGroups(user_id=new_user.id) + user_group.set_group() + session.add(user_group) + session.commit() + + # Generate API key for new user + new_user.set_session_hash() + session.merge(new_user) + session.commit() + + # Create access token + access_token = create_access_token(identity=new_user.username) + + return ( + jsonify( + access_token=access_token, + id=new_user.id, + username=new_user.username, + email=new_user.email, + image=new_user.image, + apikey=new_user.session_hash, + ), + 201, + ) + + def user_from_token(session: Session, data, token_name): url = data["url"] parsed = urlparse(url) - (token, ) = parse_qs(parsed.query)["token"] + (token,) = parse_qs(parsed.query)["token"] user = session.query(User).filter_by(**{token_name: token}).first() if not user: diff --git a/test_oauth_endpoints.py b/test_oauth_endpoints.py new file mode 100644 index 00000000..e96c4ab1 --- /dev/null +++ b/test_oauth_endpoints.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 +""" +Test OAuth endpoints locally + +Usage: + python test_oauth_endpoints.py +""" + +import requests +import json + +# Adjust this to your local Flask server +BASE_URL = "http://localhost:5000" + + +def test_github_oauth(): + """Test GitHub OAuth endpoint""" + print("\n🧪 Testing GitHub OAuth endpoint...") + + payload = { + "provider": "github", + "providerId": "test_12345678", + "email": "test_github@example.com", + "name": "Test GitHub User", + "image": "https://avatars.githubusercontent.com/u/12345678", + } + + try: + response = requests.post( + f"{BASE_URL}/api/v1/user/auth/oauth/github", + json=payload, + headers={"Content-Type": "application/json"}, + ) + + print(f"Status Code: {response.status_code}") + print(f"Response: {json.dumps(response.json(), indent=2)}") + + if response.status_code in [200, 201]: + print("✅ GitHub OAuth endpoint works!") + return response.json().get("access_token") + else: + print("❌ GitHub OAuth endpoint failed") + return None + + except Exception as e: + print(f"❌ Error: {e}") + return None + + +def test_google_oauth(): + """Test Google OAuth endpoint""" + print("\n🧪 Testing Google OAuth endpoint...") + + payload = { + "provider": "google", + "providerId": "test_1234567890", + "email": "test_google@gmail.com", + "name": "Test Google User", + "image": "https://lh3.googleusercontent.com/test", + } + + try: + response = requests.post( + f"{BASE_URL}/api/v1/user/auth/oauth/google", + json=payload, + headers={"Content-Type": "application/json"}, + ) + + print(f"Status Code: {response.status_code}") + print(f"Response: {json.dumps(response.json(), indent=2)}") + + if response.status_code in [200, 201]: + print("✅ Google OAuth endpoint works!") + return response.json().get("access_token") + else: + print("❌ Google OAuth endpoint failed") + return None + + except Exception as e: + print(f"❌ Error: {e}") + return None + + +def test_existing_user(): + """Test OAuth with existing user (same email)""" + print("\n🧪 Testing OAuth with existing user...") + + # Use same email as first test + payload = { + "provider": "github", + "providerId": "different_id_789", + "email": "test_github@example.com", # Same email as before + "name": "Same User Different Provider", + "image": "https://example.com/image.jpg", + } + + try: + response = requests.post( + f"{BASE_URL}/api/v1/user/auth/oauth/github", + json=payload, + headers={"Content-Type": "application/json"}, + ) + + print(f"Status Code: {response.status_code}") + print(f"Response: {json.dumps(response.json(), indent=2)}") + + if response.status_code == 200: + print("✅ Existing user login works!") + else: + print("⚠️ Expected 200 for existing user") + + except Exception as e: + print(f"❌ Error: {e}") + + +def verify_token(token): + """Verify JWT token works with protected endpoint""" + if not token: + print("\n⚠️ No token to verify") + return + + print("\n🧪 Testing token with /verifytoken endpoint...") + + try: + response = requests.get( + f"{BASE_URL}/api/v1/user/verifytoken", + headers={"Authorization": f"Bearer {token}"}, + ) + + print(f"Status Code: {response.status_code}") + print(f"Response: {response.text}") + + if response.status_code == 200: + print("✅ JWT token is valid!") + else: + print("❌ Token verification failed") + + except Exception as e: + print(f"❌ Error: {e}") + + +def main(): + print("=" * 60) + print("🚀 OAuth Endpoints Test Suite") + print("=" * 60) + print(f"\nTesting against: {BASE_URL}") + print("\n⚠️ Make sure your Flask server is running!") + print(" Run: cd server && flask run") + + # Test GitHub OAuth (new user) + github_token = test_github_oauth() + + # Test Google OAuth (new user) + google_token = test_google_oauth() + + # Test existing user + test_existing_user() + + # Verify one of the tokens + if github_token: + verify_token(github_token) + + print("\n" + "=" * 60) + print("✅ Testing complete!") + print("=" * 60) + + +if __name__ == "__main__": + main()