diff --git a/.claude/settings.json b/.claude/settings.json
new file mode 100644
index 00000000..d19b7e12
--- /dev/null
+++ b/.claude/settings.json
@@ -0,0 +1,5 @@
+{
+ "enabledPlugins": {
+ "impeccable@impeccable": false
+ }
+}
diff --git a/.eslintrc.js b/.eslintrc.js
index c6906509..c94fa9ba 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -2,9 +2,9 @@ module.exports = {
root: true,
extends: '@react-native',
rules: {
- 'comma-dangle': ['error', 'never']
- },
- "indent": ["error", 4],
- "react/jsx-indent": ["error", 4],
- "react/jsx-indent-props": ["error", 4]
+ 'comma-dangle': ['error', 'never'],
+ 'indent': ['error', 4],
+ 'react/jsx-indent': ['error', 4],
+ 'react/jsx-indent-props': ['error', 4]
+ }
};
diff --git a/.prettierrc.js b/.prettierrc.js
index 2b540746..c36d3d27 100644
--- a/.prettierrc.js
+++ b/.prettierrc.js
@@ -1,7 +1,8 @@
module.exports = {
- arrowParens: 'avoid',
- bracketSameLine: true,
- bracketSpacing: false,
- singleQuote: true,
- trailingComma: 'all',
+ arrowParens: 'avoid',
+ bracketSameLine: true,
+ bracketSpacing: false,
+ singleQuote: true,
+ trailingComma: 'none',
+ tabWidth: 4,
};
diff --git a/App.tsx b/App.tsx
index 129028e9..da213cf1 100644
--- a/App.tsx
+++ b/App.tsx
@@ -1,33 +1,39 @@
import 'react-native-gesture-handler';
import React from 'react';
-import { Provider } from 'react-redux';
-import { PersistGate } from 'redux-persist/integration/react';
-import { NavigationContainer } from '@react-navigation/native';
-import { MainRoutes } from './routes';
+import {Provider} from 'react-redux';
+import {PersistGate} from 'redux-persist/integration/react';
+import {NavigationContainer} from '@react-navigation/native';
+import {GestureHandlerRootView} from 'react-native-gesture-handler';
+import {MainRoutes} from './routes';
import * as Sentry from '@sentry/react-native';
import Config from 'react-native-config';
import configureAppStore from './store';
-import { IS_PRODUCTION } from './actions/types';
+import {IS_PRODUCTION} from './actions/types';
+import setupAxiosInterceptors from './utils/setupAxiosInterceptors';
import './i18n';
const SENTRY_DSN = Config.SENTRY_DSN;
-const { store, persistor } = configureAppStore();
+const {store, persistor} = configureAppStore();
-const App = () => {
- if (IS_PRODUCTION) {
- Sentry.init({
- dsn: SENTRY_DSN
- });
- }
+setupAxiosInterceptors(store);
+
+if (IS_PRODUCTION) {
+ Sentry.init({
+ dsn: SENTRY_DSN
+ });
+}
+const App = () => {
return (
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
);
};
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 00000000..63ddba64
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,121 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+OpenLitterMap is a React Native mobile app (iOS & Android) for crowdsourced litter mapping. Users photograph litter, tag it by category, and upload geotagged data to the OpenLitterMap Laravel backend API. Authentication uses Laravel Sanctum token-based auth (login with email or username).
+
+## Common Commands
+
+```bash
+# Install dependencies
+npm install
+
+# Start Metro bundler
+npm start
+
+# Run on iOS / Android
+npm run ios
+npm run android
+
+# Install iOS native dependencies
+cd ios && bundle exec pod install && cd ..
+
+# Lint
+npm run lint
+
+# Run tests
+npm test
+
+# Run a single test file
+npx jest path/to/test.js
+```
+
+Runtime: **Node v20.20.0**, **npm 10.8.2**
+
+Package manager: **npm** (v10.8.2). Both `yarn.lock` and `package-lock.json` exist; prefer npm.
+
+## Architecture
+
+### State Management
+
+Redux Toolkit with `createSlice` and `createAsyncThunk`. The store is configured in `store/index.js` with `redux-persist` (AsyncStorage backend, `auth` and `images` slices persisted). The `images` transform only persists `imagesArray` — upload counters reset on relaunch. In dev mode, `redux-immutable-state-invariant` middleware is included.
+
+Reducers in `reducers/`:
+- `auth_reducer` - Authentication, user profile, Sanctum token management
+- `tags_reducer` - Tag data fetched from API, search index (objectEntries, categoriesById, entriesByCloId)
+- `gallery_reducer` / `images_reducer` - Photo selection, v5 tagging (tagsV5), swiperIndex, GPS/EXIF handling
+- `shared_reducer` - Cross-feature shared state (upload modal, app version)
+- `settings_reducer` - User preferences
+- `stats_reducer` / `leaderboards_reducer` - Statistics and rankings
+- `team_reducer` - Team features
+- `my_uploads_reducer` - Upload history and management
+- `locations_reducer` - Location hierarchy data
+
+API calls use **axios** with Bearer token auth, hitting endpoints on the `URL` from `actions/types.js`.
+
+### Navigation
+
+React Navigation v6 with `@react-navigation/stack` and `@react-navigation/material-top-tabs`.
+
+- `routes/MainRoutes.js` - Root navigator. Shows `AuthStack` when no token, otherwise the main app stack.
+- `routes/AuthStack.js` - Welcome → Auth (login/signup) flow.
+- `routes/TabRoutes.tsx` - Bottom tab navigator: Home, Team, Global Data, Leaderboards, User Stats.
+- `routes/PermissionStack.tsx` - Camera/gallery permission request flow.
+- Modal screens: AddTagScreen, Album, Settings, Update, MyUploads.
+
+### Screen Organization
+
+Each screen lives in `screens//` with a main screen component and a subdirectory for sub-components (e.g., `screens/home/homeComponents/`, `screens/addTag/components/`, `screens/userStats/userComponents/`).
+
+Shared/reusable components are in `screens/components/` with barrel exports via `index.ts`:
+- `theme/colors.ts` - App color palette (`Colors.accent`, `Colors.error`, etc.)
+- `theme/fonts.ts` - Font definitions
+- `typography/` - Styled text components (Title, SubTitle, Body, Caption, StyledText)
+- `Button.tsx`, `Header.js`, `AnimatedCircle.tsx`, `StatsGrid`, `IconStatsCard`, `CustomTextInput`
+
+### Environment Configuration
+
+Uses `react-native-config` to load `.env` variables. Key env vars defined in `actions/types.js`:
+- `CURRENT_ENVIRONMENT` - `"production"` or `"local"`
+- `OLM_ENDPOINT` - Production API URL
+- `LOCAL_OLM_ENDPOINT` - Local dev API URL
+- `SENTRY_DSN` - Error tracking (only initialized in production)
+
+### Internationalization
+
+i18next with `react-i18next`. Configured in `i18n.js`. Translation keys are **full British English string literals** (key = English display text). All translation files use a single flat JSON structure with keys sorted alphabetically A-Z. See `Translations.md` for full architecture details.
+
+Translation files live in `assets/langs/` with 8 languages: en, ar, de, es, fr, ie, nl, pt. Each language directory contains `{lang}.json` (flat UI strings), `litter.json` (nested litter taxonomy), and `index.js`.
+
+The `litter.json` files use a nested structure with 15 sections (categories, 12 litter categories, materials, types) derived from the backend `TagsConfig`. Keys are snake_case identifiers matching the backend. Access via `t('litter.smoking.butts')`, `t('litter.materials.plastic')`, etc. Unlike UI strings, litter keys are **translated per language** — each language has its own `litter.json` with identical keys but translated values (174 key-value pairs per language).
+
+**When adding a new user-facing string:** Add the key to `en/en.json` (key = value for English), then translate and add it to ALL other language files (`ar.json`, `de.json`, `es.json`, `fr.json`, `ie.json`, `nl.json`, `pt.json`). Keep all files sorted alphabetically A-Z by key. Use `t('Your new string')` or `dictionary="Your new string"` in code.
+
+**When adding a new litter key:** Add it to `en/litter.json` in the appropriate section, then translate and add it to ALL other `litter.json` files. Keep keys sorted alphabetically within each section.
+
+### Litter Data Model
+
+Tag data is fetched from the API (`GET /api/tags/all`) and cached in AsyncStorage (7-day TTL) by `tags_reducer.js`. Per-image tags are stored as `tagsV5: [{ cloId, quantity, materials, brands, customTags }]` in `images_reducer`. The `cloId` (category_litter_object_id) uniquely identifies an (object, category) pair. Display names are resolved at render time from `entriesByCloId`. Materials and brands are indexed by ID in `materialsById` and `brandsById`. Image-level custom tags (`image.customTags`) are stored separately and merged into the first tag's `custom_tags` on upload.
+
+## Code Style
+
+- ESLint extends `@react-native` with 4-space indentation and no trailing commas
+- Prettier: single quotes, no bracket spacing, arrow parens avoided, trailing commas
+- Mixed JS/TS codebase (newer files tend to be TypeScript)
+- Screens export via barrel files (`index.js` or `index.ts`)
+
+## Key Dependencies
+
+- `@shopify/flash-list` for performant lists
+- `formik` + `yup` for form handling/validation
+- `lottie-react-native` for animations
+- `react-native-permissions` for camera/location/photo library permissions (iOS permissions listed in `reactNativePermissionsIOS` in package.json)
+- `@sentry/react-native` for error tracking (production only). Sentry Cocoa SDK version is overridden to 8.46.0+ via `postinstall` script for Xcode 26 compatibility
+- `dayjs` for date formatting
+
+## Build Notes
+
+- **Xcode 26+/macOS Tahoe**: Sentry Cocoa SDK < 8.46.0 fails to compile (`std::allocator does not support const types`). The `postinstall` script in package.json patches the RNSentry podspec to use 8.46.0. After `npm install`, run `cd ios && pod update Sentry && cd ..` if the `Podfile.lock` still references an older version.
+- After modifying native dependencies: clean Xcode build folder (Cmd+Shift+K) and rebuild
diff --git a/Gemfile.lock b/Gemfile.lock
index 4ca72a19..892cf5f2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,23 +1,28 @@
GEM
remote: https://rubygems.org/
specs:
- CFPropertyList (3.0.7)
+ CFPropertyList (3.0.8)
+ activesupport (7.0.10)
base64
- nkf
- rexml
- activesupport (6.1.7.8)
+ benchmark (>= 0.3)
+ bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
+ drb
i18n (>= 1.6, < 2)
+ logger (>= 1.4.2)
minitest (>= 5.1)
+ mutex_m
+ securerandom (>= 0.3)
tzinfo (~> 2.0)
- zeitwerk (~> 2.3)
- addressable (2.8.7)
- public_suffix (>= 2.0.2, < 7.0)
+ addressable (2.8.9)
+ public_suffix (>= 2.0.2, < 8.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
atomos (0.1.3)
- base64 (0.2.0)
+ base64 (0.3.0)
+ benchmark (0.5.0)
+ bigdecimal (4.0.1)
claide (1.1.0)
cocoapods (1.14.3)
addressable (~> 2.8)
@@ -57,41 +62,45 @@ GEM
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
- concurrent-ruby (1.3.3)
+ concurrent-ruby (1.3.6)
+ drb (2.2.3)
escape (0.0.4)
- ethon (0.16.0)
+ ethon (0.15.0)
ffi (>= 1.15.0)
- ffi (1.17.0)
+ ffi (1.17.3)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
- httpclient (2.8.3)
- i18n (1.14.5)
+ httpclient (2.9.0)
+ mutex_m
+ i18n (1.14.8)
concurrent-ruby (~> 1.0)
- json (2.7.2)
- minitest (5.24.1)
+ json (2.18.1)
+ logger (1.7.0)
+ minitest (6.0.2)
+ drb (~> 2.0)
+ prism (~> 1.5)
molinillo (0.8.0)
- nanaimo (0.3.0)
+ mutex_m (0.3.0)
+ nanaimo (0.4.0)
nap (1.1.0)
netrc (0.11.0)
- nkf (0.2.0)
+ prism (1.9.0)
public_suffix (4.0.7)
- rexml (3.2.9)
- strscan
+ rexml (3.4.4)
ruby-macho (2.5.1)
- strscan (3.1.0)
- typhoeus (1.4.1)
- ethon (>= 0.9.0)
+ securerandom (0.4.1)
+ typhoeus (1.5.0)
+ ethon (>= 0.9.0, < 0.16.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
- xcodeproj (1.24.0)
+ xcodeproj (1.27.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
- nanaimo (~> 0.3.0)
- rexml (~> 3.2.4)
- zeitwerk (2.6.16)
+ nanaimo (~> 0.4.0)
+ rexml (>= 3.3.6, < 4.0)
PLATFORMS
ruby
@@ -101,7 +110,7 @@ DEPENDENCIES
cocoapods (>= 1.13, < 1.15)
RUBY VERSION
- ruby 2.6.10p210
+ ruby 3.3.6p108
BUNDLED WITH
- 1.17.2
+ 2.5.22
diff --git a/TODO.md b/TODO.md
new file mode 100644
index 00000000..e6634b62
--- /dev/null
+++ b/TODO.md
@@ -0,0 +1,71 @@
+# TODO — Dependency Upgrades
+
+Last reviewed: 2026-03-01
+
+## Quick Wins (low risk, no blockers)
+
+- [ ] `react-native-safe-area-context` 4.10 → 5.x — No API changes, only requires RN ≥ 0.74
+- [ ] `react-native-pager-view` 6.3 → 8.x — API-compatible, iOS rewritten in SwiftUI
+- [ ] `lottie-react-native` 6.7 → 7.x — No code changes from 6.7, adds Fabric support
+- [ ] `i18next` 23 → 25 — `initImmediate` renamed to `initAsync`, check `i18n.js`
+- [ ] `typescript` 5.0 → 5.9 — Smooth incremental path, may surface new type errors
+- [ ] `prettier` 2 → 3 — `trailingComma` default changes to `"all"`, pin it to match ESLint config (`"none"`)
+
+## Upgrade With Care (individual PRs, test each)
+
+- [ ] `react-native-permissions` 4 → 5 — Requires Xcode 16, Android codebase rewritten in Kotlin. No API changes to call sites.
+- [ ] `react-native-device-info` 11 → 15 — `getUniqueId()` changed from per-user to per-device in v12 (audit usage). Requires `compileSdk 34+` in v15.
+- [ ] `react-native-actions-sheet` 0.9 → 10 — `payload` → `returnValue`, `onChange` signature changed. Peer deps (reanimated, safe-area-context) already present.
+- [ ] `eslint` 8 → 9 — Must migrate `.eslintrc` to flat config (`eslint.config.js`). Migration CLI tool available (`@eslint/migrate-config`).
+
+## React Native Upgrade (big coordinated project)
+
+Upgrade path: **0.74 → 0.76 → 0.78 → 0.82 → 0.84**
+
+### What we get
+- New Architecture (Fabric/TurboModules) — enabled by default from 0.76
+- React 19 — ships from 0.78 (hooks changes, `forwardRef` no longer needed, new `use()` API)
+- Hermes V1 — 10-15% faster Time to Interactive, smaller memory footprint (default from 0.84)
+- Precompiled iOS builds — up to 10x faster build times (default from 0.84)
+- Metro v0.82 — up to 3x faster startup via deferred hashing (from 0.79)
+- Legacy architecture fully removed in 0.82
+
+### Platform version changes
+| RN Version | Android min | iOS min |
+|------------|-------------|---------|
+| 0.74 (current) | API 23 (Android 6) | 13.4 |
+| 0.76+ | **API 24 (Android 7)** | **15.1** |
+
+### Packages unlocked by the RN upgrade
+These cannot be upgraded until React Native is upgraded:
+
+- [ ] `react-native` 0.74 → 0.84
+- [ ] `react` 18.3 → 19.x (required from RN 0.78)
+- [ ] `@react-native/*` (babel-preset, eslint-config, metro-config, typescript-config) 0.74 → 0.84
+- [ ] `@react-navigation/*` v6 → v7 — `navigate()` no longer pops back (use `popTo()`), nested navigation requires explicit parent screen, option renames (`headerBackTitleVisible` → `headerBackButtonDisplayMode`, `animationEnabled` → `animation`, etc.), custom themes need `fonts` property
+- [ ] `react-native-screens` 3 → 4 — Coupled with React Navigation v7
+- [ ] `react-native-reanimated` 3 → 4 — New Architecture only. `react-native-worklets` becomes required peer dep, `useAnimatedGestureHandler` removed, `withSpring` behavior changed
+- [ ] `@shopify/flash-list` 1 → 2 — New Architecture only. Ground-up rewrite, `estimatedItemSize` removed (auto-sizing), `MasonryFlashList` replaced by ``, ref type changed
+- [ ] `@sentry/react-native` 5 → 8 — Requires iOS 15+. Would remove the postinstall Cocoa SDK hack. JS SDK jumps v7→v10, `tracePropagationTargets` default changes (may inject headers into axios requests — set explicitly after upgrade)
+- [ ] `lottie-react-native` 7 → latest with React 19 support
+- [ ] `react-native-pager-view` 8 → latest
+- [ ] `@react-native-async-storage/async-storage` 1 → 3
+
+## Audit Status
+
+- 8 low severity vulnerabilities remaining (all `fast-xml-parser` in RN CLI — only fixable by upgrading react-native)
+- All semver-compatible updates applied as of 2026-03-01
+
+## Other Notes
+
+- `moment` is referenced in CLAUDE.md but not in package.json — was replaced by `dayjs`
+- `packageManager` field in package.json still references `yarn@3.6.4` — using npm locally
+
+---
+
+# TODO — Phase 4 Mobile Features
+
+- [ ] **Public profile screen** — View other users' profiles (stats, recent uploads, level)
+- [ ] **Location-scoped leaderboards** — Leaderboards filtered by city/country/region
+- [ ] **Achievements display** — Show earned achievements/badges on profile
+- [ ] **User photo map** — Map view of the current user's uploaded photos
diff --git a/Translations.md b/Translations.md
new file mode 100644
index 00000000..ddd0f7d3
--- /dev/null
+++ b/Translations.md
@@ -0,0 +1,121 @@
+# Translations
+
+## Architecture
+
+Translation keys are **full British English string literals** where key = English display text. All translation files use a single flat JSON structure with keys sorted alphabetically A-Z.
+
+### File Structure
+
+Each language directory contains:
+- `{lang}.json` - Flat key-value pairs (English key -> translated value)
+- `litter.json` - Litter taxonomy (nested, kept separate for dynamic lookup)
+- `index.js` - Combines both into a single export
+
+```
+assets/langs/
+ en/ - English (source language)
+ ar/ - Arabic
+ de/ - German
+ es/ - Spanish
+ fr/ - French
+ ie/ - Irish
+ nl/ - Dutch
+ pt/ - Portuguese
+```
+
+### How Keys Work
+
+Keys are the English text itself:
+```json
+{
+ "Email Address": "Adresse e-mail",
+ "Password": "Mot de passe"
+}
+```
+
+In code, use keys via `t()` or the `dictionary` prop:
+```jsx
+t('Email Address')
+
+```
+
+Interpolation uses i18next `{{variable}}` syntax:
+```json
+{
+ "You have uploaded {{count}} photos": "Vous avez téléversé {{count}} photo(s)"
+}
+```
+
+### Litter Namespace
+
+The `litter.json` file uses a **nested structure** derived from the backend `TagsConfig`. It is accessed via dot notation:
+```js
+t('litter.smoking.butts') // -> "Cigarette Butts"
+t('litter.categories.alcohol') // -> "Alcohol"
+t('litter.materials.plastic') // -> "Plastic"
+t('litter.types.beer') // -> "Beer"
+```
+
+Unlike the flat `{lang}.json` files, `litter.json` is **translated per language** — each language directory has its own `litter.json` with identical keys but translated values.
+
+#### Litter Sections
+
+| Section | Description | Example key |
+|---------|-------------|-------------|
+| `categories` | 12 category display names | `litter.categories.smoking` |
+| `alcohol` | Alcohol-related litter items (12) | `litter.alcohol.bottle` |
+| `electronics` | Electronic waste items (6) | `litter.electronics.battery` |
+| `food` | Food-related litter items (16) | `litter.food.crisp_packet` |
+| `industrial` | Industrial waste items (14) | `litter.industrial.bricks` |
+| `marine` | Marine/coastal litter items (9) | `litter.marine.fishing_net` |
+| `materials` | Material types (28) | `litter.materials.plastic` |
+| `medical` | Medical waste items (9) | `litter.medical.syringe` |
+| `personal_care` | Personal care items (13) | `litter.personal_care.wipes` |
+| `pets` | Pet-related waste (3) | `litter.pets.dog_waste` |
+| `smoking` | Smoking-related litter (12) | `litter.smoking.butts` |
+| `softdrinks` | Soft drink items (13) | `litter.softdrinks.straw` |
+| `types` | Beverage/content types (17) | `litter.types.beer` |
+| `unclassified` | Unclassified items (1) | `litter.unclassified.other` |
+| `vehicles` | Vehicle-related litter (9) | `litter.vehicles.tyre` |
+
+**Total: 174 key-value pairs per language.**
+
+Keys are snake_case identifiers matching the backend `TagsConfig` (e.g. `cigarette_box`, `broken_glass`, `oil_drum`). These keys must stay in sync with the backend.
+
+## Available Languages
+
+| Code | Language | File |
+|------|------------|---------------|
+| en | English | en/en.json |
+| ar | Arabic | ar/ar.json |
+| de | German | de/de.json |
+| es | Spanish | es/es.json |
+| fr | French | fr/fr.json |
+| ie | Irish | ie/ie.json |
+| nl | Dutch | nl/nl.json |
+| pt | Portuguese | pt/pt.json |
+
+## Adding a New Translation Key
+
+When adding a new user-facing string:
+
+1. Add the key to `assets/langs/en/en.json` with key = value (English text)
+2. Add the translated value to ALL other language files (`ar.json`, `de.json`, `es.json`, `fr.json`, `ie.json`, `nl.json`, `pt.json`)
+3. Keep all files sorted alphabetically A-Z by key
+4. Use the key in code via `t('Your new string')` or `dictionary="Your new string"`
+
+## Adding a New Litter Key
+
+When the backend `TagsConfig` adds a new category, object, material, or type:
+
+1. Add the key to `assets/langs/en/litter.json` in the appropriate section with the English display name
+2. Add the translated value to ALL other `litter.json` files (`ar`, `de`, `es`, `fr`, `ie`, `nl`, `pt`)
+3. Keep keys sorted alphabetically within each section
+
+## Adding a New Language
+
+1. Create a new directory: `assets/langs/{code}/`
+2. Copy `en/en.json` and translate all values
+3. Copy `en/litter.json` and translate all values (keys stay the same, values get translated)
+4. Create `index.js` following the same pattern as other languages
+5. Register the language in `i18n.js`
diff --git a/actions/types.js b/actions/types.js
index 99d51b26..524a8244 100644
--- a/actions/types.js
+++ b/actions/types.js
@@ -1,44 +1,20 @@
-// Import keys to authenticate with your Laravel backend
-// See https://laravel.com/docs/8.x/passport#the-passportclient-command
import Config from 'react-native-config';
-// Production
-const SECRET_CLIENT = Config.SECRET_CLIENT;
-const ID_CLIENT = Config.ID_CLIENT;
const OLM_ENDPOINT = Config.OLM_ENDPOINT;
-
-// Local
-const LOCAL_SECRET_CLIENT = Config.LOCAL_SECRET_CLIENT;
-const LOCAL_ID_CLIENT = Config.LOCAL_ID_CLIENT;
const LOCAL_OLM_ENDPOINT = Config.LOCAL_OLM_ENDPOINT;
const CURRENT_ENVIRONMENT = Config.CURRENT_ENVIRONMENT;
-console.log({ CURRENT_ENVIRONMENT });
// change this when working locally to disable sentry
export const IS_PRODUCTION = CURRENT_ENVIRONMENT === 'production';
-let CLIENT = '';
-let SECRET = '';
let ENDPOINT = '';
if (CURRENT_ENVIRONMENT === 'production') {
- CLIENT = ID_CLIENT;
- SECRET = SECRET_CLIENT;
ENDPOINT = OLM_ENDPOINT;
}
else if (CURRENT_ENVIRONMENT === 'local') {
- CLIENT = LOCAL_ID_CLIENT;
- SECRET = LOCAL_SECRET_CLIENT;
- ENDPOINT = 'http://olm.test'; // LOCAL_OLM_ENDPOINT;
-}
-
-if (CURRENT_ENVIRONMENT !== 'production') {
- console.log('CLIENT', CLIENT);
- console.log('SECRET', SECRET);
- console.log('ENDPOINT', ENDPOINT);
+ ENDPOINT = 'http://localhost:8000';
}
-export const CLIENT_ID = CLIENT;
-export const CLIENT_SECRET = SECRET;
export const URL = ENDPOINT;
diff --git a/android/app/build.gradle b/android/app/build.gradle
index ec404e28..7510481f 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -81,8 +81,8 @@ android {
applicationId "com.geotech.openlittermap"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 46
- versionName "6.1.0"
+ versionCode 47
+ versionName "7.0.0"
}
signingConfigs {
debug {
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 324f3add..7c75cdb0 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 18675fb2..00000000
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index a3c1bf9d..56eaeeea 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 174f163b..00000000
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 85c0248d..1582ff85 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index d54a1462..00000000
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 5a9a561d..7368683b 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index a59346a2..00000000
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 08237307..c0fafaae 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 4491e92c..00000000
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/assets/data/categories.js b/assets/data/categories.js
deleted file mode 100644
index a0d1d4a2..00000000
--- a/assets/data/categories.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const CATEGORIES = [
- {
- title: 'smoking',
- path: require('../icons/smoking2.png')
- },
- {
- title: 'alcohol',
- path: require('../icons/beer.png')
- },
- {
- title: 'dogshit',
- path: require('../icons/paw.png')
- },
- {
- title: 'coffee',
- path: require('../icons/coffee_icon.png')
- },
- {
- title: 'food',
- path: require('../icons/food_icon.png')
- },
- {
- title: 'softdrinks',
- path: require('../icons/plastic-bottle.png')
- },
- {
- title: 'brands',
- path: require('../icons/briefcase.png')
- },
- {
- title: 'sanitary',
- path: require('../icons/toilet.png')
- },
- {
- title: 'coastal',
- path: require('../icons/ocean-transportation.png')
- },
- {
- title: 'dumping',
- path: require('../icons/dumping.png')
- },
- {
- title: 'industrial',
- path: require('../icons/industrial.png')
- },
- {
- title: 'material',
- path: require('../icons/package.png')
- },
- {
- title: 'other',
- path: require('../icons/dice2.png')
- }
- // { title: 'art', path: require('../icons/art_icon.png') }
-];
-
-export default CATEGORIES;
diff --git a/assets/data/litterkeys.js b/assets/data/litterkeys.js
deleted file mode 100644
index 675a881c..00000000
--- a/assets/data/litterkeys.js
+++ /dev/null
@@ -1,285 +0,0 @@
-const LITTERKEYS = {
- smoking: [
- 'butts', // Cigarette/Butts
- 'lighters', // Lighters
- 'cigaretteBox', // Cigarette Box
- 'tobaccoPouch', // Tobacco Pouch
- 'skins', // Rolling Papers
- 'smoking_plastic', // Plastic Packaging
- 'filters', // Filters
- 'filterbox', // Filter Box
- 'smokingOther', // Smoking-Other
- 'vape_pen', // Vape pen
- 'vape_oil' // Vape oil
- ],
- alcohol: [
- 'beerBottle', // Beer Bottles
- 'spiritBottle', // Spirit Bottles
- 'wineBottle', // Wine Bottles
- 'beerCan', // Beer Cans
- 'brokenGlass', // Broken Glass
- 'bottleTops', // Beer bottle tops
- 'paperCardAlcoholPackaging', // Paper Packaging
- 'plasticAlcoholPackaging', // Plastic Packaging
- 'alcoholOther', // Alcohol-Other
- 'pint', // Pint Glass
- 'six_pack_rings', // Six-pack rings
- 'alcohol_plastic_cups' // Plastic Cups
- ],
- coffee: [
- 'coffeeCups', // Coffee Cups
- 'coffeeLids', // Coffee Lids
- 'coffeeOther' // Coffee-Other
- ],
- food: [
- 'sweetWrappers', // Sweet Wrappers
- 'paperFoodPackaging', // Paper/Cardboard Packaging
- 'plasticFoodPackaging', // Plastic Packaging
- 'plasticCutlery', // Plastic Cutlery
- 'crisp_small', // Crisp/Chip Packet (small)
- 'crisp_large', // Crisp/Chip Packet (large)
- 'styrofoam_plate', // Styrofoam Plate
- 'napkins', // Napkins
- 'sauce_packet', // Sauce Packet
- 'glass_jar', // Glass Jar
- 'glass_jar_lid', // Glass Jar Lid
- 'pizza_box', // Pizza Box
- 'aluminium_foil', // Aluminium Foil
- 'chewing_gum', // Chewing Gum
- 'foodOther' // Food-other
- ],
- softdrinks: [
- 'waterBottle', // Plastic Water bottle
- 'fizzyDrinkBottle', // Plastic Fizzy Drink bottle
- 'tinCan', // Can
- 'bottleLid', // Bottle Tops
- 'bottleLabel', // Bottle Labels
- 'sportsDrink', // Sports Drink bottle
- 'straws', // Straws
- 'plastic_cups', // Plastic Cups
- 'plastic_cup_tops', // Plastic Cup Tops
- 'milk_bottle', // Milk Bottle
- 'milk_carton', // Milk Carton
- 'paper_cups', // Paper Cups
- 'juice_cartons', // Juice Cartons
- 'juice_bottles', // Juice Bottles
- 'juice_packet', // Juice Packet
- 'ice_tea_bottles', // Ice Tea Bottles
- 'ice_tea_can', // Ice Tea Can
- 'energy_can', // Energy Can
- 'pullring', // Pull-ring
- 'strawpacket', // Straw Packaging
- 'styro_cup', // Styrofoam Cup
- 'softDrinkOther' // Soft Drink (other)
- ],
- sanitary: [
- 'gloves', // Gloves
- 'facemask', // Facemask
- 'condoms', // Condoms
- 'nappies', // Nappies
- 'menstral', // Menstral
- 'deodorant', // Deodorant
- 'ear_swabs', // Ear Swabs
- 'tooth_pick', // Tooth Pick
- 'tooth_brush', // Tooth Brush
- 'wetwipes', // Wet Wipes
- 'sanitaryOther', // Sanitary (other)
- 'hand_sanitiser' // Hand Sanitiser
- ],
- other: [
- 'random_litter', // Random Litter
- 'bags_litter', // Bags of Litter
- 'overflowing_bins', // Overflowing Bins
- 'plastic', // Unidentifiable Plastic
- 'automobile', // Automobile
- 'tyre', // Tyre
- 'traffic_cone', // Traffic Cone
- 'metal', // Metal Object
- 'plastic_bags', // Plastic Bags
- 'election_posters', // Election Posters
- 'forsale_posters', // For Sale Posters
- 'cable_tie', // Cable tie
- 'books', // Books
- 'magazine', // Magazines
- 'paper', // Paper
- 'stationary', // Stationery
- 'washing_up', // Washing-up Bottle
- 'clothing', // Clothing
- 'hair_tie', // Hair Tie
- 'ear_plugs', // Ear Plugs (music)
- 'elec_small', // Electric small
- 'elec_large', // Electric large
- 'batteries', // Batteries
- 'balloons', // Balloons
- 'life_buoy', // Life Buoy
- 'other' // Other (other)
- ],
- dumping: [
- 'small', // Small
- 'medium', // Medium
- 'large' // Large
- ],
- industrial: [
- 'oil', // Oil
- 'industrial_plastic', // Plastic
- 'chemical', // Chemical
- 'bricks', // Bricks
- 'tape', // Tape
- 'industrial_other' // Other
- ],
- coastal: [
- 'microplastics', // Microplastics
- 'mediumplastics', // Mediumplastics
- 'macroplastics', // Macroplastics
- 'rope_small', // Rope small
- 'rope_medium', // Rope medium
- 'rope_large', // Rope large
- 'fishing_gear_nets', // Fishing gear/nets
- 'buoys', // Buoys
- 'degraded_plasticbottle', // Degraded Plastic Bottle
- 'degraded_plasticbag', // Degraded Plastic Bag
- 'degraded_straws', // Degraded Drinking Straws
- 'degraded_lighters', // Degraded Lighters
- 'balloons', // Balloons
- 'lego', // Lego
- 'shotgun_cartridges', // Shotgun Cartridges
- 'styro_small', // Styrofoam small
- 'styro_medium', // Styrofoam medium
- 'styro_large', // Styrofoam large
- 'coastal_other' // Coastal (other
- ],
- brands: [
- 'aadrink', // AA Drink
- 'adidas', // Adidas
- 'albertheijn', //AlbertHeijn
- 'aldi', // aldi
- 'amazon', // Amazon
- 'amstel', // Amstel
- 'apple', // Apple
- 'applegreen', // applegreen
- 'asahi', // asahi
- 'avoca', // avoca
- 'bacardi', // Bacardi
- 'ballygowan', // ballygowan
- 'bewleys', // bewleys
- 'brambles', // brambles
- 'budweiser', // Budweiser
- 'bulmers', // bulmers
- 'bullit', // Bullit
- 'burgerking', // burgerking
- 'butlers', // butlers
- 'cadburys', // cadburys
- 'cafenero', // cafenero
- 'camel', // Camel
- 'caprisun', // Capri Sun
- 'carlsberg', // carlsberg
- 'centra', // centra
- 'circlek', // circlek
- 'coke', // Coca-Cola
- 'coles', // coles
- 'colgate', // Colgate
- 'corona', // Corona
- 'costa', // Costa
- 'doritos', // Doritos
- 'drpepper', // DrPepper
- 'dunnes', // Dunnes
- 'duracell', // Duracell
- 'durex', // Durex
- 'esquires', // Esquires
- 'evian', // evian
- 'fanta', // Fanta
- 'fernandes', // Fernandes
- 'fosters', // fosters
- 'frank_and_honest', // Frank-and-Honest
- 'fritolay', // Frito-Lay
- 'gatorade', // Gatorade
- 'gillette', // Gillette
- 'goldenpower', // goldenpower
- 'guinness', // guinness
- 'haribo', // Haribo
- 'heineken', // Heineken
- 'hertog_jan', // Hertog Jan
- 'insomnia', // Insomnia
- 'kellogs', // Kellogs
- 'kfc', // KFC
- 'lavish', // Lavish
- 'lego', // Lego
- 'lidl', // Lidl
- 'lindenvillage', // Lindenvillage
- 'lipton', // Lipton
- 'lolly_and_cookes', // Lolly-and-cookes
- 'loreal', // Loreal
- 'lucozade', // Lucozade
- 'marlboro', // Marlboro
- 'mars', // Mars
- 'mcdonalds', // McDonalds
- 'monster', // Monster
- 'nero', // nero
- 'nescafe', // Nescafe
- 'nestle', // Nestle
- 'nike', // Nike
- 'obriens', // O-Briens
- 'pepsi', // Pepsi
- 'powerade', // Powerade
- 'redbull', // Redbull
- 'ribena', // Ribena
- 'sainsburys', // Sainsburys
- 'samsung', // Samsung
- 'schutters', // Schutters
- 'slammers', // Slammers
- 'spa', // SPA
- 'spar', // Spar
- 'starbucks', // Starbucks
- 'stella', // Stella
- 'subway', // Subway
- 'supermacs', // Supermacs
- 'supervalu', // Supervalu
- 'tayto', // Tayto
- 'tesco', // Tesco
- 'thins', // Thins
- 'tim_hortons',
- 'volvic', // Volvic
- 'waitrose', // Waitrose
- 'walkers', // Walkers
- 'wendys',
- 'wilde_and_greene', // Wilde-and-Greene
- 'woolworths', // Woolworths
- 'wrigleys' // Wrigley
- ],
- trashdog: [
- 'trashdog', // TrashDog
- 'littercat', // LitterCat
- 'duck' // LitterDuc
- ],
- dogshit: [
- 'poo', // Surprise!
- 'poo_in_bag' // Surprise in a bag!
- ],
- material: [
- 'aluminium',
- 'bronze',
- 'carbon_fiber',
- 'ceramic',
- 'composite',
- 'concrete',
- 'copper',
- 'fiberglass',
- 'glass',
- 'iron_or_steel',
- 'latex',
- 'metal',
- 'nickel',
- 'nylon',
- 'paper',
- 'plastic',
- 'polyethylene',
- 'polymer',
- 'polypropylene',
- 'polystyrene',
- 'pvc',
- 'rubber',
- 'titanium',
- 'wood'
- ]
-};
-export default LITTERKEYS;
diff --git a/assets/langs/ar/ar.json b/assets/langs/ar/ar.json
new file mode 100644
index 00000000..e4c10a32
--- /dev/null
+++ b/assets/langs/ar/ar.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP للترقية",
+ "{{count}}% Next Littercoin": "{{count}}% Littercoin التالي",
+ "{{photos}} selected": "{{photos}} مختارة",
+ "Add custom tag": "إضافة وسم مخصص",
+ "Add Tag": "أضف وسمًا",
+ "Alert": "تنبيه",
+ "Allow Gallery Access": "السماح بالوصول إلى المعرض",
+ "Allow Permissions": "السماح بالأذونات",
+ "Already have an account?": "لديك حساب مسبق؟",
+ "Apply Filters": "تطبيق الفلاتر",
+ "Are you sure you want to delete this image ?": "هل أنت متأكد أنك تريد حذف هذه الصورة؟",
+ "Are you sure you want to delete this photo? This cannot be undone.": "هل أنت متأكد أنك تريد حذف هذه الصورة؟ لا يمكن التراجع عن هذا.",
+ "Back to Login": "العودة إلى تسجيل الدخول",
+ "Brands": "العلامات التجارية",
+ "Camera": "كاميرا",
+ "Camera Access": "الوصول إلى الكاميرا",
+ "Cancel": "إلغاء",
+ "Clear all": "مسح الكل",
+ "Clear Filters": "مسح الفلاتر",
+ "Climb the leaderboards": "تنافس لتسلق لوحة المتصدرين",
+ "Close": "إغلاق",
+ "Confirm": "تأكيد",
+ "Copy Link": "نسخ الرابط",
+ "Create Account": "إنشاء حساب",
+ "Custom Tags": "وسوم مخصصة",
+ "Delete": "حذف",
+ "Delete Account": "حذف الحساب",
+ "Delete Image": "حذف الصورة",
+ "Delete Photo": "حذف الصورة",
+ "Delete your account": "حذف حسابك",
+ "Do you really want to change this setting?": "هل تريد حقًا تغيير هذا الإعداد؟",
+ "Done": "تم",
+ "Easy": "سهل",
+ "Edit": "تحرير",
+ "Edit Tags": "تعديل العلامات",
+ "Email": "البريد الإلكتروني",
+ "Email Address": "البريد الإلكتروني",
+ "Email or Username": "البريد الإلكتروني أو اسم المستخدم",
+ "Enable crowdsourced tagging": "تفعيل الوسم الجماعي",
+ "Error!": "خطأ!",
+ "Failed to update tags. Please try again.": "فشل تحديث العلامات. يرجى المحاولة مرة أخرى.",
+ "Filter Uploads": "تصفية التحميلات",
+ "Forgot password?": "نسيت كلمة المرور؟",
+ "From": "من",
+ "Fun": "ممتع",
+ "Geotagged": "موسومة جغرافيًا",
+ "Get Started!": "ابدأ!",
+ "Global Data": "البيانات العالمية",
+ "Go Back": "العودة",
+ "Good": "جيد",
+ "Just tag litter and upload it": "فقط قم بوسم المخلفات ورفعها",
+ "Leaderboard": "لوحة المتصدرين",
+ "Level": "المستوى",
+ "Link Copied": "تم نسخ الرابط",
+ "Litter is picked up": "يتم التقاط المخلفات",
+ "Litter Status": "حالة المخلفات",
+ "Littercoin": "Littercoin",
+ "Location Access": "الوصول إلى الموقع",
+ "Log In": "تسجيل الدخول",
+ "Logout": "تسجيل الخروج",
+ "Map": "خريطة",
+ "Materials": "المواد",
+ "Must be alphanumeric, 8-20 characters, no spaces": "يجب أن تكون أبجدية رقمية، 8-20 حرف، بدون مسافات",
+ "MY ACCOUNT": "حسابي",
+ "My Uploads": "تحميلاتي",
+ "Name": "الاسم",
+ "Name should be between 3-20 characters": "يجب أن يكون الاسم بين 3-20 حرفًا",
+ "New Today": "جديد اليوم",
+ "New Version Available": "إصدار جديد متاح",
+ "Next": "التالي",
+ "Next Target\n{{count}} Litter": "الهدف التالي\n{{count}} مخلفات",
+ "No geotagged photos found": "لم يتم العثور على صور موسومة جغرافياً",
+ "No images to upload": "لا توجد صور للرفع",
+ "No matching uploads": "لا توجد تحميلات مطابقة",
+ "No uploads yet": "لا توجد تحميلات بعد",
+ "Not now, Later": "ليس الآن، لاحقًا",
+ "Not picked up": "لم يتم الالتقاط",
+ "OK": "حسنًا",
+ "Only geotagged images can be selected": "يمكن تحديد الصور الموسومة جغرافياً فقط",
+ "Open Source": "مفتوح المصدر",
+ "found without GPS data": "تم العثور عليها بدون بيانات GPS",
+ "no GPS data and cannot be uploaded": "لا توجد بيانات GPS ولا يمكن رفعها",
+ "or": "أو",
+ "photo": "صورة",
+ "photo has": "صورة تحتوي على",
+ "photos": "صور",
+ "photos have": "صور تحتوي على",
+ "Password": "كلمة المرور",
+ "Password must be at least 6 characters": "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل",
+ "Photos": "صور",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "تحتاج الصور إلى بيانات GPS للرفع. تأكد من تفعيل خدمات الموقع عند التقاط الصور.",
+ "Picked up": "تم الالتقاط",
+ "Picked Up": "تم الالتقاط",
+ "Please add at least one tag before saving.": "يرجى إضافة علامة واحدة على الأقل قبل الحفظ.",
+ "Please enter a name": "الرجاء إدخال اسم",
+ "Please enter a password": "الرجاء إدخال كلمة المرور",
+ "Please enter a username": "الرجاء إدخال اسم المستخدم",
+ "Please enter a valid url": "الرجاء إدخال رابط صحيح",
+ "Please enter an email address": "الرجاء إدخال بريد إلكتروني",
+ "Please enter your email or username": "الرجاء إدخال بريدك الإلكتروني أو اسم المستخدم",
+ "Please Give Permissions": "الرجاء منح الأذونات",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "يرجى منحنا حق الوصول إلى معرض الصور، وهو مطلوب لرفع الصور الموسومة جغرافيًا من جهازك",
+ "Please update the app for an improved experience": "يرجى تحديث التطبيق للحصول على تجربة أفضل",
+ "Please wait while your photos upload": "الرجاء الانتظار حتى يتم رفع صورك",
+ "Press Upload": "اضغط رفع",
+ "PRIVACY": "الخصوصية",
+ "Quantity": "الكمية",
+ "Rank": "المرتبة",
+ "Save": "حفظ",
+ "Search brands": "البحث عن العلامات التجارية",
+ "Search by custom tag": "البحث بوسم مخصص",
+ "Search by tag name": "البحث باسم الوسم",
+ "Search materials": "البحث عن المواد",
+ "Select a photo": "اختر صورة",
+ "Select the images you want to delete": "اختر الصور التي تريد حذفها",
+ "Send Reset Link": "إرسال رابط إعادة التعيين",
+ "Settings": "الإعدادات",
+ "Short": "قصير",
+ "Show Name on Created By": "إظهار الاسم في أنشئ بواسطة",
+ "Show Name on Leaderboards": "إظهار الاسم في لوحة المتصدرين",
+ "Show Name on Maps": "إظهار الاسم على الخرائط",
+ "Show on Map": "عرض على الخريطة",
+ "Show Previous Tags": "إظهار الوسوم السابقة",
+ "Show Username on Created By": "إظهار اسم المستخدم في أنشئ بواسطة",
+ "Show Username on Leaderboards": "إظهار اسم المستخدم في لوحة المتصدرين",
+ "Show Username on Maps": "إظهار اسم المستخدم على الخرائط",
+ "Social Accounts": "الحسابات الاجتماعية",
+ "Some tags failed to upload. You can retry from your uploads.": "فشل تحميل بعض العلامات. يمكنك إعادة المحاولة من تحميلاتك.",
+ "Start photographing litter to see your uploads here": "ابدأ بتصوير المخلفات لرؤية تحميلاتك هنا",
+ "Strong": "قوي",
+ "Success!": "تم بنجاح!",
+ "Suggested Tags: {{count}}": "الوسوم المقترحة: {{count}}",
+ "Tag already added": "تمت إضافة الوسم بالفعل",
+ "Tag can be a maximum of 100 characters": "يمكن أن يكون الوسم 100 حرف كحد أقصى",
+ "Tag needs to be at least 3 characters long": "يجب أن يكون الوسم 3 أحرف على الأقل",
+ "Tagged": "موسوم",
+ "TAGGING": "الوسم",
+ "Tags": "الوسوم",
+ "TAGS": "الوسوم",
+ "tags": "علامات",
+ "Take a photo and select it from the gallery": "التقط صورة واخترها من المعرض",
+ "Thank you!!!": "شكرًا لك!!!",
+ "The Litter has been picked up": "تم التقاط المخلفات",
+ "The Litter is still there": "المخلفات ما زالت موجودة",
+ "The link has been copied to your clipboard.": "تم نسخ الرابط إلى الحافظة.",
+ "The login details are incorrect": "تفاصيل تسجيل الدخول غير صحيحة",
+ "This is not a valid email address": "البريد الإلكتروني غير صالح",
+ "This photo has no location data": "هذه الصورة لا تحتوي على بيانات موقع",
+ "This Month": "هذا الشهر",
+ "This Week": "هذا الأسبوع",
+ "To": "إلى",
+ "To capture litter images from app camera": "لالتقاط صور المخلفات من كاميرا التطبيق",
+ "To get exact geolocation of where the litter is": "للحصول على الموقع الجغرافي الدقيق للمخلفات",
+ "To Tag": "للتصنيف",
+ "Today": "اليوم",
+ "Total Littercoin": "إجمالي Littercoin",
+ "Total People": "إجمالي الأشخاص",
+ "Total Photos": "إجمالي الصور",
+ "Total Tags": "إجمالي الوسوم",
+ "Total Users": "إجمالي المستخدمين",
+ "Type to suggest tags": "اكتب لاقتراح وسوم",
+ "UN Digital Public Good": "منفعة عامة رقمية للأمم المتحدة",
+ "Unique Username": "اسم المستخدم",
+ "Untagged": "غير موسوم",
+ "Update Now": "تحديث الآن",
+ "Update Tags": "تحديث العلامات",
+ "Upload": "رفع",
+ "Username": "اسم المستخدم",
+ "Username should be between 3-20 characters": "يجب أن يكون اسم المستخدم بين 3-20 حرفًا",
+ "Username should not be equal to password": "يجب ألا يكون اسم المستخدم مطابقًا لكلمة المرور",
+ "Value not updated": "لم يتم تحديث القيمة",
+ "Value updated": "تم تحديث القيمة",
+ "Warning": "تحذير",
+ "Welcome": "أهلاً بك",
+ "XP": "XP",
+ "Yes, Delete": "نعم، احذف",
+ "You can upload up to 10 custom tags.": "يمكنك رفع ما يصل إلى 10 وسوم مخصصة.",
+ "You have tagged {{count}} photos": "لقد وسمت {{count}} صورة",
+ "You have uploaded {{count}} photos": "لقد قمت برفع {{count}} صورة",
+ "Your password did not match": "كلمة المرور غير متطابقة"
+}
diff --git a/assets/langs/ar/auth.json b/assets/langs/ar/auth.json
deleted file mode 100644
index f0f017ca..00000000
--- a/assets/langs/ar/auth.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "email-address": "البريد الإلكتروني",
- "password": "كلمة المرور",
- "unique-username": "اسم المستخدم",
- "create-account": "إنشاء حساب",
- "or": "أو",
- "already-have": "لديك حساب مسبق؟",
- "forgot-password": "نسيت كلمة المرور؟",
- "login": "تسجيل الدخول",
- "back-to-login": "العودة إلى تسجيل الدخول",
- "enter-email": "الرجاء إدخال بريد إلكتروني",
- "enter-password": "الرجاء إدخال كلمة المرور",
- "enter-username": "أدخل اسم المستخدم",
- "must-contain": "يجب أن تحتوي على 1 حرف كبير، 1 رقم، 6+ حروف",
- "alphanumeric-username": "يجب أن تكون أبجدية رقمية، 8-20 حرف أو رقم، بدون مسافة",
- "email-not-valid": "البريد الإلكتروني غير صالح",
- "invalid-credentials": "تفاصيل تسجيل الدخول غير صحيحة"
-}
diff --git a/assets/langs/ar/index.js b/assets/langs/ar/index.js
index 21ccdbfd..31d88129 100644
--- a/assets/langs/ar/index.js
+++ b/assets/langs/ar/index.js
@@ -1,21 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './ar.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import welcome from './welcome.json';
export const ar = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/ar/leftpage.json b/assets/langs/ar/leftpage.json
deleted file mode 100644
index 003aefde..00000000
--- a/assets/langs/ar/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "صور",
- "geotagged": "موسومة جغرافيا",
- "cancel": "إلغاء",
- "done": "تم",
- "next": "التالي",
- "upload": "رفع",
- "select-a-photo": "اختر صورة",
- "delete": "مسح",
- "selected": "{{photos}} مختارة",
- "press-upload": "اضغط رفع",
- "select-to-delete": "اختر الصور التي تريد مسحها",
- "please-wait-uploading": "الرجاء الانتظار حتى يتم رفع صورك",
- "thank-you": "!!!شكرا",
- "you-have-uploaded": "{{count}} عدد الصور التي قمت برفعها",
- "you-have-tagged": "لقد وضعت علامة على {{count}} صورة",
- "close": "إغلاق",
- "take-photo": "التقط صورة أو اختر من المعرض",
- "no-images": "لا توجد صور للتحميل",
- "camera": "كاميرا",
- "leaderboard": "لوحة النتائج"
-}
diff --git a/assets/langs/ar/litter.json b/assets/langs/ar/litter.json
index 42c7d608..74392b8e 100644
--- a/assets/langs/ar/litter.json
+++ b/assets/langs/ar/litter.json
@@ -1,306 +1,206 @@
{
"categories": {
"alcohol": "كحول",
- "art": "فن",
- "brands": "علامات تجارية",
- "coastal": "ساحلي",
- "coffee": "قهوة",
- "dumping": "نفايات",
+ "electronics": "إلكترونيات",
"food": "طعام",
"industrial": "صناعي",
- "material": "Material",
- "other": "أخرى",
- "sanitary": "صحي",
- "softdrinks": "مشروبات باردة",
+ "marine": "بحري",
+ "medical": "طبي",
+ "personal_care": "عناية شخصية",
+ "pets": "حيوانات أليفة",
"smoking": "تدخين",
- "custom-tag": "علامة مخصصة"
- },
- "smoking": {
- "butts": "سجائر/أعقاب",
- "lighters": "ولاعة",
- "cigaretteBox": "علبة سجائر",
- "tobaccoPouch": "كيس التبغ",
- "skins": "ورق اللف",
- "smoking_plastic": "تعبئة أو تغليف بلاستيكي",
- "filters": "فلتر",
- "filterbox": "علبة فلتر",
- "smokingOther": "تدخين-أخرى",
- "vape_pen": "سجائر إلكترونية",
- "vape_oil": "زيت السجائر الإلكترونية"
+ "softdrinks": "مشروبات غازية",
+ "unclassified": "غير مصنف",
+ "vehicles": "مركبات"
},
"alcohol": {
- "beerBottle": "قنينة بيرة",
- "spiritBottle": "قنينة مشروبات روحية",
- "wineBottle": "قنينة خمر",
- "beerCan": "عبوة بيرة",
- "brokenGlass": "زجاج مكسور",
- "bottleTops": "غطاء عبوة البيرة",
- "paperCardAlcoholPackaging": "أكياس تعبئة ورقية",
- "plasticAlcoholPackaging": "أكياس تعبئة بلاستيكية",
- "alcoholOther": "كحول-أخرى",
- "pint": "زجاجة شرب",
- "six_pack_rings": "حلقات تعبئة سداسية",
- "alcohol_plastic_cups": "أكواب بلاستيكية"
- },
- "coffee": {
- "coffeeCups": "أكواب قهوة",
- "coffeeLids": "غطاء كوب قهوة",
- "coffeeOther": "قهوة-أخرى"
+ "bottle": "زجاجة",
+ "bottle_cap": "غطاء زجاجة",
+ "broken_glass": "زجاج مكسور",
+ "can": "علبة",
+ "cup": "كوب",
+ "other": "أخرى",
+ "packaging": "تغليف",
+ "pint_glass": "كأس بيرة",
+ "pull_ring": "حلقة سحب",
+ "shot_glass": "كأس صغير",
+ "six_pack_rings": "حلقات العبوة السداسية",
+ "wine_glass": "كأس نبيذ"
+ },
+ "electronics": {
+ "battery": "بطارية",
+ "cable": "كابل",
+ "charger": "شاحن",
+ "headphones": "سماعات رأس",
+ "other": "أخرى",
+ "phone": "هاتف"
},
"food": {
- "sweetWrappers": "مغلفات الحلوى",
- "paperFoodPackaging": "تغليف ورقي/كرتوني",
- "plasticFoodPackaging": "تغليق بلاستيكي",
- "plasticCutlery": "أدوات مائدة بلاستيكية",
- "crisp_small": "أكياس بطاطس (صغيرة)",
- "crisp_large": "أكياس بطاطس (كبيرة)",
- "styrofoam_plate": "أطباق الفلين",
- "napkins": "محارم",
- "sauce_packet": "علبة صلصة",
- "glass_jar": "إناء زجاجي",
- "glass_jar_lid": "غطاء إناء زجاجي",
+ "bag": "كيس",
+ "box": "صندوق",
+ "can": "علبة",
+ "crisp_packet": "كيس رقائق بطاطس",
+ "cutlery": "أدوات مائدة",
+ "gum": "علكة",
+ "jar": "برطمان",
+ "lid": "غطاء",
+ "napkins": "مناديل",
+ "other": "أخرى",
+ "packaging": "تغليف",
+ "packet": "عبوة",
"pizza_box": "علبة بيتزا",
- "aluminium_foil": "ورق القصدير",
- "chewing_gum": "علكة",
- "foodOther": "طعام-أخرى"
- },
- "softdrinks": {
- "waterBottle": "قنينة مياه بلاستق",
- "fizzyDrinkBottle": "قنينة مشروب غازي بلاستيكية",
- "tinCan": "علبة",
- "bottleLid": "غطاء قنينة",
- "bottleLabel": "ملصق قنينة",
- "sportsDrink": "قنينة مشروبات رياضية",
- "straws": "قشة شرب",
- "plastic_cups": "أكواب بلاستيكية",
- "plastic_cup_tops": "أغطية أكواب بلاستيكية",
- "milk_bottle": "قنينة حليب",
- "milk_carton": "حليب بالكرتون",
- "paper_cups": "أكواب ورقية",
- "juice_cartons": "عصير بالكرتون",
- "juice_bottles": "قناني عصير",
- "juice_packet": "علبة عصير",
- "ice_tea_bottles": "قنينة شاي مثلج",
- "ice_tea_can": "علبة شاي مثلج",
- "energy_can": "علبة مشروب طاقة",
- "pullring": "قطعة من غطاء علبة المشروبات الغازية",
- "strawpacket": "علبة قش الشرب",
- "styro_cup": "كوب فلين",
- "softDrinkOther": "مشروبات باردة (أخرى)"
- },
- "sanitary": {
- "gloves": "قفازات",
- "facemask": "قناع وجه",
- "condoms": "واق ذكري",
- "nappies": "حفاظات",
- "menstral": "مستلزمات دورة شهرية",
- "deodorant": "مزيل عرق",
- "ear_swabs": "مسحات أذن",
- "tooth_pick": "عودأسنان",
- "tooth_brush": "فرشاة أسنان",
- "wetwipes": "مناديل مبللة",
- "hand_sanitiser": "معقمات يد",
- "sanitaryOther": "صحي (أخرى)"
- },
- "other": {
- "dogshit": "فضلات حيوانات",
- "pooinbag": "مخلفات حيوانات في كيس",
- "automobile": "سيارة",
- "clothing": "ملابس",
- "traffic_cone": "قمع مرور",
- "life_buoy": "عوامة النجاة البحرية",
- "plastic": "بلاستيك غير معروف",
- "dump": "رمي مخلفات مخالف",
- "metal": "أغراض معدنية",
- "plastic_bags": "أكياس بلاستيكية",
- "election_posters": "منشورات انتخابية",
- "forsale_posters": "منشورات مبيعات",
- "books": "كتب",
- "magazine": "مجلات",
- "paper": "ورق",
- "stationary": "مخلفات مكتبية",
- "washing_up": "قناني أدوات تنظيف",
- "hair_tie": "ربطة شعر",
- "ear_plugs": "سماعات أذن (موسيقى)",
- "batteries": "بطاريات",
- "elec_small": "إلكتروني صغير",
- "elec_large": "إلكتروني كبير",
- "other": "أخرى (أخرى)",
- "random_litter": "مخلفات عشوائية"
- },
- "dumping": {
- "small": "صغيرة",
- "medium": "متوسطة",
- "large": "كبيرة"
+ "plate": "طبق",
+ "tinfoil": "ورق قصدير",
+ "wrapper": "غلاف"
},
"industrial": {
- "oil": "زيت",
- "industrial_plastic": "بلاستيك",
- "chemical": "كيميائي",
"bricks": "طوب",
- "tape": "شريط",
- "industrial_other": "أخرى"
- },
- "coastal": {
- "microplastics": "مخلفات بلاستيكية ضئيلة",
- "mediumplastics": "مخلفات بلاستيكية متوسطة",
- "macroplastics": "مخلفات بلاستيكية كبيرة",
- "rope_small": "حبل صغير",
- "rope_medium": "حبل متوسط",
- "rope_large": "حبل كبير",
- "fishing_gear_nets": "معدات/شبكة صيد",
- "buoys": "عوامات",
- "degraded_plasticbottle": "قنينة بلاستيكية قابلة للتحلل",
- "degraded_plasticbag": "كيس بلاستيكي قابل للتحلل",
- "degraded_straws": "قش شرب قابل للتحلل",
- "degraded_lighters": "ولاعات قابلة للتحلل",
- "balloons": "بالون",
- "lego": "لعبة ليجو",
- "shotgun_cartridges": "خراطيش بندقية",
- "styro_small": "حبيبات فلين صغيرة",
- "styro_medium": "قطع فلين متوسطة",
- "styro_large": "قطع فلين كبيرة",
- "coastal_other": "ساحلي (أخرى)"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "thins": "Thins",
- "tim_hortons": "Tim Hortons",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "نفايات كلب",
- "littercat": "مخلفات قط",
- "duck": "مخلفات بط"
+ "chemical_container": "حاوية مواد كيميائية",
+ "construction": "مواد بناء",
+ "container": "حاوية",
+ "dumping_large": "نفايات مُلقاة (كبيرة)",
+ "dumping_medium": "نفايات مُلقاة (متوسطة)",
+ "dumping_small": "نفايات مُلقاة (صغيرة)",
+ "oil_container": "حاوية زيت",
+ "oil_drum": "برميل زيت",
+ "other": "أخرى",
+ "pallet": "منصة نقل",
+ "pipe": "أنبوب",
+ "tape": "شريط لاصق",
+ "wire": "سلك"
+ },
+ "marine": {
+ "buoy": "عوامة",
+ "crate": "صندوق خشبي",
+ "fishing_net": "شبكة صيد",
+ "macroplastics": "بلاستيك كبير الحجم",
+ "microplastics": "بلاستيك دقيق",
+ "other": "أخرى",
+ "rope": "حبل",
+ "shotgun_cartridge": "خرطوشة بندقية",
+ "styrofoam": "فلين صناعي"
+ },
+ "materials": {
+ "aluminium": "ألومنيوم",
+ "asphalt": "أسفلت",
+ "bamboo": "خيزران",
+ "bioplastic": "بلاستيك حيوي",
+ "cardboard": "كرتون",
+ "ceramic": "سيراميك",
+ "clay": "طين",
+ "cloth": "قماش",
+ "concrete": "خرسانة",
+ "copper": "نحاس",
+ "cork": "فلين",
+ "cotton": "قطن",
+ "elastic": "مطاطي مرن",
+ "fiberglass": "ألياف زجاجية",
+ "foam": "رغوة",
+ "foil": "رقائق معدنية",
+ "glass": "زجاج",
+ "latex": "لاتكس",
+ "metal": "معدن",
+ "nylon": "نايلون",
+ "paper": "ورق",
+ "plastic": "بلاستيك",
+ "polyester": "بوليستر",
+ "polystyrene": "بوليسترين",
+ "rubber": "مطاط",
+ "steel": "فولاذ",
+ "stone": "حجر",
+ "wood": "خشب"
+ },
+ "medical": {
+ "bandage": "ضمادة",
+ "face_mask": "كمامة",
+ "gloves": "قفازات",
+ "medicine_bottle": "زجاجة دواء",
+ "other": "أخرى",
+ "pill_pack": "عبوة أقراص",
+ "plaster": "لصقة جروح",
+ "sanitiser": "معقم",
+ "syringe": "حقنة"
+ },
+ "personal_care": {
+ "condom": "واقٍ ذكري",
+ "condom_wrapper": "غلاف واقٍ ذكري",
+ "dental_floss": "خيط أسنان",
+ "deodorant_can": "عبوة مزيل عرق",
+ "ear_swabs": "أعواد تنظيف الأذن",
+ "menstrual_cup": "كأس حيض",
+ "nappies": "حفاضات",
+ "other": "أخرى",
+ "sanitary_pad": "فوطة صحية",
+ "tampon": "سدادة قطنية",
+ "toothbrush": "فرشاة أسنان",
+ "toothpaste_tube": "أنبوب معجون أسنان",
+ "wipes": "مناديل مبللة"
},
- "presence": {
- "picked-up": "!تم التقاط القمامة",
- "still-there": "!القمامة مازالت موجودة"
+ "pets": {
+ "dog_waste": "فضلات كلاب",
+ "dog_waste_in_bag": "فضلات كلاب في كيس",
+ "other": "أخرى"
},
- "tags": {
- "type-to-suggest": "اكتب لاقتراح وسوم",
- "suggested": "{{count}} الوسوم المقترحة"
+ "smoking": {
+ "ashtray": "منفضة سجائر",
+ "butts": "أعقاب سجائر",
+ "cigarette_box": "علبة سجائر",
+ "cigarette_filter": "فلتر سجائر",
+ "lighters": "ولاعات",
+ "match_box": "علبة كبريت",
+ "other": "أخرى",
+ "packaging": "تغليف",
+ "rolling_papers": "ورق لف",
+ "tobacco_pouch": "كيس تبغ",
+ "vape_cartridge": "خرطوشة سجائر إلكترونية",
+ "vape_pen": "قلم سجائر إلكترونية"
},
- "dogshit": {
- "poo": "مفاجئة!",
- "poo_in_bag": "مفاجأة في حقيبة!"
+ "softdrinks": {
+ "bottle": "زجاجة",
+ "broken_glass": "زجاج مكسور",
+ "can": "علبة",
+ "carton": "كرتونة",
+ "coffee_pod": "كبسولة قهوة",
+ "cup": "كوب",
+ "juice_pouch": "كيس عصير",
+ "label": "ملصق",
+ "lid": "غطاء",
+ "other": "أخرى",
+ "packaging": "تغليف",
+ "straw": "قشة شرب",
+ "straw_wrapper": "غلاف قشة شرب"
},
- "material": {
- "aluminium": "ألومنيوم",
- "bronze": "برونز",
- "carbon_fiber": "ألياف الكربون",
- "ceramic": "سيراميك",
- "composite": "مركب",
- "concrete": "خرسانة",
- "copper": "نحاس",
- "fiberglass": "ألياف الزجاج",
- "glass": "زجاج",
- "iron_or_steel": "حديد/صلب",
- "latex": "لاتكس",
- "metal": "معدن",
- "nickel": "نيكل",
- "nylon": "نايلون",
- "paper": "ورق",
- "plastic": "بلاستيك",
- "polyethylene": "بولي إيثيلين",
- "polymer": "بوليمر",
- "polypropylene": "بولي بروبيلين",
- "polystyrene": "بوليسترين",
- "pvc": "بي في سي",
- "rubber": "مطاط",
- "titanium": "تيتانيوم",
- "wood": "خشب"
+ "types": {
+ "beer": "بيرة",
+ "cider": "سيدر",
+ "coffee": "قهوة",
+ "energy": "طاقة",
+ "iced_tea": "شاي مثلج",
+ "juice": "عصير",
+ "milk": "حليب",
+ "plant_milk": "حليب نباتي",
+ "smoothie": "سموذي",
+ "soda": "مشروب غازي",
+ "sparkling_water": "مياه غازية",
+ "spirits": "مشروبات روحية",
+ "sports": "مشروبات رياضية",
+ "tea": "شاي",
+ "unknown": "غير معروف",
+ "water": "ماء",
+ "wine": "نبيذ"
+ },
+ "unclassified": {
+ "other": "أخرى"
+ },
+ "vehicles": {
+ "battery": "بطارية",
+ "bumper": "مصد سيارة",
+ "car_part": "قطعة سيارة",
+ "license_plate": "لوحة ترخيص",
+ "light": "مصباح",
+ "mirror": "مرآة",
+ "other": "أخرى",
+ "tyre": "إطار",
+ "wheel": "عجلة"
}
}
diff --git a/assets/langs/ar/permission.json b/assets/langs/ar/permission.json
deleted file mode 100644
index 066b6c42..00000000
--- a/assets/langs/ar/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "السماح بالوصول إلى المعرض",
- "allow-permission": "السماح للأذونات",
- "camera-access": "الوصول إلى الكاميرا",
- "camera-access-body": "لالتقاط صور القمامة من كاميرا التطبيق",
- "gallery-body": "يرجى تزويدنا بإمكانية الوصول إلى معرض الصور الخاص بك ، وهو أمر مطلوب إذا كنت ترغب في تحميل الصور ذات العلامات الجغرافية من المعرض",
- "location-access": "الوصول إلى الموقع",
- "location-body": "للحصول على تحديد الموقع الجغرافي الدقيق لمكان القمامة",
- "new-version": "إصدار جديد متاح",
- "not-now": "ليس الآن لاحقًا",
- "please-give-permissions": "الرجاء إعطاء الأذونات",
- "please-update-app": "يرجى تحديث التطبيق للحصول على تجربة أفضل",
- "update-now": "تحديث الان"
-}
diff --git a/assets/langs/ar/settings.json b/assets/langs/ar/settings.json
deleted file mode 100644
index ab001a4a..00000000
--- a/assets/langs/ar/settings.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "settings": "الاعدادات",
- "my-account": "حسابي",
- "name": "الاسم",
- "username": "اسم المستخدم",
- "email": "البريد الإلكتروني",
- "privacy": "الخصوصية",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "أظهر الاسم على الخرائط",
- "show-username-maps": "أظهر اسم المستخدم على الخرائط",
- "show-name-leaderboards": "أظهر الاسم في لوحة المتصدرين",
- "show-username-leaderboards": "أظهر اسم المستخدم في لوحة المتصدرين",
- "show-name-createdby": "أظهر الاسم في أنشئ عن طريق",
- "show-username-createdby": "أظهر اسم المستخدم في أنشئ عن طريق",
- "tags": "الوسوم",
- "show-previous-tags": "أظهر الوسوم السابقة",
- "logout": "تسجيل الخروج",
- "success": "!تم بنجاح",
- "error": "!خطأ",
- "value-not-updated": "القيمة غير محدثة",
- "value-updated": "تم التحديث",
- "go-back": "العودة إلى الخلف",
- "edit": "تحرير",
- "save": "حفظ",
- "alert": "تنبيه",
- "do-you-really-want-to-change": "هل حقا تريد تغيير هذه الاعدادات؟",
- "ok": "حسنا",
- "cancel": "إلغاء",
- "picked-up": "التقط",
- "litter-picked-up": "يتم التقاط القمامة",
- "enter-email": "الرجاء إدخال بريد إلكتروني",
- "enter-username": "أدخل اسم المستخدم",
- "enter-name": "Please enter a name",
- "name-min-max": "Name should be between 3-20 characters",
- "username-min-max": "Username should be between 3-20 characters",
- "url-not-valid": "Please enter a valid url"
-}
diff --git a/assets/langs/ar/stats.json b/assets/langs/ar/stats.json
deleted file mode 100644
index 2eec689e..00000000
--- a/assets/langs/ar/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "البيانات العالمية",
- "next-target": "الهدف التالي \n{{count}} القمامة",
- "total-litter": "مجموع القمامة",
- "total-photos": "إجمالي الصور",
- "total-users": "إجمالي المستخدمين",
- "total-littercoin": "Littercoin المجموع"
-}
diff --git a/assets/langs/ar/tag.json b/assets/langs/ar/tag.json
deleted file mode 100644
index 3c872596..00000000
--- a/assets/langs/ar/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "أضف وسم",
- "confirm": "تأكيد",
- "type-to-suggest": "اكتب لاقتراح وسوم",
- "suggested-tags": "الوسوم المقترحة",
- "alert": "تنبيه",
- "still-there": "المخلفات مازالت موجودة",
- "picked-up": "تم التقاط المخلفات",
- "litter-status": "حالة القمامة",
- "picked-thumb": "👍🏻 التقطت",
- "not-picked-thumb": "👎🏻 لم تلتقط",
- "delete-message": "هل أنت متأكد أنك تريد حذف هذه الصورة ؟",
- "cancel": "يلغي",
- "delete": "نعم ، احذف",
- "custom-tags": "العلامات المخصصة",
- "custom-tags-min": "يجب أن يكون طوله 3 أحرف على الأقل",
- "custom-tags-max": "يمكن أن تكون العلامة بحد أقصى 100 حرف",
- "tag-already-added": "تمت إضافة العلامة بالفعل",
- "tag-limit-reached": "يمكنك تحميل ما يصل إلى 3 علامات مخصصة",
- "delete-image": "\uD83D\uDEAE حذف الصورة"
-}
diff --git a/assets/langs/ar/user.json b/assets/langs/ar/user.json
deleted file mode 100644
index c4c5db22..00000000
--- a/assets/langs/ar/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "مستوى",
- "level-up": " لرفع المستوى XP {{count}}",
- "littercoin": "Littercoin",
- "next-littercoin": "Littercoin التالي {{count}}%",
- "photos": "الصور",
- "rank": "مرتبة",
- "tags": "العلامات",
- "welcome": "أهلا بك",
- "XP": "XP"
-}
diff --git a/assets/langs/ar/welcome.json b/assets/langs/ar/welcome.json
deleted file mode 100644
index aaae1d68..00000000
--- a/assets/langs/ar/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "!سهل",
- "easy": "الأمر ",
- "just-tag-and-upload": "فقط قم بوسم المخلفات ورفعها",
- "fun": "!مرح",
- "climb-leaderboards": "#LitterWorldCup تنافس لتسلق لوحة المتصدرين في",
- "open": "!مفتوحة",
- "open-database": "ساعدنا في إنشاء قاعدة البيانات المفتوحة الأكثر تقدمًا في العالم بشأن القمامة والتلوث البلاستيكي",
- "get-started": "ابدأ!",
- "already-have-account": "لديك حساب؟ قم بتسجيل الدخول"
-}
diff --git a/assets/langs/de/auth.json b/assets/langs/de/auth.json
deleted file mode 100644
index f420332a..00000000
--- a/assets/langs/de/auth.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "email-address": "E-Mail Adresse",
- "password": "Passwort",
- "unique-username": "Einzigartiger Nutzername",
- "create-account": "Konto erstellen",
- "or": "oder",
- "already-have": "Du hast bereits ein Konto?",
- "forgot-password": "Passwort vergessen?",
- "login": "Einloggen",
- "back-to-login": "Zurück zum einloggen",
- "enter-email": "Bitte gib eine E-Mailadresse ein",
- "enter-password": "Bitte gib ein Passwort ein",
- "enter-username": "Bitte gib einen Benutzernamen ein",
- "must-contain": "Muss 1 Groβbuchstaben und 1 Zahl enthalten und 6+ Zeichen lang sein",
- "alphanumeric-username": "Muss alphanumerisch und 8-20 Zeichen lang sein und darf kein Leerzeichen enthalten",
- "email-not-valid": "Diese E-Mailadresse ist ungültig",
- "invalid-credentials": "Die Anmeldedaten sind falsch"
-}
diff --git a/assets/langs/de/de.json b/assets/langs/de/de.json
new file mode 100644
index 00000000..4c560c70
--- /dev/null
+++ b/assets/langs/de/de.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP zum Aufleveln",
+ "{{count}}% Next Littercoin": "{{count}}% nächster Littercoin",
+ "{{photos}} selected": "{{photos}} ausgewählt",
+ "Add custom tag": "Benutzerdefinierten Tag hinzufügen",
+ "Add Tag": "Tag hinzufügen",
+ "Alert": "Warnung",
+ "Allow Gallery Access": "Galeriezugriff erlauben",
+ "Allow Permissions": "Berechtigungen erlauben",
+ "Already have an account?": "Du hast bereits ein Konto?",
+ "Apply Filters": "Filter anwenden",
+ "Are you sure you want to delete this image ?": "Möchtest du dieses Bild wirklich löschen?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "Bist du sicher, dass du dieses Foto löschen möchtest? Dies kann nicht rückgängig gemacht werden.",
+ "Back to Login": "Zurück zum Einloggen",
+ "Brands": "Marken",
+ "Camera": "Kamera",
+ "Camera Access": "Kamerazugriff",
+ "Cancel": "Abbrechen",
+ "Clear all": "Alle löschen",
+ "Clear Filters": "Filter löschen",
+ "Climb the leaderboards": "Steige in der Rangliste auf",
+ "Close": "Schließen",
+ "Confirm": "Bestätigen",
+ "Copy Link": "Link kopieren",
+ "Create Account": "Konto erstellen",
+ "Custom Tags": "Benutzerdefinierte Tags",
+ "Delete": "Löschen",
+ "Delete Account": "Konto löschen",
+ "Delete Image": "Bild löschen",
+ "Delete Photo": "Foto löschen",
+ "Delete your account": "Dein Konto löschen",
+ "Do you really want to change this setting?": "Möchtest du diese Einstellung wirklich ändern?",
+ "Done": "Fertig",
+ "Easy": "Einfach",
+ "Edit": "Bearbeiten",
+ "Edit Tags": "Tags bearbeiten",
+ "Email": "E-Mail",
+ "Email Address": "E-Mail-Adresse",
+ "Email or Username": "E-Mail oder Benutzername",
+ "Enable crowdsourced tagging": "Gemeinschaftliches Markieren aktivieren",
+ "Error!": "Fehler!",
+ "Failed to update tags. Please try again.": "Tags konnten nicht aktualisiert werden. Bitte versuchen Sie es erneut.",
+ "Filter Uploads": "Uploads filtern",
+ "Forgot password?": "Passwort vergessen?",
+ "From": "Von",
+ "Fun": "Spaß",
+ "Geotagged": "Geotagged",
+ "Get Started!": "Los geht's!",
+ "Global Data": "Globale Daten",
+ "Go Back": "Zurück",
+ "Good": "Gut",
+ "Just tag litter and upload it": "Abfall markieren und hochladen",
+ "Leaderboard": "Rangliste",
+ "Level": "Level",
+ "Link Copied": "Link kopiert",
+ "Litter is picked up": "Abfall wird aufgesammelt",
+ "Litter Status": "Abfallstatus",
+ "Littercoin": "Littercoin",
+ "Location Access": "Standortzugriff",
+ "Log In": "Einloggen",
+ "Logout": "Abmelden",
+ "Map": "Karte",
+ "Materials": "Materialien",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Muss alphanumerisch sein, 8-20 Zeichen, keine Leerzeichen",
+ "MY ACCOUNT": "MEIN KONTO",
+ "My Uploads": "Meine Uploads",
+ "Name": "Name",
+ "Name should be between 3-20 characters": "Name muss zwischen 3-20 Zeichen lang sein",
+ "New Today": "Neu heute",
+ "New Version Available": "Neue Version verfügbar",
+ "Next": "Weiter",
+ "Next Target\n{{count}} Litter": "Nächstes Ziel\n{{count}} Abfall",
+ "No geotagged photos found": "Keine geogetaggten Fotos gefunden",
+ "No images to upload": "Keine Bilder zum Hochladen",
+ "No matching uploads": "Keine passenden Uploads",
+ "No uploads yet": "Noch keine Uploads",
+ "Not now, Later": "Nicht jetzt, später",
+ "Not picked up": "Nicht aufgesammelt",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Nur geogetaggte Bilder können ausgewählt werden",
+ "Open Source": "Open Source",
+ "found without GPS data": "ohne GPS-Daten gefunden",
+ "no GPS data and cannot be uploaded": "keine GPS-Daten und kann nicht hochgeladen werden",
+ "or": "oder",
+ "photo": "Foto",
+ "photo has": "Foto hat",
+ "photos": "Fotos",
+ "photos have": "Fotos haben",
+ "Password": "Passwort",
+ "Password must be at least 6 characters": "Passwort muss mindestens 6 Zeichen lang sein",
+ "Photos": "Fotos",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "Fotos benötigen GPS-Daten zum Hochladen. Stellen Sie sicher, dass die Standortdienste beim Fotografieren aktiviert sind.",
+ "Picked up": "Aufgesammelt",
+ "Picked Up": "Aufgesammelt",
+ "Please add at least one tag before saving.": "Bitte fügen Sie mindestens einen Tag hinzu, bevor Sie speichern.",
+ "Please enter a name": "Bitte gib einen Namen ein",
+ "Please enter a password": "Bitte gib ein Passwort ein",
+ "Please enter a username": "Bitte gib einen Benutzernamen ein",
+ "Please enter a valid url": "Bitte gib eine gültige URL ein",
+ "Please enter an email address": "Bitte gib eine E-Mail-Adresse ein",
+ "Please enter your email or username": "Bitte gib deine E-Mail oder deinen Benutzernamen ein",
+ "Please Give Permissions": "Bitte Berechtigungen erteilen",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Bitte gewähre uns Zugriff auf deine Galerie, um geogetaggte Bilder von deinem Gerät hochzuladen",
+ "Please update the app for an improved experience": "Bitte aktualisiere die App für ein besseres Erlebnis",
+ "Please wait while your photos upload": "Bitte warte, während deine Fotos hochgeladen werden",
+ "Press Upload": "Drücke Hochladen",
+ "PRIVACY": "DATENSCHUTZ",
+ "Quantity": "Menge",
+ "Rank": "Rang",
+ "Save": "Speichern",
+ "Search brands": "Marken suchen",
+ "Search by custom tag": "Nach benutzerdefiniertem Tag suchen",
+ "Search by tag name": "Nach Tag-Name suchen",
+ "Search materials": "Materialien suchen",
+ "Select a photo": "Wähle ein Foto aus",
+ "Select the images you want to delete": "Wähle die Bilder aus, die du löschen möchtest",
+ "Send Reset Link": "Link zum Zurücksetzen senden",
+ "Settings": "Einstellungen",
+ "Short": "Kurz",
+ "Show Name on Created By": "Name bei Erstellt von anzeigen",
+ "Show Name on Leaderboards": "Name auf der Rangliste anzeigen",
+ "Show Name on Maps": "Name auf Karten anzeigen",
+ "Show on Map": "Auf Karte anzeigen",
+ "Show Previous Tags": "Vorherige Tags anzeigen",
+ "Show Username on Created By": "Benutzername bei Erstellt von anzeigen",
+ "Show Username on Leaderboards": "Benutzername auf der Rangliste anzeigen",
+ "Show Username on Maps": "Benutzername auf Karten anzeigen",
+ "Social Accounts": "Soziale Konten",
+ "Some tags failed to upload. You can retry from your uploads.": "Einige Tags konnten nicht hochgeladen werden. Du kannst es über deine Uploads erneut versuchen.",
+ "Start photographing litter to see your uploads here": "Fotografiere Abfall, um deine Uploads hier zu sehen",
+ "Strong": "Stark",
+ "Success!": "Erfolg!",
+ "Suggested Tags: {{count}}": "Vorgeschlagene Tags: {{count}}",
+ "Tag already added": "Tag bereits hinzugefügt",
+ "Tag can be a maximum of 100 characters": "Tag darf maximal 100 Zeichen lang sein",
+ "Tag needs to be at least 3 characters long": "Tag muss mindestens 3 Zeichen lang sein",
+ "Tagged": "Markiert",
+ "TAGGING": "MARKIERUNG",
+ "Tags": "Tags",
+ "TAGS": "TAGS",
+ "tags": "Tags",
+ "Take a photo and select it from the gallery": "Mache ein Foto oder wähle eines aus der Galerie",
+ "Thank you!!!": "Vielen Dank!!!",
+ "The Litter has been picked up": "Der Abfall wurde aufgesammelt",
+ "The Litter is still there": "Der Abfall ist immer noch dort",
+ "The link has been copied to your clipboard.": "Der Link wurde in die Zwischenablage kopiert.",
+ "The login details are incorrect": "Die Anmeldedaten sind falsch",
+ "This is not a valid email address": "Diese E-Mail-Adresse ist ungültig",
+ "This photo has no location data": "Dieses Foto hat keine Standortdaten",
+ "This Month": "Diesen Monat",
+ "This Week": "Diese Woche",
+ "To": "Bis",
+ "To capture litter images from app camera": "Um Abfallbilder mit der App-Kamera aufzunehmen",
+ "To get exact geolocation of where the litter is": "Um den genauen Standort des Abfalls zu ermitteln",
+ "To Tag": "Zu taggen",
+ "Today": "Heute",
+ "Total Littercoin": "Littercoin gesamt",
+ "Total People": "Personen gesamt",
+ "Total Photos": "Fotos gesamt",
+ "Total Tags": "Tags gesamt",
+ "Total Users": "Nutzer gesamt",
+ "Type to suggest tags": "Tippen, um Tags vorzuschlagen",
+ "UN Digital Public Good": "Digitales Gemeinwohl der UN",
+ "Unique Username": "Einzigartiger Benutzername",
+ "Untagged": "Nicht markiert",
+ "Update Now": "Jetzt aktualisieren",
+ "Update Tags": "Tags aktualisieren",
+ "Upload": "Hochladen",
+ "Username": "Benutzername",
+ "Username should be between 3-20 characters": "Benutzername muss zwischen 3-20 Zeichen lang sein",
+ "Username should not be equal to password": "Benutzername darf nicht gleich dem Passwort sein",
+ "Value not updated": "Wert nicht aktualisiert",
+ "Value updated": "Wert aktualisiert",
+ "Warning": "Warnung",
+ "Welcome": "Willkommen",
+ "XP": "XP",
+ "Yes, Delete": "Ja, löschen",
+ "You can upload up to 10 custom tags.": "Du kannst bis zu 10 benutzerdefinierte Tags hochladen.",
+ "You have tagged {{count}} photos": "Du hast {{count}} Fotos markiert",
+ "You have uploaded {{count}} photos": "Du hast {{count}} Foto(s) hochgeladen",
+ "Your password did not match": "Dein Passwort stimmt nicht überein"
+}
diff --git a/assets/langs/de/index.js b/assets/langs/de/index.js
index 3fc1bff0..1f5470d2 100644
--- a/assets/langs/de/index.js
+++ b/assets/langs/de/index.js
@@ -1,21 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './de.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import welcome from './welcome.json';
export const de = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/de/leftpage.json b/assets/langs/de/leftpage.json
deleted file mode 100644
index 6ab1f370..00000000
--- a/assets/langs/de/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Fotos",
- "geotagged": "Geotagged",
- "cancel": "Abbrechen",
- "done": "Fertig",
- "next": "Nächste",
- "upload": "Hochladen",
- "select-a-photo": "Ein Foto aussuchen",
- "delete": "Löschen",
- "selected": "{{photos}} Ausgesucht",
- "press-upload": "Drücke hochladen",
- "select-to-delete": "Suche Fotos aus, die du löschen möchtest",
- "please-wait-uploading": "Bitte warten bis deine Fotos hochgeladen sind",
- "thank-you": "Herzlichen Dank!!!",
- "you-have-uploaded": "Du hast {{count}} Foto(s) hochgeladen",
- "you-have-tagged": "Sie haben {{count}} Fotos markiert",
- "close": "Schlieβen",
- "take-photo": "Machen Sie ein Foto oder wählen Sie aus der Galerie",
- "no-images": "Keine Bilder zum Hochladen",
- "camera": "Kamera",
- "leaderboard": "Rangliste"
-}
diff --git a/assets/langs/de/litter.json b/assets/langs/de/litter.json
index eb3f65a0..9bd1c446 100644
--- a/assets/langs/de/litter.json
+++ b/assets/langs/de/litter.json
@@ -1,312 +1,206 @@
{
"categories": {
"alcohol": "Alkohol",
- "art": "Kunst",
- "brands": "Marke",
- "coastal": "Küste",
- "coffee": "Kaffee",
- "dogshit": "Haustiere",
- "dumping": "wegwerfen",
- "food": "Essen",
- "industrial": "Industriell",
- "material": "Material",
- "other": "Andere",
- "sanitary": "Hygiene",
- "softdrinks": "Erfrischungsgetränk",
+ "electronics": "Elektronik",
+ "food": "Lebensmittel",
+ "industrial": "Industrie",
+ "marine": "Meer",
+ "medical": "Medizinisch",
+ "personal_care": "Körperpflege",
+ "pets": "Haustiere",
"smoking": "Rauchen",
- "custom-tag": "Benutzerdefiniertes Tag"
- },
- "smoking": {
- "butts": "Zigaretten(stummel)",
- "lighters": "Feuerzeug",
- "cigaretteBox": "Zigarettenschachtel",
- "tobaccoPouch": "Tabakverpackung",
- "skins": "Zigarettendrehpapier",
- "smoking_plastic": "Plastik Verpackung",
- "filters": "Zigarettenfilter ",
- "filterbox": "Filterdose",
- "smokingOther": "Andere Rauchen",
- "vape_pen": "E-Zigarettennachfüllung",
- "vape_oil": "E-Zigaretten Öl"
+ "softdrinks": "Erfrischungsgetränke",
+ "unclassified": "Nicht klassifiziert",
+ "vehicles": "Fahrzeuge"
},
"alcohol": {
- "beerBottle": "Bierflasche",
- "spiritBottle": "Schnapsflasche",
- "wineBottle": "Weinflasche",
- "beerCan": "Bierdose",
- "brokenGlass": "Glas",
- "bottleTops": "Kronkorken",
- "paperCardAlcoholPackaging": "Papier Verpackung",
- "plasticAlcoholPackaging": "Plastik Verpackung",
- "alcoholOther": "Alkohol Andere",
- "pint": "Bierglas",
- "six_pack_rings": "Six-Pack (todo)",
- "alcohol_plastic_cups": "Plastik Gläser"
- },
- "coffee": {
- "coffeeCups": "Kaffee Becher",
- "coffeeLids": "Kaffee Becherdeckel",
- "coffeeOther": "Kaffee Andere"
+ "bottle": "Flasche",
+ "bottle_cap": "Kronkorken",
+ "broken_glass": "Glasscherben",
+ "can": "Dose",
+ "cup": "Becher",
+ "other": "Sonstiges",
+ "packaging": "Verpackung",
+ "pint_glass": "Bierglas",
+ "pull_ring": "Dosenring",
+ "shot_glass": "Schnapsglas",
+ "six_pack_rings": "Sixpack-Ringe",
+ "wine_glass": "Weinglas"
+ },
+ "electronics": {
+ "battery": "Batterie",
+ "cable": "Kabel",
+ "charger": "Ladegerät",
+ "headphones": "Kopfhörer",
+ "other": "Sonstiges",
+ "phone": "Telefon"
},
"food": {
- "sweetWrappers": "Süβigkeitenverpackung",
- "paperFoodPackaging": "Papier/Karton Verpackung",
- "plasticFoodPackaging": "Plastik Verpackung",
- "plasticCutlery": "Plastik Besteck",
- "crisp_small": "Chips Verpackung (kleine)",
- "crisp_large": "Chips Verpackung (groβe)",
- "styrofoam_plate": "Styropor",
+ "bag": "Tüte",
+ "box": "Schachtel",
+ "can": "Dose",
+ "crisp_packet": "Chipstüte",
+ "cutlery": "Besteck",
+ "gum": "Kaugummi",
+ "jar": "Glas",
+ "lid": "Deckel",
"napkins": "Servietten",
- "sauce_packet": "Sausse",
- "glass_jar": "Glasgefäβ",
- "glass_jar_lid": "Deckel",
+ "other": "Sonstiges",
+ "packaging": "Verpackung",
+ "packet": "Päckchen",
"pizza_box": "Pizzakarton",
- "aluminium_foil": "Aluminiumfolie",
- "chewing_gum": "Kaugummi",
- "foodOther": "Nahrungsmittel andere"
- },
- "softdrinks": {
- "waterBottle": "Plastikwasserflasche",
- "fizzyDrinkBottle": "Erfrischungsgetränkeflasche ",
- "tinCan": "Dose",
- "bottleLid": "Flaschenverschluβ",
- "bottleLabel": "Flaschenetikett",
- "sportsDrink": "Sporttrinkflasche",
- "straws": "Strohhalm",
- "plastic_cups": "Plastikbecher",
- "plastic_cup_tops": "Plastikbecherdeckel",
- "milk_bottle": "Milchflasche",
- "milk_carton": "Milchkarton ",
- "paper_cups": "Papierbecher",
- "juice_cartons": "Saftkarton",
- "juice_bottles": "Saftflasche",
- "juice_packet": "Saftpäckchen",
- "ice_tea_bottles": "Eisteeflasche",
- "ice_tea_can": "Eisteedose",
- "energy_can": "Energy Drink Dose",
- "pullring": "Dosenring",
- "strawpacket": "Strohhalmverpackung",
- "styro_cup": "Styroporbecher",
- "softDrinkOther": "Erfrischungsgetränk andere"
- },
- "sanitary": {
- "gloves": "Handschuhe",
- "facemask": "Mund-Nasenschutz/Mundmaske",
- "condoms": "Kondome",
- "nappies": "Windeln",
- "menstral": "Periodenprodukte",
- "deodorant": "Deo",
- "ear_swabs": "Ohrenstäbchen",
- "tooth_pick": "Zahnstocher",
- "tooth_brush": "Zahnbürste",
- "wetwipes": "Feuchttücher",
- "hand_sanitiser": "Handdesinfektionsmittel",
- "sanitaryOther": "Hygiene andere"
- },
- "other": {
- "bags_litter": "Säcke mit Müll",
- "overflowing_bins": "Überlaufende Behälter",
- "dogshit": "Hundekot",
- "pooinbag": "Hundekot in Tüte",
- "automobile": "Auto",
- "tyre": "Reifen",
- "clothing": "Kleidung",
- "traffic_cone": "Pylon",
- "life_buoy": "Rettungsboje ",
- "plastic": "Plastik",
- "dump": "Illegaler Müll",
- "metal": "Metall",
- "plastic_bags": "Plastiktüten ",
- "election_posters": "Wahlplakate",
- "forsale_posters": "Werbeplakate",
- "cable_tie": "Kabelbinder",
- "books": "Bücher",
- "magazine": "Zeitschriften",
- "paper": "Papier",
- "stationary": "Schreibwaren",
- "washing_up": "Abwaschmittelflasche",
- "hair_tie": "Haargummi",
- "ear_plugs": "Ohrenstöpsel (Musik)",
- "batteries": "Batterien",
- "balloons": "Ballons",
- "elec_small": "Elektronica (klein)",
- "elec_large": "Elektronica (groβ)",
- "other": "Andere (andere)",
- "random_litter": "gemischter Müll"
- },
- "dumping": {
- "small": "klein",
- "medium": "mittel",
- "large": "groβ"
+ "plate": "Teller",
+ "tinfoil": "Alufolie",
+ "wrapper": "Verpackungsfolie"
},
"industrial": {
- "oil": "Öl",
- "industrial_plastic": "Plastik",
- "chemical": "Chemisch",
- "bricks": "Steine",
+ "bricks": "Ziegelsteine",
+ "chemical_container": "Chemikalienbehälter",
+ "construction": "Baumaterial",
+ "container": "Behälter",
+ "dumping_large": "Illegale Entsorgung (groß)",
+ "dumping_medium": "Illegale Entsorgung (mittel)",
+ "dumping_small": "Illegale Entsorgung (klein)",
+ "oil_container": "Ölbehälter",
+ "oil_drum": "Ölfass",
+ "other": "Sonstiges",
+ "pallet": "Palette",
+ "pipe": "Rohr",
"tape": "Klebeband",
- "industrial_other": "Industriell andere"
+ "wire": "Draht"
},
- "coastal": {
- "microplastics": "Mikroplastik",
- "mediumplastics": "Mittelgroβes Plastik",
+ "marine": {
+ "buoy": "Boje",
+ "crate": "Kiste",
+ "fishing_net": "Fischernetz",
"macroplastics": "Makroplastik",
- "rope_small": "kleines Tau",
- "rope_medium": "mittelgroβes Tau",
- "rope_large": "groβes Tau",
- "fishing_gear_nets": "Angel/Fischernetze",
- "buoys": "Bojen",
- "degraded_plasticbottle": "degradierte Plastikflasche",
- "degraded_plasticbag": "degradierte Plastiktüte",
- "degraded_straws": "degradierte Strohhalme",
- "degraded_lighters": "degradierte Feuerzeuge",
- "balloons": "Luftballons",
- "lego": "Lego",
- "shotgun_cartridges": "Schrotflintenkugeln",
- "styro_small": "Styropor (kleines)",
- "styro_medium": "Styropor (mittelgroβes)",
- "styro_large": "Styropor (groβes)",
- "coastal_other": "Küste andere"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "thins": "Thins",
- "tim_hortons": "Tim Hortons",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "Hundekot",
- "littercat": "Katzenkot",
- "duck": "Entenkot"
- },
- "presence": {
- "picked-up": "Der Müll is weggeräumt!",
- "still-there": "Der Müll liegt dort immernoch!"
- },
- "tags": {
- "type-to-suggest": "Type to suggest tags",
- "suggested": "Suggested tags {{count}}"
+ "microplastics": "Mikroplastik",
+ "other": "Sonstiges",
+ "rope": "Seil",
+ "shotgun_cartridge": "Schrotpatrone",
+ "styrofoam": "Styropor"
+ },
+ "materials": {
+ "aluminium": "Aluminium",
+ "asphalt": "Asphalt",
+ "bamboo": "Bambus",
+ "bioplastic": "Biokunststoff",
+ "cardboard": "Karton",
+ "ceramic": "Keramik",
+ "clay": "Ton",
+ "cloth": "Stoff",
+ "concrete": "Beton",
+ "copper": "Kupfer",
+ "cork": "Kork",
+ "cotton": "Baumwolle",
+ "elastic": "Gummiband",
+ "fiberglass": "Glasfaser",
+ "foam": "Schaumstoff",
+ "foil": "Folie",
+ "glass": "Glas",
+ "latex": "Latex",
+ "metal": "Metall",
+ "nylon": "Nylon",
+ "paper": "Papier",
+ "plastic": "Kunststoff",
+ "polyester": "Polyester",
+ "polystyrene": "Polystyrol",
+ "rubber": "Gummi",
+ "steel": "Stahl",
+ "stone": "Stein",
+ "wood": "Holz"
+ },
+ "medical": {
+ "bandage": "Verband",
+ "face_mask": "Gesichtsmaske",
+ "gloves": "Handschuhe",
+ "medicine_bottle": "Medikamentenflasche",
+ "other": "Sonstiges",
+ "pill_pack": "Tablettenverpackung",
+ "plaster": "Pflaster",
+ "sanitiser": "Desinfektionsmittel",
+ "syringe": "Spritze"
+ },
+ "personal_care": {
+ "condom": "Kondom",
+ "condom_wrapper": "Kondomverpackung",
+ "dental_floss": "Zahnseide",
+ "deodorant_can": "Deodorantdose",
+ "ear_swabs": "Wattestäbchen",
+ "menstrual_cup": "Menstruationstasse",
+ "nappies": "Windeln",
+ "other": "Sonstiges",
+ "sanitary_pad": "Damenbinde",
+ "tampon": "Tampon",
+ "toothbrush": "Zahnbürste",
+ "toothpaste_tube": "Zahnpastatube",
+ "wipes": "Feuchttücher"
+ },
+ "pets": {
+ "dog_waste": "Hundekot",
+ "dog_waste_in_bag": "Hundekot in Tüte",
+ "other": "Sonstiges"
},
- "dogshit": {
- "poo": "Überraschung!",
- "poo_in_bag": "Überraschung in einer Tasche!"
+ "smoking": {
+ "ashtray": "Aschenbecher",
+ "butts": "Zigarettenstummel",
+ "cigarette_box": "Zigarettenschachtel",
+ "cigarette_filter": "Zigarettenfilter",
+ "lighters": "Feuerzeuge",
+ "match_box": "Streichholzschachtel",
+ "other": "Sonstiges",
+ "packaging": "Verpackung",
+ "rolling_papers": "Drehpapier",
+ "tobacco_pouch": "Tabakbeutel",
+ "vape_cartridge": "E-Zigaretten-Kartusche",
+ "vape_pen": "E-Zigarette"
},
- "material": {
- "aluminium": "Aluminium",
- "bronze": "Bronze",
- "carbon_fiber": "Kohlefaser",
- "ceramic": "Keramik",
- "composite": "Verbundmaterial",
- "concrete": "Beton",
- "copper": "Kupfer",
- "fiberglass": "Glasfaser",
- "glass": "Glas",
- "iron_or_steel": "Eisen/Stahl",
- "latex": "Latex",
- "metal": "Metall",
- "nickel": "Nickel",
- "nylon": "Nylon",
- "paper": "Papier",
- "plastic": "Kunststoff",
- "polyethylene": "Polyethylen",
- "polymer": "Polymer",
- "polypropylene": "Polypropylen",
- "polystyrene": "Polystyrol",
- "pvc": "PVC",
- "rubber": "Gummi",
- "titanium": "Titan",
- "wood": "Holz"
+ "softdrinks": {
+ "bottle": "Flasche",
+ "broken_glass": "Glasscherben",
+ "can": "Dose",
+ "carton": "Karton",
+ "coffee_pod": "Kaffeekapsel",
+ "cup": "Becher",
+ "juice_pouch": "Saftbeutel",
+ "label": "Etikett",
+ "lid": "Deckel",
+ "other": "Sonstiges",
+ "packaging": "Verpackung",
+ "straw": "Strohhalm",
+ "straw_wrapper": "Strohhalmverpackung"
+ },
+ "types": {
+ "beer": "Bier",
+ "cider": "Apfelwein",
+ "coffee": "Kaffee",
+ "energy": "Energiegetränk",
+ "iced_tea": "Eistee",
+ "juice": "Saft",
+ "milk": "Milch",
+ "plant_milk": "Pflanzenmilch",
+ "smoothie": "Smoothie",
+ "soda": "Limonade",
+ "sparkling_water": "Sprudelwasser",
+ "spirits": "Spirituosen",
+ "sports": "Sportgetränk",
+ "tea": "Tee",
+ "unknown": "Unbekannt",
+ "water": "Wasser",
+ "wine": "Wein"
+ },
+ "unclassified": {
+ "other": "Sonstiges"
+ },
+ "vehicles": {
+ "battery": "Batterie",
+ "bumper": "Stoßstange",
+ "car_part": "Autoteil",
+ "license_plate": "Nummernschild",
+ "light": "Licht",
+ "mirror": "Spiegel",
+ "other": "Sonstiges",
+ "tyre": "Reifen",
+ "wheel": "Rad"
}
}
diff --git a/assets/langs/de/permission.json b/assets/langs/de/permission.json
deleted file mode 100644
index 36729cb9..00000000
--- a/assets/langs/de/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Galeriezugriff zulassen",
- "allow-permission": "Berechtigungen zulassen",
- "camera-access": "Kamerazugriff",
- "camera-access-body": "Wurfbilder von der App-Kamera aufnehmen",
- "gallery-body": "Bitte geben Sie uns Zugang zu Ihrer Galerie, was erforderlich ist, wenn Sie Bilder mit Geo-Tags aus der Galerie hochladen möchten",
- "location-access": "Standortzugriff",
- "location-body": "Um eine genaue Geolokalisierung zu erhalten, wo sich der Wurf befindet",
- "new-version": "Neue Version verfügbar",
- "not-now": "Nicht jetzt, später",
- "please-give-permissions": "Bitte Berechtigungen erteilen",
- "please-update-app": "Bitte aktualisieren Sie die App für ein verbessertes Erlebnis",
- "update-now": "Jetzt aktualisieren"
-}
diff --git a/assets/langs/de/settings.json b/assets/langs/de/settings.json
deleted file mode 100644
index 8996a134..00000000
--- a/assets/langs/de/settings.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "settings": "Einstellungen",
- "my-account": "MEIN KONTO",
- "name": "Name",
- "username": "Benutzername",
- "email": "E-Mail",
- "privacy": "DATENSCHUTZ",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "Namen auf den Karten anzeigen",
- "show-username-maps": "Benutzernamen auf den Karten anzeigen",
- "show-name-leaderboards": "Name auf leaderbords anzeigen",
- "show-username-leaderboards": "Benutzername auf Leaderbords anzeigen",
- "show-name-createdby": "Name anzeigen bei erstellt durch",
- "show-username-createdby": "Benutzername anzeigen bei erstellt durch",
- "tags": "TAGS",
- "show-previous-tags": "Vorige Tags anzeigen",
- "logout": "Abmelden",
- "success": "Viel Erfolg!",
- "error": "Féhler!",
- "value-not-updated": "Wert nicht aktualisiert",
- "value-updated": "Wert aktualisiert",
- "go-back": "Zurückgehen",
- "edit": "Bearbeiten",
- "save": "abspeichern",
- "alert": "Warnung",
- "do-you-really-want-to-change": "Willst du die Einstellungen wirklich verändern?",
- "ok": "OK",
- "cancel": "Abbrechen",
- "picked-up": "Abgeholt",
- "litter-picked-up": "Wurf wird abgeholt",
- "enter-email": "Please enter an email address",
- "enter-username": "Please enter a username",
- "enter-name": "Please enter a name",
- "name-min-max": "Name should be between 3-20 characters",
- "username-min-max": "Username should be between 3-20 characters",
- "url-not-valid": "Please enter a valid url"
-}
diff --git a/assets/langs/de/stats.json b/assets/langs/de/stats.json
deleted file mode 100644
index e5101e7f..00000000
--- a/assets/langs/de/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Globale Daten",
- "next-target": "Nächstes Ziel\n{{count}} Wurf",
- "total-litter": "Gesamtstreu",
- "total-photos": "Gesamtzahl Fotos",
- "total-users": "Gesamtnutzer",
- "total-littercoin": "Gesamt Littercoin"
-}
diff --git a/assets/langs/de/tag.json b/assets/langs/de/tag.json
deleted file mode 100644
index 7bcf0797..00000000
--- a/assets/langs/de/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Tag hinzufügen",
- "confirm": "Bestätigen",
- "type-to-suggest": "Tippen um Tag zu suchen",
- "suggested-tags": "Vorgestellter Tag {{count}}",
- "alert": "Warnung",
- "still-there": "Der Abfall ist immernoch dort",
- "picked-up": "Der Abfall ist weggenommen",
- "litter-status": "Wurfstatus",
- "picked-thumb": "Abgeholt 👍🏻",
- "not-picked-thumb": "Nicht abgeholt 👎🏻",
- "delete-message": "Möchten Sie dieses Bild wirklich löschen?",
- "cancel": "Abbrechen",
- "delete": "Ja, löschen",
- "custom-tags": "Custom Tags",
- "custom-tags-min": "Tag muss mindestens 3 Zeichen lang sein",
- "custom-tags-max": "Tag darf maximal 100 Zeichen lang sein",
- "tag-already-added": "Tag bereits hinzugefügt",
- "tag-limit-reached": "Sie können bis zu 3 benutzerdefinierte Tags hochladen",
- "delete-image": "\uD83D\uDEAE Bild löschen"
-}
diff --git a/assets/langs/de/user.json b/assets/langs/de/user.json
deleted file mode 100644
index a67e525e..00000000
--- a/assets/langs/de/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Niveau",
- "level-up": "{{count}} XP zum Aufleveln",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Nächster Littercoin",
- "photos": "Fotos",
- "rank": "Rang",
- "tags": "Stichworte",
- "welcome": "Willkommen",
- "XP": "XP"
-}
diff --git a/assets/langs/de/welcome.json b/assets/langs/de/welcome.json
deleted file mode 100644
index d73062bc..00000000
--- a/assets/langs/de/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "Es ist ",
- "easy": "EINFACH!",
- "just-tag-and-upload": "Suche Abfall, tag es und lade es hoch!",
- "fun": "SPAβ!",
- "climb-leaderboards": "Steig die Leiter auf beim #LitterWorldCup",
- "open": "GRATIS!",
- "open-database": "Helfen Sie uns, die weltweit fortschrittlichste offene Datenbank zu Müll und Plastikverschmutzung zu erstellen",
- "get-started": "Los geht's!",
- "already-have-account": "Du hast schon ein Konto? Einloggen"
-}
diff --git a/assets/langs/en/auth.json b/assets/langs/en/auth.json
deleted file mode 100644
index f16ce86c..00000000
--- a/assets/langs/en/auth.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "email-address": "Email Address",
- "password": "Password",
- "unique-username": "Unique Username",
- "create-account": "Create Account",
- "or": "or",
- "already-have": "Already have an account?",
- "forgot-password": "Forgot password?",
- "login": "Log In",
- "back-to-login": "Back to Login",
- "enter-email": "Please enter an email address",
- "enter-password": "Please enter a password",
- "enter-username": "Please enter a username",
- "must-contain": "Must contain 1 uppercase, 1 digit, 6+ characters",
- "alphanumeric-username": "Must be alphanumeric, 8-20 characters, no spaces",
- "email-not-valid": "This is not a valid email address",
- "username-min-max": "Username should be between 3-20 characters",
- "username-equal-to-password": "Username should not be equal to password",
- "url-not-valid": "Please enter a valid url",
- "invalid-credentials": "The login details are incorrect"
-}
diff --git a/assets/langs/en/en.json b/assets/langs/en/en.json
new file mode 100644
index 00000000..a1202c30
--- /dev/null
+++ b/assets/langs/en/en.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP to level up",
+ "{{count}}% Next Littercoin": "{{count}}% Next Littercoin",
+ "{{photos}} selected": "{{photos}} selected",
+ "Add custom tag": "Add custom tag",
+ "Add Tag": "Add Tag",
+ "Alert": "Alert",
+ "Allow Gallery Access": "Allow Gallery Access",
+ "Allow Permissions": "Allow Permissions",
+ "Already have an account?": "Already have an account?",
+ "Apply Filters": "Apply Filters",
+ "Are you sure you want to delete this image ?": "Are you sure you want to delete this image ?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "Are you sure you want to delete this photo? This cannot be undone.",
+ "Back to Login": "Back to Login",
+ "Brands": "Brands",
+ "Camera": "Camera",
+ "Camera Access": "Camera Access",
+ "Cancel": "Cancel",
+ "Clear all": "Clear all",
+ "Clear Filters": "Clear Filters",
+ "Climb the leaderboards": "Climb the leaderboards",
+ "Close": "Close",
+ "Confirm": "Confirm",
+ "Copy Link": "Copy Link",
+ "Create Account": "Create Account",
+ "Custom Tags": "Custom Tags",
+ "Delete": "Delete",
+ "Delete Account": "Delete Account",
+ "Delete Image": "Delete Image",
+ "Delete Photo": "Delete Photo",
+ "Delete your account": "Delete your account",
+ "Do you really want to change this setting?": "Do you really want to change this setting?",
+ "Done": "Done",
+ "Easy": "Easy",
+ "Edit": "Edit",
+ "Edit Tags": "Edit Tags",
+ "Email": "Email",
+ "Email Address": "Email Address",
+ "Email or Username": "Email or Username",
+ "Enable crowdsourced tagging": "Enable crowdsourced tagging",
+ "Error!": "Error!",
+ "Failed to update tags. Please try again.": "Failed to update tags. Please try again.",
+ "Filter Uploads": "Filter Uploads",
+ "Forgot password?": "Forgot password?",
+ "From": "From",
+ "Fun": "Fun",
+ "Geotagged": "Geotagged",
+ "Get Started!": "Get Started!",
+ "Global Data": "Global Data",
+ "Go Back": "Go Back",
+ "Good": "Good",
+ "Just tag litter and upload it": "Just tag litter and upload it",
+ "Leaderboard": "Leaderboard",
+ "Level": "Level",
+ "Link Copied": "Link Copied",
+ "Litter is picked up": "Litter is picked up",
+ "Litter Status": "Litter Status",
+ "Littercoin": "Littercoin",
+ "Location Access": "Location Access",
+ "Log In": "Log In",
+ "Logout": "Logout",
+ "Map": "Map",
+ "Materials": "Materials",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Must be alphanumeric, 8-20 characters, no spaces",
+ "MY ACCOUNT": "MY ACCOUNT",
+ "My Uploads": "My Uploads",
+ "Name": "Name",
+ "Name should be between 3-20 characters": "Name should be between 3-20 characters",
+ "New Today": "New Today",
+ "New Version Available": "New Version Available",
+ "Next": "Next",
+ "Next Target\n{{count}} Litter": "Next Target\n{{count}} Litter",
+ "No geotagged photos found": "No geotagged photos found",
+ "No images to upload": "No images to upload",
+ "No matching uploads": "No matching uploads",
+ "No uploads yet": "No uploads yet",
+ "Not now, Later": "Not now, Later",
+ "Not picked up": "Not picked up",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Only geotagged images can be selected",
+ "Open Source": "Open Source",
+ "found without GPS data": "found without GPS data",
+ "no GPS data and cannot be uploaded": "no GPS data and cannot be uploaded",
+ "or": "or",
+ "photo": "photo",
+ "photo has": "photo has",
+ "photos": "photos",
+ "photos have": "photos have",
+ "Password": "Password",
+ "Password must be at least 6 characters": "Password must be at least 6 characters",
+ "Photos": "Photos",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.",
+ "Picked up": "Picked up",
+ "Picked Up": "Picked Up",
+ "Please add at least one tag before saving.": "Please add at least one tag before saving.",
+ "Please enter a name": "Please enter a name",
+ "Please enter a password": "Please enter a password",
+ "Please enter a username": "Please enter a username",
+ "Please enter a valid url": "Please enter a valid url",
+ "Please enter an email address": "Please enter an email address",
+ "Please enter your email or username": "Please enter your email or username",
+ "Please Give Permissions": "Please Give Permissions",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Please provide us access to your gallery, which is required to upload geotagged images from your device",
+ "Please update the app for an improved experience": "Please update the app for an improved experience",
+ "Please wait while your photos upload": "Please wait while your photos upload",
+ "Press Upload": "Press Upload",
+ "PRIVACY": "PRIVACY",
+ "Quantity": "Quantity",
+ "Rank": "Rank",
+ "Save": "Save",
+ "Search brands": "Search brands",
+ "Search by custom tag": "Search by custom tag",
+ "Search by tag name": "Search by tag name",
+ "Search materials": "Search materials",
+ "Select a photo": "Select a photo",
+ "Select the images you want to delete": "Select the images you want to delete",
+ "Send Reset Link": "Send Reset Link",
+ "Settings": "Settings",
+ "Short": "Short",
+ "Show Name on Created By": "Show Name on Created By",
+ "Show Name on Leaderboards": "Show Name on Leaderboards",
+ "Show Name on Maps": "Show Name on Maps",
+ "Show on Map": "Show on Map",
+ "Show Previous Tags": "Show Previous Tags",
+ "Show Username on Created By": "Show Username on Created By",
+ "Show Username on Leaderboards": "Show Username on Leaderboards",
+ "Show Username on Maps": "Show Username on Maps",
+ "Social Accounts": "Social Accounts",
+ "Some tags failed to upload. You can retry from your uploads.": "Some tags failed to upload. You can retry from your uploads.",
+ "Start photographing litter to see your uploads here": "Start photographing litter to see your uploads here",
+ "Strong": "Strong",
+ "Success!": "Success!",
+ "Suggested Tags: {{count}}": "Suggested Tags: {{count}}",
+ "Tag already added": "Tag already added",
+ "Tag can be a maximum of 100 characters": "Tag can be a maximum of 100 characters",
+ "Tag needs to be at least 3 characters long": "Tag needs to be at least 3 characters long",
+ "Tagged": "Tagged",
+ "TAGGING": "TAGGING",
+ "Tags": "Tags",
+ "TAGS": "TAGS",
+ "tags": "tags",
+ "Take a photo and select it from the gallery": "Take a photo and select it from the gallery",
+ "Thank you!!!": "Thank you!!!",
+ "The Litter has been picked up": "The Litter has been picked up",
+ "The Litter is still there": "The Litter is still there",
+ "The link has been copied to your clipboard.": "The link has been copied to your clipboard.",
+ "The login details are incorrect": "The login details are incorrect",
+ "This is not a valid email address": "This is not a valid email address",
+ "This photo has no location data": "This photo has no location data",
+ "This Month": "This Month",
+ "This Week": "This Week",
+ "To": "To",
+ "To capture litter images from app camera": "To capture litter images from app camera",
+ "To get exact geolocation of where the litter is": "To get exact geolocation of where the litter is",
+ "To Tag": "To Tag",
+ "Today": "Today",
+ "Total Littercoin": "Total Littercoin",
+ "Total People": "Total People",
+ "Total Photos": "Total Photos",
+ "Total Tags": "Total Tags",
+ "Total Users": "Total Users",
+ "Type to suggest tags": "Type to suggest tags",
+ "UN Digital Public Good": "UN Digital Public Good",
+ "Unique Username": "Unique Username",
+ "Untagged": "Untagged",
+ "Update Now": "Update Now",
+ "Update Tags": "Update Tags",
+ "Upload": "Upload",
+ "Username": "Username",
+ "Username should be between 3-20 characters": "Username should be between 3-20 characters",
+ "Username should not be equal to password": "Username should not be equal to password",
+ "Value not updated": "Value not updated",
+ "Value updated": "Value updated",
+ "Warning": "Warning",
+ "Welcome": "Welcome",
+ "XP": "XP",
+ "Yes, Delete": "Yes, Delete",
+ "You can upload up to 10 custom tags.": "You can upload up to 10 custom tags.",
+ "You have tagged {{count}} photos": "You have tagged {{count}} photos",
+ "You have uploaded {{count}} photos": "You have uploaded {{count}} photos",
+ "Your password did not match": "Your password did not match"
+}
diff --git a/assets/langs/en/index.js b/assets/langs/en/index.js
index a5251ed7..720eea51 100644
--- a/assets/langs/en/index.js
+++ b/assets/langs/en/index.js
@@ -1,23 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './en.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import team from './team.json';
-import welcome from './welcome.json';
export const en = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- team,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/en/leftpage.json b/assets/langs/en/leftpage.json
deleted file mode 100644
index 38bcb1f9..00000000
--- a/assets/langs/en/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Photos",
- "geotagged": "Geotagged",
- "cancel": "Cancel",
- "done": "Done",
- "next": "Next",
- "upload": "Upload",
- "select-a-photo": "Select a photo",
- "delete": "Delete",
- "selected": "{{photos}} selected",
- "press-upload": "Press Upload",
- "select-to-delete": "Select the images you want to delete",
- "please-wait-uploading": "Please wait while your photos upload",
- "thank-you": "Thank you!!!",
- "you-have-uploaded": "You have uploaded {{count}} photos",
- "you-have-tagged": "You have tagged {{count}} photos",
- "close": "Close",
- "take-photo": "Take a photo and select it from the gallery",
- "no-images": "No images to upload",
- "camera": "Camera",
- "leaderboard": "Leaderboard"
-}
diff --git a/assets/langs/en/litter.json b/assets/langs/en/litter.json
index 69854267..50c31e0a 100644
--- a/assets/langs/en/litter.json
+++ b/assets/langs/en/litter.json
@@ -1,309 +1,206 @@
{
"categories": {
"alcohol": "Alcohol",
- "art": "Art",
- "brands": "Brands",
- "coastal": "Coastal",
- "coffee": "Coffee",
- "dogshit": "Pets",
- "dumping": "Dumping",
+ "electronics": "Electronics",
"food": "Food",
"industrial": "Industrial",
- "material": "Material",
- "other": "Other",
- "sanitary": "Sanitary",
- "softdrinks": "Soft Drinks",
+ "marine": "Marine",
+ "medical": "Medical",
+ "personal_care": "Personal Care",
+ "pets": "Pets",
"smoking": "Smoking",
- "custom-tag": "Custom Tag"
- },
- "smoking": {
- "butts": "Cigarettes/Butts",
- "lighters": "Lighters",
- "cigaretteBox": "Cigarette Box",
- "tobaccoPouch": "Tobacco Pouch",
- "skins": "Rolling Papers",
- "smoking_plastic": "Plastic Packaging",
- "filters": "Filters",
- "filterbox": "Filter Box",
- "smokingOther": "Smoking-Other",
- "vape_pen": "Vape pen",
- "vape_oil": "Vape oil"
+ "softdrinks": "Soft Drinks",
+ "unclassified": "Unclassified",
+ "vehicles": "Vehicles"
},
"alcohol": {
- "beerBottle": "Beer Bottles",
- "spiritBottle": "Spirit Bottles",
- "wineBottle": "Wine Bottles",
- "beerCan": "Beer Cans",
- "brokenGlass": "Broken Glass",
- "bottleTops": "Beer bottle tops",
- "paperCardAlcoholPackaging": "Paper Packaging",
- "plasticAlcoholPackaging": "Plastic Packaging",
- "alcoholOther": "Alcohol-Other",
- "pint": "Pint Glass",
- "six_pack_rings": "Six-pack rings",
- "alcohol_plastic_cups": "Plastic Cups"
- },
- "coffee": {
- "coffeeCups": "Coffee Cups",
- "coffeeLids": "Coffee Lids",
- "coffeeOther": "Coffee-Other"
+ "bottle": "Bottle",
+ "bottle_cap": "Bottle Cap",
+ "broken_glass": "Broken Glass",
+ "can": "Can",
+ "cup": "Cup",
+ "other": "Other",
+ "packaging": "Packaging",
+ "pint_glass": "Pint Glass",
+ "pull_ring": "Pull Ring",
+ "shot_glass": "Shot Glass",
+ "six_pack_rings": "Six-Pack Rings",
+ "wine_glass": "Wine Glass"
+ },
+ "electronics": {
+ "battery": "Battery",
+ "cable": "Cable",
+ "charger": "Charger",
+ "headphones": "Headphones",
+ "other": "Other",
+ "phone": "Phone"
},
"food": {
- "sweetWrappers": "Sweet Wrappers",
- "paperFoodPackaging": "Paper/Cardboard Packaging",
- "plasticFoodPackaging": "Plastic Packaging",
- "plasticCutlery": "Plastic Cutlery",
- "crisp_small": "Crisp/Chip Packet (small)",
- "crisp_large": "Crisp/Chip Packet (large)",
- "styrofoam_plate": "Styrofoam Plate",
+ "bag": "Bag",
+ "box": "Box",
+ "can": "Can",
+ "crisp_packet": "Crisp Packet",
+ "cutlery": "Cutlery",
+ "gum": "Gum",
+ "jar": "Jar",
+ "lid": "Lid",
"napkins": "Napkins",
- "sauce_packet": "Sauce Packet",
- "glass_jar": "Glass Jar",
- "glass_jar_lid": "Glass Jar Lid",
+ "other": "Other",
+ "packaging": "Packaging",
+ "packet": "Packet",
"pizza_box": "Pizza Box",
- "aluminium_foil": "Aluminium Foil",
- "chewing_gum": "Chewing Gum",
- "foodOther": "Food-other"
- },
- "softdrinks": {
- "waterBottle": "Plastic Water bottle",
- "fizzyDrinkBottle": "Plastic Fizzy Drink bottle",
- "tinCan": "Can",
- "bottleLid": "Bottle Tops",
- "bottleLabel": "Bottle Labels",
- "sportsDrink": "Sports Drink bottle",
- "straws": "Straws",
- "plastic_cups": "Plastic Cups",
- "plastic_cup_tops": "Plastic Cup Tops",
- "milk_bottle": "Milk Bottle",
- "milk_carton": "Milk Carton",
- "paper_cups": "Paper Cups",
- "juice_cartons": "Juice Cartons",
- "juice_bottles": "Juice Bottles",
- "juice_packet": "Juice Packet",
- "ice_tea_bottles": "Ice Tea Bottles",
- "ice_tea_can": "Ice Tea Can",
- "energy_can": "Energy Can",
- "pullring": "Pull-ring",
- "strawpacket": "Straw Packaging",
- "styro_cup": "Styrofoam Cup",
- "softDrinkOther": "Soft Drink (other)"
- },
- "sanitary": {
- "gloves": "Gloves",
- "facemask": "Facemask",
- "condoms": "Condoms",
- "nappies": "Nappies",
- "menstral": "Menstral",
- "deodorant": "Deodorant",
- "ear_swabs": "Ear Swabs",
- "tooth_pick": "Tooth Pick",
- "tooth_brush": "Tooth Brush",
- "wetwipes": "Wet Wipes",
- "hand_sanitiser": "Hand Sanitiser",
- "sanitaryOther": "Sanitary (other)"
- },
- "other": {
- "random_litter": "Random Litter",
- "bags_litter": "Bags of Litter",
- "overflowing_bins": "Overflowing Bins",
- "plastic": "Unidentified Plastic",
- "automobile": "Automobile",
- "tyre": "Tyre",
- "traffic_cone": "Traffic cone",
- "metal": "Metal Object",
- "plastic_bags": "Plastic Bags",
- "election_posters": "Election Posters",
- "forsale_posters": "For Sale Posters",
- "cable_tie": "Cable Tie",
- "books": "Books",
- "magazine": "Magazines",
- "paper": "Paper",
- "stationary": "Stationery",
- "washing_up": "Washing-up Bottle",
- "clothing": "Clothing",
- "hair_tie": "Hair Tie",
- "ear_plugs": "Ear Plugs (music)",
- "elec_small": "Electric small",
- "elec_large": "Electric large",
- "batteries": "Batteries",
- "balloons": "Balloons",
- "life_buoy": "Life Buoy",
- "other": "Other (other)"
- },
- "dumping": {
- "small": "Small",
- "medium": "Medium",
- "large": "Large"
+ "plate": "Plate",
+ "tinfoil": "Tinfoil",
+ "wrapper": "Wrapper"
},
"industrial": {
- "oil": "Oil",
- "industrial_plastic": "Plastic",
- "chemical": "Chemical",
"bricks": "Bricks",
+ "chemical_container": "Chemical Container",
+ "construction": "Construction",
+ "container": "Container",
+ "dumping_large": "Dumping (Large)",
+ "dumping_medium": "Dumping (Medium)",
+ "dumping_small": "Dumping (Small)",
+ "oil_container": "Oil Container",
+ "oil_drum": "Oil Drum",
+ "other": "Other",
+ "pallet": "Pallet",
+ "pipe": "Pipe",
"tape": "Tape",
- "industrial_other": "Industrial (other)"
+ "wire": "Wire"
},
- "coastal": {
- "microplastics": "Microplastics",
- "mediumplastics": "Mediumplastics",
+ "marine": {
+ "buoy": "Buoy",
+ "crate": "Crate",
+ "fishing_net": "Fishing Net",
"macroplastics": "Macroplastics",
- "rope_small": "Rope small",
- "rope_medium": "Rope medium",
- "rope_large": "Rope large",
- "fishing_gear_nets": "Fishing gear/nets",
- "buoys": "Buoys",
- "degraded_plasticbottle": "Degraded Plastic Bottle",
- "degraded_plasticbag": "Degraded Plastic Bag",
- "degraded_straws": "Degraded Drinking Straws",
- "degraded_lighters": "Degraded Lighters",
- "balloons": "Balloons",
- "lego": "Lego",
- "shotgun_cartridges": "Shotgun Cartridges",
- "styro_small": "Styrofoam small",
- "styro_medium": "Styrofoam medium",
- "styro_large": "Styrofoam large",
- "coastal_other": "Coastal (other)"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "tim_hortons": "Tim Hortons",
- "thins": "Thins",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "TrashDog",
- "littercat": "LitterCat",
- "duck": "LitterDuck"
+ "microplastics": "Microplastics",
+ "other": "Other",
+ "rope": "Rope",
+ "shotgun_cartridge": "Shotgun Cartridge",
+ "styrofoam": "Styrofoam"
+ },
+ "materials": {
+ "aluminium": "Aluminium",
+ "asphalt": "Asphalt",
+ "bamboo": "Bamboo",
+ "bioplastic": "Bioplastic",
+ "cardboard": "Cardboard",
+ "ceramic": "Ceramic",
+ "clay": "Clay",
+ "cloth": "Cloth",
+ "concrete": "Concrete",
+ "copper": "Copper",
+ "cork": "Cork",
+ "cotton": "Cotton",
+ "elastic": "Elastic",
+ "fiberglass": "Fibreglass",
+ "foam": "Foam",
+ "foil": "Foil",
+ "glass": "Glass",
+ "latex": "Latex",
+ "metal": "Metal",
+ "nylon": "Nylon",
+ "paper": "Paper",
+ "plastic": "Plastic",
+ "polyester": "Polyester",
+ "polystyrene": "Polystyrene",
+ "rubber": "Rubber",
+ "steel": "Steel",
+ "stone": "Stone",
+ "wood": "Wood"
+ },
+ "medical": {
+ "bandage": "Bandage",
+ "face_mask": "Face Mask",
+ "gloves": "Gloves",
+ "medicine_bottle": "Medicine Bottle",
+ "other": "Other",
+ "pill_pack": "Pill Pack",
+ "plaster": "Plaster",
+ "sanitiser": "Sanitiser",
+ "syringe": "Syringe"
+ },
+ "personal_care": {
+ "condom": "Condom",
+ "condom_wrapper": "Condom Wrapper",
+ "dental_floss": "Dental Floss",
+ "deodorant_can": "Deodorant Can",
+ "ear_swabs": "Ear Swabs",
+ "menstrual_cup": "Menstrual Cup",
+ "nappies": "Nappies",
+ "other": "Other",
+ "sanitary_pad": "Sanitary Pad",
+ "tampon": "Tampon",
+ "toothbrush": "Toothbrush",
+ "toothpaste_tube": "Toothpaste Tube",
+ "wipes": "Wipes"
},
- "presence": {
- "picked-up": "The Litter has been picked up!",
- "still-there": "The Litter is still there!"
+ "pets": {
+ "dog_waste": "Dog Waste",
+ "dog_waste_in_bag": "Dog Waste in Bag",
+ "other": "Other"
},
- "tags": {
- "type-to-suggest": "Type to suggest tags",
- "suggested": "Suggested tags {{count}}"
+ "smoking": {
+ "ashtray": "Ashtray",
+ "butts": "Cigarette Butts",
+ "cigarette_box": "Cigarette Box",
+ "cigarette_filter": "Cigarette Filter",
+ "lighters": "Lighters",
+ "match_box": "Match Box",
+ "other": "Other",
+ "packaging": "Packaging",
+ "rolling_papers": "Rolling Papers",
+ "tobacco_pouch": "Tobacco Pouch",
+ "vape_cartridge": "Vape Cartridge",
+ "vape_pen": "Vape Pen"
},
- "dogshit": {
- "poo": "Surprise!",
- "poo_in_bag": "Surprise in a bag!"
+ "softdrinks": {
+ "bottle": "Bottle",
+ "broken_glass": "Broken Glass",
+ "can": "Can",
+ "carton": "Carton",
+ "coffee_pod": "Coffee Pod",
+ "cup": "Cup",
+ "juice_pouch": "Juice Pouch",
+ "label": "Label",
+ "lid": "Lid",
+ "other": "Other",
+ "packaging": "Packaging",
+ "straw": "Straw",
+ "straw_wrapper": "Straw Wrapper"
},
- "material": {
- "aluminium": "Aluminium",
- "bronze": "Bronze",
- "carbon_fiber": "Carbon Fiber",
- "ceramic": "Ceramic",
- "composite": "Composite",
- "concrete": "Concrete",
- "copper": "Copper",
- "fiberglass": "Fiberglass",
- "glass": "Glass",
- "iron_or_steel": "Iron/Steel",
- "latex": "Latex",
- "metal": "Metal",
- "nickel": "Nickel",
- "nylon": "Nylon",
- "paper": "Paper",
- "plastic": "Plastic",
- "polyethylene": "Polyethylene",
- "polymer": "Polymer",
- "polypropylene": "Polypropylene",
- "polystyrene": "Polystyrene",
- "pvc": "PVC",
- "rubber": "Rubber",
- "titanium": "Titanium",
- "wood": "Wood"
+ "types": {
+ "beer": "Beer",
+ "cider": "Cider",
+ "coffee": "Coffee",
+ "energy": "Energy",
+ "iced_tea": "Iced Tea",
+ "juice": "Juice",
+ "milk": "Milk",
+ "plant_milk": "Plant Milk",
+ "smoothie": "Smoothie",
+ "soda": "Soda",
+ "sparkling_water": "Sparkling Water",
+ "spirits": "Spirits",
+ "sports": "Sports",
+ "tea": "Tea",
+ "unknown": "Unknown",
+ "water": "Water",
+ "wine": "Wine"
+ },
+ "unclassified": {
+ "other": "Other"
+ },
+ "vehicles": {
+ "battery": "Battery",
+ "bumper": "Bumper",
+ "car_part": "Car Part",
+ "license_plate": "Licence Plate",
+ "light": "Light",
+ "mirror": "Mirror",
+ "other": "Other",
+ "tyre": "Tyre",
+ "wheel": "Wheel"
}
}
diff --git a/assets/langs/en/permission.json b/assets/langs/en/permission.json
deleted file mode 100644
index 339344a8..00000000
--- a/assets/langs/en/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Allow Gallery Access",
- "allow-permission": "Allow Permissions",
- "camera-access": "Camera Access",
- "camera-access-body": "To capture litter images from app camera",
- "gallery-body": "Please provide us access to your gallery, which is required to upload geotagged images from your device",
- "location-access": "Location Access",
- "location-body": "To get exact geolocation of where the litter is",
- "new-version": "New Version Available",
- "not-now": "Not now, Later",
- "please-give-permissions": "Please Give Permissions",
- "please-update-app": "Please update the app for an improved experience",
- "update-now": "Update Now"
-}
diff --git a/assets/langs/en/settings.json b/assets/langs/en/settings.json
deleted file mode 100644
index 76afacdc..00000000
--- a/assets/langs/en/settings.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "settings": "Settings",
- "my-account": "MY ACCOUNT",
- "name": "Name",
- "username": "Username",
- "email": "Email",
- "social": "Social Accounts",
- "privacy": "PRIVACY",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "Show Name on Maps",
- "show-username-maps": "Show Username on Maps",
- "show-name-leaderboards": "Show Name on Leaderboards",
- "show-username-leaderboards": "Show Username on Leaderboards",
- "show-name-createdby": "Show Name on Created By",
- "show-username-createdby": "Show Username on Created By",
- "tags": "TAGS",
- "show-previous-tags": "Show Previous Tags",
- "logout": "Logout",
- "success": "Success!",
- "error": "Error!",
- "value-not-updated": "Value not updated",
- "value-updated": "Value updated",
- "go-back": "Go Back",
- "edit": "Edit",
- "save": "Save",
- "alert": "Alert",
- "do-you-really-want-to-change": "Do you really want to change this setting?",
- "ok": "OK",
- "cancel": "Cancel",
- "picked-up": "Picked Up",
- "litter-picked-up": "Litter is picked up",
- "enter-email": "Please enter an email address",
- "enter-username": "Please enter a username",
- "enter-name": "Please enter a name",
- "name-min-max": "Name should be between 3-20 characters",
- "username-min-max": "Username should be between 3-20 characters",
- "url-not-valid": "Please enter a valid url",
- "delete-account": "Delete Account",
- "delete-your-account": "Delete your account",
- "warning": "Warning",
- "password-incorrect": "Your password did not match"
-}
diff --git a/assets/langs/en/stats.json b/assets/langs/en/stats.json
deleted file mode 100644
index 2e63b1e6..00000000
--- a/assets/langs/en/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Global Data",
- "next-target": "Next Target\n{{count}} Litter",
- "total-litter": "Total Litter",
- "total-photos": "Total Photos",
- "total-users": "Total Users",
- "total-littercoin": "Total Littercoin"
-}
diff --git a/assets/langs/en/tag.json b/assets/langs/en/tag.json
deleted file mode 100644
index 4c01efe9..00000000
--- a/assets/langs/en/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "➕ Add Tag",
- "confirm": "Confirm",
- "type-to-suggest": "Type to suggest tags",
- "suggested-tags": "Suggested Tags: {{count}}",
- "alert": "Alert",
- "still-there": "The Litter is still there",
- "picked-up": "The Litter has been picked up",
- "litter-status": "Litter Status",
- "picked-thumb": "Picked up ⬆️",
- "not-picked-thumb": "Not picked up ⬇️",
- "delete-message": "Are you sure you want to delete this image ?",
- "cancel": "Cancel",
- "delete": "Yes, Delete",
- "custom-tags": "Custom Tags",
- "custom-tags-min": "Tag needs to be at least 3 characters long",
- "custom-tags-max": "Tag can be a maximum of 100 characters",
- "tag-already-added": "Tag already added",
- "tag-limit-reached": "You can upload up to 10 custom tags.",
- "delete-image": "\uD83D\uDEAE Delete Image"
-}
diff --git a/assets/langs/en/team.json b/assets/langs/en/team.json
deleted file mode 100644
index 963dfec4..00000000
--- a/assets/langs/en/team.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "total-members": "Total Members"
-}
diff --git a/assets/langs/en/user.json b/assets/langs/en/user.json
deleted file mode 100644
index 4637f31a..00000000
--- a/assets/langs/en/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Level",
- "level-up": "{{count}} XP to level up",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Next Littercoin",
- "photos": "Photos",
- "rank": "Rank",
- "tags": "Tags",
- "welcome": "Welcome",
- "XP": "XP"
-}
diff --git a/assets/langs/en/welcome.json b/assets/langs/en/welcome.json
deleted file mode 100644
index 005946ff..00000000
--- a/assets/langs/en/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "It's ",
- "easy": "EASY!",
- "just-tag-and-upload": "Just tag litter and upload it",
- "fun": "FUN!",
- "climb-leaderboards": "Climb the leaderboards at the #LitterWorldCup",
- "open": "OPEN!",
- "open-database": "Help us create the world's most advanced open database on litter and plastic pollution",
- "get-started": "Get Started!",
- "already-have-account": "Already have an account? Log in"
-}
diff --git a/assets/langs/es/auth.json b/assets/langs/es/auth.json
deleted file mode 100644
index db46e6be..00000000
--- a/assets/langs/es/auth.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "email-address": "Dirección de correo electrónico",
- "password": "Contraseña",
- "unique-username": "Nombre de usuario único",
- "create-account": "Crear una cuenta",
- "or": "o",
- "already-have": "¿Ya tienes una cuenta?",
- "forgot-password": "¿Se te olvidó tu contraseña?",
- "login": "Iniciar sesión",
- "back-to-login": "Volver al inicio de sesión",
- "enter-email": "Introduzca una dirección de correo eléctronico",
- "enter-password": "Ingrese una contraseña",
- "enter-username": "Ingrese un nombre de usuario",
- "must-contain": "Debe contener 1 mayúscula, 1 dígito, 6+ caracteres",
- "alphanumeric-username": "Debe ser alfanumérico, 8-20 caracteres, sin espacios",
- "email-not-valid": "Esta no es una dirección de correo electrónico válida",
- "username-min-max": "El nombre de usuario debe tener entre 3 y 20 caracteres",
- "username-equal-to-password": "El nombre de usuario no debe ser igual a la contraseña",
- "url-not-valid": "Introduzca una URL válida",
- "invalid-credentials": "Los detalles de inicio de sesión son incorrectos"
-}
diff --git a/assets/langs/es/es.json b/assets/langs/es/es.json
new file mode 100644
index 00000000..5d5bb073
--- /dev/null
+++ b/assets/langs/es/es.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP para subir de nivel",
+ "{{count}}% Next Littercoin": "{{count}}% siguiente Littercoin",
+ "{{photos}} selected": "{{photos}} seleccionadas",
+ "Add custom tag": "Agregar etiqueta personalizada",
+ "Add Tag": "Añadir etiqueta",
+ "Alert": "Alerta",
+ "Allow Gallery Access": "Permitir acceso a la galería",
+ "Allow Permissions": "Dar permisos",
+ "Already have an account?": "¿Ya tienes una cuenta?",
+ "Apply Filters": "Aplicar filtros",
+ "Are you sure you want to delete this image ?": "¿Estás seguro de que deseas eliminar esta imagen?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "¿Estás seguro de que deseas eliminar esta foto? Esto no se puede deshacer.",
+ "Back to Login": "Volver al inicio de sesión",
+ "Brands": "Marcas",
+ "Camera": "Cámara",
+ "Camera Access": "Acceso a la cámara",
+ "Cancel": "Cancelar",
+ "Clear all": "Limpiar todo",
+ "Clear Filters": "Limpiar filtros",
+ "Climb the leaderboards": "Sube en las clasificaciones",
+ "Close": "Cerrar",
+ "Confirm": "Confirmar",
+ "Copy Link": "Copiar enlace",
+ "Create Account": "Crear cuenta",
+ "Custom Tags": "Etiquetas personalizadas",
+ "Delete": "Eliminar",
+ "Delete Account": "Eliminar cuenta",
+ "Delete Image": "Eliminar imagen",
+ "Delete Photo": "Eliminar foto",
+ "Delete your account": "Eliminar tu cuenta",
+ "Do you really want to change this setting?": "¿Realmente quieres cambiar esta configuración?",
+ "Done": "Hecho",
+ "Easy": "Fácil",
+ "Edit": "Editar",
+ "Edit Tags": "Editar etiquetas",
+ "Email": "Correo",
+ "Email Address": "Correo electrónico",
+ "Email or Username": "Correo o nombre de usuario",
+ "Enable crowdsourced tagging": "Activar etiquetado colectivo",
+ "Error!": "¡Error!",
+ "Failed to update tags. Please try again.": "Error al actualizar las etiquetas. Por favor, inténtalo de nuevo.",
+ "Filter Uploads": "Filtrar subidas",
+ "Forgot password?": "¿Olvidaste tu contraseña?",
+ "From": "Desde",
+ "Fun": "Divertido",
+ "Geotagged": "Geoetiquetado",
+ "Get Started!": "¡Comienza!",
+ "Global Data": "Datos globales",
+ "Go Back": "Volver",
+ "Good": "Buena",
+ "Just tag litter and upload it": "Etiqueta la basura y súbela",
+ "Leaderboard": "Clasificación",
+ "Level": "Nivel",
+ "Link Copied": "Enlace copiado",
+ "Litter is picked up": "La basura se recoge",
+ "Litter Status": "Estado de la basura",
+ "Littercoin": "Littercoin",
+ "Location Access": "Acceso a la ubicación",
+ "Log In": "Iniciar sesión",
+ "Logout": "Cerrar sesión",
+ "Map": "Mapa",
+ "Materials": "Materiales",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Debe ser alfanumérico, 8-20 caracteres, sin espacios",
+ "MY ACCOUNT": "MI CUENTA",
+ "My Uploads": "Mis subidas",
+ "Name": "Nombre",
+ "Name should be between 3-20 characters": "El nombre debe tener entre 3-20 caracteres",
+ "New Today": "Nuevos hoy",
+ "New Version Available": "Nueva versión disponible",
+ "Next": "Siguiente",
+ "Next Target\n{{count}} Litter": "Siguiente objetivo\n{{count}} Basura",
+ "No geotagged photos found": "No se encontraron fotos geoetiquetadas",
+ "No images to upload": "No hay imágenes para subir",
+ "No matching uploads": "No hay subidas que coincidan",
+ "No uploads yet": "Aún no hay subidas",
+ "Not now, Later": "No ahora, después",
+ "Not picked up": "No recogido",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Solo se pueden seleccionar imágenes geoetiquetadas",
+ "Open Source": "Código Abierto",
+ "found without GPS data": "encontradas sin datos GPS",
+ "no GPS data and cannot be uploaded": "sin datos GPS y no se pueden subir",
+ "or": "o",
+ "photo": "foto",
+ "photo has": "foto tiene",
+ "photos": "fotos",
+ "photos have": "fotos tienen",
+ "Password": "Contraseña",
+ "Password must be at least 6 characters": "La contraseña debe tener al menos 6 caracteres",
+ "Photos": "Fotos",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "Las fotos necesitan datos GPS para subirse. Asegúrate de que los servicios de ubicación estén activados al tomar fotos.",
+ "Picked up": "Recogido",
+ "Picked Up": "Recogida",
+ "Please add at least one tag before saving.": "Por favor, añade al menos una etiqueta antes de guardar.",
+ "Please enter a name": "Introduce un nombre",
+ "Please enter a password": "Introduce una contraseña",
+ "Please enter a username": "Introduce un nombre de usuario",
+ "Please enter a valid url": "Introduce una URL válida",
+ "Please enter an email address": "Introduce un correo electrónico",
+ "Please enter your email or username": "Introduce tu correo o nombre de usuario",
+ "Please Give Permissions": "Por favor otorga permisos",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Por favor, danos acceso a tu galería para poder subir imágenes geoetiquetadas desde tu dispositivo",
+ "Please update the app for an improved experience": "Actualiza la app para una mejor experiencia",
+ "Please wait while your photos upload": "Espera mientras se suben tus fotos",
+ "Press Upload": "Presiona Subir",
+ "PRIVACY": "PRIVACIDAD",
+ "Quantity": "Cantidad",
+ "Rank": "Rango",
+ "Save": "Guardar",
+ "Search brands": "Buscar marcas",
+ "Search by custom tag": "Buscar por etiqueta personalizada",
+ "Search by tag name": "Buscar por nombre de etiqueta",
+ "Search materials": "Buscar materiales",
+ "Select a photo": "Seleccionar una foto",
+ "Select the images you want to delete": "Selecciona las imágenes que deseas eliminar",
+ "Send Reset Link": "Enviar enlace de restablecimiento",
+ "Settings": "Configuración",
+ "Short": "Corta",
+ "Show Name on Created By": "Mostrar nombre en Creado por",
+ "Show Name on Leaderboards": "Mostrar nombre en clasificación",
+ "Show Name on Maps": "Mostrar nombre en mapas",
+ "Show on Map": "Mostrar en el mapa",
+ "Show Previous Tags": "Mostrar etiquetas anteriores",
+ "Show Username on Created By": "Mostrar nombre de usuario en Creado por",
+ "Show Username on Leaderboards": "Mostrar nombre de usuario en clasificación",
+ "Show Username on Maps": "Mostrar nombre de usuario en mapas",
+ "Social Accounts": "Cuentas sociales",
+ "Some tags failed to upload. You can retry from your uploads.": "Algunas etiquetas no se pudieron subir. Puedes reintentar desde tus subidas.",
+ "Start photographing litter to see your uploads here": "Empieza a fotografiar basura para ver tus subidas aquí",
+ "Strong": "Fuerte",
+ "Success!": "¡Éxito!",
+ "Suggested Tags: {{count}}": "Etiquetas sugeridas: {{count}}",
+ "Tag already added": "Etiqueta ya añadida",
+ "Tag can be a maximum of 100 characters": "La etiqueta puede tener un máximo de 100 caracteres",
+ "Tag needs to be at least 3 characters long": "La etiqueta debe tener al menos 3 caracteres",
+ "Tagged": "Etiquetado",
+ "TAGGING": "ETIQUETADO",
+ "Tags": "Etiquetas",
+ "TAGS": "ETIQUETAS",
+ "tags": "etiquetas",
+ "Take a photo and select it from the gallery": "Toma una foto o selecciona una de la galería",
+ "Thank you!!!": "¡¡¡Gracias!!!",
+ "The Litter has been picked up": "La basura ha sido recogida",
+ "The Litter is still there": "La basura sigue ahí",
+ "The link has been copied to your clipboard.": "El enlace se ha copiado al portapapeles.",
+ "The login details are incorrect": "Los datos de inicio de sesión son incorrectos",
+ "This is not a valid email address": "Esta no es una dirección de correo válida",
+ "This photo has no location data": "Esta foto no tiene datos de ubicación",
+ "This Month": "Este mes",
+ "This Week": "Esta semana",
+ "To": "Hasta",
+ "To capture litter images from app camera": "Para capturar imágenes de basura con la cámara de la app",
+ "To get exact geolocation of where the litter is": "Para obtener la ubicación exacta de la basura",
+ "To Tag": "Por etiquetar",
+ "Today": "Hoy",
+ "Total Littercoin": "Littercoin total",
+ "Total People": "Total de personas",
+ "Total Photos": "Fotos totales",
+ "Total Tags": "Etiquetas totales",
+ "Total Users": "Usuarios totales",
+ "Type to suggest tags": "Escribe para sugerir etiquetas",
+ "UN Digital Public Good": "Bien público digital de la ONU",
+ "Unique Username": "Nombre de usuario único",
+ "Untagged": "Sin etiquetar",
+ "Update Now": "Actualizar ahora",
+ "Update Tags": "Actualizar etiquetas",
+ "Upload": "Subir",
+ "Username": "Nombre de usuario",
+ "Username should be between 3-20 characters": "El nombre de usuario debe tener entre 3-20 caracteres",
+ "Username should not be equal to password": "El nombre de usuario no debe ser igual a la contraseña",
+ "Value not updated": "Valor no actualizado",
+ "Value updated": "Valor actualizado",
+ "Warning": "Advertencia",
+ "Welcome": "Bienvenido",
+ "XP": "XP",
+ "Yes, Delete": "Sí, eliminar",
+ "You can upload up to 10 custom tags.": "Puedes subir hasta 10 etiquetas personalizadas.",
+ "You have tagged {{count}} photos": "Has etiquetado {{count}} fotos",
+ "You have uploaded {{count}} photos": "Has subido {{count}} fotos",
+ "Your password did not match": "Tu contraseña no coincide"
+}
diff --git a/assets/langs/es/index.js b/assets/langs/es/index.js
index 0ed96cef..c28558e1 100644
--- a/assets/langs/es/index.js
+++ b/assets/langs/es/index.js
@@ -1,23 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './es.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import team from './team.json';
-import user from './user.json';
-import welcome from './welcome.json';
export const es = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- team,
- user,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/es/leftpage.json b/assets/langs/es/leftpage.json
deleted file mode 100644
index c382b99c..00000000
--- a/assets/langs/es/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Fotos",
- "geotagged": "Geo etiquetado",
- "cancel": "Cancelar",
- "done": "Hecho",
- "upload": "Cargar",
- "next": "Próximo",
- "select-a-photo": "Seleccionar una foto",
- "delete": "Eliminar",
- "selected": "{photos} seleccionada",
- "press-upload": "Presione cargar",
- "select-to-delete": "Seleccione las imágenes que desea eliminar",
- "please-wait-uploading": "Espere mientras se cargan sus fotos",
- "thank-you": "Gracias!!!",
- "you-have-uploaded": "Has subido {{count}} fotos",
- "you-have-tagged": "Has etiquetado {{count}} fotos",
- "close": "Cerrar",
- "take-photo": "Tome una foto o seleccione una de la galería",
- "no-images": "No hay imágenes para cargar",
- "camera": "Cámara",
- "leaderboard": "Clasificación"
-}
diff --git a/assets/langs/es/litter.json b/assets/langs/es/litter.json
index e315b3f1..02c7df05 100644
--- a/assets/langs/es/litter.json
+++ b/assets/langs/es/litter.json
@@ -1,306 +1,206 @@
{
"categories": {
"alcohol": "Alcohol",
- "art": "Arte",
- "brands": "Marcas",
- "coastal": "Coastera",
- "coffee": "Café",
- "dumping": "Vertedero",
+ "electronics": "Electrónica",
"food": "Comida",
"industrial": "Industrial",
- "material": "Material",
- "other": "Otro",
- "sanitary": "Sanitario",
- "softdrinks": "Refresco",
- "smoking": "Fumar",
- "custom-tag": "Etiquetas Personalizadas"
- },
- "smoking": {
- "butts": "Cigarrillo / Colilla",
- "lighters": "Encendedor",
- "cigaretteBox": "Caja de cigarrillos",
- "tobaccoPouch": "Bolsa de tabaco",
- "skins": "Papel de cigarillo",
- "smoking_plastic": "Envases de plástico",
- "filters": "Filtros",
- "filterbox": "Caja de filtro",
- "smokingOther": "Fumar-Otro",
- "vape_pen": "Vaporizador",
- "vape_oil": "Aceite de vaporizador"
+ "marine": "Marino",
+ "medical": "Médico",
+ "personal_care": "Cuidado Personal",
+ "pets": "Mascotas",
+ "smoking": "Tabaco",
+ "softdrinks": "Refrescos",
+ "unclassified": "Sin Clasificar",
+ "vehicles": "Vehículos"
},
"alcohol": {
- "beerBottle": "Botella de cerveza",
- "spiritBottle": "Botella de alcohol",
- "wineBottle": "Botella de vino",
- "beerCan": "Lata de cerveza",
- "brokenGlass": "Vidrio roto",
- "bottleTops": "Tapas de botellas de cerveza",
- "paperCardAlcoholPackaging": "Envoltorios de papel",
- "plasticAlcoholPackaging": "Envoltorios de plastico",
- "alcoholOther": "Alcohol-Otro",
- "pint": "Vaso de pinta",
- "six_pack_rings": "Anillos de seis-pack -cerveza-",
- "alcohol_plastic_cups": "Vaso de plástico"
- },
- "coffee": {
- "coffeeCups": "Vaso de café",
- "coffeeLids": "Tapa de vaso de café",
- "coffeeOther": "Café-Otro"
+ "bottle": "Botella",
+ "bottle_cap": "Tapón de Botella",
+ "broken_glass": "Vidrio Roto",
+ "can": "Lata",
+ "cup": "Vaso",
+ "other": "Otro",
+ "packaging": "Envase",
+ "pint_glass": "Vaso de Pinta",
+ "pull_ring": "Anilla",
+ "shot_glass": "Vaso de Chupito",
+ "six_pack_rings": "Anillas de Six-Pack",
+ "wine_glass": "Copa de Vino"
+ },
+ "electronics": {
+ "battery": "Batería",
+ "cable": "Cable",
+ "charger": "Cargador",
+ "headphones": "Auriculares",
+ "other": "Otro",
+ "phone": "Teléfono"
},
"food": {
- "sweetWrappers": "Envoltorios de dulces",
- "paperFoodPackaging": "Envoltorios de papel",
- "plasticFoodPackaging": "Envoltorios de plástico",
- "plasticCutlery": "Cubiertos de plástico",
- "crisp_small": "Paquete de papitas (chips) (pequeño)",
- "crisp_large": "paquete de papitas (chips) (grande)",
- "styrofoam_plate": "Plato de unicel",
- "napkins": "Servilleta",
- "sauce_packet": "Paquete de salsa",
- "glass_jar": "Jarra de vidrio",
- "glass_jar_lid": "Tapa de jarra de vidrio",
- "pizza_box": "Caja de pizza",
- "aluminium_foil": "Papel de aluminio",
- "chewing_gum": "Chicle",
- "foodOther": "Comida-Otro"
- },
- "softdrinks": {
- "waterBottle": "Botella de agua de plástico",
- "fizzyDrinkBottle": "Botella de soda/refresco",
- "tinCan": "Lata",
- "bottleLid": "Tapa de botella",
- "bottleLabel": "Etiquetas de botellas",
- "sportsDrink": "Botella de bebida deportiva",
- "straws": "Pajitas/popote",
- "plastic_cups": "Vaso de plástico",
- "plastic_cup_tops": "Tapas de vasos de plástico",
- "milk_bottle": "Botella de leche",
- "milk_carton": "Cartón de leche",
- "paper_cups": "Paper Cups",
- "juice_cartons": "Cartones de jugo",
- "juice_bottles": "Botellas de jugo",
- "juice_packet": "Paquete de jugo",
- "ice_tea_bottles": "Botellas de té helado",
- "ice_tea_can": "Lata de té helado",
- "energy_can": "Lata de bebida energética",
- "pullring": "Pull-ring (todo)",
- "strawpacket": "Envoltorio de paja/popote",
- "styro_cup": "Taza de unicel",
- "softDrinkOther": "Refresco (otro)"
- },
- "sanitary": {
- "gloves": "Guantes",
- "facemask": "Mascarilla",
- "condoms": "Condones",
- "nappies": "Pañales",
- "menstral": "Menstrual",
- "deodorant": "Desodorante",
- "ear_swabs": "Hisopos de oído",
- "tooth_pick": "Palillo de dientes",
- "tooth_brush": "Cepillo de dientes",
- "wetwipes": "Toallitas húmedas",
- "hand_sanitiser": "Desinfectante de manos",
- "sanitaryOther": "Sanitario (otro)"
- },
- "other": {
- "dogshit": "Popó de perro",
- "pooinbag": "Popó de perro en una bolsa",
- "automobile": "Automóvil",
- "clothing": "Ropa",
- "traffic_cone": "Cono de tráfico",
- "life_buoy": "Boya de vida",
- "plastic": "Plástico no identificado",
- "dump": "Vertedero ilegal",
- "metal": "Objeto de metal",
- "plastic_bags": "Bolsas de plástico",
- "election_posters": "Carteles electorales",
- "forsale_posters": "Venta de carteles",
- "books": "Libros",
- "magazine": "Revistas",
- "paper": "Papel",
- "stationary": "Papelería",
- "washing_up": "Botella de producto de lavado",
- "hair_tie": "Liga para el cabello",
- "ear_plugs": "Tapones para los oídos (música)",
- "batteries": "Baterías",
- "elec_small": "Eléctrico pequeño",
- "elec_large": "Eléctrico grande",
- "other": "Otro (otro)",
- "random_litter": "Basura aleatoria"
- },
- "dumping": {
- "small": "Pequeño",
- "medium": "Mediano",
- "large": "Grande"
+ "bag": "Bolsa",
+ "box": "Caja",
+ "can": "Lata",
+ "crisp_packet": "Bolsa de Patatas Fritas",
+ "cutlery": "Cubiertos",
+ "gum": "Chicle",
+ "jar": "Tarro",
+ "lid": "Tapa",
+ "napkins": "Servilletas",
+ "other": "Otro",
+ "packaging": "Envase",
+ "packet": "Paquete",
+ "pizza_box": "Caja de Pizza",
+ "plate": "Plato",
+ "tinfoil": "Papel de Aluminio",
+ "wrapper": "Envoltorio"
},
"industrial": {
- "oil": "Petróleo",
- "industrial_plastic": "Plástico",
- "chemical": "Químico",
- "bricks": "Piedras",
+ "bricks": "Ladrillos",
+ "chemical_container": "Contenedor de Químicos",
+ "construction": "Construcción",
+ "container": "Contenedor",
+ "dumping_large": "Vertido (Grande)",
+ "dumping_medium": "Vertido (Mediano)",
+ "dumping_small": "Vertido (Pequeño)",
+ "oil_container": "Contenedor de Aceite",
+ "oil_drum": "Bidón de Aceite",
+ "other": "Otro",
+ "pallet": "Palé",
+ "pipe": "Tubería",
"tape": "Cinta",
- "industrial_other": "Industrial (otro)"
+ "wire": "Alambre"
},
- "coastal": {
- "microplastics": "Microplásticos",
- "mediumplastics": "Medioplásticos",
+ "marine": {
+ "buoy": "Boya",
+ "crate": "Cajón",
+ "fishing_net": "Red de Pesca",
"macroplastics": "Macroplásticos",
- "rope_small": "Cuerda pequeña",
- "rope_medium": "Cuerda mediana",
- "rope_large": "Cuerda grande",
- "fishing_gear_nets": "Equipo de pesca / redes",
- "buoys": "Boyas",
- "degraded_plasticbottle": "Botella de plástico degradado",
- "degraded_plasticbag": "Bolsa de plástico degradada",
- "degraded_straws": "Pajitas/popote para beber degradadas",
- "degraded_lighters": "Encendedores degradados",
- "balloons": "Globos",
- "lego": "Lego",
- "shotgun_cartridges": "Cartuchos de escopeta",
- "styro_small": "Espuma de poliestireno (unicel) pequeño",
- "styro_medium": "Espuma de poliestireno (unicel) medio",
- "styro_large": "Espuma de poliestireno (unicel) grande",
- "coastal_other": "Coastera (otro)"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "tim_hortons": "Tim Hortons",
- "thins": "Thins",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "Excrementos de perro",
- "littercat": "Excrementos de gato",
- "duck": "Excrementos de pato"
+ "microplastics": "Microplásticos",
+ "other": "Otro",
+ "rope": "Cuerda",
+ "shotgun_cartridge": "Cartucho de Escopeta",
+ "styrofoam": "Poliestireno Expandido"
+ },
+ "materials": {
+ "aluminium": "Aluminio",
+ "asphalt": "Asfalto",
+ "bamboo": "Bambú",
+ "bioplastic": "Bioplástico",
+ "cardboard": "Cartón",
+ "ceramic": "Cerámica",
+ "clay": "Arcilla",
+ "cloth": "Tela",
+ "concrete": "Hormigón",
+ "copper": "Cobre",
+ "cork": "Corcho",
+ "cotton": "Algodón",
+ "elastic": "Elástico",
+ "fiberglass": "Fibra de Vidrio",
+ "foam": "Espuma",
+ "foil": "Papel de Aluminio",
+ "glass": "Vidrio",
+ "latex": "Látex",
+ "metal": "Metal",
+ "nylon": "Nailon",
+ "paper": "Papel",
+ "plastic": "Plástico",
+ "polyester": "Poliéster",
+ "polystyrene": "Poliestireno",
+ "rubber": "Caucho",
+ "steel": "Acero",
+ "stone": "Piedra",
+ "wood": "Madera"
+ },
+ "medical": {
+ "bandage": "Vendaje",
+ "face_mask": "Mascarilla",
+ "gloves": "Guantes",
+ "medicine_bottle": "Frasco de Medicamento",
+ "other": "Otro",
+ "pill_pack": "Blíster de Pastillas",
+ "plaster": "Tirita",
+ "sanitiser": "Desinfectante",
+ "syringe": "Jeringa"
+ },
+ "personal_care": {
+ "condom": "Condón",
+ "condom_wrapper": "Envoltorio de Condón",
+ "dental_floss": "Hilo Dental",
+ "deodorant_can": "Bote de Desodorante",
+ "ear_swabs": "Bastoncillos de Oído",
+ "menstrual_cup": "Copa Menstrual",
+ "nappies": "Pañales",
+ "other": "Otro",
+ "sanitary_pad": "Compresa",
+ "tampon": "Tampón",
+ "toothbrush": "Cepillo de Dientes",
+ "toothpaste_tube": "Tubo de Pasta de Dientes",
+ "wipes": "Toallitas Húmedas"
},
- "presence": {
- "picked-up": "¡La basura ha sido recogida!",
- "still-there": "¡La basura sigue ahí!"
+ "pets": {
+ "dog_waste": "Excremento de Perro",
+ "dog_waste_in_bag": "Excremento de Perro en Bolsa",
+ "other": "Otro"
},
- "tags": {
- "type-to-suggest": "Sugiere otras etiquetas",
- "suggested": "Etiquetas sugeridas {{count}}"
+ "smoking": {
+ "ashtray": "Cenicero",
+ "butts": "Colillas de Cigarrillo",
+ "cigarette_box": "Caja de Cigarrillos",
+ "cigarette_filter": "Filtro de Cigarrillo",
+ "lighters": "Encendedores",
+ "match_box": "Caja de Cerillas",
+ "other": "Otro",
+ "packaging": "Envase",
+ "rolling_papers": "Papel de Liar",
+ "tobacco_pouch": "Bolsa de Tabaco",
+ "vape_cartridge": "Cartucho de Vaporizador",
+ "vape_pen": "Vaporizador"
},
- "dogshit": {
- "poo": "¡Sorpresa!",
- "poo_in_bag": "¡Sorpresa en una bolsa!"
+ "softdrinks": {
+ "bottle": "Botella",
+ "broken_glass": "Vidrio Roto",
+ "can": "Lata",
+ "carton": "Cartón",
+ "coffee_pod": "Cápsula de Café",
+ "cup": "Vaso",
+ "juice_pouch": "Bolsa de Jugo",
+ "label": "Etiqueta",
+ "lid": "Tapa",
+ "other": "Otro",
+ "packaging": "Envase",
+ "straw": "Pajita",
+ "straw_wrapper": "Envoltorio de Pajita"
},
- "material": {
- "aluminium": "Aluminio",
- "bronze": "Bronce",
- "carbon_fiber": "Fibra de carbono",
- "ceramic": "Cerámica",
- "composite": "Compuesto",
- "concrete": "Concreto",
- "copper": "Cobre",
- "fiberglass": "Fibra de vidrio",
- "glass": "Vidrio",
- "iron_or_steel": "Hierro/Acero",
- "latex": "Látex",
- "metal": "Metal",
- "nickel": "Níquel",
- "nylon": "Nailon",
- "paper": "Papel",
- "plastic": "Plástico",
- "polyethylene": "Polietileno",
- "polymer": "Polímero",
- "polypropylene": "Polipropileno",
- "polystyrene": "Poliestireno",
- "pvc": "PVC",
- "rubber": "Caucho",
- "titanium": "Titanio",
- "wood": "Madera"
+ "types": {
+ "beer": "Cerveza",
+ "cider": "Sidra",
+ "coffee": "Café",
+ "energy": "Energética",
+ "iced_tea": "Té Helado",
+ "juice": "Jugo",
+ "milk": "Leche",
+ "plant_milk": "Leche Vegetal",
+ "smoothie": "Batido",
+ "soda": "Refresco",
+ "sparkling_water": "Agua con Gas",
+ "spirits": "Licores",
+ "sports": "Deportiva",
+ "tea": "Té",
+ "unknown": "Desconocido",
+ "water": "Agua",
+ "wine": "Vino"
+ },
+ "unclassified": {
+ "other": "Otro"
+ },
+ "vehicles": {
+ "battery": "Batería",
+ "bumper": "Parachoques",
+ "car_part": "Pieza de Coche",
+ "license_plate": "Matrícula",
+ "light": "Luz",
+ "mirror": "Espejo",
+ "other": "Otro",
+ "tyre": "Neumático",
+ "wheel": "Rueda"
}
}
diff --git a/assets/langs/es/permission.json b/assets/langs/es/permission.json
deleted file mode 100644
index 462ad0f0..00000000
--- a/assets/langs/es/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Permitir acceso a la galería",
- "allow-permission": "Dar permisos",
- "camera-access": "Acceso a la cámara",
- "camera-access-body": "Para capturar imágenes de basura desde la cámara de la aplicación",
- "gallery-body": "Por favor, bríndenos acceso a su galería, es necesario si desea cargar imágenes geoetiquetadas desde la galería.",
- "location-access": "Acceso a la ubicación",
- "location-body": "Para obtener la geolocalización exacta de dónde está la basura",
- "new-version": "Nueva versión disponible",
- "not-now": "No ahora, después",
- "please-give-permissions": "Por favor otorgue permisos",
- "please-update-app": "Actualiza la aplicación para mejorar la experiencia",
- "update-now": "Actualizar ahora"
-}
diff --git a/assets/langs/es/settings.json b/assets/langs/es/settings.json
deleted file mode 100644
index f580f2f9..00000000
--- a/assets/langs/es/settings.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "settings": "Configuración",
- "my-account": "MI CUENTA",
- "name": "Nombre",
- "username": "Nombre de usuario",
- "email": "Correos",
- "social": "Cuentas sociales",
- "privacy": "PRIVACIDAD",
- "tagging": "ETIQUETAR",
- "enable_admin_tagging": "Activar el etiquetado colectivo",
- "show-name-maps": "Mostrar nombre en mapas",
- "show-username-maps": "Mostrar nombre de usuario en mapas",
- "show-name-leaderboards": "Mostrar nombre en el marcador",
- "show-username-leaderboards": "Mostrar nombre de usuario en los marcadores",
- "show-name-createdby": "Mostrar nombre en: Creado Por",
- "show-username-createdby": "Mostrar nombre de usuario: en Creado Por",
- "tags": "ETIQUETAS",
- "show-previous-tags": "Mostrar Etiquetas Anteriores",
- "logout": "Cerrar sesión",
- "success": "¡Éxito!",
- "error": "¡Error!",
- "value-not-updated": "Valor no actualizado",
- "value-updated": "Cantidad actualizada",
- "go-back": "Regresa",
- "edit": "Editar",
- "save": "Guardar",
- "alert": "Alerta",
- "do-you-really-want-to-change": "¿De verdad quieres cambiar esta configuración?",
- "ok": "Okay",
- "cancel": "Cancelar",
- "picked-up": "Recogida",
- "litter-picked-up": "La basura se recoge",
- "enter-email": "Introduce un correo electrónico",
- "enter-username": "Introduce un nombre de usuario",
- "enter-name": "Introduce un nombre",
- "name-min-max": "El nombre debe tener entre 3-20 caracteres",
- "username-min-max": "El nombre de usuario debe tener entre 3-20 caracteres",
- "url-not-valid": "Introduce una URL válida"
-}
diff --git a/assets/langs/es/stats.json b/assets/langs/es/stats.json
deleted file mode 100644
index 4798769e..00000000
--- a/assets/langs/es/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Datos globales",
- "next-target": "Siguiente objetivo\n{{count}} Basura",
- "total-litter": "Basura total",
- "total-photos": "Fotos totales",
- "total-users": "Total de usuario/as",
- "total-littercoin": "Total de Littercoin"
-}
diff --git a/assets/langs/es/tag.json b/assets/langs/es/tag.json
deleted file mode 100644
index 7e61f67c..00000000
--- a/assets/langs/es/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Añadir una etiqueta",
- "confirm": "Confirmar",
- "type-to-suggest": "Escriba para sugerir etiquetas",
- "suggested-tags": "Etiquetas sugeridas {{count}}",
- "alert": "Alerta",
- "still-there": "¡La basura sigue ahí!",
- "picked-up": "¡La basura ha sido recogida!",
- "litter-status": "Estado de la basura",
- "picked-thumb": "Recogido 👍🏻",
- "not-picked-thumb": "No recogido 👎🏻",
- "delete-message": "¿Estás seguro de que deseas eliminar esta imagen?",
- "cancel": "Cancelar",
- "delete": "Sí, eliminar",
- "custom-tags": "Etiquetas Personalizadas",
- "custom-tags-min": "La etiqueta debe tener al menos 3 caracteres",
- "custom-tags-max": "La etiqueta puede tener un máximo de 100 caracteres",
- "tag-already-added": "Etiqueta ya añadida",
- "tag-limit-reached": "Puede cargar hasta 3 etiquetas personalizadas",
- "delete-image": "\uD83D\uDEAE Eliminar imagen"
-}
diff --git a/assets/langs/es/team.json b/assets/langs/es/team.json
deleted file mode 100644
index 2197e639..00000000
--- a/assets/langs/es/team.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "total-members": "Total de miembros"
-}
diff --git a/assets/langs/es/user.json b/assets/langs/es/user.json
deleted file mode 100644
index f82d9c73..00000000
--- a/assets/langs/es/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Nivel",
- "level-up": "{{count}} XP para subir de nivel",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Siguiente Littercoin",
- "photos": "Fotos",
- "rank": "Rango",
- "tags": "Etiquetas",
- "welcome": "Bienvenida",
- "XP": "XP"
-}
diff --git a/assets/langs/es/welcome.json b/assets/langs/es/welcome.json
deleted file mode 100644
index 7ed2bd8e..00000000
--- a/assets/langs/es/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "¡Es ",
- "easy": "FÁCIL!",
- "just-tag-and-upload": "Etiquete la basura y súbala",
- "fun": "DIVERTIDO!",
- "climb-leaderboards": "Compite en la #CopaMundialBasura",
- "open": "PÚBLICO!",
- "open-database": "Ayúdanos a crear la base de datos abierta más avanzada del mundo sobre basura y contaminación plástica",
- "get-started": "¡Comienza!",
- "already-have-account": "¿Ya tienes una cuenta? Iniciar sesión"
-}
diff --git a/assets/langs/fr/auth.json b/assets/langs/fr/auth.json
deleted file mode 100644
index 8ba50b91..00000000
--- a/assets/langs/fr/auth.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "email-address": "Adresse email",
- "password": "Mot de passe",
- "unique-username": "Nom d'utilisateur unique",
- "create-account": "Créer un compte",
- "or": "ou",
- "already-have": "Vous avez déjà un compte?",
- "forgot-password": "Oublié mot de passe?",
- "login": "S'identifier",
- "back-to-login": "Revenir à s'identifier",
- "enter-email": "entrez une adresse e-mail s'il vous plaît",
- "enter-password": "entrez un mot de passe s'il vous plaît",
- "enter-username": "entrez un nom d'utilisateur s'il vous plaît",
- "must-contain": "Doit contenir 1 majuscule, 1 chiffre, 6+ caractères",
- "alphanumeric-username": "Doit être alphanumérique, 8-20 caractères, sans espaces",
- "email-not-valid": "Cette adresse email n'est pas valide",
- "invalid-credentials": "Les détails de connexion sont incorrects"
-}
diff --git a/assets/langs/fr/fr.json b/assets/langs/fr/fr.json
new file mode 100644
index 00000000..9aa9c6d2
--- /dev/null
+++ b/assets/langs/fr/fr.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP pour monter de niveau",
+ "{{count}}% Next Littercoin": "{{count}}% prochain Littercoin",
+ "{{photos}} selected": "{{photos}} sélectionnée(s)",
+ "Add custom tag": "Ajouter une étiquette personnalisée",
+ "Add Tag": "Ajouter une étiquette",
+ "Alert": "Alerte",
+ "Allow Gallery Access": "Autoriser l'accès à la galerie",
+ "Allow Permissions": "Autoriser les permissions",
+ "Already have an account?": "Vous avez déjà un compte ?",
+ "Apply Filters": "Appliquer les filtres",
+ "Are you sure you want to delete this image ?": "Êtes-vous sûr de vouloir supprimer cette image ?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "Êtes-vous sûr de vouloir supprimer cette photo? Cela ne peut pas être annulé.",
+ "Back to Login": "Retour à la connexion",
+ "Brands": "Marques",
+ "Camera": "Appareil photo",
+ "Camera Access": "Accès à l'appareil photo",
+ "Cancel": "Annuler",
+ "Clear all": "Tout effacer",
+ "Clear Filters": "Effacer les filtres",
+ "Climb the leaderboards": "Grimpez dans les classements",
+ "Close": "Fermer",
+ "Confirm": "Confirmer",
+ "Copy Link": "Copier le lien",
+ "Create Account": "Créer un compte",
+ "Custom Tags": "Étiquettes personnalisées",
+ "Delete": "Supprimer",
+ "Delete Account": "Supprimer le compte",
+ "Delete Image": "Supprimer l'image",
+ "Delete Photo": "Supprimer la photo",
+ "Delete your account": "Supprimer votre compte",
+ "Do you really want to change this setting?": "Voulez-vous vraiment modifier ce paramètre ?",
+ "Done": "Terminé",
+ "Easy": "Facile",
+ "Edit": "Modifier",
+ "Edit Tags": "Modifier les tags",
+ "Email": "E-mail",
+ "Email Address": "Adresse e-mail",
+ "Email or Username": "E-mail ou nom d'utilisateur",
+ "Enable crowdsourced tagging": "Activer l'étiquetage collaboratif",
+ "Error!": "Erreur !",
+ "Failed to update tags. Please try again.": "Échec de la mise à jour des tags. Veuillez réessayer.",
+ "Filter Uploads": "Filtrer les téléversements",
+ "Forgot password?": "Mot de passe oublié ?",
+ "From": "De",
+ "Fun": "Amusant",
+ "Geotagged": "Géolocalisé",
+ "Get Started!": "Commencez !",
+ "Global Data": "Données mondiales",
+ "Go Back": "Retour",
+ "Good": "Bon",
+ "Just tag litter and upload it": "Étiquetez les déchets et téléversez-les",
+ "Leaderboard": "Classement",
+ "Level": "Niveau",
+ "Link Copied": "Lien copié",
+ "Litter is picked up": "Les déchets sont ramassés",
+ "Litter Status": "Statut des déchets",
+ "Littercoin": "Littercoin",
+ "Location Access": "Accès à la localisation",
+ "Log In": "Se connecter",
+ "Logout": "Déconnexion",
+ "Map": "Carte",
+ "Materials": "Matériaux",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Doit être alphanumérique, 8-20 caractères, sans espaces",
+ "MY ACCOUNT": "MON COMPTE",
+ "My Uploads": "Mes uploads",
+ "Name": "Nom",
+ "Name should be between 3-20 characters": "Le nom doit contenir entre 3 et 20 caractères",
+ "New Today": "Nouveaux aujourd'hui",
+ "New Version Available": "Nouvelle version disponible",
+ "Next": "Suivant",
+ "Next Target\n{{count}} Litter": "Prochaine cible\n{{count}} Déchets",
+ "No geotagged photos found": "Aucune photo géolocalisée trouvée",
+ "No images to upload": "Aucune image à téléverser",
+ "No matching uploads": "Aucun téléversement correspondant",
+ "No uploads yet": "Aucun téléversement",
+ "Not now, Later": "Pas maintenant, plus tard",
+ "Not picked up": "Non ramassé",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Seules les images géolocalisées peuvent être sélectionnées",
+ "Open Source": "Open Source",
+ "found without GPS data": "trouvées sans données GPS",
+ "no GPS data and cannot be uploaded": "pas de données GPS et ne peuvent pas être téléchargées",
+ "or": "ou",
+ "photo": "photo",
+ "photo has": "photo a",
+ "photos": "photos",
+ "photos have": "photos ont",
+ "Password": "Mot de passe",
+ "Password must be at least 6 characters": "Le mot de passe doit contenir au moins 6 caractères",
+ "Photos": "Photos",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "Les photos ont besoin de données GPS pour être téléchargées. Assurez-vous que les services de localisation sont activés lors de la prise de photos.",
+ "Picked up": "Ramassé",
+ "Picked Up": "Ramassé",
+ "Please add at least one tag before saving.": "Veuillez ajouter au moins un tag avant d'enregistrer.",
+ "Please enter a name": "Veuillez entrer un nom",
+ "Please enter a password": "Veuillez entrer un mot de passe",
+ "Please enter a username": "Veuillez entrer un nom d'utilisateur",
+ "Please enter a valid url": "Veuillez entrer une URL valide",
+ "Please enter an email address": "Veuillez entrer une adresse e-mail",
+ "Please enter your email or username": "Veuillez entrer votre e-mail ou nom d'utilisateur",
+ "Please Give Permissions": "Veuillez accorder les permissions",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Veuillez nous donner accès à votre galerie pour téléverser des images géolocalisées depuis votre appareil",
+ "Please update the app for an improved experience": "Veuillez mettre à jour l'application pour une meilleure expérience",
+ "Please wait while your photos upload": "Veuillez patienter pendant le téléversement de vos photos",
+ "Press Upload": "Appuyez sur Téléverser",
+ "PRIVACY": "CONFIDENTIALITÉ",
+ "Quantity": "Quantité",
+ "Rank": "Rang",
+ "Save": "Enregistrer",
+ "Search brands": "Rechercher des marques",
+ "Search by custom tag": "Rechercher par étiquette personnalisée",
+ "Search by tag name": "Rechercher par nom d'étiquette",
+ "Search materials": "Rechercher des matériaux",
+ "Select a photo": "Sélectionnez une photo",
+ "Select the images you want to delete": "Sélectionnez les images que vous souhaitez supprimer",
+ "Send Reset Link": "Envoyer le lien de réinitialisation",
+ "Settings": "Paramètres",
+ "Short": "Court",
+ "Show Name on Created By": "Afficher le nom sur Créé par",
+ "Show Name on Leaderboards": "Afficher le nom dans les classements",
+ "Show Name on Maps": "Afficher le nom sur les cartes",
+ "Show on Map": "Afficher sur la carte",
+ "Show Previous Tags": "Afficher les étiquettes précédentes",
+ "Show Username on Created By": "Afficher le nom d'utilisateur sur Créé par",
+ "Show Username on Leaderboards": "Afficher le nom d'utilisateur dans les classements",
+ "Show Username on Maps": "Afficher le nom d'utilisateur sur les cartes",
+ "Social Accounts": "Comptes sociaux",
+ "Some tags failed to upload. You can retry from your uploads.": "Certains tags n'ont pas pu être uploadés. Vous pouvez réessayer depuis vos uploads.",
+ "Start photographing litter to see your uploads here": "Photographiez des déchets pour voir vos téléversements ici",
+ "Strong": "Fort",
+ "Success!": "Succès !",
+ "Suggested Tags: {{count}}": "Étiquettes suggérées : {{count}}",
+ "Tag already added": "Étiquette déjà ajoutée",
+ "Tag can be a maximum of 100 characters": "L'étiquette peut comporter au maximum 100 caractères",
+ "Tag needs to be at least 3 characters long": "L'étiquette doit comporter au moins 3 caractères",
+ "Tagged": "Étiqueté",
+ "TAGGING": "ÉTIQUETAGE",
+ "Tags": "Étiquettes",
+ "TAGS": "ÉTIQUETTES",
+ "tags": "tags",
+ "Take a photo and select it from the gallery": "Prenez une photo ou sélectionnez-en une dans la galerie",
+ "Thank you!!!": "Merci !!!",
+ "The Litter has been picked up": "Les déchets ont été collectés",
+ "The Litter is still there": "Les déchets sont toujours là",
+ "The link has been copied to your clipboard.": "Le lien a été copié dans le presse-papiers.",
+ "The login details are incorrect": "Les identifiants de connexion sont incorrects",
+ "This is not a valid email address": "Cette adresse e-mail n'est pas valide",
+ "This photo has no location data": "Cette photo n'a pas de données de localisation",
+ "This Month": "Ce mois-ci",
+ "This Week": "Cette semaine",
+ "To": "À",
+ "To capture litter images from app camera": "Pour capturer des images de déchets avec l'appareil photo",
+ "To get exact geolocation of where the litter is": "Pour obtenir la géolocalisation exacte des déchets",
+ "To Tag": "À taguer",
+ "Today": "Aujourd'hui",
+ "Total Littercoin": "Littercoin total",
+ "Total People": "Total de personnes",
+ "Total Photos": "Photos totales",
+ "Total Tags": "Étiquettes totales",
+ "Total Users": "Utilisateurs totaux",
+ "Type to suggest tags": "Tapez pour suggérer des étiquettes",
+ "UN Digital Public Good": "Bien public numérique de l'ONU",
+ "Unique Username": "Nom d'utilisateur unique",
+ "Untagged": "Non étiqueté",
+ "Update Now": "Mettre à jour maintenant",
+ "Update Tags": "Mettre à jour les tags",
+ "Upload": "Téléverser",
+ "Username": "Nom d'utilisateur",
+ "Username should be between 3-20 characters": "Le nom d'utilisateur doit contenir entre 3 et 20 caractères",
+ "Username should not be equal to password": "Le nom d'utilisateur ne doit pas être identique au mot de passe",
+ "Value not updated": "Valeur non mise à jour",
+ "Value updated": "Valeur mise à jour",
+ "Warning": "Avertissement",
+ "Welcome": "Bienvenue",
+ "XP": "XP",
+ "Yes, Delete": "Oui, supprimer",
+ "You can upload up to 10 custom tags.": "Vous pouvez téléverser jusqu'à 10 étiquettes personnalisées.",
+ "You have tagged {{count}} photos": "Vous avez étiqueté {{count}} photos",
+ "You have uploaded {{count}} photos": "Vous avez téléversé {{count}} photo(s)",
+ "Your password did not match": "Votre mot de passe ne correspond pas"
+}
diff --git a/assets/langs/fr/index.js b/assets/langs/fr/index.js
index 235371b1..9f5042a1 100644
--- a/assets/langs/fr/index.js
+++ b/assets/langs/fr/index.js
@@ -1,21 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './fr.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import welcome from './welcome.json';
export const fr = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/fr/leftpage.json b/assets/langs/fr/leftpage.json
deleted file mode 100644
index bef1191a..00000000
--- a/assets/langs/fr/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Photos",
- "geotagged": "Géolocalisé",
- "cancel": "Annuler",
- "done": "Prêt",
- "next": "Suivant",
- "upload": "télécharger",
- "select-a-photo": "sélectionnez une photo",
- "delete": "Supprimer",
- "selected": "{{photos}} sélectionnée",
- "press-upload": "appuyez sur télécharger",
- "select-to-delete": "Sélectionnez les images que vous souhaitez supprimer",
- "please-wait-uploading": "Veuillez patienter pendant le téléchargement de vos photos",
- "thank-you": "Merci!!!",
- "you-have-uploaded": "Vous avez téléversé {{count}} photo(s)",
- "you-have-tagged": "Vous avez marqué {{count}} photos",
- "close": "Fermer",
- "take-photo": "Prendre une photo ou sélectionner dans la galerie",
- "no-images": "Aucune image à télécharger",
- "camera": "caméra",
- "leaderboard": "Classement"
-}
diff --git a/assets/langs/fr/litter.json b/assets/langs/fr/litter.json
index 927b672a..94a82c1a 100644
--- a/assets/langs/fr/litter.json
+++ b/assets/langs/fr/litter.json
@@ -1,306 +1,206 @@
{
"categories": {
"alcohol": "Alcool",
- "art": "Art",
- "brands": "Marques",
- "coastal": "Côtier",
- "coffee": "Café",
- "dumping": "Dumping",
+ "electronics": "Électronique",
"food": "Nourriture",
"industrial": "Industriel",
- "material": "Material",
- "other": "Autre",
- "sanitary": "Sanitaire",
+ "marine": "Maritime",
+ "medical": "Médical",
+ "personal_care": "Soins personnels",
+ "pets": "Animaux",
+ "smoking": "Tabac",
"softdrinks": "Boissons non alcoolisées",
- "smoking": "Fumeur",
- "custom-tag": "Balise personnalisée"
- },
- "smoking": {
- "butts": "Cigarettes / mégots",
- "lighters": "Briquets",
- "cigaretteBox": "Boîte à cigarettes",
- "tobaccoPouch": "Pochette à tabac",
- "skins": "Papiers à rouler",
- "smoking_plastic": "Emballage plastique",
- "filters": "Filtres",
- "filterbox": "Boîte de filtre",
- "smokingOther": "Fumer-Autre",
- "vape_pen": "Stylo Vape",
- "vape_oil": "Vape huile"
+ "unclassified": "Non classifié",
+ "vehicles": "Véhicules"
},
"alcohol": {
- "beerBottle": "Bouteilles de bière",
- "spiritBottle": "Bouteilles spiritueuses",
- "wineBottle": "Bouteilles de vin",
- "beerCan": "Canettes de bière",
- "brokenGlass": "Verre brisé",
- "bottleTops": "Bouchons de bouteille de bière",
- "paperCardAlcoholPackaging": "Emballage en papier",
- "plasticAlcoholPackaging": "Emballage plastique",
- "alcoholOther": "Alcool-Autre",
- "pint": "Verre à pinte",
- "six_pack_rings": "Six-pack rings (todo)",
- "alcohol_plastic_cups": "Tasses en plastique"
- },
- "coffee": {
- "coffeeCups": "Tasses de café",
- "coffeeLids": "Couvercles à café",
- "coffeeOther": "Café-Autre"
+ "bottle": "Bouteille",
+ "bottle_cap": "Bouchon de bouteille",
+ "broken_glass": "Verre brisé",
+ "can": "Canette",
+ "cup": "Gobelet",
+ "other": "Autre",
+ "packaging": "Emballage",
+ "pint_glass": "Verre à pinte",
+ "pull_ring": "Anneau de traction",
+ "shot_glass": "Verre à shot",
+ "six_pack_rings": "Anneaux de pack de six",
+ "wine_glass": "Verre à vin"
+ },
+ "electronics": {
+ "battery": "Pile",
+ "cable": "Câble",
+ "charger": "Chargeur",
+ "headphones": "Écouteurs",
+ "other": "Autre",
+ "phone": "Téléphone"
},
"food": {
- "sweetWrappers": "emballages de bonbons",
- "paperFoodPackaging": "Emballage en carton",
- "plasticFoodPackaging": "Emballage plastique",
- "plasticCutlery": "Couverts en plastique",
- "crisp_small": "emballage de chips (petite)",
- "crisp_large": "emballage de chips (grand)",
- "styrofoam_plate": "Plaque de polystyrène",
+ "bag": "Sac",
+ "box": "Boîte",
+ "can": "Canette",
+ "crisp_packet": "Paquet de chips",
+ "cutlery": "Couverts",
+ "gum": "Chewing-gum",
+ "jar": "Bocal",
+ "lid": "Couvercle",
"napkins": "Serviettes",
- "sauce_packet": "Paquet de sauce",
- "glass_jar": "Bocal en verre",
- "glass_jar_lid": "Couvercle de bocal en verre",
+ "other": "Autre",
+ "packaging": "Emballage",
+ "packet": "Paquet",
"pizza_box": "Boîte à pizza",
- "aluminium_foil": "Papier d'aluminium",
- "chewing_gum": "Chewing Gum",
- "foodOther": "Nourriture-Autre"
- },
- "softdrinks": {
- "waterBottle": "Bouteille d'eau en plastique",
- "fizzyDrinkBottle": "Bouteille de soda en plastique",
- "tinCan": "Canette",
- "bottleLid": "Bouchon de la bouteille",
- "bottleLabel": "Étiquettes de bouteilles",
- "sportsDrink": "Bouteille de boisson sportive",
- "straws": "Pailles",
- "plastic_cups": "Tasses en plastique",
- "plastic_cup_tops": "couvercle de tasse plastique",
- "milk_bottle": "Bouteille de lait",
- "milk_carton": "Carton de lait",
- "paper_cups": "Gobelet en carton",
- "juice_cartons": "Carton de jus",
- "juice_bottles": "Bouteilles de jus",
- "juice_packet": "Paquet de jus",
- "ice_tea_bottles": "Bouteilles de thé glacé",
- "ice_tea_can": "Canette de thé glacé",
- "energy_can": "Canette d'énergie",
- "pullring": "Anneau de traction",
- "strawpacket": "Emballage de paille",
- "styro_cup": "Gobelet en polystyrène",
- "softDrinkOther": "Boissons non alcoolisées (autre)"
- },
- "sanitary": {
- "gloves": "Gants",
- "facemask": "Masque",
- "condoms": "Préservatifs",
- "nappies": "Couches",
- "menstral": "Menstruel",
- "deodorant": "Déodorant",
- "ear_swabs": "Écouvillons d'oreille",
- "tooth_pick": "Cure-dent",
- "tooth_brush": "Brosse à dents",
- "wetwipes": "Lingettes humides",
- "hand_sanitiser": "Désinfectant pour les mains",
- "sanitaryOther": "Sanitaire (autre)"
- },
- "other": {
- "dogshit": "caca de chien",
- "pooinbag": "caca de chien dans un sac",
- "automobile": "Voiture",
- "clothing": "Vêtements",
- "traffic_cone": "Cône de signalisation",
- "life_buoy": "Bouée de sauvetage",
- "plastic": "Plastique non identifié",
- "dump": "Déversement illégal",
- "metal": "Objet en métal",
- "plastic_bags": "Sacs en plastique",
- "election_posters": "Affiches électorales",
- "forsale_posters": "À vendre Affiches",
- "books": "Livres",
- "magazine": "Les magazines",
- "paper": "Papier",
- "stationary": "Papeterie",
- "washing_up": "Bouteille de vaisselle",
- "hair_tie": "Élastique à cheveux",
- "ear_plugs": "Bouchons d'oreille (musique)",
- "batteries": "Piles",
- "elec_small": "Électrique (petit)",
- "elec_large": "Électrique (grand)",
- "other": "Autre (autre)",
- "random_litter": "Déchets aléatoire"
- },
- "dumping": {
- "small": "Petit",
- "medium": "Moyen",
- "large": "Grand"
+ "plate": "Assiette",
+ "tinfoil": "Papier d'aluminium",
+ "wrapper": "Emballage individuel"
},
"industrial": {
- "oil": "Pétrole",
- "industrial_plastic": "Plastique",
- "chemical": "Chimique",
"bricks": "Briques",
- "tape": "Ruban",
- "industrial_other": "Industriel (autre)"
- },
- "coastal": {
- "microplastics": "Microplastiques",
- "mediumplastics": "Plastiques moyens",
+ "chemical_container": "Conteneur chimique",
+ "construction": "Construction",
+ "container": "Conteneur",
+ "dumping_large": "Déversement (grand)",
+ "dumping_medium": "Déversement (moyen)",
+ "dumping_small": "Déversement (petit)",
+ "oil_container": "Bidon d'huile",
+ "oil_drum": "Fût d'huile",
+ "other": "Autre",
+ "pallet": "Palette",
+ "pipe": "Tuyau",
+ "tape": "Ruban adhésif",
+ "wire": "Fil métallique"
+ },
+ "marine": {
+ "buoy": "Bouée",
+ "crate": "Caisse",
+ "fishing_net": "Filet de pêche",
"macroplastics": "Macroplastiques",
- "rope_small": "Corde petite",
- "rope_medium": "Corde moyen",
- "rope_large": "Corde grande",
- "fishing_gear_nets": "Matériel de pêche / Filets",
- "buoys": "Bouées",
- "degraded_plasticbottle": "Bouteille en plastique dégradée",
- "degraded_plasticbag": "Sac en plastique dégradé",
- "degraded_straws": "Pailles à boire dégradées",
- "degraded_lighters": "Briquets dégradés",
- "balloons": "Ballons",
- "lego": "Lego",
- "shotgun_cartridges": "Cartouches de fusil de chasse",
- "styro_small": "Polystyrène (petit)",
- "styro_medium": "Polystyrène (moyen)",
- "styro_large": "Polystyrène (grand)",
- "coastal_other": "Côtier (autre)"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "thins": "Thins",
- "tim_hortons": "Tim Hortons",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "Caca de chien",
- "littercat": "Caca de chat",
- "duck": "Caca de canard"
+ "microplastics": "Microplastiques",
+ "other": "Autre",
+ "rope": "Corde",
+ "shotgun_cartridge": "Cartouche de fusil",
+ "styrofoam": "Polystyrène expansé"
+ },
+ "materials": {
+ "aluminium": "Aluminium",
+ "asphalt": "Asphalte",
+ "bamboo": "Bambou",
+ "bioplastic": "Bioplastique",
+ "cardboard": "Carton",
+ "ceramic": "Céramique",
+ "clay": "Argile",
+ "cloth": "Tissu",
+ "concrete": "Béton",
+ "copper": "Cuivre",
+ "cork": "Liège",
+ "cotton": "Coton",
+ "elastic": "Élastique",
+ "fiberglass": "Fibre de verre",
+ "foam": "Mousse",
+ "foil": "Papier d'aluminium",
+ "glass": "Verre",
+ "latex": "Latex",
+ "metal": "Métal",
+ "nylon": "Nylon",
+ "paper": "Papier",
+ "plastic": "Plastique",
+ "polyester": "Polyester",
+ "polystyrene": "Polystyrène",
+ "rubber": "Caoutchouc",
+ "steel": "Acier",
+ "stone": "Pierre",
+ "wood": "Bois"
+ },
+ "medical": {
+ "bandage": "Bandage",
+ "face_mask": "Masque facial",
+ "gloves": "Gants",
+ "medicine_bottle": "Flacon de médicament",
+ "other": "Autre",
+ "pill_pack": "Plaquette de comprimés",
+ "plaster": "Pansement",
+ "sanitiser": "Désinfectant",
+ "syringe": "Seringue"
+ },
+ "personal_care": {
+ "condom": "Préservatif",
+ "condom_wrapper": "Emballage de préservatif",
+ "dental_floss": "Fil dentaire",
+ "deodorant_can": "Aérosol de déodorant",
+ "ear_swabs": "Cotons-tiges",
+ "menstrual_cup": "Coupe menstruelle",
+ "nappies": "Couches",
+ "other": "Autre",
+ "sanitary_pad": "Serviette hygiénique",
+ "tampon": "Tampon",
+ "toothbrush": "Brosse à dents",
+ "toothpaste_tube": "Tube de dentifrice",
+ "wipes": "Lingettes"
},
- "presence": {
- "picked-up": "Les déchets ont été collectés!",
- "still-there": "Les déchets sont toujours là!"
+ "pets": {
+ "dog_waste": "Déjection canine",
+ "dog_waste_in_bag": "Déjection canine en sac",
+ "other": "Autre"
},
- "tags": {
- "type-to-suggest": "Tapez pour suggérer des étiquette",
- "suggested": "Etiquettes suggérées {{count}}"
+ "smoking": {
+ "ashtray": "Cendrier",
+ "butts": "Mégots de cigarette",
+ "cigarette_box": "Paquet de cigarettes",
+ "cigarette_filter": "Filtre de cigarette",
+ "lighters": "Briquets",
+ "match_box": "Boîte d'allumettes",
+ "other": "Autre",
+ "packaging": "Emballage",
+ "rolling_papers": "Papiers à rouler",
+ "tobacco_pouch": "Blague à tabac",
+ "vape_cartridge": "Cartouche de vapoteuse",
+ "vape_pen": "Vapoteuse"
},
- "dogshit": {
- "poo": "Surprise!",
- "poo_in_bag": "Surprise dans un sac!"
+ "softdrinks": {
+ "bottle": "Bouteille",
+ "broken_glass": "Verre brisé",
+ "can": "Canette",
+ "carton": "Brique",
+ "coffee_pod": "Capsule de café",
+ "cup": "Gobelet",
+ "juice_pouch": "Gourde de jus",
+ "label": "Étiquette",
+ "lid": "Couvercle",
+ "other": "Autre",
+ "packaging": "Emballage",
+ "straw": "Paille",
+ "straw_wrapper": "Emballage de paille"
},
- "material": {
- "aluminium": "Aluminium",
- "bronze": "Bronze",
- "carbon_fiber": "Fibre de carbone",
- "ceramic": "Céramique",
- "composite": "Composé",
- "concrete": "Béton",
- "copper": "Cuivre",
- "fiberglass": "Fibre de verre",
- "glass": "Verre",
- "iron_or_steel": "Fer/Acier",
- "latex": "Latex",
- "metal": "Métal",
- "nickel": "Nickel",
- "nylon": "Nylon",
- "paper": "Papier",
- "plastic": "Plastique",
- "polyethylene": "Polyéthylène",
- "polymer": "Polymère",
- "polypropylene": "Polypropylène",
- "polystyrene": "Polystyrène",
- "pvc": "PVC",
- "rubber": "Caoutchouc",
- "titanium": "Titane",
- "wood": "Bois"
+ "types": {
+ "beer": "Bière",
+ "cider": "Cidre",
+ "coffee": "Café",
+ "energy": "Énergétique",
+ "iced_tea": "Thé glacé",
+ "juice": "Jus",
+ "milk": "Lait",
+ "plant_milk": "Lait végétal",
+ "smoothie": "Smoothie",
+ "soda": "Soda",
+ "sparkling_water": "Eau pétillante",
+ "spirits": "Spiritueux",
+ "sports": "Sport",
+ "tea": "Thé",
+ "unknown": "Inconnu",
+ "water": "Eau",
+ "wine": "Vin"
+ },
+ "unclassified": {
+ "other": "Autre"
+ },
+ "vehicles": {
+ "battery": "Batterie",
+ "bumper": "Pare-chocs",
+ "car_part": "Pièce de voiture",
+ "license_plate": "Plaque d'immatriculation",
+ "light": "Phare",
+ "mirror": "Rétroviseur",
+ "other": "Autre",
+ "tyre": "Pneu",
+ "wheel": "Roue"
}
}
diff --git a/assets/langs/fr/permission.json b/assets/langs/fr/permission.json
deleted file mode 100644
index 77131bd4..00000000
--- a/assets/langs/fr/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Autoriser l'accès à la galerie",
- "allow-permission": "Autoriser les autorisations",
- "camera-access": "Accès à la caméra",
- "camera-access-body": "Pour capturer des images de détritus à partir de la caméra de l'application",
- "gallery-body": "Veuillez nous fournir l'accès à votre galerie, ce qui est requis si vous souhaitez télécharger des images géolocalisées à partir de la galerie",
- "location-access": "Accès à l'emplacement",
- "location-body": "Pour obtenir la géolocalisation exacte de l'endroit où se trouve la litière",
- "new-version": "Nouvelle version disponible",
- "not-now": "Pas maintenant plus tard",
- "please-give-permissions": "Veuillez donner des autorisations",
- "please-update-app": "Veuillez mettre à jour l'application pour une meilleure expérience",
- "update-now": "Mettez à jour maintenant"
-}
diff --git a/assets/langs/fr/settings.json b/assets/langs/fr/settings.json
deleted file mode 100644
index 101f20d9..00000000
--- a/assets/langs/fr/settings.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "settings": "Réglages",
- "my-account": "MON COMPTE",
- "name": "Nom",
- "username": "Nom d'utilisateur",
- "email": "Email",
- "privacy": "CONFIDENTIALITÉ",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "Afficher le nom sur les cartes",
- "show-username-maps": "Afficher le nom d'utilisateur sur les cartes",
- "show-name-leaderboards": "Afficher le nom dans les classements",
- "show-username-leaderboards": "Afficher le nom d'utilisateur dans les classements",
- "show-name-createdby": "Afficher le nom sur Créé par",
- "show-username-createdby": "Afficher le nom d'utilisateur sur Créé par",
- "tags": "ÉTIQUETTES",
- "show-previous-tags": "Afficher les étiquettes précédentes",
- "logout": "Déconnecter",
- "success": "Réussi!",
- "error": "Erreur!",
- "value-not-updated": "Valeur non mise à jour",
- "value-updated": "Les valeurs ont été mises à jour",
- "go-back": "Retourner",
- "edit": "Éditer",
- "save": "Sauver",
- "alert": "Alerte",
- "do-you-really-want-to-change": "Voulez-vous vraiment modifier ce paramètre?",
- "ok": "D'accord",
- "cancel": "Annuler",
- "picked-up": "Ramassé",
- "litter-picked-up": "La litière est ramassée",
- "enter-email": "Please enter an email address",
- "enter-username": "Please enter a username",
- "enter-name": "Please enter a name",
- "name-min-max": "Name should be between 3-20 characters",
- "username-min-max": "Username should be between 3-20 characters",
- "url-not-valid": "Please enter a valid url"
-}
diff --git a/assets/langs/fr/stats.json b/assets/langs/fr/stats.json
deleted file mode 100644
index 1c38e51e..00000000
--- a/assets/langs/fr/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Données mondiales",
- "next-target": "Cible suivante\n{{count}} Litière",
- "total-litter": "Litière totale",
- "total-photos": "Photos totale",
- "total-users": "Utilisatrices totale",
- "total-littercoin": "Littercoin totale"
-}
diff --git a/assets/langs/fr/tag.json b/assets/langs/fr/tag.json
deleted file mode 100644
index 8839eb43..00000000
--- a/assets/langs/fr/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Ajouter une étiquette",
- "confirm": "Confirmer",
- "type-to-suggest": "Tapez pour suggérer des étiquette",
- "suggested-tags": "Etiquettes suggérées {{count}}",
- "alert": "Alerte",
- "still-there": "Les déchets sont toujours là",
- "picked-up": "Les déchets ont été collectés",
- "litter-status": "Statut de la portée",
- "picked-thumb": "Ramassé 👍🏻",
- "not-picked-thumb": "Non ramassé 👎🏻",
- "delete-message": "Êtes-vous sûr de vouloir supprimer cette image ?",
- "cancel": "Annuler",
- "delete": "Oui, supprimer",
- "custom-tags": "Custom Tags",
- "custom-tags-min": "Le tag doit comporter au moins 3 caractères",
- "custom-tags-max": "Le tag peut être un maximum de 100 caractères",
- "tag-already-added": "Balise déjà ajoutée",
- "tag-limit-reached": "Vous pouvez télécharger jusqu'à 3 balises personnalisées",
- "delete-image": "\uD83D\uDEAE Supprimer l'image"
-}
diff --git a/assets/langs/fr/user.json b/assets/langs/fr/user.json
deleted file mode 100644
index a1653f04..00000000
--- a/assets/langs/fr/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Niveau",
- "level-up": "{{count}} XP pour monter de niveau",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Littercoin suivant",
- "photos": "Photos",
- "rank": "Rang",
- "tags": "Mots clés",
- "welcome": "Bienvenue",
- "XP": "XP"
-}
diff --git a/assets/langs/fr/welcome.json b/assets/langs/fr/welcome.json
deleted file mode 100644
index c8c90cec..00000000
--- a/assets/langs/fr/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "C'est ",
- "easy": "FACILE!",
- "just-tag-and-upload": "Étiquetez simplement les déchets et téléchargez-les",
- "fun": "DRÔLE!",
- "climb-leaderboards": "Montez dans les classements à la #LitterWorldCup",
- "open": "LIBRE!",
- "open-database": "Aidez-nous à créer la base de données ouverte la plus avancée au monde sur les déchets et la pollution plastique",
- "get-started": "Commencez !",
- "already-have-account": "Tu as déjà un compte? S'identifier"
-}
diff --git a/assets/langs/hu/auth.json b/assets/langs/hu/auth.json
deleted file mode 100644
index 73a33171..00000000
--- a/assets/langs/hu/auth.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "email-address": "Email cím",
- "password": "Jelszó",
- "unique-username": "Egyedi Felhasználónév",
- "create-account": "Fiók létrehozása",
- "or": "vagy",
- "already-have": "Már van fiókja?",
- "forgot-password": "Elfelejtette a jelszavát?",
- "login": "Belépés",
- "back-to-login": "Vissza a Bejelentkezéshez",
- "enter-email": "Kérjük, adjon meg egy e-mail címet",
- "enter-password": "Adjon meg egy jelszót",
- "enter-username": "Kérjük, adjon meg egy felhasználónevet",
- "must-contain": "Tartalmaznia kell 1 nagybetűt, 1 számjegyet, 6+ karaktert",
- "alphanumeric-username": "Alfanumerikusnak kell lennie, 8-20 karakterből állhat, szóközök nélkül",
- "email-not-valid": "Ez nem érvényes e-mail cím",
- "username-min-max": "A felhasználónévnek 3-20 karakter hosszúságúnak kell lennie",
- "username-equal-to-password": "A felhasználónév nem lehet egyenlő a jelszóval",
- "invalid-credentials": "A bejelentkezési adatok helytelenek"
-}
diff --git a/assets/langs/hu/index.js b/assets/langs/hu/index.js
deleted file mode 100644
index 721315f2..00000000
--- a/assets/langs/hu/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
-import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import team from './team.json';
-import welcome from './welcome.json';
-
-export const en = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- team,
- welcome
-};
diff --git a/assets/langs/hu/leftpage.json b/assets/langs/hu/leftpage.json
deleted file mode 100644
index cb7b63db..00000000
--- a/assets/langs/hu/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Fényképek",
- "geotagged": "Megjelölve",
- "cancel": "Megszüntet",
- "done": "Kész",
- "next": "Következő",
- "upload": "Feltöltés",
- "select-a-photo": "Válasszon ki egy fényképet",
- "delete": "Törölés",
- "selected": "{photos} kiválasztva",
- "press-upload": "Nyomja meg a Feltöltés gombot",
- "select-to-delete": "Válassza ki a törölni kívánt képeket",
- "please-wait-uploading": "Kérjük, várjon, amíg feltölti a képeket",
- "thank-you": "Köszönöm!!!",
- "you-have-uploaded": "Feltöltöttél {{count}} fényképet",
- "you-have-tagged": "{{count}} képet címkéztél",
- "close": "Bezárás",
- "take-photo": "Készítsen fényképet vagy válasszon a galériából",
- "no-images": "Nincs feltölthető kép",
- "camera": "Kamera",
- "leaderboard": "Ranglijst"
-}
diff --git a/assets/langs/hu/litter.json b/assets/langs/hu/litter.json
deleted file mode 100644
index 1aaa15f7..00000000
--- a/assets/langs/hu/litter.json
+++ /dev/null
@@ -1,325 +0,0 @@
-{
- "categories": {
- "alcohol": "Alkohol",
- "art": "Művészet",
- "brands": "Márkák",
- "coastal": "Tengerparti",
- "coffee": "Kávé",
- "dumping": "Szemétlerakó",
- "food": "Étel",
- "industrial": "Ipari",
- "material": "Material",
- "sanitary": "Egészségügyi",
- "softdrinks": "Üditők",
- "smoking": "Dohány",
- "other": "Egyéb",
- "dogshit": "Háziállatok"
- },
- "smoking": {
- "butts": "Cigaretta/Csikkek",
- "lighters": "Öngyújtók",
- "cigaretteBox": "Cigaretta doboz",
- "tobaccoPouch": "Dohányzacskó",
- "skins": "Cigaretta papír",
- "smoking_plastic": "Műanyag csomagolás",
- "filters": "Szűrők",
- "filterbox": "Szűrődoboz",
- "vape_pen": "Elektromos Cigaretta",
- "vape_oil": "Elektromos Cigaretta olaj",
- "smokingOther": "Dohányzás-Egyéb"
- },
- "alcohol": {
- "beerBottle": "Sörösüvegek",
- "spiritBottle": "Szeszes Üvegek",
- "wineBottle": "Boros Üvegek",
- "beerCan": "Sörösdobozok",
- "brokenGlass": "Törött üveg",
- "bottleTops": "Sörösüveg teteje",
- "paperCardAlcoholPackaging": "Papír Csomagolás",
- "plasticAlcoholPackaging": "Műanyag csomagolás",
- "pint": "Pint üveg",
- "six_pack_rings": "Hatcsomagos gyűrűk",
- "alcohol_plastic_cups": "Műanyag poharak",
- "alcoholOther": "Alkohol-Egyéb"
- },
- "art": {
- "item": "Művészeti Szemét"
- },
- "coffee": {
- "coffeeCups": "Kávés poharak",
- "coffeeLids": "Kávé fedők",
- "coffeeOther": "Kávé-Egyéb"
- },
- "food": {
- "sweetWrappers": "Édesség Csomagolása",
- "paperFoodPackaging": "Papír/karton csomagolás",
- "plasticFoodPackaging": "Műanyag csomagolás",
- "plasticCutlery": "Műanyag evőeszközök",
- "crisp_small": "Csipsz csomag (kicsi)",
- "crisp_large": "Csipsz csomag (nagy)",
- "styrofoam_plate": "Hungarocell Lemez",
- "napkins": "Szalvéták",
- "sauce_packet": "Szósz csomag",
- "glass_jar": "Befőttesüveg",
- "glass_jar_lid": "Befőttesüveg Fedél",
- "aluminium_foil": "Alufólia",
- "pizza_box": "Pizza Doboz",
- "foodOther": "Élelmiszer-Egyéb",
- "chewing_gum": "Rágógumi"
- },
- "softdrinks": {
- "waterBottle": "Műanyag vizes palack",
- "fizzyDrinkBottle": "Műanyag Szénsavas Ital Palack",
- "tinCan": "Konzervdoboz",
- "bottleLid": "Palack Teteje",
- "bottleLabel": "Palackcímkék",
- "sportsDrink": "Sport italos üveg",
- "straws": "Szívószálak",
- "plastic_cups": "Műanyag Poharak",
- "plastic_cup_tops": "Műanyag Pohár Teteje",
- "milk_bottle": "Tejesüveg",
- "milk_carton": "Tejesdoboz",
- "paper_cups": "Papír poharak",
- "juice_cartons": "Gyümölcslé Dobozok",
- "juice_bottles": "Gyümölcslé Üvegek",
- "juice_packet": "Gyümölcslé csomag",
- "ice_tea_bottles": "Jeges teás üvegek",
- "ice_tea_can": "Jeges tea doboz (aluminium)",
- "energy_can": "Energia Ital doboz (aluminium)",
- "pullring": "Húzógyűrű",
- "strawpacket": "Szívószál Csomagolás",
- "styro_cup": "Hungarocell Csésze",
- "broken_glass": "Törött üveg",
- "softDrinkOther": "Üdítőital-egyéb"
- },
- "sanitary": {
- "gloves": "Kesztyű",
- "facemask": "Szájmaszk",
- "condoms": "Óvszer",
- "nappies": "Pelenkák",
- "menstral": "Menstruációs",
- "deodorant": "Dezodor",
- "ear_swabs": "Fültörlőkendők",
- "tooth_pick": "Fogpiszkáló",
- "tooth_brush": "Fogkefe",
- "wetwipes": "Nedves Törlőkendők",
- "hand_sanitiser": "Kézfertőtlenítő",
- "sanitaryOther": "Egészségügyi-egyéb"
- },
- "dumping": {
- "small": "Kicsi",
- "medium": "Közepes",
- "large": "Nagy"
- },
- "industrial": {
- "oil": "Olaj",
- "industrial_plastic": "Műanyag",
- "chemical": "Kémiai",
- "bricks": "Téglák",
- "tape": "Szalag",
- "industrial_other": "Ipari-Egyéb"
- },
- "coastal": {
- "microplastics": "Mikroműanyagok",
- "mediumplastics": "Közepes Műanyagok",
- "macroplastics": "Makroműanyagok",
- "rope_small": "Kötél Kicsi",
- "rope_medium": "Kötél Közepes",
- "rope_large": "Kötél Nagy",
- "fishing_gear_nets": "Horgászfelszerelés/hálók",
- "ghost_nets": "Horgász Háló",
- "buoys": "Bóják",
- "degraded_plasticbottle": "Leromlott Műanyag Palack",
- "degraded_plasticbag": "Leromlott Műanyag Zacskó",
- "degraded_straws": "Leromlott Szívószálak",
- "degraded_lighters": "Leromlott Öngyújtók",
- "balloons": "Lufik",
- "lego": "Lego",
- "shotgun_cartridges": "Sörétes Töltények",
- "styro_small": "Hungarocell Kicsi",
- "styro_medium": "Hungarocell Közepes",
- "styro_large": "Hungarocell Nagy",
- "coastal_other": "Tengerparti-Egyéb"
- },
- "brands": {
- "aadrink": "AA Drink",
- "acadia": "Acadia",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "anheuser_busch": "Anheuser-Busch",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "calanda": "Calanda",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "modelo": "Modelo",
- "molson_coors": "Molson Coors",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "ok_": "ok.–",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "seven_eleven": "7-Eleven",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "tim_hortons": "Tim Hortons",
- "thins": "Thins",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "winston": "Winston",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "TrashDog",
- "littercat": "LitterCat",
- "duck": "LitterDuck"
- },
- "other": {
- "dogshit": "Kutya Kaki",
- "pooinbag": "Kutya Kaki Szatyorban",
- "automobile": "Autó",
- "clothing": "Ruházat",
- "traffic_cone": "Forgalmi Kúp",
- "life_buoy": "Mentőöv",
- "plastic": "Azonosítatlan Műanyag",
- "dump": "Illegális Hulladéklerakás",
- "metal": "Fém Tárgy",
- "plastic_bags": "Műanyag Zacskók",
- "election_posters": "Választási Plakátok",
- "forsale_posters": "Eladó Plakátok",
- "books": "Könyvek",
- "magazine": "Magazinok",
- "paper": "Papír",
- "stationary": "Irodaszer",
- "washing_up": "Mosogató Palack",
- "hair_tie": "Hajgumi",
- "ear_plugs": "Fülhalgatók (zene)",
- "batteries": "Elemek",
- "elec_small": "Elektromos Kicsi",
- "elec_large": "Elektromos Nagy",
- "random_litter": "Random Szemét",
- "balloons": "Lufik",
- "bags_litter": "Zsák Szemét",
- "overflowing_bins": "Túlcsorduló Kukák",
- "tyre": "Gumi",
- "cable_tie": "Kábelkötegelő",
- "other": "Egyéb-Egyéb"
- },
- "presence": {
- "picked-up": "Felvettem!",
- "still-there": "Nem vették fel!",
- "picked-up-text": "Felszívódott.",
- "still-there-text": "A szemét még mindig ott van!"
- },
- "no-tags": "Nincsenek címkék",
- "not-verified": "Ellenőrzésre vár",
- "not-tagged-yet": "Még nincs címkézve!",
- "dogshit": {
- "poo": "Meglepetés!",
- "poo_in_bag": "Meglepetés felszéve!"
- },
- "material": {
- "aluminium": "Alumínium",
- "bronze": "Bronz",
- "carbon_fiber": "Szén-szál",
- "ceramic": "Kerámia",
- "composite": "Kompozit",
- "concrete": "Beton",
- "copper": "Réz",
- "fiberglass": "Üvegszál",
- "glass": "Üveg",
- "iron_or_steel": "Vas/Acél",
- "latex": "Latex",
- "metal": "Fém",
- "nickel": "Nikkel",
- "nylon": "Nylon",
- "paper": "Papír",
- "plastic": "Műanyag",
- "polyethylene": "Polietilén",
- "polymer": "Polimer",
- "polypropylene": "Polipropilén",
- "polystyrene": "Polisztirol",
- "pvc": "PVC",
- "rubber": "Gumi",
- "titanium": "Titán",
- "wood": "Fa"
- }
-}
diff --git a/assets/langs/hu/permission.json b/assets/langs/hu/permission.json
deleted file mode 100644
index eb225232..00000000
--- a/assets/langs/hu/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Galériahozzáférés engedélyezése",
- "allow-permission": "Engedélyek engedélyezése",
- "camera-access": "Kamera hozzáférés",
- "camera-access-body": "A hulladék rögzítéséhez a kameráról",
- "gallery-body": "Kérjük, biztosítson hozzáférést galériájához, amely szükséges, ha címkével ellátott képeket szeretne feltölteni a galériából",
- "location-access": "Helyhozzáférés",
- "location-body": "Az hulladék pontos földrajzi elhelyezkedése érdekében",
- "new-version": "Új verzió érhető el",
- "not-now": "Nem most, később",
- "please-give-permissions": "Kérjük, adjon engedélyt",
- "please-update-app": "Kérjük, frissítse az alkalmazást a jobb élmény érdekében",
- "update-now": "Frissítse most"
-}
diff --git a/assets/langs/hu/settings.json b/assets/langs/hu/settings.json
deleted file mode 100644
index 96b87701..00000000
--- a/assets/langs/hu/settings.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "settings": "Beállítások",
- "my-account": "AZ ÉN FIÓKOM",
- "name": "Név",
- "username": "Felhasználónév",
- "email": "Email",
- "privacy": "ADATVÉDELEM",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "Név megjelenítése a Térképen",
- "show-username-maps": "Felhasználónév megjelenítése a Térképen",
- "show-name-leaderboards": "Név megjelenítése a ranglistákon",
- "show-username-leaderboards": "Felhasználónév megjelenítése a ranglistákon",
- "show-name-createdby": "Nég megjelenítése a létrehozottak listáján",
- "show-username-createdby": "Felhasználónév megjelenítése a létrehozottak listáján",
- "tags": "CÍMKÉK",
- "show-previous-tags": "Előző címkék megjelenítése",
- "logout": "Kijelentkezés",
- "success": "Siker!",
- "error": "Hiba!",
- "value-not-updated": "Az érték nincs frissítve",
- "value-updated": "Érték frissítve",
- "go-back": "Menjen Vissza",
- "edit": "Szerkesztés",
- "save": "Elmentés",
- "alert": "Riasztás",
- "do-you-really-want-to-change": "Valóban módosítani szeretné ezt a beállítást?",
- "ok": "OK",
- "cancel": "Megszakítás",
- "picked-up": "Felvett",
- "litter-picked-up": "Hulladék felszedve"
-}
diff --git a/assets/langs/hu/stats.json b/assets/langs/hu/stats.json
deleted file mode 100644
index e8168a01..00000000
--- a/assets/langs/hu/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Globális adatok",
- "next-target": "Következő cél\n{{count}} Hulladék",
- "total-litter": "Összes Hulladék",
- "total-photos": "Összes Fénykép",
- "total-users": "Összes Felhasználó",
- "total-littercoin": "Összes Littercoin"
-}
diff --git a/assets/langs/hu/tag.json b/assets/langs/hu/tag.json
deleted file mode 100644
index e5c62953..00000000
--- a/assets/langs/hu/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Címke hozzáadása",
- "confirm": "Megerősít",
- "type-to-suggest": "Irja be a javasolt címkéit",
- "suggested-tags": "Javasolt címkék: {{count}}",
- "alert": "Riasztás",
- "still-there": "Az hulladék még mindig ott van",
- "picked-up": "Az Hulladékot összeszedték",
- "litter-status": "Hulladék állapota",
- "picked-thumb": "Felvették 👍🏻",
- "not-picked-thumb": "Nem vették fel 👎🏻",
- "delete-message": "Biztosan törli ezt a képet ?",
- "cancel": "Megszüntet",
- "delete": "Igen, Törlés",
- "custom-tags": "Egyéni címkék",
- "custom-tags-min": "A címkének legalább 3 karakter hosszúnak kell lennie",
- "custom-tags-max": "A címke legfeljebb 100 karakterből állhat",
- "tag-already-added": "Címke már hozzáadva",
- "tag-limit-reached": "Legfeljebb 3 egyéni címkét tölthet fel.",
- "delete-image": "\uD83D\uDEAE Kép törlése"
-}
diff --git a/assets/langs/hu/team.json b/assets/langs/hu/team.json
deleted file mode 100644
index f9d23ace..00000000
--- a/assets/langs/hu/team.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "total-members": "Összes tag"
-}
diff --git a/assets/langs/hu/user.json b/assets/langs/hu/user.json
deleted file mode 100644
index a4312e48..00000000
--- a/assets/langs/hu/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Szint",
- "level-up": "{{count}} XP szintlépéshez",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Következő Littercoin",
- "photos": "Fényképek",
- "rank": "Rang",
- "tags": "Címkék",
- "welcome": "Üdvözöljük",
- "XP": "XP"
-}
diff --git a/assets/langs/hu/welcome.json b/assets/langs/hu/welcome.json
deleted file mode 100644
index 9cd2e074..00000000
--- a/assets/langs/hu/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "Nagyon ",
- "easy": "EGYSZERŰ!",
- "just-tag-and-upload": "Csak jelölje meg a hulladékot, és töltse fel",
- "fun": "SZÓRAKOZTATÓ!",
- "climb-leaderboards": "Mássz fel a ranglistákra a #LitterWorldCup-on",
- "open": "NYITOTT!",
- "open-database": "Segítsen nekünk létrehozni a világ legfejlettebb nyílt adatbázisát a hulladék- és műanyagszennyezésről",
- "get-started": "Kezdjük!",
- "already-have-account": "Már van fiókja? Belépés"
-}
diff --git a/assets/langs/ie/auth.json b/assets/langs/ie/auth.json
deleted file mode 100644
index 4c9a5311..00000000
--- a/assets/langs/ie/auth.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "email-address": "Seoladh Ríomhphoist",
- "password": "Pasfhocal",
- "unique-username": "Ainm Úinéara",
- "create-account": "Cruthaigh Cuntas",
- "or": "nó",
- "already-have": "An bhfuil cuntas agat?",
- "forgot-password": "Pasfhocal dearmadta?",
- "login": "Logáil isteach",
- "back-to-login": "Ar ais go dtí an logáil isteach",
- "enter-email": "Cuir isteach seoladh ríomhphoist, le do thoil",
- "enter-password": "Cuir isteach pasfhocal, le do thoil",
- "enter-username": "Cuir isteach ainm úinéara, le do thoil",
- "must-contain": "Ní mór go mbeadh 1 uimhir mhór, 1 uimhir, agus 6 carachtar nó níos mó",
- "alphanumeric-username": "Ní mór go mbeadh ainm úinéara alfa-réamhshínteach, 8-20 carachtar, gan spásanna",
- "email-not-valid": "Ní seoladh ríomhphoist bailí é seo",
- "username-min-max": "Ba cheart go mbeadh 3-20 carachtar i mbun ainm úinéara",
- "username-equal-to-password": "Ní mór go mbeadh ainm úinéara difriúil ón bpasfhocal",
- "url-not-valid": "Cuir isteach URL bailí, le do thoil",
- "invalid-credentials": "Tá sonraí na logála mícheart"
-}
diff --git a/assets/langs/ie/ie.json b/assets/langs/ie/ie.json
new file mode 100644
index 00000000..0803070d
--- /dev/null
+++ b/assets/langs/ie/ie.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP chun leibhéal a ardú",
+ "{{count}}% Next Littercoin": "{{count}}% an chéad Littercoin eile",
+ "{{photos}} selected": "{{photos}} roghnaithe",
+ "Add custom tag": "Cuir lipéad saincheaptha leis",
+ "Add Tag": "Cuir Lipéad Leis",
+ "Alert": "Foláireamh",
+ "Allow Gallery Access": "Ceadaigh Rochtain ar an nGailearaí",
+ "Allow Permissions": "Ceadaigh Ceadanna",
+ "Already have an account?": "An bhfuil cuntas agat cheana?",
+ "Apply Filters": "Cuir Scagairí i bhFeidhm",
+ "Are you sure you want to delete this image ?": "An bhfuil tú cinnte go dteastaíonn uait an íomhá seo a scriosadh?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "An bhfuil tú cinnte go dteastaíonn uait an grianghraf seo a scriosadh? Ní féidir imeall a dhéanamh air.",
+ "Back to Login": "Ar ais go dtí Logáil Isteach",
+ "Brands": "Brandaí",
+ "Camera": "Ceamara",
+ "Camera Access": "Rochtain ar an gCeamara",
+ "Cancel": "Cealaigh",
+ "Clear all": "Glan gach rud",
+ "Clear Filters": "Glan Scagairí",
+ "Climb the leaderboards": "Dreap suas na cláir cheannais",
+ "Close": "Dún",
+ "Confirm": "Deimhnigh",
+ "Copy Link": "Cóipeáil Nasc",
+ "Create Account": "Cruthaigh Cuntas",
+ "Custom Tags": "Lipéid Shaincheaptha",
+ "Delete": "Scrios",
+ "Delete Account": "Scrios Cuntas",
+ "Delete Image": "Scrios Íomhá",
+ "Delete Photo": "Scrios Grianghraf",
+ "Delete your account": "Scrios do chuntas",
+ "Do you really want to change this setting?": "An bhfuil tú cinnte go dteastaíonn uait an socrú seo a athrú?",
+ "Done": "Déanta",
+ "Easy": "Éasca",
+ "Edit": "Cuir in Eagar",
+ "Edit Tags": "Cuir clibeanna in eagar",
+ "Email": "Ríomhphost",
+ "Email Address": "Seoladh Ríomhphoist",
+ "Email or Username": "Ríomhphost nó Ainm Úsáideora",
+ "Enable crowdsourced tagging": "Cumasaigh lipéadú pobail",
+ "Error!": "Earráid!",
+ "Failed to update tags. Please try again.": "Theip ar nuashonrú na gclibeanna. Bain triail eile as.",
+ "Filter Uploads": "Scag Uaslódálacha",
+ "Forgot password?": "Pasfhocal dearmadta?",
+ "From": "Ó",
+ "Fun": "Spraoi",
+ "Geotagged": "Geochlibeáilte",
+ "Get Started!": "Tosaigh!",
+ "Global Data": "Sonraí Domhanda",
+ "Go Back": "Gabh Siar",
+ "Good": "Maith",
+ "Just tag litter and upload it": "Cuir lipéad ar an mbruscar agus uaslódáil é",
+ "Leaderboard": "Clár Ceannais",
+ "Level": "Leibhéal",
+ "Link Copied": "Nasc cóipeáilte",
+ "Litter is picked up": "Tá an bruscar pioctha suas",
+ "Litter Status": "Stádas an Bhruscair",
+ "Littercoin": "Littercoin",
+ "Location Access": "Rochtain ar Shuíomh",
+ "Log In": "Logáil Isteach",
+ "Logout": "Logáil Amach",
+ "Map": "Léarscáil",
+ "Materials": "Ábhair",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Caithfidh sé a bheith alfanumaireach, 8-20 carachtar, gan spásanna",
+ "MY ACCOUNT": "MO CHUNTAS",
+ "My Uploads": "Mo uaslódálacha",
+ "Name": "Ainm",
+ "Name should be between 3-20 characters": "Ba cheart go mbeadh 3-20 carachtar san ainm",
+ "New Today": "Nua Inniu",
+ "New Version Available": "Leagan Nua ar Fáil",
+ "Next": "Ar Aghaidh",
+ "Next Target\n{{count}} Litter": "An Chéad Sprioc Eile\n{{count}} Bruscar",
+ "No geotagged photos found": "Níor aimsíodh grianghraif geo-chlibeáilte",
+ "No images to upload": "Gan íomhánna le huaslódáil",
+ "No matching uploads": "Gan uaslódálacha comhoiriúnacha",
+ "No uploads yet": "Gan uaslódálacha fós",
+ "Not now, Later": "Ní anois, níos déanaí",
+ "Not picked up": "Níor piocadh suas",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Ní féidir ach íomhánna geo-chlibeáilte a roghnú",
+ "Open Source": "Foinse Oscailte",
+ "found without GPS data": "aimsíodh gan sonraí GPS",
+ "no GPS data and cannot be uploaded": "gan sonraí GPS agus ní féidir iad a uaslódáil",
+ "or": "nó",
+ "photo": "grianghraf",
+ "photo has": "grianghraf ag",
+ "photos": "grianghraif",
+ "photos have": "grianghraif ag",
+ "Password": "Pasfhocal",
+ "Password must be at least 6 characters": "Caithfidh an pasfhocal a bheith 6 charachtar ar a laghad",
+ "Photos": "Grianghraif",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "Tá sonraí GPS ag teastáil ó ghrianghraif le haghaidh uaslódáil. Cinntigh go bhfuil Seirbhísí Suímh cumasaithe agus tú ag glacadh grianghraf.",
+ "Picked up": "Pioctha suas",
+ "Picked Up": "Pioctha Suas",
+ "Please add at least one tag before saving.": "Cuir clib amháin ar a laghad leis sula sábhálfar.",
+ "Please enter a name": "Cuir isteach ainm, le do thoil",
+ "Please enter a password": "Cuir isteach pasfhocal, le do thoil",
+ "Please enter a username": "Cuir isteach ainm úsáideora, le do thoil",
+ "Please enter a valid url": "Cuir isteach URL bailí, le do thoil",
+ "Please enter an email address": "Cuir isteach seoladh ríomhphoist, le do thoil",
+ "Please enter your email or username": "Cuir isteach do ríomhphost nó ainm úsáideora, le do thoil",
+ "Please Give Permissions": "Tabhair Ceadanna, le do thoil",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Tabhair rochtain dúinn ar do ghailearaí, le do thoil, atá riachtanach chun íomhánna geochlibeáilte a uaslódáil ó do ghléas",
+ "Please update the app for an improved experience": "Nuashonraigh an aip le haghaidh taithí níos fearr, le do thoil",
+ "Please wait while your photos upload": "Fan le do thoil fad is atá do ghrianghraif á n-uaslódáil",
+ "Press Upload": "Brúigh Uaslódáil",
+ "PRIVACY": "PRÍOBHÁIDEACHAS",
+ "Quantity": "Cainníocht",
+ "Rank": "Rang",
+ "Save": "Sábháil",
+ "Search brands": "Cuardaigh brandaí",
+ "Search by custom tag": "Cuardaigh de réir lipéad saincheaptha",
+ "Search by tag name": "Cuardaigh de réir ainm lipéid",
+ "Search materials": "Cuardaigh ábhair",
+ "Select a photo": "Roghnaigh grianghraf",
+ "Select the images you want to delete": "Roghnaigh na híomhánna a theastaíonn uait a scriosadh",
+ "Send Reset Link": "Seol Nasc Athshocraithe",
+ "Settings": "Socruithe",
+ "Short": "Gearr",
+ "Show Name on Created By": "Taispeáin Ainm ar Cruthaithe Ag",
+ "Show Name on Leaderboards": "Taispeáin Ainm ar Chláir Cheannais",
+ "Show Name on Maps": "Taispeáin Ainm ar Léarscáileanna",
+ "Show on Map": "Taispeáin ar Léarscáil",
+ "Show Previous Tags": "Taispeáin Lipéid Roimhe Seo",
+ "Show Username on Created By": "Taispeáin Ainm Úsáideora ar Cruthaithe Ag",
+ "Show Username on Leaderboards": "Taispeáin Ainm Úsáideora ar Chláir Cheannais",
+ "Show Username on Maps": "Taispeáin Ainm Úsáideora ar Léarscáileanna",
+ "Social Accounts": "Cuntais Shóisialta",
+ "Some tags failed to upload. You can retry from your uploads.": "Theip ar uaslódáil roinnt clibeanna. Is féidir leat aththriail a bhaint as ó do uaslódálacha.",
+ "Start photographing litter to see your uploads here": "Tosaigh ag grianghrafadóireacht bruscair chun d'uaslódálacha a fheiceáil anseo",
+ "Strong": "Láidir",
+ "Success!": "Rath!",
+ "Suggested Tags: {{count}}": "Lipéid Mholta: {{count}}",
+ "Tag already added": "Lipéad curtha leis cheana",
+ "Tag can be a maximum of 100 characters": "Is féidir leis an lipéad 100 carachtar ar a mhéid a bheith ann",
+ "Tag needs to be at least 3 characters long": "Caithfidh an lipéad a bheith 3 charachtar ar a laghad",
+ "Tagged": "Lipéadaithe",
+ "TAGGING": "LIPÉADÚ",
+ "Tags": "Lipéid",
+ "TAGS": "LIPÉID",
+ "tags": "clibeanna",
+ "Take a photo and select it from the gallery": "Glac grianghraf agus roghnaigh ón ngailearaí é",
+ "Thank you!!!": "Go raibh maith agat!!!",
+ "The Litter has been picked up": "Tá an bruscar pioctha suas",
+ "The Litter is still there": "Tá an bruscar fós ann",
+ "The link has been copied to your clipboard.": "Tá an nasc cóipeáilte go dtí do ghearrthaisce.",
+ "The login details are incorrect": "Tá sonraí na logála mícheart",
+ "This is not a valid email address": "Ní seoladh ríomhphoist bailí é seo",
+ "This photo has no location data": "Níl sonraí suímh ag an ngrianghraf seo",
+ "This Month": "An Mhí Seo",
+ "This Week": "An tSeachtain Seo",
+ "To": "Go",
+ "To capture litter images from app camera": "Chun íomhánna bruscair a ghabháil ó cheamara na haipe",
+ "To get exact geolocation of where the litter is": "Chun suíomh cruinn an bhruscair a fháil",
+ "To Tag": "Le clibeáil",
+ "Today": "Inniu",
+ "Total Littercoin": "Littercoin Iomlán",
+ "Total People": "Daoine Iomlána",
+ "Total Photos": "Grianghraif Iomlána",
+ "Total Tags": "Lipéid Iomlána",
+ "Total Users": "Úsáideoirí Iomlána",
+ "Type to suggest tags": "Clóscríobh chun lipéid a mholadh",
+ "UN Digital Public Good": "Maitheas Poiblí Digiteach na NA",
+ "Unique Username": "Ainm Úsáideora Uathúil",
+ "Untagged": "Gan lipéad",
+ "Update Now": "Nuashonraigh Anois",
+ "Update Tags": "Nuashonraigh Clibeanna",
+ "Upload": "Uaslódáil",
+ "Username": "Ainm Úsáideora",
+ "Username should be between 3-20 characters": "Ba cheart go mbeadh 3-20 carachtar san ainm úsáideora",
+ "Username should not be equal to password": "Ní mór don ainm úsáideora a bheith difriúil ón bpasfhocal",
+ "Value not updated": "Níor nuashonraíodh an luach",
+ "Value updated": "Nuashonraíodh an luach",
+ "Warning": "Rabhadh",
+ "Welcome": "Fáilte",
+ "XP": "XP",
+ "Yes, Delete": "Sea, Scrios",
+ "You can upload up to 10 custom tags.": "Is féidir leat suas le 10 lipéad shaincheaptha a uaslódáil.",
+ "You have tagged {{count}} photos": "Tá {{count}} grianghraf lipéadaithe agat",
+ "You have uploaded {{count}} photos": "Tá {{count}} grianghraf uaslódáilte agat",
+ "Your password did not match": "Níor tháinig do phasfhocal leis"
+}
diff --git a/assets/langs/ie/index.js b/assets/langs/ie/index.js
index 5be8fd42..6f343ae3 100644
--- a/assets/langs/ie/index.js
+++ b/assets/langs/ie/index.js
@@ -1,23 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './ie.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import team from './team.json';
-import welcome from './welcome.json';
export const ie = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- team,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/ie/leftpage.json b/assets/langs/ie/leftpage.json
deleted file mode 100644
index 647d5fa7..00000000
--- a/assets/langs/ie/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Grianghraif",
- "geotagged": "Grianghraif Lógraite",
- "cancel": "Cealaigh",
- "done": "Críochnaithe",
- "next": "Ar Aghaidh",
- "upload": "Uaslódáil",
- "select-a-photo": "Roghnaigh grianghraf",
- "delete": "Scrios",
- "selected": "{{photos}} roghnaithe",
- "press-upload": "Brúigh Uaslódáil",
- "select-to-delete": "Roghnaigh na híomhánna atá uait a scriosadh",
- "please-wait-uploading": "Fan go bhfuil do ghréasáin ag uaslódáil na ngrianghraif",
- "thank-you": "Go raibh maith agat!!!",
- "you-have-uploaded": "Tá {{count}} grianghraf uaslódáilte agat",
- "you-have-tagged": "Tá tú tarraingthe le lógraif {{count}}",
- "close": "Dún",
- "take-photo": "Glac grianghraf agus roghnaigh í ón ngalra",
- "no-images": "Gan íomhánna le huaslódáil",
- "camera": "Ceamara",
- "leaderboard": "Cionn Tábla"
-}
diff --git a/assets/langs/ie/litter.json b/assets/langs/ie/litter.json
index 1fb5a794..94b126d0 100644
--- a/assets/langs/ie/litter.json
+++ b/assets/langs/ie/litter.json
@@ -1,309 +1,206 @@
{
"categories": {
"alcohol": "Alcól",
- "art": "Ealaín",
- "brands": "Bailte",
- "coastal": "Cósta",
- "coffee": "Caife",
- "dogshit": "Péataí",
- "dumping": "Caith",
+ "electronics": "Leictreonaic",
"food": "Bia",
- "industrial": "Tionscalach",
- "material": "Material",
- "other": "Eile",
- "sanitary": "Slachtmhar",
- "softdrinks": "Deochanna Bog",
- "smoking": "Tobac",
- "custom-tag": "Tag Custaiméir"
- },
- "smoking": {
- "butts": "Cigaretaí/Greamáin",
- "lighters": "Lasairéan",
- "cigaretteBox": "Bosca Tobac",
- "tobaccoPouch": "Bragaire Tobac",
- "skins": "Páipéir Rollála",
- "smoking_plastic": "Pacáistiú Plaisteacha",
- "filters": "Scagairí",
- "filterbox": "Bosca Scagairí",
- "smokingOther": "Tobac - Eile",
- "vape_pen": "Peann Vape",
- "vape_oil": "Ola Vape"
+ "industrial": "Tionsclaíoch",
+ "marine": "Muirí",
+ "medical": "Leighis",
+ "personal_care": "Cúram Pearsanta",
+ "pets": "Peataí",
+ "smoking": "Caitheamh Tobac",
+ "softdrinks": "Deochanna Boga",
+ "unclassified": "Neamhaicmithe",
+ "vehicles": "Feithiclí"
},
"alcohol": {
- "beerBottle": "Buitleoga Beorach",
- "spiritBottle": "Buitleoga Braonach",
- "wineBottle": "Buitleoga Fíona",
- "beerCan": "Canáin Beorach",
- "brokenGlass": "Gloine Greamaithe",
- "bottleTops": "Bonntaí Buitle",
- "paperCardAlcoholPackaging": "Pacáistiú Páipéir/Cairt Alcól",
- "plasticAlcoholPackaging": "Pacáistiú Plaisteacha Alcól",
- "alcoholOther": "Alcól - Eile",
- "pint": "Gloine Pionta",
- "six_pack_rings": "Fáinní Síopa Sheisear",
- "alcohol_plastic_cups": "Cupáin Plaisteacha Alcól"
- },
- "coffee": {
- "coffeeCups": "Cupáin Caife",
- "coffeeLids": "Prataí Caife",
- "coffeeOther": "Caife - Eile"
+ "bottle": "Buidéal",
+ "bottle_cap": "Caipín Buidéil",
+ "broken_glass": "Gloine Bhriste",
+ "can": "Canna",
+ "cup": "Cupán",
+ "other": "Eile",
+ "packaging": "Pacáistiú",
+ "pint_glass": "Gloine Phionta",
+ "pull_ring": "Fáinne Tarraingthe",
+ "shot_glass": "Gloine Bhiotáille",
+ "six_pack_rings": "Fáinní Séphaca",
+ "wine_glass": "Gloine Fhíona"
+ },
+ "electronics": {
+ "battery": "Ceallra",
+ "cable": "Cábla",
+ "charger": "Luchtaire",
+ "headphones": "Cluasáin",
+ "other": "Eile",
+ "phone": "Fón"
},
"food": {
- "sweetWrappers": "Cáithníní Milseán",
- "paperFoodPackaging": "Pacáistiú Bia Páipéir/Cairt",
- "plasticFoodPackaging": "Pacáistiú Plaisteacha Bia",
- "plasticCutlery": "Cúirteara Plaisteacha",
- "crisp_small": "Pacáiste Snacs (beag)",
- "crisp_large": "Pacáiste Snacs (mór)",
- "styrofoam_plate": "Pláta Stíréam",
- "napkins": "Napkins",
- "sauce_packet": "Pacáiste Sóis",
- "glass_jar": "Doras Gloine",
- "glass_jar_lid": "Prata Dorais Gloine",
+ "bag": "Mála",
+ "box": "Bosca",
+ "can": "Canna",
+ "crisp_packet": "Paicéad Brioscán",
+ "cutlery": "Sceanra",
+ "gum": "Guma Coganta",
+ "jar": "Próca",
+ "lid": "Clúdach",
+ "napkins": "Naipciní",
+ "other": "Eile",
+ "packaging": "Pacáistiú",
+ "packet": "Paicéad",
"pizza_box": "Bosca Píotsa",
- "aluminium_foil": "Foiliamh Alúmanam",
- "chewing_gum": "Subhóg Míochaine",
- "foodOther": "Bia - Eile"
- },
- "softdrinks": {
- "waterBottle": "Buitle Uisce Plaisteacha",
- "fizzyDrinkBottle": "Buitle Deoch Bog Plaisteacha",
- "tinCan": "Canáin",
- "bottleLid": "Bonntaí Buitle",
- "bottleLabel": "Leabhraí Buitle",
- "sportsDrink": "Buitle Deoch Spóirt",
- "straws": "Slaitíní",
- "plastic_cups": "Cupáin Plaisteacha",
- "plastic_cup_tops": "Bonntaí Cupán Plaisteacha",
- "milk_bottle": "Buitle Bainne",
- "milk_carton": "Cairtún Bainne",
- "paper_cups": "Cupáin Páipéir",
- "juice_cartons": "Cairtúin Sú",
- "juice_bottles": "Buitleanna Sú",
- "juice_packet": "Pacáiste Sú",
- "ice_tea_bottles": "Buitleanna Tae Thuaisce",
- "ice_tea_can": "Canáin Tae Thuaisce",
- "energy_can": "Canáin Fuinneamh",
- "pullring": "Dulra",
- "strawpacket": "Pacáistiú Slaitíní",
- "styro_cup": "Cupáin Stíréam",
- "softDrinkOther": "Deochanna Bog - Eile"
- },
- "sanitary": {
- "gloves": "Láimhseáil",
- "facemask": "Máscar",
- "condoms": "Comhdhlúthú",
- "nappies": "Napáistí",
- "menstral": "Míochaine",
- "deodorant": "Déadúrach",
- "ear_swabs": "Clibeanna Cluaise",
- "tooth_pick": "Pic Beatháin",
- "tooth_brush": "Scuab Fiacla",
- "wetwipes": "Páipéir Fuar",
- "hand_sanitiser": "Deachlán Lámh",
- "sanitaryOther": "Slachtmhar - Eile"
- },
- "other": {
- "random_litter": "Sraothra Neamhfhoirmeálta",
- "bags_litter": "Málaí Sraothra",
- "overflowing_bins": "Binní ag Tuargáil",
- "plastic": "Plaisteach Anaithnid",
- "automobile": "Gluaisteán",
- "tyre": "Cíor",
- "traffic_cone": "Cón Tráchta",
- "metal": "Cineál Féith",
- "plastic_bags": "Málaí Plaisteacha",
- "election_posters": "Poistéir Toghcháin",
- "forsale_posters": "Poistéir Ar Díol",
- "cable_tie": "Ceangail Cábla",
- "books": "Leabhair",
- "magazine": "Irisí",
- "paper": "Páipéar",
- "stationary": "Stáisiúnach",
- "washing_up": "Buitle Níocháin",
- "clothing": "Éadaí",
- "hair_tie": "Comháirle Maoirse",
- "ear_plugs": "Cnónna Cluas (Ceol)",
- "elec_small": "Fuinneoga Beaga",
- "elec_large": "Fuinneoga Móra",
- "batteries": "Batairí",
- "balloons": "Balúin",
- "life_buoy": "Boi Ard",
- "other": "Eile (Eile)"
- },
- "dumping": {
- "small": "Beag",
- "medium": "Meánach",
- "large": "Mór"
+ "plate": "Pláta",
+ "tinfoil": "Scragall Stáin",
+ "wrapper": "Fillteán"
},
"industrial": {
- "oil": "Ola",
- "industrial_plastic": "Plaisteach Tionscalach",
- "chemical": "Ceimiceán",
- "bricks": "Broga",
- "tape": "Scuab",
- "industrial_other": "Tionscalach - Eile"
- },
- "coastal": {
- "microplastics": "Micrea-plaisteacha",
- "mediumplastics": "Meána-plaisteacha",
- "macroplastics": "Méara-plaisteacha",
- "rope_small": "Rópa Beag",
- "rope_medium": "Rópa Meánach",
- "rope_large": "Rópa Mór",
- "fishing_gear_nets": "Géar Iascaireachta/Neantóga",
- "buoys": "Boisí",
- "degraded_plasticbottle": "Buitle Plaisteacha Déghnéitheach",
- "degraded_plasticbag": "Mála Plaisteacha Déghnéitheach",
- "degraded_straws": "Slaitíní Ógtha Déghnéitheacha",
- "degraded_lighters": "Lasairéin Déghnéitheacha",
- "balloons": "Balúin",
- "lego": "Lego",
- "shotgun_cartridges": "Cartúise Scatailín",
- "styro_small": "Stíréam Beag",
- "styro_medium": "Stíréam Meánach",
- "styro_large": "Stíréam Mór",
- "coastal_other": "Cósta - Eile"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "tim_hortons": "Tim Hortons",
- "thins": "Thins",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "TrashDog",
- "littercat": "LitterCat",
- "duck": "LitterDuck"
- },
- "presence": {
- "picked-up": "Tá an Sraothar Neamhfhoirmeálta sroichte!",
- "still-there": "Tá an Sraothar Neamhfhoirmeálta fós ann!"
- },
- "tags": {
- "type-to-suggest": "Cineál le haghaidh moltaí",
- "suggested": "Moltaí {{count}} arna mholadh"
- },
- "dogshit": {
- "poo": "Ionadh!",
- "poo_in_bag": "Ionadh in mhála!"
+ "bricks": "Bríceanna",
+ "chemical_container": "Coimeádán Ceimiceán",
+ "construction": "Tógáil",
+ "container": "Coimeádán",
+ "dumping_large": "Dumpáil (Mór)",
+ "dumping_medium": "Dumpáil (Meánach)",
+ "dumping_small": "Dumpáil (Beag)",
+ "oil_container": "Coimeádán Ola",
+ "oil_drum": "Druma Ola",
+ "other": "Eile",
+ "pallet": "Pailléad",
+ "pipe": "Píopa",
+ "tape": "Téip",
+ "wire": "Sreang"
+ },
+ "marine": {
+ "buoy": "Baoi",
+ "crate": "Cráta",
+ "fishing_net": "Eangach Iascaireachta",
+ "macroplastics": "Macraphlaisteacha",
+ "microplastics": "Micreaphlaisteacha",
+ "other": "Eile",
+ "rope": "Rópa",
+ "shotgun_cartridge": "Cartús Gunna Gráin",
+ "styrofoam": "Stíreafóm"
},
- "material": {
+ "materials": {
"aluminium": "Alúmanam",
- "bronze": "Próinsias",
- "carbon_fiber": "Snáthcharbóin",
- "ceramic": "Céirimeach",
- "composite": "Comhdheanta",
- "concrete": "Concréit",
+ "asphalt": "Asfalt",
+ "bamboo": "Bambú",
+ "bioplastic": "Bithphlaisteach",
+ "cardboard": "Cairtchlár",
+ "ceramic": "Ceirmeach",
+ "clay": "Cré",
+ "cloth": "Éadach",
+ "concrete": "Coincréit",
"copper": "Copar",
- "fiberglass": "Gloineála",
+ "cork": "Corc",
+ "cotton": "Cadás",
+ "elastic": "Leaisteach",
+ "fiberglass": "Snáithghloine",
+ "foam": "Cúr",
+ "foil": "Scragall",
"glass": "Gloine",
- "iron_or_steel": "Iarann/Níolacáin",
- "latex": "Latex",
- "metal": "Miotail",
- "nickel": "Nicil",
- "nylon": "Nailon",
+ "latex": "Látacs",
+ "metal": "Miotal",
+ "nylon": "Níolón",
"paper": "Páipéar",
"plastic": "Plaisteach",
- "polyethylene": "Polaitiléin",
- "polymer": "Polamaire",
- "polypropylene": "Polapróipiléin",
- "polystyrene": "Polastairéin",
- "pvc": "PVC",
- "rubber": "Rubair",
- "titanium": "Titianam",
+ "polyester": "Polaistéar",
+ "polystyrene": "Polaistiréin",
+ "rubber": "Rubar",
+ "steel": "Cruach",
+ "stone": "Cloch",
"wood": "Adhmad"
+ },
+ "medical": {
+ "bandage": "Bindealán",
+ "face_mask": "Masc Aghaidhe",
+ "gloves": "Lámhainní",
+ "medicine_bottle": "Buidéal Leighis",
+ "other": "Eile",
+ "pill_pack": "Paicéad Piollairí",
+ "plaster": "Plástair",
+ "sanitiser": "Díghalrán",
+ "syringe": "Steallaire"
+ },
+ "personal_care": {
+ "condom": "Coiscín",
+ "condom_wrapper": "Fillteán Coiscín",
+ "dental_floss": "Flas Fiacla",
+ "deodorant_can": "Canna Díbholaithe",
+ "ear_swabs": "Maidí Cluaise",
+ "menstrual_cup": "Cupán Míostraithe",
+ "nappies": "Clúidíní",
+ "other": "Eile",
+ "sanitary_pad": "Ceap Sláintíochta",
+ "tampon": "Súitín",
+ "toothbrush": "Scuab Fiacla",
+ "toothpaste_tube": "Feadán Taos Fiacla",
+ "wipes": "Ciarsúir Fhliucha"
+ },
+ "pets": {
+ "dog_waste": "Dramhaíl Madra",
+ "dog_waste_in_bag": "Dramhaíl Madra i Mála",
+ "other": "Eile"
+ },
+ "smoking": {
+ "ashtray": "Luaithreadán",
+ "butts": "Búití Toitíní",
+ "cigarette_box": "Bosca Toitíní",
+ "cigarette_filter": "Scagaire Toitín",
+ "lighters": "Lastóirí",
+ "match_box": "Bosca Lasán",
+ "other": "Eile",
+ "packaging": "Pacáistiú",
+ "rolling_papers": "Páipéir Rollta",
+ "tobacco_pouch": "Sparán Tobac",
+ "vape_cartridge": "Cartús Gail",
+ "vape_pen": "Peann Gail"
+ },
+ "softdrinks": {
+ "bottle": "Buidéal",
+ "broken_glass": "Gloine Bhriste",
+ "can": "Canna",
+ "carton": "Cartán",
+ "coffee_pod": "Pod Caife",
+ "cup": "Cupán",
+ "juice_pouch": "Poitseáil Súigh",
+ "label": "Lipéad",
+ "lid": "Clúdach",
+ "other": "Eile",
+ "packaging": "Pacáistiú",
+ "straw": "Sop",
+ "straw_wrapper": "Fillteán Soip"
+ },
+ "types": {
+ "beer": "Beoir",
+ "cider": "Ceirtlis",
+ "coffee": "Caife",
+ "energy": "Fuinneamh",
+ "iced_tea": "Tae Oighrithe",
+ "juice": "Sú",
+ "milk": "Bainne",
+ "plant_milk": "Bainne Plandaí",
+ "smoothie": "Smoothie",
+ "soda": "Sóide",
+ "sparkling_water": "Uisce Geal",
+ "spirits": "Biotáille",
+ "sports": "Spóirt",
+ "tea": "Tae",
+ "unknown": "Anaithnid",
+ "water": "Uisce",
+ "wine": "Fíon"
+ },
+ "unclassified": {
+ "other": "Eile"
+ },
+ "vehicles": {
+ "battery": "Ceallra",
+ "bumper": "Tuairteoir",
+ "car_part": "Páirt Cairr",
+ "license_plate": "Pláta Ceadúnais",
+ "light": "Solas",
+ "mirror": "Scáthán",
+ "other": "Eile",
+ "tyre": "Bonn",
+ "wheel": "Roth"
}
}
diff --git a/assets/langs/ie/permission.json b/assets/langs/ie/permission.json
deleted file mode 100644
index 284d0564..00000000
--- a/assets/langs/ie/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Ceadaigh Rochtain ar an nGailearaí",
- "allow-permission": "Ceadaigh Ceadúnais",
- "camera-access": "Rochtain ar an gCeamara",
- "camera-access-body": "Chun íomhánna na tránna a ghabháil ó gceamara an aip",
- "gallery-body": "Tabhair cead dúinn rochtain ar do ghailéaraí, tá sé riachtanach más mian leat íomhánna geotheagtha a uaslódáil ón ngailéaraí",
- "location-access": "Rochtain ar an Láithreacht",
- "location-body": "Chun faisnéis go díreach ar áit an ghailí a fháil",
- "new-version": "Leagan Nua Ar Fáil",
- "not-now": "Níos déanaí, Náisiúna",
- "please-give-permissions": "Tabhair Ceadúnais, Más É Do Thoil É",
- "please-update-app": "Le do thoil, coimeád an t-appliacs as láthair chun taithí feabhsaithe a fháil",
- "update-now": "Nuashonraigh Anois"
-}
diff --git a/assets/langs/ie/settings.json b/assets/langs/ie/settings.json
deleted file mode 100644
index cc2503e9..00000000
--- a/assets/langs/ie/settings.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "settings": "Socruithe",
- "my-account": "MO CHÚNTAS",
- "name": "Ainm",
- "username": "Úsáideoir",
- "email": "Ríomhphost",
- "social": "Cuntais Sóisialta",
- "privacy": "PRÍOBHÁID",
- "tagging": "TAGÁIL",
- "enable_admin_tagging": "Cumasaithe tagála a chruthú ag an bpobal",
- "show-name-maps": "Taispeáin Ainm ar na Léarscáileanna",
- "show-username-maps": "Taispeáin Úsáideoir ar na Léarscáileanna",
- "show-name-leaderboards": "Taispeáin Ainm ar na Leaderboards",
- "show-username-leaderboards": "Taispeáin Úsáideoir ar na Leaderboards",
- "show-name-createdby": "Taispeáin Ainm ar an gCruthaítear",
- "show-username-createdby": "Taispeáin Úsáideoir ar an gCruthaítear",
- "tags": "CÉIMEANNA",
- "show-previous-tags": "Taispeáin Céimeanna Roimhe",
- "logout": "Logáil Amach",
- "success": "Rath!",
- "error": "Earráid!",
- "value-not-updated": "Níor nuashonraíodh an luach",
- "value-updated": "Nuashonraíodh an luach",
- "go-back": "Gabh Siar",
- "edit": "Cuir in Eagar",
- "save": "Sábháil",
- "alert": "Fógra",
- "do-you-really-want-to-change": "An bhfuil tú cinnte go dteastaíonn uait an socruithe seo a athrú?",
- "ok": "OK",
- "cancel": "Cealaigh",
- "picked-up": "Sroichte",
- "litter-picked-up": "Tá an bruscar sroichte",
- "enter-email": "Cuir isteach seoladh ríomhphoist, más é do thoil é",
- "enter-username": "Cuir isteach úsáideoir, más é do thoil é",
- "enter-name": "Cuir isteach ainm, más é do thoil é",
- "name-min-max": "Ba cheart go mbeadh an t-ainm idir 3-20 carachtair",
- "username-min-max": "Ba cheart go mbeadh an t-úsáideoir idir 3-20 carachtair",
- "url-not-valid": "Cuir isteach URL bailí, más é do thoil é",
- "delete-account": "Scrios Cuntas",
- "delete-your-account": "Scrios do chuntas",
- "warning": "Rabhadh",
- "password-incorrect": "Níor chruinnigh do phasfhocal"
-}
diff --git a/assets/langs/ie/stats.json b/assets/langs/ie/stats.json
deleted file mode 100644
index 6068e40e..00000000
--- a/assets/langs/ie/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Sonraí Domhanda",
- "next-target": "An Chéad Sprioc Eile\n{{count}} Bruscar",
- "total-litter": "Iomlán Bruscar",
- "total-photos": "Iomlán Grianghraif",
- "total-users": "Iomlán Úsáideoirí",
- "total-littercoin": "Iomlán Littercoin"
-}
diff --git a/assets/langs/ie/tag.json b/assets/langs/ie/tag.json
deleted file mode 100644
index b624010a..00000000
--- a/assets/langs/ie/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Cuir Tag Leis",
- "confirm": "Deimhnigh",
- "type-to-suggest": "Cineál le haghaidh moltaí tagála",
- "suggested-tags": "Moltaí Tagála: {{count}}",
- "alert": "Fógra",
- "still-there": "Tá an bruscar fós ann",
- "picked-up": "Tá an bruscar sroichte",
- "litter-status": "Stádas an Bhruscair",
- "picked-thumb": "Sroichte 👍🏻",
- "not-picked-thumb": "Níor sroichte 👎🏻",
- "delete-message": "An bhfuil tú cinnte go bhfuil tú ag iarraidh an íomhá seo a scriosadh?",
- "cancel": "Cealaigh",
- "delete": "Sea, Scrios",
- "custom-tags": "Tagáil Arna dhéanamh Ag Féin",
- "custom-tags-min": "Caithfidh an tag a bheith ar a laghad 3 carachtair ar fad",
- "custom-tags-max": "Ní féidir leis an gceangal níos mó ná 100 carachtair",
- "tag-already-added": "Tag á chur leis cheana",
- "tag-limit-reached": "Tá tú in ann suas le 3 tagála a uaslódáil.",
- "delete-image": "\uD83D\uDEAE Scrios Íomhá"
-}
diff --git a/assets/langs/ie/team.json b/assets/langs/ie/team.json
deleted file mode 100644
index e0f4f9b5..00000000
--- a/assets/langs/ie/team.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "total-members": "Iomlán Baill"
-}
diff --git a/assets/langs/ie/user.json b/assets/langs/ie/user.json
deleted file mode 100644
index 98b2298d..00000000
--- a/assets/langs/ie/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Leibhéal",
- "level-up": "{{count}} XP chun éirí",
- "littercoin": "Littercoin",
- "next-littercoin": "Tá {{count}}% Littercoin Anseo",
- "photos": "Grianghraif",
- "rank": "Rang",
- "tags": "Céimeanna",
- "welcome": "Fáilte",
- "XP": "XP"
-}
diff --git a/assets/langs/ie/welcome.json b/assets/langs/ie/welcome.json
deleted file mode 100644
index b3a521d4..00000000
--- a/assets/langs/ie/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "Tá sé ",
- "easy": "EASCA!",
- "just-tag-and-upload": "Cuir tagáil ar an bruscar agus uaslódáil í",
- "fun": "SPÓRTÚIL!",
- "climb-leaderboards": "Géaraigh na Leaderboards ag #LitterWorldCup",
- "open": "OSCAILTE!",
- "open-database": "Cabhraigh linn bunachar sonraí oscailte is casta ar domhan a chruthú faoi bruscar agus truailliú plaisteach",
- "continue": "Tosnú!",
- "already-have-account": "An bhfuil cuntas agat cheana? Logáil isteach"
-}
diff --git a/assets/langs/index.js b/assets/langs/index.js
deleted file mode 100644
index de80f88b..00000000
--- a/assets/langs/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import {ar} from './ar';
-import {de} from './de';
-import {en} from './en';
-import {es} from './es';
-import {fr} from './fr';
-import {ie} from './ie';
-import {nl} from './nl';
-import {pt} from './pt';
-
-export const langs = {
- ar,
- de,
- en,
- es,
- fr,
- ie,
- nl,
- pt
-};
diff --git a/assets/langs/nl/auth.json b/assets/langs/nl/auth.json
deleted file mode 100644
index 208d0049..00000000
--- a/assets/langs/nl/auth.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "email-address": "Email Adres",
- "password": "Wachtwoord",
- "unique-username": "Unieke gebruikersnaam",
- "create-account": "Maak Account",
- "or": "of",
- "already-have": "Heb je al een account?",
- "forgot-password": "Wachtwoord vergeten?",
- "login": "Log In",
- "back-to-login": "Terug naar Inloggen",
- "enter-email": "Voer een emailadres in",
- "enter-password": "Geef een wachtwoord",
- "enter-username": "Geen een gebruikersnaam",
- "must-contain": "Moet minimaal 6 tekens bevatten waarvan minimaal 1 hoofdletter en 1 getal",
- "alphanumeric-username": "Moet 8-20 alfanumerieke tekens zijn, geen spaties",
- "email-not-valid": "Dit is geen geldig emailadres",
- "invalid-credentials": "De inloggegevens zijn onjuist"
-}
diff --git a/assets/langs/nl/index.js b/assets/langs/nl/index.js
index 70ba3c2f..b7907235 100644
--- a/assets/langs/nl/index.js
+++ b/assets/langs/nl/index.js
@@ -1,21 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './nl.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import welcome from './welcome.json';
export const nl = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/nl/leftpage.json b/assets/langs/nl/leftpage.json
deleted file mode 100644
index 81440dd3..00000000
--- a/assets/langs/nl/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Foto's",
- "geotagged": "Geotagged",
- "cancel": "Cancel",
- "done": "Klaar",
- "next": "Volgende",
- "upload": "Uploaden",
- "select-a-photo": "Selecteer een foto",
- "delete": "Verwijder",
- "selected": "{{photos}} geselecteerd",
- "press-upload": "Druk op Uploaden",
- "select-to-delete": "Selecteer de afbeeldingen die je wilt verwijderen",
- "please-wait-uploading": "Wacht even terwijl je foto's worden geupload",
- "thank-you": "Dank je!!!",
- "you-have-uploaded": "Je hebt {{count}} foto('s) geupload",
- "you-have-tagged": "Je hebt {{count}} foto's getagd.",
- "close": "Sluiten",
- "take-photo": "Maak een foto of kies uit de galerij",
- "no-images": "Geen afbeeldingen om te uploaden",
- "camera": "camera",
- "leaderboard": "Ranglijst"
-}
diff --git a/assets/langs/nl/litter.json b/assets/langs/nl/litter.json
index d12346bb..c3a71acc 100644
--- a/assets/langs/nl/litter.json
+++ b/assets/langs/nl/litter.json
@@ -1,306 +1,206 @@
{
"categories": {
"alcohol": "Alcohol",
- "art": "Kunst",
- "brands": "Merken",
- "coastal": "Kust",
- "coffee": "Koffie",
- "dumping": "Lozingen",
+ "electronics": "Elektronica",
"food": "Voedsel",
"industrial": "Industrieel",
- "material": "Material",
- "other": "Ander",
- "sanitary": "Hygiëne",
- "softdrinks": "Frisdrank",
+ "marine": "Maritiem",
+ "medical": "Medisch",
+ "personal_care": "Persoonlijke Verzorging",
+ "pets": "Huisdieren",
"smoking": "Rookwaar",
- "custom-tag": "Aangepaste Tag"
- },
- "smoking": {
- "butts": "Sigaretten/Peuken",
- "lighters": "Aanstekers",
- "cigaretteBox": "Sigarettenpakje",
- "tobaccoPouch": "Tabakszak",
- "skins": "Vloeipapier",
- "smoking_plastic": "Sigarettenpakplastic",
- "filters": "Filters",
- "filterbox": "Filterverpakking",
- "smokingOther": "Rookwaar-Overig",
- "vape_pen": "Vape pen",
- "vape_oil": "Vape olie"
+ "softdrinks": "Frisdrank",
+ "unclassified": "Niet-geclassificeerd",
+ "vehicles": "Voertuigen"
},
"alcohol": {
- "beerBottle": "Bier Flessen",
- "spiritBottle": "Sterke Drank Flessen",
- "wineBottle": "Wijn Flessen",
- "beerCan": "Bier Blikken",
- "brokenGlass": "Gebroken Glas",
- "bottleTops": "Bierfles Doppen",
- "paperCardAlcoholPackaging": "Papieren Verpakking",
- "plasticAlcoholPackaging": "Plastic Verpakking",
- "alcoholOther": "Alkohol-Overig",
- "pint": "Bierglas",
- "six_pack_rings": "Six-pack keelclips",
- "alcohol_plastic_cups": "Plastic Bekers"
- },
- "coffee": {
- "coffeeCups": "Koffie Bekers",
- "coffeeLids": "Koffie Deksels",
- "coffeeOther": "Koffie-Overig"
+ "bottle": "Fles",
+ "bottle_cap": "Flessendop",
+ "broken_glass": "Gebroken Glas",
+ "can": "Blikje",
+ "cup": "Beker",
+ "other": "Overig",
+ "packaging": "Verpakking",
+ "pint_glass": "Bierglas",
+ "pull_ring": "Blik Lipje",
+ "shot_glass": "Borrelglas",
+ "six_pack_rings": "Sixpackringen",
+ "wine_glass": "Wijnglas"
+ },
+ "electronics": {
+ "battery": "Batterij",
+ "cable": "Kabel",
+ "charger": "Oplader",
+ "headphones": "Koptelefoon",
+ "other": "Overig",
+ "phone": "Telefoon"
},
"food": {
- "sweetWrappers": "Snoep Papiertjes",
- "paperFoodPackaging": "Papier/Karton Verpakking",
- "plasticFoodPackaging": "Plastic Verpakking",
- "plasticCutlery": "Plastic Bestek",
- "crisp_small": "Chips Verpakking (klein)",
- "crisp_large": "Chips Verpakking (groot)",
- "styrofoam_plate": "Piepschuim bord",
+ "bag": "Zak",
+ "box": "Doos",
+ "can": "Blikje",
+ "crisp_packet": "Chipszak",
+ "cutlery": "Bestek",
+ "gum": "Kauwgom",
+ "jar": "Pot",
+ "lid": "Deksel",
"napkins": "Servetten",
- "sauce_packet": "Saus Bakjes",
- "glass_jar": "Glazen Pot",
- "glass_jar_lid": "Glazen Pot Deksel",
+ "other": "Overig",
+ "packaging": "Verpakking",
+ "packet": "Pakje",
"pizza_box": "Pizzadoos",
- "aluminium_foil": "Aluminium folie",
- "chewing_gum": "Kauwgom",
- "foodOther": "Voedsel-Overig"
- },
- "softdrinks": {
- "waterBottle": "Plastic Water Fles",
- "fizzyDrinkBottle": "Plastic Frisdrank Fles",
- "tinCan": "Blikje",
- "bottleLid": "Fles Dop",
- "bottleLabel": "Fles Label",
- "sportsDrink": "Sportdrank Fles",
- "straws": "Rietjes",
- "plastic_cups": "Plastic Bekers",
- "plastic_cup_tops": "Plastic Beker Deksel",
- "milk_bottle": "Melk Fles",
- "milk_carton": "Melk Karton",
- "paper_cups": "Papieren Beker",
- "juice_cartons": "Sap Karton",
- "juice_bottles": "Sap Fles",
- "juice_packet": "Juice Packet",
- "ice_tea_bottles": "IJsthee Fles",
- "ice_tea_can": "IJsthee Blikje",
- "energy_can": "Energie Blikje",
- "pullring": "Blik Lipje",
- "strawpacket": "Rietjes Verpakking",
- "styro_cup": "Piepschuim Beker",
- "softDrinkOther": "Frisdrank (overig)"
- },
- "sanitary": {
- "gloves": "Handschoenen",
- "facemask": "Mondkapje",
- "condoms": "Condoom",
- "nappies": "Luier",
- "menstral": "Maandverband",
- "deodorant": "Deodorant",
- "ear_swabs": "Wattenstaaf",
- "tooth_pick": "Tandenstoker",
- "tooth_brush": "Tandenborstel",
- "wetwipes": "Natte Doekjes",
- "hand_sanitiser": "Hand Ontsmetter",
- "sanitaryOther": "Hygiëne (overig)"
- },
- "other": {
- "dogshit": "Hondendrol",
- "pooinbag": "Hondendrol in zakje",
- "automobile": "Auto",
- "clothing": "Kleding",
- "traffic_cone": "Verkeerspilon",
- "life_buoy": "Levensboei",
- "plastic": "Onbekend Plastic",
- "dump": "Illegale Dumping",
- "metal": "Metalen Object",
- "plastic_bags": "Plastic Tas",
- "election_posters": "Verkiezingsposter",
- "forsale_posters": "Tekoop Poster",
- "books": "Boeken",
- "magazine": "Tijdschrift",
- "paper": "Krant",
- "stationary": "Briefpapier",
- "washing_up": "Afwasmiddel Fles",
- "hair_tie": "Haar Elastiek",
- "ear_plugs": "Oordopjes (muziek)",
- "batteries": "Batterijen",
- "elec_small": "Elektrisch klein",
- "elec_large": "Elektrisch groot",
- "other": "Overig (Overig)",
- "random_litter": "Willekeurig afval"
- },
- "dumping": {
- "small": "Klein",
- "medium": "Middel",
- "large": "Groot"
+ "plate": "Bord",
+ "tinfoil": "Aluminiumfolie",
+ "wrapper": "Wikkel"
},
"industrial": {
- "oil": "Olie",
- "industrial_plastic": "Plastic",
- "chemical": "Chemicaliën",
"bricks": "Stenen",
+ "chemical_container": "Chemicaliëncontainer",
+ "construction": "Bouwafval",
+ "container": "Container",
+ "dumping_large": "Dumping (Groot)",
+ "dumping_medium": "Dumping (Middel)",
+ "dumping_small": "Dumping (Klein)",
+ "oil_container": "Oliecontainer",
+ "oil_drum": "Olievat",
+ "other": "Overig",
+ "pallet": "Pallet",
+ "pipe": "Buis",
"tape": "Plakband",
- "industrial_other": "Industrieel (overig)"
- },
- "coastal": {
- "microplastics": "Microplastic",
- "mediumplastics": "Middelplastics",
- "macroplastics": "Grootplastics",
- "rope_small": "Klein touw",
- "rope_medium": "Middel touw",
- "rope_large": "Groot touw",
- "fishing_gear_nets": "Vistuig/net",
- "buoys": "Boei",
- "degraded_plasticbottle": "Gedegradeerde Plastic Fles",
- "degraded_plasticbag": "Gedegradeerde Plastic Tas",
- "degraded_straws": "Gedegradeerde Rietjes",
- "degraded_lighters": "Gedegradeerde Aanstekers",
- "balloons": "Ballonnen",
- "lego": "Lego",
- "shotgun_cartridges": "Geweer Patronen",
- "styro_small": "Piepschuim klein",
- "styro_medium": "Piepschuim middel",
- "styro_large": "Piepschuim groot",
- "coastal_other": "Kust (overig)"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "thins": "Thins",
- "tim_hortons": "Tim Hortons",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "trashdog": {
- "trashdog": "Hond bij Afval",
- "littercat": "Kat bij Afval",
- "duck": "Eend bij Afval"
- },
- "presence": {
- "picked-up": "Ik heb het opgeruimd!",
- "still-there": "Het ligt er nog."
- },
- "tags": {
- "type-to-suggest": "Type to suggest tags",
- "suggested": "Suggested tags {{count}}"
- },
- "dogshit": {
- "poo": "Hondendrol!",
- "poo_in_bag": "Hondendrol in zakje!"
- },
- "material": {
+ "wire": "Draad"
+ },
+ "marine": {
+ "buoy": "Boei",
+ "crate": "Krat",
+ "fishing_net": "Visnet",
+ "macroplastics": "Macroplastics",
+ "microplastics": "Microplastics",
+ "other": "Overig",
+ "rope": "Touw",
+ "shotgun_cartridge": "Geweerpatroon",
+ "styrofoam": "Piepschuim"
+ },
+ "materials": {
"aluminium": "Aluminium",
- "bronze": "Brons",
- "carbon_fiber": "Koolstofvezel",
+ "asphalt": "Asfalt",
+ "bamboo": "Bamboe",
+ "bioplastic": "Bioplastic",
+ "cardboard": "Karton",
"ceramic": "Keramiek",
- "composite": "Composiet",
+ "clay": "Klei",
+ "cloth": "Stof",
"concrete": "Beton",
"copper": "Koper",
+ "cork": "Kurk",
+ "cotton": "Katoen",
+ "elastic": "Elastiek",
"fiberglass": "Glasvezel",
+ "foam": "Schuim",
+ "foil": "Folie",
"glass": "Glas",
- "iron_or_steel": "IJzer/Staal",
"latex": "Latex",
"metal": "Metaal",
- "nickel": "Nikkel",
"nylon": "Nylon",
"paper": "Papier",
"plastic": "Plastic",
- "polyethylene": "Polyethyleen",
- "polymer": "Polymeer",
- "polypropylene": "Polypropyleen",
+ "polyester": "Polyester",
"polystyrene": "Polystyreen",
- "pvc": "PVC",
"rubber": "Rubber",
- "titanium": "Titaan",
+ "steel": "Staal",
+ "stone": "Steen",
"wood": "Hout"
+ },
+ "medical": {
+ "bandage": "Verband",
+ "face_mask": "Mondkapje",
+ "gloves": "Handschoenen",
+ "medicine_bottle": "Medicijnfles",
+ "other": "Overig",
+ "pill_pack": "Pillenverpakking",
+ "plaster": "Pleister",
+ "sanitiser": "Ontsmettingsmiddel",
+ "syringe": "Spuit"
+ },
+ "personal_care": {
+ "condom": "Condoom",
+ "condom_wrapper": "Condoomverpakking",
+ "dental_floss": "Tandfloss",
+ "deodorant_can": "Deodorantbus",
+ "ear_swabs": "Wattenstaafjes",
+ "menstrual_cup": "Menstruatiecup",
+ "nappies": "Luiers",
+ "other": "Overig",
+ "sanitary_pad": "Maandverband",
+ "tampon": "Tampon",
+ "toothbrush": "Tandenborstel",
+ "toothpaste_tube": "Tandpastatube",
+ "wipes": "Vochtige Doekjes"
+ },
+ "pets": {
+ "dog_waste": "Hondenpoep",
+ "dog_waste_in_bag": "Hondenpoep in Zakje",
+ "other": "Overig"
+ },
+ "smoking": {
+ "ashtray": "Asbak",
+ "butts": "Sigarettenpeuken",
+ "cigarette_box": "Sigarettenpakje",
+ "cigarette_filter": "Sigarettenfilter",
+ "lighters": "Aanstekers",
+ "match_box": "Luciferdoosje",
+ "other": "Overig",
+ "packaging": "Verpakking",
+ "rolling_papers": "Vloeitjes",
+ "tobacco_pouch": "Tabakszak",
+ "vape_cartridge": "Vape-patroon",
+ "vape_pen": "Vape-pen"
+ },
+ "softdrinks": {
+ "bottle": "Fles",
+ "broken_glass": "Gebroken Glas",
+ "can": "Blikje",
+ "carton": "Karton",
+ "coffee_pod": "Koffiecapsule",
+ "cup": "Beker",
+ "juice_pouch": "Sapzakje",
+ "label": "Etiket",
+ "lid": "Deksel",
+ "other": "Overig",
+ "packaging": "Verpakking",
+ "straw": "Rietje",
+ "straw_wrapper": "Rietjesverpakking"
+ },
+ "types": {
+ "beer": "Bier",
+ "cider": "Cider",
+ "coffee": "Koffie",
+ "energy": "Energie",
+ "iced_tea": "IJsthee",
+ "juice": "Sap",
+ "milk": "Melk",
+ "plant_milk": "Plantenmelk",
+ "smoothie": "Smoothie",
+ "soda": "Frisdrank",
+ "sparkling_water": "Bruiswater",
+ "spirits": "Sterke Drank",
+ "sports": "Sport",
+ "tea": "Thee",
+ "unknown": "Onbekend",
+ "water": "Water",
+ "wine": "Wijn"
+ },
+ "unclassified": {
+ "other": "Overig"
+ },
+ "vehicles": {
+ "battery": "Accu",
+ "bumper": "Bumper",
+ "car_part": "Auto-onderdeel",
+ "license_plate": "Kentekenplaat",
+ "light": "Licht",
+ "mirror": "Spiegel",
+ "other": "Overig",
+ "tyre": "Band",
+ "wheel": "Wiel"
}
}
diff --git a/assets/langs/nl/nl.json b/assets/langs/nl/nl.json
new file mode 100644
index 00000000..438c15df
--- /dev/null
+++ b/assets/langs/nl/nl.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP om een niveau te stijgen",
+ "{{count}}% Next Littercoin": "{{count}}% volgende Littercoin",
+ "{{photos}} selected": "{{photos}} geselecteerd",
+ "Add custom tag": "Aangepaste tag toevoegen",
+ "Add Tag": "Tag toevoegen",
+ "Alert": "Waarschuwing",
+ "Allow Gallery Access": "Galerij-toegang toestaan",
+ "Allow Permissions": "Toestemmingen verlenen",
+ "Already have an account?": "Heb je al een account?",
+ "Apply Filters": "Filters toepassen",
+ "Are you sure you want to delete this image ?": "Weet je zeker dat je deze afbeelding wilt verwijderen?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "Weet je zeker dat je deze foto wilt verwijderen? Dit kan niet ongedaan worden gemaakt.",
+ "Back to Login": "Terug naar Inloggen",
+ "Brands": "Merken",
+ "Camera": "Camera",
+ "Camera Access": "Camera-toegang",
+ "Cancel": "Annuleren",
+ "Clear all": "Alles wissen",
+ "Clear Filters": "Filters wissen",
+ "Climb the leaderboards": "Klim op de ranglijst",
+ "Close": "Sluiten",
+ "Confirm": "Bevestigen",
+ "Copy Link": "Koppeling kopiëren",
+ "Create Account": "Account aanmaken",
+ "Custom Tags": "Aangepaste tags",
+ "Delete": "Verwijderen",
+ "Delete Account": "Account verwijderen",
+ "Delete Image": "Afbeelding verwijderen",
+ "Delete Photo": "Foto verwijderen",
+ "Delete your account": "Je account verwijderen",
+ "Do you really want to change this setting?": "Wil je deze instelling echt wijzigen?",
+ "Done": "Klaar",
+ "Easy": "Makkelijk",
+ "Edit": "Bewerken",
+ "Edit Tags": "Tags bewerken",
+ "Email": "E-mail",
+ "Email Address": "E-mailadres",
+ "Email or Username": "E-mail of gebruikersnaam",
+ "Enable crowdsourced tagging": "Gezamenlijk taggen inschakelen",
+ "Error!": "Fout!",
+ "Failed to update tags. Please try again.": "Tags bijwerken mislukt. Probeer het opnieuw.",
+ "Filter Uploads": "Uploads filteren",
+ "Forgot password?": "Wachtwoord vergeten?",
+ "From": "Van",
+ "Fun": "Leuk",
+ "Geotagged": "Geotagged",
+ "Get Started!": "Begin!",
+ "Global Data": "Wereldwijde gegevens",
+ "Go Back": "Terug",
+ "Good": "Goed",
+ "Just tag litter and upload it": "Tag zwerfvuil en upload het",
+ "Leaderboard": "Ranglijst",
+ "Level": "Niveau",
+ "Link Copied": "Link gekopieerd",
+ "Litter is picked up": "Afval wordt opgeruimd",
+ "Litter Status": "Afvalstatus",
+ "Littercoin": "Littercoin",
+ "Location Access": "Locatietoegang",
+ "Log In": "Inloggen",
+ "Logout": "Uitloggen",
+ "Map": "Kaart",
+ "Materials": "Materialen",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Moet alfanumeriek zijn, 8-20 tekens, geen spaties",
+ "MY ACCOUNT": "MIJN ACCOUNT",
+ "My Uploads": "Mijn uploads",
+ "Name": "Naam",
+ "Name should be between 3-20 characters": "Naam moet tussen 3-20 tekens zijn",
+ "New Today": "Nieuw vandaag",
+ "New Version Available": "Nieuwe versie beschikbaar",
+ "Next": "Volgende",
+ "Next Target\n{{count}} Litter": "Volgend doel\n{{count}} Afval",
+ "No geotagged photos found": "Geen foto's met geolocatie gevonden",
+ "No images to upload": "Geen afbeeldingen om te uploaden",
+ "No matching uploads": "Geen overeenkomende uploads",
+ "No uploads yet": "Nog geen uploads",
+ "Not now, Later": "Niet nu, later",
+ "Not picked up": "Niet opgeruimd",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Alleen foto's met geolocatie kunnen worden geselecteerd",
+ "Open Source": "Open Source",
+ "found without GPS data": "gevonden zonder GPS-gegevens",
+ "no GPS data and cannot be uploaded": "geen GPS-gegevens en kunnen niet worden geüpload",
+ "or": "of",
+ "photo": "foto",
+ "photo has": "foto heeft",
+ "photos": "foto's",
+ "photos have": "foto's hebben",
+ "Password": "Wachtwoord",
+ "Password must be at least 6 characters": "Wachtwoord moet minimaal 6 tekens bevatten",
+ "Photos": "Foto's",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "Foto's hebben GPS-gegevens nodig om te uploaden. Zorg ervoor dat Locatieservices zijn ingeschakeld bij het maken van foto's.",
+ "Picked up": "Opgeruimd",
+ "Picked Up": "Opgeruimd",
+ "Please add at least one tag before saving.": "Voeg ten minste één tag toe voordat u opslaat.",
+ "Please enter a name": "Voer een naam in",
+ "Please enter a password": "Voer een wachtwoord in",
+ "Please enter a username": "Voer een gebruikersnaam in",
+ "Please enter a valid url": "Voer een geldige URL in",
+ "Please enter an email address": "Voer een e-mailadres in",
+ "Please enter your email or username": "Voer je e-mail of gebruikersnaam in",
+ "Please Give Permissions": "Geef toestemmingen, alsjeblieft",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Geef ons toegang tot je galerij om geotagged afbeeldingen van je apparaat te uploaden",
+ "Please update the app for an improved experience": "Werk de app bij voor een betere ervaring",
+ "Please wait while your photos upload": "Wacht even terwijl je foto's worden geüpload",
+ "Press Upload": "Druk op Uploaden",
+ "PRIVACY": "PRIVACY",
+ "Quantity": "Aantal",
+ "Rank": "Rang",
+ "Save": "Opslaan",
+ "Search brands": "Merken zoeken",
+ "Search by custom tag": "Zoeken op aangepaste tag",
+ "Search by tag name": "Zoeken op tagnaam",
+ "Search materials": "Zoek materialen",
+ "Select a photo": "Selecteer een foto",
+ "Select the images you want to delete": "Selecteer de afbeeldingen die je wilt verwijderen",
+ "Send Reset Link": "Resetlink verzenden",
+ "Settings": "Instellingen",
+ "Short": "Kort",
+ "Show Name on Created By": "Naam tonen bij Gemaakt door",
+ "Show Name on Leaderboards": "Naam tonen op ranglijst",
+ "Show Name on Maps": "Naam tonen op kaarten",
+ "Show on Map": "Tonen op kaart",
+ "Show Previous Tags": "Vorige tags tonen",
+ "Show Username on Created By": "Gebruikersnaam tonen bij Gemaakt door",
+ "Show Username on Leaderboards": "Gebruikersnaam tonen op ranglijst",
+ "Show Username on Maps": "Gebruikersnaam tonen op kaarten",
+ "Social Accounts": "Sociale accounts",
+ "Some tags failed to upload. You can retry from your uploads.": "Sommige tags konden niet worden geüpload. Je kunt het opnieuw proberen via je uploads.",
+ "Start photographing litter to see your uploads here": "Fotografeer zwerfvuil om je uploads hier te zien",
+ "Strong": "Sterk",
+ "Success!": "Succes!",
+ "Suggested Tags: {{count}}": "Voorgestelde tags: {{count}}",
+ "Tag already added": "Tag al toegevoegd",
+ "Tag can be a maximum of 100 characters": "Tag mag maximaal 100 tekens bevatten",
+ "Tag needs to be at least 3 characters long": "Tag moet minimaal 3 tekens lang zijn",
+ "Tagged": "Getagd",
+ "TAGGING": "TAGGEN",
+ "Tags": "Tags",
+ "TAGS": "TAGS",
+ "tags": "tags",
+ "Take a photo and select it from the gallery": "Maak een foto of kies er een uit de galerij",
+ "Thank you!!!": "Dank je!!!",
+ "The Litter has been picked up": "Het afval is opgeruimd",
+ "The Litter is still there": "Het afval ligt er nog",
+ "The link has been copied to your clipboard.": "De link is naar het klembord gekopieerd.",
+ "The login details are incorrect": "De inloggegevens zijn onjuist",
+ "This is not a valid email address": "Dit is geen geldig e-mailadres",
+ "This photo has no location data": "Deze foto heeft geen locatiegegevens",
+ "This Month": "Deze maand",
+ "This Week": "Deze week",
+ "To": "Tot",
+ "To capture litter images from app camera": "Om afvalfotos te maken met de app-camera",
+ "To get exact geolocation of where the litter is": "Om de exacte locatie van het afval te bepalen",
+ "To Tag": "Te taggen",
+ "Today": "Vandaag",
+ "Total Littercoin": "Totaal Littercoin",
+ "Total People": "Totaal personen",
+ "Total Photos": "Totaal foto's",
+ "Total Tags": "Totaal tags",
+ "Total Users": "Totaal gebruikers",
+ "Type to suggest tags": "Typ om tags voor te stellen",
+ "UN Digital Public Good": "Digitaal publiek goed van de VN",
+ "Unique Username": "Unieke gebruikersnaam",
+ "Untagged": "Niet getagd",
+ "Update Now": "Nu bijwerken",
+ "Update Tags": "Tags bijwerken",
+ "Upload": "Uploaden",
+ "Username": "Gebruikersnaam",
+ "Username should be between 3-20 characters": "Gebruikersnaam moet tussen 3-20 tekens zijn",
+ "Username should not be equal to password": "Gebruikersnaam mag niet gelijk zijn aan het wachtwoord",
+ "Value not updated": "Waarde niet bijgewerkt",
+ "Value updated": "Waarde bijgewerkt",
+ "Warning": "Waarschuwing",
+ "Welcome": "Welkom",
+ "XP": "XP",
+ "Yes, Delete": "Ja, verwijderen",
+ "You can upload up to 10 custom tags.": "Je kunt maximaal 10 aangepaste tags uploaden.",
+ "You have tagged {{count}} photos": "Je hebt {{count}} foto's getagd",
+ "You have uploaded {{count}} photos": "Je hebt {{count}} foto('s) geüpload",
+ "Your password did not match": "Je wachtwoord komt niet overeen"
+}
diff --git a/assets/langs/nl/permission.json b/assets/langs/nl/permission.json
deleted file mode 100644
index d75936e4..00000000
--- a/assets/langs/nl/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Toegang tot galerij toestaan",
- "allow-permission": "Machtigingen toestaan",
- "camera-access": "Cameratoegang",
- "camera-access-body": "Om nestfoto's van de app-camera vast te leggen",
- "gallery-body": "Geef ons alstublieft toegang tot uw galerij, wat vereist is als u afbeeldingen met geotags uit de galerij wilt uploaden",
- "location-access": "Locatietoegang",
- "location-body": "Om de exacte geolocatie te krijgen van waar het nest is",
- "new-version": "Nieuwe versie beschikbaar",
- "not-now": "Niet nu later",
- "please-give-permissions": "Geef alstublieft toestemming",
- "please-update-app": "Werk de app bij voor een verbeterde ervaring",
- "update-now": "Update nu"
-}
diff --git a/assets/langs/nl/settings.json b/assets/langs/nl/settings.json
deleted file mode 100644
index 65218409..00000000
--- a/assets/langs/nl/settings.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "settings": "Instellingen",
- "my-account": "MIJN ACCOUNT",
- "name": "Naam",
- "username": "Gebruikersnaam",
- "email": "Email",
- "privacy": "PRIVACY",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "Toon naam op kaarten",
- "show-username-maps": "Toon gebruikersnaam op kaarten",
- "show-name-leaderboards": "Toon naam op Scoreboards",
- "show-username-leaderboards": "Toon gebruikersnaam op Scoreboards",
- "show-name-createdby": "Toon naam bij Gemaakt Door",
- "show-username-createdby": "Toon gebruikersnaam bij Gemaakt Door",
- "tags": "TAGS",
- "show-previous-tags": "Toon vorige Tags",
- "logout": "Uitloggen",
- "success": "Succes!",
- "error": "Fout!",
- "value-not-updated": "Waarde niet bijgewerkt",
- "value-updated": "Waarde bijgewerkt",
- "go-back": "Ga terug",
- "edit": "Bewerken",
- "save": "Opslaan",
- "alert": "Waarschuwing",
- "do-you-really-want-to-change": "Wil je deze instelling echt wijzigen?",
- "ok": "OK",
- "cancel": "Annuleren",
- "picked-up": "Opgehaald",
- "litter-picked-up": "Zwerfvuil wordt opgehaald",
- "enter-email": "Please enter an email address",
- "enter-username": "Please enter a username",
- "enter-name": "Please enter a name",
- "name-min-max": "Name should be between 3-20 characters",
- "username-min-max": "Username should be between 3-20 characters",
- "url-not-valid": "Please enter a valid url"
-}
diff --git a/assets/langs/nl/stats.json b/assets/langs/nl/stats.json
deleted file mode 100644
index fa8bec66..00000000
--- a/assets/langs/nl/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Wereldwijde gegevens",
- "next-target": "Volgende doel\n{{count}} Afval",
- "total-litter": "Totaal afval",
- "total-photos": "Totaal aantal foto's",
- "total-users": "Totaal aantal gebruikers",
- "total-littercoin": "Totaal Littercoin"
-}
diff --git a/assets/langs/nl/tag.json b/assets/langs/nl/tag.json
deleted file mode 100644
index f99e3bc6..00000000
--- a/assets/langs/nl/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Voeg Tag toe",
- "confirm": "Bevestig",
- "type-to-suggest": "Tik om Tags voor te stellen",
- "suggested-tags": "Voorgestelde Tags {{count}}",
- "alert": "Waarschuwing",
- "still-there": "Het afval ligt er nog",
- "picked-up": "Het afval is opgeraapt",
- "litter-status": "Neststatus",
- "picked-thumb": "Opgehaald 👍🏻",
- "not-picked-thumb": "Niet opgehaald 👎🏻",
- "delete-message": "Weet je zeker dat je deze afbeelding wilt verwijderen?",
- "cancel": "Annuleren",
- "delete": "Ja, verwijderen",
- "custom-tags": "Aangepaste Tags",
- "custom-tags-min": "Tag moet minimaal 3 tekens lang zijn",
- "custom-tags-max": "Tag mag maximaal 100 tekens bevatten",
- "tag-already-added": "Tag al toegevoegd.",
- "tag-limit-reached": "U kunt maximaal 3 aangepaste tags uploaden.",
- "delete-image": "\uD83D\uDEAE Afbeelding verwijderen"
-}
diff --git a/assets/langs/nl/user.json b/assets/langs/nl/user.json
deleted file mode 100644
index c0004b03..00000000
--- a/assets/langs/nl/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Peil",
- "level-up": "{{count}} XP om een niveau omhoog te gaan",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Volgende Littercoin",
- "photos": "Foto's",
- "rank": "Rang",
- "tags": "Tags",
- "welcome": "Welkom",
- "XP": "XP"
-}
diff --git a/assets/langs/nl/welcome.json b/assets/langs/nl/welcome.json
deleted file mode 100644
index 51f23b42..00000000
--- a/assets/langs/nl/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "Het is ",
- "easy": "SIMPEL!",
- "just-tag-and-upload": "Geef een Tag en uploaden maar",
- "fun": "LOL!",
- "climb-leaderboards": "Zet jezelf op het scoreboard van de #LitterWorldCup",
- "open": "OPEN!",
- "open-database": "Help ons 's werelds meest geavanceerde open database over zwerfvuil en plasticvervuiling te creëren",
- "get-started": "Begin!",
- "already-have-account": "Heb je al een account? Log in"
-}
diff --git a/assets/langs/pt/auth.json b/assets/langs/pt/auth.json
deleted file mode 100644
index 0d2274bd..00000000
--- a/assets/langs/pt/auth.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "email-address": "Endereço de email",
- "password": "Senha",
- "unique-username": "Nome de usuário único",
- "create-account": "Criar conta",
- "or": "ou",
- "already-have": "Já possui uma conta?",
- "forgot-password": "Esqueceu a senha?",
- "login": "Entrar",
- "back-to-login": "Voltar ao Login",
- "enter-email": "Por favor insira um endereço de email",
- "enter-password": "Por favor insira a senha",
- "enter-username": "Por favor insira o nome de usuário",
- "must-contain": "Deve conter 1 caractere MAIÚSCULO, 1 dígito/número e mais 6 caracteres",
- "alphanumeric-username": "Deve secombinar letras e números, 8-20 caracteres, sem espaços ",
- "email-not-valid": "Este não é um e-mail válido",
- "invalid-credentials": "Os detalhes de login estão incorretos"
-}
diff --git a/assets/langs/pt/index.js b/assets/langs/pt/index.js
index 1fcb7dfc..5964a267 100644
--- a/assets/langs/pt/index.js
+++ b/assets/langs/pt/index.js
@@ -1,21 +1,7 @@
-import auth from './auth.json';
-import leftpage from './leftpage.json';
+import translations from './pt.json';
import litter from './litter.json';
-import permission from './permission.json';
-import settings from './settings.json';
-import stats from './stats.json';
-import tag from './tag.json';
-import user from './user.json';
-import welcome from './welcome.json';
export const pt = {
- auth,
- leftpage,
- litter,
- permission,
- settings,
- stats,
- tag,
- user,
- welcome
+ ...translations,
+ litter
};
diff --git a/assets/langs/pt/leftpage.json b/assets/langs/pt/leftpage.json
deleted file mode 100644
index 46c4d4be..00000000
--- a/assets/langs/pt/leftpage.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "photos": "Fotos",
- "geotagged": "Localização",
- "cancel": "Cancelar",
- "done": "Feito",
- "next": "Próximo",
- "upload": "Enviar",
- "select-a-photo": "Selecionar foto",
- "delete": "Apagar",
- "selected": "{{photos}} Selecionada",
- "press-upload": "Pressione Enviar",
- "select-to-delete": "Selecione as imagens que deseja excluir",
- "please-wait-uploading": "Por favor, aguarde enquanto suas fotos estão sendo enviadas",
- "thank-you": "Obrigada!!!",
- "you-have-uploaded": "Você enviou {{count}} fotos",
- "you-have-tagged": "Você colocou tags em {{count}} fotos",
- "close": "Fechar",
- "take-photo": "Tire uma foto ou selecione da galeria",
- "no-images": "Sem imagens para fazer upload",
- "camera": "Câmera",
- "leaderboard": "Classificação"
-}
diff --git a/assets/langs/pt/litter.json b/assets/langs/pt/litter.json
index 2cfcd21e..c31365c6 100644
--- a/assets/langs/pt/litter.json
+++ b/assets/langs/pt/litter.json
@@ -1,301 +1,206 @@
{
"categories": {
- "alcohol": "Bebidas alcoólicas",
- "art": "Arte",
- "brands": "Marcas",
- "coastal": "Região costeira/praia",
- "coffee": "Café",
- "dumping": "Despejo",
+ "alcohol": "Bebidas Alcoólicas",
+ "electronics": "Eletrônicos",
"food": "Comida",
"industrial": "Industrial",
- "material": "Material",
- "other": "Outros",
- "sanitary": "Sanitária",
- "softdrinks": "Refrigerantes",
+ "marine": "Marítimo",
+ "medical": "Médico",
+ "personal_care": "Cuidados Pessoais",
+ "pets": "Animais de Estimação",
"smoking": "Fumo",
- "custom-tag": "Etiquetas Personalizadas"
- },
- "smoking": {
- "butts": "Cigarro/Bitucas/Pontas",
- "lighters": "Isqueiro",
- "cigaretteBox": "Caixa de cigarro",
- "tobaccoPouch": "Bolsa para guardar fumo",
- "skins": "Papel de fumo",
- "smoking_plastic": "Embalagem plástica de fumo",
- "filters": "Filtro",
- "filterbox": "Caixa de filtros",
- "smokingOther": "Outros associados ao fumo",
- "vape_pen": "Vaper eletrônico",
- "vape_oil": "Vaper-óleo"
+ "softdrinks": "Refrigerantes",
+ "unclassified": "Não Classificado",
+ "vehicles": "Veículos"
},
"alcohol": {
- "beerBottle": "Garrafa de cerveja",
- "spiritBottle": "Garrafa de licor",
- "wineBottle": "Garrafa de vinho",
- "beerCan": "Lata de cerveja",
- "brokenGlass": "Pedaços de vidro",
- "bottleTops": "Tampa de garrafa de cerveja",
- "paperCardAlcoholPackaging": "Embalagem de bebida(papel)",
- "plasticAlcoholPackaging": " Embalagem de bebida(plástico)",
- "alcoholOther": "Outros associados a bebidas",
- "pint": "Copo de cerveja",
- "six_pack_rings": "anéis agrupadores de latas",
- "alcohol_plastic_cups": "Copos de plástico"
+ "bottle": "Garrafa",
+ "bottle_cap": "Tampa de Garrafa",
+ "broken_glass": "Vidro Quebrado",
+ "can": "Lata",
+ "cup": "Copo",
+ "other": "Outro",
+ "packaging": "Embalagem",
+ "pint_glass": "Copo de Cerveja",
+ "pull_ring": "Anel de Puxar",
+ "shot_glass": "Copo de Dose",
+ "six_pack_rings": "Anéis de Six-Pack",
+ "wine_glass": "Taça de Vinho"
},
- "coffee": {
- "coffeeCups": "Copinho de café",
- "coffeeLids": "Tampa de copo de café",
- "coffeeOther": "Outros itens associados ao café"
+ "electronics": {
+ "battery": "Bateria",
+ "cable": "Cabo",
+ "charger": "Carregador",
+ "headphones": "Fones de Ouvido",
+ "other": "Outro",
+ "phone": "Telefone"
},
"food": {
- "sweetWrappers": "Embalagens de doce",
- "paperFoodPackaging": "Embalagens alimentícias de papel",
- "plasticFoodPackaging": "Embalagens alimentícias de plástico",
- "plasticCutlery": "Talheres plásticos",
- "crisp_small": "Embalagem de salgadinho(pequenas)",
- "crisp_large": " Embalagem de salgadinho(Grande)",
- "styrofoam_plate": "Prato de isopor",
+ "bag": "Sacola",
+ "box": "Caixa",
+ "can": "Lata",
+ "crisp_packet": "Pacote de Salgadinho",
+ "cutlery": "Talheres",
+ "gum": "Goma de Mascar",
+ "jar": "Pote",
+ "lid": "Tampa",
"napkins": "Guardanapos",
- "sauce_packet": "Sachê de molho (ketchup, mostarda, maionese) ",
- "glass_jar": "Pote de vidro",
- "glass_jar_lid": "Tampa de pote de vidro",
- "pizza_box": "Caixa de pizza",
- "aluminium_foil": "Folha de alumínio",
- "chewing_gum": "Goma de mascar",
- "foodOther": "Outros itens relacionados a alimentos"
- },
- "softdrinks": {
- "waterBottle": "Garrafinha de água",
- "fizzyDrinkBottle": "Garrafas plásticas de refrigerante",
- "tinCan": "Lata de refrigerante",
- "bottleLid": "Tampinha de garrafa",
- "bottleLabel": "Lacre de garrafa",
- "sportsDrink": "Garrafa de bebidas esportivas",
- "straws": "Canudinho",
- "plastic_cups": "Copo plástico",
- "plastic_cup_tops": "Tampa de copo plástico",
- "milk_bottle": "Garrafa de leite",
- "milk_carton": "Caixa de leite",
- "paper_cups": "Copo de papel",
- "juice_cartons": "Caixa de suco",
- "juice_bottles": "Garrafa de suco",
- "juice_packet": "Embalagem de suco",
- "ice_tea_bottles": "Garrafa de Chá gelado",
- "ice_tea_can": "Lata de chá gelado",
- "energy_can": "Lata de energético",
- "pullring": "Lacre da latinha",
- "strawpacket": "Embalagem de canudinho",
- "styro_cup": "Copo de isopor",
- "softDrinkOther": "Outros itens associados a refrigerantes"
- },
- "sanitary": {
- "gloves": "Luvas",
- "facemask": "Máscaras",
- "condoms": "Preservativo/Camisinha",
- "nappies": "Fraldas",
- "menstral": "Absorvente higiênicos",
- "deodorant": "Desodorante",
- "ear_swabs": "Cotonetes",
- "tooth_pick": "Palito de dente",
- "tooth_brush": "Escova de dente",
- "wetwipes": "Lenço umedecido",
- "hand_sanitiser": "Sanitizante para as mãos/ álcool gel",
- "sanitaryOther": " Outros itens associados a sanitários"
- },
- "other": {
- "dogshit": "Cocô de cachorro",
- "pooinbag": " Cocô de cachorro na sacola",
- "automobile": "Automóveis",
- "clothing": "roupas/Vestimentas",
- "traffic_cone": "Cone de sinalização",
- "life_buoy": "Boia salva vidas",
- "plastic": "Plástico não identificado",
- "dump": "Despejo irregular",
- "metal": "Objetos de metal",
- "plastic_bags": "Sacola plástica",
- "election_posters": "Cartazes eleitorais",
- "forsale_posters": "Cartazes de vendas",
- "books": "Livros",
- "magazine": "Revistas",
- "paper": "Papel",
- "stationary": "Materiais de papelaria",
- "washing_up": "Embalagem de detergente",
- "hair_tie": "Prendedor de cabelo",
- "ear_plugs": "Fone de ouvido",
- "batteries": "Bateria",
- "elec_small": "Eletrônicos pequenos",
- "elec_large": " Eletrônicos grandes",
- "other": "Outros",
- "random_litter": "Lixo aleatório/sem identificação"
- },
- "dumping": {
- "small": "Pequeno",
- "medium": "Médio",
- "large": "Grande"
+ "other": "Outro",
+ "packaging": "Embalagem",
+ "packet": "Pacote",
+ "pizza_box": "Caixa de Pizza",
+ "plate": "Prato",
+ "tinfoil": "Papel Alumínio",
+ "wrapper": "Embalagem de Alimento"
},
"industrial": {
- "oil": "Óleo",
- "industrial_plastic": "Plástico",
- "chemical": "Químicos",
- "bricks": "Tijolo",
+ "bricks": "Tijolos",
+ "chemical_container": "Recipiente de Produtos Químicos",
+ "construction": "Construção",
+ "container": "Contêiner",
+ "dumping_large": "Despejo (Grande)",
+ "dumping_medium": "Despejo (Médio)",
+ "dumping_small": "Despejo (Pequeno)",
+ "oil_container": "Recipiente de Óleo",
+ "oil_drum": "Tambor de Óleo",
+ "other": "Outro",
+ "pallet": "Palete",
+ "pipe": "Cano",
"tape": "Fita",
- "industrial_other": " Outros itens associados a indústrias"
+ "wire": "Arame"
},
- "coastal": {
+ "marine": {
+ "buoy": "Boia",
+ "crate": "Caixote",
+ "fishing_net": "Rede de Pesca",
+ "macroplastics": "Macroplásticos",
"microplastics": "Microplásticos",
- "mediumplastics": "Plasticos médios",
- "macroplastics": "Plasticos grandes",
- "rope_small": "Corda (pequena)",
- "rope_medium": " Corda (média)",
- "rope_large": " Corda (grande)",
- "fishing_gear_nets": "Petrechos de pesca/redes",
- "buoys": "Bóias",
- "degraded_plasticbottle": "Garrafa plástica degradada",
- "degraded_plasticbag": "Sacola plástica degradada",
- "degraded_straws": "Canudinho degradado",
- "degraded_lighters": "Isqueiro degradado",
- "balloons": "Balões/ Bexigas de festa",
- "lego": "Lego",
- "shotgun_cartridges": " Cartuchos de espingarda",
- "styro_small": "Pedaço de isopor (pequeno)",
- "styro_medium": " Pedaço de isopor (médio)",
- "styro_large": " Pedaço de isopor (grande)",
- "coastal_other": " Outros itens associados a Costa"
- },
- "brands": {
- "aadrink": "AA Drink",
- "adidas": "Adidas",
- "albertheijn": "AlbertHeijn",
- "aldi": "Aldi",
- "amazon": "Amazon",
- "amstel": "Amstel",
- "apple": "Apple",
- "applegreen": "Applegreen",
- "asahi": "Asahi",
- "avoca": "Avoca",
- "bacardi": "Bacardi",
- "ballygowan": "Ballygowan",
- "bewleys": "Bewleys",
- "brambles": "Brambles",
- "budweiser": "Budweiser",
- "bulmers": "Bulmers",
- "bullit": "Bullit",
- "burgerking": "Burgerking",
- "butlers": "Butlers",
- "cadburys": "Cadburys",
- "cafenero": "Cafenero",
- "camel": "Camel",
- "caprisun": "Capri Sun",
- "carlsberg": "Carlsberg",
- "centra": "Centra",
- "circlek": "Circlek",
- "coke": "Coca-Cola",
- "coles": "Coles",
- "colgate": "Colgate",
- "corona": "Corona",
- "costa": "Costa",
- "doritos": "Doritos",
- "drpepper": "DrPepper",
- "dunnes": "Dunnes",
- "duracell": "Duracell",
- "durex": "Durex",
- "esquires": "Esquires",
- "evian": "Evian",
- "fanta": "Fanta",
- "fernandes": "Fernandes",
- "fosters": "Fosters",
- "frank_and_honest": "Frank-and-Honest",
- "fritolay": "Frito-Lay",
- "gatorade": "Gatorade",
- "gillette": "Gillette",
- "goldenpower": "Golden Power",
- "guinness": "Guinness",
- "haribo": "Haribo",
- "heineken": "Heineken",
- "hertog_jan": "Hertog Jan",
- "insomnia": "Insomnia",
- "kellogs": "Kellogs",
- "kfc": "KFC",
- "lavish": "Lavish",
- "lego": "Lego",
- "lidl": "Lidl",
- "lindenvillage": "Lindenvillage",
- "lipton": "Lipton",
- "lolly_and_cookes": "Lolly-and-cookes",
- "loreal": "Loreal",
- "lucozade": "Lucozade",
- "marlboro": "Marlboro",
- "mars": "Mars",
- "mcdonalds": "McDonalds",
- "monster": "Monster",
- "nero": "Nero",
- "nescafe": "Nescafe",
- "nestle": "Nestle",
- "nike": "Nike",
- "obriens": "O-Briens",
- "pepsi": "Pepsi",
- "powerade": "Powerade",
- "redbull": "Redbull",
- "ribena": "Ribena",
- "sainsburys": "Sainsburys",
- "samsung": "Samsung",
- "schutters": "Schutters",
- "slammers": "Slammers",
- "spa": "Spa",
- "spar": "Spar",
- "starbucks": "Starbucks",
- "stella": "Stella",
- "subway": "Subway",
- "supermacs": "Supermacs",
- "supervalu": "Supervalu",
- "tayto": "Tayto",
- "tesco": "Tesco",
- "thins": "Thins",
- "tim_hortons": "Tim Hortons",
- "volvic": "Volvic",
- "waitrose": "Waitrose",
- "walkers": "Walkers",
- "wendys": "Wendy's",
- "wilde_and_greene": "Wilde-and-Greene",
- "woolworths": "Woolworths",
- "wrigleys": "Wrigleys"
- },
- "presence": {
- "picked-up": "O lixo foi recolhido!",
- "still-there": "O lixo ainda está lá!"
+ "other": "Outro",
+ "rope": "Corda",
+ "shotgun_cartridge": "Cartucho de Espingarda",
+ "styrofoam": "Isopor"
},
- "tags": {
- "type-to-suggest": "Digite para sugerir Tags",
- "suggested": "Tags sugeridas {{count}}"
- },
- "dogshit": {
- "poo": "Surpresa!",
- "poo_in_bag": "Surpresa em uma bolsa!"
- },
- "material": {
+ "materials": {
"aluminium": "Alumínio",
- "bronze": "Bronze",
- "carbon_fiber": "Fibra de carbono",
+ "asphalt": "Asfalto",
+ "bamboo": "Bambu",
+ "bioplastic": "Bioplástico",
+ "cardboard": "Papelão",
"ceramic": "Cerâmica",
- "composite": "Composto",
+ "clay": "Argila",
+ "cloth": "Tecido",
"concrete": "Concreto",
"copper": "Cobre",
- "fiberglass": "Fibra de vidro",
+ "cork": "Cortiça",
+ "cotton": "Algodão",
+ "elastic": "Elástico",
+ "fiberglass": "Fibra de Vidro",
+ "foam": "Espuma",
+ "foil": "Folha de Alumínio",
"glass": "Vidro",
- "iron_or_steel": "Ferro/Aço",
"latex": "Látex",
"metal": "Metal",
- "nickel": "Níquel",
"nylon": "Nylon",
"paper": "Papel",
"plastic": "Plástico",
- "polyethylene": "Polietileno",
- "polymer": "Polímero",
- "polypropylene": "Polipropileno",
+ "polyester": "Poliéster",
"polystyrene": "Poliestireno",
- "pvc": "PVC",
"rubber": "Borracha",
- "titanium": "Titânio",
+ "steel": "Aço",
+ "stone": "Pedra",
"wood": "Madeira"
+ },
+ "medical": {
+ "bandage": "Bandagem",
+ "face_mask": "Máscara Facial",
+ "gloves": "Luvas",
+ "medicine_bottle": "Frasco de Remédio",
+ "other": "Outro",
+ "pill_pack": "Cartela de Comprimidos",
+ "plaster": "Curativo Adesivo",
+ "sanitiser": "Álcool em Gel",
+ "syringe": "Seringa"
+ },
+ "personal_care": {
+ "condom": "Preservativo",
+ "condom_wrapper": "Embalagem de Preservativo",
+ "dental_floss": "Fio Dental",
+ "deodorant_can": "Lata de Desodorante",
+ "ear_swabs": "Cotonetes",
+ "menstrual_cup": "Copo Menstrual",
+ "nappies": "Fraldas",
+ "other": "Outro",
+ "sanitary_pad": "Absorvente Higiênico",
+ "tampon": "Absorvente Interno",
+ "toothbrush": "Escova de Dente",
+ "toothpaste_tube": "Tubo de Pasta de Dente",
+ "wipes": "Lenços Umedecidos"
+ },
+ "pets": {
+ "dog_waste": "Fezes de Cachorro",
+ "dog_waste_in_bag": "Fezes de Cachorro em Sacola",
+ "other": "Outro"
+ },
+ "smoking": {
+ "ashtray": "Cinzeiro",
+ "butts": "Bitucas de Cigarro",
+ "cigarette_box": "Caixa de Cigarro",
+ "cigarette_filter": "Filtro de Cigarro",
+ "lighters": "Isqueiros",
+ "match_box": "Caixa de Fósforos",
+ "other": "Outro",
+ "packaging": "Embalagem",
+ "rolling_papers": "Papel de Seda",
+ "tobacco_pouch": "Bolsa de Tabaco",
+ "vape_cartridge": "Cartucho de Vape",
+ "vape_pen": "Vape"
+ },
+ "softdrinks": {
+ "bottle": "Garrafa",
+ "broken_glass": "Vidro Quebrado",
+ "can": "Lata",
+ "carton": "Caixa de Papelão",
+ "coffee_pod": "Cápsula de Café",
+ "cup": "Copo",
+ "juice_pouch": "Saquinho de Suco",
+ "label": "Rótulo",
+ "lid": "Tampa",
+ "other": "Outro",
+ "packaging": "Embalagem",
+ "straw": "Canudo",
+ "straw_wrapper": "Embalagem de Canudo"
+ },
+ "types": {
+ "beer": "Cerveja",
+ "cider": "Cidra",
+ "coffee": "Café",
+ "energy": "Energético",
+ "iced_tea": "Chá Gelado",
+ "juice": "Suco",
+ "milk": "Leite",
+ "plant_milk": "Leite Vegetal",
+ "smoothie": "Vitamina",
+ "soda": "Refrigerante",
+ "sparkling_water": "Água com Gás",
+ "spirits": "Destilados",
+ "sports": "Esportivo",
+ "tea": "Chá",
+ "unknown": "Desconhecido",
+ "water": "Água",
+ "wine": "Vinho"
+ },
+ "unclassified": {
+ "other": "Outro"
+ },
+ "vehicles": {
+ "battery": "Bateria",
+ "bumper": "Para-choque",
+ "car_part": "Peça de Carro",
+ "license_plate": "Placa de Veículo",
+ "light": "Farol",
+ "mirror": "Espelho",
+ "other": "Outro",
+ "tyre": "Pneu",
+ "wheel": "Roda"
}
}
diff --git a/assets/langs/pt/permission.json b/assets/langs/pt/permission.json
deleted file mode 100644
index ca42b06e..00000000
--- a/assets/langs/pt/permission.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "allow-gallery-access": "Permitir acesso à galeria",
- "allow-permission": "Permitir permissões",
- "camera-access": "Acesso à câmera",
- "camera-access-body": "Para capturar imagens de lixo da câmera do aplicativo",
- "gallery-body": "Forneça-nos acesso à sua galeria, que é necessário se você quiser fazer upload de imagens com geo-tag da galeria",
- "location-access": "Acesso de localização",
- "location-body": "Para obter geolocalização exata de onde o lixo está",
- "new-version": "Nova versão disponível",
- "not-now": "Não agora, mais tarde",
- "please-give-permissions": "Por favor, dê permissões",
- "please-update-app": "Atualize o aplicativo para uma experiência aprimorada",
- "update-now": "Atualize agora"
-}
diff --git a/assets/langs/pt/pt.json b/assets/langs/pt/pt.json
new file mode 100644
index 00000000..aa6fed37
--- /dev/null
+++ b/assets/langs/pt/pt.json
@@ -0,0 +1,182 @@
+{
+ "{{count}} XP to level up": "{{count}} XP para subir de nível",
+ "{{count}}% Next Littercoin": "{{count}}% próximo Littercoin",
+ "{{photos}} selected": "{{photos}} selecionada(s)",
+ "Add custom tag": "Adicionar etiqueta personalizada",
+ "Add Tag": "Adicionar etiqueta",
+ "Alert": "Alerta",
+ "Allow Gallery Access": "Permitir acesso à galeria",
+ "Allow Permissions": "Permitir permissões",
+ "Already have an account?": "Já possui uma conta?",
+ "Apply Filters": "Aplicar filtros",
+ "Are you sure you want to delete this image ?": "Tem certeza de que deseja excluir esta imagem?",
+ "Are you sure you want to delete this photo? This cannot be undone.": "Tem certeza de que deseja excluir esta foto? Isso não pode ser desfeito.",
+ "Back to Login": "Voltar ao Login",
+ "Brands": "Marcas",
+ "Camera": "Câmera",
+ "Camera Access": "Acesso à câmera",
+ "Cancel": "Cancelar",
+ "Clear all": "Limpar tudo",
+ "Clear Filters": "Limpar filtros",
+ "Climb the leaderboards": "Suba nas classificações",
+ "Close": "Fechar",
+ "Confirm": "Confirmar",
+ "Copy Link": "Copiar link",
+ "Create Account": "Criar conta",
+ "Custom Tags": "Etiquetas personalizadas",
+ "Delete": "Excluir",
+ "Delete Account": "Excluir conta",
+ "Delete Image": "Excluir imagem",
+ "Delete Photo": "Excluir foto",
+ "Delete your account": "Excluir sua conta",
+ "Do you really want to change this setting?": "Você realmente deseja alterar esta configuração?",
+ "Done": "Feito",
+ "Easy": "Fácil",
+ "Edit": "Editar",
+ "Edit Tags": "Editar tags",
+ "Email": "E-mail",
+ "Email Address": "Endereço de e-mail",
+ "Email or Username": "E-mail ou nome de usuário",
+ "Enable crowdsourced tagging": "Ativar etiquetagem colaborativa",
+ "Error!": "Erro!",
+ "Failed to update tags. Please try again.": "Falha ao atualizar tags. Por favor, tente novamente.",
+ "Filter Uploads": "Filtrar envios",
+ "Forgot password?": "Esqueceu a senha?",
+ "From": "De",
+ "Fun": "Divertido",
+ "Geotagged": "Geolocalizado",
+ "Get Started!": "Comece!",
+ "Global Data": "Dados Globais",
+ "Go Back": "Voltar",
+ "Good": "Boa",
+ "Just tag litter and upload it": "Etiquete o lixo e envie",
+ "Leaderboard": "Classificação",
+ "Level": "Nível",
+ "Link Copied": "Link copiado",
+ "Litter is picked up": "O lixo é coletado",
+ "Litter Status": "Status do lixo",
+ "Littercoin": "Littercoin",
+ "Location Access": "Acesso à localização",
+ "Log In": "Entrar",
+ "Logout": "Sair",
+ "Map": "Mapa",
+ "Materials": "Materiais",
+ "Must be alphanumeric, 8-20 characters, no spaces": "Deve ser alfanumérico, 8-20 caracteres, sem espaços",
+ "MY ACCOUNT": "MINHA CONTA",
+ "My Uploads": "Meus uploads",
+ "Name": "Nome",
+ "Name should be between 3-20 characters": "O nome deve ter entre 3-20 caracteres",
+ "New Today": "Novos hoje",
+ "New Version Available": "Nova versão disponível",
+ "Next": "Próximo",
+ "Next Target\n{{count}} Litter": "Próximo alvo\n{{count}} Lixo",
+ "No geotagged photos found": "Nenhuma foto geolocalizada encontrada",
+ "No images to upload": "Sem imagens para enviar",
+ "No matching uploads": "Nenhum envio correspondente",
+ "No uploads yet": "Nenhum envio ainda",
+ "Not now, Later": "Não agora, mais tarde",
+ "Not picked up": "Não coletado",
+ "OK": "OK",
+ "Only geotagged images can be selected": "Apenas imagens geolocalizadas podem ser selecionadas",
+ "Open Source": "Código Aberto",
+ "found without GPS data": "encontradas sem dados GPS",
+ "no GPS data and cannot be uploaded": "sem dados GPS e não podem ser enviadas",
+ "or": "ou",
+ "photo": "foto",
+ "photo has": "foto tem",
+ "photos": "fotos",
+ "photos have": "fotos têm",
+ "Password": "Senha",
+ "Password must be at least 6 characters": "A senha deve ter pelo menos 6 caracteres",
+ "Photos": "Fotos",
+ "Photos need GPS data to be uploaded. Make sure Location Services are enabled when taking photos.": "As fotos precisam de dados GPS para serem enviadas. Certifique-se de que os Serviços de Localização estejam ativados ao tirar fotos.",
+ "Picked up": "Coletado",
+ "Picked Up": "Coletado",
+ "Please add at least one tag before saving.": "Por favor, adicione pelo menos uma tag antes de salvar.",
+ "Please enter a name": "Por favor, insira um nome",
+ "Please enter a password": "Por favor, insira uma senha",
+ "Please enter a username": "Por favor, insira um nome de usuário",
+ "Please enter a valid url": "Por favor, insira uma URL válida",
+ "Please enter an email address": "Por favor, insira um endereço de e-mail",
+ "Please enter your email or username": "Por favor, insira seu e-mail ou nome de usuário",
+ "Please Give Permissions": "Por favor, conceda as permissões",
+ "Please provide us access to your gallery, which is required to upload geotagged images from your device": "Por favor, conceda acesso à sua galeria para enviar imagens geolocalizadas do seu dispositivo",
+ "Please update the app for an improved experience": "Atualize o app para uma experiência melhor",
+ "Please wait while your photos upload": "Aguarde enquanto suas fotos são enviadas",
+ "Press Upload": "Pressione Enviar",
+ "PRIVACY": "PRIVACIDADE",
+ "Quantity": "Quantidade",
+ "Rank": "Classificação",
+ "Save": "Salvar",
+ "Search brands": "Pesquisar marcas",
+ "Search by custom tag": "Pesquisar por etiqueta personalizada",
+ "Search by tag name": "Pesquisar por nome de etiqueta",
+ "Search materials": "Pesquisar materiais",
+ "Select a photo": "Selecionar uma foto",
+ "Select the images you want to delete": "Selecione as imagens que deseja excluir",
+ "Send Reset Link": "Enviar link de redefinição",
+ "Settings": "Configurações",
+ "Short": "Curta",
+ "Show Name on Created By": "Mostrar nome em Criado por",
+ "Show Name on Leaderboards": "Mostrar nome na classificação",
+ "Show Name on Maps": "Mostrar nome nos mapas",
+ "Show on Map": "Mostrar no mapa",
+ "Show Previous Tags": "Mostrar etiquetas anteriores",
+ "Show Username on Created By": "Mostrar nome de usuário em Criado por",
+ "Show Username on Leaderboards": "Mostrar nome de usuário na classificação",
+ "Show Username on Maps": "Mostrar nome de usuário nos mapas",
+ "Social Accounts": "Contas sociais",
+ "Some tags failed to upload. You can retry from your uploads.": "Algumas tags não foram enviadas. Você pode tentar novamente a partir dos seus uploads.",
+ "Start photographing litter to see your uploads here": "Comece a fotografar lixo para ver seus envios aqui",
+ "Strong": "Forte",
+ "Success!": "Sucesso!",
+ "Suggested Tags: {{count}}": "Etiquetas sugeridas: {{count}}",
+ "Tag already added": "Etiqueta já adicionada",
+ "Tag can be a maximum of 100 characters": "A etiqueta pode ter no máximo 100 caracteres",
+ "Tag needs to be at least 3 characters long": "A etiqueta deve ter pelo menos 3 caracteres",
+ "Tagged": "Etiquetado",
+ "TAGGING": "ETIQUETAGEM",
+ "Tags": "Etiquetas",
+ "TAGS": "ETIQUETAS",
+ "tags": "tags",
+ "Take a photo and select it from the gallery": "Tire uma foto ou selecione da galeria",
+ "Thank you!!!": "Obrigado!!!",
+ "The Litter has been picked up": "O lixo foi coletado",
+ "The Litter is still there": "O lixo ainda está lá",
+ "The link has been copied to your clipboard.": "O link foi copiado para a área de transferência.",
+ "The login details are incorrect": "Os dados de login estão incorretos",
+ "This is not a valid email address": "Este não é um endereço de e-mail válido",
+ "This photo has no location data": "Esta foto não tem dados de localização",
+ "This Month": "Este mês",
+ "This Week": "Esta semana",
+ "To": "Até",
+ "To capture litter images from app camera": "Para capturar imagens de lixo com a câmera do app",
+ "To get exact geolocation of where the litter is": "Para obter a localização exata do lixo",
+ "To Tag": "Para etiquetar",
+ "Today": "Hoje",
+ "Total Littercoin": "Total de Littercoin",
+ "Total People": "Total de pessoas",
+ "Total Photos": "Total de fotos",
+ "Total Tags": "Total de etiquetas",
+ "Total Users": "Total de usuários",
+ "Type to suggest tags": "Digite para sugerir etiquetas",
+ "UN Digital Public Good": "Bem público digital da ONU",
+ "Unique Username": "Nome de usuário único",
+ "Untagged": "Sem etiqueta",
+ "Update Now": "Atualizar agora",
+ "Update Tags": "Atualizar tags",
+ "Upload": "Enviar",
+ "Username": "Nome de usuário",
+ "Username should be between 3-20 characters": "O nome de usuário deve ter entre 3-20 caracteres",
+ "Username should not be equal to password": "O nome de usuário não deve ser igual à senha",
+ "Value not updated": "Valor não atualizado",
+ "Value updated": "Valor atualizado",
+ "Warning": "Aviso",
+ "Welcome": "Bem-vindo",
+ "XP": "XP",
+ "Yes, Delete": "Sim, excluir",
+ "You can upload up to 10 custom tags.": "Você pode enviar até 10 etiquetas personalizadas.",
+ "You have tagged {{count}} photos": "Você etiquetou {{count}} fotos",
+ "You have uploaded {{count}} photos": "Você enviou {{count}} fotos",
+ "Your password did not match": "Sua senha não corresponde"
+}
diff --git a/assets/langs/pt/settings.json b/assets/langs/pt/settings.json
deleted file mode 100644
index fd5b4f6a..00000000
--- a/assets/langs/pt/settings.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "settings": "Configurações",
- "my-account": "MINHA CONTA",
- "name": "Nome",
- "username": "Nome de usuário",
- "email": "Email",
- "privacy": "PRIVACIDADE",
- "tagging": "TAGGING",
- "enable_admin_tagging": "Enable crowdsourced tagging",
- "show-name-maps": "Mostrar nome no Maps",
- "show-username-maps": "Mostrar nome de usuário no Maps",
- "show-name-leaderboards": "Mostrar meu nome no placar",
- "show-username-leaderboards": " Mostrar nome de usuário no placar",
- "show-name-createdby": "Mostrar nome em Criado por",
- "show-username-createdby": " Mostrar nome de usuário em Criado por",
- "tags": "TAGS",
- "show-previous-tags": "Mostrar Tags anteriores",
- "logout": "Sair",
- "success": "Sucesso!",
- "error": "Erro!",
- "value-not-updated": "Valor não atualizado",
- "value-updated": "Valor atualizado",
- "go-back": "Voltar",
- "edit": "Editar",
- "save": "Salvar",
- "alert": "Alerta",
- "do-you-really-want-to-change": "Você realmente deseja alterar estas configurações?",
- "ok": "OK",
- "cancel": "Cancelar",
- "picked-up": "Pegou",
- "litter-picked-up": "O lixo é recolhido",
- "enter-email": "Please enter an email address",
- "enter-username": "Please enter a username",
- "enter-name": "Please enter a name",
- "name-min-max": "Name should be between 3-20 characters",
- "username-min-max": "Username should be between 3-20 characters",
- "url-not-valid": "Please enter a valid url"
-}
diff --git a/assets/langs/pt/stats.json b/assets/langs/pt/stats.json
deleted file mode 100644
index bf0f20e0..00000000
--- a/assets/langs/pt/stats.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "global-data": "Dados Globais",
- "next-target": "Próximo alvo\n{{count}} Lixo",
- "total-litter": "Total de Lixo",
- "total-photos": "Total de fotos",
- "total-users": "Total de usuários",
- "total-littercoin": "Total Littercoin"
-}
diff --git a/assets/langs/pt/tag.json b/assets/langs/pt/tag.json
deleted file mode 100644
index 5a678fc9..00000000
--- a/assets/langs/pt/tag.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "add-tag": "Adicionar Tag",
- "confirm": "Confirmar",
- "type-to-suggest": "Digite para sugerir Tags",
- "suggested-tags": "Tags Sugeridas {{count}}",
- "alert": "Alerta",
- "still-there": "O lixo ainda está lá!",
- "picked-up": "O lixo foi coletado!",
- "litter-status": "Status da ninhada",
- "picked-thumb": "Pegou 👍🏻",
- "not-picked-thumb": "Não pegou 👎🏻",
- "delete-message": "Tem certeza de que deseja apagar esta imagem ?",
- "cancel": "Cancelar",
- "delete": "Sim, Excluir",
- "custom-tags": "Etiquetas Personalizadas",
- "custom-tags-min": "A tag precisa ter pelo menos 3 caracteres",
- "custom-tags-max": "A tag pode ter no máximo 100 caracteres",
- "tag-already-added": "Etiqueta já adicionada.",
- "tag-limit-reached": "Você pode fazer upload de até 3 etiquetas personalizadas.",
- "delete-image": "\uD83D\uDEAE Deletar Imagem"
-}
diff --git a/assets/langs/pt/user.json b/assets/langs/pt/user.json
deleted file mode 100644
index d30b4b8d..00000000
--- a/assets/langs/pt/user.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "level": "Nível",
- "level-up": "{{count}} XP para subir de nível",
- "littercoin": "Littercoin",
- "next-littercoin": "{{count}}% Próximo Littercoin",
- "photos": "Fotos",
- "rank": "Classificação",
- "tags": "Tags",
- "welcome": "Receber",
- "XP": "XP"
-}
diff --git a/assets/langs/pt/welcome.json b/assets/langs/pt/welcome.json
deleted file mode 100644
index d21b2b7d..00000000
--- a/assets/langs/pt/welcome.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "its": "É ",
- "easy": "Fácil!",
- "just-tag-and-upload": "Apenas Tag o Lixo e Envie",
- "fun": "Divertido!",
- "climb-leaderboards": " Suba nas tabelas de classificação na #CopaMundialDoLixo",
- "open": "ABRIR!",
- "open-database": "Ajude-nos a criar o banco de dados aberto mais avançado do mundo sobre poluição de lixo e plástico",
- "get-started": "Comece!",
- "already-have-account": "Já possui uma conta? Entrar"
-}
diff --git a/babel.config.js b/babel.config.js
index f7b3da3b..02c7d135 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,3 +1,4 @@
module.exports = {
presets: ['module:@react-native/babel-preset'],
+ plugins: ['react-native-reanimated/plugin'],
};
diff --git a/i18n.js b/i18n.js
index 2ef0c146..08423e0c 100644
--- a/i18n.js
+++ b/i18n.js
@@ -1,41 +1,34 @@
-import i18n from "i18next";
-import { initReactI18next } from "react-i18next";
-
-import { en } from './assets/langs/en';
-import { ar } from './assets/langs/ar';
-import { de } from './assets/langs/de';
-import { es } from './assets/langs/es';
-import { fr } from './assets/langs/fr';
-import { ie } from './assets/langs/ie';
-import { nl } from './assets/langs/nl';
-import { pt } from './assets/langs/pt';
+import i18n from 'i18next';
+import {initReactI18next} from 'react-i18next';
+
+import {en} from './assets/langs/en';
+import {ar} from './assets/langs/ar';
+import {de} from './assets/langs/de';
+import {es} from './assets/langs/es';
+import {fr} from './assets/langs/fr';
+import {ie} from './assets/langs/ie';
+import {nl} from './assets/langs/nl';
+import {pt} from './assets/langs/pt';
const resources = {
- en: { translation: en },
- ar: { translation: ar },
- de: { translation: de },
- es: { translation: es },
- fr: { translation: fr },
- ie: { translation: ie },
- nl: { translation: nl },
- pt: { translation: pt }
+ en: {translation: en},
+ ar: {translation: ar},
+ de: {translation: de},
+ es: {translation: es},
+ fr: {translation: fr},
+ ie: {translation: ie},
+ nl: {translation: nl},
+ pt: {translation: pt}
};
-// Set default language
-import * as RNLocalize from 'react-native-localize';
-const defaultLang = RNLocalize.getLocales()[0].languageCode;
-const langs = ['en', 'ar', 'de', 'es', 'fr', 'ie', 'nl', 'pt'];
-const lng = langs.includes(defaultLang) ? defaultLang : 'en';
-
i18n.use(initReactI18next).init({
-
compatibilityJSON: 'v3',
resources,
- lng,
+ lng: 'en',
- fallbackLng: "en",
+ fallbackLng: 'en',
interpolation: {
escapeValue: false
@@ -44,7 +37,6 @@ i18n.use(initReactI18next).init({
react: {
useSuspense: false
}
-
});
export default i18n;
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index f374f92a..d48abffb 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -3,6 +3,27 @@ PODS:
- BVLinearGradient (2.8.3):
- React-Core
- DoubleConversion (1.1.6)
+ - Exify (1.0.3):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
- FBLazyVector (0.74.3)
- fmt (9.1.0)
- glog (0.3.5)
@@ -960,7 +981,7 @@ PODS:
- React-Mapbuffer (0.74.3):
- glog
- React-debug
- - react-native-cameraroll (7.8.1):
+ - react-native-cameraroll (7.10.2):
- DoubleConversion
- glog
- hermes-engine
@@ -981,13 +1002,11 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - react-native-config (1.5.2):
- - react-native-config/App (= 1.5.2)
- - react-native-config/App (1.5.2):
- - React-Core
- - react-native-maps (1.15.6):
+ - react-native-config (1.6.1):
+ - react-native-config/App (= 1.6.1)
+ - react-native-config/App (1.6.1):
- React-Core
- - react-native-pager-view (6.3.3):
+ - react-native-pager-view (6.9.1):
- DoubleConversion
- glog
- hermes-engine
@@ -1008,7 +1027,7 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - react-native-safe-area-context (4.10.7):
+ - react-native-safe-area-context (4.14.1):
- React-Core
- React-nativeconfig (0.74.3)
- React-NativeModulesApple (0.74.3):
@@ -1239,19 +1258,38 @@ PODS:
- React-logger (= 0.74.3)
- React-perflogger (= 0.74.3)
- React-utils (= 0.74.3)
- - RNCAsyncStorage (1.23.1):
+ - RNCAsyncStorage (1.24.0):
- React-Core
- - RNCClipboard (1.14.2):
+ - RNCClipboard (1.16.3):
- React-Core
- - RNCMaskedView (0.1.11):
- - React
- - RNCPicker (2.7.7):
+ - RNCMaskedView (0.3.2):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - RNCPicker (2.11.4):
- React-Core
- - RNDateTimePicker (8.2.0):
+ - RNDateTimePicker (8.6.0):
- React-Core
- RNDeviceInfo (11.1.0):
- React-Core
- - RNFlashList (1.7.0):
+ - RNFlashList (1.8.3):
- DoubleConversion
- glog
- hermes-engine
@@ -1272,7 +1310,7 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - RNGestureHandler (2.20.0):
+ - RNGestureHandler (2.30.0):
- DoubleConversion
- glog
- hermes-engine
@@ -1293,11 +1331,11 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - RNLocalize (3.2.0):
+ - RNLocalize (3.7.0):
- React-Core
- RNPermissions (4.1.5):
- React-Core
- - RNReanimated (3.13.0):
+ - RNReanimated (3.16.7):
- DoubleConversion
- glog
- hermes-engine
@@ -1317,8 +1355,74 @@ PODS:
- React-utils
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
+ - RNReanimated/reanimated (= 3.16.7)
+ - RNReanimated/worklets (= 3.16.7)
- Yoga
- - RNScreens (3.32.0):
+ - RNReanimated/reanimated (3.16.7):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNReanimated/reanimated/apple (= 3.16.7)
+ - Yoga
+ - RNReanimated/reanimated/apple (3.16.7):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - RNReanimated/worklets (3.16.7):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - RNScreens (3.37.0):
- DoubleConversion
- glog
- hermes-engine
@@ -1340,14 +1444,32 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - RNSentry (5.24.1):
+ - RNSentry (5.36.0):
+ - DoubleConversion
+ - glog
- hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
- React-hermes
- - Sentry/HybridSDK (= 8.29.1)
+ - React-ImageManager
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Sentry/HybridSDK (= 8.46.0)
+ - Yoga
- RNSVG (15.3.0):
- React-Core
- - RNVectorIcons (10.1.0):
+ - RNVectorIcons (10.3.0):
- DoubleConversion
- glog
- hermes-engine
@@ -1368,7 +1490,7 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - Sentry/HybridSDK (8.29.1)
+ - Sentry/HybridSDK (8.46.0)
- SocketRocket (0.7.0)
- Yoga (0.0.0)
@@ -1376,6 +1498,7 @@ DEPENDENCIES:
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
+ - "Exify (from `../node_modules/@lodev09/react-native-exify`)"
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
@@ -1409,7 +1532,6 @@ DEPENDENCIES:
- React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
- "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)"
- react-native-config (from `../node_modules/react-native-config`)
- - react-native-maps (from `../node_modules/react-native-maps`)
- react-native-pager-view (from `../node_modules/react-native-pager-view`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
@@ -1437,7 +1559,7 @@ DEPENDENCIES:
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)"
- - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
+ - "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)"
- "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
- "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
@@ -1465,6 +1587,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-linear-gradient"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
+ Exify:
+ :path: "../node_modules/@lodev09/react-native-exify"
FBLazyVector:
:path: "../node_modules/react-native/Libraries/FBLazyVector"
fmt:
@@ -1528,8 +1652,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/@react-native-camera-roll/camera-roll"
react-native-config:
:path: "../node_modules/react-native-config"
- react-native-maps:
- :path: "../node_modules/react-native-maps"
react-native-pager-view:
:path: "../node_modules/react-native-pager-view"
react-native-safe-area-context:
@@ -1585,7 +1707,7 @@ EXTERNAL SOURCES:
RNCClipboard:
:path: "../node_modules/@react-native-clipboard/clipboard"
RNCMaskedView:
- :path: "../node_modules/@react-native-community/masked-view"
+ :path: "../node_modules/@react-native-masked-view/masked-view"
RNCPicker:
:path: "../node_modules/@react-native-picker/picker"
RNDateTimePicker:
@@ -1617,6 +1739,7 @@ SPEC CHECKSUMS:
boost: d3f49c53809116a5d38da093a8aa78bf551aed09
BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
+ Exify: 8ba56142378ffabac11b1ec15e8874715f67b28c
FBLazyVector: 7e977dd099937dc5458851233141583abba49ff2
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f
@@ -1647,11 +1770,10 @@ SPEC CHECKSUMS:
React-jsitracing: 6b3c8c98313642140530f93c46f5a6ca4530b446
React-logger: fa92ba4d3a5d39ac450f59be2a3cec7b099f0304
React-Mapbuffer: 9f68550e7c6839d01411ac8896aea5c868eff63a
- react-native-cameraroll: a9138c165c9975da773d26945591d313992c799b
- react-native-config: d7d8a0c65f7fa523197879f6b777997abbfc987e
- react-native-maps: 7b2c2cee95271592a92ba485eea1dec66a363a6e
- react-native-pager-view: f848f89049a8e888d38f10ff31588eb63292a95f
- react-native-safe-area-context: 422017db8bcabbada9ad607d010996c56713234c
+ react-native-cameraroll: 287834b4449f87307b55c352738a61974f86db7e
+ react-native-config: 97ffff0aec29e12269f4dd2d41c6669c0056c7aa
+ react-native-pager-view: 8a5b6b93ff838ad2fd9f0327ae39d9f41fcad3bb
+ react-native-safe-area-context: 141eca0fd4e4191288dfc8b96a7c7e1c2983447a
React-nativeconfig: fa5de9d8f4dbd5917358f8ad3ad1e08762f01dcb
React-NativeModulesApple: 585d1b78e0597de364d259cb56007052d0bda5e5
React-perflogger: 7bb9ba49435ff66b666e7966ee10082508a203e8
@@ -1675,25 +1797,25 @@ SPEC CHECKSUMS:
React-runtimescheduler: 0c80752bceb80924cb8a4babc2a8e3ed70d41e87
React-utils: a06061b3887c702235d2dac92dacbd93e1ea079e
ReactCommon: f00e436b3925a7ae44dfa294b43ef360fbd8ccc4
- RNCAsyncStorage: 826b603ae9c0f88b5ac4e956801f755109fa4d5c
- RNCClipboard: 5e503962f0719ace8f7fdfe9c60282b526305c85
- RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
- RNCPicker: b7873ba797dc586bfaf3307d737cbdc620a9ff3e
- RNDateTimePicker: 40ffda97d071a98a10fdca4fa97e3977102ccd14
+ RNCAsyncStorage: ec53e44dc3e75b44aa2a9f37618a49c3bc080a7a
+ RNCClipboard: dfeb43751adff21e588657b5b6c888c72f3aa68e
+ RNCMaskedView: da52ec927af4b4c3f3f6b5b5e816a69be62fe642
+ RNCPicker: 0ce5d66262fe7f79e95664bae9447b0d7ed857da
+ RNDateTimePicker: 5144134317b7df26573a2aff37adc18ca3e9b50e
RNDeviceInfo: b899ce37a403a4dea52b7cb85e16e49c04a5b88e
- RNFlashList: e9b57a5553639f9b528cc50ab53f25831722ed62
- RNGestureHandler: 28078232f2868d3dcb4d4b6c8ab8691700187664
- RNLocalize: b77875884750cb6a58cd6865863fe2ba2729b72b
+ RNFlashList: fb8d1899e15345751c49896ad784aa90723e87b9
+ RNGestureHandler: 31cee5e2a282d56449c0666d11be96372f6033e7
+ RNLocalize: 4372ecce8b0d483980847e04f6567ad342ca97d6
RNPermissions: 9611557f7289c271e442b481523a19452aefca1f
- RNReanimated: 9c213184c27dc4a2ed7e9ff41a4b0b9258bb54f0
- RNScreens: 5aeecbb09aa7285379b6e9f3c8a3c859bb16401c
- RNSentry: e9aa15bb2f3e18c822c002eea13bbd3b222ab493
+ RNReanimated: b0728bed09875d78b9a3a0ba0e2d1171f63f8b5a
+ RNScreens: 177a3fedd12fc8d12af3c23f17e7bbdc9749a2cd
+ RNSentry: bd24510e679253fcfc216e5e433dab3ac03f2ed0
RNSVG: a48668fd382115bc89761ce291a81c4ca5f2fd2e
- RNVectorIcons: 2a2f79274248390b80684ea3c4400bd374a15c90
- Sentry: c446963245407030e17f1b926a83c6337dc99f4e
+ RNVectorIcons: 2596f3ea0f2dd121af9ae13a8f6f5d973ae9baf5
+ Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
- Yoga: 88480008ccacea6301ff7bf58726e27a72931c8d
+ Yoga: 04f1db30bb810187397fa4c37dd1868a27af229c
PODFILE CHECKSUM: 7a045df7b5e0a3f9e650ce2fe341f6680cc9560d
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/ios/openlittermap.xcodeproj/project.pbxproj b/ios/openlittermap.xcodeproj/project.pbxproj
index 83480a7c..de9d2dd6 100644
--- a/ios/openlittermap.xcodeproj/project.pbxproj
+++ b/ios/openlittermap.xcodeproj/project.pbxproj
@@ -514,7 +514,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 66;
+ CURRENT_PROJECT_VERSION = 67;
DEVELOPMENT_TEAM = QWDQLVZP87;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = openlittermap/Info.plist;
@@ -525,7 +525,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 6.2.0;
+ MARKETING_VERSION = 7.0.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -545,7 +545,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 66;
+ CURRENT_PROJECT_VERSION = 67;
DEVELOPMENT_TEAM = QWDQLVZP87;
INFOPLIST_FILE = openlittermap/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = OpenLitterMap;
@@ -555,7 +555,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 6.2.0;
+ MARKETING_VERSION = 7.0.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -642,7 +642,10 @@
"-DFOLLY_CFG_NO_COROUTINES=1",
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
);
- OTHER_LDFLAGS = "$(inherited) ";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ " ",
+ );
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
@@ -715,7 +718,10 @@
"-DFOLLY_CFG_NO_COROUTINES=1",
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
);
- OTHER_LDFLAGS = "$(inherited) ";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ " ",
+ );
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/100.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 00000000..8b3aef76
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/100.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/102.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/102.png
new file mode 100644
index 00000000..2202c220
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/102.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/1024.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 00000000..a53cd356
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/108.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/108.png
new file mode 100644
index 00000000..bb7af5ce
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/108.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/114.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 00000000..ac905d52
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/114.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120 1.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120 1.png
deleted file mode 100644
index 752c3ed1..00000000
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120 1.png and /dev/null differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120.png
index 752c3ed1..f4a37271 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/128.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/128.png
new file mode 100644
index 00000000..2572e214
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/128.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/144.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 00000000..7368683b
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/144.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/152.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 00000000..a6c79986
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/152.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/16.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/16.png
new file mode 100644
index 00000000..0c18aab3
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/16.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/167.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 00000000..e5282347
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/167.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/172.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/172.png
new file mode 100644
index 00000000..df23546d
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/172.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/180.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/180.png
index c7f24fe9..c48cb865 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/180.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/196.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/196.png
new file mode 100644
index 00000000..935bbd30
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/196.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/20.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 00000000..1e4f637f
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/20.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/216.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/216.png
new file mode 100644
index 00000000..7b17c3bc
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/216.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/234.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/234.png
new file mode 100644
index 00000000..a6825e38
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/234.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/256.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/256.png
new file mode 100644
index 00000000..d4fe45dc
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/256.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/258.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/258.png
new file mode 100644
index 00000000..0b96f2ed
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/258.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/29.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 00000000..80e11296
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/32.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/32.png
new file mode 100644
index 00000000..544f8f20
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/32.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/40.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/40.png
index 76afef19..66ba521c 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/40.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/48.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/48.png
new file mode 100644
index 00000000..56eaeeea
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/48.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/50.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 00000000..10addc2a
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/50.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/512.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/512.png
new file mode 100644
index 00000000..b710e0d1
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/512.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/55.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/55.png
new file mode 100644
index 00000000..0f035d93
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/55.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/57.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 00000000..9d0e3b15
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/57.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/58.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/58.png
index e94915ac..1b1703f5 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/58.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/60.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/60.png
index d9d080fa..6a2beaa0 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/60.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/64.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/64.png
new file mode 100644
index 00000000..82437ee1
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/64.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/66.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/66.png
new file mode 100644
index 00000000..43bfbaa9
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/66.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/72.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 00000000..7c75cdb0
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/72.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/76.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 00000000..4b554e63
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/76.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/80.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/80.png
index 0bff4f11..0dde2f2e 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/80.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/87.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/87.png
index f24df918..881e9526 100644
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/87.png and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/88.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/88.png
new file mode 100644
index 00000000..21edfe35
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/88.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/92.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/92.png
new file mode 100644
index 00000000..cafdf07c
Binary files /dev/null and b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/92.png differ
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/Contents.json
index b8a7dc59..1319290d 100644
--- a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -1,62 +1 @@
-{
- "images" : [
- {
- "filename" : "40.png",
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "20x20"
- },
- {
- "filename" : "60.png",
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "20x20"
- },
- {
- "filename" : "58.png",
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "29x29"
- },
- {
- "filename" : "87.png",
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "29x29"
- },
- {
- "filename" : "80.png",
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "40x40"
- },
- {
- "filename" : "120.png",
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "40x40"
- },
- {
- "filename" : "120 1.png",
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "60x60"
- },
- {
- "filename" : "180.png",
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "60x60"
- },
- {
- "filename" : "ios_app_store_icon_1024pxBy1024px.png",
- "idiom" : "ios-marketing",
- "scale" : "1x",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"idiom":"watch","filename":"172.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"86x86","expected-size":"172","role":"quickLook"},{"idiom":"watch","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"40x40","expected-size":"80","role":"appLauncher"},{"idiom":"watch","filename":"88.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"40mm","scale":"2x","size":"44x44","expected-size":"88","role":"appLauncher"},{"idiom":"watch","filename":"102.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"51x51","expected-size":"102","role":"appLauncher"},{"idiom":"watch","filename":"108.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"49mm","scale":"2x","size":"54x54","expected-size":"108","role":"appLauncher"},{"idiom":"watch","filename":"92.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"46x46","expected-size":"92","role":"appLauncher"},{"idiom":"watch","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"50x50","expected-size":"100","role":"appLauncher"},{"idiom":"watch","filename":"196.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"98x98","expected-size":"196","role":"quickLook"},{"idiom":"watch","filename":"216.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"108x108","expected-size":"216","role":"quickLook"},{"idiom":"watch","filename":"234.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"117x117","expected-size":"234","role":"quickLook"},{"idiom":"watch","filename":"258.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"49mm","scale":"2x","size":"129x129","expected-size":"258","role":"quickLook"},{"idiom":"watch","filename":"48.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"24x24","expected-size":"48","role":"notificationCenter"},{"idiom":"watch","filename":"55.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"27.5x27.5","expected-size":"55","role":"notificationCenter"},{"idiom":"watch","filename":"66.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"33x33","expected-size":"66","role":"notificationCenter"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"3x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"2x"},{"size":"1024x1024","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch-marketing","scale":"1x"},{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
\ No newline at end of file
diff --git a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/ios_app_store_icon_1024pxBy1024px.png b/ios/openlittermap/Images.xcassets/AppIcon.appiconset/ios_app_store_icon_1024pxBy1024px.png
deleted file mode 100644
index cb7ff3a1..00000000
Binary files a/ios/openlittermap/Images.xcassets/AppIcon.appiconset/ios_app_store_icon_1024pxBy1024px.png and /dev/null differ
diff --git a/ios/openlittermap/Info.plist b/ios/openlittermap/Info.plist
index bea57107..5aa02bbf 100644
--- a/ios/openlittermap/Info.plist
+++ b/ios/openlittermap/Info.plist
@@ -36,6 +36,8 @@
NSExceptionAllowsInsecureHTTPLoads
+ NSTemporaryExceptionRequiresForwardSecrecy
+
diff --git a/package-lock.json b/package-lock.json
index b0c0801f..51b4bea4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,32 +1,33 @@
{
"name": "openlittermap",
- "version": "6.2.0",
+ "version": "7.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openlittermap",
- "version": "6.2.0",
+ "version": "7.0.0",
+ "hasInstallScript": true,
"dependencies": {
+ "@lodev09/react-native-exify": "^1.0.3",
"@react-native-async-storage/async-storage": "^1.23.1",
"@react-native-camera-roll/camera-roll": "^7.8.1",
"@react-native-clipboard/clipboard": "^1.14.2",
"@react-native-community/datetimepicker": "^8.2.0",
- "@react-native-community/masked-view": "^0.1.11",
+ "@react-native-masked-view/masked-view": "^0.3.2",
"@react-native-picker/picker": "^2.7.7",
"@react-navigation/material-top-tabs": "^6.6.13",
"@react-navigation/native": "^6.1.17",
"@react-navigation/stack": "^6.4.0",
"@reduxjs/toolkit": "^2.2.6",
- "@sentry/react-native": "^5.24.1",
+ "@sentry/react-native": "^5.36.0",
"@shopify/flash-list": "^1.7.0",
"axios": "^1.7.2",
+ "dayjs": "^1.11.19",
"formik": "^2.4.6",
"i18next": "^23.11.5",
- "immer": "^10.1.1",
"lottie-react-native": "^6.7.2",
- "moment": "^2.30.1",
- "react": "18.2.0",
+ "react": "^18.2.0",
"react-i18next": "^14.1.2",
"react-native": "0.74.3",
"react-native-actions-sheet": "^0.9.6",
@@ -35,20 +36,19 @@
"react-native-gesture-handler": "^2.20.0",
"react-native-linear-gradient": "^2.8.3",
"react-native-localize": "^3.2.0",
- "react-native-maps": "^1.15.6",
+ "react-native-maps": "^1.20.1",
"react-native-page-control": "^1.1.2",
"react-native-pager-view": "^6.3.3",
"react-native-permissions": "^4.1.5",
- "react-native-reanimated": "^3.13.0",
+ "react-native-reanimated": "^3.16.7",
"react-native-safe-area-context": "^4.10.7",
"react-native-screens": "^3.32.0",
"react-native-svg": "^15.3.0",
"react-native-swipe-gestures": "^1.0.5",
- "react-native-swiper": "^1.6.0",
+ "react-native-tab-view": "^3.5.2",
"react-native-vector-icons": "^10.1.0",
"react-redux": "^9.1.2",
"redux-persist": "^6.0.0",
- "redux-thunk": "^3.1.0",
"use-count-up": "^3.0.1",
"yup": "^1.4.0"
},
@@ -66,7 +66,7 @@
"eslint": "^8.19.0",
"jest": "^29.6.3",
"prettier": "2.8.8",
- "react-test-renderer": "18.2.0",
+ "react-test-renderer": "^18.2.0",
"redux-immutable-state-invariant": "^2.1.0",
"typescript": "5.0.4"
},
@@ -74,49 +74,45 @@
"node": ">=18"
}
},
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@babel/code-frame": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.24.7",
- "picocolors": "^1.0.0"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helpers": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/template": "^7.24.7",
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -131,15 +127,10 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/eslint-parser": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz",
+ "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -155,63 +146,43 @@
"eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
}
},
- "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@babel/eslint-parser/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/generator": {
- "version": "7.24.7",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.24.7",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.24.7",
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+ "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/types": "^7.27.3"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "browserslist": "^4.22.2",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -219,36 +190,18 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
- "version": "5.1.1",
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
- "version": "3.1.1",
- "license": "ISC"
- },
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
+ "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-member-expression-to-functions": "^7.24.7",
- "@babel/helper-optimise-call-expression": "^7.24.7",
- "@babel/helper-replace-supers": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/traverse": "^7.28.6",
"semver": "^6.3.1"
},
"engines": {
@@ -258,19 +211,14 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.24.7",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz",
+ "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "regexpu-core": "^5.3.1",
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "regexpu-core": "^6.3.1",
"semver": "^6.3.1"
},
"engines": {
@@ -280,22 +228,17 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.2",
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz",
+ "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "debug": "^4.4.3",
"lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
+ "resolve": "^1.22.11"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -303,6 +246,8 @@
},
"node_modules/@babel/helper-environment-visitor": {
"version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+ "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.24.7"
@@ -311,58 +256,50 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-function-name": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.24.7",
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.24.7",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
+ "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/traverse": "^7.28.5",
+ "@babel/types": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-simple-access": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -372,29 +309,35 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+ "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.24.7"
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",
+ "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-wrap-function": "^7.24.7"
+ "@babel/helper-annotate-as-pure": "^7.27.1",
+ "@babel/helper-wrap-function": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -404,12 +347,14 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
+ "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-member-expression-to-functions": "^7.24.7",
- "@babel/helper-optimise-call-expression": "^7.24.7"
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -418,158 +363,113 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-simple-access": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+ "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.24.7",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz",
+ "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-function-name": "^7.24.7",
- "@babel/template": "^7.24.7",
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight": {
- "version": "7.24.7",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.24.7",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
+ "node_modules/@babel/parser": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"license": "MIT",
"dependencies": {
- "color-convert": "^1.9.0"
+ "@babel/types": "^7.29.0"
},
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "bin": {
+ "parser": "bin/babel-parser.js"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=4"
+ "node": ">=6.0.0"
}
},
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz",
+ "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "has-flag": "^3.0.0"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/traverse": "^7.28.5"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.24.7",
- "license": "MIT",
- "bin": {
- "parser": "bin/babel-parser.js"
+ "node": ">=6.9.0"
},
- "engines": {
- "node": ">=6.0.0"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.24.7",
+ "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
+ "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -579,10 +479,13 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",
+ "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -592,12 +495,15 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
+ "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-transform-optional-chaining": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -607,11 +513,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz",
+ "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -622,6 +531,9 @@
},
"node_modules/@babel/plugin-proposal-async-generator-functions": {
"version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz",
+ "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
@@ -638,6 +550,9 @@
},
"node_modules/@babel/plugin-proposal-class-properties": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+ "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.18.6",
@@ -651,11 +566,12 @@
}
},
"node_modules/@babel/plugin-proposal-export-default-from": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz",
+ "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-export-default-from": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -666,6 +582,9 @@
},
"node_modules/@babel/plugin-proposal-logical-assignment-operators": {
"version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz",
+ "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
@@ -680,6 +599,9 @@
},
"node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+ "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
@@ -694,6 +616,9 @@
},
"node_modules/@babel/plugin-proposal-numeric-separator": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+ "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
@@ -708,6 +633,9 @@
},
"node_modules/@babel/plugin-proposal-object-rest-spread": {
"version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
+ "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.",
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.20.5",
@@ -725,6 +653,9 @@
},
"node_modules/@babel/plugin-proposal-optional-catch-binding": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+ "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
@@ -739,6 +670,9 @@
},
"node_modules/@babel/plugin-proposal-optional-chaining": {
"version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
+ "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
@@ -754,6 +688,9 @@
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -764,6 +701,8 @@
},
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -774,6 +713,8 @@
},
"node_modules/@babel/plugin-syntax-bigint": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -785,6 +726,9 @@
},
"node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
@@ -795,6 +739,9 @@
},
"node_modules/@babel/plugin-syntax-class-static-block": {
"version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
@@ -808,6 +755,8 @@
},
"node_modules/@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -817,10 +766,12 @@
}
},
"node_modules/@babel/plugin-syntax-export-default-from": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.28.6.tgz",
+ "integrity": "sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -829,21 +780,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/plugin-syntax-flow": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.28.6.tgz",
+ "integrity": "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -853,10 +796,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz",
+ "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -866,10 +812,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -880,6 +829,9 @@
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
@@ -890,6 +842,9 @@
},
"node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -899,10 +854,12 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -913,6 +870,8 @@
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
@@ -923,6 +882,8 @@
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -933,6 +894,8 @@
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
@@ -943,6 +906,8 @@
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -953,6 +918,8 @@
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -963,6 +930,8 @@
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
@@ -973,6 +942,9 @@
},
"node_modules/@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
@@ -986,6 +958,9 @@
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
@@ -998,10 +973,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1012,6 +989,9 @@
},
"node_modules/@babel/plugin-syntax-unicode-sets-regex": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
@@ -1025,10 +1005,12 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",
+ "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1038,13 +1020,15 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz",
+ "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-remap-async-to-generator": "^7.24.7",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-remap-async-to-generator": "^7.27.1",
+ "@babel/traverse": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1054,12 +1038,14 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz",
+ "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==",
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-remap-async-to-generator": "^7.24.7"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-remap-async-to-generator": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1069,10 +1055,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
+ "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1082,10 +1071,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz",
+ "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1095,11 +1086,13 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz",
+ "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1109,12 +1102,14 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz",
+ "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1124,17 +1119,17 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz",
+ "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-replace-supers": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "globals": "^11.1.0"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-replace-supers": "^7.28.6",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1144,11 +1139,13 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz",
+ "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/template": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/template": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1158,10 +1155,13 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.24.7",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz",
+ "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/traverse": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1171,11 +1171,14 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz",
+ "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1185,10 +1188,13 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
+ "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1197,12 +1203,48 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz",
+ "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
+ "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-explicit-resource-management": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz",
+ "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1212,11 +1254,13 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz",
+ "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1226,11 +1270,13 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
+ "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1240,11 +1286,13 @@
}
},
"node_modules/@babel/plugin-transform-flow-strip-types": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz",
+ "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-flow": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/plugin-syntax-flow": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1254,11 +1302,14 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",
+ "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1268,12 +1319,14 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",
+ "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-compilation-targets": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1283,11 +1336,13 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz",
+ "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1297,10 +1352,12 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",
+ "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1310,11 +1367,13 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz",
+ "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1324,10 +1383,13 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
+ "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1337,11 +1399,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
+ "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1351,12 +1416,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz",
+ "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-simple-access": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1366,13 +1432,16 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz",
+ "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-hoist-variables": "^7.24.7",
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1382,11 +1451,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
+ "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1396,11 +1468,13 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz",
+ "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1410,10 +1484,13 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
+ "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1423,11 +1500,12 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz",
+ "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1437,11 +1515,13 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz",
+ "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1451,13 +1531,17 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz",
+ "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.24.7"
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5",
+ "@babel/plugin-transform-parameters": "^7.27.7",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1467,11 +1551,14 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
+ "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-replace-supers": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1481,11 +1568,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz",
+ "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1495,12 +1584,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz",
+ "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1510,10 +1600,12 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.24.7",
+ "version": "7.27.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz",
+ "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1523,11 +1615,13 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz",
+ "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1537,13 +1631,14 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz",
+ "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1553,10 +1648,13 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
+ "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1566,10 +1664,12 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.24.7",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz",
+ "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1579,14 +1679,16 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz",
+ "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-jsx": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-syntax-jsx": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1596,10 +1698,12 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-self": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1609,10 +1713,12 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-source": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1622,11 +1728,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz",
+ "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "regenerator-transform": "^0.15.2"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1635,11 +1743,31 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-regexp-modifiers": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz",
+ "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
+ "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1649,14 +1777,16 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz",
+ "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==",
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.10.1",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "babel-plugin-polyfill-corejs2": "^0.4.14",
+ "babel-plugin-polyfill-corejs3": "^0.13.0",
+ "babel-plugin-polyfill-regenerator": "^0.6.5",
"semver": "^6.3.1"
},
"engines": {
@@ -1666,18 +1796,26 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
+ "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz",
+ "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.5",
+ "core-js-compat": "^3.43.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",
+ "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1687,11 +1825,13 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz",
+ "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1701,10 +1841,12 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",
+ "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1714,10 +1856,12 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",
+ "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1727,10 +1871,13 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
+ "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1740,13 +1887,16 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
+ "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-typescript": "^7.24.7"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1756,10 +1906,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
+ "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1769,11 +1922,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz",
+ "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1783,11 +1939,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",
+ "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1797,11 +1955,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz",
+ "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1811,89 +1972,81 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz",
+ "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7",
+ "@babel/compat-data": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.24.7",
- "@babel/plugin-syntax-import-attributes": "^7.24.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-import-assertions": "^7.28.6",
+ "@babel/plugin-syntax-import-attributes": "^7.28.6",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.24.7",
- "@babel/plugin-transform-async-generator-functions": "^7.24.7",
- "@babel/plugin-transform-async-to-generator": "^7.24.7",
- "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
- "@babel/plugin-transform-block-scoping": "^7.24.7",
- "@babel/plugin-transform-class-properties": "^7.24.7",
- "@babel/plugin-transform-class-static-block": "^7.24.7",
- "@babel/plugin-transform-classes": "^7.24.7",
- "@babel/plugin-transform-computed-properties": "^7.24.7",
- "@babel/plugin-transform-destructuring": "^7.24.7",
- "@babel/plugin-transform-dotall-regex": "^7.24.7",
- "@babel/plugin-transform-duplicate-keys": "^7.24.7",
- "@babel/plugin-transform-dynamic-import": "^7.24.7",
- "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
- "@babel/plugin-transform-export-namespace-from": "^7.24.7",
- "@babel/plugin-transform-for-of": "^7.24.7",
- "@babel/plugin-transform-function-name": "^7.24.7",
- "@babel/plugin-transform-json-strings": "^7.24.7",
- "@babel/plugin-transform-literals": "^7.24.7",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
- "@babel/plugin-transform-member-expression-literals": "^7.24.7",
- "@babel/plugin-transform-modules-amd": "^7.24.7",
- "@babel/plugin-transform-modules-commonjs": "^7.24.7",
- "@babel/plugin-transform-modules-systemjs": "^7.24.7",
- "@babel/plugin-transform-modules-umd": "^7.24.7",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
- "@babel/plugin-transform-new-target": "^7.24.7",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
- "@babel/plugin-transform-numeric-separator": "^7.24.7",
- "@babel/plugin-transform-object-rest-spread": "^7.24.7",
- "@babel/plugin-transform-object-super": "^7.24.7",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.7",
- "@babel/plugin-transform-parameters": "^7.24.7",
- "@babel/plugin-transform-private-methods": "^7.24.7",
- "@babel/plugin-transform-private-property-in-object": "^7.24.7",
- "@babel/plugin-transform-property-literals": "^7.24.7",
- "@babel/plugin-transform-regenerator": "^7.24.7",
- "@babel/plugin-transform-reserved-words": "^7.24.7",
- "@babel/plugin-transform-shorthand-properties": "^7.24.7",
- "@babel/plugin-transform-spread": "^7.24.7",
- "@babel/plugin-transform-sticky-regex": "^7.24.7",
- "@babel/plugin-transform-template-literals": "^7.24.7",
- "@babel/plugin-transform-typeof-symbol": "^7.24.7",
- "@babel/plugin-transform-unicode-escapes": "^7.24.7",
- "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
- "@babel/plugin-transform-unicode-regex": "^7.24.7",
- "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
+ "@babel/plugin-transform-arrow-functions": "^7.27.1",
+ "@babel/plugin-transform-async-generator-functions": "^7.29.0",
+ "@babel/plugin-transform-async-to-generator": "^7.28.6",
+ "@babel/plugin-transform-block-scoped-functions": "^7.27.1",
+ "@babel/plugin-transform-block-scoping": "^7.28.6",
+ "@babel/plugin-transform-class-properties": "^7.28.6",
+ "@babel/plugin-transform-class-static-block": "^7.28.6",
+ "@babel/plugin-transform-classes": "^7.28.6",
+ "@babel/plugin-transform-computed-properties": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5",
+ "@babel/plugin-transform-dotall-regex": "^7.28.6",
+ "@babel/plugin-transform-duplicate-keys": "^7.27.1",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0",
+ "@babel/plugin-transform-dynamic-import": "^7.27.1",
+ "@babel/plugin-transform-explicit-resource-management": "^7.28.6",
+ "@babel/plugin-transform-exponentiation-operator": "^7.28.6",
+ "@babel/plugin-transform-export-namespace-from": "^7.27.1",
+ "@babel/plugin-transform-for-of": "^7.27.1",
+ "@babel/plugin-transform-function-name": "^7.27.1",
+ "@babel/plugin-transform-json-strings": "^7.28.6",
+ "@babel/plugin-transform-literals": "^7.27.1",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.28.6",
+ "@babel/plugin-transform-member-expression-literals": "^7.27.1",
+ "@babel/plugin-transform-modules-amd": "^7.27.1",
+ "@babel/plugin-transform-modules-commonjs": "^7.28.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.29.0",
+ "@babel/plugin-transform-modules-umd": "^7.27.1",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0",
+ "@babel/plugin-transform-new-target": "^7.27.1",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6",
+ "@babel/plugin-transform-numeric-separator": "^7.28.6",
+ "@babel/plugin-transform-object-rest-spread": "^7.28.6",
+ "@babel/plugin-transform-object-super": "^7.27.1",
+ "@babel/plugin-transform-optional-catch-binding": "^7.28.6",
+ "@babel/plugin-transform-optional-chaining": "^7.28.6",
+ "@babel/plugin-transform-parameters": "^7.27.7",
+ "@babel/plugin-transform-private-methods": "^7.28.6",
+ "@babel/plugin-transform-private-property-in-object": "^7.28.6",
+ "@babel/plugin-transform-property-literals": "^7.27.1",
+ "@babel/plugin-transform-regenerator": "^7.29.0",
+ "@babel/plugin-transform-regexp-modifiers": "^7.28.6",
+ "@babel/plugin-transform-reserved-words": "^7.27.1",
+ "@babel/plugin-transform-shorthand-properties": "^7.27.1",
+ "@babel/plugin-transform-spread": "^7.28.6",
+ "@babel/plugin-transform-sticky-regex": "^7.27.1",
+ "@babel/plugin-transform-template-literals": "^7.27.1",
+ "@babel/plugin-transform-typeof-symbol": "^7.27.1",
+ "@babel/plugin-transform-unicode-escapes": "^7.27.1",
+ "@babel/plugin-transform-unicode-property-regex": "^7.28.6",
+ "@babel/plugin-transform-unicode-regex": "^7.27.1",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.28.6",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.10.4",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
- "core-js-compat": "^3.31.0",
+ "babel-plugin-polyfill-corejs2": "^0.4.15",
+ "babel-plugin-polyfill-corejs3": "^0.14.0",
+ "babel-plugin-polyfill-regenerator": "^0.6.6",
+ "core-js-compat": "^3.48.0",
"semver": "^6.3.1"
},
"engines": {
@@ -1903,20 +2056,15 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/preset-env/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/preset-flow": {
- "version": "7.24.7",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.27.1.tgz",
+ "integrity": "sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "@babel/plugin-transform-flow-strip-types": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-transform-flow-strip-types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1927,6 +2075,9 @@
},
"node_modules/@babel/preset-modules": {
"version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -1938,14 +2089,16 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.24.7",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
+ "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "@babel/plugin-syntax-jsx": "^7.24.7",
- "@babel/plugin-transform-modules-commonjs": "^7.24.7",
- "@babel/plugin-transform-typescript": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-transform-modules-commonjs": "^7.27.1",
+ "@babel/plugin-transform-typescript": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1955,7 +2108,9 @@
}
},
"node_modules/@babel/register": {
- "version": "7.24.6",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz",
+ "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==",
"license": "MIT",
"dependencies": {
"clone-deep": "^4.0.1",
@@ -1971,58 +2126,87 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/regjsgen": {
- "version": "0.8.0",
- "license": "MIT"
- },
- "node_modules/@babel/runtime": {
- "version": "7.24.7",
+ "node_modules/@babel/register/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"license": "MIT",
"dependencies": {
- "regenerator-runtime": "^0.14.0"
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
},
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/@babel/register/node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template": {
- "version": "7.24.7",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-hoist-variables": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.24.7",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2030,6 +2214,8 @@
},
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true,
"license": "MIT"
},
@@ -2046,21 +2232,41 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.11.0",
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2069,6 +2275,8 @@
},
"node_modules/@eslint/eslintrc": {
"version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2091,40 +2299,26 @@
},
"node_modules/@eslint/eslintrc/node_modules/argparse": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/import-fresh": {
- "version": "3.3.0",
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/@eslint/eslintrc/node_modules/js-yaml": {
- "version": "4.1.0",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2134,16 +2328,23 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@eslint/eslintrc/node_modules/resolve-from": {
- "version": "4.0.0",
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
"engines": {
- "node": ">=4"
+ "node": "*"
}
},
"node_modules/@eslint/js": {
- "version": "8.57.0",
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2152,21 +2353,28 @@
},
"node_modules/@hapi/hoek": {
"version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
+ "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
"license": "BSD-3-Clause"
},
"node_modules/@hapi/topo": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
+ "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
+ "@humanwhocodes/object-schema": "^2.0.3",
"debug": "^4.3.1",
"minimatch": "^3.0.5"
},
@@ -2174,8 +2382,34 @@
"node": ">=10.10.0"
}
},
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2188,11 +2422,16 @@
},
"node_modules/@humanwhocodes/object-schema": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/@isaacs/ttlcache": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz",
+ "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -2200,6 +2439,8 @@
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2215,6 +2456,8 @@
},
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2223,6 +2466,8 @@
},
"node_modules/@jest/console": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2239,6 +2484,8 @@
},
"node_modules/@jest/core": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2285,6 +2532,8 @@
},
"node_modules/@jest/create-cache-key-function": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz",
+ "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==",
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3"
@@ -2295,6 +2544,8 @@
},
"node_modules/@jest/environment": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"license": "MIT",
"dependencies": {
"@jest/fake-timers": "^29.7.0",
@@ -2308,6 +2559,8 @@
},
"node_modules/@jest/expect": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2320,6 +2573,8 @@
},
"node_modules/@jest/expect-utils": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2331,6 +2586,8 @@
},
"node_modules/@jest/fake-timers": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
@@ -2346,6 +2603,8 @@
},
"node_modules/@jest/globals": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2360,6 +2619,8 @@
},
"node_modules/@jest/reporters": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2402,6 +2663,8 @@
},
"node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
"version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -2415,8 +2678,23 @@
"node": ">=10"
}
},
+ "node_modules/@jest/reporters/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@jest/schemas": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"license": "MIT",
"dependencies": {
"@sinclair/typebox": "^0.27.8"
@@ -2427,6 +2705,8 @@
},
"node_modules/@jest/source-map": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2440,6 +2720,8 @@
},
"node_modules/@jest/test-result": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2454,6 +2736,8 @@
},
"node_modules/@jest/test-sequencer": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2468,6 +2752,8 @@
},
"node_modules/@jest/transform": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2491,20 +2777,10 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@jest/transform/node_modules/write-file-atomic": {
- "version": "4.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/@jest/types": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
@@ -2519,33 +2795,38 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"license": "MIT",
"dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
"@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"license": "MIT",
- "engines": {
- "node": ">=6.0.0"
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
+ "version": "0.3.11",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
@@ -2553,19 +2834,38 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@lodev09/react-native-exify": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@lodev09/react-native-exify/-/react-native-exify-1.0.3.tgz",
+ "integrity": "sha512-AlpkAMLCRENOwLnQLOU/HsI4rMakZVH0+gCT1Ja0H5WBd0jJAwLOQyvTCErzTWFte1BSSe2dTByTEOf2eTnmyQ==",
+ "license": "MIT",
+ "workspaces": [
+ "example"
+ ],
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2574,6 +2874,8 @@
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
@@ -2585,6 +2887,8 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"license": "MIT",
"engines": {
"node": ">= 8"
@@ -2592,6 +2896,8 @@
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
@@ -2602,9 +2908,9 @@
}
},
"node_modules/@react-native-async-storage/async-storage": {
- "version": "1.23.1",
- "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz",
- "integrity": "sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA==",
+ "version": "1.24.0",
+ "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.24.0.tgz",
+ "integrity": "sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==",
"license": "MIT",
"dependencies": {
"merge-options": "^3.0.4"
@@ -2614,9 +2920,9 @@
}
},
"node_modules/@react-native-camera-roll/camera-roll": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-7.8.1.tgz",
- "integrity": "sha512-voVmDlzBS1MVADFk/Vb9GzWzhpoF4ESSjU9qwDNxf/ZA9tirAzX/M0TKcz2V+iFHeRR68cHtZ9tHUhQVG7kJcA==",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-7.10.2.tgz",
+ "integrity": "sha512-XgJQJDFUycmqSX+MH7vTcRigQwEIQNLIu1GvOngCZRwlSV2mF61UzeruSmmHwkBcGnHZFXkKg9fil0FQVfyglw==",
"license": "MIT",
"engines": {
"node": ">= 18.17.0"
@@ -2626,9 +2932,9 @@
}
},
"node_modules/@react-native-clipboard/clipboard": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.14.2.tgz",
- "integrity": "sha512-Mb58f3neB6sM9oOtKYVGLvN8KVByea67OA9ekJ0c9FwdH24INu8RJoA7/fq+PRk+7oxbeamAcEoQPRv0uwbbMw==",
+ "version": "1.16.3",
+ "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.16.3.tgz",
+ "integrity": "sha512-cMIcvoZKIrShzJHEaHbTAp458R9WOv0fB6UyC7Ek4Qk561Ow/DrzmmJmH/rAZg21Z6ixJ4YSdFDC14crqIBmCQ==",
"license": "MIT",
"workspaces": [
"example"
@@ -2650,6 +2956,8 @@
},
"node_modules/@react-native-community/cli": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.9.tgz",
+ "integrity": "sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-clean": "13.6.9",
@@ -2679,6 +2987,8 @@
},
"node_modules/@react-native-community/cli-clean": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz",
+ "integrity": "sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "13.6.9",
@@ -2689,6 +2999,8 @@
},
"node_modules/@react-native-community/cli-config": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.9.tgz",
+ "integrity": "sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "13.6.9",
@@ -2699,8 +3011,19 @@
"joi": "^17.2.1"
}
},
+ "node_modules/@react-native-community/cli-config/node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@react-native-community/cli-debugger-ui": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz",
+ "integrity": "sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw==",
"license": "MIT",
"dependencies": {
"serve-static": "^1.13.1"
@@ -2708,6 +3031,8 @@
},
"node_modules/@react-native-community/cli-doctor": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz",
+ "integrity": "sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-config": "13.6.9",
@@ -2731,13 +3056,38 @@
},
"node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/@react-native-community/cli-doctor/node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@react-native-community/cli-doctor/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": {
"version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^4.1.0"
@@ -2748,6 +3098,8 @@
},
"node_modules/@react-native-community/cli-hermes": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz",
+ "integrity": "sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-platform-android": "13.6.9",
@@ -2758,6 +3110,8 @@
},
"node_modules/@react-native-community/cli-platform-android": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz",
+ "integrity": "sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "13.6.9",
@@ -2770,6 +3124,8 @@
},
"node_modules/@react-native-community/cli-platform-apple": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz",
+ "integrity": "sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "13.6.9",
@@ -2782,6 +3138,8 @@
},
"node_modules/@react-native-community/cli-platform-ios": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz",
+ "integrity": "sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-platform-apple": "13.6.9"
@@ -2789,6 +3147,8 @@
},
"node_modules/@react-native-community/cli-server-api": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz",
+ "integrity": "sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-debugger-ui": "13.6.9",
@@ -2804,6 +3164,8 @@
},
"node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": {
"version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -2817,7 +3179,9 @@
}
},
"node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": {
- "version": "15.0.19",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -2825,6 +3189,8 @@
},
"node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": {
"version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
+ "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
"license": "MIT",
"dependencies": {
"@jest/types": "^26.6.2",
@@ -2838,10 +3204,23 @@
},
"node_modules/@react-native-community/cli-server-api/node_modules/react-is": {
"version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"license": "MIT"
},
+ "node_modules/@react-native-community/cli-server-api/node_modules/ws": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
+ "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
+ "license": "MIT",
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/@react-native-community/cli-tools": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz",
+ "integrity": "sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ==",
"license": "MIT",
"dependencies": {
"appdirsjs": "^1.2.4",
@@ -2859,6 +3238,8 @@
},
"node_modules/@react-native-community/cli-tools/node_modules/find-up": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
@@ -2873,6 +3254,8 @@
},
"node_modules/@react-native-community/cli-tools/node_modules/locate-path": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
@@ -2886,6 +3269,8 @@
},
"node_modules/@react-native-community/cli-tools/node_modules/p-locate": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
@@ -2897,30 +3282,58 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@react-native-community/cli-tools/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@react-native-community/cli-types": {
"version": "13.6.9",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.9.tgz",
+ "integrity": "sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w==",
"license": "MIT",
"dependencies": {
"joi": "^17.2.1"
}
},
- "node_modules/@react-native-community/cli/node_modules/commander": {
- "version": "9.5.0",
+ "node_modules/@react-native-community/cli/node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"license": "MIT",
"engines": {
- "node": "^12.20.0 || >=14"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@react-native-community/cli/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@react-native-community/datetimepicker": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-8.2.0.tgz",
- "integrity": "sha512-qrUPhiBvKGuG9Y+vOqsc56RPFcHa1SU2qbAMT0hfGkoFIj3FodE0VuPVrEa8fgy7kcD5NQmkZIKgHOBLV0+hWg==",
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-8.6.0.tgz",
+ "integrity": "sha512-yxPSqNfxgpGaqHQIpatqe6ykeBdU/1pdsk/G3x01mY2bpTflLpmVTLqFSJYd3MiZzxNZcMs/j1dQakUczSjcYA==",
"license": "MIT",
"dependencies": {
"invariant": "^2.2.4"
},
"peerDependencies": {
- "expo": ">=50.0.0",
+ "expo": ">=52.0.0",
"react": "*",
"react-native": "*",
"react-native-windows": "*"
@@ -2934,22 +3347,24 @@
}
}
},
- "node_modules/@react-native-community/masked-view": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz",
- "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==",
- "deprecated": "Repository was moved to @react-native-masked-view/masked-view",
+ "node_modules/@react-native-masked-view/masked-view": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-masked-view/masked-view/-/masked-view-0.3.2.tgz",
+ "integrity": "sha512-XwuQoW7/GEgWRMovOQtX3A4PrXhyaZm0lVUiY8qJDvdngjLms9Cpdck6SmGAUNqQwcj2EadHC1HwL0bEyoa/SQ==",
"license": "MIT",
"peerDependencies": {
- "react": ">=16.0",
+ "react": ">=16",
"react-native": ">=0.57"
}
},
"node_modules/@react-native-picker/picker": {
- "version": "2.7.7",
- "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.7.7.tgz",
- "integrity": "sha512-CTHthVmx8ujlH/u5AnxLQfsheh/DoEbo+Kbx0HGTlbKVLC1eZ4Kr9jXIIUcwB7JEgOXifdZIPQCsoTc/7GQ0ag==",
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.11.4.tgz",
+ "integrity": "sha512-Kf8h1AMnBo54b1fdiVylP2P/iFcZqzpMYcglC28EEFB1DEnOjsNr6Ucqc+3R9e91vHxEDnhZFbYDmAe79P2gjA==",
"license": "MIT",
+ "workspaces": [
+ "example"
+ ],
"peerDependencies": {
"react": "*",
"react-native": "*"
@@ -2957,6 +3372,8 @@
},
"node_modules/@react-native/assets-registry": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.85.tgz",
+ "integrity": "sha512-59YmIQxfGDw4aP9S/nAM+sjSFdW8fUP6fsqczCcXgL2YVEjyER9XCaUT0J1K+PdHep8pi05KUgIKUds8P3jbmA==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -2964,6 +3381,8 @@
},
"node_modules/@react-native/babel-plugin-codegen": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz",
+ "integrity": "sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q==",
"license": "MIT",
"dependencies": {
"@react-native/codegen": "0.74.85"
@@ -2974,6 +3393,8 @@
},
"node_modules/@react-native/babel-preset": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.85.tgz",
+ "integrity": "sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.20.0",
@@ -3029,6 +3450,8 @@
},
"node_modules/@react-native/codegen": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.85.tgz",
+ "integrity": "sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.20.0",
@@ -3046,29 +3469,10 @@
"@babel/preset-env": "^7.1.6"
}
},
- "node_modules/@react-native/codegen/node_modules/hermes-estree": {
- "version": "0.19.1",
- "license": "MIT"
- },
- "node_modules/@react-native/codegen/node_modules/hermes-parser": {
- "version": "0.19.1",
- "license": "MIT",
- "dependencies": {
- "hermes-estree": "0.19.1"
- }
- },
- "node_modules/@react-native/codegen/node_modules/mkdirp": {
- "version": "0.5.6",
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
"node_modules/@react-native/community-cli-plugin": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.85.tgz",
+ "integrity": "sha512-ODzND33eA2owAY3g9jgCdqB+BjAh8qJ7dvmSotXgrgDYr3MJMpd8gvHTIPe2fg4Kab+wk8uipRhrE0i0RYMwtQ==",
"license": "MIT",
"dependencies": {
"@react-native-community/cli-server-api": "13.6.9",
@@ -3090,6 +3494,8 @@
},
"node_modules/@react-native/debugger-frontend": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz",
+ "integrity": "sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=18"
@@ -3097,6 +3503,8 @@
},
"node_modules/@react-native/dev-middleware": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz",
+ "integrity": "sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w==",
"license": "MIT",
"dependencies": {
"@isaacs/ttlcache": "^1.4.1",
@@ -3119,6 +3527,8 @@
},
"node_modules/@react-native/dev-middleware/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"
@@ -3126,10 +3536,14 @@
},
"node_modules/@react-native/dev-middleware/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/@react-native/dev-middleware/node_modules/open": {
"version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
"license": "MIT",
"dependencies": {
"is-docker": "^2.0.0",
@@ -3142,8 +3556,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@react-native/dev-middleware/node_modules/ws": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
+ "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
+ "license": "MIT",
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/@react-native/eslint-config": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.74.85.tgz",
+ "integrity": "sha512-ylp+lFKfJAtfbb+3kqP7oBL9BMJcxBDIcX6ot16NXTkDXNGDC4YK1ViDkyZvmzTgAIlSCyq/+XZBD7xsNsVy2A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3171,6 +3596,8 @@
},
"node_modules/@react-native/eslint-plugin": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.74.85.tgz",
+ "integrity": "sha512-FtyfgL8EOTddxm+DyjfsInqMtjmU0PWQIRdyET/uob8i6sCxS+HmBzhbtEVZUKwld2kNG1JGgdNLndcEejC81Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3179,6 +3606,8 @@
},
"node_modules/@react-native/gradle-plugin": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.85.tgz",
+ "integrity": "sha512-1VQSLukJzaVMn1MYcs8Weo1nUW8xCas2XU1KuoV7OJPk6xPnEBFJmapmEGP5mWeEy7kcTXJmddEgy1wwW0tcig==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -3186,6 +3615,8 @@
},
"node_modules/@react-native/js-polyfills": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.85.tgz",
+ "integrity": "sha512-gp4Rg9le3lVZeW7Cie6qLfekvRKZuhJ3LKgi1SFB4N154z1wIclypAJXVXgWBsy8JKJfTwRI+sffC4qZDlvzrg==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -3193,6 +3624,8 @@
},
"node_modules/@react-native/metro-babel-transformer": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.85.tgz",
+ "integrity": "sha512-JIrXqEwhTvWPtGArgMptIPGstMdXQIkwSjKVYt+7VC4a9Pw1GurIWanIJheEW6ZuCVvTc0VZkwglFz9JVjzDjA==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.20.0",
@@ -3207,19 +3640,10 @@
"@babel/core": "*"
}
},
- "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-estree": {
- "version": "0.19.1",
- "license": "MIT"
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": {
- "version": "0.19.1",
- "license": "MIT",
- "dependencies": {
- "hermes-estree": "0.19.1"
- }
- },
"node_modules/@react-native/metro-config": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.74.85.tgz",
+ "integrity": "sha512-NQso5jKTdpwn0Ty0qzWb2ia9oc/w6NSno1SEiWer7ThUOu905rdHub0vRFOGFOmqvjwNIhp5GVqZ3Oi3QuGZ5w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3234,15 +3658,21 @@
},
"node_modules/@react-native/normalize-colors": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz",
+ "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==",
"license": "MIT"
},
"node_modules/@react-native/typescript-config": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.85.tgz",
+ "integrity": "sha512-FiMIWSRPCEW6yobrzAL2GR4a5PMyRpJEUsKkN7h5J2dpM/f33FLZdDon/ljIK2iPB4XOt6m1opUxep9ZqjToDg==",
"dev": true,
"license": "MIT"
},
"node_modules/@react-native/virtualized-lists": {
"version": "0.74.85",
+ "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.85.tgz",
+ "integrity": "sha512-jx2Zw0qlZteoQ+0KxRc7s4drsljLBEP534FaNZ950e9+CN9nVkLsV6rigcTjDR8wjKMSBWhKf0C0C3egYz7Ehg==",
"license": "MIT",
"dependencies": {
"invariant": "^2.2.4",
@@ -3263,9 +3693,9 @@
}
},
"node_modules/@react-navigation/core": {
- "version": "6.4.16",
- "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz",
- "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==",
+ "version": "6.4.17",
+ "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.17.tgz",
+ "integrity": "sha512-Nd76EpomzChWAosGqWOYE3ItayhDzIEzzZsT7PfGcRFDgW5miHV2t4MZcq9YIK4tzxZjVVpYbIynOOQQd1e0Cg==",
"license": "MIT",
"dependencies": {
"@react-navigation/routers": "^6.1.9",
@@ -3273,22 +3703,16 @@
"nanoid": "^3.1.23",
"query-string": "^7.1.3",
"react-is": "^16.13.0",
- "use-latest-callback": "^0.1.9"
+ "use-latest-callback": "^0.2.1"
},
"peerDependencies": {
"react": "*"
}
},
- "node_modules/@react-navigation/core/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
- },
"node_modules/@react-navigation/elements": {
- "version": "1.3.30",
- "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz",
- "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==",
+ "version": "1.3.31",
+ "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.31.tgz",
+ "integrity": "sha512-bUzP4Awlljx5RKEExw8WYtif8EuQni2glDaieYROKTnaxsu9kEIA515sXQgUDZU4Ob12VoL7+z70uO3qrlfXcQ==",
"license": "MIT",
"peerDependencies": {
"@react-navigation/native": "^6.0.0",
@@ -3298,9 +3722,9 @@
}
},
"node_modules/@react-navigation/material-top-tabs": {
- "version": "6.6.13",
- "resolved": "https://registry.npmjs.org/@react-navigation/material-top-tabs/-/material-top-tabs-6.6.13.tgz",
- "integrity": "sha512-utwS0SLl/dq6+PHWGOz4rNNkYzveqvbffXJ6TIrUdaWDDysjBa4btHUOVvXfNADIK4LafmbuRi0xA/zd6HoCPQ==",
+ "version": "6.6.14",
+ "resolved": "https://registry.npmjs.org/@react-navigation/material-top-tabs/-/material-top-tabs-6.6.14.tgz",
+ "integrity": "sha512-kfNQt3BInQusEc8A+PDWaKmRQNaCrSqngcOQwUe1uNizJdZJEFdfaInivtBFW2LcQqtzgIHK/am2TgK0Pos6og==",
"license": "MIT",
"dependencies": {
"color": "^4.2.3",
@@ -3315,12 +3739,12 @@
}
},
"node_modules/@react-navigation/native": {
- "version": "6.1.17",
- "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz",
- "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==",
+ "version": "6.1.18",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.18.tgz",
+ "integrity": "sha512-mIT9MiL/vMm4eirLcmw2h6h/Nm5FICtnYSdohq4vTLA2FF/6PNhByM7s8ffqoVfE5L0uAa6Xda1B7oddolUiGg==",
"license": "MIT",
"dependencies": {
- "@react-navigation/core": "^6.4.16",
+ "@react-navigation/core": "^6.4.17",
"escape-string-regexp": "^4.0.0",
"fast-deep-equal": "^3.1.3",
"nanoid": "^3.1.23"
@@ -3340,12 +3764,12 @@
}
},
"node_modules/@react-navigation/stack": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.4.0.tgz",
- "integrity": "sha512-Jx7fm8x7zSUC6ggUb0VnvPuaIXkVPHckiY+e50mjrIRK4xAgnaLp6crHWYGmXjfi7ahaKL00o76ZgpgkwKw6zg==",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.4.1.tgz",
+ "integrity": "sha512-upMEHOKMtuMu4c9gmoPlO/JqI6mDlSqwXg1aXKOTQLXAF8H5koOLRfrmi7AkdiE9A7lDXWUAZoGuD9O88cYvDQ==",
"license": "MIT",
"dependencies": {
- "@react-navigation/elements": "^1.3.30",
+ "@react-navigation/elements": "^1.3.31",
"color": "^4.2.3",
"warn-once": "^0.1.0"
},
@@ -3359,18 +3783,20 @@
}
},
"node_modules/@reduxjs/toolkit": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.6.tgz",
- "integrity": "sha512-kH0r495c5z1t0g796eDQAkYbEQ3a1OLYN9o8jQQVZyKyw367pfRGS+qZLkHYvFHiUUdafpoSlQ2QYObIApjPWA==",
+ "version": "2.11.2",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz",
+ "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==",
"license": "MIT",
"dependencies": {
- "immer": "^10.0.3",
+ "@standard-schema/spec": "^1.0.0",
+ "@standard-schema/utils": "^0.3.0",
+ "immer": "^11.0.0",
"redux": "^5.0.1",
"redux-thunk": "^3.1.0",
"reselect": "^5.1.0"
},
"peerDependencies": {
- "react": "^16.9.0 || ^17.0.0 || ^18",
+ "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
"react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
},
"peerDependenciesMeta": {
@@ -3384,6 +3810,8 @@
},
"node_modules/@rnx-kit/chromium-edge-launcher": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz",
+ "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==",
"license": "Apache-2.0",
"dependencies": {
"@types/node": "^18.0.0",
@@ -3398,78 +3826,122 @@
}
},
"node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": {
- "version": "18.19.39",
+ "version": "18.19.130",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz",
+ "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==",
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
},
+ "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "license": "MIT"
+ },
"node_modules/@sentry-internal/feedback": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.117.0.tgz",
- "integrity": "sha512-4X+NnnY17W74TymgLFH7/KPTVYpEtoMMJh8HzVdCmHTOE6j32XKBeBMRaXBhmNYmEgovgyRKKf2KvtSfgw+V1Q==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.119.1.tgz",
+ "integrity": "sha512-EPyW6EKZmhKpw/OQUPRkTynXecZdYl4uhZwdZuGqnGMAzswPOgQvFrkwsOuPYvoMfXqCH7YuRqyJrox3uBOrTA==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry/core": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@sentry-internal/replay-canvas": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.117.0.tgz",
- "integrity": "sha512-7hjIhwEcoosr+BIa0AyEssB5xwvvlzUpvD5fXu4scd3I3qfX8gdnofO96a8r+LrQm3bSj+eN+4TfKEtWb7bU5A==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.119.1.tgz",
+ "integrity": "sha512-O/lrzENbMhP/UDr7LwmfOWTjD9PLNmdaCF408Wx8SDuj7Iwc+VasGfHg7fPH4Pdr4nJON6oh+UqoV4IoG05u+A==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "7.117.0",
- "@sentry/replay": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry/core": "7.119.1",
+ "@sentry/replay": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@sentry-internal/tracing": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.117.0.tgz",
- "integrity": "sha512-fAIyijNvKBZNA12IcKo+dOYDRTNrzNsdzbm3DP37vJRKVQu19ucqP4Y6InvKokffDP2HZPzFPDoGXYuXkDhUZg==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.119.1.tgz",
+ "integrity": "sha512-cI0YraPd6qBwvUA3wQdPGTy8PzAoK0NZiaTN1LM3IczdPegehWOaEG5GVTnpGnTsmBAzn1xnBXNBhgiU4dgcrQ==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry/core": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
},
"engines": {
"node": ">=8"
}
},
+ "node_modules/@sentry/babel-plugin-component-annotate": {
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.20.1.tgz",
+ "integrity": "sha512-4mhEwYTK00bIb5Y9UWIELVUfru587Vaeg0DQGswv4aIRHIiMKLyNqCEejaaybQ/fNChIZOKmvyqXk430YVd7Qg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/@sentry/browser": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.117.0.tgz",
- "integrity": "sha512-29X9HlvDEKIaWp6XKlNPPSNND0U6P/ede5WA2nVHfs1zJLWdZ7/ijuMc0sH/CueEkqHe/7gt94hBcI7HOU/wSw==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.119.1.tgz",
+ "integrity": "sha512-aMwAnFU4iAPeLyZvqmOQaEDHt/Dkf8rpgYeJ0OEi50dmP6AjG+KIAMCXU7CYCCQDn70ITJo8QD5+KzCoZPYz0A==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry-internal/feedback": "7.119.1",
+ "@sentry-internal/replay-canvas": "7.119.1",
+ "@sentry-internal/tracing": "7.119.1",
+ "@sentry/core": "7.119.1",
+ "@sentry/integrations": "7.119.1",
+ "@sentry/replay": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sentry/browser/node_modules/@sentry/integrations": {
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.1.tgz",
+ "integrity": "sha512-CGmLEPnaBqbUleVqrmGYjRjf5/OwjUXo57I9t0KKWViq81mWnYhaUhRZWFNoCNQHns+3+GPCOMvl0zlawt+evw==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/feedback": "7.117.0",
- "@sentry-internal/replay-canvas": "7.117.0",
- "@sentry-internal/tracing": "7.117.0",
- "@sentry/core": "7.117.0",
- "@sentry/integrations": "7.117.0",
- "@sentry/replay": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry/core": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1",
+ "localforage": "^1.8.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/cli": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.31.2.tgz",
- "integrity": "sha512-2aKyUx6La2P+pplL8+2vO67qJ+c1C79KYWAyQBE0JIT5kvKK9JpwtdNoK1F0/2mRpwhhYPADCz3sVIRqmL8cQQ==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.37.0.tgz",
+ "integrity": "sha512-fM3V4gZRJR/s8lafc3O07hhOYRnvkySdPkvL/0e0XW0r+xRwqIAgQ5ECbsZO16A5weUiXVSf03ztDL1FcmbJCQ==",
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3486,19 +3958,19 @@
"node": ">= 10"
},
"optionalDependencies": {
- "@sentry/cli-darwin": "2.31.2",
- "@sentry/cli-linux-arm": "2.31.2",
- "@sentry/cli-linux-arm64": "2.31.2",
- "@sentry/cli-linux-i686": "2.31.2",
- "@sentry/cli-linux-x64": "2.31.2",
- "@sentry/cli-win32-i686": "2.31.2",
- "@sentry/cli-win32-x64": "2.31.2"
+ "@sentry/cli-darwin": "2.37.0",
+ "@sentry/cli-linux-arm": "2.37.0",
+ "@sentry/cli-linux-arm64": "2.37.0",
+ "@sentry/cli-linux-i686": "2.37.0",
+ "@sentry/cli-linux-x64": "2.37.0",
+ "@sentry/cli-win32-i686": "2.37.0",
+ "@sentry/cli-win32-x64": "2.37.0"
}
},
"node_modules/@sentry/cli-darwin": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.31.2.tgz",
- "integrity": "sha512-BHA/JJXj1dlnoZQdK4efRCtHRnbBfzbIZUKAze7oRR1RfNqERI84BVUQeKateD3jWSJXQfEuclIShc61KOpbKw==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.37.0.tgz",
+ "integrity": "sha512-CsusyMvO0eCPSN7H+sKHXS1pf637PWbS4rZak/7giz/z31/6qiXmeMlcL3f9lLZKtFPJmXVFO9uprn1wbBVF8A==",
"license": "BSD-3-Clause",
"optional": true,
"os": [
@@ -3509,9 +3981,9 @@
}
},
"node_modules/@sentry/cli-linux-arm": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.31.2.tgz",
- "integrity": "sha512-W8k5mGYYZz/I/OxZH65YAK7dCkQAl+wbuoASGOQjUy5VDgqH0QJ8kGJufXvFPM+f3ZQGcKAnVsZ6tFqZXETBAw==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.37.0.tgz",
+ "integrity": "sha512-Dz0qH4Yt+gGUgoVsqVt72oDj4VQynRF1QB1/Sr8g76Vbi+WxWZmUh0iFwivYVwWxdQGu/OQrE0tx946HToCRyA==",
"cpu": [
"arm"
],
@@ -3526,9 +3998,9 @@
}
},
"node_modules/@sentry/cli-linux-arm64": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.31.2.tgz",
- "integrity": "sha512-FLVKkJ/rWvPy/ka7OrUdRW63a/z8HYI1Gt8Pr6rWs50hb7YJja8lM8IO10tYmcFE/tODICsnHO9HTeUg2g2d1w==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.37.0.tgz",
+ "integrity": "sha512-2vzUWHLZ3Ct5gpcIlfd/2Qsha+y9M8LXvbZE26VxzYrIkRoLAWcnClBv8m4XsHLMURYvz3J9QSZHMZHSO7kAzw==",
"cpu": [
"arm64"
],
@@ -3543,9 +4015,9 @@
}
},
"node_modules/@sentry/cli-linux-i686": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.31.2.tgz",
- "integrity": "sha512-A64QtzaPi3MYFpZ+Fwmi0mrSyXgeLJ0cWr4jdeTGrzNpeowSteKgd6tRKU+LVq0k5shKE7wdnHk+jXnoajulMA==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.37.0.tgz",
+ "integrity": "sha512-MHRLGs4t/CQE1pG+mZBQixyWL6xDZfNalCjO8GMcTTbZFm44S3XRHfYJZNVCgdtnUP7b6OHGcu1v3SWE10LcwQ==",
"cpu": [
"x86",
"ia32"
@@ -3561,9 +4033,9 @@
}
},
"node_modules/@sentry/cli-linux-x64": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.31.2.tgz",
- "integrity": "sha512-YL/r+15R4mOEiU3mzn7iFQOeFEUB6KxeKGTTrtpeOGynVUGIdq4nV5rHow5JDbIzOuBS3SpOmcIMluvo1NCh0g==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.37.0.tgz",
+ "integrity": "sha512-k76ClefKZaDNJZU/H3mGeR8uAzAGPzDRG/A7grzKfBeyhP3JW09L7Nz9IQcSjCK+xr399qLhM2HFCaPWQ6dlMw==",
"cpu": [
"x64"
],
@@ -3578,9 +4050,9 @@
}
},
"node_modules/@sentry/cli-win32-i686": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.31.2.tgz",
- "integrity": "sha512-Az/2bmW+TFI059RE0mSBIxTBcoShIclz7BDebmIoCkZ+retrwAzpmBnBCDAHow+Yi43utOow+3/4idGa2OxcLw==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.37.0.tgz",
+ "integrity": "sha512-FFyi5RNYQQkEg4GkP2f3BJcgQn0F4fjFDMiWkjCkftNPXQG+HFUEtrGsWr6mnHPdFouwbYg3tEPUWNxAoypvTw==",
"cpu": [
"x86",
"ia32"
@@ -3595,9 +4067,9 @@
}
},
"node_modules/@sentry/cli-win32-x64": {
- "version": "2.31.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.31.2.tgz",
- "integrity": "sha512-XIzyRnJu539NhpFa+JYkotzVwv3NrZ/4GfHB/JWA2zReRvsk39jJG8D5HOmm0B9JA63QQT7Dt39RW8g3lkmb6w==",
+ "version": "2.37.0",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.37.0.tgz",
+ "integrity": "sha512-nSMj4OcfQmyL+Tu/jWCJwhKCXFsCZW1MUk6wjjQlRt9SDLfgeapaMlK1ZvT1eZv5ZH6bj3qJfefwj4U8160uOA==",
"cpu": [
"x64"
],
@@ -3607,61 +4079,129 @@
"win32"
],
"engines": {
- "node": ">=10"
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/core": {
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.1.tgz",
+ "integrity": "sha512-YUNnH7O7paVd+UmpArWCPH4Phlb5LwrkWVqzFWqL3xPyCcTSof2RL8UmvpkTjgYJjJ+NDfq5mPFkqv3aOEn5Sw==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sentry/hub": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.119.0.tgz",
+ "integrity": "sha512-183h5B/rZosLxpB+ZYOvFdHk0rwZbKskxqKFtcyPbDAfpCUgCass41UTqyxF6aH1qLgCRxX8GcLRF7frIa/SOg==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/core": "7.119.0",
+ "@sentry/types": "7.119.0",
+ "@sentry/utils": "7.119.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sentry/hub/node_modules/@sentry/core": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.0.tgz",
+ "integrity": "sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/types": "7.119.0",
+ "@sentry/utils": "7.119.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sentry/hub/node_modules/@sentry/types": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.0.tgz",
+ "integrity": "sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sentry/hub/node_modules/@sentry/utils": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.0.tgz",
+ "integrity": "sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/types": "7.119.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@sentry/integrations": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.0.tgz",
+ "integrity": "sha512-OHShvtsRW0A+ZL/ZbMnMqDEtJddPasndjq+1aQXw40mN+zeP7At/V1yPZyFaURy86iX7Ucxw5BtmzuNy7hLyTA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/core": "7.119.0",
+ "@sentry/types": "7.119.0",
+ "@sentry/utils": "7.119.0",
+ "localforage": "^1.8.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@sentry/core": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.117.0.tgz",
- "integrity": "sha512-1XZ4/d/DEwnfM2zBMloXDwX+W7s76lGKQMgd8bwgPJZjjEztMJ7X0uopKAGwlQcjn242q+hsCBR6C+fSuI5kvg==",
+ "node_modules/@sentry/integrations/node_modules/@sentry/core": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.0.tgz",
+ "integrity": "sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==",
"license": "MIT",
"dependencies": {
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry/types": "7.119.0",
+ "@sentry/utils": "7.119.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/@sentry/hub": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.117.0.tgz",
- "integrity": "sha512-pQrXnbzsRHCUsVIqz/sZ0vggnxuuHqsmyjoy2Ha1qn1Ya4QbyAWEEGoZTnZx6I/Vt3dzVvRnR3YCywatdkaFxg==",
+ "node_modules/@sentry/integrations/node_modules/@sentry/types": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.0.tgz",
+ "integrity": "sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==",
"license": "MIT",
- "dependencies": {
- "@sentry/core": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
- },
"engines": {
"node": ">=8"
}
},
- "node_modules/@sentry/integrations": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.117.0.tgz",
- "integrity": "sha512-U3suSZysmU9EiQqg0ga5CxveAyNbi9IVdsapMDq5EQGNcVDvheXtULs+BOc11WYP3Kw2yWB38VDqLepfc/Fg2g==",
+ "node_modules/@sentry/integrations/node_modules/@sentry/utils": {
+ "version": "7.119.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.0.tgz",
+ "integrity": "sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0",
- "localforage": "^1.8.1"
+ "@sentry/types": "7.119.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/react": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.117.0.tgz",
- "integrity": "sha512-aK+yaEP2esBhaczGU96Y7wkqB4umSIlRAzobv7ER88EGHzZulRaocTpQO8HJJGDHm4D8rD+E893BHnghkoqp4Q==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.119.1.tgz",
+ "integrity": "sha512-Bri314LnSVm16K3JATgn3Zsq6Uj3M/nIjdUb3nggBw0BMlFWMsyFjUCfmCio5d80KJK/lUjOIxRjzu79M6jOzQ==",
"license": "MIT",
"dependencies": {
- "@sentry/browser": "7.117.0",
- "@sentry/core": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0",
+ "@sentry/browser": "7.119.1",
+ "@sentry/core": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
@@ -3672,19 +4212,20 @@
}
},
"node_modules/@sentry/react-native": {
- "version": "5.24.1",
- "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-5.24.1.tgz",
- "integrity": "sha512-+BB48ixYn+brEntbDX49V4mUivrGT+SJUzbIN7nOsd3kml619erp5bxETD4ZK6diw0Fu2LoVdnY43TICF4kleQ==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@sentry/react-native/-/react-native-5.36.0.tgz",
+ "integrity": "sha512-MPTN5Wb6wEplIVydh2oXOdLJYqCAWKvncN5TBPN5OG8XdCsDqF7LyH2Sz+SK2T3hMPKESl3StAMhrrNSmHDbNg==",
"license": "MIT",
"dependencies": {
- "@sentry/browser": "7.117.0",
- "@sentry/cli": "2.31.2",
- "@sentry/core": "7.117.0",
- "@sentry/hub": "7.117.0",
- "@sentry/integrations": "7.117.0",
- "@sentry/react": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry/babel-plugin-component-annotate": "2.20.1",
+ "@sentry/browser": "7.119.1",
+ "@sentry/cli": "2.37.0",
+ "@sentry/core": "7.119.1",
+ "@sentry/hub": "7.119.0",
+ "@sentry/integrations": "7.119.0",
+ "@sentry/react": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
},
"bin": {
"sentry-expo-upload-sourcemaps": "scripts/expo-upload-sourcemaps.js"
@@ -3701,49 +4242,49 @@
}
},
"node_modules/@sentry/replay": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.117.0.tgz",
- "integrity": "sha512-V4DfU+x4UsA4BsufbQ8jHYa5H0q5PYUgso2X1PR31g1fpx7yiYguSmCfz1UryM6KkH92dfTnqXapDB44kXOqzQ==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.119.1.tgz",
+ "integrity": "sha512-4da+ruMEipuAZf35Ybt2StBdV1S+oJbSVccGpnl9w6RoeQoloT4ztR6ML3UcFDTXeTPT1FnHWDCyOfST0O7XMw==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/tracing": "7.117.0",
- "@sentry/core": "7.117.0",
- "@sentry/types": "7.117.0",
- "@sentry/utils": "7.117.0"
+ "@sentry-internal/tracing": "7.119.1",
+ "@sentry/core": "7.119.1",
+ "@sentry/types": "7.119.1",
+ "@sentry/utils": "7.119.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@sentry/types": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.117.0.tgz",
- "integrity": "sha512-5dtdulcUttc3F0Te7ekZmpSp/ebt/CA71ELx0uyqVGjWsSAINwskFD77sdcjqvZWek//WjiYX1+GRKlpJ1QqsA==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.1.tgz",
+ "integrity": "sha512-4G2mcZNnYzK3pa2PuTq+M2GcwBRY/yy1rF+HfZU+LAPZr98nzq2X3+mJHNJoobeHRkvVh7YZMPi4ogXiIS5VNQ==",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/utils": {
- "version": "7.117.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.117.0.tgz",
- "integrity": "sha512-KkcLY8643SGBiDyPvMQOubBkwVX5IPknMHInc7jYC8pDVncGp7C65Wi506bCNPpKCWspUd/0VDNWOOen51/qKA==",
+ "version": "7.119.1",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.1.tgz",
+ "integrity": "sha512-ju/Cvyeu/vkfC5/XBV30UNet5kLEicZmXSyuLwZu95hEbL+foPdxN+re7pCI/eNqfe3B2vz7lvz5afLVOlQ2Hg==",
"license": "MIT",
"dependencies": {
- "@sentry/types": "7.117.0"
+ "@sentry/types": "7.119.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@shopify/flash-list": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@shopify/flash-list/-/flash-list-1.7.0.tgz",
- "integrity": "sha512-Uys8mWTb0Y34Ts1hD97KrVFbFH9oY7qbj/u1oSrAS5PJAackDFbndUEVuTYyXSyWxHY0sRutF5HgS1yNdhj+0A==",
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@shopify/flash-list/-/flash-list-1.8.3.tgz",
+ "integrity": "sha512-vXuj6JyuMjONVOXjEhWFeaONPuWN/53Cl2LeyeM8TZ0JzUcNU+BE6iyga1/yyJeDf0K7YPgAE/PcUX2+DM1LiA==",
"license": "MIT",
"dependencies": {
- "recyclerlistview": "4.2.1",
- "tslib": "2.6.3"
+ "recyclerlistview": "4.2.3",
+ "tslib": "2.8.1"
},
"peerDependencies": {
"@babel/runtime": "*",
@@ -3753,6 +4294,8 @@
},
"node_modules/@sideway/address": {
"version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
+ "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0"
@@ -3760,18 +4303,26 @@
},
"node_modules/@sideway/formula": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
+ "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
"license": "BSD-3-Clause"
},
"node_modules/@sideway/pinpoint": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
+ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
"license": "BSD-3-Clause"
},
"node_modules/@sinclair/typebox": {
- "version": "0.27.8",
+ "version": "0.27.10",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz",
+ "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==",
"license": "MIT"
},
"node_modules/@sinonjs/commons": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"license": "BSD-3-Clause",
"dependencies": {
"type-detect": "4.0.8"
@@ -3779,13 +4330,29 @@
},
"node_modules/@sinonjs/fake-timers": {
"version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.0"
}
},
+ "node_modules/@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+ "license": "MIT"
+ },
+ "node_modules/@standard-schema/utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
+ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
+ "license": "MIT"
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3797,7 +4364,9 @@
}
},
"node_modules/@types/babel__generator": {
- "version": "7.6.8",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3806,6 +4375,8 @@
},
"node_modules/@types/babel__template": {
"version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3814,21 +4385,25 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.6",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.20.7"
+ "@babel/types": "^7.28.2"
}
},
"node_modules/@types/geojson": {
- "version": "7946.0.14",
- "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz",
- "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==",
+ "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/graceful-fs": {
"version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3836,27 +4411,33 @@
}
},
"node_modules/@types/hammerjs": {
- "version": "2.0.45",
- "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz",
- "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==",
+ "version": "2.0.46",
+ "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz",
+ "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==",
"license": "MIT"
},
"node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
- "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz",
+ "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==",
"license": "MIT",
"dependencies": {
- "@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*"
}
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"license": "MIT"
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-coverage": "*"
@@ -3864,6 +4445,8 @@
},
"node_modules/@types/istanbul-reports": {
"version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-report": "*"
@@ -3871,60 +4454,80 @@
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "20.14.10",
+ "version": "25.3.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
+ "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
"license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~7.18.0"
}
},
"node_modules/@types/node-forge": {
- "version": "1.3.11",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz",
+ "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/prop-types": {
- "version": "15.7.12",
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "18.3.3",
+ "version": "18.3.28",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz",
+ "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
- "csstype": "^3.0.2"
+ "csstype": "^3.2.2"
}
},
"node_modules/@types/react-test-renderer": {
- "version": "18.3.0",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
+ "integrity": "sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/react": "*"
+ "@types/react": "^18"
}
},
"node_modules/@types/semver": {
- "version": "7.5.8",
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/stack-utils": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"license": "MIT"
},
"node_modules/@types/use-sync-external-store": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
- "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==",
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
"license": "MIT"
},
"node_modules/@types/yargs": {
- "version": "17.0.32",
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -3932,18 +4535,22 @@
},
"node_modules/@types/yargs-parser": {
"version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
+ "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/type-utils": "7.15.0",
- "@typescript-eslint/utils": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/type-utils": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -3967,14 +4574,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
+ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/typescript-estree": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
"debug": "^4.3.4"
},
"engines": {
@@ -3994,12 +4603,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
+ "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0"
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -4010,12 +4621,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
+ "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.15.0",
- "@typescript-eslint/utils": "7.15.0",
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -4036,7 +4649,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+ "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4048,12 +4663,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
+ "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -4074,37 +4691,30 @@
}
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=10"
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/typescript-estree": "7.15.0"
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -4118,11 +4728,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.15.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
+ "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "7.15.0",
+ "@typescript-eslint/types": "7.18.0",
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
@@ -4133,13 +4745,30 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"dev": true,
"license": "ISC"
},
"node_modules/abort-controller": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"license": "MIT",
"dependencies": {
"event-target-shim": "^5.0.0"
@@ -4150,6 +4779,8 @@
},
"node_modules/accepts": {
"version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"license": "MIT",
"dependencies": {
"mime-types": "~2.1.34",
@@ -4160,7 +4791,9 @@
}
},
"node_modules/acorn": {
- "version": "8.12.1",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -4171,6 +4804,8 @@
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -4190,7 +4825,9 @@
}
},
"node_modules/ajv": {
- "version": "6.12.6",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4206,10 +4843,14 @@
},
"node_modules/anser": {
"version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
+ "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==",
"license": "MIT"
},
"node_modules/ansi-escapes": {
"version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4224,6 +4865,8 @@
},
"node_modules/ansi-escapes/node_modules/type-fest": {
"version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -4235,6 +4878,8 @@
},
"node_modules/ansi-fragments": {
"version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz",
+ "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==",
"license": "MIT",
"dependencies": {
"colorette": "^1.0.7",
@@ -4244,6 +4889,8 @@
},
"node_modules/ansi-fragments/node_modules/ansi-regex": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -4251,6 +4898,8 @@
},
"node_modules/ansi-fragments/node_modules/strip-ansi": {
"version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^4.1.0"
@@ -4261,6 +4910,8 @@
},
"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==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -4268,6 +4919,8 @@
},
"node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -4279,26 +4932,10 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/ansi-styles/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/ansi-styles/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/anymatch": {
"version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
@@ -4310,22 +4947,28 @@
},
"node_modules/appdirsjs": {
"version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz",
+ "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==",
"license": "MIT"
},
"node_modules/argparse": {
"version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/array-buffer-byte-length": {
- "version": "1.0.1",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.5",
- "is-array-buffer": "^3.0.4"
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
},
"engines": {
"node": ">= 0.4"
@@ -4335,16 +4978,20 @@
}
},
"node_modules/array-includes": {
- "version": "3.1.8",
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
+ "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "is-string": "^1.0.7"
+ "es-abstract": "^1.24.0",
+ "es-object-atoms": "^1.1.1",
+ "get-intrinsic": "^1.3.0",
+ "is-string": "^1.1.1",
+ "math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -4355,6 +5002,8 @@
},
"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": {
@@ -4363,6 +5012,8 @@
},
"node_modules/array.prototype.findlast": {
"version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4381,14 +5032,16 @@
}
},
"node_modules/array.prototype.flat": {
- "version": "1.3.2",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -4398,14 +5051,16 @@
}
},
"node_modules/array.prototype.flatmap": {
- "version": "1.3.2",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -4414,19 +5069,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/array.prototype.toreversed": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- }
- },
"node_modules/array.prototype.tosorted": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4441,18 +5087,19 @@
}
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.3",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.8",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.2.1",
- "get-intrinsic": "^1.2.3",
- "is-array-buffer": "^3.0.4",
- "is-shared-array-buffer": "^1.0.2"
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
},
"engines": {
"node": ">= 0.4"
@@ -4463,10 +5110,14 @@
},
"node_modules/asap": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
"license": "MIT"
},
"node_modules/ast-types": {
"version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz",
+ "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.1"
@@ -4477,13 +5128,27 @@
},
"node_modules/astral-regex": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
+ "node_modules/async-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/async-limiter": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"license": "MIT"
},
"node_modules/asynckit": {
@@ -4494,6 +5159,8 @@
},
"node_modules/available-typed-arrays": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4507,18 +5174,20 @@
}
},
"node_modules/axios": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
- "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz",
+ "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
"license": "MIT",
"dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.0",
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/babel-core": {
"version": "7.0.0-bridge.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
"license": "MIT",
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -4526,6 +5195,8 @@
},
"node_modules/babel-jest": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4546,6 +5217,8 @@
},
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -4561,6 +5234,8 @@
},
"node_modules/babel-plugin-jest-hoist": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4574,40 +5249,40 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.11",
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz",
+ "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==",
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.6",
"semver": "^6.3.1"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.10.4",
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz",
+ "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.1",
- "core-js-compat": "^3.36.1"
+ "@babel/helper-define-polyfill-provider": "^0.6.6",
+ "core-js-compat": "^3.48.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.2",
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz",
+ "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==",
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.2"
+ "@babel/helper-define-polyfill-provider": "^0.6.6"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -4615,35 +5290,44 @@
},
"node_modules/babel-plugin-transform-flow-enums": {
"version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz",
+ "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==",
"license": "MIT",
"dependencies": {
"@babel/plugin-syntax-flow": "^7.12.1"
}
},
"node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
},
"peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@babel/core": "^7.0.0 || ^8.0.0-0"
}
},
"node_modules/babel-preset-jest": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4659,10 +5343,14 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
@@ -4679,8 +5367,22 @@
],
"license": "MIT"
},
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
+ "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/bl": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"license": "MIT",
"dependencies": {
"buffer": "^5.5.0",
@@ -4688,43 +5390,6 @@
"readable-stream": "^3.4.0"
}
},
- "node_modules/bl/node_modules/readable-stream": {
- "version": "3.6.2",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/bl/node_modules/safe-buffer": {
- "version": "5.2.1",
- "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/bl/node_modules/string_decoder": {
- "version": "1.3.0",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -4732,15 +5397,19 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
@@ -4750,7 +5419,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.23.1",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"funding": [
{
"type": "opencollective",
@@ -4767,10 +5438,11 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001629",
- "electron-to-chromium": "^1.4.796",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.16"
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
},
"bin": {
"browserslist": "cli.js"
@@ -4781,6 +5453,8 @@
},
"node_modules/bser": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"license": "Apache-2.0",
"dependencies": {
"node-int64": "^0.4.0"
@@ -4788,6 +5462,8 @@
},
"node_modules/buffer": {
"version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"funding": [
{
"type": "github",
@@ -4810,25 +5486,60 @@
},
"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/bytes": {
- "version": "3.0.0",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/call-bind": {
- "version": "1.0.7",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
"es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
@@ -4839,6 +5550,8 @@
},
"node_modules/caller-callsite": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==",
"license": "MIT",
"dependencies": {
"callsites": "^2.0.0"
@@ -4849,6 +5562,8 @@
},
"node_modules/caller-callsite/node_modules/callsites": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -4856,6 +5571,8 @@
},
"node_modules/caller-path": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==",
"license": "MIT",
"dependencies": {
"caller-callsite": "^2.0.0"
@@ -4866,6 +5583,8 @@
},
"node_modules/callsites": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4874,13 +5593,17 @@
},
"node_modules/camelcase": {
"version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001640",
+ "version": "1.0.30001775",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
+ "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"funding": [
{
"type": "opencollective",
@@ -4899,6 +5622,8 @@
},
"node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -4913,6 +5638,8 @@
},
"node_modules/char-regex": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4921,6 +5648,8 @@
},
"node_modules/chrome-launcher": {
"version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz",
+ "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==",
"license": "Apache-2.0",
"dependencies": {
"@types/node": "*",
@@ -4937,6 +5666,8 @@
},
"node_modules/ci-info": {
"version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"funding": [
{
"type": "github",
@@ -4949,12 +5680,16 @@
}
},
"node_modules/cjs-module-lexer": {
- "version": "1.3.1",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
"dev": true,
"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==",
"license": "MIT",
"dependencies": {
"restore-cursor": "^3.1.0"
@@ -4965,6 +5700,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==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -4975,6 +5712,8 @@
},
"node_modules/cliui": {
"version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
@@ -4987,6 +5726,8 @@
},
"node_modules/clone": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"license": "MIT",
"engines": {
"node": ">=0.8"
@@ -4994,6 +5735,8 @@
},
"node_modules/clone-deep": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4",
@@ -5006,6 +5749,8 @@
},
"node_modules/co": {
"version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5014,7 +5759,9 @@
}
},
"node_modules/collect-v8-coverage": {
- "version": "1.0.2",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"dev": true,
"license": "MIT"
},
@@ -5032,14 +5779,21 @@
}
},
"node_modules/color-convert": {
- "version": "1.9.3",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT",
"dependencies": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
"node_modules/color-name": {
- "version": "1.1.3",
+ "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-string": {
@@ -5052,26 +5806,10 @@
"simple-swizzle": "^0.2.2"
}
},
- "node_modules/color/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color/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/colorette": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+ "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
"license": "MIT"
},
"node_modules/combined-stream": {
@@ -5088,18 +5826,29 @@
},
"node_modules/command-exists": {
"version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
"license": "MIT"
},
"node_modules/commander": {
- "version": "2.20.3",
- "license": "MIT"
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
},
"node_modules/commondir": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"license": "MIT"
},
"node_modules/compressible": {
"version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"license": "MIT",
"dependencies": {
"mime-db": ">= 1.43.0 < 2"
@@ -5109,15 +5858,17 @@
}
},
"node_modules/compression": {
- "version": "1.7.4",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
+ "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
"license": "MIT",
"dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
+ "bytes": "3.1.2",
+ "compressible": "~2.0.18",
"debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
+ "negotiator": "~0.6.4",
+ "on-headers": "~1.1.0",
+ "safe-buffer": "5.2.1",
"vary": "~1.1.2"
},
"engines": {
@@ -5126,6 +5877,8 @@
},
"node_modules/compression/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"
@@ -5133,14 +5886,29 @@
},
"node_modules/compression/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/compression/node_modules/negotiator": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"license": "MIT"
},
"node_modules/connect": {
"version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
@@ -5154,6 +5922,8 @@
},
"node_modules/connect/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"
@@ -5161,17 +5931,23 @@
},
"node_modules/connect/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/convert-source-map": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"license": "MIT"
},
"node_modules/core-js-compat": {
- "version": "3.37.1",
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz",
+ "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0"
+ "browserslist": "^4.28.1"
},
"funding": {
"type": "opencollective",
@@ -5180,10 +5956,14 @@
},
"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": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
"license": "MIT",
"dependencies": {
"import-fresh": "^2.0.0",
@@ -5195,8 +5975,45 @@
"node": ">=4"
}
},
+ "node_modules/cosmiconfig/node_modules/import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==",
+ "license": "MIT",
+ "dependencies": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+ "license": "MIT",
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/create-jest": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5226,7 +6043,9 @@
}
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -5238,9 +6057,9 @@
}
},
"node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
"license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0",
@@ -5267,9 +6086,9 @@
}
},
"node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"license": "BSD-2-Clause",
"engines": {
"node": ">= 6"
@@ -5279,17 +6098,22 @@
}
},
"node_modules/csstype": {
- "version": "3.1.3",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/data-view-buffer": {
- "version": "1.0.1",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.6",
+ "call-bound": "^1.0.3",
"es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
+ "is-data-view": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -5299,27 +6123,31 @@
}
},
"node_modules/data-view-byte-length": {
- "version": "1.0.1",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bound": "^1.0.3",
"es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
+ "is-data-view": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/inspect-js"
}
},
"node_modules/data-view-byte-offset": {
- "version": "1.0.0",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.6",
+ "call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.1"
},
@@ -5331,14 +6159,18 @@
}
},
"node_modules/dayjs": {
- "version": "1.11.11",
+ "version": "1.11.19",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
+ "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
"license": "MIT"
},
"node_modules/debug": {
- "version": "4.3.5",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -5351,6 +6183,8 @@
},
"node_modules/decamelize": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -5366,7 +6200,9 @@
}
},
"node_modules/dedent": {
- "version": "1.5.3",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz",
+ "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -5380,11 +6216,15 @@
},
"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==",
"dev": true,
"license": "MIT"
},
"node_modules/deepmerge": {
- "version": "4.3.1",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
+ "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -5392,6 +6232,8 @@
},
"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==",
"license": "MIT",
"dependencies": {
"clone": "^1.0.2"
@@ -5402,6 +6244,8 @@
},
"node_modules/define-data-property": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5418,6 +6262,8 @@
},
"node_modules/define-properties": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5443,10 +6289,14 @@
},
"node_modules/denodeify": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
+ "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==",
"license": "MIT"
},
"node_modules/depd": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -5454,6 +6304,8 @@
},
"node_modules/destroy": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"license": "MIT",
"engines": {
"node": ">= 0.8",
@@ -5462,6 +6314,8 @@
},
"node_modules/detect-newline": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5470,6 +6324,8 @@
},
"node_modules/diff-sequences": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5478,6 +6334,8 @@
},
"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": {
@@ -5489,6 +6347,8 @@
},
"node_modules/doctrine": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -5540,9 +6400,9 @@
}
},
"node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^2.0.0",
@@ -5553,16 +6413,36 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.4.818",
+ "version": "1.5.302",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz",
+ "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==",
"license": "ISC"
},
"node_modules/emittery": {
"version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5574,24 +6454,19 @@
},
"node_modules/emoji-regex": {
"version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"license": "MIT"
},
"node_modules/encodeurl": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
- "node_modules/encoding": {
- "version": "0.1.13",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -5605,7 +6480,9 @@
}
},
"node_modules/envinfo": {
- "version": "7.13.0",
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz",
+ "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==",
"license": "MIT",
"bin": {
"envinfo": "dist/cli.js"
@@ -5615,7 +6492,9 @@
}
},
"node_modules/error-ex": {
- "version": "1.3.2",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
@@ -5623,73 +6502,91 @@
},
"node_modules/error-stack-parser": {
"version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
+ "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
"license": "MIT",
"dependencies": {
"stackframe": "^1.3.4"
}
},
"node_modules/errorhandler": {
- "version": "1.5.1",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.2.tgz",
+ "integrity": "sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==",
"license": "MIT",
"dependencies": {
- "accepts": "~1.3.7",
+ "accepts": "~1.3.8",
"escape-html": "~1.0.3"
},
"engines": {
"node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/es-abstract": {
- "version": "1.23.3",
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz",
+ "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "arraybuffer.prototype.slice": "^1.0.3",
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
"available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "data-view-buffer": "^1.0.1",
- "data-view-byte-length": "^1.0.1",
- "data-view-byte-offset": "^1.0.0",
- "es-define-property": "^1.0.0",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-set-tostringtag": "^2.0.3",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.4",
- "get-symbol-description": "^1.0.2",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
+ "es-object-atoms": "^1.1.1",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
"has-property-descriptors": "^1.0.2",
- "has-proto": "^1.0.3",
- "has-symbols": "^1.0.3",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
"hasown": "^2.0.2",
- "internal-slot": "^1.0.7",
- "is-array-buffer": "^3.0.4",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
"is-callable": "^1.2.7",
- "is-data-view": "^1.0.1",
+ "is-data-view": "^1.0.2",
"is-negative-zero": "^2.0.3",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.3",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.13",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.13.1",
+ "is-regex": "^1.2.1",
+ "is-set": "^2.0.3",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.1",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.4",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.5",
- "regexp.prototype.flags": "^1.5.2",
- "safe-array-concat": "^1.1.2",
- "safe-regex-test": "^1.0.3",
- "string.prototype.trim": "^1.2.9",
- "string.prototype.trimend": "^1.0.8",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.4",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "stop-iteration-iterator": "^1.1.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
"string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.2",
- "typed-array-byte-length": "^1.0.1",
- "typed-array-byte-offset": "^1.0.2",
- "typed-array-length": "^1.0.6",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.15"
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.19"
},
"engines": {
"node": ">= 0.4"
@@ -5699,51 +6596,55 @@
}
},
"node_modules/es-define-property": {
- "version": "1.0.0",
- "dev": true,
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-iterator-helpers": {
- "version": "1.0.19",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz",
+ "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
+ "es-abstract": "^1.24.1",
"es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
+ "es-set-tostringtag": "^2.1.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "globalthis": "^1.0.3",
+ "get-intrinsic": "^1.3.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
"has-property-descriptors": "^1.0.2",
- "has-proto": "^1.0.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.7",
- "iterator.prototype": "^1.1.2",
- "safe-array-concat": "^1.1.2"
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "iterator.prototype": "^1.1.5",
+ "safe-array-concat": "^1.1.3"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
- "version": "1.0.0",
- "dev": true,
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@@ -5753,34 +6654,43 @@
}
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.3",
- "dev": true,
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
"dependencies": {
- "get-intrinsic": "^1.2.4",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
- "hasown": "^2.0.1"
+ "hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-shim-unscopables": {
- "version": "1.0.2",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hasown": "^2.0.0"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/es-to-primitive": {
- "version": "1.2.1",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
},
"engines": {
"node": ">= 0.4"
@@ -5790,7 +6700,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.2",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -5798,10 +6710,14 @@
},
"node_modules/escape-html": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
"license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -5811,15 +6727,18 @@
}
},
"node_modules/eslint": {
- "version": "8.57.0",
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.0",
- "@humanwhocodes/config-array": "^0.11.14",
+ "@eslint/js": "8.57.1",
+ "@humanwhocodes/config-array": "^0.13.0",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
@@ -5865,7 +6784,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "8.10.0",
+ "version": "8.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz",
+ "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==",
"dev": true,
"license": "MIT",
"bin": {
@@ -5877,6 +6798,8 @@
},
"node_modules/eslint-plugin-eslint-comments": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
+ "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5895,6 +6818,8 @@
},
"node_modules/eslint-plugin-eslint-comments/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": {
@@ -5903,6 +6828,8 @@
},
"node_modules/eslint-plugin-ft-flow": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz",
+ "integrity": "sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5919,6 +6846,8 @@
},
"node_modules/eslint-plugin-jest": {
"version": "27.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
+ "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5943,6 +6872,8 @@
},
"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": {
"version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5959,6 +6890,8 @@
},
"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": {
"version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5971,6 +6904,8 @@
},
"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": {
"version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5997,6 +6932,8 @@
},
"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": {
"version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6022,6 +6959,8 @@
},
"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": {
"version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6036,8 +6975,36 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/eslint-plugin-jest/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-jest/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/eslint-plugin-prettier": {
- "version": "4.2.1",
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz",
+ "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6057,38 +7024,42 @@
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.34.3",
+ "version": "7.37.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
+ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-includes": "^3.1.8",
"array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.2",
- "array.prototype.toreversed": "^1.1.2",
+ "array.prototype.flatmap": "^1.3.3",
"array.prototype.tosorted": "^1.1.4",
"doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.19",
+ "es-iterator-helpers": "^1.2.1",
"estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.8",
+ "object.entries": "^1.1.9",
"object.fromentries": "^2.0.8",
- "object.hasown": "^1.1.4",
- "object.values": "^1.2.0",
+ "object.values": "^1.2.1",
"prop-types": "^15.8.1",
"resolve": "^2.0.0-next.5",
"semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.11"
+ "string.prototype.matchall": "^4.0.12",
+ "string.prototype.repeat": "^1.0.0"
},
"engines": {
"node": ">=4"
},
"peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
}
},
"node_modules/eslint-plugin-react-hooks": {
"version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6100,6 +7071,8 @@
},
"node_modules/eslint-plugin-react-native": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz",
+ "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6111,11 +7084,26 @@
},
"node_modules/eslint-plugin-react-native-globals": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz",
+ "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==",
"dev": true,
"license": "MIT"
},
+ "node_modules/eslint-plugin-react/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/eslint-plugin-react/node_modules/doctrine": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -6125,32 +7113,47 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eslint-plugin-react/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
+ "version": "2.0.0-next.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz",
+ "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "node-exports-info": "^1.6.0",
+ "object-keys": "^1.1.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/eslint-scope": {
"version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -6163,6 +7166,8 @@
},
"node_modules/eslint-scope/node_modules/estraverse": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -6170,23 +7175,37 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
+ "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": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=10"
}
},
"node_modules/eslint/node_modules/argparse": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/eslint/node_modules/eslint-scope": {
"version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -6200,37 +7219,40 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
+ "license": "Apache-2.0",
"engines": {
- "node": ">=10"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/globals": {
- "version": "13.24.0",
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"license": "MIT",
"dependencies": {
- "type-fest": "^0.20.2"
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/js-yaml": {
- "version": "4.1.0",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6242,6 +7264,8 @@
},
"node_modules/eslint/node_modules/locate-path": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6254,8 +7278,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eslint/node_modules/p-locate": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6270,6 +7309,8 @@
},
"node_modules/espree": {
"version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -6284,8 +7325,23 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "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",
@@ -6296,7 +7352,9 @@
}
},
"node_modules/esquery": {
- "version": "1.5.0",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -6308,6 +7366,8 @@
},
"node_modules/esrecurse": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -6319,6 +7379,8 @@
},
"node_modules/estraverse": {
"version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -6327,6 +7389,9 @@
},
"node_modules/esutils": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
@@ -6334,6 +7399,8 @@
},
"node_modules/etag": {
"version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -6341,6 +7408,8 @@
},
"node_modules/event-target-shim": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -6348,6 +7417,8 @@
},
"node_modules/execa": {
"version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
@@ -6369,6 +7440,8 @@
},
"node_modules/exit": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
@@ -6376,6 +7449,8 @@
},
"node_modules/expect": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6389,24 +7464,36 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/exponential-backoff": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz",
+ "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==",
+ "license": "Apache-2.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",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
"node_modules/fast-diff": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/fast-glob": {
- "version": "3.3.2",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
@@ -6414,6 +7501,8 @@
},
"node_modules/fast-glob/node_modules/glob-parent": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
@@ -6424,24 +7513,26 @@
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true,
"license": "MIT"
},
"node_modules/fast-xml-parser": {
- "version": "4.4.0",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz",
+ "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/NaturalIntelligence"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/naturalintelligence"
}
],
"license": "MIT",
@@ -6453,7 +7544,9 @@
}
},
"node_modules/fastq": {
- "version": "1.17.1",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
"license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
@@ -6461,6 +7554,8 @@
},
"node_modules/fb-watchman": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"license": "Apache-2.0",
"dependencies": {
"bser": "2.1.1"
@@ -6468,6 +7563,8 @@
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6479,6 +7576,8 @@
},
"node_modules/fill-range": {
"version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -6498,6 +7597,8 @@
},
"node_modules/finalhandler": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
@@ -6514,6 +7615,8 @@
},
"node_modules/finalhandler/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"
@@ -6521,17 +7624,14 @@
},
"node_modules/finalhandler/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/finalhandler/node_modules/statuses": {
- "version": "1.5.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/find-cache-dir": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
"license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
@@ -6542,45 +7642,109 @@
"node": ">=6"
}
},
- "node_modules/find-up": {
- "version": "4.1.0",
+ "node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"license": "MIT",
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "locate-path": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/find-up/node_modules/locate-path": {
- "version": "5.0.0",
+ "node_modules/find-cache-dir/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
- "node_modules/find-up/node_modules/p-limit": {
- "version": "2.3.0",
+ "node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "find-up": "^3.0.0"
},
"engines": {
"node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/find-up/node_modules/p-locate": {
+ "node_modules/find-cache-dir/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/find-up": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"license": "MIT",
"dependencies": {
- "p-limit": "^2.2.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
@@ -6588,6 +7752,8 @@
},
"node_modules/flat-cache": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6600,25 +7766,31 @@
}
},
"node_modules/flatted": {
- "version": "3.3.1",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
"dev": true,
"license": "ISC"
},
"node_modules/flow-enums-runtime": {
"version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz",
+ "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==",
"license": "MIT"
},
"node_modules/flow-parser": {
- "version": "0.239.0",
+ "version": "0.303.0",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.303.0.tgz",
+ "integrity": "sha512-SGifrPA0IQqN4S3MFZ3KPqphxWd+VehHEwpQPEjWQGtJSnPsFakrlqNQH88MLyJGi/Z7WO15FMylybGONwqwxA==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"funding": [
{
"type": "individual",
@@ -6636,21 +7808,31 @@
}
},
"node_modules/for-each": {
- "version": "0.3.3",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-callable": "^1.1.3"
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
@@ -6658,9 +7840,9 @@
}
},
"node_modules/formik": {
- "version": "2.4.6",
- "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz",
- "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==",
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.9.tgz",
+ "integrity": "sha512-5nI94BMnlFDdQRBY4Sz39WkhxajZJ57Fzs8wVbtsQlm5ScKIR1QLYqv/ultBnobObtlUyxpxoLodpixrsf36Og==",
"funding": [
{
"type": "individual",
@@ -6682,17 +7864,10 @@
"react": ">=16.8.0"
}
},
- "node_modules/formik/node_modules/deepmerge": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
- "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/fresh": {
"version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -6700,6 +7875,8 @@
},
"node_modules/fs-extra": {
"version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
@@ -6712,10 +7889,15 @@
},
"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==",
"license": "ISC"
},
"node_modules/fsevents": {
"version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6727,20 +7909,26 @@
},
"node_modules/function-bind": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/function.prototype.name": {
- "version": "1.1.6",
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "functions-have-names": "^1.2.3"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
},
"engines": {
"node": ">= 0.4"
@@ -6751,14 +7939,28 @@
},
"node_modules/functions-have-names": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/generator-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
+ "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -6766,21 +7968,29 @@
},
"node_modules/get-caller-file": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.4",
- "dev": true,
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -6791,14 +8001,31 @@
},
"node_modules/get-package-type": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/get-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"
@@ -6808,13 +8035,15 @@
}
},
"node_modules/get-symbol-description": {
- "version": "1.0.2",
+ "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-bind": "^1.0.5",
+ "call-bound": "^1.0.3",
"es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4"
+ "get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
@@ -6825,6 +8054,9 @@
},
"node_modules/glob": {
"version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -6843,6 +8075,8 @@
},
"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==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6852,15 +8086,48 @@
"node": ">=10.13.0"
}
},
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/globals": {
- "version": "11.12.0",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/globalthis": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6876,6 +8143,8 @@
},
"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": {
@@ -6894,11 +8163,12 @@
}
},
"node_modules/gopd": {
- "version": "1.0.1",
- "dev": true,
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -6906,23 +8176,34 @@
},
"node_modules/graceful-fs": {
"version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
"node_modules/graphemer": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
"license": "MIT"
},
"node_modules/has-bigints": {
- "version": "1.0.2",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
"dev": true,
"license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6930,6 +8211,8 @@
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6940,9 +8223,14 @@
}
},
"node_modules/has-proto": {
- "version": "1.0.3",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -6951,8 +8239,9 @@
}
},
"node_modules/has-symbols": {
- "version": "1.0.3",
- "dev": true,
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -6963,7 +8252,8 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
@@ -6977,6 +8267,8 @@
},
"node_modules/hasown": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -6986,18 +8278,24 @@
}
},
"node_modules/hermes-estree": {
- "version": "0.20.1",
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz",
+ "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==",
"license": "MIT"
},
"node_modules/hermes-parser": {
- "version": "0.20.1",
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz",
+ "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==",
"license": "MIT",
"dependencies": {
- "hermes-estree": "0.20.1"
+ "hermes-estree": "0.19.1"
}
},
"node_modules/hermes-profile-transformer": {
"version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz",
+ "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==",
"license": "MIT",
"dependencies": {
"source-map": "^0.7.3"
@@ -7007,10 +8305,12 @@
}
},
"node_modules/hermes-profile-transformer/node_modules/source-map": {
- "version": "0.7.4",
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
"node_modules/hoist-non-react-statics": {
@@ -7022,14 +8322,10 @@
"react-is": "^16.7.0"
}
},
- "node_modules/hoist-non-react-statics/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
- },
"node_modules/html-escaper": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true,
"license": "MIT"
},
@@ -7043,15 +8339,30 @@
}
},
"node_modules/http-errors": {
- "version": "2.0.0",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"license": "MIT",
"dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
},
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/http-errors/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -7071,15 +8382,17 @@
},
"node_modules/human-signals": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"license": "Apache-2.0",
"engines": {
"node": ">=10.17.0"
}
},
"node_modules/i18next": {
- "version": "23.11.5",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz",
- "integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==",
+ "version": "23.16.8",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz",
+ "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==",
"funding": [
{
"type": "individual",
@@ -7099,20 +8412,10 @@
"@babel/runtime": "^7.23.2"
}
},
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "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",
@@ -7130,7 +8433,9 @@
"license": "BSD-3-Clause"
},
"node_modules/ignore": {
- "version": "5.3.1",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7138,7 +8443,9 @@
}
},
"node_modules/image-size": {
- "version": "1.1.1",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
+ "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
"license": "MIT",
"dependencies": {
"queue": "6.0.2"
@@ -7157,9 +8464,9 @@
"license": "MIT"
},
"node_modules/immer": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
- "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==",
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz",
+ "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==",
"license": "MIT",
"funding": {
"type": "opencollective",
@@ -7167,25 +8474,36 @@
}
},
"node_modules/import-fresh": {
- "version": "2.0.0",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/import-fresh/node_modules/resolve-from": {
- "version": "3.0.0",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/import-local": {
- "version": "3.1.0",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7202,19 +8520,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-local/node_modules/pkg-dir": {
- "version": "4.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"license": "MIT",
"engines": {
"node": ">=0.8.19"
@@ -7222,6 +8531,9 @@
},
"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.",
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
@@ -7230,16 +8542,20 @@
},
"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/internal-slot": {
- "version": "1.0.7",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
- "hasown": "^2.0.0",
- "side-channel": "^1.0.4"
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -7247,18 +8563,23 @@
},
"node_modules/invariant": {
"version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.0.0"
}
},
"node_modules/is-array-buffer": {
- "version": "3.0.4",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
@@ -7269,14 +8590,22 @@
},
"node_modules/is-arrayish": {
"version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"license": "MIT"
},
"node_modules/is-async-function": {
- "version": "2.0.0",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -7286,23 +8615,30 @@
}
},
"node_modules/is-bigint": {
- "version": "1.0.4",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-bigints": "^1.0.1"
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-boolean-object": {
- "version": "1.1.2",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -7313,6 +8649,8 @@
},
"node_modules/is-callable": {
"version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7323,7 +8661,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.14.0",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
@@ -7336,10 +8676,14 @@
}
},
"node_modules/is-data-view": {
- "version": "1.0.1",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
"is-typed-array": "^1.1.13"
},
"engines": {
@@ -7350,11 +8694,14 @@
}
},
"node_modules/is-date-object": {
- "version": "1.0.5",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -7365,6 +8712,8 @@
},
"node_modules/is-directory": {
"version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -7372,6 +8721,8 @@
},
"node_modules/is-docker": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"license": "MIT",
"bin": {
"is-docker": "cli.js"
@@ -7385,31 +8736,42 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-finalizationregistry": {
- "version": "1.0.2",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
"node_modules/is-generator-fn": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7417,11 +8779,17 @@
}
},
"node_modules/is-generator-function": {
- "version": "1.0.10",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
+ "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "call-bound": "^1.0.4",
+ "generator-function": "^2.0.0",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -7432,6 +8800,8 @@
},
"node_modules/is-glob": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@@ -7442,6 +8812,8 @@
},
"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==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -7449,6 +8821,8 @@
},
"node_modules/is-map": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7460,6 +8834,8 @@
},
"node_modules/is-negative-zero": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7471,17 +8847,22 @@
},
"node_modules/is-number": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-number-object": {
- "version": "1.0.7",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -7492,6 +8873,8 @@
},
"node_modules/is-path-inside": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7509,6 +8892,8 @@
},
"node_modules/is-plain-object": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
@@ -7518,12 +8903,16 @@
}
},
"node_modules/is-regex": {
- "version": "1.1.4",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -7534,6 +8923,8 @@
},
"node_modules/is-set": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7544,11 +8935,13 @@
}
},
"node_modules/is-shared-array-buffer": {
- "version": "1.0.3",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7"
+ "call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
@@ -7559,6 +8952,8 @@
},
"node_modules/is-stream": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -7568,11 +8963,14 @@
}
},
"node_modules/is-string": {
- "version": "1.0.7",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -7582,11 +8980,15 @@
}
},
"node_modules/is-symbol": {
- "version": "1.0.4",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-symbols": "^1.0.2"
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -7596,11 +8998,13 @@
}
},
"node_modules/is-typed-array": {
- "version": "1.1.13",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "which-typed-array": "^1.1.14"
+ "which-typed-array": "^1.1.16"
},
"engines": {
"node": ">= 0.4"
@@ -7611,6 +9015,8 @@
},
"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==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -7621,6 +9027,8 @@
},
"node_modules/is-weakmap": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7631,23 +9039,30 @@
}
},
"node_modules/is-weakref": {
- "version": "1.0.2",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakset": {
- "version": "2.0.3",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
- "get-intrinsic": "^1.2.4"
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
@@ -7658,6 +9073,8 @@
},
"node_modules/is-wsl": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"license": "MIT",
"dependencies": {
"is-docker": "^2.0.0"
@@ -7668,15 +9085,21 @@
},
"node_modules/isarray": {
"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": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -7684,6 +9107,8 @@
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -7692,6 +9117,8 @@
},
"node_modules/istanbul-lib-instrument": {
"version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -7705,16 +9132,10 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/istanbul-lib-report": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -7726,22 +9147,10 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-report/node_modules/make-dir": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -7754,7 +9163,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.7",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -7766,19 +9177,27 @@
}
},
"node_modules/iterator.prototype": {
- "version": "1.1.2",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "define-properties": "^1.2.1",
- "get-intrinsic": "^1.2.1",
- "has-symbols": "^1.0.3",
- "reflect.getprototypeof": "^1.0.4",
- "set-function-name": "^2.0.1"
+ "define-data-property": "^1.1.4",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "get-proto": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/jest": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7804,6 +9223,8 @@
},
"node_modules/jest-changed-files": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7817,6 +9238,8 @@
},
"node_modules/jest-circus": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7847,6 +9270,8 @@
},
"node_modules/jest-cli": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7879,6 +9304,8 @@
},
"node_modules/jest-config": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7921,25 +9348,20 @@
}
}
},
- "node_modules/jest-config/node_modules/parse-json": {
- "version": "5.2.0",
+ "node_modules/jest-config/node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/jest-diff": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7954,6 +9376,8 @@
},
"node_modules/jest-docblock": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7965,6 +9389,8 @@
},
"node_modules/jest-each": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7980,6 +9406,8 @@
},
"node_modules/jest-environment-node": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"license": "MIT",
"dependencies": {
"@jest/environment": "^29.7.0",
@@ -7995,6 +9423,8 @@
},
"node_modules/jest-get-type": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -8002,6 +9432,8 @@
},
"node_modules/jest-haste-map": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8026,6 +9458,8 @@
},
"node_modules/jest-leak-detector": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8038,6 +9472,8 @@
},
"node_modules/jest-matcher-utils": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8052,6 +9488,8 @@
},
"node_modules/jest-message-util": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.12.13",
@@ -8070,6 +9508,8 @@
},
"node_modules/jest-mock": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
@@ -8082,6 +9522,8 @@
},
"node_modules/jest-pnp-resolver": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8098,6 +9540,8 @@
},
"node_modules/jest-regex-util": {
"version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8106,6 +9550,8 @@
},
"node_modules/jest-resolve": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8125,6 +9571,8 @@
},
"node_modules/jest-resolve-dependencies": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8137,6 +9585,8 @@
},
"node_modules/jest-runner": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8166,17 +9616,10 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-runner/node_modules/source-map-support": {
- "version": "0.5.13",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
"node_modules/jest-runtime": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8209,6 +9652,8 @@
},
"node_modules/jest-snapshot": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8237,8 +9682,23 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-snapshot/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/jest-util": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
@@ -8254,6 +9714,8 @@
},
"node_modules/jest-validate": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
@@ -8269,6 +9731,8 @@
},
"node_modules/jest-validate/node_modules/camelcase": {
"version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -8279,6 +9743,8 @@
},
"node_modules/jest-watcher": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8297,6 +9763,8 @@
},
"node_modules/jest-worker": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"license": "MIT",
"dependencies": {
"@types/node": "*",
@@ -8310,6 +9778,8 @@
},
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -8323,6 +9793,8 @@
},
"node_modules/joi": {
"version": "17.13.3",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
+ "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.3.0",
@@ -8334,10 +9806,14 @@
},
"node_modules/js-tokens": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "3.14.1",
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
@@ -8349,14 +9825,20 @@
},
"node_modules/jsc-android": {
"version": "250231.0.0",
+ "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz",
+ "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==",
"license": "BSD-2-Clause"
},
"node_modules/jsc-safe-url": {
"version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz",
+ "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==",
"license": "0BSD"
},
"node_modules/jscodeshift": {
"version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz",
+ "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.13.16",
@@ -8386,37 +9868,60 @@
"@babel/preset-env": "^7.1.6"
}
},
+ "node_modules/jscodeshift/node_modules/write-file-atomic": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
"node_modules/jsesc": {
- "version": "2.5.2",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/json-buffer": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
"license": "MIT"
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
"license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true,
"license": "MIT"
},
@@ -8429,6 +9934,8 @@
},
"node_modules/json5": {
"version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
@@ -8439,6 +9946,8 @@
},
"node_modules/jsonfile": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"license": "MIT",
"optionalDependencies": {
"graceful-fs": "^4.1.6"
@@ -8446,6 +9955,8 @@
},
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8460,6 +9971,8 @@
},
"node_modules/keyv": {
"version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8468,6 +9981,8 @@
},
"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"
@@ -8475,6 +9990,8 @@
},
"node_modules/kleur": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -8482,6 +9999,8 @@
},
"node_modules/leven": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -8489,6 +10008,8 @@
},
"node_modules/levn": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8510,6 +10031,8 @@
},
"node_modules/lighthouse-logger": {
"version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
+ "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==",
"license": "Apache-2.0",
"dependencies": {
"debug": "^2.6.9",
@@ -8518,6 +10041,8 @@
},
"node_modules/lighthouse-logger/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"
@@ -8525,10 +10050,14 @@
},
"node_modules/lighthouse-logger/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/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==",
"dev": true,
"license": "MIT"
},
@@ -8542,48 +10071,52 @@
}
},
"node_modules/locate-path": {
- "version": "3.0.0",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"license": "MIT",
"dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/locate-path/node_modules/path-exists": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/lodash": {
- "version": "4.17.21",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"license": "MIT"
},
"node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
"license": "MIT"
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.throttle": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
"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==",
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
@@ -8598,6 +10131,8 @@
},
"node_modules/logkitty": {
"version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz",
+ "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==",
"license": "MIT",
"dependencies": {
"ansi-fragments": "^0.2.1",
@@ -8610,6 +10145,8 @@
},
"node_modules/logkitty/node_modules/cliui": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
@@ -8619,6 +10156,8 @@
},
"node_modules/logkitty/node_modules/wrap-ansi": {
"version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -8631,10 +10170,14 @@
},
"node_modules/logkitty/node_modules/y18n": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"license": "ISC"
},
"node_modules/logkitty/node_modules/yargs": {
"version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
@@ -8655,6 +10198,8 @@
},
"node_modules/logkitty/node_modules/yargs-parser": {
"version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
@@ -8666,6 +10211,8 @@
},
"node_modules/loose-envify": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
@@ -8698,35 +10245,68 @@
}
}
},
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
"node_modules/make-dir": {
- "version": "2.1.0",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/make-dir/node_modules/semver": {
- "version": "5.7.2",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
"license": "ISC",
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/makeerror": {
"version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"license": "BSD-3-Clause",
"dependencies": {
"tmpl": "1.0.5"
}
},
"node_modules/marky": {
- "version": "1.2.5",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz",
+ "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==",
"license": "Apache-2.0"
},
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -8735,6 +10315,8 @@
},
"node_modules/memoize-one": {
"version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==",
"license": "MIT"
},
"node_modules/merge-options": {
@@ -8751,17 +10333,23 @@
},
"node_modules/merge-stream": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/metro": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.12.tgz",
+ "integrity": "sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
@@ -8778,34 +10366,33 @@
"debug": "^2.2.0",
"denodeify": "^1.2.1",
"error-stack-parser": "^2.0.6",
+ "flow-enums-runtime": "^0.0.6",
"graceful-fs": "^4.2.4",
- "hermes-parser": "0.20.1",
+ "hermes-parser": "0.23.1",
"image-size": "^1.0.2",
"invariant": "^2.2.4",
"jest-worker": "^29.6.3",
"jsc-safe-url": "^0.2.2",
"lodash.throttle": "^4.1.1",
- "metro-babel-transformer": "0.80.9",
- "metro-cache": "0.80.9",
- "metro-cache-key": "0.80.9",
- "metro-config": "0.80.9",
- "metro-core": "0.80.9",
- "metro-file-map": "0.80.9",
- "metro-resolver": "0.80.9",
- "metro-runtime": "0.80.9",
- "metro-source-map": "0.80.9",
- "metro-symbolicate": "0.80.9",
- "metro-transform-plugins": "0.80.9",
- "metro-transform-worker": "0.80.9",
+ "metro-babel-transformer": "0.80.12",
+ "metro-cache": "0.80.12",
+ "metro-cache-key": "0.80.12",
+ "metro-config": "0.80.12",
+ "metro-core": "0.80.12",
+ "metro-file-map": "0.80.12",
+ "metro-resolver": "0.80.12",
+ "metro-runtime": "0.80.12",
+ "metro-source-map": "0.80.12",
+ "metro-symbolicate": "0.80.12",
+ "metro-transform-plugins": "0.80.12",
+ "metro-transform-worker": "0.80.12",
"mime-types": "^2.1.27",
- "node-fetch": "^2.2.0",
"nullthrows": "^1.1.1",
- "rimraf": "^3.0.2",
"serialize-error": "^2.1.0",
"source-map": "^0.5.6",
"strip-ansi": "^6.0.0",
"throat": "^5.0.0",
- "ws": "^7.5.1",
+ "ws": "^7.5.10",
"yargs": "^17.6.2"
},
"bin": {
@@ -8816,69 +10403,104 @@
}
},
"node_modules/metro-babel-transformer": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.12.tgz",
+ "integrity": "sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.20.0",
- "hermes-parser": "0.20.1",
+ "flow-enums-runtime": "^0.0.6",
+ "hermes-parser": "0.23.1",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">=18"
}
},
+ "node_modules/metro-babel-transformer/node_modules/hermes-estree": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz",
+ "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==",
+ "license": "MIT"
+ },
+ "node_modules/metro-babel-transformer/node_modules/hermes-parser": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz",
+ "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==",
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.23.1"
+ }
+ },
"node_modules/metro-cache": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.12.tgz",
+ "integrity": "sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==",
"license": "MIT",
"dependencies": {
- "metro-core": "0.80.9",
- "rimraf": "^3.0.2"
+ "exponential-backoff": "^3.1.1",
+ "flow-enums-runtime": "^0.0.6",
+ "metro-core": "0.80.12"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-cache-key": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.12.tgz",
+ "integrity": "sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==",
"license": "MIT",
+ "dependencies": {
+ "flow-enums-runtime": "^0.0.6"
+ },
"engines": {
"node": ">=18"
}
},
"node_modules/metro-config": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.12.tgz",
+ "integrity": "sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==",
"license": "MIT",
"dependencies": {
"connect": "^3.6.5",
"cosmiconfig": "^5.0.5",
+ "flow-enums-runtime": "^0.0.6",
"jest-validate": "^29.6.3",
- "metro": "0.80.9",
- "metro-cache": "0.80.9",
- "metro-core": "0.80.9",
- "metro-runtime": "0.80.9"
+ "metro": "0.80.12",
+ "metro-cache": "0.80.12",
+ "metro-core": "0.80.12",
+ "metro-runtime": "0.80.12"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-core": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.12.tgz",
+ "integrity": "sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==",
"license": "MIT",
"dependencies": {
+ "flow-enums-runtime": "^0.0.6",
"lodash.throttle": "^4.1.1",
- "metro-resolver": "0.80.9"
+ "metro-resolver": "0.80.12"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-file-map": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.12.tgz",
+ "integrity": "sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==",
"license": "MIT",
"dependencies": {
"anymatch": "^3.0.3",
"debug": "^2.2.0",
"fb-watchman": "^2.0.0",
+ "flow-enums-runtime": "^0.0.6",
"graceful-fs": "^4.2.4",
"invariant": "^2.2.4",
"jest-worker": "^29.6.3",
@@ -8896,6 +10518,8 @@
},
"node_modules/metro-file-map/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"
@@ -8903,12 +10527,17 @@
},
"node_modules/metro-file-map/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/metro-minify-terser": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.12.tgz",
+ "integrity": "sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==",
"license": "MIT",
"dependencies": {
+ "flow-enums-runtime": "^0.0.6",
"terser": "^5.15.0"
},
"engines": {
@@ -8916,32 +10545,43 @@
}
},
"node_modules/metro-resolver": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.12.tgz",
+ "integrity": "sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==",
"license": "MIT",
+ "dependencies": {
+ "flow-enums-runtime": "^0.0.6"
+ },
"engines": {
"node": ">=18"
}
},
"node_modules/metro-runtime": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.12.tgz",
+ "integrity": "sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.0.0"
+ "@babel/runtime": "^7.25.0",
+ "flow-enums-runtime": "^0.0.6"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-source-map": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.12.tgz",
+ "integrity": "sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==",
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.20.0",
"@babel/types": "^7.20.0",
+ "flow-enums-runtime": "^0.0.6",
"invariant": "^2.2.4",
- "metro-symbolicate": "0.80.9",
+ "metro-symbolicate": "0.80.12",
"nullthrows": "^1.1.1",
- "ob1": "0.80.9",
+ "ob1": "0.80.12",
"source-map": "^0.5.6",
"vlq": "^1.0.0"
},
@@ -8951,17 +10591,22 @@
},
"node_modules/metro-source-map/node_modules/source-map": {
"version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/metro-symbolicate": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.12.tgz",
+ "integrity": "sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==",
"license": "MIT",
"dependencies": {
+ "flow-enums-runtime": "^0.0.6",
"invariant": "^2.2.4",
- "metro-source-map": "0.80.9",
+ "metro-source-map": "0.80.12",
"nullthrows": "^1.1.1",
"source-map": "^0.5.6",
"through2": "^2.0.1",
@@ -8976,19 +10621,24 @@
},
"node_modules/metro-symbolicate/node_modules/source-map": {
"version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/metro-transform-plugins": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.12.tgz",
+ "integrity": "sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.0",
"@babel/template": "^7.0.0",
"@babel/traverse": "^7.20.0",
+ "flow-enums-runtime": "^0.0.6",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -8996,20 +10646,23 @@
}
},
"node_modules/metro-transform-worker": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.12.tgz",
+ "integrity": "sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.0",
"@babel/parser": "^7.20.0",
"@babel/types": "^7.20.0",
- "metro": "0.80.9",
- "metro-babel-transformer": "0.80.9",
- "metro-cache": "0.80.9",
- "metro-cache-key": "0.80.9",
- "metro-minify-terser": "0.80.9",
- "metro-source-map": "0.80.9",
- "metro-transform-plugins": "0.80.9",
+ "flow-enums-runtime": "^0.0.6",
+ "metro": "0.80.12",
+ "metro-babel-transformer": "0.80.12",
+ "metro-cache": "0.80.12",
+ "metro-cache-key": "0.80.12",
+ "metro-minify-terser": "0.80.12",
+ "metro-source-map": "0.80.12",
+ "metro-transform-plugins": "0.80.12",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -9018,47 +10671,53 @@
},
"node_modules/metro/node_modules/ci-info": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"license": "MIT"
},
"node_modules/metro/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/metro/node_modules/hermes-estree": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz",
+ "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==",
+ "license": "MIT"
+ },
+ "node_modules/metro/node_modules/hermes-parser": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz",
+ "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==",
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.23.1"
+ }
+ },
"node_modules/metro/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/metro/node_modules/source-map": {
"version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/metro/node_modules/ws": {
- "version": "7.5.10",
- "license": "MIT",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"node_modules/micromatch": {
- "version": "4.0.7",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"license": "MIT",
"dependencies": {
"braces": "^3.0.3",
@@ -9070,6 +10729,8 @@
},
"node_modules/mime": {
"version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"license": "MIT",
"bin": {
"mime": "cli.js"
@@ -9080,6 +10741,8 @@
},
"node_modules/mime-db": {
"version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -9087,6 +10750,8 @@
},
"node_modules/mime-types": {
"version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
@@ -9097,55 +10762,60 @@
},
"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==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^2.0.2"
},
"engines": {
- "node": "*"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/minimist": {
"version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/mkdirp": {
- "version": "1.0.4",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
"bin": {
"mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/moment": {
- "version": "2.30.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
- "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
- "license": "MIT",
- "engines": {
- "node": "*"
}
},
"node_modules/ms": {
- "version": "2.1.2",
+ "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/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
@@ -9162,11 +10832,15 @@
},
"node_modules/natural-compare": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true,
"license": "MIT"
},
"node_modules/negotiator": {
"version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -9174,10 +10848,14 @@
},
"node_modules/neo-async": {
"version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"license": "MIT"
},
"node_modules/nocache": {
"version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz",
+ "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==",
"license": "MIT",
"engines": {
"node": ">=12.0.0"
@@ -9185,10 +10863,14 @@
},
"node_modules/node-abort-controller": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
"license": "MIT"
},
"node_modules/node-dir": {
"version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
"license": "MIT",
"dependencies": {
"minimatch": "^3.0.2"
@@ -9197,8 +10879,51 @@
"node": ">= 0.10.5"
}
},
+ "node_modules/node-dir/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/node-dir/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/node-exports-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz",
+ "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array.prototype.flatmap": "^1.3.3",
+ "es-errors": "^1.3.0",
+ "object.entries": "^1.1.9",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/node-fetch": {
"version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
@@ -9216,7 +10941,9 @@
}
},
"node_modules/node-forge": {
- "version": "1.3.1",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz",
+ "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==",
"license": "(BSD-3-Clause OR GPL-2.0)",
"engines": {
"node": ">= 6.13.0"
@@ -9224,14 +10951,20 @@
},
"node_modules/node-int64": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.14",
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
"license": "MIT"
},
"node_modules/node-stream-zip": {
"version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
+ "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@@ -9243,6 +10976,8 @@
},
"node_modules/normalize-path": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -9250,6 +10985,8 @@
},
"node_modules/npm-run-path": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
@@ -9272,24 +11009,35 @@
},
"node_modules/nullthrows": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
+ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==",
"license": "MIT"
},
"node_modules/ob1": {
- "version": "0.80.9",
+ "version": "0.80.12",
+ "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.12.tgz",
+ "integrity": "sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==",
"license": "MIT",
+ "dependencies": {
+ "flow-enums-runtime": "^0.0.6"
+ },
"engines": {
"node": ">=18"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-inspect": {
- "version": "1.13.2",
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9301,6 +11049,8 @@
},
"node_modules/object-keys": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9308,13 +11058,17 @@
}
},
"node_modules/object.assign": {
- "version": "4.1.5",
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
"define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
"object-keys": "^1.1.1"
},
"engines": {
@@ -9325,13 +11079,16 @@
}
},
"node_modules/object.entries": {
- "version": "1.1.8",
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
+ "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
"define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
+ "es-object-atoms": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
@@ -9339,6 +11096,8 @@
},
"node_modules/object.fromentries": {
"version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9354,28 +11113,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/object.hasown": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/object.values": {
- "version": "1.2.0",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
@@ -9388,6 +11134,8 @@
},
"node_modules/on-finished": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
"license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
@@ -9397,7 +11145,9 @@
}
},
"node_modules/on-headers": {
- "version": "1.0.2",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
+ "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -9405,6 +11155,8 @@
},
"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"
@@ -9412,6 +11164,8 @@
},
"node_modules/onetime": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
@@ -9425,6 +11179,8 @@
},
"node_modules/open": {
"version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
+ "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
"license": "MIT",
"dependencies": {
"is-wsl": "^1.1.0"
@@ -9435,6 +11191,8 @@
},
"node_modules/open/node_modules/is-wsl": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -9442,6 +11200,8 @@
},
"node_modules/optionator": {
"version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9458,6 +11218,8 @@
},
"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==",
"license": "MIT",
"dependencies": {
"bl": "^4.1.0",
@@ -9477,8 +11239,28 @@
"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",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
@@ -9491,17 +11273,21 @@
}
},
"node_modules/p-locate": {
- "version": "3.0.0",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"license": "MIT",
"dependencies": {
- "p-limit": "^2.0.0"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
"node_modules/p-locate/node_modules/p-limit": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
@@ -9515,6 +11301,8 @@
},
"node_modules/p-try": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -9522,6 +11310,8 @@
},
"node_modules/parent-module": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9532,18 +11322,28 @@
}
},
"node_modules/parse-json": {
- "version": "4.0.0",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
+ "@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -9551,6 +11351,8 @@
},
"node_modules/path-exists": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9558,6 +11360,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==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -9565,6 +11369,8 @@
},
"node_modules/path-key": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9572,10 +11378,14 @@
},
"node_modules/path-parse": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"license": "MIT"
},
"node_modules/path-type": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9583,11 +11393,15 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.1",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"license": "MIT",
"engines": {
"node": ">=8.6"
@@ -9598,40 +11412,39 @@
},
"node_modules/pify": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/pirates": {
- "version": "4.0.6",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "3.0.0",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"license": "MIT",
- "dependencies": {
- "find-up": "^3.0.0"
- },
"engines": {
- "node": ">=6"
+ "node": ">= 6"
}
},
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "3.0.0",
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "locate-path": "^3.0.0"
+ "find-up": "^4.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
"node_modules/possible-typed-array-names": {
- "version": "1.0.0",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9640,6 +11453,8 @@
},
"node_modules/prelude-ls": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9648,6 +11463,8 @@
},
"node_modules/prettier": {
"version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"license": "MIT",
"bin": {
@@ -9661,7 +11478,9 @@
}
},
"node_modules/prettier-linter-helpers": {
- "version": "1.0.0",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz",
+ "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9673,6 +11492,8 @@
},
"node_modules/pretty-format": {
"version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
@@ -9685,6 +11506,8 @@
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -9693,8 +11516,16 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/pretty-format/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
"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/progress": {
@@ -9708,6 +11539,8 @@
},
"node_modules/promise": {
"version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
"license": "MIT",
"dependencies": {
"asap": "~2.0.6"
@@ -9715,6 +11548,8 @@
},
"node_modules/prompts": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"license": "MIT",
"dependencies": {
"kleur": "^3.0.3",
@@ -9726,6 +11561,8 @@
},
"node_modules/prop-types": {
"version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
@@ -9733,10 +11570,6 @@
"react-is": "^16.13.1"
}
},
- "node_modules/prop-types/node_modules/react-is": {
- "version": "16.13.1",
- "license": "MIT"
- },
"node_modules/property-expr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
@@ -9751,6 +11584,8 @@
},
"node_modules/punycode": {
"version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9759,6 +11594,8 @@
},
"node_modules/pure-rand": {
"version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
"dev": true,
"funding": [
{
@@ -9792,6 +11629,9 @@
},
"node_modules/querystring": {
"version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
+ "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==",
+ "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
"license": "MIT",
"engines": {
"node": ">=0.4.x"
@@ -9799,6 +11639,8 @@
},
"node_modules/queue": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
+ "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
"license": "MIT",
"dependencies": {
"inherits": "~2.0.3"
@@ -9806,6 +11648,8 @@
},
"node_modules/queue-microtask": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"funding": [
{
"type": "github",
@@ -9824,13 +11668,17 @@
},
"node_modules/range-parser": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/react": {
- "version": "18.2.0",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
@@ -9840,32 +11688,15 @@
}
},
"node_modules/react-devtools-core": {
- "version": "5.3.1",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz",
+ "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==",
"license": "MIT",
"dependencies": {
"shell-quote": "^1.6.1",
"ws": "^7"
}
},
- "node_modules/react-devtools-core/node_modules/ws": {
- "version": "7.5.10",
- "license": "MIT",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"node_modules/react-fast-compare": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
@@ -9885,9 +11716,9 @@
}
},
"node_modules/react-i18next": {
- "version": "14.1.2",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.2.tgz",
- "integrity": "sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.3.tgz",
+ "integrity": "sha512-wZnpfunU6UIAiJ+bxwOiTmBOAaB14ha97MjOEnLGac2RJ+h/maIYXZuTHlmyqQVX1UVHmU1YDTQ5vxLmwfXTjw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.9",
@@ -9907,11 +11738,15 @@
}
},
"node_modules/react-is": {
- "version": "18.3.1",
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/react-native": {
"version": "0.74.3",
+ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.3.tgz",
+ "integrity": "sha512-UFutCC6WEw6HkxlcpQ2BemKqi0JkwrgDchYB5Svi8Sp4Xwt4HA6LGEjNQgZ+3KM44bjyFRpofQym0uh0jACGng==",
"license": "MIT",
"dependencies": {
"@jest/create-cache-key-function": "^29.6.3",
@@ -9969,24 +11804,24 @@
}
},
"node_modules/react-native-actions-sheet": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/react-native-actions-sheet/-/react-native-actions-sheet-0.9.6.tgz",
- "integrity": "sha512-BMEFmJD29izbOxkH81HJWNCgrjdW5iz4gB+Eyov9xwUPz/Fbi53R6AFvF9N3ttYT8nEvzxj56nqP7uJZ6KuKuA==",
+ "version": "0.9.8",
+ "resolved": "https://registry.npmjs.org/react-native-actions-sheet/-/react-native-actions-sheet-0.9.8.tgz",
+ "integrity": "sha512-hoFLKEoknwQEuxANbRxtg/LofvhqqLYbtIp/XiqC2cI+nyfYVra5i62A75ksZdBAqB6iZ3nolOwL8voLfSUXIw==",
"license": "MIT",
- "dependencies": {
- "react-native-safe-area-context": "^4.8.2"
- },
"peerDependencies": {
"react-native": "*",
- "react-native-gesture-handler": "*"
+ "react-native-gesture-handler": "*",
+ "react-native-safe-area-context": "*"
}
},
"node_modules/react-native-config": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/react-native-config/-/react-native-config-1.5.2.tgz",
- "integrity": "sha512-jIx/21Ryr7+NXfULG1lQoct4KgmVae2KZ7/mt5fY2tm4s7N0jAxRm5Js8FX6adgkHuhV2fiizEBJDn/fWIFWiw==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/react-native-config/-/react-native-config-1.6.1.tgz",
+ "integrity": "sha512-HvKtxr6/Tq3iMdFx5REYZsjCtPi0RxQOMCs15+DqrUPTNFtWHuEuh+zw7fJp+dmuO79YMfdtlsPWIGTHtaXwjg==",
"license": "MIT",
"peerDependencies": {
+ "react": "*",
+ "react-native": "*",
"react-native-windows": ">=0.61"
},
"peerDependenciesMeta": {
@@ -10005,15 +11840,14 @@
}
},
"node_modules/react-native-gesture-handler": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.20.0.tgz",
- "integrity": "sha512-rFKqgHRfxQ7uSAivk8vxCiW4SB3G0U7jnv7kZD4Y90K5kp6YrU8Q3tWhxe3Rx55BIvSd3mBe9ZWbWVJ0FsSHPA==",
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.30.0.tgz",
+ "integrity": "sha512-5YsnKHGa0X9C8lb5oCnKm0fLUPM6CRduvUUw2Bav4RIj/C3HcFh4RIUnF8wgG6JQWCL1//gRx4v+LVWgcIQdGA==",
"license": "MIT",
"dependencies": {
"@egjs/hammerjs": "^2.0.17",
"hoist-non-react-statics": "^3.3.0",
- "invariant": "^2.2.4",
- "prop-types": "^15.7.2"
+ "invariant": "^2.2.4"
},
"peerDependencies": {
"react": "*",
@@ -10031,25 +11865,29 @@
}
},
"node_modules/react-native-localize": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-3.2.0.tgz",
- "integrity": "sha512-Wi486WdDoBcDKUNxzr2/8f64ZwkWExlIvn0lcfFhsRNP2CVXGkjLyXhr3h6jf3Utkv5EmoFKiNqcmZn9kjYDxQ==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-3.7.0.tgz",
+ "integrity": "sha512-6Ohx+zZzycC6zhNVBGM/u1U+O6Ww29YIFseeyXqsKcO/pTfjLcdE40IUJF4SVVwrdh00IMJwy90HjLGUaeqK7Q==",
"license": "MIT",
"peerDependencies": {
- "react": ">=18.1.0",
- "react-native": ">=0.70.0",
- "react-native-macos": ">=0.70.0"
+ "@expo/config-plugins": "*",
+ "react": "*",
+ "react-native": "*",
+ "react-native-macos": "*"
},
"peerDependenciesMeta": {
+ "@expo/config-plugins": {
+ "optional": true
+ },
"react-native-macos": {
"optional": true
}
}
},
"node_modules/react-native-maps": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.15.6.tgz",
- "integrity": "sha512-RRyjMvpMoV3249kJ9PA1JjZE/8FmYYHrHuloI/Vzkg/DjxFtJAbFnCnhg5AyS/LI5/n2riulbVl4qpiKpuO22Q==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.20.1.tgz",
+ "integrity": "sha512-NZI3B5Z6kxAb8gzb2Wxzu/+P2SlFIg1waHGIpQmazDSCRkNoHNY4g96g+xS0QPSaG/9xRBbDNnd2f2/OW6t6LQ==",
"license": "MIT",
"dependencies": {
"@types/geojson": "^7946.0.13"
@@ -10079,9 +11917,9 @@
}
},
"node_modules/react-native-pager-view": {
- "version": "6.3.3",
- "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.3.3.tgz",
- "integrity": "sha512-HViKBlfN/kBJUSu5mRL/V9Bkf1j7uDZozGAjbzh4o9XYo11qVcIK7IwvfzqrkNerVSDy/cAmZcXbcyWnII8xMA==",
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.9.1.tgz",
+ "integrity": "sha512-uUT0MMMbNtoSbxe9pRvdJJKEi9snjuJ3fXlZhG8F2vVMOBJVt/AFtqMPUHu9yMflmqOr08PewKzj9EPl/Yj+Gw==",
"license": "MIT",
"peerDependencies": {
"react": "*",
@@ -10105,16 +11943,19 @@
}
},
"node_modules/react-native-reanimated": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.13.0.tgz",
- "integrity": "sha512-7vl3NMEiuVIV0vYjr/TbL9bXVes+GcfnhK/A3X02LQ+QFbSZp1xfAxOmePabgyjyz3GIALeXcx5fldo3kOM3gA==",
+ "version": "3.16.7",
+ "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.16.7.tgz",
+ "integrity": "sha512-qoUUQOwE1pHlmQ9cXTJ2MX9FQ9eHllopCLiWOkDkp6CER95ZWeXhJCP4cSm6AD4jigL5jHcZf/SkWrg8ttZUsw==",
"license": "MIT",
"dependencies": {
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
+ "@babel/plugin-transform-class-properties": "^7.0.0-0",
+ "@babel/plugin-transform-classes": "^7.0.0-0",
"@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0",
"@babel/plugin-transform-optional-chaining": "^7.0.0-0",
"@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
"@babel/plugin-transform-template-literals": "^7.0.0-0",
+ "@babel/plugin-transform-unicode-regex": "^7.0.0-0",
"@babel/preset-typescript": "^7.16.7",
"convert-source-map": "^2.0.0",
"invariant": "^2.2.4"
@@ -10126,9 +11967,9 @@
}
},
"node_modules/react-native-safe-area-context": {
- "version": "4.10.7",
- "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.7.tgz",
- "integrity": "sha512-Lq+gtuIF28mMtBacFchGpO1KHMTvzeb3ji1HAVnMTPe3qWR46Tb4AlztZTvTwUnpZ8JVaC9sKXnJHKmuaIQwXA==",
+ "version": "4.14.1",
+ "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.14.1.tgz",
+ "integrity": "sha512-+tUhT5WBl8nh5+P+chYhAjR470iCByf9z5EYdCEbPaAK3Yfzw+o8VRPnUgmPAKlSccOgQBxx3NOl/Wzckn9ujg==",
"license": "MIT",
"peerDependencies": {
"react": "*",
@@ -10136,9 +11977,9 @@
}
},
"node_modules/react-native-screens": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.32.0.tgz",
- "integrity": "sha512-wybqZAHX7v8ipOXhh90CqGLkBHw5JYqKNRBX7R/b0c2WQisTOgu0M0yGwBMM6LyXRBT+4k3NTGHdDbpJVpq0yQ==",
+ "version": "3.37.0",
+ "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.37.0.tgz",
+ "integrity": "sha512-vEi4qZqWYoGuVGuHTv1K2XA90rgSydksmR5+tb5uhL93whl6Bch6EEXzC+8eEfj4SimiCgXBPY7r/xTXJxvnUg==",
"license": "MIT",
"dependencies": {
"react-freeze": "^1.0.0",
@@ -10169,21 +12010,11 @@
"integrity": "sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==",
"license": "MIT"
},
- "node_modules/react-native-swiper": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/react-native-swiper/-/react-native-swiper-1.6.0.tgz",
- "integrity": "sha512-OnkTTZi+9uZUgy0uz1I9oYDhCU3z36lZn+LFsk9FXPRelxb/KeABzvPs3r3SrHWy1aA67KGtSFj0xNK2QD0NJQ==",
- "license": "MIT",
- "dependencies": {
- "prop-types": "^15.5.10"
- }
- },
"node_modules/react-native-tab-view": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-3.5.2.tgz",
"integrity": "sha512-nE5WqjbeEPsWQx4mtz81QGVvgHRhujTNIIZiMCx3Bj6CBFDafbk7XZp9ocmtzXUQaZ4bhtVS43R4FIiR4LboJw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"use-latest-callback": "^0.1.5"
},
@@ -10193,10 +12024,20 @@
"react-native-pager-view": "*"
}
},
+ "node_modules/react-native-tab-view/node_modules/use-latest-callback": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.11.tgz",
+ "integrity": "sha512-8nhb73STSD/z3GTHklvNjL8F9wMOo0bj0AFnulpIYuFTm6aQlT3ZcNbXF2YurKImIY8+kpSFSDHZZyQmurGrhw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
"node_modules/react-native-vector-icons": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.1.0.tgz",
- "integrity": "sha512-fdQjCHIdoXmRoTZ5gvN1FmT4sGLQ2wmQiNZHKJQUYnE2tkIwjGnxNch+6Nd4lHAACvMWO7LOzBNot2u/zlOmkw==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.3.0.tgz",
+ "integrity": "sha512-IFQ0RE57819hOUdFvgK4FowM5aMXg7C7XKsuGLevqXkkIJatc3QopN0wYrb2IrzUgmdpfP+QVIbI3S6h7M0btw==",
+ "deprecated": "react-native-vector-icons package has moved to a new model of per-icon-family packages. See the https://github.com/oblador/react-native-vector-icons/blob/master/MIGRATION.md on how to migrate",
"license": "MIT",
"dependencies": {
"prop-types": "^15.7.2",
@@ -10249,6 +12090,8 @@
},
"node_modules/react-native/node_modules/@jest/types": {
"version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -10262,24 +12105,18 @@
}
},
"node_modules/react-native/node_modules/@types/yargs": {
- "version": "15.0.19",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
}
},
- "node_modules/react-native/node_modules/mkdirp": {
- "version": "0.5.6",
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
"node_modules/react-native/node_modules/pretty-format": {
"version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
+ "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
"license": "MIT",
"dependencies": {
"@jest/types": "^26.6.2",
@@ -10293,24 +12130,31 @@
},
"node_modules/react-native/node_modules/react-is": {
"version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"license": "MIT"
},
- "node_modules/react-native/node_modules/regenerator-runtime": {
- "version": "0.13.11",
- "license": "MIT"
+ "node_modules/react-native/node_modules/ws": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
+ "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
+ "license": "MIT",
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
},
"node_modules/react-redux": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
- "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+ "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
"license": "MIT",
"dependencies": {
- "@types/use-sync-external-store": "^0.0.3",
- "use-sync-external-store": "^1.0.0"
+ "@types/use-sync-external-store": "^0.0.6",
+ "use-sync-external-store": "^1.4.0"
},
"peerDependencies": {
- "@types/react": "^18.2.25",
- "react": "^18.0",
+ "@types/react": "^18.2.25 || ^19",
+ "react": "^18.0 || ^19",
"redux": "^5.0.0"
},
"peerDependenciesMeta": {
@@ -10324,6 +12168,8 @@
},
"node_modules/react-refresh": {
"version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -10331,6 +12177,8 @@
},
"node_modules/react-shallow-renderer": {
"version": "16.15.0",
+ "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
+ "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==",
"license": "MIT",
"dependencies": {
"object-assign": "^4.1.1",
@@ -10341,20 +12189,31 @@
}
},
"node_modules/react-test-renderer": {
- "version": "18.2.0",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
+ "integrity": "sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "react-is": "^18.2.0",
+ "react-is": "^18.3.1",
"react-shallow-renderer": "^16.15.0",
- "scheduler": "^0.23.0"
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
}
},
+ "node_modules/react-test-renderer/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/react-test-renderer/node_modules/scheduler": {
"version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10362,28 +12221,29 @@
}
},
"node_modules/readable-stream": {
- "version": "2.3.8",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"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"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/readable-stream/node_modules/isarray": {
- "version": "1.0.0",
- "license": "MIT"
- },
"node_modules/readline": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz",
+ "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==",
"license": "BSD"
},
"node_modules/recast": {
"version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz",
+ "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==",
"license": "MIT",
"dependencies": {
"ast-types": "0.15.2",
@@ -10396,9 +12256,9 @@
}
},
"node_modules/recyclerlistview": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/recyclerlistview/-/recyclerlistview-4.2.1.tgz",
- "integrity": "sha512-NtVYjofwgUCt1rEsTp6jHQg/47TWjnO92TU2kTVgJ9wsc/ely4HnizHHa+f/dI7qaw4+zcSogElrLjhMltN2/g==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/recyclerlistview/-/recyclerlistview-4.2.3.tgz",
+ "integrity": "sha512-STR/wj/FyT8EMsBzzhZ1l2goYirMkIgfV3gYEPxI3Kf3lOnu6f7Dryhyw7/IkQrgX5xtTcDrZMqytvteH9rL3g==",
"license": "Apache-2.0",
"dependencies": {
"lodash.debounce": "4.0.8",
@@ -10446,17 +12306,20 @@
}
},
"node_modules/reflect.getprototypeof": {
- "version": "1.0.6",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.1",
+ "es-abstract": "^1.23.9",
"es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "globalthis": "^1.0.3",
- "which-builtin-type": "^1.1.3"
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
@@ -10467,10 +12330,14 @@
},
"node_modules/regenerate": {
"version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"license": "MIT"
},
"node_modules/regenerate-unicode-properties": {
- "version": "10.1.1",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
+ "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2"
@@ -10480,25 +12347,24 @@
}
},
"node_modules/regenerator-runtime": {
- "version": "0.14.1",
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"license": "MIT"
},
- "node_modules/regenerator-transform": {
- "version": "0.15.2",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.8.4"
- }
- },
"node_modules/regexp.prototype.flags": {
- "version": "1.5.2",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.6",
+ "call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-errors": "^1.3.0",
- "set-function-name": "^2.0.1"
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -10508,38 +12374,44 @@
}
},
"node_modules/regexpu-core": {
- "version": "5.3.2",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
+ "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
"license": "MIT",
"dependencies": {
- "@babel/regjsgen": "^0.8.0",
"regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.1.0",
- "regjsparser": "^0.9.1",
+ "regenerate-unicode-properties": "^10.2.2",
+ "regjsgen": "^0.8.0",
+ "regjsparser": "^0.13.0",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
+ "unicode-match-property-value-ecmascript": "^2.2.1"
},
"engines": {
"node": ">=4"
}
},
+ "node_modules/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+ "license": "MIT"
+ },
"node_modules/regjsparser": {
- "version": "0.9.1",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz",
+ "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==",
"license": "BSD-2-Clause",
"dependencies": {
- "jsesc": "~0.5.0"
+ "jsesc": "~3.1.0"
},
"bin": {
"regjsparser": "bin/parser"
}
},
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "0.5.0",
- "bin": {
- "jsesc": "bin/jsesc"
- }
- },
"node_modules/require-directory": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -10547,6 +12419,8 @@
},
"node_modules/require-main-filename": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"license": "ISC"
},
"node_modules/reselect": {
@@ -10556,22 +12430,29 @@
"license": "MIT"
},
"node_modules/resolve": {
- "version": "1.22.8",
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "is-core-module": "^2.16.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10583,6 +12464,8 @@
},
"node_modules/resolve-from": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10590,7 +12473,9 @@
}
},
"node_modules/resolve.exports": {
- "version": "2.0.2",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10599,6 +12484,8 @@
},
"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==",
"license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
@@ -10609,7 +12496,9 @@
}
},
"node_modules/reusify": {
- "version": "1.0.4",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"license": "MIT",
"engines": {
"iojs": ">=1.0.0",
@@ -10618,6 +12507,9 @@
},
"node_modules/rimraf": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
@@ -10631,6 +12523,8 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"funding": [
{
"type": "github",
@@ -10651,13 +12545,16 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.1.2",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
- "get-intrinsic": "^1.2.4",
- "has-symbols": "^1.0.3",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
"isarray": "^2.0.5"
},
"engines": {
@@ -10668,17 +12565,34 @@
}
},
"node_modules/safe-buffer": {
- "version": "5.1.2",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
"license": "MIT"
},
- "node_modules/safe-regex-test": {
- "version": "1.0.3",
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.6",
"es-errors": "^1.3.0",
- "is-regex": "^1.1.4"
+ "isarray": "^2.0.5"
},
"engines": {
"node": ">= 0.4"
@@ -10687,14 +12601,28 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/safer-buffer": {
- "version": "2.1.2",
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "peer": true
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/scheduler": {
"version": "0.24.0-canary-efb381bbf-20230505",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz",
+ "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
@@ -10702,6 +12630,8 @@
},
"node_modules/selfsigned": {
"version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
+ "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
"license": "MIT",
"dependencies": {
"@types/node-forge": "^1.3.0",
@@ -10712,32 +12642,33 @@
}
},
"node_modules/semver": {
- "version": "7.6.2",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
}
},
"node_modules/send": {
- "version": "0.18.0",
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
+ "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
+ "fresh": "~0.5.2",
+ "http-errors": "~2.0.1",
"mime": "1.6.0",
"ms": "2.1.3",
- "on-finished": "2.4.1",
+ "on-finished": "~2.4.1",
"range-parser": "~1.2.1",
- "statuses": "2.0.1"
+ "statuses": "~2.0.2"
},
"engines": {
"node": ">= 0.8.0"
@@ -10745,6 +12676,8 @@
},
"node_modules/send/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"
@@ -10752,10 +12685,23 @@
},
"node_modules/send/node_modules/debug/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/send/node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/send/node_modules/mime": {
"version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"license": "MIT",
"bin": {
"mime": "cli.js"
@@ -10764,12 +12710,10 @@
"node": ">=4"
}
},
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "license": "MIT"
- },
"node_modules/send/node_modules/on-finished": {
"version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
@@ -10778,32 +12722,58 @@
"node": ">= 0.8"
}
},
+ "node_modules/send/node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/serialize-error": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz",
+ "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
+ "version": "1.16.3",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
+ "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
"license": "MIT",
"dependencies": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "~0.19.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
+ "node_modules/serve-static/node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/set-blocking": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"license": "ISC"
},
"node_modules/set-function-length": {
"version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10820,6 +12790,8 @@
},
"node_modules/set-function-name": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10832,53 +12804,140 @@
"node": ">= 0.4"
}
},
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/setprototypeof": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"license": "ISC"
},
- "node_modules/shallow-clone": {
- "version": "3.0.1",
+ "node_modules/shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "kind-of": "^6.0.2"
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/shebang-command": {
- "version": "2.0.0",
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/shebang-regex": {
- "version": "3.0.0",
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.8.1",
- "license": "MIT",
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/side-channel": {
- "version": "1.0.6",
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bound": "^1.0.2",
"es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -10889,29 +12948,35 @@
},
"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==",
"license": "ISC"
},
"node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
+ "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.3.1"
}
},
"node_modules/simple-swizzle/node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
+ "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
"license": "MIT"
},
"node_modules/sisteransi": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"license": "MIT"
},
"node_modules/slash": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10919,6 +12984,8 @@
},
"node_modules/slice-ansi": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.0",
@@ -10931,6 +12998,8 @@
},
"node_modules/slice-ansi/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==",
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
@@ -10939,22 +13008,35 @@
"node": ">=4"
}
},
- "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
+ "node_modules/slice-ansi/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==",
"license": "MIT",
- "engines": {
- "node": ">=4"
+ "dependencies": {
+ "color-name": "1.1.3"
}
},
+ "node_modules/slice-ansi/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==",
+ "license": "MIT"
+ },
"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",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-support": {
- "version": "0.5.21",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
@@ -10972,10 +13054,14 @@
},
"node_modules/sprintf-js": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"license": "BSD-3-Clause"
},
"node_modules/stack-utils": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^2.0.0"
@@ -10986,6 +13072,8 @@
},
"node_modules/stack-utils/node_modules/escape-string-regexp": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10993,10 +13081,14 @@
},
"node_modules/stackframe": {
"version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
+ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
"license": "MIT"
},
"node_modules/stacktrace-parser": {
- "version": "0.1.10",
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz",
+ "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==",
"license": "MIT",
"dependencies": {
"type-fest": "^0.7.1"
@@ -11007,16 +13099,34 @@
},
"node_modules/stacktrace-parser/node_modules/type-fest": {
"version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
+ "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"node_modules/statuses": {
- "version": "2.0.1",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
+ "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "internal-slot": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/strict-uri-encode": {
@@ -11029,14 +13139,18 @@
}
},
"node_modules/string_decoder": {
- "version": "1.1.1",
+ "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==",
"license": "MIT",
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.0"
}
},
"node_modules/string-length": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11049,11 +13163,15 @@
},
"node_modules/string-natural-compare": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
+ "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==",
"dev": true,
"license": "MIT"
},
"node_modules/string-width": {
"version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -11064,23 +13182,35 @@
"node": ">=8"
}
},
+ "node_modules/string-width/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/string.prototype.matchall": {
- "version": "4.0.11",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
+ "es-abstract": "^1.23.6",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.7",
- "regexp.prototype.flags": "^1.5.2",
+ "get-intrinsic": "^1.2.6",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "regexp.prototype.flags": "^1.5.3",
"set-function-name": "^2.0.2",
- "side-channel": "^1.0.6"
+ "side-channel": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -11089,15 +13219,31 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
"node_modules/string.prototype.trim": {
- "version": "1.2.9",
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.0",
- "es-object-atoms": "^1.0.0"
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -11107,20 +13253,28 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.8",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
"version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11137,6 +13291,8 @@
},
"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==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -11147,6 +13303,8 @@
},
"node_modules/strip-bom": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11155,6 +13313,8 @@
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -11162,6 +13322,8 @@
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11172,15 +13334,28 @@
}
},
"node_modules/strnum": {
- "version": "1.0.5",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz",
+ "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
"license": "MIT"
},
"node_modules/sudo-prompt": {
"version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz",
+ "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"license": "MIT"
},
"node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -11191,6 +13366,8 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -11201,6 +13378,8 @@
},
"node_modules/temp": {
"version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
+ "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
"license": "MIT",
"dependencies": {
"rimraf": "~2.6.2"
@@ -11211,6 +13390,8 @@
},
"node_modules/temp-dir": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
+ "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -11218,6 +13399,9 @@
},
"node_modules/temp/node_modules/rimraf": {
"version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
@@ -11227,11 +13411,13 @@
}
},
"node_modules/terser": {
- "version": "5.31.1",
+ "version": "5.46.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
+ "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
"license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
+ "acorn": "^8.15.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
@@ -11242,8 +13428,26 @@
"node": ">=10"
}
},
+ "node_modules/terser/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/terser/node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
"node_modules/test-exclude": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11255,23 +13459,89 @@
"node": ">=8"
}
},
+ "node_modules/test-exclude/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/test-exclude/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/text-table": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true,
"license": "MIT"
},
"node_modules/throat": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
+ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
"license": "MIT"
},
"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-case": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
@@ -11286,17 +13556,14 @@
},
"node_modules/tmpl": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"license": "BSD-3-Clause"
},
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
@@ -11307,6 +13574,8 @@
},
"node_modules/toidentifier": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"license": "MIT",
"engines": {
"node": ">=0.6"
@@ -11320,10 +13589,14 @@
},
"node_modules/tr46": {
"version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
"node_modules/ts-api-utils": {
- "version": "1.3.0",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11340,11 +13613,15 @@
"license": "ISC"
},
"node_modules/tslib": {
- "version": "2.6.3",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "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": {
@@ -11359,11 +13636,15 @@
},
"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/type-check": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11375,6 +13656,8 @@
},
"node_modules/type-detect": {
"version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -11382,6 +13665,8 @@
},
"node_modules/type-fest": {
"version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -11392,28 +13677,32 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.2",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bound": "^1.0.3",
"es-errors": "^1.3.0",
- "is-typed-array": "^1.1.13"
+ "is-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.1",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
"for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13"
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
@@ -11423,16 +13712,19 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.2",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
+ "call-bind": "^1.0.8",
"for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13"
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
},
"engines": {
"node": ">= 0.4"
@@ -11442,16 +13734,18 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.6",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-proto": "^1.0.3",
"is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0"
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
},
"engines": {
"node": ">= 0.4"
@@ -11462,6 +13756,8 @@
},
"node_modules/typescript": {
"version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -11473,25 +13769,34 @@
}
},
"node_modules/unbox-primitive": {
- "version": "1.0.2",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bound": "^1.0.3",
"has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
+ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+ "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -11499,6 +13804,8 @@
},
"node_modules/unicode-match-property-ecmascript": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"license": "MIT",
"dependencies": {
"unicode-canonical-property-names-ecmascript": "^2.0.0",
@@ -11509,14 +13816,18 @@
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.1.0",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
+ "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -11524,6 +13835,8 @@
},
"node_modules/universalify": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
@@ -11531,13 +13844,17 @@
},
"node_modules/unpipe": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.0",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
"funding": [
{
"type": "opencollective",
@@ -11554,8 +13871,8 @@
],
"license": "MIT",
"dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -11566,6 +13883,8 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -11594,29 +13913,33 @@
}
},
"node_modules/use-latest-callback": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.11.tgz",
- "integrity": "sha512-8nhb73STSD/z3GTHklvNjL8F9wMOo0bj0AFnulpIYuFTm6aQlT3ZcNbXF2YurKImIY8+kpSFSDHZZyQmurGrhw==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.2.6.tgz",
+ "integrity": "sha512-FvRG9i1HSo0wagmX63Vrm8SnlUU3LMM3WyZkQ76RnslpBrX694AdG4A0zQBx2B3ZifFA0yv/BaEHGBnEax5rZg==",
"license": "MIT",
"peerDependencies": {
"react": ">=16.8"
}
},
"node_modules/use-sync-external-store": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
- "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
"license": "MIT",
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "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/utils-merge": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"license": "MIT",
"engines": {
"node": ">= 0.4.0"
@@ -11624,6 +13947,8 @@
},
"node_modules/v8-to-istanbul": {
"version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11637,6 +13962,8 @@
},
"node_modules/vary": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -11644,6 +13971,8 @@
},
"node_modules/vlq": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz",
+ "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==",
"license": "MIT"
},
"node_modules/void-elements": {
@@ -11657,6 +13986,8 @@
},
"node_modules/walker": {
"version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"license": "Apache-2.0",
"dependencies": {
"makeerror": "1.0.12"
@@ -11670,6 +14001,8 @@
},
"node_modules/wcwidth": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"license": "MIT",
"dependencies": {
"defaults": "^1.0.3"
@@ -11677,14 +14010,20 @@
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause"
},
"node_modules/whatwg-fetch": {
"version": "3.6.20",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
+ "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
"license": "MIT"
},
"node_modules/whatwg-url": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
@@ -11693,6 +14032,8 @@
},
"node_modules/which": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -11705,37 +14046,45 @@
}
},
"node_modules/which-boxed-primitive": {
- "version": "1.0.2",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-builtin-type": {
- "version": "1.1.3",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "function.prototype.name": "^1.1.5",
- "has-tostringtag": "^1.0.0",
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
"is-async-function": "^2.0.0",
- "is-date-object": "^1.0.5",
- "is-finalizationregistry": "^1.0.2",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
"is-generator-function": "^1.0.10",
- "is-regex": "^1.1.4",
+ "is-regex": "^1.2.1",
"is-weakref": "^1.0.2",
"isarray": "^2.0.5",
- "which-boxed-primitive": "^1.0.2",
- "which-collection": "^1.0.1",
- "which-typed-array": "^1.1.9"
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
},
"engines": {
"node": ">= 0.4"
@@ -11746,6 +14095,8 @@
},
"node_modules/which-collection": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11763,17 +14114,23 @@
},
"node_modules/which-module": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"license": "ISC"
},
"node_modules/which-typed-array": {
- "version": "1.1.15",
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz",
+ "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
"has-tostringtag": "^1.0.2"
},
"engines": {
@@ -11785,6 +14142,8 @@
},
"node_modules/word-wrap": {
"version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11793,6 +14152,8 @@
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -11808,26 +14169,49 @@
},
"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/write-file-atomic": {
- "version": "2.4.3",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
"license": "ISC",
"dependencies": {
- "graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/ws": {
- "version": "6.2.3",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"license": "MIT",
- "dependencies": {
- "async-limiter": "~1.0.0"
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
"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"
@@ -11835,23 +14219,38 @@
},
"node_modules/y18n": {
"version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"license": "ISC",
"engines": {
"node": ">=10"
}
},
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "license": "ISC"
+ },
"node_modules/yaml": {
- "version": "2.4.5",
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
}
},
"node_modules/yargs": {
"version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"license": "MIT",
"dependencies": {
"cliui": "^8.0.1",
@@ -11868,6 +14267,8 @@
},
"node_modules/yargs-parser": {
"version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -11875,6 +14276,8 @@
},
"node_modules/yocto-queue": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -11884,9 +14287,9 @@
}
},
"node_modules/yup": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz",
- "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz",
+ "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==",
"license": "MIT",
"dependencies": {
"property-expr": "^2.0.5",
diff --git a/package.json b/package.json
index 70176de4..ade93334 100644
--- a/package.json
+++ b/package.json
@@ -1,34 +1,35 @@
{
"name": "openlittermap",
- "version": "6.2.0",
+ "version": "7.0.0",
"private": true,
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"lint": "eslint .",
"start": "react-native start",
- "test": "jest"
+ "test": "jest",
+ "postinstall": "sed -i '' \"s/s.dependency 'Sentry\\/HybridSDK', '8.41.0'/s.dependency 'Sentry\\/HybridSDK', '8.46.0'/\" node_modules/@sentry/react-native/RNSentry.podspec 2>/dev/null || true && node scripts/patch-tab-view.js 2>/dev/null || true"
},
"dependencies": {
+ "@lodev09/react-native-exify": "^1.0.3",
"@react-native-async-storage/async-storage": "^1.23.1",
"@react-native-camera-roll/camera-roll": "^7.8.1",
"@react-native-clipboard/clipboard": "^1.14.2",
"@react-native-community/datetimepicker": "^8.2.0",
- "@react-native-community/masked-view": "^0.1.11",
+ "@react-native-masked-view/masked-view": "^0.3.2",
"@react-native-picker/picker": "^2.7.7",
"@react-navigation/material-top-tabs": "^6.6.13",
"@react-navigation/native": "^6.1.17",
"@react-navigation/stack": "^6.4.0",
"@reduxjs/toolkit": "^2.2.6",
- "@sentry/react-native": "^5.24.1",
+ "@sentry/react-native": "^5.36.0",
"@shopify/flash-list": "^1.7.0",
"axios": "^1.7.2",
+ "dayjs": "^1.11.19",
"formik": "^2.4.6",
"i18next": "^23.11.5",
- "immer": "^10.1.1",
"lottie-react-native": "^6.7.2",
- "moment": "^2.30.1",
- "react": "18.2.0",
+ "react": "^18.2.0",
"react-i18next": "^14.1.2",
"react-native": "0.74.3",
"react-native-actions-sheet": "^0.9.6",
@@ -37,20 +38,18 @@
"react-native-gesture-handler": "^2.20.0",
"react-native-linear-gradient": "^2.8.3",
"react-native-localize": "^3.2.0",
- "react-native-maps": "^1.15.6",
"react-native-page-control": "^1.1.2",
"react-native-pager-view": "^6.3.3",
"react-native-permissions": "^4.1.5",
- "react-native-reanimated": "^3.13.0",
+ "react-native-reanimated": "^3.16.7",
"react-native-safe-area-context": "^4.10.7",
"react-native-screens": "^3.32.0",
"react-native-svg": "^15.3.0",
"react-native-swipe-gestures": "^1.0.5",
- "react-native-swiper": "^1.6.0",
+ "react-native-tab-view": "^3.5.2",
"react-native-vector-icons": "^10.1.0",
"react-redux": "^9.1.2",
"redux-persist": "^6.0.0",
- "redux-thunk": "^3.1.0",
"use-count-up": "^3.0.1",
"yup": "^1.4.0"
},
@@ -68,14 +67,13 @@
"eslint": "^8.19.0",
"jest": "^29.6.3",
"prettier": "2.8.8",
- "react-test-renderer": "18.2.0",
+ "react-test-renderer": "^18.2.0",
"redux-immutable-state-invariant": "^2.1.0",
"typescript": "5.0.4"
},
"engines": {
"node": ">=18"
},
- "packageManager": "yarn@3.6.4",
"reactNativePermissionsIOS": [
"Camera",
"LocationAccuracy",
diff --git a/readme/AUDIT.md b/readme/AUDIT.md
new file mode 100644
index 00000000..cad106ca
--- /dev/null
+++ b/readme/AUDIT.md
@@ -0,0 +1,637 @@
+# AUDIT.md — OpenLitterMap React Native App
+
+**Date:** 2026-03-08
+**App Version:** 7.0.0
+**React Native Version:** 0.74.3
+**Branch:** openlittermap/v7
+
+---
+
+## 1. File Inventory
+
+### Root Config
+| File | Purpose |
+|------|---------|
+| `package.json` | App manifest, dependencies, scripts |
+| `app.json` | RN app name config ("openlittermap") |
+| `index.js` | Entry point, registers App component |
+| `App.tsx` | Root: Redux Provider, PersistGate, NavigationContainer, Sentry |
+| `i18n.js` | i18next setup (en, de, nl, fr, es, pt, ar, ie) |
+| `tsconfig.json` | Extends @react-native/typescript-config |
+| `babel.config.js` | @react-native/babel-preset |
+| `metro.config.js` | Default metro config |
+| `jest.config.js` | Preset: react-native |
+| `.eslintrc.js` | @react-native config, 4-space indent |
+| `.prettierrc.js` | Single quotes, no bracket spacing |
+| `Gemfile` | Ruby gems for CocoaPods |
+
+### Actions
+| File | Purpose |
+|------|---------|
+| `actions/types.js` | Environment config (react-native-config), endpoint selection |
+
+### Store
+| File | Purpose |
+|------|---------|
+| `store/index.js` | configureStore with redux-persist (whitelist: auth, images), AsyncStorage, redux-immutable-state-invariant (dev) |
+
+### Reducers (11 slices)
+| File | Slice Key | API Calls | Status |
+|------|-----------|-----------|--------|
+| `reducers/index.js` | Root combiner | 0 | OK |
+| `reducers/auth_reducer.js` | `auth` | 5 | Active — Sanctum auth |
+| `reducers/gallery_reducer.js` | `gallery` | 1 | CameraRoll fetch, EXIF GPS fallback, derived selectors |
+| `reducers/images_reducer.js` | `images` | 4 | Active, core — v5 CLO tagging |
+| `reducers/leaderboards_reducer.js` | `leaderboard` | 1 | Active |
+| `reducers/locations_reducer.js` | `locations` | 2 | Active |
+| `reducers/my_uploads_reducer.js` | `my_uploads_reducer` | 3 | Active |
+| `reducers/settings_reducer.js` | `settings` | 4 | Active |
+| `reducers/shared_reducer.js` | `shared` | 1 | Active |
+| `reducers/stats_reducer.js` | `stats` | 1 | Active |
+| `reducers/tags_reducer.js` | `tags` | 1 | Active, cached 7 days |
+| `reducers/team_reducer.js` | `teams` | 8 | Active |
+
+**Removed:** `camera_reducer.js` (unused), `web_reducer.js` (dead code), `litter_reducer.js` (superseded by v5 tagging in images_reducer)
+
+### Routes
+| File | Purpose |
+|------|---------|
+| `routes/index.js` | Barrel export for MainRoutes |
+| `routes/MainRoutes.js` | Root navigator, auth gating, conditional routing |
+| `routes/AuthStack.js` | Welcome → Auth screen stack |
+| `routes/TabRoutes.tsx` | Bottom tabs: Home, Team, Global Data, Leaderboards, User Stats |
+| `routes/PermissionStack.tsx` | Camera/Gallery permission screens |
+| `routes/TeamStack.tsx` | Team screens stack |
+
+**Removed:** `routes/GalleryRoutes.tsx` (defined Gallery→Album stack but never used in MainRoutes)
+
+### Screens
+| File | Screen | Status |
+|------|--------|--------|
+| `screens/home/HomeScreen.js` | Main upload screen | Active |
+| `screens/home/homeComponents/ActionButton.js` | FAB button | Active |
+| `screens/home/homeComponents/UploadButton.js` | Upload trigger | Active |
+| `screens/home/homeComponents/UploadImagesGrid.js` | Image grid | Active |
+| `screens/auth/AuthScreen.tsx` | Login/signup/forgot tabs | Active |
+| `screens/auth/WelcomeScreen.tsx` | Onboarding slides | Active |
+| `screens/auth/authComponents/SigninForm.tsx` | Login form (Formik+Yup) | Active |
+| `screens/auth/authComponents/SignupForm.tsx` | Signup form (Formik+Yup) | Active |
+| `screens/auth/authComponents/ForgotPasswordForm.tsx` | Password reset form | Active |
+| `screens/auth/authComponents/Slides.tsx` | Welcome slides content | Active |
+| `screens/auth/authComponents/LanguageFlags.tsx` | Language picker | Active |
+| `screens/auth/authComponents/StatusMessage.tsx` | Auth status display | Active |
+| `screens/addTag/AddTagScreen.js` | Tag images — full-screen image viewer with overlays | Active |
+| `screens/addTag/components/CategoryBrowser.js` | Category grid browser | Active |
+| `screens/addTag/components/ImageProgressDots.js` | Image navigation dots | Active |
+| `screens/addTag/components/ImageViewer.js` | Zoomable image display | Active |
+| `screens/addTag/components/TagDetailSheet.js` | Materials, brands, custom tags per tag | Active |
+| `screens/addTag/components/TagPills.js` | Tag chip display with remove/quantity | Active |
+| `screens/addTag/components/TagSearchBar.js` | Search tags with grouped results | Active |
+| `screens/addTag/components/TagSuggestions.js` | Suggest tags from other images | Active |
+| `screens/addTag/components/categoryColors.js` | Category color mapping | Active |
+| `screens/gallery/GalleryScreen.js` | Photo picker with gesture selection | Active |
+| `screens/gallery/AlbumScreen.js` | Album view | Active |
+| `screens/globalData/GlobalDataScreen.js` | Global statistics | Active |
+| `screens/leaderboards/LeaderboardsScreen.js` | Leaderboard | Active |
+| `screens/setting/SettingsScreen.js` | Settings | Active |
+| `screens/setting/settingComponents/SettingsComponent.js` | Settings edit forms | Active |
+| `screens/NewUpdateScreen.js` | App update prompt | Active |
+| `screens/userStats/UserStatsScreen.js` | User profile/stats | Active |
+| `screens/userStats/userComponents/MyUploads.js` | Upload history | Active |
+| `screens/userStats/userComponents/ProgressCircleCard.js` | XP progress | Active |
+| `screens/userStats/userComponents/ShowMyUploadsButton.js` | Nav button | Active |
+| `screens/profile/ProfileScreen.js` | Profile with animated stats | Active |
+| `screens/team/TeamScreen.js` | Team management | Active |
+| `screens/team/TeamDetailsScreen.js` | Team details | Active |
+| `screens/team/TopTeamsScreen.js` | Top teams list | Active, fake loading (BUG-11) |
+| `screens/team/TeamLeaderboardScreen.js` | Team leaderboard | Active |
+| `screens/permission/CameraPermissionScreen.js` | Camera permission | Active |
+| `screens/permission/GalleryPermissionScreen.js` | Gallery permission | Active |
+
+**Removed:** `screens/camera/CameraScreen.js` (dead — RNCamera commented out, not in navigator), `screens/map/MapScreen.js` (stub, not in navigator)
+
+### Shared Components
+| File | Purpose |
+|------|---------|
+| `screens/components/index.ts` | Barrel exports |
+| `screens/components/Header.js` | App header bar |
+| `screens/components/Button.tsx` | Shared button |
+| `screens/components/AnimatedCircle.tsx` | SVG animated circle |
+| `screens/components/typography/Body.tsx` | Body text |
+| `screens/components/typography/Caption.tsx` | Caption text |
+| `screens/components/typography/Title.tsx` | Title text |
+| `screens/components/typography/SubTitle.tsx` | Subtitle text |
+| `screens/components/typography/StyledText.tsx` | Base styled text |
+| `screens/components/theme/colors.ts` | Theme colors (single source of truth) |
+| `screens/components/theme/fonts.ts` | Font definitions |
+
+### Utils
+| File | Purpose |
+|------|---------|
+| `utils/isGeotagged.js` | Check image GPS data |
+| `utils/isTagged.js` | Check image has tags |
+| `utils/gps.js` | GPS coordinate validation |
+| `utils/readGpsFromExif.js` | EXIF GPS extraction (Android fallback) |
+| `utils/dayjs.js` | dayjs with relativeTime + isSameOrAfter plugins |
+| `utils/Values.js` | REM division factor |
+| `utils/setupAxiosInterceptors.js` | Global 401 handler + 30s timeout |
+| `utils/permissions/index.js` | Permission barrel exports |
+| `utils/permissions/cameraPermission.js` | Camera permission helpers |
+| `utils/permissions/cameraRollPermission.js` | Photo library permission helpers |
+| `utils/permissions/locationPermission.js` | Location permission helpers |
+
+**Removed:** `utils/Colors.js` (merged into `screens/components/theme/colors.ts`)
+
+---
+
+## 2. API Calls
+
+**Total: 31 endpoints + 1 global interceptor. All deprecated endpoints have been migrated.**
+
+**Backend confirmed (2026-03-08):** All endpoints verified against Laravel backend. Key field mappings confirmed below.
+
+### Auth (auth_reducer.js) — 5 endpoints
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 1 | `checkValidToken` | POST | `/api/validate-token` | None (token in header) | `message === 'valid'` | Bearer | OK |
+| 2 | `createAccount` | POST | `/api/auth/register` | `{email, password}` | `token`, `user.username` | None | OK |
+| 3 | `fetchUser` | GET | `/api/user/profile/index` | None | `user.*`, `stats.{uploads,litter,xp,littercoin,streak}`, `level.{level,title,progress_percent,xp_remaining}`, `rank.{global_position,percentile}`, `team.id`, `achievements`, `locations` | Bearer | OK |
+| 4 | `sendResetPasswordRequest` | POST | `/api/password/email` | `{email}` | `response.data` | None | OK |
+| 5 | `userLogin` | POST | `/api/auth/token` | `{identifier, password}` | `token`, `user` | None | OK |
+
+### Images (images_reducer.js) — 4 endpoints
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 6 | `getUntaggedImages` | GET | `/api/v3/user/photos` | params: `{tagged: false, per_page: 100}` | `photos[].{id,datetime,lat,lon,filename,picked_up,platform}` | Bearer | OK |
+| 7 | `uploadImage` | POST | `/api/v3/upload` | FormData: `photo, lat, lon, date, picked_up, model` | `success`, `photo_id` | Bearer | OK — backend also returns `xp_awarded`, `user_xp_total`, `city`, `state`, `country` |
+| 8 | `postTagsToPhoto` | POST | `/api/v3/tags` | `{photo_id, tags[{category_litter_object_id, litter_object_type_id, quantity, picked_up, materials, brands, custom_tags}]}` | `response.status` | Bearer | OK |
+| 9 | `editTagsOnPhoto` | PUT | `/api/v3/tags` | Same as #8 | `photoTags` | Bearer | OK — PUT atomically replaces all tags |
+
+### My Uploads (my_uploads_reducer.js) — 3 endpoints
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 10 | `fetchUploads` | GET | `/api/v3/user/photos` | params: `{page, tag?, custom_tag?, date_from?, date_to?}` | `photos[]`, `pagination.{total,per_page,current_page,last_page}` | Bearer | OK |
+| 11 | `fetchUploadStats` | GET | `/api/v3/user/photos/stats` | None | `response.data` (stored as `uploadStats`) | Bearer | OK |
+| 12 | `deleteUploadPhoto` | POST | `/api/profile/photos/delete` | `{photoid}` | None (success = no error) | Bearer | OK |
+
+**Backend confirmed:** Photo objects include `new_tags` (array), `total_tags`, `xp`, `team` (full object with `.name`), `summary` (JSON), `picked_up`. `result_string` is NOT returned (deprecated). Our `UploadCard` correctly reads `new_tags`, `total_tags`, `xp`, `team.name`.
+
+### Tags (tags_reducer.js) — 1 endpoint
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 13 | `fetchAllTags` | GET | `/api/tags/all` | None | `categories[], objects[], category_objects[], types[], category_object_types[], materials[], brands[]` | Optional | OK |
+
+**Backend confirmed:** Objects use `key` field (no `display_name`). CLO IDs come from `category_objects` pivot table. Our `tags_reducer` generates `displayName` at build time via `formatKey()`.
+
+### Settings (settings_reducer.js) — 4 endpoints
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 14 | `deleteAccount` | POST | `/api/settings/delete-account/` | `{password}` | `success`, `msg` | Bearer | OK |
+| 15 | `saveSettings` | POST | `/api/settings/update/` | `{key, value}` | `success` | Bearer | OK |
+| 16 | `saveSocialAccounts` | PATCH | `/api/settings` | `{...values}` | `message === 'success'` | Bearer | OK |
+| 17 | `toggleSettingsSwitch` | POST | `/api/settings/privacy/{endpoint}` | None | First key/value pair | Bearer | OK |
+
+**Backend confirmed:** Delete account returns `{ success: true }` on success (no `msg`), `{ success: false, msg: "password does not match" }` on failure.
+
+### Teams (team_reducer.js) — 8 endpoints
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 18 | `changeActiveTeam` | POST | `/api/teams/active` | `{team_id}` | `success`, `team.id` | Bearer | OK |
+| 19 | `createTeam` | POST | `/api/teams/create` | `{name, identifier, team_type: 1}` | `success`, `team` | Bearer | OK |
+| 20 | `inactivateTeam` | POST | `/api/teams/inactivate` | None | `success` | Bearer | OK |
+| 21 | `leaveTeam` | POST | `/api/teams/leave` | `{team_id}` | `activeTeam.id`, `team` | Bearer | OK |
+| 22 | `getTeamMembers` | GET | `/api/teams/members` | params: `{team_id, page}` | `result.{data[], next_page_url}` | Bearer | OK |
+| 23 | `getTopTeams` | GET | `/api/teams/leaderboard` | None | `response.data` (entire payload) | Bearer | OK |
+| 24 | `getUserTeams` | GET | `/api/teams/list` | None | `success`, `teams[]` | Bearer | OK |
+| 25 | `joinTeam` | POST | `/api/teams/join` | `{identifier}` | `success`, `activeTeam.id`, `team` | Bearer | OK |
+
+**Backend confirmed field mapping:**
+- Team objects return `total_tags` (NOT `total_litter`), `total_images`, `total_members`
+- Member pivot includes `pivot.total_photos` and `pivot.total_litter` — both confirmed
+- Code updated: `TeamDetailsScreen` now reads `total_tags`, `TeamListCard` fallback removed
+
+### Leaderboard (leaderboards_reducer.js) — 1 endpoint
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 26 | `getLeaderboardData` | GET | `/api/leaderboard` | params: `{timeFilter, page}` | `success`, `users[]`, `hasNextPage`, `total` | None | OK |
+
+### Stats (stats_reducer.js) — 1 endpoint
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 27 | `getStats` | GET | `/api/global/stats-data` | None | `total_tags`, `total_images`, `total_users`, `new_users_today`, `new_users_last_7_days`, `new_users_last_30_days` | None | OK |
+
+### Shared (shared_reducer.js) — 1 endpoint
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 28 | `checkAppVersion` | GET | `/api/mobile-app-version` | None | `response.data` (as `appVersion`) | None | OK |
+
+### Locations (locations_reducer.js) — 2 endpoints
+
+| # | Thunk | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|-------|--------|-----|---------|---------------------|------|--------|
+| 29 | `fetchCountries` | GET | `/api/locations/country` | None | `locations` or raw data | None | OK |
+| 30 | `fetchLocationChildren` | GET | `/api/locations/{type}/{id}` | None | `locations[]` | None | OK |
+
+### XP Levels (screens/profile/helpers/xpLevels.js) — 1 endpoint
+
+| # | Function | Method | URL | Payload | Response Fields Read | Auth | Status |
+|---|----------|--------|-----|---------|---------------------|------|--------|
+| 31 | `fetchXpLevels` | GET | `/api/levels` | None | Array or `{data}` or `{levels}` → `[{xp, name}]` | Bearer | OK |
+
+### Global (utils/setupAxiosInterceptors.js)
+
+- Default timeout: 30 seconds
+- 401 interceptor: signals `uploadAbortReason('token-expired')` + logout
+
+### Deprecated Endpoints (All Removed)
+
+| Old Endpoint | Replaced By | When |
+|---|---|---|
+| `POST /oauth/token` | `POST /api/auth/token` | Passport → Sanctum migration |
+| `POST /api/register` | `POST /api/auth/register` | Sanctum migration |
+| `GET /api/user` | `GET /api/user/profile/index` | Profile consolidation |
+| `POST /api/photos/upload/with-or-without-tags` | `POST /api/v3/upload` | v3 upload |
+| `POST /api/v2/add-tags-to-uploaded-image` | `POST /api/v3/tags` | v5 tagging |
+| `DELETE /api/photos/delete` | `POST /api/profile/photos/delete` | Unified deletion |
+| `GET /api/v2/photos/get-untagged-uploads` | `GET /api/v3/user/photos?tagged=false` | v3 user photos |
+| `GET /history/paginated` | `GET /api/v3/user/photos` | v3 user photos |
+
+**Backend confirmed:** All deprecated endpoints are fully removed (404, no redirects). Only active API versions are v1 (legacy location routes) and v3 (current).
+
+---
+
+## 3. Auth Mechanism
+
+### Current Implementation: Laravel Sanctum (Token-Based)
+
+**Login flow:**
+1. User submits email/username + password
+2. App POSTs to `/api/auth/token` with `{identifier, password}`
+3. Server returns `{token: "1|abc...", user: {...}}`
+4. Token stored in AsyncStorage as key `"jwt"`
+5. All subsequent requests use `Authorization: Bearer {token}` header
+6. On app boot, `checkValidToken` POSTs stored token to `/api/validate-token`
+
+**Backend confirmed:** Rate limited to 5 attempts/minute. Revokes existing mobile tokens before issuing new one.
+
+**Registration flow:**
+1. App POSTs to `/api/auth/register` with `{email, password}`
+2. On success, automatically calls `userLogin` with the same credentials
+
+**Token persistence:**
+- `redux-persist` persists the `auth` slice (including token) to AsyncStorage
+- Token also explicitly stored at AsyncStorage key `"jwt"`
+- On logout, `AsyncStorage.clear()` wipes everything
+
+**Notes:**
+- User object stored redundantly in both Redux (persisted) and `AsyncStorage.setItem('user', ...)` — potential desync
+
+---
+
+## 4. State Management Map
+
+### Redux Store Shape
+
+```
+store
+├── auth (persisted to AsyncStorage)
+│ ├── appVersion: string
+│ ├── isSubmitting: boolean
+│ ├── token: string | null
+│ ├── user: object | null
+│ ├── serverStatusText: string
+│ └── errors: object
+│
+├── gallery
+│ ├── imagesLoading: boolean
+│ ├── galleryImages: array (CameraRoll photos with GPS metadata)
+│ ├── nextGalleryId: number
+│ ├── camerarollImageFetched: boolean
+│ ├── lastFetchTime: number | null
+│ ├── isNextPageAvailable: boolean
+│ ├── lastImageCursor: string | null
+│ └── error: string | null
+│ (Derived selector: selectNonGeotaggedCount)
+│
+├── images (persisted — imagesArray only via transform)
+│ ├── imagesArray: array (core image collection with tagsV5, customTags per image)
+│ ├── swiperIndex: number
+│ ├── totalToUpload / uploaded / uploadFailed / tagged / taggedFailed: numbers
+│ ├── uploadPhase: 'idle' | 'uploading' | 'tagging'
+│ ├── currentUploadIndex: number
+│ ├── uploadAbortReason: null | 'token-expired' | 'cancelled'
+│ ├── errorMessage: string
+│ └── failedCounts: { alreadyUploaded, invalidCoordinates, timeout, network, server, unknown }
+│
+├── my_uploads_reducer ← NOTE: inconsistent key name
+│ ├── uploads: { data[], total, current_page, next_page_url, ... }
+│ ├── uploadStats: object | null
+│ ├── loading: boolean
+│ └── error: string | null
+│
+├── leaderboard
+│ └── paginated: { users: array }
+│
+├── shared
+│ ├── appVersion: object | null
+│ ├── isUploading: boolean
+│ ├── showModal: boolean
+│ └── showThankYouMessages: boolean
+│
+├── settings
+│ ├── model: string
+│ ├── settingsModalVisible / secondSettingsModalVisible: boolean
+│ ├── settingsEdit: boolean
+│ ├── settingsEditProp: string
+│ ├── wait: boolean
+│ ├── dataToEdit: any
+│ ├── deleteAccountError: string
+│ ├── updateSettingsStatusMessage: string
+│ └── updatingSettings: boolean
+│
+├── stats
+│ └── (global stats data)
+│
+├── tags
+│ ├── objectEntries: array (flattened search index)
+│ ├── categoriesById: object
+│ ├── entriesByCloId: object
+│ ├── typeEntriesByKey: object
+│ ├── materialsById: object
+│ ├── brandsById: object
+│ └── loading: boolean
+│
+├── teams
+│ ├── topTeams: array
+│ ├── topTeamsLoading: boolean
+│ ├── userTeams: array
+│ ├── teamMembers: array
+│ ├── teamsRequestStatus: string
+│ ├── selectedTeam: object
+│ ├── teamsFormError: string
+│ ├── teamFormStatus: string | null
+│ ├── successMessage: string
+│ └── memberNextPage: number | null
+│
+└── locations
+ └── (location hierarchy data)
+```
+
+---
+
+## 5. Navigation Structure
+
+```
+NavigationContainer (App.tsx)
+└── MainRoutes (Stack.Navigator, headerShown: false)
+ │
+ ├── [token === null] AUTH_HOME → AuthStack
+ │ ├── WELCOME → WelcomeScreen
+ │ └── AUTH → AuthScreen
+ │ └── MaterialTopTabs
+ │ ├── SIGNIN → SigninForm
+ │ ├── SIGNUP → SignupForm
+ │ └── FORGOT_PASSWORD → ForgotPasswordForm
+ │
+ └── [token !== null]
+ ├── APP → TabRoutes (MaterialTopTabs, bottom)
+ │ ├── HOME → HomeScreen
+ │ ├── TEAM → TeamStack
+ │ │ ├── TEAM_HOME → TeamScreen
+ │ │ ├── TOP_TEAMS → TopTeamsScreen
+ │ │ ├── TEAM_DETAILS → TeamDetailsScreen
+ │ │ └── TEAM_LEADERBOARD → TeamLeaderboardScreen
+ │ ├── GLOBAL → GlobalDataScreen
+ │ ├── LEADERBOARD → LeaderboardsScreen
+ │ └── USER_STATS → UserStatsScreen
+ │
+ ├── PERMISSION → PermissionStack
+ │ ├── CAMERA_PERMISSION → CameraPermissionScreen
+ │ └── GALLERY_PERMISSION → GalleryPermissionScreen
+ │
+ ├── ADD_TAGS → AddTagScreen
+ ├── ALBUM → GalleryScreen
+ ├── SETTING → SettingsScreen
+ ├── UPDATE → NewUpdateScreen
+ └── MY_UPLOADS → MyUploads
+```
+
+---
+
+## 6. Dependencies
+
+### Production Dependencies (32 total)
+
+| Package | Version | Status |
+|---------|---------|--------|
+| `@lodev09/react-native-exify` | ^1.0.3 | OK — EXIF GPS fallback on Android |
+| `@react-native-async-storage/async-storage` | ^1.23.1 | OK |
+| `@react-native-camera-roll/camera-roll` | ^7.8.1 | OK |
+| `@react-native-clipboard/clipboard` | ^1.14.2 | OK |
+| `@react-native-community/datetimepicker` | ^8.2.0 | OK |
+| `@react-native-masked-view/masked-view` | ^0.3.2 | OK |
+| `@react-native-picker/picker` | ^2.7.7 | OK |
+| `@react-navigation/material-top-tabs` | ^6.6.13 | OK |
+| `@react-navigation/native` | ^6.1.17 | OK |
+| `@react-navigation/stack` | ^6.4.0 | OK |
+| `@reduxjs/toolkit` | ^2.2.6 | OK |
+| `@sentry/react-native` | ^5.36.0 | OK |
+| `@shopify/flash-list` | ^1.7.0 | OK |
+| `axios` | ^1.7.2 | OK |
+| `dayjs` | ^1.11.19 | OK |
+| `formik` | ^2.4.6 | OK |
+| `i18next` | ^23.11.5 | OK |
+| `lottie-react-native` | ^6.7.2 | OK |
+| `react` | ^18.2.0 | OK |
+| `react-native` | 0.74.3 | OK |
+| `react-native-actions-sheet` | ^0.9.6 | OK — used in Settings, TeamScreen, TeamDetails |
+| `react-native-config` | ^1.5.2 | OK |
+| `react-native-device-info` | ^11.1.0 | OK |
+| `react-native-gesture-handler` | ^2.20.0 | OK |
+| `react-native-linear-gradient` | ^2.8.3 | OK |
+| `react-native-localize` | ^3.2.0 | OK |
+| `react-native-page-control` | ^1.1.2 | OK |
+| `react-native-pager-view` | ^6.3.3 | OK — required by material-top-tabs |
+| `react-native-permissions` | ^4.1.5 | OK |
+| `react-native-reanimated` | ^3.16.7 | OK |
+| `react-native-safe-area-context` | ^4.10.7 | OK |
+| `react-native-screens` | ^3.32.0 | OK |
+| `react-native-svg` | ^15.3.0 | OK |
+| `react-native-swipe-gestures` | ^1.0.5 | OK |
+| `react-native-tab-view` | ^3.5.2 | OK |
+| `react-native-vector-icons` | ^10.1.0 | OK |
+| `react-redux` | ^9.1.2 | OK |
+| `redux-persist` | ^6.0.0 | OK |
+| `use-count-up` | ^3.0.1 | OK |
+| `yup` | ^1.4.0 | OK |
+
+**Removed:** `react-native-maps` (only used by deleted MapScreen), `redux-thunk` (included in RTK), `immer` (included in RTK), `moment` (replaced by dayjs), `react-native-swiper` (replaced by custom implementation)
+
+### Dev Dependencies (13 total)
+
+| Package | Version | Status |
+|---------|---------|--------|
+| `@babel/core` | ^7.20.0 | OK |
+| `@babel/preset-env` | ^7.20.0 | OK |
+| `@babel/runtime` | ^7.20.0 | OK |
+| `@react-native/babel-preset` | 0.74.85 | OK |
+| `@react-native/eslint-config` | 0.74.85 | OK |
+| `@react-native/metro-config` | 0.74.85 | OK |
+| `@react-native/typescript-config` | 0.74.85 | OK |
+| `@types/react` | ^18.2.6 | OK |
+| `@types/react-test-renderer` | ^18.0.0 | OK |
+| `babel-jest` | ^29.6.3 | OK |
+| `eslint` | ^8.19.0 | OK |
+| `jest` | ^29.6.3 | OK |
+| `prettier` | 2.8.8 | OK |
+| `react-test-renderer` | ^18.2.0 | OK |
+| `redux-immutable-state-invariant` | ^2.1.0 | OK (dev-only) |
+| `typescript` | 5.0.4 | OK |
+
+---
+
+## 7. Bugs and Issues
+
+### Remaining Bugs
+
+**BUG-06: leaveTeam fulfilled handler is empty (team_reducer.js)**
+When a user leaves a team, the API call succeeds but no state is updated — the team remains in `userTeams`, and `activeTeam` is not changed. Reducer logic needs to be written.
+
+**BUG-11: TopTeamsScreen fake loading (TopTeamsScreen.js)**
+Uses `setTimeout(() => setIsLoading(false), 3000)` instead of tracking actual API loading state. Users always wait 3 seconds regardless of API speed.
+
+**BUG-15: changeActiveTeam.fulfilled handler reads wrong payload shape (team_reducer.js)**
+`state.userTeams.push(action.payload.team)` — but the thunk returns `response.data.team.id` (a number), not `{team, type}`. Will push `undefined`.
+
+### Fixed Bugs (resolved in v7 audit passes)
+
+| Bug | Fix |
+|-----|-----|
+| BUG-01 | Permission check `result === 'granted' \|\| 'limited'` → `result === 'granted' \|\| result === 'limited'` |
+| BUG-02 | Auth migrated from Passport to Sanctum — `/api/auth/token` with `{identifier, password}`, no client credentials |
+| BUG-03 | Added `return` before `rejectWithValue()` in saveSettings/saveSocialAccounts |
+| BUG-04 | `state.user` → `state.auth.user` in Stats component (component since removed/refactored) |
+| BUG-05 | Template literal in SettingsComponent fixed — uses `{t(deleteAccountError)}` correctly |
+| BUG-07 | Added optional chaining: `error.response?.data?.message` with fallback string |
+| BUG-08/09/10 | Removed exports of non-existent actions from settings, team, and auth reducers |
+| BUG-12 | UploadCard refactored — reads `new_tags`, `total_tags`, `xp` (not `result_string`) |
+| BUG-13/14 | web_reducer deleted entirely |
+| BUG-16 | AlbumScreen — effect callback is sync, calls async function correctly |
+| BUG-17 | LitterBottomButtons removed — AddTagScreen rebuilt with integrated controls |
+| BUG-18 | `utils/Colors.js` deleted, `theme/colors.ts` is single source of truth |
+| BUG-19 | LitterTagsCard removed — tag display rebuilt in TagPills/AddTagScreen |
+| BUG-20 | deleteAccount correctly sends `{password}` in body, token only in Authorization header |
+
+### Dead Code Removed
+
+| Item | Action Taken |
+|------|-------------|
+| `screens/camera/CameraScreen.js` | Deleted — dead class component, RNCamera commented out |
+| `screens/map/MapScreen.js` | Deleted — stub, not in navigator |
+| `reducers/camera_reducer.js` | Deleted — never dispatched or read |
+| `reducers/web_reducer.js` | Deleted — never read by any component |
+| `routes/GalleryRoutes.tsx` | Deleted — stack never used in MainRoutes |
+| `utils/Colors.js` | Deleted — merged into `theme/colors.ts` |
+| `images.selectedImages` | Removed from initial state |
+| `shared.isSelecting` / `shared.selected` | Removed from initial state |
+| `console.log` in `actions/types.js` | Removed (env + client credentials logging) |
+| `react-native-maps` | Removed from package.json |
+| `redux-thunk` / `immer` | Removed from package.json (included in RTK) |
+
+---
+
+## 8. Build and Config
+
+### Environment Configuration
+- Uses `react-native-config` to load `.env` files
+- Required env variables:
+ ```
+ CURRENT_ENVIRONMENT=production|local
+ OLM_ENDPOINT=
+ LOCAL_OLM_ENDPOINT=
+ SENTRY_DSN=
+ ```
+
+### Build Scripts
+```json
+"scripts": {
+ "android": "react-native run-android",
+ "ios": "react-native run-ios",
+ "lint": "eslint .",
+ "start": "react-native start",
+ "test": "jest",
+ "postinstall": "sed ... (patches Sentry podspec for Xcode 26 compat)"
+}
+```
+
+### iOS
+- `reactNativePermissionsIOS` in package.json: Camera, LocationAccuracy, LocationWhenInUse, PhotoLibrary
+- CocoaPods managed via Gemfile
+- Sentry Cocoa SDK patched to 8.46.0 via postinstall for Xcode 26 compatibility
+
+### Android
+- Standard React Native Android setup
+- Permissions handled via `react-native-permissions`
+- EXIF GPS fallback using `@lodev09/react-native-exify` for devices where CameraRoll GPS is unreliable
+
+### Tests
+- Jest configured with `react-native` preset
+- **No test files exist in the codebase**
+
+---
+
+## 9. Feature State
+
+| Feature | Screen(s) | Status | Rating |
+|---------|-----------|--------|--------|
+| **User Auth** | AuthScreen, SigninForm, SignupForm | Sanctum auth complete. Login/signup/token validation working. | 8/10 |
+| **Password Reset** | ForgotPasswordForm | Form works, sends email. | 7/10 |
+| **Gallery Photo Selection** | GalleryScreen, AlbumScreen | CameraRoll access, gesture selection, GPS filtering, EXIF fallback on Android. | 8/10 |
+| **Image Upload** | HomeScreen | Select → tag → upload pipeline. Sequential upload with progress, cancel support, structured error handling. | 8/10 |
+| **Litter Tagging** | AddTagScreen, TagSearchBar, CategoryBrowser, etc. | Full-screen image viewer. Search, browse categories, tag pills, materials/brands/custom tags per tag. XP estimate. | 8/10 |
+| **Upload History** | MyUploads | Paginated list with filters, swipe actions (copy link, open map, delete). | 7/10 |
+| **Teams** | TeamScreen, TeamDetails, TopTeams | Create, join, leave, view members. Leave team state update incomplete (BUG-06). Fake loading (BUG-11). | 5/10 |
+| **Leaderboards** | LeaderboardsScreen | Time-filtered leaderboard display. | 7/10 |
+| **Global Stats** | GlobalDataScreen | Animated counters with milestone progress. | 8/10 |
+| **User Profile** | UserStatsScreen, ProfileScreen | User level, XP, tag counts, animated stats, navigation to uploads. | 7/10 |
+| **Settings** | SettingsScreen, SettingsComponent | Edit name/username/email, privacy toggles, social accounts, delete account. | 7/10 |
+| **App Version Check** | NewUpdateScreen, HomeScreen | Checks backend for latest version, prompts update. | 7/10 |
+| **Internationalization** | All screens | 8 languages (en, ar, de, es, fr, ie, nl, pt). | 7/10 |
+| **Welcome/Onboarding** | WelcomeScreen, Slides | 4 slides with Lottie animations. | 8/10 |
+| **Permissions** | CameraPermission, GalleryPermission | Camera, photo library, location. Android 13+ handled. | 7/10 |
+
+---
+
+## 10. Assessment
+
+### What Works
+The core workflow — pick photos from gallery, tag with litter categories, upload — is fully functional. Auth has been migrated to Sanctum. The tagging UI has been rebuilt with search, category browsing, tag pills, and detail sheets for materials/brands/custom tags. GPS handling includes EXIF fallback on Android. All deprecated API endpoints have been migrated to v3.
+
+### Remaining Work
+
+**P1 — Features Incomplete:**
+1. BUG-06: leaveTeam state update (reducer logic needs writing)
+2. BUG-15: changeActiveTeam payload shape mismatch
+3. BUG-11: TopTeamsScreen fake loading
+
+**P2 — New Features:**
+4. Camera capture (needs full rewrite with react-native-vision-camera)
+5. Map view (needs implementation from scratch)
+
+**P3 — Cleanup:**
+6. `my_uploads_reducer` inconsistent slice key name
+7. No test coverage
+8. User object stored redundantly in Redux and AsyncStorage
+
+### Verdict
+
+The app is in good shape for v7 release. Auth works, core upload pipeline works, tagging is rebuilt and polished, dead code is cleaned up, API endpoints are current. The main gaps are team state management edge cases and the unbuilt camera/map features.
diff --git a/readme/BackendAPI.md b/readme/BackendAPI.md
new file mode 100644
index 00000000..8bd40318
--- /dev/null
+++ b/readme/BackendAPI.md
@@ -0,0 +1,2592 @@
+# OpenLitterMap API
+
+Base URL: `/api`
+
+## Authentication
+
+Most endpoints require a Bearer token (Sanctum) or active session.
+
+- **Session auth (SPA):** `POST /api/auth/login` sets a session cookie
+- **Token auth (Mobile):** `POST /api/auth/token` returns a Sanctum `token`
+
+Include the token as: `Authorization: Bearer `
+
+All `auth:sanctum` routes accept both session cookies and Bearer tokens.
+
+---
+
+## Auth Endpoints
+
+### POST /api/auth/token — Mobile Token Login
+
+**Auth:** None (guest)
+**Rate limit:** 5 attempts per minute
+
+**Request:**
+```json
+{
+ "identifier": "email_or_username",
+ "password": "secret"
+}
+```
+
+Backward compat: accepts `email` or `username` field if `identifier` is absent.
+Priority: `identifier` > `email` > `username`.
+Auto-detects email vs username via `filter_var()`.
+
+**Response (200):**
+```json
+{
+ "token": "1|abcdef1234567890...",
+ "user": {
+ "id": 1,
+ "email": "user@example.com",
+ "username": "johndoe",
+ "name": null,
+ "verified": true,
+ "total_images": 42,
+ "xp": 5000,
+ "level": 3,
+ "xp_redis": 5000,
+ "position": 12,
+ "next_level": {
+ "level": 4,
+ "title": "Litter Wizard",
+ "xp": 5000,
+ "xp_into_level": 500,
+ "xp_for_next": 1000,
+ "xp_remaining": 500,
+ "progress_percent": 50
+ }
+ }
+}
+```
+
+**Error (422):**
+```json
+{
+ "message": "The given data was invalid.",
+ "errors": { "identifier": ["The auth.failed message"] }
+}
+```
+
+Previous tokens named `mobile` are revoked on each login (prevents token buildup).
+Token is created with name `mobile`: `$user->createToken('mobile')`.
+
+---
+
+### POST /api/auth/login — Session Login (SPA)
+
+**Auth:** None (guest)
+**Rate limit:** 5 attempts per minute (disabled on localhost)
+
+**Request:**
+```json
+{
+ "identifier": "email_or_username",
+ "password": "secret",
+ "remember": true
+}
+```
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "user": { /* full user object */ }
+}
+```
+
+Session is regenerated after login. `remember` sets 2-week persistent cookie.
+
+---
+
+### POST /api/auth/logout
+
+**Auth:** Required (web session)
+**Middleware:** `web`, `auth:web`
+
+**Response (200):**
+```json
+{ "success": true }
+```
+
+---
+
+### POST /api/auth/register
+
+**Auth:** None (guest)
+
+**Request:**
+```json
+{
+ "email": "user@example.com",
+ "password": "min8chars",
+ "username": "optional_3to255_alphanum"
+}
+```
+
+| Field | Rules |
+|-------|-------|
+| `email` | required, valid email, max 75, unique |
+| `password` | required, min 8 chars |
+| `username` | optional (auto-generated if omitted), 3-255 chars, regex `/^[a-zA-Z0-9_-]+$/`, unique |
+
+**Response (200):**
+```json
+{
+ "token": "1|abcdef...",
+ "user": { /* full user object, xp=0, level=0 */ }
+}
+```
+
+Side effects: welcome email (`NewUserRegMail`) sent, `Registered` and `UserSignedUp` events fired, quotas initialized (images_remaining=1000, verify_remaining=5000). `name` is always set to NULL regardless of input. Auto-generated usernames use pattern `{adjective}-{noun}-{number}` (e.g. `violently-enthusiastic-bin-overlord-5432`). Token created with name `mobile`.
+
+---
+
+### POST /api/validate-token — Check Token Validity
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+{ "message": "valid" }
+```
+
+Returns 401 if token is invalid/expired.
+
+---
+
+### GET /api/user — Get Authenticated User (DEPRECATED)
+
+> **Deprecated:** Use `GET /api/user/profile/index` instead. This endpoint has an expensive `position` table scan. The profile endpoint provides the same data plus rank, level, achievements, and locations — all from Redis (fast).
+
+**Auth:** Required (Sanctum)
+
+Returns the full User model with `position` and `xp_redis` appended, plus `littercoin_count`.
+
+**Response (200):**
+```json
+{
+ "id": 1,
+ "email": "user@example.com",
+ "username": "johndoe",
+ "name": null,
+ "xp": 5000,
+ "total_images": 42,
+ "xp_redis": 5000,
+ "position": 12,
+ "littercoin_count": 3,
+ "next_level": {
+ "level": 4,
+ "title": "Litter Wizard",
+ "xp": 5000,
+ "xp_into_level": 0,
+ "xp_for_next": 5000,
+ "xp_remaining": 0,
+ "progress_percent": 100
+ }
+}
+```
+
+### GET /api/current-user — Get Authenticated User (DEPRECATED)
+
+> **Deprecated:** Use `GET /api/user/profile/index` instead. Only returns user + roles + xp_redis, no context (rank, level, achievements).
+
+**Auth:** Required (session `auth`)
+
+Returns user model with `roles` eager-loaded and `xp_redis` appended. Used by SPA.
+
+---
+
+### POST /api/password/email — Request Password Reset
+
+**Auth:** None
+**Rate limit:** 3 per minute
+
+**Request:**
+```json
+{ "login": "email_or_username" }
+```
+
+**Response (200):** Always returns same message (prevents user enumeration):
+```json
+{ "message": "If an account with these details exists, we will send a password reset link." }
+```
+
+---
+
+### POST /api/password/validate-token — Validate Reset Token
+
+**Auth:** None
+
+**Request:**
+```json
+{ "token": "reset_token", "email": "user@example.com" }
+```
+
+**Response:** `{ "valid": true }` (200) or `{ "valid": false }` (422).
+Token is not consumed (safe to call multiple times). Tokens expire after 60 minutes.
+
+---
+
+### POST /api/password/reset — Complete Password Reset
+
+**Auth:** None
+
+**Request:**
+```json
+{
+ "token": "reset_token",
+ "email": "user@example.com",
+ "password": "new_password",
+ "password_confirmation": "new_password"
+}
+```
+
+`password`: min 5 chars, confirmed.
+
+**Response (200):**
+```json
+{
+ "message": "Your password has been reset!",
+ "user": { /* full user object */ }
+}
+```
+
+User is auto-logged in after successful reset. Token is consumed (single-use).
+
+---
+
+### POST /api/settings/delete-account — Delete Account (GDPR)
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{ "password": "current_password" }
+```
+
+**Response (200):** `{ "success": true }`
+**Error:** `{ "success": false, "msg": "password does not match" }`
+
+Photos preserved as anonymous contributions (user_id set to NULL via DB CASCADE).
+Cleans up: teams, metrics, Redis leaderboards, OAuth tokens, subscriptions, roles.
+
+---
+
+## Photo Upload
+
+### POST /api/v3/upload — Web Photo Upload
+
+**Auth:** Required (Sanctum)
+**Content-Type:** multipart/form-data
+
+**Request:**
+
+| Field | Type | Rules |
+|-------|------|-------|
+| `photo` | file | required, jpg/png/jpeg/heif/heic/webp, max 20MB, min 1x1 |
+
+Must contain valid EXIF with GPS coordinates and datetime.
+
+**Response (200):**
+```json
+{ "success": true, "photo_id": 12345 }
+```
+
+**Validation errors:**
+- "Could not read EXIF data from the image."
+- "The image does not contain a date. Please check your camera settings."
+- "You have already uploaded this photo"
+- "Sorry, no GPS on this one."
+- "Error: Could not read GPS coordinates from this image..."
+
+Side effects: S3 upload (full + bbox thumbnail), reverse geocoding via `ResolveLocationAction`, `ImageUploaded` broadcast event. No metrics/XP processing (happens at tagging time).
+
+---
+
+### POST /api/photos/submit — Legacy Mobile Upload (v1)
+
+**Auth:** Required (Sanctum)
+**Content-Type:** multipart/form-data
+
+**Request:**
+
+| Field | Type | Rules |
+|-------|------|-------|
+| `photo` | file | required, jpg/png/jpeg/heic/heif |
+| `lat` | numeric | required |
+| `lon` | numeric | required |
+| `date` | string/int | required, ISO 8601 or Unix timestamp |
+| `model` | string | optional, defaults to 'Mobile app v2' |
+| `picked_up` | bool | optional |
+
+Mobile sends coordinates directly (not from EXIF).
+
+**Response (200):** `{ "success": true, "photo_id": 12345 }`
+**Error:** `{ "success": false, "msg": "error-3" | "photo-already-uploaded" | "invalid-coordinates" }`
+
+---
+
+### POST /api/photos/submit-with-tags — Legacy Mobile Upload + Tags (v2)
+
+**Aliases:** `/api/photos/upload-with-tags`, `/api/photos/upload/with-or-without-tags`
+**Auth:** Required (Sanctum)
+
+Same as `/photos/submit` plus:
+
+| Field | Type | Rules |
+|-------|------|-------|
+| `tags` | array/JSON string | optional, v4 tag format |
+| `custom_tags` | array/JSON string | optional |
+
+**v4 tag format (legacy mobile):**
+```json
+[{
+ "category": "smoking",
+ "object": "cigarette_butt",
+ "brand_only": false,
+ "brand": null,
+ "material_only": false,
+ "material": "paper",
+ "custom": null,
+ "key": "cigarette_butt"
+}]
+```
+
+Tags are auto-converted from v4 to v5 format via `ConvertV4TagsAction`.
+
+---
+
+### DELETE /api/photos/delete — Delete Photo (Legacy Mobile)
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{ "photoId": 123 }
+```
+
+**Response (200):** `{ "success": true }`
+**Error (403):** `{ "success": false, "msg": "Photo not found" }` (not found or not owned)
+
+Reverses metrics if photo was processed (`processed_at` not null). Soft-deletes photo, removes S3 files. Decrements user `xp` and `total_images` (with `max(0, ...)` guard).
+
+---
+
+### GET /api/check-web-photos — Check for Untagged Photos (Legacy)
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+{ "photos": [{ "id": 1, "filename": "photo.jpg" }] }
+```
+
+Returns user's untagged photos (`verified = 0`), selecting only `id` and `filename`.
+
+---
+
+## Tags
+
+### GET /api/tags — Get Available Tags (Nested by Category)
+
+**Auth:** None (public)
+
+**Query params (all optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `category` | string | Filter by category key (e.g. `smoking`) |
+| `object` | string | Filter by object key (partial match) |
+| `materials` | string | Comma-separated material keys |
+| `search` | string | Prefix search across all keys |
+
+**Response (200):**
+```json
+{
+ "tags": {
+ "smoking": {
+ "id": 1,
+ "key": "smoking",
+ "litter_objects": [
+ {
+ "id": 5,
+ "key": "cigarette_butt",
+ "materials": [
+ { "id": 10, "key": "paper" }
+ ]
+ }
+ ]
+ }
+ }
+}
+```
+
+---
+
+### GET /api/tags/all — Get All Tags (Flat Arrays)
+
+**Auth:** None (public)
+
+This is the primary endpoint for building a tag search UI. Returns 7 flat collections that the client must join locally to build a searchable index.
+
+**Response (200):**
+```json
+{
+ "categories": [
+ { "id": 1, "key": "smoking" },
+ { "id": 2, "key": "alcohol" },
+ { "id": 3, "key": "soft_drinks" }
+ ],
+ "objects": [
+ { "id": 5, "key": "cigarette_butt", "categories": [{ "id": 1, "key": "smoking" }] },
+ { "id": 12, "key": "bottle", "categories": [{ "id": 2, "key": "alcohol" }, { "id": 3, "key": "soft_drinks" }] }
+ ],
+ "materials": [
+ { "id": 10, "key": "plastic" },
+ { "id": 11, "key": "glass" }
+ ],
+ "brands": [
+ { "id": 1, "key": "coca_cola" },
+ { "id": 2, "key": "marlboro" }
+ ],
+ "types": [
+ { "id": 1, "key": "wine" },
+ { "id": 2, "key": "beer" },
+ { "id": 3, "key": "spirits" }
+ ],
+ "category_objects": [
+ { "id": 42, "category_id": 2, "litter_object_id": 12 },
+ { "id": 87, "category_id": 3, "litter_object_id": 12 }
+ ],
+ "category_object_types": [
+ { "category_litter_object_id": 42, "litter_object_type_id": 1 },
+ { "category_litter_object_id": 42, "litter_object_type_id": 2 },
+ { "category_litter_object_id": 42, "litter_object_type_id": 3 }
+ ]
+}
+```
+
+**How to build a search index from this data:**
+
+The 7 collections relate as follows:
+
+```
+categories ←──────── category_objects ────────→ objects
+ (CLO) ↑
+ ↑ │
+ category_object_types objects.categories[]
+ ↓ (same relationship,
+ types eager-loaded)
+```
+
+**Step 1: Build object entries.** Each object can belong to multiple categories. Create one searchable entry per (object, category) pair, pre-resolving the `cloId` from `category_objects`:
+
+```
+bottle (alcohol) → cloId: 42 (from category_objects where category_id=2, litter_object_id=12)
+bottle (soft_drinks) → cloId: 87 (from category_objects where category_id=3, litter_object_id=12)
+cigarette_butt (smoking) → cloId: 15
+```
+
+**Step 2: Build type entries.** Types add specificity to objects. Join `category_object_types` → `types` → `category_objects` → `objects`:
+
+```
+wine → cloId: 42, typeId: 1 (wine bottle under alcohol)
+beer → cloId: 42, typeId: 2 (beer bottle under alcohol)
+spirits → cloId: 42, typeId: 3 (spirits bottle under alcohol)
+```
+
+When a user selects "wine", you submit `category_litter_object_id: 42, litter_object_type_id: 1`. This is how "bottle" becomes "wine bottle".
+
+**Step 3: Brands and materials** are standalone — no joining needed.
+
+**Important:** `category_object_types` has no `id` column — use composite key `(category_litter_object_id, litter_object_type_id)` for dedup.
+
+---
+
+### POST /api/v3/tags — Add Tags to Photo
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{
+ "photo_id": 12345,
+ "tags": [
+ {
+ "category_litter_object_id": 42,
+ "litter_object_type_id": 1,
+ "quantity": 2,
+ "picked_up": true,
+ "materials": [10, 11],
+ "brands": [{ "id": 1, "quantity": 1 }],
+ "custom_tags": ["found on bench"]
+ }
+ ]
+}
+```
+
+| Field | Type | Rules | Notes |
+|-------|------|-------|-------|
+| `photo_id` | int | required | Must exist (not soft-deleted), owned by user |
+| `tags` | array | required, min 1 | |
+| `tags.*.category_litter_object_id` | int | required | FK to `category_litter_object` — resolved from `category_objects` in `/api/tags/all` |
+| `tags.*.litter_object_type_id` | int/null | optional | FK to `litter_object_types` — this is what makes "bottle" → "wine bottle" |
+| `tags.*.quantity` | int | required, min 1 | |
+| `tags.*.picked_up` | bool/null | optional | |
+| `tags.*.materials` | int[] | optional | Array of material IDs from `/api/tags/all` |
+| `tags.*.brands` | object[] | optional | Array of `{ id, quantity }` objects |
+| `tags.*.custom_tags` | string[] | optional | Free-text tags, max 100 chars each |
+
+**Standalone tag types** (no `category_litter_object_id`):
+
+```json
+{
+ "tags": [
+ { "brand_only": true, "brand": { "id": 1, "key": "coca_cola" }, "quantity": 1, "picked_up": true },
+ { "material_only": true, "material": { "id": 10, "key": "plastic" }, "quantity": 1, "picked_up": true },
+ { "custom": true, "key": "broken_glass", "quantity": 1, "picked_up": true }
+ ]
+}
+```
+
+**Gates:**
+- 403 if user doesn't own photo
+- 403 if photo already verified (`verified >= 1`)
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "photoTags": [{ "id": 1, "photo_id": 12345, "category_litter_object_id": 42, "litter_object_type_id": 1, ... }]
+}
+```
+
+Category is auto-resolved from `category_litter_object_id`. Generates summary, calculates XP, triggers metrics processing via `TagsVerifiedByAdmin` event if user is trusted.
+
+---
+
+### PUT /api/v3/tags — Replace All Tags on Photo
+
+**Auth:** Required (Sanctum)
+
+Same request format as POST. Key differences:
+- **No verification gate** — allows re-tagging verified photos
+- Deletes all existing tags + extras first
+- Resets summary, XP, and verified status to 0
+- Re-runs full tag pipeline (summary + XP + metrics delta)
+
+---
+
+### POST /api/add-tags — Legacy Mobile Tagging (DEPRECATED)
+
+> **Deprecated:** Use `POST /api/v3/tags` instead. This endpoint uses the v4 tag format which does NOT support object types (`litter_object_type_id`). Tags like "wine bottle" are impossible with this format.
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{
+ "photo_id": 123,
+ "litter": { "smoking": { "cigarette_butt": 5 } },
+ "custom_tags": ["tag1"],
+ "picked_up": true
+}
+```
+
+Also accepts `tags` field instead of `litter`.
+Auto-converts v4 format to v5 via `ConvertV4TagsAction` (sets `litter_object_type_id` to null).
+
+**Response:** `{ "success": true, "msg": "tags-added" }`
+
+---
+
+## User Profile
+
+### GET /api/user/profile/index — Authenticated Profile
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+{
+ "user": {
+ "id": 1,
+ "name": "John",
+ "username": "johndoe",
+ "email": "john@example.com",
+ "avatar": "https://...",
+ "created_at": "2020-01-15T10:30:00Z",
+ "member_since": "January 2020",
+ "global_flag": "us",
+ "public_profile": true,
+ "show_name": true,
+ "show_username": true,
+ "show_name_maps": true,
+ "show_username_maps": true,
+ "previous_tags": true,
+ "emailsub": true
+ },
+ "stats": {
+ "uploads": 100,
+ "litter": 450,
+ "xp": 5000,
+ "streak": 7,
+ "littercoin": 250,
+ "photo_percent": 0.5,
+ "tag_percent": 0.8
+ },
+ "level": {
+ "level": 3,
+ "title": "Litter Wizard",
+ "xp": 5000,
+ "xp_into_level": 0,
+ "xp_for_next": 5000,
+ "xp_remaining": 0,
+ "progress_percent": 100
+ },
+ "rank": {
+ "global_position": 42,
+ "global_total": 500,
+ "percentile": 91.6
+ },
+ "global_stats": {
+ "total_photos": 20000,
+ "total_litter": 56000
+ },
+ "achievements": { "unlocked": 15, "total": 30 },
+ "locations": { "countries": 5, "states": 12, "cities": 45 },
+ "team": { "id": 5, "name": "Team A" }
+}
+```
+
+Stats from Redis with MySQL fallback. `team` is null if no active team.
+
+---
+
+### GET /api/user/profile/{id} — Public Profile
+
+**Auth:** None (public)
+
+**Path Parameters:**
+
+| Parameter | Type | Description |
+|-----------|------|---------------|
+| `id` | int | The user's ID |
+
+**Response (public profile):**
+
+```json
+{
+ "public": true,
+ "user": {
+ "id": 42,
+ "name": "Sean",
+ "username": "seanlynch",
+ "avatar": null,
+ "global_flag": "ie",
+ "member_since": "January 2020"
+ },
+ "stats": {
+ "uploads": 500,
+ "litter": 2000,
+ "xp": 15000
+ },
+ "level": {
+ "level": 7,
+ "title": "Trashmonster",
+ "xp": 15000,
+ "xp_into_level": 0,
+ "xp_for_next": 35000,
+ "xp_remaining": 35000,
+ "progress_percent": 0
+ },
+ "rank": {
+ "global_position": 5,
+ "global_total": 1457,
+ "percentile": 99.7
+ },
+ "achievements": {
+ "unlocked": 12,
+ "total": 50
+ },
+ "locations": {
+ "countries": 3,
+ "states": 8,
+ "cities": 15
+ }
+}
+```
+
+**Response (private profile):**
+
+```json
+{
+ "public": false
+}
+```
+
+**Notes:**
+- `name` and `username` respect the user's privacy settings (`show_name`, `show_username`). They return `null` when hidden.
+- Returns `404` if the user ID does not exist.
+
+---
+
+### GET /api/user/profile/map — User's Photo GeoJSON
+
+**Auth:** Required (Sanctum)
+
+**Query params (optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `period` | string | `created_at`, `datetime`, `updated_at` |
+| `start` | string | YYYY-MM-DD |
+| `end` | string | YYYY-MM-DD |
+
+**Response:** GeoJSON FeatureCollection. Only includes `verified >= 2` (ADMIN_APPROVED). Coordinates as `[lat, lon]`. Respects `show_name_maps` and `show_username_maps` privacy settings.
+
+---
+
+### POST /api/user/profile/download — Request Data Export
+
+**Auth:** Required (Sanctum)
+
+**Query params (optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `dateField` | string | `created_at`, `datetime`, `updated_at` |
+| `fromDate` | string | YYYY-MM-DD (default: 2017) |
+| `toDate` | string | YYYY-MM-DD (default: now) |
+
+**Response:** `{ "success": true }`
+
+Queues CSV export, emails S3 download link when ready.
+
+---
+
+## User Photos
+
+### GET /api/v3/user/photos — User's Photos (Paginated + Filterable)
+
+**Auth:** Required (Sanctum)
+
+**Query params (all optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `tagged` | bool | `true` = verified >= 1, `false` = verified = 0 |
+| `id` | int | Filter by photo ID |
+| `id_operator` | string | Comparison operator (default `=`) |
+| `tag` | string | Filter by litter object key (LIKE search) |
+| `custom_tag` | string | Filter by custom tag key (LIKE search) |
+| `date_from` | string | Start date (ISO) |
+| `date_to` | string | End date (ISO) |
+
+Pagination: 8 per page, ordered by `created_at` DESC.
+
+**Response (200):**
+```json
+{
+ "photos": [{
+ "id": 123,
+ "filename": "https://...",
+ "datetime": "2020-01-15T10:30:00Z",
+ "lat": 40.7128,
+ "lon": -74.0060,
+ "model": "iPhone 12",
+ "remaining": true,
+ "team": { "id": 5, "name": "Team A" },
+ "new_tags": [{
+ "id": 1,
+ "category_litter_object_id": "smoking_cigarette",
+ "quantity": 3,
+ "picked_up": true,
+ "category": { "id": 1, "key": "smoking" },
+ "object": { "id": 2, "key": "cigarette" },
+ "extra_tags": [
+ { "type": "brand", "quantity": 3, "tag": { "id": 10, "key": "marlboro" } },
+ { "type": "material", "quantity": 3, "tag": { "id": 50, "key": "paper" } }
+ ]
+ }],
+ "summary": ["cigarette"],
+ "xp": 12,
+ "total_tags": 1
+ }],
+ "pagination": {
+ "current_page": 1,
+ "last_page": 5,
+ "per_page": 8,
+ "total": 40
+ },
+ "user": { "id": 1, "name": "...", "email": "..." }
+}
+```
+
+Tags are under the `new_tags` key (v5 format with nested category/object/extra_tags).
+
+---
+
+### GET /api/v3/user/photos/stats — Upload Statistics
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+{
+ "totalPhotos": 100,
+ "totalTags": 450,
+ "leftToTag": 10,
+ "taggedPercentage": 90
+}
+```
+
+---
+
+### POST /api/user/profile/photos/delete — Bulk Delete Photos
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{
+ "selectAll": false,
+ "inclIds": [123, 124, 125],
+ "exclIds": [],
+ "filters": "{}"
+}
+```
+
+Reverses metrics, removes S3 files, soft-deletes. Only deletes user's own photos.
+
+---
+
+### POST /api/profile/photos/delete — Delete Single Photo
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{ "photoId": 123 }
+```
+
+**Response (200):** `{ "message": "Photo deleted successfully!" }`
+**Error:** 403 if photo not owned by user.
+
+Reverses metrics, removes S3 files, soft-deletes, decrements user XP and total_images.
+
+---
+
+### GET /api/user/profile/photos/index — Unverified Photos (Legacy)
+
+**Auth:** Required (Sanctum)
+
+Paginated list of user's unverified photos (`verified = 0`), 300 per page, ordered by `created_at` DESC.
+
+**Response (200):**
+```json
+{
+ "paginate": { /* Laravel paginator */ },
+ "count": 50
+}
+```
+
+---
+
+### GET /api/user/profile/photos/filter — Filter User's Photos (Legacy)
+
+**Auth:** Required (Sanctum)
+
+**Query params:** `filters` (JSON string), `selectAll` (bool), `inclIds` (array), `exclIds` (array)
+
+**Response (200):**
+```json
+{
+ "count": 50,
+ "paginate": { /* Laravel paginator */ }
+}
+```
+
+---
+
+### GET /api/user/profile/photos/previous-custom-tags — Previous Custom Tags
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+["found on bench", "near park entrance"]
+```
+
+---
+
+## Settings
+
+### POST /api/settings/details — Update Name/Email/Username
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{ "name": "John", "email": "john@example.com", "username": "johndoe" }
+```
+
+| Field | Rules |
+|-------|-------|
+| `name` | min 3, max 25 |
+| `email` | required, email, max 75, unique |
+| `username` | required, min 3, max 75, unique |
+
+**Response:** `{ "message": "success", "email_changed": false }`
+
+---
+
+### PATCH /api/settings/details/password — Change Password
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{
+ "oldpassword": "current",
+ "password": "new_password",
+ "password_confirmation": "new_password"
+}
+```
+
+`password`: min 5, confirmed.
+
+**Response:** `{ "message": "success" }` or `{ "message": "fail" }` (wrong old password)
+
+---
+
+### POST /api/settings/update — Update Setting by Key/Value
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{ "key": "username", "value": "new_value" }
+```
+
+**Allowed keys and rules:**
+
+| Key | Rules | Notes |
+|-----|-------|-------|
+| `name` | string, min 3, max 25 | |
+| `username` | string, min 3, max 75 | unique validation |
+| `email` | email, max 75 | unique validation |
+| `global_flag` | nullable, string, max 10 | ISO country code |
+| `items_remaining` | boolean | |
+| `previous_tags` | boolean | |
+| `emailsub` | boolean | |
+| `public_profile` | boolean | |
+
+Legacy mobile: `picked_up` key remaps to `items_remaining` (inverted value).
+
+**Response:** `{ "success": true }` or `{ "success": false, "msg": "..." }`
+
+---
+
+### POST /api/settings/privacy/update — Update All Privacy Flags
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{
+ "show_name": true,
+ "show_username": false,
+ "show_name_maps": true,
+ "show_username_maps": false,
+ "show_name_createdby": true,
+ "show_username_createdby": false,
+ "prevent_others_tagging_my_photos": false
+}
+```
+
+---
+
+### Privacy Toggle Endpoints
+
+All POST, auth required. Each toggles a single boolean and returns the new value.
+
+| Endpoint | Toggles | Response key |
+|----------|---------|-------------|
+| `/api/settings/privacy/maps/name` | show_name_maps | `show_name_maps` |
+| `/api/settings/privacy/maps/username` | show_username_maps | `show_username_maps` |
+| `/api/settings/privacy/leaderboard/name` | show_name | `show_name` |
+| `/api/settings/privacy/leaderboard/username` | show_username | `show_username` |
+| `/api/settings/privacy/createdby/name` | show_name_createdby | `show_name_createdby` |
+| `/api/settings/privacy/createdby/username` | show_username_createdby | `show_username_createdby` |
+| `/api/settings/privacy/toggle-previous-tags` | previous_tags | `previous_tags` |
+| `/api/settings/email/toggle` | emailsub | `sub` |
+
+---
+
+### PATCH /api/settings — Update Social Links
+
+**Auth:** Required (Sanctum)
+
+**Request (all optional, must be valid URLs):**
+```json
+{
+ "social_twitter": "https://twitter.com/user",
+ "social_facebook": "https://facebook.com/user",
+ "social_instagram": "https://instagram.com/user",
+ "social_linkedin": "https://linkedin.com/in/user",
+ "social_reddit": "https://reddit.com/u/user",
+ "social_personal": "https://example.com"
+}
+```
+
+**Response:** `{ "message": "success" }`
+
+---
+
+### POST /api/settings/save-flag — Set Country Flag
+
+**Auth:** Required (Sanctum)
+
+**Request:** `{ "country": "us" }`
+**Response:** `{ "message": "success" }`
+
+---
+
+### GET /api/settings/flags/countries — Available Flag Countries
+
+**Auth:** None (public)
+
+**Response:** Key-value pairs of `shortcode` -> `country name`.
+
+---
+
+### POST /api/settings/phone/submit — Set Phone Number
+
+**Auth:** Required (Sanctum)
+
+**Request:** `{ "phonenumber": "+1234567890" }`
+
+---
+
+### POST /api/settings/phone/remove — Remove Phone Number
+
+**Auth:** Required (Sanctum)
+
+**Response:** `{ "message": "success" }`
+
+---
+
+## Leaderboard
+
+### GET /api/leaderboard
+
+Returns ranked users by XP. Public endpoint (no auth required). Authenticated users also receive `currentUserRank`; unauthenticated users receive `currentUserRank: null`.
+
+**Query Parameters:**
+
+| Parameter | Type | Default | Description |
+|----------------|--------|------------|-----------------------------------------------------------------------------|
+| `timeFilter` | string | `all-time` | One of: `all-time`, `today`, `yesterday`, `this-month`, `last-month`, `this-year`, `last-year` |
+| `locationType` | string | — | Filter by location scope: `country`, `state`, `city`. Must be paired with `locationId`. |
+| `locationId` | int | — | ID of the location to filter by. Must be paired with `locationType`. |
+| `page` | int | `1` | Page number (100 results per page). |
+
+**Response:**
+
+```json
+{
+ "success": true,
+ "users": [
+ {
+ "user_id": 42,
+ "public_profile": true,
+ "name": "Sean",
+ "username": "@seanlynch",
+ "xp": "1,234",
+ "global_flag": "ie",
+ "social": { "twitter": "https://twitter.com/..." },
+ "team": "CleanCoast",
+ "rank": 1
+ }
+ ],
+ "hasNextPage": false,
+ "total": 150,
+ "activeUsers": 450,
+ "totalUsers": 1000,
+ "currentUserRank": 42
+}
+```
+
+**User object fields:**
+
+| Field | Type | Description |
+|------------------|-------------|-----------------------------------------------------------------|
+| `user_id` | int | User ID. Use to link to public profile. |
+| `public_profile` | bool | Whether the user's profile is publicly viewable. |
+| `name` | string | Display name (empty string if user hides name on leaderboards). |
+| `username` | string | `@username` (empty string if user hides username). |
+| `xp` | string | Formatted XP with commas (e.g. `"1,234"`). |
+| `global_flag` | string/null | ISO country code for flag display (e.g. `"ie"`, `"gb"`). |
+| `social` | object/null | Social links keyed by type (`twitter`, `facebook`, `personal`). |
+| `team` | string | Active team name (empty string if none or hidden). |
+| `rank` | int | Position in the leaderboard (1-indexed). |
+
+**Time filters explained:**
+
+| Filter | Description |
+|--------------|------------------------------------|
+| `all-time` | Cumulative XP across all time |
+| `today` | XP earned today (UTC) |
+| `yesterday` | XP earned yesterday (UTC) |
+| `this-month` | XP earned in the current month |
+| `last-month` | XP earned in the previous month |
+| `this-year` | XP earned in the current year |
+| `last-year` | XP earned in the previous year |
+
+**Error responses:**
+
+- Missing one of `locationType`/`locationId`: `{ "success": false, "msg": "Both locationType and locationId required for location filtering" }`
+- Invalid `locationType`: `{ "success": false, "msg": "Invalid locationType" }`
+- Invalid `timeFilter`: `{ "success": false, "msg": "Invalid time filter" }`
+
+Filters on `xp > 0`. Users with `public_profile=true` have clickable profiles at `/profile/{user_id}`.
+
+---
+
+## Achievements
+
+### GET /api/achievements
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+{
+ "overview": {
+ "uploads": {
+ "progress": 42,
+ "next_threshold": 50,
+ "percentage": 84,
+ "unlocked": [
+ { "id": 1, "threshold": 10, "metadata": { "name": "First Steps", "icon": "rocket" } }
+ ],
+ "next": { "id": 2, "threshold": 50, "percentage": 84 }
+ },
+ "streak": { "..." : "..." },
+ "total_categories": { "..." : "..." },
+ "total_objects": { "..." : "..." }
+ },
+ "categories": [{
+ "id": 1,
+ "key": "smoking",
+ "name": "Smoking",
+ "achievement": { "..." : "..." },
+ "objects": [{
+ "id": 1,
+ "key": "cigarette",
+ "name": "Cigarette",
+ "achievement": { "..." : "..." }
+ }]
+ }],
+ "summary": { "total": 150, "unlocked": 42, "percentage": 28 }
+}
+```
+
+Hierarchical: overview > categories > objects. Sorted by progress (highest first).
+
+---
+
+## Global Map
+
+### GET /api/points — Map Points (GeoJSON)
+
+**Auth:** None (public)
+
+**Query params:**
+
+| Param | Type | Default | Description |
+|-------|------|---------|-------------|
+| `bbox` | object | required | `{left, bottom, right, top}` bounding box |
+| `zoom` | int | required | Zoom level (0-22) |
+| `page` | int | 1 | Page number |
+| `per_page` | int | 1000 | Results per page (max 500) |
+| `categories` | array | — | Category keys to filter |
+| `litter_objects` | array | — | Object keys to filter |
+| `materials` | array | — | Material keys to filter |
+| `brands` | array | — | Brand keys to filter |
+| `custom_tags` | array | — | Custom tag keys to filter |
+| `from` | string | — | Start date (YYYY-MM-DD) |
+| `to` | string | — | End date (YYYY-MM-DD) |
+| `year` | int | — | Filter by year (overrides from/to) |
+| `username` | string | — | Filter by username |
+
+**Response (200):** GeoJSON FeatureCollection
+```json
+{
+ "type": "FeatureCollection",
+ "features": [{
+ "type": "Feature",
+ "geometry": { "type": "Point", "coordinates": [-74.006, 40.713] },
+ "properties": {
+ "id": 123,
+ "datetime": "2025-02-28T10:30:00Z",
+ "verified": 2,
+ "picked_up": false,
+ "summary": { "..." : "..." },
+ "filename": "photo.jpg",
+ "username": "johndoe",
+ "name": "John",
+ "team": "Team A",
+ "social": null
+ }
+ }],
+ "page": 1,
+ "last_page": 10,
+ "per_page": 1000,
+ "total": 9500,
+ "has_more_pages": true,
+ "meta": {
+ "bbox": [-74.006, 40.713, -74.005, 40.714],
+ "zoom": 12,
+ "generated_at": "2025-02-28T16:30:00Z"
+ }
+}
+```
+
+Only `is_public = true` photos. Masks identity for safeguarded teams. `filename` shown only if `verified >= 2`. Caches non-username-filtered requests for 2 minutes.
+
+---
+
+### GET /api/points/{id} — Single Photo Point
+
+**Auth:** None (public)
+
+Returns single photo data. Used as fallback when photo isn't in current GeoJSON page.
+
+**Response (200):**
+```json
+{
+ "id": 123,
+ "lat": 40.7128,
+ "lon": -74.0060,
+ "datetime": "2025-02-28T10:30:00Z",
+ "verified": 2,
+ "filename": "photo.jpg",
+ "username": "johndoe",
+ "name": "John",
+ "social": null,
+ "flag": "ie",
+ "team": "Team A",
+ "summary": { ... }
+}
+```
+
+Identity fields (`username`, `name`, `social`, `flag`) are `null` when team has safeguarding enabled. Privacy settings (`show_name_maps`, `show_username_maps`) are respected.
+
+---
+
+### GET /api/points/stats — Map Stats for Viewport
+
+**Auth:** None (public)
+
+Same query params as `/api/points`.
+
+**Response (200):**
+```json
+{
+ "data": {
+ "photos": 150,
+ "tags": 500,
+ "categories": 8,
+ "objects": 25,
+ "brands": 12
+ },
+ "meta": {
+ "bbox": [-74.006, 40.713, -74.005, 40.714],
+ "zoom": 12,
+ "categories": null,
+ "litter_objects": null,
+ "materials": null,
+ "brands": null,
+ "custom_tags": null,
+ "from": null,
+ "to": null,
+ "username": null,
+ "year": null,
+ "generated_at": "2025-02-28T16:30:00Z",
+ "cached": false
+ }
+}
+```
+
+---
+
+### GET /api/clusters — Map Clusters (GeoJSON)
+
+**Auth:** None (public)
+
+**Query params:**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `zoom` | numeric | Snapped to nearest configured zoom level |
+| `bbox` | array/string | `bbox[left]`, `bbox[bottom]`, `bbox[right]`, `bbox[top]` — or comma-separated string `-180,-90,180,90` |
+| `lat`, `lon` | numeric | Optional, creates bbox if no bbox provided |
+
+**Response:** GeoJSON FeatureCollection with cluster points containing `properties.count`.
+
+Supports ETag-based caching (`If-None-Match` header returns 304 if unchanged). Response includes `Cache-Control`, `ETag`, and `X-Cluster-Zoom` headers.
+
+---
+
+### GET /api/clusters/zoom-levels — Available Cluster Zoom Levels
+
+**Auth:** None (public)
+
+**Response (200):**
+```json
+{
+ "zoom_levels": [2, 4, 6, 8, 10, 12],
+ "global_zooms": [2, 4, 6],
+ "tile_zooms": [8, 10, 12]
+}
+```
+
+---
+
+### GET /api/global/stats-data — Global Statistics
+
+**Auth:** None (public)
+
+World totals from the metrics table (all-time, timescale=0, location_type=Global). User growth stats from `users.created_at`.
+
+**Response (200):**
+```json
+{
+ "total_tags": 150000,
+ "total_images": 50000,
+ "total_users": 10000,
+ "new_users_today": 12,
+ "new_users_last_7_days": 85,
+ "new_users_last_30_days": 320
+}
+```
+
+**Controller:** `App\Http\Controllers\API\GlobalStatsController@index`
+**Test:** `tests/Feature/Api/GlobalStatsTest.php`
+
+---
+
+### GET /api/levels — Level Thresholds
+
+**Auth:** None (public)
+
+Returns the XP threshold config for all levels. Used by mobile to render level progression UI.
+
+**Response (200):**
+```json
+{
+ "0": { "title": "Complete Noob" },
+ "100": { "title": "Still A Noob" },
+ "500": { "title": "Post-Noob" },
+ "1000": { "title": "Litter Wizard" },
+ ...
+}
+```
+
+**Test:** `tests/Feature/Api/LevelsEndpointTest.php`
+
+---
+
+## Locations
+
+### GET /api/locations/global — Global Stats + Country List
+
+**Auth:** None (public)
+
+---
+
+### GET /api/locations/{type} — List Locations by Type
+
+**Auth:** None (public)
+**Types:** `country`, `state`, `city`
+
+**Query params (optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `period` | string | `today`, `yesterday`, `this_month`, `last_month`, `this_year` |
+| `year` | int | Custom year (2015-current) |
+| `month` | int | Custom month 1-12 (requires year) |
+
+**Response (200):**
+```json
+{
+ "stats": {
+ "photos": 50000,
+ "tags": 150000,
+ "xp": 2500000,
+ "contributors": 5000,
+ "countries": 110,
+ "total_users": 10000
+ },
+ "activity": {
+ "today": { "photos": 150, "tags": 500, "xp": 15000 },
+ "this_month": { "photos": 3000, "tags": 10000, "xp": 300000 }
+ },
+ "locations": [{
+ "id": 1,
+ "name": "United States",
+ "shortcode": "US",
+ "total_images": 20000,
+ "total_tags": 60000,
+ "xp": 1000000,
+ "total_members": 2000,
+ "pct_tags": 40.0,
+ "pct_photos": 40.0,
+ "avg_tags_per_person": 30.0,
+ "avg_photos_per_person": 10.0,
+ "created_at": "2015-01-01 00:00:00",
+ "updated_at": "2025-02-28 10:30:00",
+ "created_by": "John Doe",
+ "last_updated_at": "2025-02-28 10:30:00",
+ "last_updated_by": "Jane Smith"
+ }],
+ "location_type": "country",
+ "breadcrumbs": [{ "name": "World", "type": "global", "id": null }]
+}
+```
+
+Response keys are `locations` and `location_type` (not `children`/`children_type`).
+
+---
+
+### GET /api/locations/{type}/{id} — Location Detail + Children
+
+Same query params as index. Returns `location`, `stats`, `meta`, `activity`, `locations` (children), `location_type`, `breadcrumbs`.
+
+---
+
+### GET /api/locations/{type}/{id}/categories — Location Category Breakdown
+
+### GET /api/locations/{type}/{id}/timeseries — Location Time Series
+
+### GET /api/locations/{type}/{id}/leaderboard — Location Leaderboard
+
+### Location Tag Endpoints (all under `/api/locations/{type}/{id}/tags/`)
+
+| Endpoint | Description |
+|----------|-------------|
+| `/top` | Top tags at this location |
+| `/summary` | Tag summary |
+| `/by-category` | Tags grouped by category |
+| `/cleanup` | Cleanup data |
+| `/trending` | Trending tags |
+
+---
+
+### Legacy: GET /api/v1/locations/{type}/{id}
+
+Same as above, constrained to `country|state|city` types and numeric IDs.
+
+---
+
+## Teams
+
+### GET /api/teams/types — Team Types (Public, no auth)
+
+**Response:** `{ "success": true, "types": [{ "id": 1, "team": "School" }, ...] }`
+
+Returns team types ordered by `id` descending.
+
+---
+
+### POST /api/teams/create — Create Team
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{ "name": "Team Name", "description": "...", "type_id": 1 }
+```
+
+---
+
+### POST /api/teams/join — Join Team
+
+**Auth:** Required (Sanctum)
+
+**Request:** `{ "identifier": "team_code" }`
+**Response:** `{ "success": true, "team": { ... }, "activeTeam": { ... } }`
+**Error:** `{ "success": false, "msg": "already-joined" }`
+
+---
+
+### POST /api/teams/leave — Leave Team
+
+**Auth:** Required (Sanctum)
+
+**Request:** `{ "team_id": 1 }`
+**Response:** `{ "success": true, "team": { ... }, "activeTeam": { ... } }`
+**Errors (403):** `not-a-member`, `you-are-last-member`
+
+User cannot be the only member.
+
+---
+
+### POST /api/teams/active — Set Active Team
+
+**Auth:** Required (Sanctum)
+
+**Request:** `{ "team_id": 1 }`
+**Response:** `{ "success": true, "team": { ... } }`
+**Errors:** `{ "success": false, "message": "team-not-found" | "not-a-member" }`
+
+---
+
+### POST /api/teams/inactivate — Deactivate All Teams
+
+**Auth:** Required (Sanctum)
+
+Sets active team to null.
+
+---
+
+### PATCH /api/teams/update/{team} — Update Team
+
+**Auth:** Required (team leader only)
+
+**Response:** `{ "success": true, "team": { ... } }`
+**Error (403):** `{ "success": false, "message": "member-not-allowed" }`
+
+---
+
+### GET /api/teams/joined — User's Joined Teams
+
+**Auth:** Required (Sanctum)
+
+**Response:** Raw array of team objects (user's teams collection).
+
+---
+
+### GET /api/teams/list — List User's Teams
+
+**Auth:** Required (Sanctum)
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "teams": [
+ {
+ "id": 1,
+ "name": "My Team",
+ "identifier": "abc123",
+ "type_name": "community",
+ "total_members": 5,
+ "total_tags": 1200,
+ "total_images": 300,
+ "created_at": "2025-01-15T10:00:00.000000Z",
+ "updated_at": "2026-02-28T14:30:00.000000Z"
+ }
+ ]
+}
+```
+
+---
+
+### GET /api/teams/members?team_id=X — Team Members
+
+**Auth:** Required (Sanctum)
+
+**Response:**
+```json
+{
+ "success": true,
+ "total_members": 25,
+ "result": [{ "id": 123, "name": "Student 1", ... }]
+}
+```
+
+School teams apply safeguarding: deterministic pseudonyms ("Student 1", "Student 2", etc.).
+
+---
+
+### GET /api/teams/data?team_id=X&period=all — Team Dashboard Data
+
+**Auth:** Required (Sanctum)
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `team_id` | int | required (0 = all user's teams) |
+| `period` | string | `today`, `week`, `month`, `year`, `all` (default) |
+
+**Response:**
+```json
+{
+ "photos_count": 150,
+ "litter_count": 500,
+ "members_count": 25,
+ "verification": {
+ "unverified": 10,
+ "verified": 20,
+ "admin_approved": 50,
+ "bbox_applied": 30,
+ "bbox_verified": 25,
+ "ai_ready": 15
+ }
+}
+```
+
+---
+
+### GET /api/teams/leaderboard — Teams Leaderboard
+
+**Auth:** Required (Sanctum)
+
+Teams ranked by `total_litter` (descending). Only teams with `leaderboards=true` shown.
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "teams": [
+ {
+ "id": 1,
+ "name": "Top Team",
+ "type_name": "community",
+ "total_members": 25,
+ "total_tags": 5000,
+ "total_images": 1200,
+ "created_at": "2024-06-01T00:00:00.000000Z",
+ "updated_at": "2026-02-28T14:30:00.000000Z"
+ }
+ ]
+}
+```
+
+---
+
+### POST /api/teams/leaderboard/visibility — Toggle Leaderboard Visibility
+
+**Auth:** Required (team leader)
+
+**Request:** `{ "team_id": 1 }`
+**Response:** `{ "success": true, "visible": true }` (where `visible` = team's `leaderboards` field)
+**Error (403):** `{ "success": false, "message": "member-not-allowed" }`
+
+---
+
+### POST /api/teams/settings — Update Team Privacy
+
+**Auth:** Required (Sanctum)
+
+**Request:**
+```json
+{
+ "team_id": 1,
+ "settings": {
+ "show_name_maps": true,
+ "show_username_maps": true,
+ "show_name_leaderboards": false,
+ "show_username_leaderboards": false
+ }
+}
+```
+
+Use `"all": true` instead of `team_id` to apply to all user's teams.
+
+**Response:** `{ "success": true }`
+**Error (403):** `{ "message": "Not a member of this team." }`
+
+---
+
+### GET /api/teams/photos?team_id=X&status=pending — Team Photos
+
+**Auth:** Required (team member)
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `team_id` | int | required |
+| `status` | string | `pending`, `approved`, `all` (default) |
+| `page` | int | page number |
+
+**Response:**
+```json
+{
+ "success": true,
+ "photos": {
+ "data": [{
+ "id": 123,
+ "filename": "photo.jpg",
+ "is_public": false,
+ "verified": 1,
+ "team_approved_at": null,
+ "user": { "id": 42, "name": "Student 1", "username": null },
+ "new_tags": [
+ {
+ "id": 456,
+ "category_litter_object_id": 42,
+ "litter_object_type_id": 1,
+ "quantity": 3,
+ "picked_up": true,
+ "category": { "id": 2, "key": "alcohol" },
+ "object": { "id": 12, "key": "bottle" },
+ "extra_tags": [
+ { "type": "brand", "quantity": 1, "tag": { "id": 5, "key": "heineken" } },
+ { "type": "material", "quantity": 1, "tag": { "id": 11, "key": "glass" } }
+ ]
+ }
+ ]
+ }],
+ "total": 50,
+ "current_page": 1
+ },
+ "stats": { "total": 150, "pending": 50, "approved": 100 }
+}
+```
+
+The `new_tags` array contains CLO-based tags with full category/object/extra_tags — same format used by the web frontend's `hydrateTagsForPhoto()`. Student names are masked to pseudonyms when safeguarding is active and viewer is not the team leader.
+
+---
+
+### GET /api/teams/photos/{photo} — Single Team Photo
+
+**Auth:** Required (team member)
+
+**Response:** `{ "success": true, "photo": { ..., "new_tags": [...] } }`
+
+Same `new_tags` format as the index endpoint.
+
+**Errors:** `{ "success": false, "message": "not-a-team-photo" }` (404), `{ "success": false, "message": "not-a-member" }` (403)
+
+---
+
+### GET /api/teams/photos/member-stats?team_id=X — Per-Student Stats
+
+**Auth:** Required (team leader / `manage school team` permission)
+
+Returns stats for each team member (excluding leader). Applies safeguarding pseudonyms when enabled.
+
+**Response:**
+```json
+{
+ "success": true,
+ "members": [
+ {
+ "user_id": 42,
+ "name": "Student 1",
+ "username": null,
+ "total_photos": 15,
+ "pending": 3,
+ "approved": 12,
+ "litter_count": 87,
+ "last_active": "2026-02-28 14:30:00"
+ }
+ ]
+}
+```
+
+When safeguarding is off, `name` and `username` show real values.
+
+---
+
+### PATCH /api/teams/photos/{photo}/tags — Update Team Photo Tags
+
+**Auth:** Required (team leader / `manage school team` permission)
+
+Accepts the same CLO-based format as `POST /api/v3/tags`. Deletes existing tags, resets summary/xp/verified, calls `AddTagsToPhotoAction` to recreate.
+
+**Request:**
+```json
+{
+ "tags": [
+ {
+ "category_litter_object_id": 42,
+ "litter_object_type_id": 1,
+ "quantity": 3,
+ "picked_up": true,
+ "materials": [{ "id": 10, "quantity": 1 }],
+ "brands": [{ "id": 5, "quantity": 1 }],
+ "custom_tags": [{ "tag": "stained", "quantity": 1 }]
+ }
+ ]
+}
+```
+
+**Response:** `{ "success": true, "photo": { ..., "new_tags": [...] } }`
+
+---
+
+### POST /api/teams/photos/approve — Approve Photos
+
+**Auth:** Required (team leader / `manage school team` permission)
+
+**Request:**
+```json
+{ "team_id": 1, "photo_ids": [123, 124] }
+```
+Or: `{ "team_id": 1, "approve_all": true }`
+
+**Response:** `{ "success": true, "approved_count": 3, "message": "3 photos approved and published." }`
+
+Idempotent (WHERE `is_public = 0`). Sets `is_public=true`, fires `TagsVerifiedByAdmin` for metrics.
+
+---
+
+### POST /api/teams/photos/revoke — Revoke Photo Approval
+
+**Auth:** Required (team leader / `manage school team` permission)
+
+**Request:**
+```json
+{ "team_id": 1, "photo_ids": [123, 124] }
+```
+Or: `{ "team_id": 1, "revoke_all": true }`
+
+**Response:** `{ "success": true, "revoked_count": 2, "message": "2 photos revoked." }`
+
+Idempotent (WHERE `is_public = true`). Reverses metrics, sets `is_public=false`, `verified=1`.
+
+---
+
+### DELETE /api/teams/photos/{photo}?team_id=X — Delete Team Photo
+
+**Auth:** Required (team leader / `manage school team` permission)
+
+**Response:**
+```json
+{
+ "success": true,
+ "message": "Photo deleted.",
+ "stats": { "total": 149, "pending": 49, "approved": 100 }
+}
+```
+
+Reverses metrics, removes S3 files, soft-deletes.
+
+---
+
+### GET /api/teams/photos/map?team_id=X — Team Photo Map Points
+
+**Auth:** Required (team member)
+
+Returns max 5000 points with `id`, `lat`, `lng`, `tags`, `verified`, `is_public`, `date`.
+
+---
+
+### GET /api/teams/clusters/{team} — Team Clusters (GeoJSON)
+
+**Auth:** Required (Sanctum)
+
+**Query params:** `zoom`, `bbox`
+
+---
+
+### GET /api/teams/points/{team} — Team Points (GeoJSON)
+
+**Auth:** Required (team member)
+
+**Query params:** `bbox`, `layers`
+
+---
+
+### POST /api/teams/download — Download Team Data
+
+**Auth:** Required (Sanctum)
+
+**Request:** `{ "team_id": 1 }`
+**Response:** `{ "success": true }`
+**Error:** `{ "success": false, "message": "not-a-member" }`
+
+Queues background export job.
+
+---
+
+## Community & Map Data
+
+### GET /api/community/stats — Community Statistics
+
+**Auth:** None (public)
+
+**Response (200):**
+```json
+{
+ "photosPerMonth": 3000,
+ "litterTagsPerMonth": 10000,
+ "usersPerMonth": 50,
+ "statsByMonth": {
+ "photosByMonth": [100, 200, 300],
+ "usersByMonth": [10, 20, 30],
+ "periods": ["Jan 2024", "Feb 2024", "Mar 2024"]
+ }
+}
+```
+
+---
+
+### GET /api/mobile-app-version — Mobile App Version
+
+**Auth:** None (public)
+
+**Response (200):**
+```json
+{
+ "ios": {
+ "url": "https://apps.apple.com/us/app/openlittermap/id1475982147",
+ "version": "6.1.0"
+ },
+ "android": {
+ "url": "https://play.google.com/store/apps/details?id=com.geotech.openlittermap",
+ "version": "6.1.0"
+ }
+}
+```
+
+---
+
+### GET /api/history/paginated — Paginated Tagging History
+
+**Auth:** Optional (changes filter behavior)
+
+**Query params:**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `loadPage` | int | Page number (default: 1) |
+| `filterCountry` | string | Country filter or `'all'` (default) |
+| `filterDateFrom` | string | Start date filter |
+| `filterDateTo` | string | End date filter |
+| `filterTag` | string | Search in summary JSON |
+| `filterCustomTag` | string | Search custom tags |
+| `paginationAmount` | int | Results per page |
+
+**Response (200):** `{ "success": true, "photos": { /* paginated */ } }`
+
+If authenticated: shows user's own photos. If unauthenticated: shows `verified >= 2` and `is_public = true` photos only.
+
+---
+
+### GET /api/countries/names — Country Name List
+
+**Auth:** None (public)
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "countries": [
+ { "id": 1, "country": "United States", "shortcode": "US", "manual_verify": true }
+ ]
+}
+```
+
+Only returns countries with `manual_verify = true` (or shortcode `pr`).
+
+---
+
+### GET /api/global/points — Global Map Points (Legacy)
+
+**Auth:** None (public)
+
+GeoJSON endpoint for the global map. Filters: `is_public = true`. Supports `bbox`, `layers`, `fromDate`, `toDate`, `year`, `username` query params.
+
+---
+
+### GET /api/global/art-data — Litter Art Data (Deprecated)
+
+**Auth:** None (public)
+
+Returns GeoJSON of photos with `art_id != null`, `verified >= 2`, `is_public = true`.
+
+---
+
+### GET /api/global/search/custom-tags — Search Custom Tags
+
+**Auth:** None (public)
+
+**Query params:** `search` (required, string prefix)
+
+**Response (200):**
+```json
+{ "success": true, "tags": ["plastic wrapper", "plastic bottle"] }
+```
+
+Returns top 20 matching custom tags ordered by frequency.
+
+---
+
+### GET /api/tags-search — Display Tags on Map
+
+**Auth:** None (public)
+
+**Query params:** `custom_tag`, `custom_tags` (comma-separated), `brand`
+
+Returns GeoJSON FeatureCollection of matching photos (`is_public = true`, max 5000).
+
+---
+
+### POST /api/download — Download Location Data
+
+**Auth:** Optional
+
+**Request:**
+```json
+{ "locationType": "city", "locationId": 42, "email": "user@example.com" }
+```
+
+`email` is optional if authenticated (uses auth user's email). Queues CSV export job, emails download link.
+
+**Response:** `{ "success": true }` or `{ "success": false }`
+
+---
+
+## Cleanups
+
+### POST /api/cleanups/create — Create Cleanup Event
+
+**Auth:** Required
+
+**Request:**
+```json
+{
+ "name": "Beach Cleanup",
+ "date": "2025-03-15",
+ "lat": 40.7128,
+ "lon": -74.0060,
+ "time": "10:00 AM",
+ "description": "Annual beach cleanup event",
+ "invite_link": "beach-cleanup-2025"
+}
+```
+
+| Field | Rules |
+|-------|-------|
+| `name` | required, min 5 |
+| `date` | required |
+| `lat` | required |
+| `lon` | required |
+| `time` | required, min 3 |
+| `description` | required, min 5 |
+| `invite_link` | required, unique, min 1 |
+
+**Response:** `{ "success": true, "cleanup": { ... } }`
+
+Creator is automatically joined.
+
+---
+
+### GET /api/cleanups/get-cleanups — Get All Cleanups (GeoJSON)
+
+**Auth:** None (public)
+
+**Response:** `{ "success": true, "geojson": { /* GeoJSON FeatureCollection */ } }`
+
+---
+
+### POST /api/cleanups/{inviteLink}/join — Join Cleanup
+
+**Auth:** Optional (returns error message if unauthenticated)
+
+**Response:** `{ "success": true, "cleanup": { ... } }`
+**Errors:** `{ "success": false, "msg": "unauthenticated" | "already joined" | "cleanup not found" }`
+
+---
+
+### POST /api/cleanups/{inviteLink}/leave — Leave Cleanup
+
+**Auth:** Required
+
+**Response:** `{ "success": true }`
+**Errors:** `{ "success": false, "msg": "not found" | "cannot leave" | "already left" }`
+
+Creator cannot leave their own cleanup.
+
+---
+
+### GET /api/city — Get City Map Data (Legacy)
+
+**Auth:** None (public)
+
+**Query params:** `city` (required, URL-decoded name), `min` / `max` (dates, format `d-m-Y`), `hex` (optional, default 100)
+
+**Response (200):**
+```json
+{
+ "center_map": [40.7128, -74.0060],
+ "map_zoom": 13,
+ "litterGeojson": { "type": "FeatureCollection", "features": [...] },
+ "hex": 100
+}
+```
+
+Filters: `is_public = true`, `verified > 0`.
+
+---
+
+### POST /api/littercoin/merchants — Become a Merchant
+
+**Auth:** None specified in route
+
+Registers interest as a Littercoin merchant.
+
+---
+
+### GET /api/locations/world-cup — World Cup Data
+
+**Auth:** None (public)
+
+Returns location data for the World Cup leaderboard.
+
+---
+
+### POST /api/settings/toggle — Toggle Items Remaining
+
+**Auth:** Required (Sanctum)
+
+Toggles the `items_remaining` boolean for the user.
+
+**Response:** `{ "message": "success", "value": true }`
+
+---
+
+### POST /api/profile/photos/remaining/{id} — Toggle Photo Remaining Flag
+
+**Auth:** Required (Sanctum)
+
+Toggles the `remaining` field on a specific photo.
+
+**Response:** `{ "success": true }`
+
+---
+
+### POST /api/user/profile/photos/tags/bulkTag — Bulk Tag Photos (Deprecated)
+
+**Auth:** Required (Sanctum)
+**Status:** 410 Gone
+
+**Response:** `{ "message": "Use POST /api/v3/tags for tagging" }`
+
+---
+
+### POST /api/profile/upload-profile-photo — Upload Profile Photo (Stub)
+
+**Auth:** Required (Sanctum)
+**Status:** 501 Not Implemented
+
+Not yet implemented.
+
+---
+
+## Admin Endpoints
+
+Admin endpoints under `/api/admin/` require the `admin` middleware (`hasRole('admin')` or `hasRole('superadmin')`). Internal use — not for mobile clients.
+
+### GET /api/admin/photos — Photo Review Queue
+
+**Auth:** Admin middleware (admin or superadmin)
+
+**Query params:**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `country_id` | int | Filter by country |
+| `user_id` | int | Filter by uploader |
+| `photo_id` | int | Find specific photo |
+| `date_from` | date | Created after (YYYY-MM-DD) |
+| `date_to` | date | Created before (YYYY-MM-DD) |
+| `per_page` | int | Results per page (default 20, max 50) |
+| `page` | int | Page number |
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "photos": {
+ "data": [
+ {
+ "id": 123,
+ "user_id": 42,
+ "filename": "photos/abc123.jpg",
+ "country_id": 1,
+ "state_id": 5,
+ "city_id": 10,
+ "verified": 1,
+ "summary": {"smoking": {"cigarette_butt": 3}},
+ "total_tags": 3,
+ "xp": 18,
+ "created_at": "2025-02-27T10:00:00.000000Z",
+ "user": {"id": 42, "name": "John"},
+ "country_relation": {"id": 1, "country": "United States", "shortcode": "us"},
+ "new_tags": [
+ {
+ "category_litter_object_id": 45,
+ "litter_object_type_id": null,
+ "category": "smoking",
+ "object": "cigarette_butt",
+ "quantity": 3,
+ "picked_up": false,
+ "extra_tags": []
+ }
+ ]
+ }
+ ],
+ "current_page": 1,
+ "per_page": 20,
+ "total": 342
+ },
+ "stats": {"total_pending": 342}
+}
+```
+
+**Query:** `is_public=true`, `verified < ADMIN_APPROVED`, `summary NOT NULL`, ordered by `created_at ASC`.
+
+---
+
+### POST /api/admin/verify — Approve Photo
+
+**Auth:** Admin middleware
+
+**Request:**
+```json
+{ "photoId": 123 }
+```
+
+**Response (200):**
+```json
+{ "success": true, "approved": true }
+```
+
+Returns `"approved": false` if already approved (idempotent). Returns 422 if `summary` is null.
+
+---
+
+### POST /api/admin/contentsupdatedelete — Edit Tags + Approve
+
+**Auth:** Admin middleware
+
+**Request:**
+```json
+{
+ "photoId": 123,
+ "tags": [
+ {
+ "category_litter_object_id": 45,
+ "quantity": 3,
+ "picked_up": true,
+ "materials": [{"id": 1, "quantity": 1}],
+ "brands": [{"id": 5, "quantity": 1}],
+ "custom_tags": ["tag_text"]
+ }
+ ]
+}
+```
+
+**Response (200):**
+```json
+{ "success": true, "approved": true, "photo": {...} }
+```
+
+Wrapped in `DB::transaction()`: deletes existing PhotoTags, creates new via `AddTagsToPhotoAction`, then approves.
+
+---
+
+### POST /api/admin/destroy — Delete Photo
+
+**Auth:** Admin middleware
+
+**Request:**
+```json
+{ "photoId": 123 }
+```
+
+**Response (200):**
+```json
+{ "success": true }
+```
+
+Calls `MetricsService::deletePhoto()` before soft delete (if `processed_at` set).
+
+---
+
+### POST /api/admin/reset-tags — Reset Tags
+
+**Auth:** Admin middleware
+
+**Request:**
+```json
+{ "photoId": 123 }
+```
+
+**Response (200):**
+```json
+{ "success": true }
+```
+
+Reverses metrics, deletes PhotoTags, resets `verified=0`, `summary=null`, `xp=0`. Skips already-approved photos.
+
+---
+
+### GET /api/admin/get-countries-with-photos — Countries with Pending
+
+**Auth:** Admin middleware
+
+**Response (200):** Array of `{id, country, total}` — countries with pending public photos.
+
+---
+
+### GET /api/admin/stats — Dashboard Stats
+
+**Auth:** Admin middleware
+**Cache:** 60 seconds (`admin:dashboard:stats`)
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "stats": {
+ "queue_total": 342,
+ "queue_today": 15,
+ "by_verification": {
+ "Unverified": 50,
+ "Verified": 292,
+ "Admin Approved": 0
+ },
+ "by_country": {
+ "United States": 128,
+ "Ireland": 42
+ },
+ "total_users": 5420,
+ "users_today": 3,
+ "flagged_usernames": 7
+ }
+}
+```
+
+`by_verification` uses `VerificationStatus::label()` enum labels. `by_country` shows top 20.
+
+---
+
+### GET /api/admin/users — List Users
+
+**Auth:** Admin middleware
+
+**Query params:**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `search` | string | Search name/username/email (LIKE) |
+| `sort_by` | string | `created_at` (default), `photos_count`, `xp` |
+| `sort_dir` | string | `asc` or `desc` (default) |
+| `trust_filter` | string | `all` (default), `trusted`, `untrusted` |
+| `flagged` | bool | Show only `username_flagged=true` users |
+| `per_page` | int | Results per page (default 25, max 100) |
+| `page` | int | Page number |
+
+**Response (200):**
+```json
+{
+ "success": true,
+ "users": {
+ "data": [
+ {
+ "id": 1,
+ "name": "John Doe",
+ "username": "john-doe",
+ "email": "john@example.com",
+ "created_at": "2025-01-15",
+ "photos_count": 42,
+ "xp": 500,
+ "verification_required": true,
+ "pending_photos": 5,
+ "roles": ["user"],
+ "is_trusted": false,
+ "username_flagged": false
+ }
+ ],
+ "current_page": 1,
+ "per_page": 25,
+ "total": 250
+ }
+}
+```
+
+`pending_photos` = public photos where `verified < ADMIN_APPROVED`.
+
+---
+
+### POST /api/admin/users/{user}/trust — Toggle Trust
+
+**Auth:** Superadmin only (403 for admin/helper)
+
+**Request:**
+```json
+{ "trusted": true }
+```
+
+**Response (200):**
+```json
+{
+ "user_id": 42,
+ "trusted": true,
+ "verification_required": false
+}
+```
+
+Sets `verification_required = !trusted`. Does NOT retroactively approve existing photos.
+
+---
+
+### POST /api/admin/users/{user}/approve-all — Bulk Approve
+
+**Auth:** Superadmin only (403 for admin/helper)
+
+**Response (200):**
+```json
+{ "approved_count": 15 }
+```
+
+Approves all pending public photos for user (max 500). Same atomic WHERE + `TagsVerifiedByAdmin` event as `verify()`.
+
+---
+
+### PATCH /api/admin/users/{user}/username — Moderate Username
+
+**Auth:** Superadmin only (403 for admin/helper)
+
+**Request:**
+```json
+{ "username": "new-username" }
+```
+
+**Response (200):**
+```json
+{
+ "user_id": 42,
+ "username": "new-username",
+ "previous_username": "old-flagged-name"
+}
+```
+
+Validation: 3–30 chars, alphanumeric + hyphens, unique. Clears `username_flagged`.
+
+---
+
+## Bounding Box Endpoints
+
+Bbox endpoints under `/api/bbox/` require the `can_bbox` middleware. Used for bounding box annotation workflow. Includes: index, create, skip, update tags, verify.
+
+---
+
+## Mobile Endpoints (v2)
+
+Active endpoints for the mobile app:
+
+### GET /api/v2/photos/get-untagged-uploads — Untagged Photos
+
+**Auth:** Required (Sanctum)
+
+**Query params (optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `platform` | string | Filter by upload source: `web` or `mobile`. Omit for all. |
+
+**Response (200):**
+```json
+{
+ "count": 5,
+ "photos": [
+ { "id": 1, "filename": "https://s3.../photo.jpg", "remaining": 1, "platform": "web" },
+ { "id": 2, "filename": "https://s3.../photo2.jpg", "remaining": 0, "platform": "mobile" }
+ ]
+}
+```
+
+Paginated (100 per page). Returns untagged photos (`verified = 0`) for the authenticated user. `count` reflects the filtered total. `filename` is the full S3 URL.
+
+**Mobile web photo support:** The mobile app can use `?platform=web` to list photos uploaded via the web SPA that still need tagging. Tag them with `POST /api/v3/tags` and delete them with `DELETE /api/photos/delete` — both work on any user-owned photo regardless of platform.
+
+---
+
+### GET /api/v2/photos/web/load-more — Load More Untagged (Deprecated)
+
+**Auth:** Required (Sanctum)
+
+**Query param:** `photo_id` (int, load photos after this ID)
+
+Returns up to 10 photos with `id` and `filename` only.
+
+---
+
+### Other Legacy Endpoints
+
+| Endpoint | Description |
+|----------|-------------|
+| `GET /api/v2/photos/web/index` | Alias for get-untagged-uploads |
+| `POST /api/v2/add-tags-to-uploaded-image` | Add v4 tags (same as `/api/add-tags`) |
+| `POST /api/upload` | Upload photo (legacy alias for v3/upload) |
+
+---
+
+## Reference
+
+### Verification Pipeline
+
+| Value | Status | Meaning |
+|-------|--------|---------|
+| 0 | UNVERIFIED | Uploaded, no tags |
+| 1 | VERIFIED | Tagged (school students land here, awaiting teacher approval) |
+| 2 | ADMIN_APPROVED | Verified by admin/trusted user OR teacher-approved |
+| 3 | BBOX_APPLIED | Bounding boxes drawn |
+| 4 | BBOX_VERIFIED | Bounding boxes verified |
+| 5 | AI_READY | Ready for OpenLitterAI training |
+
+### Level System
+
+| XP Threshold | Level | Title |
+|-------------|-------|-------|
+| 0 | 0 | Complete Noob |
+| 100 | 1 | Still A Noob |
+| 500 | 2 | Post-Noob |
+| 1,000 | 3 | Litter Wizard |
+| 5,000 | 4 | Trash Warrior |
+| 10,000 | 5 | Early Guardian |
+| 15,000 | 6 | Trashmonster |
+| 50,000 | 7 | Force of Nature |
+| 100,000 | 8 | Planet Protector |
+| 200,000 | 9 | Galactic Garbagething |
+| 500,000 | 10 | Interplanetary |
+| 1,000,000 | 11 | SuperIntelligent LitterMaster |
+
+### XP Scoring
+
+| Action | XP per unit |
+|--------|------------|
+| Upload | 5 |
+| Object tag | 1 (special overrides exist) |
+| Brand | 3 |
+| Material | 2 |
+| Custom tag | 1 |
+
+Brands use their own `quantity`. Materials and custom_tags use parent tag's `quantity`.
+
+### Error Response Patterns
+
+Controllers use two error field names inconsistently:
+- `msg` — Used by: auth endpoints, team join, legacy photo endpoints
+- `message` — Used by: team member/settings endpoints, team photos, newer endpoints
+
+Both return `success: false` with the error string.
+
+### Auth Architecture
+
+- **SPA (web):** Session-based via `auth:web` + Sanctum cookie
+- **Mobile:** Stateless Sanctum tokens via `Authorization: Bearer {token}`
+- **Dual guard:** Most routes use `auth:sanctum` (supports both session and token)
+- Token login revokes previous tokens (prevents buildup)
+- Registration returns both session + token (immediate use from either client)
diff --git a/readme/BackendLocations.md b/readme/BackendLocations.md
new file mode 100644
index 00000000..0e3f5ad0
--- /dev/null
+++ b/readme/BackendLocations.md
@@ -0,0 +1,758 @@
+# OpenLitterMap v5 — Locations System
+
+## Overview
+
+This document covers the v5 locations architecture: what's changing, what's being deprecated, the new database schema, Redis design, and the re-engineered upload flow.
+
+The core principle: **locations tables store identity only; all aggregates live in the `metrics` table and Redis.**
+
+---
+
+## Current State (v4) — Problems
+
+### 1. Redundant data on `photos` table
+
+The photo record stores location data in two ways simultaneously:
+
+| Foreign Keys (keep) | String Columns (deprecate) |
+|---|---|
+| `country_id` | `country`, `country_code` |
+| `state_id` | `county` (actually state name) |
+| `city_id` | `city`, `display_name`, `location`, `road` |
+
+The string columns are denormalized copies of data that already exists on the location tables. They made sense before we had proper foreign keys but now they just drift and waste space.
+
+### 2. Legacy category counters on `cities` table
+
+The `cities` table has 16+ `total_*` columns:
+
+```
+total_smoking, total_cigaretteButts, total_food, total_softdrinks,
+total_plasticBottles, total_alcohol, total_coffee, total_drugs,
+total_dumping, total_industrial, total_needles, total_sanitary,
+total_other, total_coastal, total_pathways, total_art, total_dogshit
+```
+
+These are completely replaced by the `metrics` table time-series which tracks tags by category, object, material, and brand at all location levels with full time-series granularity.
+
+### 3. Legacy columns on all location tables
+
+| Column | Tables | Status |
+|---|---|---|
+| `manual_verify` | countries, states, cities | Deprecated — no longer used |
+| `littercoin_paid` | countries, states, cities | Deprecated — Littercoin tracked elsewhere |
+| `countrynameb` | countries | Deprecated — unused alternate name |
+| `statenameb` | states | Deprecated — unused alternate name |
+| `user_id_last_uploaded` | countries, states, cities | Deprecated — derivable from photos table |
+
+### 4. `UpdateLeaderboardsForLocationAction` is deprecated
+
+Already marked `@deprecated` but still called from the upload controller. It writes to old Redis key patterns:
+
+```
+xp.country.{id} # old format
+leaderboard:country:{id}:total # old format
+leaderboard:country:{id}:{year}:{month}:{day} # old format
+```
+
+The `MetricsService` + `RedisMetricsCollector` now handles all of this via the unified metrics pipeline.
+
+### 5. Events overlap with MetricsService
+
+| Event | What it does | v5 status |
+|---|---|---|
+| `ImageUploaded` | Updates total_contributors_redis, broadcasts to map | **Keep** — real-time broadcast still needed |
+| `IncrementPhotoMonth` | Increments month counters per location | **Remove** — metrics table handles time-series |
+| `NewCountryAdded` | Notifies Twitter/Slack | **Keep** — notification, not metrics |
+| `NewStateAdded` | Notifies Twitter/Slack | **Keep** — notification, not metrics |
+| `NewCityAdded` | Notifies Twitter/Slack | **Keep** — notification, not metrics |
+
+### 6. UploadHelper error handling
+
+Falls back to sentinel records (`error_country`, `error_state`, `error_city`). This means:
+
+- Bad geocode results silently create photos attached to error locations
+- These pollute metrics and leaderboards
+- No way to distinguish "geocode failed" from "geocode returned unexpected format"
+
+### 7. Upload controller does too much
+
+The `__invoke` method handles: image processing → S3 upload → bbox upload → GPS extraction → reverse geocoding → location resolution → photo creation → XP/leaderboards → 5 different events. This needs to be broken into focused steps.
+
+---
+
+## v5 Target Schema
+
+### `countries` table
+
+```sql
+-- Keep
+id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
+country VARCHAR(255) NOT NULL -- Display name
+shortcode VARCHAR(2) NOT NULL UNIQUE -- ISO 3166-1 alpha-2
+created_by BIGINT UNSIGNED NULLABLE -- User who first triggered creation
+created_at TIMESTAMP
+updated_at TIMESTAMP
+
+-- Deprecate (migration to drop)
+manual_verify -- unused
+littercoin_paid -- tracked elsewhere
+countrynameb -- unused alternate name
+user_id_last_uploaded -- derivable from photos
+```
+
+### `states` table
+
+```sql
+-- Keep
+id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
+state VARCHAR(255) NOT NULL
+country_id BIGINT UNSIGNED NOT NULL -- FK → countries
+created_by BIGINT UNSIGNED NULLABLE
+created_at TIMESTAMP
+updated_at TIMESTAMP
+
+UNIQUE KEY (country_id, state)
+
+-- Deprecate (migration to drop)
+statenameb -- unused alternate name
+manual_verify -- unused
+littercoin_paid -- tracked elsewhere
+user_id_last_uploaded -- derivable from photos
+```
+
+### `cities` table
+
+```sql
+-- Keep
+id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
+city VARCHAR(255) NOT NULL
+country_id BIGINT UNSIGNED NOT NULL -- FK → countries
+state_id BIGINT UNSIGNED NOT NULL -- FK → states
+created_by BIGINT UNSIGNED NULLABLE
+created_at TIMESTAMP
+updated_at TIMESTAMP
+
+UNIQUE KEY (country_id, state_id, city)
+
+-- Deprecate (migration to drop) — ALL total_* columns
+total_smoking, total_cigaretteButts, total_food, total_softdrinks,
+total_plasticBottles, total_alcohol, total_coffee, total_drugs,
+total_dumping, total_industrial, total_needles, total_sanitary,
+total_other, total_coastal, total_pathways, total_art, total_dogshit,
+manual_verify, littercoin_paid, user_id_last_uploaded
+```
+
+### `photos` table — columns to deprecate
+
+```sql
+-- Deprecate (migration to drop)
+country -- redundant, use country_id → countries.country
+country_code -- redundant, use country_id → countries.shortcode
+county -- confusingly named (it's state), use state_id → states.state
+city -- redundant, use city_id → cities.city
+display_name -- full OSM address string, move to address_array JSON
+location -- first element of address array, derivable
+road -- second element of address array, derivable
+
+-- Keep
+country_id, state_id, city_id -- foreign keys
+address_array -- raw OSM response (JSON), source of truth for display_name/location/road
+lat, lon, geohash -- coordinates
+```
+
+### `metrics` table (already exists in v5)
+
+This is the single source of truth for all aggregates. See `MetricsService` for full schema.
+
+```sql
+-- Composite unique key
+(timescale, location_type, location_id, user_id, year, month, week, bucket_date)
+
+-- Additive counters
+uploads, tags, brands, materials, custom_tags, litter, xp
+```
+
+**LocationType enum:**
+- `0` = Global
+- `1` = Country
+- `2` = State
+- `3` = City
+
+**Timescales:**
+- `0` = All-time
+- `1` = Daily
+- `2` = Weekly (ISO)
+- `3` = Monthly
+- `4` = Yearly
+
+---
+
+## v5 Location Models
+
+### Country model (cleaned)
+
+```php
+class Country extends Location
+{
+ protected $fillable = [
+ 'country',
+ 'shortcode',
+ 'created_by',
+ ];
+
+ protected $appends = [
+ 'total_litter_redis',
+ 'total_photos_redis',
+ 'total_contributors_redis',
+ 'litter_data',
+ 'brands_data',
+ 'objects_data',
+ 'materials_data',
+ 'recent_activity',
+ 'total_xp',
+ 'ppm',
+ 'updatedAtDiffForHumans',
+ 'total_ppm',
+ ];
+
+ public function getRouteKeyName(): string
+ {
+ return 'country';
+ }
+
+ public function states()
+ {
+ return $this->hasMany(State::class);
+ }
+
+ public function cities()
+ {
+ return $this->hasMany(City::class);
+ }
+}
+```
+
+### State model (cleaned)
+
+```php
+class State extends Location
+{
+ protected $fillable = [
+ 'state',
+ 'country_id',
+ 'created_by',
+ ];
+
+ // Same $appends as Country
+
+ public function country()
+ {
+ return $this->belongsTo(Country::class);
+ }
+
+ public function cities()
+ {
+ return $this->hasMany(City::class);
+ }
+}
+```
+
+### City model (cleaned)
+
+```php
+class City extends Location
+{
+ protected $fillable = [
+ 'city',
+ 'country_id',
+ 'state_id',
+ 'created_by',
+ ];
+
+ // Same $appends as Country
+
+ public function country()
+ {
+ return $this->belongsTo(Country::class);
+ }
+
+ public function state()
+ {
+ return $this->belongsTo(State::class);
+ }
+}
+```
+
+### Location base model `$appends`
+
+All aggregate data (`total_litter_redis`, `total_photos_redis`, etc.) should be computed from Redis, which is populated by `RedisMetricsCollector` and rebuildable from the `metrics` table. The base `Location` model provides these accessors.
+
+---
+
+## Redis Key Design (v5)
+
+Redis is a **derived cache** — rebuildable from the `metrics` table at any time.
+
+### Scope prefixes (from `LocationType` enum)
+
+```
+global → LocationType::Global
+country:{id} → LocationType::Country
+state:{id} → LocationType::State
+city:{id} → LocationType::City
+```
+
+### Key patterns managed by `RedisMetricsCollector`
+
+All keys use `RedisKeys::*` builders (single source of truth). See `app/Services/Redis/RedisKeys.php`.
+
+```
+# Aggregate counters (HINCRBY on hash keys)
+{scope}:stats → HASH { uploads, tags, litter, xp, brands, materials, custom_tags }
+
+# Contributors (PFADD on HyperLogLog)
+{scope}:hll → HyperLogLog of user IDs (~0.81% error, O(1) reads)
+
+# Per-tag counters
+{scope}:obj → HASH { object_id: count }
+{scope}:mat → HASH { material_id: count }
+{scope}:brand → HASH { brand_id: count }
+{scope}:cat → HASH { category_id: count }
+
+# Tag rankings (ZINCRBY on sorted sets)
+{scope}:rank:objects → ZSET { object_id: count }
+{scope}:rank:materials → ZSET { material_id: count }
+{scope}:rank:brands → ZSET { brand_id: count }
+
+# Leaderboards (ZINCRBY on sorted sets)
+{scope}:lb:xp → ZSET { user_id: xp }
+
+# Per-user
+{u:$userId}:stats → HASH { uploads, xp, litter }
+{u:$userId}:bitmap → BITMAP (activity streak tracking)
+```
+
+### Deprecated Redis keys (to remove)
+
+```
+# Old leaderboard format — replaced by {scope}:lb:xp ZSETs
+xp.country.{id}
+xp.country.{id}.state.{id}
+xp.country.{id}.state.{id}.city.{id}
+leaderboard:country:{id}:total
+leaderboard:state:{id}:total
+leaderboard:city:{id}:total
+leaderboard:country:{id}:{year}:{month}:{day}
+leaderboard:state:{id}:{year}:{month}:{day}
+leaderboard:city:{id}:{year}:{month}:{day}
+leaderboard:country:{id}:{year}:{month}
+leaderboard:state:{id}:{year}:{month}
+leaderboard:city:{id}:{year}:{month}
+leaderboard:country:{id}:{year}
+leaderboard:state:{id}:{year}
+leaderboard:city:{id}:{year}
+
+# Old location format — replaced by {scope}:stats, {scope}:hll
+country:*:user_ids
+state:*:user_ids
+city:*:user_ids
+```
+
+---
+
+## Migrations
+
+### Migration 1: Drop deprecated columns from locations
+
+```php
+Schema::table('countries', function (Blueprint $table) {
+ $table->dropColumn([
+ 'manual_verify',
+ 'littercoin_paid',
+ 'countrynameb',
+ 'user_id_last_uploaded',
+ ]);
+});
+
+Schema::table('states', function (Blueprint $table) {
+ $table->dropColumn([
+ 'statenameb',
+ 'manual_verify',
+ 'littercoin_paid',
+ 'user_id_last_uploaded',
+ ]);
+});
+
+Schema::table('cities', function (Blueprint $table) {
+ $table->dropColumn([
+ 'total_smoking',
+ 'total_cigaretteButts',
+ 'total_food',
+ 'total_softdrinks',
+ 'total_plasticBottles',
+ 'total_alcohol',
+ 'total_coffee',
+ 'total_drugs',
+ 'total_dumping',
+ 'total_industrial',
+ 'total_needles',
+ 'total_sanitary',
+ 'total_other',
+ 'total_coastal',
+ 'total_pathways',
+ 'total_art',
+ 'total_dogshit',
+ 'manual_verify',
+ 'littercoin_paid',
+ 'user_id_last_uploaded',
+ ]);
+});
+```
+
+### Migration 2: Drop deprecated columns from photos
+
+```php
+Schema::table('photos', function (Blueprint $table) {
+ $table->dropColumn([
+ 'country',
+ 'country_code',
+ 'county', // actually state name
+ 'city', // string duplicate of city_id
+ 'display_name', // derivable from address_array
+ 'location', // derivable from address_array
+ 'road', // derivable from address_array
+ ]);
+});
+```
+
+**Important:** Run Migration 2 only after confirming no code reads these columns. During transition, you can mark them as nullable/deprecated first, then drop in a follow-up migration.
+
+---
+
+## Re-engineered Upload Flow
+
+### Current flow (v4)
+
+```
+UploadPhotoController::__invoke()
+├── MakeImageAction::run() → image + EXIF
+├── UploadPhotoAction::run() × 2 → S3 + bbox
+├── getCoordinatesFromPhoto() → lat/lon
+├── ReverseGeocodeLocationAction::run() → OSM address
+├── UploadHelper::getCountry/State/City → firstOrCreate locations
+├── Photo::create() → 20+ columns including string locations
+├── event(ImageUploaded) → broadcast + contributor counts
+├── UpdateLeaderboardsForLocationAction → deprecated Redis writes
+├── event(NewCountryAdded) → notification
+├── event(NewStateAdded) → notification
+├── event(NewCityAdded) → notification
+└── event(IncrementPhotoMonth) → deprecated month counters
+```
+
+### New flow (v5)
+
+```
+UploadPhotoController::__invoke()
+├── MakeImageAction::run() → image + EXIF
+├── UploadPhotoAction::run() × 2 → S3 + bbox
+├── getCoordinatesFromPhoto() → lat/lon
+├── ResolveLocationAction::run() → country, state, city (replaces UploadHelper)
+├── Photo::create() → slim columns (FKs only, no string duplication)
+├── MetricsService::processPhoto() → MySQL metrics + Redis (replaces leaderboards action)
+├── event(ImageUploaded) → broadcast to real-time map
+├── event(NewCountryAdded) → notification (if wasRecentlyCreated)
+├── event(NewStateAdded) → notification (if wasRecentlyCreated)
+└── event(NewCityAdded) → notification (if wasRecentlyCreated)
+```
+
+**Removed:**
+- `UpdateLeaderboardsForLocationAction` — replaced by `MetricsService`
+- `IncrementPhotoMonth` event — replaced by `metrics` table time-series
+- String location columns from `Photo::create()`
+- `UploadHelper` class — replaced by `ResolveLocationAction`
+
+### New `ResolveLocationAction`
+
+Replaces `UploadHelper` with cleaner error handling:
+
+```php
+namespace App\Actions\Locations;
+
+use App\Models\Location\{Country, State, City};
+
+class ResolveLocationAction
+{
+ /**
+ * Resolve lat/lon to Country, State, City.
+ *
+ * @throws \App\Exceptions\GeocodingException
+ */
+ public function run(float $lat, float $lon): LocationResult
+ {
+ $revGeoCode = app(ReverseGeocodeLocationAction::class)->run($lat, $lon);
+ $address = $revGeoCode['address'];
+
+ $country = $this->resolveCountry($address);
+ $state = $this->resolveState($country, $address);
+ $city = $this->resolveCity($country, $state, $address);
+
+ return new LocationResult(
+ country: $country,
+ state: $state,
+ city: $city,
+ addressArray: $address,
+ displayName: $revGeoCode['display_name'],
+ );
+ }
+
+ private function resolveCountry(array $address): Country
+ {
+ $code = $address['country_code'] ?? null;
+
+ if (!$code) {
+ throw new \App\Exceptions\GeocodingException('No country_code in geocode response');
+ }
+
+ return Country::firstOrCreate(
+ ['shortcode' => strtoupper($code)],
+ ['country' => $address['country'] ?? '', 'created_by' => auth()->id()]
+ );
+ }
+
+ private function resolveState(Country $country, array $address): State
+ {
+ $name = $this->lookup($address, ['state', 'county', 'region', 'state_district']);
+
+ if (!$name) {
+ throw new \App\Exceptions\GeocodingException('No state found in geocode response');
+ }
+
+ return State::firstOrCreate(
+ ['state' => $name, 'country_id' => $country->id],
+ ['created_by' => auth()->id()]
+ );
+ }
+
+ private function resolveCity(Country $country, State $state, array $address): City
+ {
+ $name = $this->lookup($address, ['city', 'town', 'city_district', 'village', 'hamlet', 'locality', 'county']);
+
+ if (!$name) {
+ throw new \App\Exceptions\GeocodingException('No city found in geocode response');
+ }
+
+ return City::firstOrCreate(
+ ['country_id' => $country->id, 'state_id' => $state->id, 'city' => $name],
+ ['created_by' => auth()->id()]
+ );
+ }
+
+ private function lookup(array $address, array $keys): ?string
+ {
+ foreach ($keys as $key) {
+ if (!empty($address[$key])) {
+ return $address[$key];
+ }
+ }
+ return null;
+ }
+}
+```
+
+### New `LocationResult` DTO
+
+```php
+namespace App\Actions\Locations;
+
+use App\Models\Location\{Country, State, City};
+
+class LocationResult
+{
+ public function __construct(
+ public readonly Country $country,
+ public readonly State $state,
+ public readonly City $city,
+ public readonly array $addressArray,
+ public readonly string $displayName,
+ ) {}
+}
+```
+
+### New `UploadPhotoController` (v5)
+
+```php
+namespace App\Http\Controllers\Uploads;
+
+use Geohash\GeoHash;
+use App\Models\Photo;
+use App\Events\{ImageUploaded, NewCityAdded, NewCountryAdded, NewStateAdded};
+use App\Actions\Photos\{MakeImageAction, UploadPhotoAction};
+use App\Actions\Locations\ResolveLocationAction;
+use App\Services\Metrics\MetricsService;
+use App\Http\Controllers\Controller;
+use App\Http\Requests\UploadPhotoRequest;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Auth;
+
+class UploadPhotoController extends Controller
+{
+ public function __construct(
+ private MakeImageAction $makeImageAction,
+ private UploadPhotoAction $uploadPhotoAction,
+ private ResolveLocationAction $resolveLocationAction,
+ private MetricsService $metricsService,
+ ) {}
+
+ public function __invoke(UploadPhotoRequest $request): JsonResponse
+ {
+ $user = Auth::user();
+ $file = $request->file('photo');
+
+ // 1. Process image & extract EXIF
+ $imageAndExif = $this->makeImageAction->run($file);
+ $image = $imageAndExif['image'];
+ $exif = $imageAndExif['exif'];
+ $dateTime = getDateTimeForPhoto($exif);
+
+ // 2. Upload full image + bbox thumbnail
+ $imageName = $this->uploadPhotoAction->run($image, $dateTime, $file->hashName());
+ $bboxImageName = $this->uploadPhotoAction->run(
+ $this->makeImageAction->run($file, true)['image'],
+ $dateTime,
+ $file->hashName(),
+ 'bbox'
+ );
+
+ // 3. Resolve location from GPS coordinates
+ $coordinates = getCoordinatesFromPhoto($exif);
+ $lat = $coordinates[0];
+ $lon = $coordinates[1];
+
+ $location = $this->resolveLocationAction->run($lat, $lon);
+
+ // 4. Create photo (slim — no string location duplication)
+ $photo = Photo::create([
+ 'user_id' => $user->id,
+ 'filename' => $imageName,
+ 'datetime' => $dateTime,
+ 'remaining' => !$user->picked_up,
+ 'lat' => $lat,
+ 'lon' => $lon,
+ 'model' => $exif['Model'] ?? 'Unknown',
+ 'country_id' => $location->country->id,
+ 'state_id' => $location->state->id,
+ 'city_id' => $location->city->id,
+ 'platform' => 'web',
+ 'geohash' => (new GeoHash())->encode($lat, $lon),
+ 'team_id' => $user->active_team,
+ 'five_hundred_square_filepath' => $bboxImageName,
+ 'address_array' => json_encode($location->addressArray),
+ ]);
+
+ // 5. Broadcast to real-time map
+ event(new ImageUploaded($user, $photo, $location->country, $location->state, $location->city));
+
+ // 6. Notify on new locations
+ if ($location->country->wasRecentlyCreated) {
+ event(new NewCountryAdded($location->country->country, $location->country->shortcode, now()));
+ }
+ if ($location->state->wasRecentlyCreated) {
+ event(new NewStateAdded($location->state->state, $location->country->country, now()));
+ }
+ if ($location->city->wasRecentlyCreated) {
+ event(new NewCityAdded(
+ $location->city->city, $location->state->state, $location->country->country,
+ now(), $location->city->id, $lat, $lon, $photo->id
+ ));
+ }
+
+ // 7. MetricsService processes after tags are added (not here)
+ // Tags are added in a separate step. MetricsService::processPhoto()
+ // is called when the user submits tags, not at upload time.
+ // At upload time, the photo has 0 tags and 0 XP.
+
+ return response()->json(['success' => true]);
+ }
+}
+```
+
+---
+
+## When MetricsService Runs
+
+Important distinction: **photo upload ≠ photo tagging**.
+
+1. **Upload** — the controller above creates the photo with coordinates, image, and location FKs. No tags yet.
+2. **Tagging** — the user adds tags (litter categories, materials, brands) in a separate request. This is when `MetricsService::processPhoto()` should run, because that's when tags, XP, and litter counts exist.
+
+If tags are submitted at upload time (e.g. pre-tagged uploads), then `MetricsService::processPhoto()` can be called at the end of the upload controller. But for the typical web flow where tagging is separate, the metrics call belongs in the tagging controller.
+
+---
+
+## Files to Delete / Deprecate
+
+| File | Action | Reason |
+|---|---|---|
+| `App\Helpers\Post\UploadHelper` | **Delete** | Replaced by `ResolveLocationAction` |
+| `App\Actions\Locations\UpdateLeaderboardsForLocationAction` | **Delete** | Already `@deprecated`, replaced by `MetricsService` |
+| `App\Actions\Locations\UpdateLeaderboardsXpAction` | **Delete** | Called only by the above |
+| `App\Events\Photo\IncrementPhotoMonth` | **Delete** | Replaced by `metrics` table time-series |
+
+---
+
+## Migration Checklist
+
+1. **Create** `ResolveLocationAction` + `LocationResult` DTO
+2. **Create** `GeocodingException` for proper error handling
+3. **Update** `UploadPhotoController` to v5 flow
+4. **Update** `ImageUploaded` event if it references deprecated photo columns
+5. **Verify** no code reads the deprecated photo string columns (`country`, `county`, `city`, etc.)
+6. **Run** Migration 1: drop deprecated location columns
+7. **Run** Migration 2: drop deprecated photo columns
+8. **Delete** `UploadHelper`, `UpdateLeaderboardsForLocationAction`, `IncrementPhotoMonth`
+9. **Clean up** old Redis keys (run a one-off script to delete the deprecated key patterns)
+10. **Update** `$fillable` on Country, State, City models
+11. **Remove** `$appends` entries that reference deleted columns (if any)
+
+---
+
+## API Endpoints (Location Data)
+
+### LocationController (v1) — Browsing UI
+
+`app/Http/Controllers/Location/LocationController.php` serves the hierarchical location browsing.
+
+| Endpoint | Description |
+|---|---|
+| `GET /api/v1/locations` | Global view: list of countries with stats |
+| `GET /api/v1/locations/{type}/{id}` | Drill into country/state/city |
+
+**Response format:**
+```json
+{
+ "stats": { "countries": 120, "uploads": 50000, "tags": 120000, ... },
+ "locations": [ ... ],
+ "location_type": "country",
+ "breadcrumbs": [ { "label": "World", "type": null, "id": null } ],
+ "activity": [ ... ]
+}
+```
+
+Key naming: `locations` (not `children`) and `location_type` (not `children_type`). Pinia store `useLocationsStore` reads these keys.
+
+Time filtering: `?period=today|yesterday|this_month|last_month|this_year` or `?year=2024`. Mutually exclusive.
+
+### Legacy endpoints (Redis-backed)
+
+All location aggregate data is served from Redis (fast) with MySQL metrics table as the source of truth (rebuildable).
+
+| Endpoint | Source | Notes |
+|---|---|---|
+| `GET /api/countries` | DB + Redis appends | List with aggregates from Redis |
+| `GET /api/countries/{country}` | DB + Redis appends | Single country with full data |
+| `GET /api/countries/{country}/states` | DB + Redis appends | States within country |
+| `GET /api/states/{state}/cities` | DB + Redis appends | Cities within state |
+| `GET /api/leaderboard` | Redis sorted sets | `{scope}:lb:xp` (see `readme/Leaderboards.md`) |
+
+The `$appends` on location models (`total_litter_redis`, `total_photos_redis`, etc.) read directly from Redis hashes, making these endpoints fast without any MySQL aggregate queries.
diff --git a/readme/BackendMobileApi.md b/readme/BackendMobileApi.md
new file mode 100644
index 00000000..e880ec28
--- /dev/null
+++ b/readme/BackendMobileApi.md
@@ -0,0 +1,735 @@
+# Mobile API Reference
+
+Endpoints the React Native app uses (or should use). All authenticated endpoints use `Authorization: Bearer `.
+
+Base URL configured in `actions/types.js` via `react-native-config`.
+
+---
+
+## Auth
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| POST | `/api/auth/token` | `auth_reducer.js` → `userLogin` | Active |
+| POST | `/api/auth/register` | `auth_reducer.js` → `createAccount` | Active |
+| POST | `/api/validate-token` | `auth_reducer.js` → `checkValidToken` | Active |
+| POST | `/api/password/email` | `auth_reducer.js` → `sendResetPasswordRequest` | Active |
+
+### Login — `POST /api/auth/token`
+
+```json
+// Request
+{ "identifier": "email_or_username", "password": "secret" }
+
+// Response 200
+{
+ "token": "1|abcdef...",
+ "user": {
+ "id": 1, "email": "...", "username": "...",
+ "xp_redis": 5000, "position": 12, "level": 3,
+ "total_images": 42,
+ "next_level": { "level": 4, "title": "Litter Wizard", "progress_percent": 50, ... }
+ }
+}
+```
+
+Accepts `identifier`, `email`, or `username` field (priority: identifier > email > username). Throttled 5/min. Revokes previous `mobile` tokens.
+
+### Register — `POST /api/auth/register`
+
+```json
+// Request
+{ "email": "...", "password": "min8chars", "username": "optional" }
+
+// Response 200
+{ "token": "1|abcdef...", "user": { ... } }
+```
+
+Username auto-generated if omitted (pattern: `adjective-noun-number`). Token created with name `mobile`.
+
+### Validate Token — `POST /api/validate-token`
+
+Returns `{ "message": "valid" }` on 200. Returns 401 if token is invalid/expired.
+
+---
+
+## User Profile
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/user/profile/index` | `auth_reducer.js` → `fetchUser` | **Active** (migrated from `GET /api/user`) |
+| GET | `/api/user` | — | **Deprecated** — expensive position table scan |
+| GET | `/api/user/profile/{id}` | Phase 4 | Public profiles |
+| GET | `/api/user/profile/map` | Phase 4 | User map GeoJSON |
+
+### Profile Index — `GET /api/user/profile/index`
+
+Single call returns everything the profile screen needs. Stats come from Redis with MySQL fallback (fast).
+
+```json
+{
+ "user": {
+ "id": 1, "name": "...", "username": "...", "email": "...",
+ "avatar": null, "global_flag": "ie", "member_since": "January 2020",
+ "picked_up": true,
+ "public_profile": true, "show_name": true, "show_username": true,
+ "show_name_maps": true, "show_username_maps": true,
+ "previous_tags": true, "emailsub": true
+ },
+ "stats": {
+ "uploads": 100, "litter": 450, "xp": 5000,
+ "streak": 7, "littercoin": 250,
+ "photo_percent": 0.5, "tag_percent": 0.8
+ },
+ "level": {
+ "level": 3, "title": "Litter Wizard",
+ "xp": 5000, "xp_into_level": 0, "xp_for_next": 5000,
+ "xp_remaining": 0, "progress_percent": 100
+ },
+ "rank": {
+ "global_position": 42, "global_total": 500, "percentile": 91.6
+ },
+ "global_stats": {
+ "total_photos": 20000, "total_litter": 56000
+ },
+ "achievements": { "unlocked": 15, "total": 30 },
+ "locations": { "countries": 5, "states": 12, "cities": 45 },
+ "team": { "id": 5, "name": "Team A" }
+}
+```
+
+`team` is `null` if no active team. `picked_up` is the user's default preference for new photos (`true` = litter was picked up).
+
+**State mapping:** The `fetchUser.fulfilled` handler in `auth_reducer.js` flattens the nested response into the state model screens expect:
+
+| API Response | State Field |
+|---|---|
+| `user.*` | Spread directly (includes settings, privacy flags) |
+| `stats.xp` | `user.xp_redis` |
+| `stats.uploads` | `user.total_images` |
+| `stats.litter` | `user.totalTags` |
+| `stats.littercoin` | `user.totalLittercoin` |
+| `stats.streak` | `user.streak` |
+| `rank.global_position` | `user.position` |
+| `rank.percentile` | `user.percentile` |
+| `level.level` | `user.level` |
+| `level.title` | `user.levelTitle` |
+| `level.progress_percent` | `user.targetPercentage` |
+| `level.xp_remaining` | `user.xpRequired` |
+| `team.id` | `user.active_team` |
+| `team` | `user.team` |
+| `achievements` | `user.achievements` |
+| `locations` | `user.locations` |
+
+### Public Profile — `GET /api/user/profile/{id}` (Phase 4)
+
+No auth required. Returns another user's public profile.
+
+```json
+// Public profile (public_profile = true)
+{
+ "public": true,
+ "user": {
+ "id": 1,
+ "name": "John Doe",
+ "username": "@johndoe",
+ "avatar": "https://...",
+ "global_flag": "ie",
+ "member_since": "January 2020"
+ },
+ "stats": { "uploads": 150, "litter": 412, "xp": 5200 },
+ "level": {
+ "level": 3, "title": "Litter Wizard",
+ "xp": 5200, "xp_into_level": 200, "xp_for_next": 5000,
+ "xp_remaining": 4800, "progress_percent": 4.0
+ },
+ "rank": { "global_position": 42, "global_total": 2850, "percentile": 98.5 },
+ "achievements": { "unlocked": 8, "total": 24 },
+ "locations": { "countries": 12, "states": 18, "cities": 45 }
+}
+
+// Private profile (public_profile = false)
+{ "public": false }
+```
+
+- `name`/`username` respect privacy settings — `null` if `show_name`/`show_username` is false
+- 404 if user not found
+
+### Profile Map — `GET /api/user/profile/map` (Phase 4)
+
+Auth required. Returns GeoJSON for the authenticated user's photos.
+
+**Important:** Coordinates are `[lat, lon]` — NOT the standard GeoJSON `[lon, lat]`. The mobile app must swap these when rendering on a map.
+
+---
+
+## Photo Upload
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| POST | `/api/v3/upload` | `images_reducer.js` → `uploadImage` | **Active** |
+| POST | `/api/photos/upload/with-or-without-tags` | — | **Removed** |
+
+### Upload — `POST /api/v3/upload`
+
+```
+Content-Type: multipart/form-data
+
+photo: (required)
+lat: 51.925 (optional — triggers mobile mode when all 3 present)
+lon: -7.872 (optional)
+date: 1770561192 (optional — unix timestamp or ISO string)
+picked_up: true|false (optional — defaults to user's global preference)
+model: "iPhone" (optional — defaults to EXIF Model or "Unknown")
+```
+
+**Mobile mode**: When `lat`, `lon`, and `date` are all present, EXIF GPS/datetime validation is skipped and `platform` is set to `"mobile"`. The mobile app always sends all three.
+
+**Web mode**: When any of lat/lon/date are missing, GPS and datetime are extracted from EXIF. `platform` is set to `"web"`.
+
+Response: `{ "success": true, "photo_id": 515917 }`
+
+Errors: `"photo-already-uploaded"`, `"invalid-coordinates"` (rejects 0,0)
+
+---
+
+## Tagging
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| POST | `/api/v3/tags` | `images_reducer.js` → `postTagsToPhoto` | Active |
+| PUT | `/api/v3/tags` | `images_reducer.js` → `editTagsOnPhoto` | Active — **full replace** (not merge) |
+
+### Post Tags — `POST /api/v3/tags`
+
+```json
+// Request (v5 CLO format — preferred)
+{
+ "photo_id": 515917,
+ "tags": [
+ {
+ "category_litter_object_id": 42,
+ "litter_object_type_id": 1,
+ "quantity": 2,
+ "picked_up": true,
+ "materials": [10, 11],
+ "brands": [{ "id": 1, "quantity": 1 }],
+ "custom_tags": ["found on bench"]
+ }
+ ]
+}
+
+// Request (legacy v4 format — still accepted)
+{
+ "photo_id": 515917,
+ "tags": [
+ {
+ "category": "smoking",
+ "object": "butts",
+ "quantity": 3,
+ "picked_up": true,
+ "materials": [10, 11],
+ "brands": [{ "id": 1, "quantity": 1 }],
+ "custom_tags": ["found near café"]
+ }
+ ]
+}
+
+// Response 200
+{
+ "success": true,
+ "photoTags": [
+ {
+ "id": 312673,
+ "photo_id": 515917,
+ "category_litter_object_id": 42,
+ "category_id": 2,
+ "litter_object_id": 12,
+ "litter_object_type_id": 1,
+ "quantity": 2,
+ "picked_up": true,
+ "created_at": "2026-03-01T12:34:56.000000Z",
+ "updated_at": "2026-03-01T12:34:56.000000Z"
+ }
+ ]
+}
+```
+
+**Validation rules:**
+- `photo_id` — required, integer, must exist in photos table (not soft-deleted)
+- `tags` — required, array, min 1 item
+- `tags.*.category_litter_object_id` — integer, exists in `category_litter_object` table
+- `tags.*.litter_object_type_id` — nullable integer, exists in `litter_object_types` table
+- `tags.*.quantity` — integer, min 1 (defaults to 1)
+- `tags.*.picked_up` — nullable boolean
+- `tags.*.materials` — array of material IDs
+- `tags.*.brands` — array of `{ id, quantity }` objects
+- `tags.*.custom_tags` — array of strings
+
+**Gates:** 403 if not owned, 403 if already verified (`verified >= 1`).
+
+**Side effects:** Generates photo summary, calculates XP, fires `TagsVerifiedByAdmin` for leaderboard credit.
+
+### Replace Tags — `PUT /api/v3/tags` (Phase 3)
+
+Same request/response format as POST. Key differences:
+
+- **Full replace, not merge** — deletes ALL existing tags first, resets XP/verification, then adds new tags
+- **No verification gate** — allows re-tagging photos in any state (POST rejects verified photos)
+- Wrapped in `DB::transaction()` — delete+reset+add is atomic
+- The mobile app must send the **complete** set of tags, not just changes
+
+### How to Build the Tag Search Index
+
+Use `GET /api/tags/all` to fetch 7 flat arrays, then join client-side:
+
+```json
+{
+ "categories": [{ "id": 1, "key": "smoking" }, ...],
+ "objects": [{ "id": 5, "key": "cigarette_butt", "categories": [{ "id": 1, "key": "smoking" }] }, ...],
+ "materials": [{ "id": 10, "key": "plastic" }, ...],
+ "brands": [{ "id": 1, "key": "coca_cola" }, ...],
+ "types": [{ "id": 1, "key": "wine", "name": "Wine" }, ...],
+ "category_objects": [{ "id": 42, "category_id": 2, "litter_object_id": 12 }, ...],
+ "category_object_types": [{ "category_litter_object_id": 42, "litter_object_type_id": 1 }, ...]
+}
+```
+
+**To tag a "wine bottle":**
+1. Search `objects` for "bottle" → `{ id: 12, key: "bottle" }`
+2. Find `category_objects` where `litter_object_id = 12` → `[{ id: 42, category_id: 2 }, ...]`
+3. Pick the relevant category (alcohol = id 2) → `category_litter_object_id = 42`
+4. Check `category_object_types` for `(42, type_id)` → type 1 = wine
+5. Submit: `{ category_litter_object_id: 42, litter_object_type_id: 1, quantity: 1 }`
+
+**Notes:**
+- `category_object_types` has no `id` column — use composite key `(category_litter_object_id, litter_object_type_id)`
+- Not all objects have types — `litter_object_type_id` is nullable
+- Cache `GET /api/tags/all` locally for 7 days
+
+### XP Calculation
+
+After tagging, `photo.xp` is auto-calculated:
+- Base upload: **+5 XP**
+- Per litter object: **+1 XP** (special: `dumping_small` +10, `dumping_medium` +25, `dumping_large` +50, `bags_litter` +10)
+- Per brand: **+3 XP**
+- Per material: **+2 XP**
+- Per custom tag: **+1 XP**
+
+---
+
+## Photo Queue (Untagged)
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/v3/user/photos?tagged=false` | `images_reducer.js` → `getUntaggedImages` | **Active** |
+| GET | `/api/v2/photos/get-untagged-uploads` | — | **Removed** |
+
+### Untagged Photos — `GET /api/v3/user/photos?tagged=false&per_page=100`
+
+Uses the same user photos endpoint with `tagged=false` filter. Returns full photo objects (same shape as upload history).
+
+```json
+// Response 200
+{
+ "photos": [{
+ "id": 123,
+ "filename": "https://s3.../photo.jpg",
+ "datetime": "2026-01-15T10:30:00Z",
+ "lat": 40.7128, "lon": -74.0060,
+ "model": "iPhone 12",
+ "picked_up": false,
+ "platform": "web",
+ "new_tags": [],
+ "summary": null,
+ "xp": 0,
+ "total_tags": 0
+ }],
+ "pagination": {
+ "current_page": 1,
+ "last_page": 1,
+ "per_page": 100,
+ "total": 42
+ }
+}
+```
+
+- `filename` = full S3 URL, use directly as image source
+- `picked_up`: `true` = picked up, `false` = not picked up (always boolean at photo level; nullable at tag level in `new_tags[].picked_up`)
+- `remaining`: **deprecated** — inverse of `picked_up`, will be removed. Use `picked_up` only.
+- `summary`: `null` = untagged, array of strings = tagged
+- `new_tags`: empty array = untagged, populated = already tagged (use PUT to replace)
+- `platform`: `"web"` or `"mobile"` — origin of the upload
+- `xp`: earned XP for this photo
+
+---
+
+## Photo Deletion
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| POST | `/api/profile/photos/delete` | `my_uploads_reducer.js` → `deleteUploadPhoto` | **Active** |
+
+### Delete Photo — `POST /api/profile/photos/delete`
+
+```json
+// Request
+{ "photoid": 123 }
+
+// Response 200
+{ "message": "Photo deleted successfully!" }
+```
+
+Note: the param is `photoid` (no underscore). Reverses metrics (XP, total_images decremented), removes S3 files, soft-deletes. 403 if not owned. Used from both HomeScreen (uploaded image deletion) and MyUploads (swipe-to-delete).
+
+---
+
+## Upload History
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/v3/user/photos` | `my_uploads_reducer.js` → `fetchUploads` | **Active** (migrated from `/history/paginated`) |
+| GET | `/api/v3/user/photos/stats` | Phase 4 | Upload statistics |
+
+### User Photos — `GET /api/v3/user/photos`
+
+Auth required (Sanctum). Paginated (8 per page), ordered by `created_at` DESC.
+
+**Query params (all optional):**
+
+| Param | Type | Description |
+|-------|------|-------------|
+| `page` | int | Page number (default 1) |
+| `tagged` | bool | `true` = has summary (tagged), `false` = no summary (untagged) |
+| `tag` | string | Filter by litter object key (LIKE search) |
+| `custom_tag` | string | Filter by custom tag key (LIKE search) |
+| `date_from` | string | Start date (ISO) |
+| `date_to` | string | End date (ISO) |
+
+```json
+// Response 200
+{
+ "photos": [{
+ "id": 123,
+ "filename": "https://...",
+ "datetime": "2020-01-15T10:30:00Z",
+ "lat": 40.7128, "lon": -74.0060,
+ "model": "iPhone 12",
+ "remaining": true,
+ "team": { "id": 5, "name": "Team A" },
+ "new_tags": [{
+ "id": 1,
+ "category_litter_object_id": 42,
+ "litter_object_type_id": 1,
+ "quantity": 3,
+ "picked_up": true,
+ "category": { "id": 1, "key": "smoking" },
+ "object": { "id": 2, "key": "cigarette" },
+ "extra_tags": []
+ }],
+ "summary": ["cigarette"],
+ "xp": 12,
+ "total_tags": 1
+ }],
+ "pagination": {
+ "current_page": 1,
+ "last_page": 5,
+ "per_page": 8,
+ "total": 40
+ },
+ "user": { "id": 1, "name": "...", "email": "..." }
+}
+```
+
+Tags are under `new_tags` (v5 format with nested category/object/extra_tags). The UI renders `new_tags` directly via `TagChips` component.
+
+### Upload Stats — `GET /api/v3/user/photos/stats` (Phase 4)
+
+Auth required.
+
+```json
+{
+ "totalPhotos": 150,
+ "totalTags": 412,
+ "leftToTag": 23,
+ "taggedPercentage": 85
+}
+```
+
+- `taggedPercentage` is an integer 0-100
+- `leftToTag` = photos with `summary IS NULL` (not yet tagged)
+
+---
+
+## Global Stats
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/global/stats-data` | `stats_reducer.js` → `getStats` | Active |
+
+Public, no auth. Returns: `total_tags`, `total_images`, `total_users`, `new_users_today`, `new_users_last_7_days`, `new_users_last_30_days`.
+
+---
+
+## Leaderboard
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/leaderboard` | `leaderboards_reducer.js` → `getLeaderboardData` | Active |
+
+Public, no auth required. Authenticated users also receive `currentUserRank`; unauthenticated receive `null`.
+
+### Query Parameters
+
+| Param | Type | Values | Default |
+|-------|------|--------|---------|
+| `timeFilter` | string | `all-time`, `today`, `yesterday`, `this-month`, `last-month`, `this-year`, `last-year` | `all-time` |
+| `locationType` | string | `global`, `country`, `state`, `city` | `global` |
+| `locationId` | int | ID of the location | — |
+| `page` | int | Page number (100 per page) | `1` |
+
+**Important:** `locationType` and `locationId` must BOTH be provided together. Sending one without the other returns an error.
+
+```json
+// Response 200
+{
+ "success": true,
+ "users": [
+ {
+ "user_id": 42,
+ "public_profile": true,
+ "name": "Sean",
+ "username": "@seanlynch",
+ "xp": 1234,
+ "global_flag": "ie",
+ "social": { "twitter": "https://twitter.com/..." },
+ "team": "CleanCoast",
+ "rank": 1
+ }
+ ],
+ "hasNextPage": false,
+ "total": 150,
+ "activeUsers": 450,
+ "totalUsers": 1000,
+ "currentUserRank": 42
+}
+
+// Error response
+{ "success": false, "msg": "Both locationType and locationId required" }
+```
+
+**Field notes:**
+- `xp` — integer (format client-side with `toLocaleString()`)
+- `name`/`username` — empty string `""` if user hides them via privacy settings
+- `username` has `@` prefix added by the backend
+- `team` — empty string `""` if no active team
+- `social` — JSON object or `null`
+- Zero-XP users are excluded from results
+- Tied XP users ordered by `user_id` ascending (deterministic)
+
+---
+
+## Levels
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/levels` | `screens/profile/helpers/xpLevels.js` | Active |
+
+Returns XP thresholds for level display. Cached locally for 7 days.
+
+---
+
+## Locations
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/locations/country` | `locations_reducer.js` → `fetchCountries` | Active |
+| GET | `/api/locations/{type}/{id}` | `locations_reducer.js` → `fetchLocationChildren` | Active |
+
+Public, no auth. Types: `country`, `state`, `city`.
+
+---
+
+## Settings
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| POST | `/api/settings/update` | `settings_reducer.js` → `saveSettings` | **Preferred** — unified key/value endpoint |
+| POST | `/api/settings/privacy/{endpoint}` | `settings_reducer.js` → `toggleSettingsSwitch` | Active — individual toggles |
+| PATCH | `/api/settings` | `settings_reducer.js` → `saveSocialAccounts` | Active — social links only |
+| PATCH | `/api/settings/details/password` | `settings_reducer.js` → `changePassword` | Active — password changes |
+| POST | `/api/settings/delete-account` | `settings_reducer.js` → `deleteAccount` | Active |
+
+### Update Setting — `POST /api/settings/update`
+
+```json
+// Request
+{ "key": "username", "value": "new_value" }
+
+// Response 200
+{ "success": true }
+
+// Response 422 (validation error)
+{ "success": false, "msg": "This email is already taken." }
+```
+
+**Allowed keys and validation:**
+
+| Key | Type | Validation | Notes |
+|-----|------|-----------|-------|
+| `name` | string | min:3, max:25 | |
+| `username` | string | min:3, max:30, alphanumeric + hyphen, unique | Flags for admin review |
+| `email` | string | valid email, max:75, unique | |
+| `global_flag` | string | nullable, max:10 | Country shortcode |
+| `picked_up` | boolean | true/false | User's default "picked up" preference |
+| `previous_tags` | boolean | true/false | Show previous tags on next photo |
+| `emailsub` | boolean | true/false | Email subscription |
+| `public_profile` | boolean | true/false | Enable public profile page |
+
+Legacy key `items_remaining` is still accepted — remaps to `picked_up` with inverted value. New code should use `picked_up` directly.
+
+### Privacy Toggles — `POST /api/settings/privacy/{endpoint}`
+
+Each endpoint toggles the boolean and returns the new value.
+
+| Endpoint | Setting | Response |
+|----------|---------|----------|
+| `maps/name` | `show_name_maps` | `{ "show_name_maps": false }` |
+| `maps/username` | `show_username_maps` | `{ "show_username_maps": false }` |
+| `leaderboard/name` | `show_name` | `{ "show_name": false }` |
+| `leaderboard/username` | `show_username` | `{ "show_username": false }` |
+| `createdby/name` | `show_name_createdby` | `{ "show_name_createdby": false }` |
+| `createdby/username` | `show_username_createdby` | `{ "show_username_createdby": false }` |
+| `toggle-previous-tags` | `previous_tags` | `{ "previous_tags": true }` |
+
+### Social Links — `PATCH /api/settings`
+
+```json
+// Request
+{
+ "social_twitter": "https://twitter.com/user",
+ "social_instagram": "https://instagram.com/user"
+}
+
+// Response 200
+{ "message": "success" }
+```
+
+All social fields must be valid URLs. Allowed: `social_twitter`, `social_facebook`, `social_instagram`, `social_linkedin`, `social_reddit`, `social_personal`.
+
+### Password Change — `PATCH /api/settings/details/password`
+
+```json
+// Request
+{
+ "oldpassword": "current_password",
+ "password": "new_password",
+ "password_confirmation": "new_password"
+}
+
+// Response 200
+{ "message": "success" } // or { "message": "fail" } if old password wrong
+```
+
+Min 5 chars for new password. No 4xx on wrong old password — always 200 with `"fail"`.
+
+### Delete Account — `POST /api/settings/delete-account`
+
+```json
+// Request
+{ "password": "current_password" }
+
+// Response 200
+{ "success": true }
+```
+
+Deletes user data, revokes tokens, cleans up Redis. Irreversible.
+
+### Deprecated Settings Endpoints (DO NOT USE)
+
+These `UsersController` endpoints have a latent web-guard conflict and are deprecated:
+
+| Route | Use Instead |
+|-------|-------------|
+| `POST /api/settings/details` | `POST /api/settings/update` with individual key/value |
+| `POST /api/settings/privacy/update` | Individual `POST /api/settings/privacy/{endpoint}` toggles |
+| `POST /api/settings/toggle` | `POST /api/settings/update` with `key: "picked_up"` |
+
+---
+
+## Teams
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| POST | `/api/teams/create` | `team_reducer.js` → `createTeam` | Active |
+| POST | `/api/teams/join` | `team_reducer.js` → `joinTeam` | Active |
+| POST | `/api/teams/leave` | `team_reducer.js` → `leaveTeam` | Active |
+| POST | `/api/teams/active` | `team_reducer.js` → `changeActiveTeam` | Active |
+| POST | `/api/teams/inactivate` | `team_reducer.js` → `inactivateTeam` | Active |
+| GET | `/api/teams/list` | `team_reducer.js` → `getUserTeams` | Active |
+| GET | `/api/teams/members` | `team_reducer.js` → `getTeamMembers` | Active |
+| GET | `/api/teams/leaderboard` | `team_reducer.js` → `getTopTeams` | Active |
+
+---
+
+## Utility
+
+| Method | Route | Mobile File | Status |
+|--------|-------|-------------|--------|
+| GET | `/api/mobile-app-version` | `shared_reducer.js` → `checkAppVersion` | Active |
+
+---
+
+## Backend Changes Log
+
+### 2026-03-01
+
+1. **Leaderboard XP is now an integer** — `xp` field was `"1,234"` (string), now `1234` (int). Format client-side.
+2. **`items_remaining` renamed to `picked_up`** — `picked_up = true` means "litter was picked up". Settings endpoint still accepts legacy `items_remaining` key (remapped + inverted).
+3. **`GET /api/history/paginated` now requires auth** — moot since mobile already migrated.
+4. **UsersController middleware fixed** — removed constructor `middleware('auth')` that conflicted with Sanctum tokens. All routes now use `auth:sanctum` consistently.
+5. **UsersController endpoints deprecated** — `details`, `togglePrivacy`, `togglePresence` marked deprecated with pointers to `ApiSettingsController` equivalents.
+6. **XP key fixes** — special XP objects (`dumping_small/medium/large`, `bags_litter`) now correctly apply bonus XP.
+7. **CSRF fix** — removed `'web'` from v3 route group middleware.
+8. **Untagged queue fix** — `GET /api/v2/photos/get-untagged-uploads` now uses `whereNull('summary')` instead of `WHERE verified = 0`. Tagged photos no longer appear in the untagged queue (was caused by untrusted users keeping `verified=0` after tagging). The `?platform=web|mobile` filter and `platform` response field have been removed — all untagged photos appear in one queue.
+9. **Tagged/untagged filter fix** — `GET /api/v3/user/photos?tagged=true|false` and `GET /api/v3/user/photos/stats` `leftToTag` now use summary null check instead of verification status.
+
+---
+
+## Migration Roadmap
+
+### Phase 1: Fix What's Broken (Done)
+- [x] CSRF fixed on `POST /api/v3/tags`
+- [x] Replace `GET /api/user` with `GET /api/user/profile/index` in `fetchUser`
+- [x] Update `auth_reducer.js` to destructure new nested response shape
+- [x] Migrate `fetchUploads` from unguarded `/history/paginated` to `GET /api/v3/user/photos`
+- [x] Removed `deleteWebImage` — all deletion uses `deleteUploadPhoto`
+- [x] Removed `uploadTagsToWebImage` (v4) — all tagging uses `postTagsToPhoto` (v5)
+- [x] Switched register to `POST /api/auth/register`
+- [x] Removed `tagsToResultString` conversion — v5 `new_tags` is the only format
+- [x] Removed legacy cache cleanup (`tags_cache`, `tags_cache_v2`)
+- [x] Built tag search index from `GET /api/tags/all` (join 7 arrays into `entriesByCloId`)
+- [x] Implemented tag editing via `PUT /api/v3/tags` (`editTagsOnPhoto`)
+- [x] Added materials, brands, custom tags to tagging UI (TagDetailSheet)
+- [x] Upload payload sends per-tag materials, brands, custom_tags
+- [x] Upload history stats via `GET /api/v3/user/photos/stats`
+- [x] Delete photos via `POST /api/profile/photos/delete`
+
+### Deprecated Endpoints Removed
+These legacy endpoints are no longer called by the mobile app:
+- `POST /api/register` → use `POST /api/auth/register`
+- `POST /api/v2/add-tags-to-uploaded-image` → use `POST /api/v3/tags`
+- `DELETE /api/photos/delete` → use `POST /api/profile/photos/delete`
+- `GET /api/user` → use `GET /api/user/profile/index`
+- `GET /api/history/paginated` → use `GET /api/v3/user/photos`
+
+### Next: Enhanced Features
+- [x] Backend: Public profiles (`GET /api/user/profile/{id}`) — verified
+- [x] Backend: Location-scoped leaderboards — verified
+- [x] Backend: Profile map (`GET /api/user/profile/map`) — verified
+- [x] Backend: Upload stats (`GET /api/v3/user/photos/stats`) — verified
+- [ ] Mobile: Public profile screen (navigate from leaderboard when `public_profile=true`)
+- [ ] Mobile: Location-scoped leaderboards (add `locationType` + `locationId` picker)
+- [ ] Mobile: Achievements display (data in profile/index: `achievements.unlocked`, `achievements.total`)
+- [ ] Mobile: User photo map — **coordinates are `[lat, lon]` not `[lon, lat]`**
+- [ ] Mobile: Upload stats in profile (call `GET /api/v3/user/photos/stats`)
diff --git a/readme/BackendTagging.md b/readme/BackendTagging.md
new file mode 100644
index 00000000..4398f1c5
--- /dev/null
+++ b/readme/BackendTagging.md
@@ -0,0 +1,458 @@
+# OpenLitterMap v5 Tagging System
+
+## Overview
+
+OpenLitterMap v5 introduces a flexible, hierarchical tagging system that allows precise classification of litter items. Each photo can have multiple tags organized by categories, objects, and their properties (materials, brands, and custom attributes).
+
+## Core Concepts
+
+### Tag Hierarchy
+
+```
+Photo
+├── PhotoTag (Primary tagged item)
+│ ├── Category (e.g., "smoking", "food", "softdrinks")
+│ ├── LitterObject (e.g., "butts", "wrapper", "bottle")
+│ ├── Quantity (How many of this item)
+│ └── PhotoTagExtraTags (Additional properties)
+│ ├── Materials (e.g., "plastic", "glass", "aluminium")
+│ ├── Brands (e.g., "coca-cola", "marlboro", "mcdonalds")
+│ └── CustomTags (User-defined tags)
+```
+
+### Database Structure
+
+```
+photos
+├── id
+├── user_id
+├── summary (JSON) - Cached tag structure
+├── xp (INT) - Calculated experience points
+├── total_tags (INT) - Total item count
+├── total_brands (INT) - Total brand count
+├── processed_at (TIMESTAMP) - When metrics were processed
+├── processed_fp (VARCHAR) - Fingerprint for idempotency
+├── processed_tags (TEXT) - Cached tags for metrics
+├── processed_xp (INT UNSIGNED) - XP value at last metrics processing
+└── migrated_at (TIMESTAMP) - v5 migration timestamp
+
+photo_tags
+├── id
+├── photo_id
+├── category_id
+├── litter_object_id
+├── custom_tag_primary_id (for custom-only tags)
+├── quantity
+└── picked_up (BOOLEAN)
+
+photo_tag_extra_tags
+├── photo_tag_id
+├── tag_type (material|brand|custom_tag)
+├── tag_type_id
+├── quantity
+└── index
+```
+
+## Photo Summary Structure
+
+Each photo maintains a `summary` JSON field with this structure:
+
+```json
+{
+ "tags": {
+ "2": {
+ "15": {
+ "quantity": 5,
+ "materials": {
+ "3": 5,
+ "7": 5
+ },
+ "brands": {
+ "12": 3,
+ "18": 2
+ },
+ "custom_tags": {}
+ }
+ }
+ },
+ "totals": {
+ "total_tags": 10,
+ "total_objects": 5,
+ "by_category": {
+ "2": 5
+ },
+ "materials": 10,
+ "brands": 5,
+ "custom_tags": 0
+ },
+ "keys": {
+ "categories": {"2": "smoking"},
+ "objects": {"15": "butts"},
+ "materials": {"3": "plastic", "7": "paper"},
+ "brands": {"12": "marlboro", "18": "camel"},
+ "custom_tags": {}
+ }
+}
+```
+
+**Key meanings:**
+- `"2"` = Category ID (smoking)
+- `"15"` = Object ID (butts)
+- `"3"` = Material ID (plastic) with quantity 5
+- `"7"` = Material ID (paper) with quantity 5
+- `"12"` = Brand ID (marlboro) with quantity 3
+- `"18"` = Brand ID (camel) with quantity 2
+
+## XP (Experience Points) System
+
+XP rewards users for tagging litter:
+
+| Action | XP Value |
+|------------------|-------------|
+| Upload | 5 |
+| Standard Object | 1 per item |
+| Material | 2 per item |
+| Brand | 3 per item |
+| Custom Tag | 1 per item |
+| Picked Up | +5 bonus |
+| Special Objects: | |
+| - Small item | 10 per item |
+| - Medium item | 25 per item |
+| - Large item | 50 per item |
+| - Bags of Litter | 10 per item |
+
+### XP Calculation Details
+
+`AddTagsToPhotoAction::calculateXp()` uses `XpScore` enum multipliers:
+
+- **Upload base:** always 5 XP per photo
+- **Object:** `quantity × objectXp` (default 1; special objects override: small=10, medium=25, large=50, bagsLitter=10)
+- **Brand extra tags:** `brand.quantity × 3` (brands have their own independent quantity)
+- **Material extra tags:** `parentTag.quantity × 2` (materials use parent tag's quantity — set membership)
+- **Custom tag extra tags:** `parentTag.quantity × 1` (same as materials — set membership)
+
+### XP Calculation Example
+
+```
+Photo with:
+- 3 cigarette butts (qty=3)
+- 2 materials (plastic, paper)
+- 1 brand (marlboro, brandQty=2)
+- 1 custom tag
+
+XP = 5 (upload base)
+ + 3 × 1 (3 objects at 1 XP each)
+ + 2 × (3 × 2) (2 materials × parentQty × materialXP)
+ + 2 × 3 (brand: brandQty × brandXP)
+ + 3 × 1 (custom tag: parentQty × customXP)
+ = 5 + 3 + 12 + 6 + 3 = 29 XP
+```
+
+## Brand-Object Relationships
+
+### NOTE: Brands are deferred — doing them later.
+
+### Discovery Process
+```bash
+# Step 1: Discover 1-to-1 relationships
+php artisan olm:define-brand-relationships
+
+# Step 2: Create relationships for remaining brands (≥10% threshold)
+php artisan olm:auto-create-brand-relationships --apply
+```
+
+### How Brands Attach During Migration
+1. **Pivot lookup**: Check taggables table for existing relationships
+2. **Quantity matching**: Match brands to objects with same quantity
+3. **Fallback**: Unmatched brands create brands-only PhotoTag
+
+### Database Structure
+```
+taggables
+├── category_litter_object_id // Links to pivot table
+├── taggable_type // 'App\Models\Litter\Tags\BrandList'
+├── taggable_id // Brand ID from brandslist
+└── quantity // Occurrence count
+```
+
+```
+brandslist table:
+├── id // Primary key
+├── key // Brand key/slug (e.g., "coca-cola", "marlboro")
+├── crowdsourced // Boolean
+└── is_custom // Boolean
+```
+
+## Tag Migration from v4 to v5
+
+### Old Format (v4)
+```php
+[
+ 'smoking' => [
+ 'butts' => 5,
+ 'cigaretteBox' => 1
+ ],
+ 'brands' => [
+ 'marlboro' => 3,
+ 'camel' => 2
+ ]
+]
+```
+
+### New Format (v5)
+```php
+PhotoTag::create([
+ 'photo_id' => $photo->id,
+ 'category_id' => 2, // smoking
+ 'litter_object_id' => 15, // butts
+ 'quantity' => 5,
+ 'picked_up' => true
+]);
+
+// Attach brands as extra tags
+$photoTag->attachExtraTags([
+ ['id' => 12, 'quantity' => 3], // marlboro
+ ['id' => 18, 'quantity' => 2], // camel
+], 'brand', 0);
+```
+
+## Special Cases
+
+### 1. Brands-Only Photos
+When a photo only has brands without specific objects:
+
+```php
+PhotoTag::create([
+ 'photo_id' => $photo->id,
+ 'category_id' => $brandsCategoryId,
+ 'quantity' => $totalBrandQuantity,
+ 'picked_up' => !$photo->remaining
+]);
+```
+
+### 2. Custom Tags Only
+For photos with only custom tags:
+
+```php
+PhotoTag::create([
+ 'photo_id' => $photo->id,
+ 'custom_tag_primary_id' => $customTag->id,
+ 'quantity' => $quantity,
+ 'picked_up' => !$photo->remaining
+]);
+```
+
+### 3. Deprecated Tag Mapping
+Old tags are automatically mapped to new equivalents:
+
+| Old Tag | New Object | Materials Added |
+|------------------------|----------------|-----------------|
+| `beerBottle` | `beer_bottle` | `[glass]` |
+| `beerCan` | `beer_can` | `[aluminium]` |
+| `coffeeCups` | `cup` | `[paper]` |
+| `plasticFoodPackaging` | `packaging` | `[plastic]` |
+| `waterBottle` | `water_bottle` | `[plastic]` |
+
+**Note**: Materials are automatically added based on the deprecated tag mappings. For example, `beerBottle` automatically adds `glass` material to the object.
+
+Full mapping in `ClassifyTagsService::normalizeDeprecatedTag()`.
+
+### 4. Unknown Tags
+Unknown tags are automatically created as new objects:
+
+```php
+$created = LitterObject::firstOrCreate(
+ ['key' => 'mystery_item'],
+ ['crowdsourced' => true]
+);
+```
+
+### 5. Multiple Brands per Object
+A single object can have multiple brands attached:
+- Example: `butts` object with both `marlboro` and `camel` brands
+- Stored in `photo_tag_extra_tags` with `tag_type='brand'`
+
+### 6. Multiple Objects per Brand
+Brands can validly attach to multiple objects:
+- Example: `mcdonalds` → `cup`, `packaging`, `lid`, `wrapper`
+- Relationships defined in `taggables` table
+
+## Validation Rules
+
+- Quantities must be positive integers
+- Category-Object relationships must be valid
+- Materials/Brands must be attached to objects
+- Custom tags can be standalone or attached
+- XP calculation uses enum-defined values
+- Fingerprinting prevents duplicate processing
+
+## API Response Format
+
+```json
+{
+ "photo_id": 12345,
+ "tags": {
+ "smoking": {
+ "butts": {
+ "quantity": 5,
+ "materials": ["plastic", "paper"],
+ "brands": ["marlboro", "camel"]
+ }
+ }
+ },
+ "metrics": {
+ "total_items": 5,
+ "total_brands": 2,
+ "xp_earned": 30
+ },
+ "location": {
+ "country": "Ireland",
+ "state": "Munster",
+ "city": "Cork"
+ }
+}
+```
+
+## Web Frontend Replace/Edit Tags (PUT /api/v3/tags)
+
+The `/tag?photo=` URL loads a specific photo for editing. If the photo already has tags, AddTags.vue enters **edit mode** and uses `PUT /api/v3/tags` to replace all existing tags.
+
+### Flow
+
+1. **Load photo:** `GET_SINGLE_PHOTO(id)` calls `/api/v3/user/photos?id=X&id_operator==&per_page=1` — filters by authenticated user (ownership enforced server-side)
+2. **Convert existing tags:** `convertExistingTags(photo)` transforms `new_tags` API format back into the frontend's tag format (handles object, brand-only, material-only, custom-only)
+3. **User edits tags** — same UI as normal tagging (search, add, remove, quantity, materials/brands)
+4. **Submit:** `REPLACE_TAGS({ photoId, tags })` calls `PUT /api/v3/tags`
+
+### Backend (`PhotoTagsController::update()`)
+
+```php
+// 1. Delete old tags + extras
+$photo->photoTags()->each(function ($tag) {
+ $tag->extraTags()->delete();
+ $tag->delete();
+});
+
+// 2. Reset summary, XP, verification
+$photo->update(['summary' => null, 'xp' => 0, 'verified' => 0]);
+
+// 3. Re-add tags (generates new summary, XP, fires TagsVerifiedByAdmin)
+$this->addTagsToPhotoAction->run(Auth::id(), $photo->id, $tags);
+```
+
+**MetricsService delta handling:** When `TagsVerifiedByAdmin` fires, `ProcessPhotoMetrics` → `MetricsService::processPhoto()` detects the photo was previously processed (has `processed_at`). It calls `doUpdate()` which calculates deltas between old `processed_tags` and the new summary, then applies positive/negative adjustments to all MySQL + Redis metrics.
+
+### Security
+
+- `ReplacePhotoTagsRequest` checks `$photo->user_id === $this->user()->id` — returns 403 for non-owners
+- `GET_SINGLE_PHOTO` calls `/api/v3/user/photos` which filters by `Auth::user()->id` — cannot load another user's photo
+- Both `PhotoTagsRequest` (POST) and `ReplacePhotoTagsRequest` (PUT) enforce ownership
+
+### Frontend files
+
+| File | Change for edit mode |
+|---|---|
+| `AddTags.vue` | Reads `route.query.photo`, loads specific photo, `isEditMode` ref, `convertExistingTags()`, uses `REPLACE_TAGS` on submit |
+| `TaggingHeader.vue` | `isEditMode` prop — hides Skip/Pagination, shows "Editing" badge, "Update" button |
+| `Uploads.vue` | Navigates to `/tag?photo=` on photo click and "Tag this photo" link |
+| `stores/photos/requests.js` | `GET_SINGLE_PHOTO()`, `REPLACE_TAGS()` actions |
+
+### Test file
+
+`tests/Feature/Tags/ReplacePhotoTagsTest.php` — 5 tests (replace tags, already-tagged photos, ownership, auth, extra tags cleanup)
+
+---
+
+## Web Frontend Tagging (POST /api/v3/tags)
+
+The Vue frontend (`/tag` route → `AddTags.vue`) sends tags via `POST /api/v3/tags` to `PhotoTagsController` → `AddTagsToPhotoAction` (v5). The frontend sends 4 distinct tag types:
+
+### 1. Object tag (with optional materials/brands/custom tags)
+```json
+{
+ "object": { "id": 5, "key": "butts" },
+ "quantity": 3,
+ "picked_up": true,
+ "materials": [{ "id": 2, "key": "plastic" }],
+ "brands": [{ "id": 1, "key": "marlboro" }],
+ "custom_tags": ["dirty-bench"]
+}
+```
+**Backend:** `resolveTag()` looks up object, auto-resolves category from `object->categories()->first()`. Category need NOT be sent.
+
+### 2. Custom-only tag
+```json
+{ "custom": true, "key": "dirty-bench", "quantity": 1, "picked_up": null }
+```
+**Backend:** `$tag['custom']` is boolean true (flag), `$tag['key']` is the actual tag name. Creates `CustomTagNew` record via `$tag['key']`.
+
+### 3. Brand-only tag
+```json
+{ "brand_only": true, "brand": { "id": 1, "key": "coca-cola" }, "quantity": 1, "picked_up": null }
+```
+**Backend:** Creates PhotoTag with `category_id=null`, `litter_object_id=null`, attaches brand as extra tag.
+
+### 4. Material-only tag
+```json
+{ "material_only": true, "material": { "id": 2, "key": "plastic" }, "quantity": 1, "picked_up": null }
+```
+**Backend:** Same pattern as brand-only — PhotoTag with null FKs, material as extra tag.
+
+### Frontend files
+
+| File | Purpose |
+|---|---|
+| `resources/js/views/General/Tagging/v2/AddTags.vue` | Main tagging page — search index, tag selection, submit |
+| `resources/js/views/General/Tagging/v2/components/UnifiedTagSearch.vue` | Debounced tag search combobox with grouped results |
+| `resources/js/views/General/Tagging/v2/components/TagCard.vue` | Tag card with type pills, category display, formatKey |
+| `resources/js/views/General/Tagging/v2/components/ActiveTagsList.vue` | Container for active tags |
+| `resources/js/views/General/Tagging/v2/components/TaggingHeader.vue` | Header: XP bar, level title, pagination, unresolved warning |
+| `resources/js/views/General/Tagging/v2/components/PhotoViewer.vue` | Photo display with zoom |
+| `resources/js/stores/photos/requests.js` | `UPLOAD_TAGS()` → POST, `REPLACE_TAGS()` → PUT, `GET_SINGLE_PHOTO()` |
+| `resources/js/stores/tags/requests.js` | `GET_ALL_TAGS()` → GET /api/tags/all |
+
+### Tag data loading
+`GET /api/tags/all` returns flat arrays: `{ categories, objects, materials, brands, types, category_objects, category_object_types }`. Objects include their categories via eager load: `LitterObject::with(['categories:id,key'])`. `category_object_types` only returns `category_litter_object_id` and `litter_object_type_id` (no `id` column).
+
+### Frontend search index (category disambiguation)
+
+`AddTags.vue` builds a `searchableTags` computed that generates **one entry per (object, category) pair** instead of one per object. This prevents data corruption when the same object exists in multiple categories (e.g., "bottle" exists in alcohol, beverages, and food).
+
+Each entry has:
+- `id`: composite `obj-{objectId}-cat-{categoryId}` for deduplication
+- `cloId`: pre-resolved `category_litter_object_id` from the store's `getCloId(categoryId, objectId)`
+- `categoryId`, `categoryKey`: the specific category for this entry
+- `lowerKey`: precomputed `key.toLowerCase()` for fast search filtering
+
+**Type entries** are also generated from `categoryObjectTypes` with composite id `type-{cloId}-{typeId}`. Type search results show the parent object and category as context.
+
+### Display formatting
+
+`formatKey(key)` converts `snake_case` keys to `Title Case`: `key.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())`. Used in search results, tag cards, detail badges, and recent tags.
+
+Tag cards show `"Bottle · Alcohol"` format (object + category). Type pills replace the old `