diff --git a/.DS_Store b/.DS_Store index 21d951d5f..b6edf605a 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.env.example b/.env.example index eb7cb6a43..16952955d 100644 --- a/.env.example +++ b/.env.example @@ -22,12 +22,15 @@ LOCATE_API_KEY= MIX_GOOGLE_RECAPTCHA_KEY=6LcvHsIZAAAAAOG0q9-1vY3uWqu0iFvUC3tCNhID MIX_GOOGLE_RECAPTCHA_SECRET= -BROADCAST_DRIVER=pusher +BROADCAST_DRIVER=reverb CACHE_DRIVER=file -SESSION_DRIVER=file QUEUE_DRIVER=redis QUEUE_CONNECTION=redis +SESSION_DRIVER=cookie +SESSION_DOMAIN=olm.test +SANCTUM_STATEFUL_DOMAINS=olm.test + MAIL_MAILER=smtp MAIL_HOST=localhost MAIL_PORT=1025 @@ -56,11 +59,6 @@ x500_AWS_REGION=us-east-1 x500_AWS_BUCKET=olm-public-bbox x500_AWS_ENDPOINT=http://192.168.56.4:9600 -PUSHER_APP_ID=local -PUSHER_APP_KEY=local -PUSHER_APP_SECRET=local -PUSHER_APP_CLUSTER=eu - WEBSOCKET_BROADCAST_HOST=192.168.10.10 LOCATION_API_KEY= @@ -70,6 +68,13 @@ BACKUP_ARCHIVE_PASSWORD= DROPBOX_TOKEN= SLACK_WEBHOOK_URL= +REVERB_APP_ID=1 +REVERB_APP_KEY=2 +REVERB_APP_SECRET=3 +REVERB_HOST=olm.test +REVERB_PORT=8080 +REVERB_SCHEME=https + OPTIMIZE="true" NETWORK=preprod NETWORK_PARAMS_FILE="preprod.json" diff --git a/.env.testing b/.env.testing index 2adf1aeef..7d8455a68 100644 --- a/.env.testing +++ b/.env.testing @@ -1,6 +1,6 @@ APP_NAME=OpenLitterMap APP_ENV=testing -APP_KEY=base64:wtfMWBVJMehE9KRxZqwTmY+G0vPoCoPOwtloNZmueLM= +APP_KEY=base64:WCUtPA8Ky7rrK2cckMwmSo5E58UuQk8wKUud7SqjAgk= APP_DEBUG=true APP_URL=http://olm.test APP_ROOT_DIR=/home/vagrant/Code/olm @@ -10,8 +10,8 @@ LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 -DB_DATABASE=olm -DB_USERNAME=homestead +DB_DATABASE=olm_test +DB_USERNAME=root DB_PASSWORD=secret # For Testing @@ -20,14 +20,16 @@ DB_FOREIGN_KEYS=false REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 +REDIS_DB=1 +REDIS_CLIENT=phpredis LOCATE_API_KEY= MIX_GOOGLE_RECAPTCHA_KEY= MIX_GOOGLE_RECAPTCHA_SECRET= -BROADCAST_DRIVER=pusher -CACHE_DRIVER=file +BROADCAST_DRIVER=reverb +CACHE_DRIVER=redis SESSION_DRIVER=file QUEUE_DRIVER=redis QUEUE_CONNECTION=redis @@ -54,19 +56,14 @@ AWS_KEY=homestead AWS_SECRET=secretkey AWS_BUCKET=olm-public AWS_REGION=us-east-1 -AWS_ENDPOINT=http://192.168.56.4:9600 +AWS_ENDPOINT=http://127.0.0.1:9000 +MINIO_PATH_STYLE_ENDPOINT=true x500_AWS_KEY=homestead x500_AWS_SECRET=secretkey x500_AWS_REGION=us-east-1 x500_AWS_BUCKET=olm-public-bbox -x500_AWS_ENDPOINT=http://192.168.56.4:9600 - -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_APP_CLUSTER=eu -LARAVEL_WEBSOCKETS_PORT=6002 +x500_AWS_ENDPOINT=http://127.0.0.1:9000 WEBSOCKET_BROADCAST_HOST=192.168.56.4 diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index bb11239ce..1af4aa0be 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -1,103 +1,122 @@ -name: Laravel +name: Laravel CI on: push: - branches: [ master, staging ] + branches: + - master + - staging + - upgrade/tagging-2025 pull_request: - branches: [ master, staging ] + branches: + - master + - staging + - upgrade/tagging-2025 jobs: - laravel-tests: - + tests: runs-on: ubuntu-latest + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ROOT_PASSWORD: secret + MYSQL_DATABASE: olm_test + ports: [3306:3306] + options: >- + --health-cmd="mysqladmin ping -h 127.0.0.1 -psecret" + --health-interval=10s --health-timeout=5s --health-retries=3 + + redis: + image: redis:7 + ports: [6379:6379] + env: APP_ENV: testing + + # database + DB_CONNECTION: mysql + DB_HOST: 127.0.0.1 + DB_PORT: 3306 DB_DATABASE: olm_test DB_USERNAME: root - DB_PASSWORD: password + DB_PASSWORD: secret + + # misc drivers BROADCAST_DRIVER: log CACHE_DRIVER: array QUEUE_CONNECTION: sync SESSION_DRIVER: array - AWS_KEY: minioadmin - AWS_SECRET: minioadmin - AWS_REGION: us-east-1 + + # fake S3/MinIO (used only by tests) + AWS_ACCESS_KEY_ID: minioadmin + AWS_SECRET_ACCESS_KEY: minioadmin + AWS_DEFAULT_REGION: us-east-1 + AWS_EC2_METADATA_DISABLED: true AWS_BUCKET: olm-public AWS_ENDPOINT: http://127.0.0.1:9000 - x500_AWS_KEY: minioadmin - x500_AWS_SECRET: minioadmin + x500_AWS_ACCESS_KEY_ID: minioadmin + x500_AWS_SECRET_ACCESS_KEY: minioadmin x500_AWS_REGION: us-east-1 x500_AWS_BUCKET: olm-public-bbox x500_AWS_ENDPOINT: http://127.0.0.1:9000 - services: - mysql: - image: mysql:5.7 - env: - MYSQL_ALLOW_EMPTY_PASSWORD: false - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: olm_test - ports: - - 3306/tcp - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 - redis: - image: redis - ports: - - 6379/tcp - options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - extensions: mbstring, dom, fileinfo, mysql - # coverage: xdebug #optional - - uses: actions/checkout@v3 - with: - node-version: 18.20.3 - - uses: actions/setup-node@v3 - with: - node-version: 18.20.3 - - name: Start mysql service - run: sudo service mysql start - - name: Setup minio - run: | - docker run -d -p 9000:9000 --name minio \ - -e "MINIO_ACCESS_KEY=minioadmin" \ - -e "MINIO_SECRET_KEY=minioadmin" \ - -v /tmp/data:/data \ - -v /tmp/config:/root/.minio \ - minio/minio server /data - - export AWS_ACCESS_KEY_ID=minioadmin - export AWS_SECRET_ACCESS_KEY=minioadmin - export AWS_EC2_METADATA_DISABLED=true - - aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://olm-public - aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://olm-public-bbox - - name: Copy .env - run: php -r "file_exists('.env') || copy('.env.example', '.env');" - - name: Install Dependencies - run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - - name: Generate key - run: php artisan key:generate - - name: Install Passport - run: php artisan passport:keys - - name: Clear Config - run: php artisan config:clear - - name: Run Migration - run: php artisan migrate -v - env: - DB_PORT: ${{ job.services.mysql.ports['3306'] }} - REDIS_PORT: ${{ job.services.redis.ports['6379'] }} - - name: Directory Permissions - run: chmod -R 777 storage bootstrap/cache - - name: Install NPM assets - run: npm install --silent --force - - name: Compile NPM assets - run: npm run build --silent - - name: Execute tests (Unit and Feature tests) via PHPUnit - run: vendor/bin/phpunit - env: - DB_PORT: ${{ job.services.mysql.ports['3306'] }} - REDIS_PORT: ${{ job.services.redis.ports['6379'] }} + - name: Checkout code + uses: actions/checkout@v3 + + - name: Copy test fixture image + run: | + mkdir -p storage/framework/testing + cp tests/Unit/img_with_exif.JPG storage/framework/testing/img_with_exif.JPG + + - name: Remove old config cache + run: rm -f bootstrap/cache/config.php + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + extensions: mbstring, dom, fileinfo, mysql, pdo_mysql + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Prepare .env + run: cp .env.testing .env + + - name: Wait for MySQL + run: | + for i in {1..30}; do + nc -z 127.0.0.1 3306 && exit 0 + echo "Waiting for MySQL…" + sleep 2 + done + exit 1 + + - name: Install Composer dependencies + run: composer install --no-interaction --prefer-dist --optimize-autoloader --no-scripts + + - name: Discover packages + run: php artisan package:discover --ansi + + - name: Generate Passport encryption keys + run: php artisan passport:keys --force + + - name: Install Passport (keys + clients) + run: php artisan passport:install --no-interaction + + - name: Run migrations + run: php artisan migrate --force --no-interaction -vvv + + - name: npm ci & build (optional) + run: | + npm ci --silent --force + npm run build --if-present + + - name: PHPUnit + run: vendor/bin/phpunit --colors=always + env: + REDIS_PORT: ${{ job.services.redis.ports[6379] }} diff --git a/.gitignore b/.gitignore index 3503a7b2f..a8296f4a1 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ yarn-error.log .vscode .idea .eslintignore +/storage/seeders/brands.txt diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..dc4ffe3de --- /dev/null +++ b/.prettierrc @@ -0,0 +1,17 @@ +{ + "semi": true, + "singleQuote": true, + "printWidth": 120, + "tabWidth": 4, + "trailingComma": "es5", + "bracketSpacing": true, + "vueIndentScriptAndStyle": false, + "overrides": [ + { + "files": "*.vue", + "options": { + "vueIndentScriptAndStyle": false + } + } + ] +} diff --git a/.styleci.yml b/.styleci.yml index 1db61d96e..d4a18c894 100644 --- a/.styleci.yml +++ b/.styleci.yml @@ -9,5 +9,5 @@ php: js: finder: not-name: - - webpack.mix.js + - webpack.mix.old_js css: true diff --git a/app/Actions/Badges/CheckLocationTypeAward.php b/app/Actions/Badges/CheckLocationTypeAward.php new file mode 100644 index 000000000..bc15c89e6 --- /dev/null +++ b/app/Actions/Badges/CheckLocationTypeAward.php @@ -0,0 +1,89 @@ +userId = $userId; + + $photo = $photoTag->photo; + + if (!$photo->lat || !$photo->lon) { + Log::warning("Photo {$photo->id} has no coordinates."); + return; + } + + [$landUseTypes, $natureTypes] = $this->fetchLandNatureTypesFromOSM($photo->lat, $photo->lon); + + $this->createAwardBadges($landUseTypes, 'landuse'); + $this->createAwardBadges($natureTypes, 'nature'); + } + + protected function fetchLandNatureTypesFromOSM($lat, $lon): array + { + $query = "[out:json];(way(around:50,$lat,$lon)[landuse];way(around:50,$lat,$lon)[natural];);out;"; + + $response = Http::asForm()->post('https://overpass-api.de/api/interpreter', [ + 'data' => $query + ]); + + $elements = $response->json('elements') ?? []; + + $landUseTypes = $this->extractLandUseTypes($elements); + $naturalTypes = $this->extractNaturalTypes($elements); + + return [$landUseTypes, $naturalTypes]; + } + + protected function extractLandUseTypes(array $elements): array + { + $types = []; + + foreach ($elements as $element) { + if (isset($element['tags']['landuse'])) { + $types[] = strtolower(trim($element['tags']['landuse'])); + } + } + + return array_unique($types); + } + + protected function extractNaturalTypes(array $elements): array + { + $types = []; + + foreach ($elements as $element) { + if (isset($element['tags']['natural'])) { + $types[] = strtolower(trim($element['tags']['natural'])); + } + } + + return array_unique($types); + } + + protected function createAwardBadges (array $landUseOrNatureTypes, string $type): void + { + foreach ($landUseOrNatureTypes as $index => $landUseOrNatureType) { + + if ($index === 0) { + $badge = Badge::firstOrCreate(['type' => $type, 'subtype' => $landUseOrNatureType]); + + if ($badge->filename === null) { + dispatch (new GenerateBadgeImage($badge)); + } + + $badge->users()->syncWithoutDetaching($this->userId); + } + } + } +} diff --git a/app/Actions/Badges/RewardBadgeAction.php b/app/Actions/Badges/RewardBadgeAction.php new file mode 100644 index 000000000..62d0fc99a --- /dev/null +++ b/app/Actions/Badges/RewardBadgeAction.php @@ -0,0 +1,10 @@ +client->get($url)->getBody(), - true - ); + return json_decode($this->client->get($url)->getBody(), true); } } diff --git a/app/Actions/Locations/UpdateLeaderboardsForLocationAction.php b/app/Actions/Locations/UpdateLeaderboardsForLocationAction.php index 79e847bb0..b554fc1d2 100644 --- a/app/Actions/Locations/UpdateLeaderboardsForLocationAction.php +++ b/app/Actions/Locations/UpdateLeaderboardsForLocationAction.php @@ -5,6 +5,9 @@ use App\Models\Photo; use Illuminate\Support\Facades\Redis; +/** + * @deprecated + */ class UpdateLeaderboardsForLocationAction { protected UpdateLeaderboardsXpAction $updateXpAction; @@ -17,6 +20,34 @@ public function __construct (UpdateLeaderboardsXpAction $updateXpAction) $this->updateXpAction = $updateXpAction; } + // New OLM.v5 + public function updateLeaderboardsAndRewardXP(int $userId, int $photoId, array $photoTags): void + { + $photo = Photo::find($photoId); + + $xp = $this->calculateXP($photoTags); + + $this->run($photo, $userId, $xp); + } + + protected function calculateXP(array $tags) { + $totalXP = 0; + + foreach ($tags as $tag) { + $totalXP += $tag['quantity']; + + if (isset($tag['extraTags']) && is_array($tag['extraTags'])) { + foreach ($tag['extraTags'] as $extra) { + if (isset($extra['selected']) && $extra['selected']) { + $totalXP++; + } + } + } + } + + return $totalXP; + } + /** * Update the Leaderboards for each Location * @@ -29,7 +60,7 @@ public function __construct (UpdateLeaderboardsXpAction $updateXpAction) public function run ( Photo $photo, int $userId, - int $incrXp + int $incrXp = 1 ) :void { $year = now()->year; diff --git a/app/Actions/Locations/UpdateLeaderboardsXpAction.php b/app/Actions/Locations/UpdateLeaderboardsXpAction.php index 1d49ad38b..dbbc7a946 100644 --- a/app/Actions/Locations/UpdateLeaderboardsXpAction.php +++ b/app/Actions/Locations/UpdateLeaderboardsXpAction.php @@ -4,20 +4,16 @@ use Illuminate\Support\Facades\Redis; +/** + * @deprecated + */ class UpdateLeaderboardsXpAction { - /** - * @param int $userId - * @param int $incrXp - */ - public function run ( - int $userId, - int $incrXp - ) :void + public function run (int $userId, int $incrXp) :void { - $year = now()->year; - $month = now()->month; - $day = now()->day; + $year = now()->format('Y'); + $month = now()->format('m'); + $day = now()->format('d'); // Update the Users total score in the Global Leaderboard $this->addXp("xp.users", $incrXp, $userId); diff --git a/app/Actions/LogAdminVerificationAction.php b/app/Actions/LogAdminVerificationAction.php index 48547deb1..accf4775a 100644 --- a/app/Actions/LogAdminVerificationAction.php +++ b/app/Actions/LogAdminVerificationAction.php @@ -4,7 +4,7 @@ use App\Models\AdminVerificationLog; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; class LogAdminVerificationAction { diff --git a/app/Actions/Photos/AddTagsToPhotoAction.php b/app/Actions/Photos/AddTagsToPhotoAction.php index f9429703b..34e068eb8 100644 --- a/app/Actions/Photos/AddTagsToPhotoAction.php +++ b/app/Actions/Photos/AddTagsToPhotoAction.php @@ -21,6 +21,14 @@ public function run (Photo $photo, $tags): array $litter = 0; $brands = 0; + if (empty($tags)) { + return [ + 'litter' => $litter, + 'brands' => $brands, + 'all' => 0 + ]; + } + foreach ($tags as $category => $items) { $this->createCategory($photo, $category); diff --git a/app/Actions/Photos/DeletePhotoAction.php b/app/Actions/Photos/DeletePhotoAction.php index 1e0b0129b..c4d83efed 100644 --- a/app/Actions/Photos/DeletePhotoAction.php +++ b/app/Actions/Photos/DeletePhotoAction.php @@ -36,11 +36,13 @@ public function run (Photo $photo) */ protected function deletePhoto (string $filename, string $disk) :void { - // Remove storage prefix if found. Only needed for local testing. - $filename = ltrim($filename, '/storage/'); + $baseUrl = Storage::disk($disk)->url(''); + $path = str_starts_with($filename, $baseUrl) + ? str_replace($baseUrl, '', $filename) + : $filename; - if (Storage::disk($disk)->exists($filename)) { - Storage::disk($disk)->delete($filename); + if (Storage::disk($disk)->exists($path)) { + Storage::disk($disk)->delete($path); } } } diff --git a/app/Actions/Photos/GetPreviousCustomTagsAction.php b/app/Actions/Photos/GetPreviousCustomTagsAction.php index 21acb8327..452402350 100644 --- a/app/Actions/Photos/GetPreviousCustomTagsAction.php +++ b/app/Actions/Photos/GetPreviousCustomTagsAction.php @@ -2,7 +2,7 @@ namespace App\Actions\Photos; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Support\Collection; class GetPreviousCustomTagsAction diff --git a/app/Actions/Photos/UploadPhotoAction.php b/app/Actions/Photos/UploadPhotoAction.php index 542f21a6a..d76c162e8 100644 --- a/app/Actions/Photos/UploadPhotoAction.php +++ b/app/Actions/Photos/UploadPhotoAction.php @@ -3,8 +3,8 @@ namespace App\Actions\Photos; use Carbon\Carbon; -use Illuminate\Support\Facades\Storage; use Intervention\Image\Image; +use Illuminate\Support\Facades\Storage; class UploadPhotoAction { diff --git a/app/Actions/Tags/AddTagsToPhotoActionNew.php b/app/Actions/Tags/AddTagsToPhotoActionNew.php new file mode 100644 index 000000000..375f4aaba --- /dev/null +++ b/app/Actions/Tags/AddTagsToPhotoActionNew.php @@ -0,0 +1,222 @@ +updateLeaderboards = $updateLeaderboards; + $this->checkLocationTypeAward = $checkLocationTypeAward; + } + + /** + * @throws \Exception + */ + public function run (int $userId, int $photoId, array $tags): array + { + $photoTags = $this->addTagsToPhoto($userId, $photoId, $tags); + + $this->updateLeaderboards->updateLeaderboardsAndRewardXP($userId, $photoId, $photoTags); + + $this->updateVerification($userId, $photoId); + + return $photoTags; + } + + /** + * @throws \Exception + */ + protected function addTagsToPhoto (int $userId, int $photoId, array $tags): array + { + $photoTags = []; + + foreach ($tags as $tag) + { + [$category, $object, $quantity, $pickedUp] = $this->getTags($tag); + + // Verify that the category and object are associated. + if ($category && $object && !$category->litterObjects->contains($object)) { + // throw new \Exception("Category '{$category->key}' does not contain object '{$object->key}'."); + throw ValidationException::withMessages([ + 'tags' => [[ + 'msg' => 'Category does not contain object', + 'category' => $category->key, + 'object' => $object->key, + ]] + ]); + } + + // The parent-level tag on a PhotoTag can either by Category.id + Object.id + // or custom_tag_primary_id + $photoTag = PhotoTag::firstOrCreate([ + 'photo_id' => $photoId, + 'category_id' => $category?->id, + 'litter_object_id' => $object?->id, + 'quantity' => $quantity, + 'picked_up' => $pickedUp + ]); + + // Check for verified user + if ($object?->key === 'bagsLitter' && $pickedUp) { + $this->checkLocationTypeAward->checkLandUseAward($userId, $photoTag); + } + + // If custom_tag the primary tag + if (isset($tag['custom']) && $tag['custom']) { + $customTagModel = CustomTagNew::firstOrCreate(['key' => $tag['custom']]); + + // if new -> send to admin for approval + if ($customTagModel->wasRecentlyCreated) { + $customTagModel->created_by = $userId; + $customTagModel->save(); + } + + $photoTag->custom_tag_primary_id = $customTagModel->id; + $photoTag->save(); + } + + if (isset($tag['materials']) && is_array($tag['materials']) && count($tag['materials']) > 0) { + foreach ($tag['materials'] as $materialData) { + $materialModel = Materials::find($materialData['id']); + + if (!$materialModel) { + throw new \Exception("Material with ID {$materialData['id']} not found."); + } + + $photoTag->extraTags()->create([ + 'tag_type' => 'material', + 'tag_type_id' => $materialModel->id, + 'quantity' => $materialData['quantity'] ?? 1, + ]); + } + } + + // CustomTags attached to an object + if (isset($tag['custom_tags']) && is_array($tag['custom_tags']) && count($tag['custom_tags'])) { + foreach ($tag['custom_tags'] as $customTagData) { + + // If $customTagData is an array, extract the 'key'; otherwise, use it directly. + $customTagKey = is_array($customTagData) ? ($customTagData['key'] ?? '') : $customTagData; + + // Clean for vulnerabilities + $cleanTag = strip_tags($customTagKey); + $cleanTag = trim($cleanTag); + + // Validate against a whitelist pattern (only letters, numbers, spaces, hyphens, colons, and underscores). + if (!preg_match('/^[\w\s:-]+$/', $cleanTag)) { + throw new \Exception('Invalid custom tag.'); + } + + $customTagModel = CustomTagNew::firstOrCreate(['key' => $cleanTag]); + + // if new -> send to admin for approval + if ($customTagModel->wasRecentlyCreated) { + // $customTagModel->sendForApproval(); + $customTagModel->created_by = $userId; + $customTagModel->save(); + } + + $photoTag->extraTags()->create([ + 'tag_type' => 'custom_tag', + 'tag_type_id' => $customTagModel->id, + 'quantity' => $customTagData['quantity'] ?? 1, + ]); + } + } + + // Brands + if (isset($tag['brands']) && is_array($tag['brands']) && count($tag['brands'])) { + foreach ($tag['brands'] as $brandData) { + $brandModel = BrandList::find($brandData['id']); + + if (!$brandModel) { + throw new \Exception("Brand {$brandData['key']} not found."); + } + + $photoTag->extraTags()->create([ + 'tag_type' => 'brand', + 'tag_type_id' => $brandModel->id, + 'quantity' => $brandData['quantity'] ?? 1, + ]); + } + } + + $photoTags[] = $photoTag; + } + + return $photoTags; + } + + protected function getTags ($tag): array + { + $category = null; + $object = null; + + // Load category by ID or key + if (isset($tag['category'])) { + if (is_array($tag['category']) && isset($tag['category']['id'])) { + $category = Category::find($tag['category']['id']); + } elseif (is_string($tag['category'])) { + $category = Category::where('key', $tag['category'])->first(); + } + } + + // Load object by ID or key + if (isset($tag['object'])) { + if (is_array($tag['object']) && isset($tag['object']['id'])) { + $object = LitterObject::find($tag['object']['id']); + } elseif (is_string($tag['object'])) { + $object = LitterObject::where('key', $tag['object'])->first(); + } + } + + $quantity = $tag['quantity'] ?? 1; + $pickedUp = $tag['picked_up'] ?? null; + + return [$category, $object, $quantity, $pickedUp]; + } + + protected function updateVerification(int $userId, int $photoId): void + { + $user = User::find($userId); + $photo = Photo::find($photoId); + + if ($user->verification_required) + { + // Bring the photo to an initial state of verification + // 0 for testing, 0.1 for production + // This value can be +/- 0.1 when users vote True or False + // When verification reaches 1.0, it verified increases from 0 to 1 + $photo->verification = 0.1; + } + else + { + // the user is trusted. Dispatch event to update OLM. + $photo->verification = 1; + $photo->verified = 2; + event (new TagsVerifiedByAdmin($photo->id)); + } + + $photo->save(); + } +} diff --git a/app/Actions/Teams/CreateTeamAction.php b/app/Actions/Teams/CreateTeamAction.php index 858b9b53f..403d3bf16 100644 --- a/app/Actions/Teams/CreateTeamAction.php +++ b/app/Actions/Teams/CreateTeamAction.php @@ -4,7 +4,7 @@ use App\Events\TeamCreated; use App\Models\Teams\Team; -use App\Models\User\User; +use App\Models\Users\User; class CreateTeamAction { diff --git a/app/Actions/Teams/DownloadTeamDataAction.php b/app/Actions/Teams/DownloadTeamDataAction.php index 53e633616..5c38aa291 100644 --- a/app/Actions/Teams/DownloadTeamDataAction.php +++ b/app/Actions/Teams/DownloadTeamDataAction.php @@ -5,7 +5,7 @@ use App\Exports\CreateCSVExport; use App\Jobs\EmailUserExportCompleted; use App\Models\Teams\Team; -use App\Models\User\User; +use App\Models\Users\User; class DownloadTeamDataAction { diff --git a/app/Actions/Teams/JoinTeamAction.php b/app/Actions/Teams/JoinTeamAction.php index 77faab6a5..a6bd0945a 100644 --- a/app/Actions/Teams/JoinTeamAction.php +++ b/app/Actions/Teams/JoinTeamAction.php @@ -3,7 +3,7 @@ namespace App\Actions\Teams; use App\Models\Teams\Team; -use App\Models\User\User; +use App\Models\Users\User; class JoinTeamAction { diff --git a/app/Actions/Teams/LeaveTeamAction.php b/app/Actions/Teams/LeaveTeamAction.php index 64c3002e1..cd5640767 100644 --- a/app/Actions/Teams/LeaveTeamAction.php +++ b/app/Actions/Teams/LeaveTeamAction.php @@ -3,7 +3,7 @@ namespace App\Actions\Teams; use App\Models\Teams\Team; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Support\Facades\DB; class LeaveTeamAction diff --git a/app/Actions/Teams/SetActiveTeamAction.php b/app/Actions/Teams/SetActiveTeamAction.php index 6aa5e8966..644e07804 100644 --- a/app/Actions/Teams/SetActiveTeamAction.php +++ b/app/Actions/Teams/SetActiveTeamAction.php @@ -2,7 +2,7 @@ namespace App\Actions\Teams; -use App\Models\User\User; +use App\Models\Users\User; class SetActiveTeamAction { diff --git a/app/Broadcasting/UsersChannel.php b/app/Broadcasting/UsersChannel.php index e05191fef..c5ce7412b 100644 --- a/app/Broadcasting/UsersChannel.php +++ b/app/Broadcasting/UsersChannel.php @@ -2,7 +2,7 @@ namespace App\Broadcasting; -use App\Models\User\User; +use App\Models\Users\User; class UsersChannel { @@ -19,7 +19,7 @@ public function __construct() /** * Authenticate the user's access to the channel. * - * @param \App\Models\User\User $user + * @param \App\Models\Users\User $user * @return array|bool */ public function join(User $user) diff --git a/app/Categories.php b/app/Categories.php deleted file mode 100644 index 12d460617..000000000 --- a/app/Categories.php +++ /dev/null @@ -1,17 +0,0 @@ -', 0)->get(); - - foreach ($users as $user) - { - $verificationCount = Redis::hincrby("user_verification_count", $user->id, $user->count_correctly_verified); - - echo "User_id: $user->id, score: $verificationCount \n"; - } - - echo "Completed."; - - return; - } -} diff --git a/app/Console/Commands/CheckDaily.php b/app/Console/Commands/CheckDaily.php index f8f6a9982..ca31b17f9 100644 --- a/app/Console/Commands/CheckDaily.php +++ b/app/Console/Commands/CheckDaily.php @@ -3,7 +3,7 @@ namespace App\Console\Commands; use Carbon\Carbon; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Console\Command; class CheckDaily extends Command diff --git a/app/Console/Commands/Clusters/CheckMigrationStatus.php b/app/Console/Commands/Clusters/CheckMigrationStatus.php new file mode 100644 index 000000000..03782a696 --- /dev/null +++ b/app/Console/Commands/Clusters/CheckMigrationStatus.php @@ -0,0 +1,151 @@ +info('🔎 Checking clustering migration …'); + $this->newLine(); + + /* ─────────────────────────────── photos ──────────────────────────── */ + $this->info('📷 Photos'); + foreach (['tile_key'] as $col) { + $this->checkColumn('photos', $col); + } + $this->checkIndex('photos', 'idx_photos_verified_tile'); + $this->checkIndex('photos', 'idx_photos_tile_updated'); + + $photosWithoutTileKey = DB::table('photos') + ->whereNull('tile_key') + ->whereBetween('lat', [-90, 90]) + ->whereBetween('lon', [-180, 180]) + ->count(); + + $photosWithoutTileKey + ? $this->warn(" ⚠️ {$photosWithoutTileKey} photos still need tile_key") + : $this->info(' ✅ All valid photos have tile_key'); + + $this->newLine(); + + /* ────────────────────────────── clusters ─────────────────────────── */ + $this->info('🗂️ Clusters'); + foreach (['tile_key','cell_x','cell_y','location','grid_size','year'] as $col) { + $this->checkColumn('clusters', $col); + } + + // basic sanity: NULL tile_key should never happen anymore + $nullClusters = DB::table('clusters')->whereNull('tile_key')->count(); + if ($nullClusters) { + $this->warn(" ⚠️ {$nullClusters} clusters have NULL tile_key"); + } + + $this->checkIndex('clusters', 'idx_clusters_spatial'); + $this->checkIndex('clusters', 'idx_zoom_tile'); + + // primary-key check + $pkInfo = $this->getPrimaryKeyInfo('clusters'); + $this->info(' Primary key : ' . ($pkInfo ?: '— missing —')); + if ($pkInfo === 'id') { + $this->warn(" ⚠️ Still using surrogate id PK → run clustering:complete-pk-migration"); + } + + // legacy columns lingering? + $legacy = array_filter( + ['point_count_abbreviated','geohash','created_at','id'], + fn ($c) => Schema::hasColumn('clusters', $c) + ); + $legacy + ? $this->warn(' ⚠️ Legacy columns present: '.implode(', ', $legacy)) + : $this->info(' ✅ No legacy columns'); + + $this->newLine(); + + /* ─────────────────────────── dirty_tiles ─────────────────────────── */ + $this->info('🔄 Dirty-tiles queue'); + if (!Schema::hasTable('dirty_tiles')) { + $this->error(' ❌ Table missing'); + } else { + $backlog = DB::table('dirty_tiles')->count(); + $maxRetries = config('clustering.queue.max_tries', 3); + $stuck = DB::table('dirty_tiles')->where('attempts', '>=', $maxRetries)->count(); + + $this->info(" ✅ Table exists"); + $this->info(" 📊 Backlog: {$backlog} | Stuck (>= {$maxRetries} tries): {$stuck}"); + } + + /* ───────────────────────────── summary ───────────────────────────── */ + $this->newLine(); + $this->info('📋 Summary'); + + if ($photosWithoutTileKey) { + $this->warn(' → Run php artisan clustering:update --populate'); + } + if ($nullClusters) { + $this->warn(' → Some clusters are inconsistent – investigate back-fill'); + } + if ($pkInfo === 'id') { + $this->warn(' → Run php artisan clustering:complete-pk-migration'); + } + if (!$photosWithoutTileKey && !$nullClusters && $pkInfo !== 'id') { + $this->info(' ✅ Migration looks good!'); + } + + return 0; + } + + /* ------------------------------------------------------------------------- + | Helpers + * ---------------------------------------------------------------------- */ + private function checkColumn(string $table, string $column): void + { + Schema::hasColumn($table, $column) + ? $this->info(" ✅ {$column}") + : $this->error(" ❌ {$column}"); + } + + private function checkIndex(string $table, string $index): void + { + $exists = DB::selectOne( + 'SELECT COUNT(*) AS c + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = ?', + [$table, $index] + )->c ?? 0; + + $exists + ? $this->info(" ✅ {$index}") + : $this->warn(" ⚠️ Missing index {$index}"); + } + + private function getPrimaryKeyInfo(string $table): ?string + { + $cols = DB::select( + "SELECT column_name + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = 'PRIMARY' + ORDER BY seq_in_index", + [$table] + ); + + return $cols ? implode(', ', array_column($cols, 'column_name')) : null; + } +} diff --git a/app/Console/Commands/Clusters/GenerateClusters.php b/app/Console/Commands/Clusters/GenerateClusters.php index f790cd0df..3dd848082 100644 --- a/app/Console/Commands/Clusters/GenerateClusters.php +++ b/app/Console/Commands/Clusters/GenerateClusters.php @@ -9,6 +9,9 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; +/** + * @deprecated + */ class GenerateClusters extends Command { /** @@ -179,6 +182,12 @@ private function getYearsWithNewPhotos(): array } else { $this->line("\nNo new photos for $year."); } + + if (app()->environment('local')) { + if (empty($yearsWithData)) { + $yearsWithData[] = now()->year; + } + } } return empty($yearsWithData) diff --git a/app/Console/Commands/Clusters/GenerateTeamClusters.php b/app/Console/Commands/Clusters/GenerateTeamClusters.php index bbbca17ad..635234dc5 100644 --- a/app/Console/Commands/Clusters/GenerateTeamClusters.php +++ b/app/Console/Commands/Clusters/GenerateTeamClusters.php @@ -8,6 +8,9 @@ use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; +/** + * @deprecated + */ class GenerateTeamClusters extends Command { /** diff --git a/app/Console/Commands/Clusters/ProcessDirtyTiles.php b/app/Console/Commands/Clusters/ProcessDirtyTiles.php new file mode 100644 index 000000000..b8129253d --- /dev/null +++ b/app/Console/Commands/Clusters/ProcessDirtyTiles.php @@ -0,0 +1,93 @@ +option('limit'); + + // Get dirty tiles + $tiles = DB::table('dirty_tiles') + ->orderBy('changed_at') + ->limit($limit) + ->pluck('tile_key'); + + if ($tiles->isEmpty()) { + $this->info('No dirty tiles to process.'); + return 0; + } + + $this->info("Processing {$tiles->count()} dirty tiles..."); + $bar = $this->output->createProgressBar($tiles->count()); + + $processed = 0; + $failed = 0; + + foreach ($tiles as $tileKey) { + try { + $service->clusterTile($tileKey); + + // Remove from dirty tiles + DB::table('dirty_tiles') + ->where('tile_key', $tileKey) + ->delete(); + + $processed++; + } catch (\Exception $e) { + $failed++; + $this->error("\nFailed to process tile $tileKey: " . $e->getMessage()); + + // Mark with backoff + $service->markTileDirty($tileKey, true); + } + + $bar->advance(); + } + + $bar->finish(); + $this->newLine(2); + + $this->info("✓ Processed: $processed tiles"); + if ($failed > 0) { + $this->warn("✗ Failed: $failed tiles (will retry with backoff)"); + } + + // Show remaining + $remaining = DB::table('dirty_tiles')->count(); + if ($remaining > 0) { + $this->info("Remaining dirty tiles: $remaining"); + } + + $ttl = config('clustering.dirty_tile_ttl', 24); + DB::table('dirty_tiles') + ->where('attempts', '>=', 3) + ->where('changed_at', '<', now()->subHours($ttl)) + ->delete(); + + return $failed > 0 ? 1 : 0; + } +} diff --git a/app/Console/Commands/Clusters/UpdateClusters.php b/app/Console/Commands/Clusters/UpdateClusters.php new file mode 100644 index 000000000..bc5357eea --- /dev/null +++ b/app/Console/Commands/Clusters/UpdateClusters.php @@ -0,0 +1,210 @@ +service = $service; + } + + public function handle(): int + { + // Show stats + if ($this->option('stats')) { + $this->showStats(); + return 0; + } + + // Populate tile keys + if ($this->option('populate')) { + $this->populateTileKeys(); + } + + // Process clusters + if ($this->option('all')) { + $this->clusterAll(); + } + + return 0; + } + + private function populateTileKeys(): void + { + $this->info('Populating missing tile keys...'); + + $missing = DB::table('photos') + ->whereNull('tile_key') + ->count(); + + if ($missing === 0) { + $this->info('All photos already have tile keys!'); + return; + } + + $this->info("Populating $missing photos - chunking..."); + $bar = $this->output->createProgressBar($missing); + + $totalTime = 0; + while (true) { + $start = microtime(true); + $done = $this->service->backfillPhotoTileKeys(); + if ($done === 0) break; + + $totalTime += microtime(true) - $start; + $bar->advance($done); + } + + $bar->finish(); + $this->newLine(); + $this->info(sprintf('✓ tile_key back-fill complete in %.2fs', $totalTime)); + } + + private function clusterAll(): void + { + $startTime = microtime(true); + $this->info('Starting clustering process...'); + + // Get zoom levels from config + $globalZooms = config('clustering.zoom_levels.global', [0, 2, 4, 6]); + $tileZooms = config('clustering.zoom_levels.tile', [8, 10, 12, 14, 16]); + + // Show query plan if requested + if ($this->option('explain')) { + $this->showQueryPlan(); + } + + // Global clustering for low zoom levels + $this->info('Processing global zoom levels...'); + $globalStats = []; + foreach ($globalZooms as $zoom) { + $start = microtime(true); + $count = $this->service->clusterGlobal($zoom); + $time = microtime(true) - $start; + $globalStats[] = compact('zoom', 'count', 'time'); + $this->line(sprintf("✓ Zoom %2d: %6d clusters (%5.2fs)", $zoom, $count, $time)); + } + + // Batch clustering for high zoom levels + $this->info('Processing per-tile zoom levels (optimized batch mode)...'); + $tileStats = []; + foreach ($tileZooms as $zoom) { + $start = microtime(true); + $memBefore = memory_get_usage(true); + + $count = $this->service->clusterAllTilesForZoom($zoom); + + $time = microtime(true) - $start; + $memUsed = (memory_get_usage(true) - $memBefore) / 1024 / 1024; + $tileStats[] = compact('zoom', 'count', 'time', 'memUsed'); + + $this->line(sprintf( + "✓ Zoom %2d: %6d clusters (%5.2fs, %.1fMB)", + $zoom, $count, $time, $memUsed + )); + } + + $totalTime = microtime(true) - $startTime; + $this->newLine(); + $this->info(sprintf("✓ Clustering complete in %.2fs", $totalTime)); + + // Show performance summary + $this->showPerformanceSummary($globalStats, $tileStats, $totalTime); + } + + private function showQueryPlan(): void + { + $this->info('Query execution plan for deep zoom:'); + + $plan = DB::select(" + EXPLAIN FORMAT=JSON + SELECT + tile_key, + FLOOR(cell_x / 20) AS cluster_x, + FLOOR(cell_y / 20) AS cluster_y, + COUNT(*) + FROM photos USE INDEX (idx_photos_fast_cluster) + WHERE verified = 2 + AND tile_key IS NOT NULL + GROUP BY tile_key, cluster_x, cluster_y + LIMIT 1 + "); + + $json = json_decode($plan[0]->{'EXPLAIN'}, true); + $this->line(json_encode($json, JSON_PRETTY_PRINT)); + $this->newLine(); + } + + private function showPerformanceSummary(array $globalStats, array $tileStats, float $totalTime): void + { + $this->newLine(); + $this->info('Performance Summary:'); + $this->info('───────────────────'); + + $globalTime = array_sum(array_column($globalStats, 'time')); + $tileTime = array_sum(array_column($tileStats, 'time')); + $globalClusters = array_sum(array_column($globalStats, 'count')); + $tileClusters = array_sum(array_column($tileStats, 'count')); + + $this->line(sprintf("Global zooms: %.2fs for %d clusters", $globalTime, $globalClusters)); + $this->line(sprintf("Tile zooms: %.2fs for %d clusters", $tileTime, $tileClusters)); + $this->line(sprintf("Total: %.2fs for %d clusters", $totalTime, $globalClusters + $tileClusters)); + + if ($tileTime > 0) { + $this->line(sprintf("Throughput: %.0f clusters/sec", $tileClusters / $tileTime)); + } + } + + private function showStats(): void + { + $stats = $this->service->getStats(); + + $this->info('Clustering Statistics:'); + $this->info('─────────────────────'); + + $this->line("Total photos: " . number_format($stats['photos_total'])); + $this->line("Photos with tile keys: " . number_format($stats['photos_with_tiles'])); + $this->line("Verified photos: " . number_format($stats['photos_verified'])); + $this->line("Unique tiles: " . number_format($stats['unique_tiles'])); + $this->line("Total clusters: " . number_format($stats['clusters_total'])); + + if (!empty($stats['clusters_by_zoom'])) { + $this->newLine(); + $this->line("Clusters by zoom:"); + foreach ($stats['clusters_by_zoom'] as $zoom => $count) { + $this->line(sprintf(" Zoom %2d: %s", $zoom, number_format($count))); + } + } + + // Verify data integrity + $this->newLine(); + $this->info('Data Integrity Check:'); + $verifiedPhotos = DB::table('photos')->where('verified', 2)->count(); + $z16Points = DB::table('clusters')->where('zoom', 16)->sum('point_count'); + + if ($verifiedPhotos == $z16Points) { + $this->line("✓ All verified photos accounted for in zoom 16 clusters"); + } else { + $this->warn(sprintf( + "⚠ Mismatch: %d verified photos vs %d in zoom 16 clusters", + $verifiedPhotos, $z16Points + )); + } + } +} diff --git a/app/Console/Commands/GenerateSitemap.php b/app/Console/Commands/GenerateSitemap.php deleted file mode 100644 index ed3438434..000000000 --- a/app/Console/Commands/GenerateSitemap.php +++ /dev/null @@ -1,106 +0,0 @@ -add($this->url('')) - ->add($this->url('about')) - ->add($this->url('global')) - ->add($this->url('world')) - ->add($this->url('signup')); - - $this->addCountries($sitemap); - - $this->addStates($sitemap); - - $this->addCities($sitemap); - - $sitemap->writeToFile(public_path('sitemap.xml')); - - $this->line('Done!'); - - return 0; - } - - private function url($url): Url - { - $site = 'https://openlittermap.com/'; - - return Url::create($site . $url) - ->setLastModificationDate(Carbon::yesterday()) - ->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY) - ->setPriority(1); - } - - private function addCountries(Sitemap $sitemap): void - { - $countries = Country::where('manual_verify', '1')->get(); - - foreach ($countries as $country) { - $sitemap->add($this->url("world/{$country->country}")); - } - } - - private function addStates(Sitemap $sitemap): void - { - $states = State::with('country') - ->where([ - 'manual_verify' => 1, - ['total_litter', '>', 0], - ['total_contributors', '>', 0] - ]) - ->get(); - - foreach ($states as $state) { - $sitemap->add($this->url("world/{$state->country->country}/{$state->state}")); - } - } - - private function addCities(Sitemap $sitemap): void - { - $cities = City::with('state.country') - ->where([ - ['total_images', '>', 0], - ['total_litter', '>', 0], - ['total_contributors', '>', 0] - ]) - ->get(); - - foreach ($cities as $city) { - $sitemap->add($this->url( - "world/{$city->state->country->country}/{$city->state->state}/{$city->city}/map") - ); - } - } -} diff --git a/app/Console/Commands/Photos/GenerateData.php b/app/Console/Commands/Photos/GenerateData.php index 2bad31288..a6444a653 100644 --- a/app/Console/Commands/Photos/GenerateData.php +++ b/app/Console/Commands/Photos/GenerateData.php @@ -3,7 +3,7 @@ namespace App\Console\Commands\Photos; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use App\Models\Location\City; use App\Models\Location\State; use App\Models\Location\Country; diff --git a/app/Console/Commands/Redis/RefreshTotalContributors.php b/app/Console/Commands/Redis/RefreshTotalContributors.php index 1dc63a980..d5ad9e14b 100644 --- a/app/Console/Commands/Redis/RefreshTotalContributors.php +++ b/app/Console/Commands/Redis/RefreshTotalContributors.php @@ -2,7 +2,7 @@ namespace App\Console\Commands\Redis; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Console\Command; use Illuminate\Support\Facades\Redis; diff --git a/app/Console/Commands/Redis/ResetTotalsOnRedis.php b/app/Console/Commands/Redis/ResetTotalsOnRedis.php index ea57b0c47..72125a4ff 100644 --- a/app/Console/Commands/Redis/ResetTotalsOnRedis.php +++ b/app/Console/Commands/Redis/ResetTotalsOnRedis.php @@ -6,7 +6,7 @@ use App\Models\Location\Country; use App\Models\Location\State; use App\Models\Location\City; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Console\Command; use Illuminate\Support\Facades\Redis; diff --git a/app/Console/Commands/SendEmailToNonuploaders.php b/app/Console/Commands/SendEmailToNonuploaders.php deleted file mode 100644 index d10479d4f..000000000 --- a/app/Console/Commands/SendEmailToNonuploaders.php +++ /dev/null @@ -1,47 +0,0 @@ -get(); - foreach($users as $user) { - \Mail::to($user->email)->send(new NotUploaded($user)); - } - } -} diff --git a/app/Console/Commands/SendEmailToSubscribed.php b/app/Console/Commands/SendEmailToSubscribed.php index cbad74419..4286f70b5 100644 --- a/app/Console/Commands/SendEmailToSubscribed.php +++ b/app/Console/Commands/SendEmailToSubscribed.php @@ -3,7 +3,7 @@ namespace App\Console\Commands; use App\Subscriber; -use App\Models\User\User; +use App\Models\Users\User; use App\Jobs\Emails\DispatchEmail; use Illuminate\Console\Command; diff --git a/app/Console/Commands/SendEmailToUnverified.php b/app/Console/Commands/SendEmailToUnverified.php deleted file mode 100644 index d0858ad28..000000000 --- a/app/Console/Commands/SendEmailToUnverified.php +++ /dev/null @@ -1,47 +0,0 @@ -get(); - foreach($users as $user) { - \Mail::to($user->email)->send(new UnverifiedReminder($user)); - } - } -} diff --git a/app/Console/Commands/SendLittercoinInstructions.php b/app/Console/Commands/SendLittercoinInstructions.php deleted file mode 100644 index d9f2a4f15..000000000 --- a/app/Console/Commands/SendLittercoinInstructions.php +++ /dev/null @@ -1,53 +0,0 @@ -', 1], - ['littercoin_instructions_received', null] - ])->get(); - foreach ($users as $user) { - \Mail::to($user->email)->send(new LittercoinInstructions($user)); - $user->littercoin_instructions_received = 1; - $user->save(); - } - - } -} diff --git a/app/Console/Commands/Tags/AddTagsForAUsersNewPhotos.php b/app/Console/Commands/Tags/AddTagsForAUsersNewPhotos.php deleted file mode 100644 index 36ff869f1..000000000 --- a/app/Console/Commands/Tags/AddTagsForAUsersNewPhotos.php +++ /dev/null @@ -1,86 +0,0 @@ -argument('user_id')); - - $photos = Photo::where(['user_id' => $user->id, 'verified' => 0])->get(); - - echo "Photos: " . sizeof($photos) . "\n"; - - $schema = LitterTags::INSTANCE()->getDecodedJSON(); - - foreach ($photos as $photo) - { - $category = $this->argument('category'); - - // Column on photos table to make a relationship with current category eg smoking_id - $id_table = $schema->$category->id_table; - - // Full class path - $class = 'App\\Models\\Litter\\Categories\\'.$schema->$category->class; - - // Create and Update the relationship between photo + category table - if (is_null($photo->$id_table)) - { - $row = $class::create(); - $photo->$id_table = $row->id; - $photo->save(); - } - // If it does exist, get it - else $row = $class::find($photo->$id_table); - - // Get the column name on the category class - $column = $this->argument('tag'); - - // Update column quantity on the category table - $row->$column = $this->argument('quantity'); - $row->save(); - - // Verify the photos photos - $photo->verified = 2; - $photo->verification = 1; - $photo->save(); - - event(new TagsVerifiedByAdmin($photo->id)); - } - } -} diff --git a/app/Console/Commands/Tags/SeedTagsCommand.php b/app/Console/Commands/Tags/SeedTagsCommand.php new file mode 100644 index 000000000..f5dc4206f --- /dev/null +++ b/app/Console/Commands/Tags/SeedTagsCommand.php @@ -0,0 +1,22 @@ +run(); + (new GenerateBrandsSeeder)->run(); + + $this->info('Tags seeded successfully!'); + } +} diff --git a/app/Console/Commands/Twitter/DailyReportTweet.php b/app/Console/Commands/Twitter/DailyReportTweet.php index 8e6183daa..e7237ccc8 100644 --- a/app/Console/Commands/Twitter/DailyReportTweet.php +++ b/app/Console/Commands/Twitter/DailyReportTweet.php @@ -6,7 +6,7 @@ use App\Models\Photo; use Spatie\Emoji\Emoji; use App\Helpers\Twitter; -use App\Models\User\User; +use App\Models\Users\User; use App\Models\CustomTag; use App\Models\Littercoin; use Illuminate\Console\Command; diff --git a/app/Console/Commands/UnifyTranslationFilesCommand.php b/app/Console/Commands/UnifyTranslationFilesCommand.php index 3caaa2eaf..191fe4268 100644 --- a/app/Console/Commands/UnifyTranslationFilesCommand.php +++ b/app/Console/Commands/UnifyTranslationFilesCommand.php @@ -21,7 +21,7 @@ public function handle(): int if ($path === 'all') { foreach ($this->getAllTranslationFiles() as $file) { - $filePath = str_replace(resource_path('js/langs/en/'), '', $file->getPathname()); + $filePath = str_replace(resource_path('old_js/langs/en/'), '', $file->getPathname()); $this->unifyLanguagesForFile($filePath); } } else { @@ -38,8 +38,8 @@ private function unifyLanguagesForFile(string $path) $langs = ['de', 'es', 'fr', 'hu', 'nl', 'pl', 'pt', 'sw']; foreach ($langs as $lang) { - if (!File::exists(resource_path("js/langs/$lang/$path"))) { - File::put(resource_path("js/langs/$lang/$path"), '{}'); + if (!File::exists(resource_path("old_js/langs/$lang/$path"))) { + File::put(resource_path("old_js/langs/$lang/$path"), '{}'); } $translatedJson = $this->getTranslationFile($lang, $path); @@ -64,7 +64,7 @@ private function unifyLanguagesForFile(string $path) private function getTranslationFile(string $lang, string $path): array { - $source = File::get(resource_path("js/langs/$lang/$path")); + $source = File::get(resource_path("old_js/langs/$lang/$path")); return json_decode($source, true); } @@ -72,7 +72,7 @@ private function getTranslationFile(string $lang, string $path): array private function putTranslationFile(string $lang, array $translation, string $path) { $output = json_encode($translation, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); - $file = File::get(resource_path("js/langs/$lang/$path")); + $file = File::get(resource_path("old_js/langs/$lang/$path")); $trimmedOutput = preg_replace('/\s+/', '', $output); $trimmedExisting = preg_replace('/\s+/', '', $file); @@ -82,7 +82,7 @@ private function putTranslationFile(string $lang, array $translation, string $pa return; } - File::put(resource_path("js/langs/$lang/$path"), $output); + File::put(resource_path("old_js/langs/$lang/$path"), $output); } /** @@ -90,7 +90,7 @@ private function putTranslationFile(string $lang, array $translation, string $pa */ private function getAllTranslationFiles(): array { - return collect(File::allFiles(resource_path("js/langs/en"))) + return collect(File::allFiles(resource_path("old_js/langs/en"))) ->filter(function (SplFileInfo $file) { return $file->getExtension() === 'json'; }) diff --git a/app/Console/Commands/Users/GenerateTimeSeries.php b/app/Console/Commands/Users/GenerateTimeSeries.php deleted file mode 100644 index 0c9bb5e40..000000000 --- a/app/Console/Commands/Users/GenerateTimeSeries.php +++ /dev/null @@ -1,78 +0,0 @@ -id . " \n"; - $user->photos_per_month = null; - - $photosPerMonth = []; - - $photos = Photo::select('id', 'user_id', 'datetime') - ->where([ - 'verified' => 2, - 'user_id' => $user->id - ]) - ->orderBy('datetime', 'asc') - ->get(); - - $photos = $photos->groupBy(function($val) { - return Carbon::parse($val->datetime)->format('m-y'); - }); - - foreach ($photos as $index => $monthlyPhotos) - { - $month = $months[(int)$substr = substr($index,0,2)]; - $year = substr($index,2,5); - $photosPerMonth[$month.$year] = $monthlyPhotos->count(); // Mar-17 - // $total_photos += $monthlyPhotos->count(); - } - - $user->photos_per_month = json_encode($photosPerMonth); - $user->save(); - } - } -} diff --git a/app/Console/Commands/Users/UpdateRedisBoundingBoxXp.php b/app/Console/Commands/Users/UpdateRedisBoundingBoxXp.php deleted file mode 100644 index 82af16a28..000000000 --- a/app/Console/Commands/Users/UpdateRedisBoundingBoxXp.php +++ /dev/null @@ -1,57 +0,0 @@ -leaderboardsXpAction = $xpAction; - } - - /** - * Execute the console command. - * - * @return int - */ - public function handle() - { - $this->line("Updating XP from bounding boxes"); - - $this->withProgressBar(User::all(), function (User $user) { - $addedBoxes = $user->boxes()->count(); - $verifiedBoxes = $user->boxesVerified()->count(); - - $this->leaderboardsXpAction->run($user->id, $addedBoxes + $verifiedBoxes); - }); - - return 0; - } -} diff --git a/app/Console/Commands/Users/UpdateRedisLocationsXp.php b/app/Console/Commands/Users/UpdateRedisLocationsXp.php deleted file mode 100644 index d51be99e7..000000000 --- a/app/Console/Commands/Users/UpdateRedisLocationsXp.php +++ /dev/null @@ -1,81 +0,0 @@ -updateLeaderboardsAction = $action; - } - - /** - * Execute the console command. - * - * @return int - */ - public function handle() - { - $this->withProgressBar(User::all(), function (User $user) { - $user->photos() - ->with(Photo::categories()) - ->lazyById() - ->each(function (Photo $photo) { - $xp = $this->calculateXp($photo); - - $this->updateLeaderboardsAction->run($photo, $photo->user_id, $xp); - }); - }); - - return 0; - } - - /** - * @param Photo $photo - * @return int - */ - private function calculateXp(Photo $photo): int - { - $xpFromPhoto = 1; - $xpFromTags = (int) collect($photo->categories()) - ->filter(function ($category) use ($photo) { - return $photo->$category; - }) - ->sum(function ($category) use ($photo) { - return $photo->$category->total(); - }); - $xpFromCustomTags = $photo->customTags()->count(); - - return $xpFromPhoto + $xpFromTags + $xpFromCustomTags; - } -} diff --git a/app/Console/Commands/tmp/GenerateDailyLeaderboards.php b/app/Console/Commands/tmp/GenerateDailyLeaderboards.php index 8a11827ed..56672fef9 100644 --- a/app/Console/Commands/tmp/GenerateDailyLeaderboards.php +++ b/app/Console/Commands/tmp/GenerateDailyLeaderboards.php @@ -6,7 +6,7 @@ use App\Models\Location\Country; use App\Models\Location\State; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Support\Facades\Redis; diff --git a/app/Console/Commands/tmp/GeneratePhotosPerMonth.php b/app/Console/Commands/tmp/GeneratePhotosPerMonth.php deleted file mode 100644 index bcd6990d2..000000000 --- a/app/Console/Commands/tmp/GeneratePhotosPerMonth.php +++ /dev/null @@ -1,94 +0,0 @@ -select( - 'id', - 'datetime', - 'user_id', - 'country_id', - 'state_id', - 'city_id' - ) - ->where('verified', '>=', 2); - - $total = $photos->count(); - - foreach ($photos->cursor() as $photo) - { - $date = Carbon::parse($photo->datetime)->format('m-y'); - - $user = User::find($photo->user_id); - - $country = Country::find($photo->country_id); - $state = State::find($photo->state_id); - $city = City::find($photo->city_id); - - if ($user) - { - Redis::hincrby("ppm:user:$user->id", $date, 1); - } - - if ($country) - { - Redis::hincrby("ppm:country:$country->id", $date, 1); - } - - if ($state) - { - Redis::hincrby("ppm:state:$state->id", $date, 1); - } - - if ($city) - { - Redis::hincrby("ppm:city:$city->id", $date, 1); - } - - $completed = ($photo->id / $total); - - $this->info($completed . " %"); - } - } -} diff --git a/app/Console/Commands/tmp/MoveDataToRedis.php b/app/Console/Commands/tmp/MoveDataToRedis.php deleted file mode 100644 index acb2fae97..000000000 --- a/app/Console/Commands/tmp/MoveDataToRedis.php +++ /dev/null @@ -1,79 +0,0 @@ -select( - 'id', - 'datetime', - 'user_id', - 'country_id', - 'state_id', - 'city_id' - ) - ->orderBy('id', 'desc'); - - $total = $photos->count(); - - // we have: - // user:id category total - // user:id total_litter - // user:id brand total - // user:id total_brands - // user:id total_photos - - // leaderboard:users:yyyy:mm:dd - // leaderboard:locationType:locationId:yyyy:mm:dd - - // we need - // user:id total_custom_tags? - - foreach ($photos->cursor() as $photo) - { - // Each Photo - // total_litter - // total_brands - // total_custom_tags // the sum of these gives us total_tags - // total_categories // include each category and its score - - // Globally - // photos per day, month, year - // cumulative photos over time - - // Each Location - // - total photos - // - photos per day, month, year - // - total_litter - // - total_brands - // - total_custom_tags // the sum of these gives us total tags - // - total_categories // include each category and its score - - } - } -} diff --git a/app/Console/Commands/tmp/ResetLittercoin.php b/app/Console/Commands/tmp/ResetLittercoin.php index 336a96bff..57d490368 100644 --- a/app/Console/Commands/tmp/ResetLittercoin.php +++ b/app/Console/Commands/tmp/ResetLittercoin.php @@ -4,7 +4,7 @@ use App\Models\Littercoin; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Console\Command; class ResetLittercoin extends Command diff --git a/app/Console/Commands/tmp/v5/Migration/AutoCreateBrandRelationships.php b/app/Console/Commands/tmp/v5/Migration/AutoCreateBrandRelationships.php new file mode 100644 index 000000000..70b48af44 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/AutoCreateBrandRelationships.php @@ -0,0 +1,560 @@ + 0, + 'relationships_created' => 0, + 'relationships_already_existed' => 0, + 'brands_skipped_low_usage' => 0, + 'brands_with_single_object' => 0, + 'brands_with_multiple_objects' => 0, + 'by_category' => [], + ]; + + public function __construct(ClassifyTagsService $classifyService) + { + parent::__construct(); + $this->classifyService = $classifyService; + } + + public function handle() + { + $minUsage = (int) $this->option('min-usage'); + $minPercentage = (float) $this->option('min-percentage'); + $apply = $this->option('apply'); + $export = $this->option('export'); + + if (!$apply) { + $this->info('DRY RUN MODE - No relationships will be created.'); + $this->info('Use --apply to actually create relationships.'); + $this->info('Use --export to save proposed relationships to CSV.'); + $this->newLine(); + } + + $this->info("Processing undefined brands with usage >= {$minUsage}"); + $this->info("Creating relationships for objects that appear in >= {$minPercentage}% of photos"); + $this->newLine(); + + // Get brands without relationships + $brandsWithRelationships = DB::table('taggables') + ->where('taggable_type', BrandList::class) + ->distinct() + ->pluck('taggable_id') + ->toArray(); + + $undefinedBrands = BrandList::whereNotIn('id', $brandsWithRelationships) + ->pluck('key', 'id') + ->toArray(); + + $this->info("Found " . count($undefinedBrands) . " brands without relationships"); + $this->newLine(); + + $progressBar = $this->output->createProgressBar(count($undefinedBrands)); + $progressBar->start(); + + $relationshipsToCreate = []; + + foreach ($undefinedBrands as $brandId => $brandKey) { + // Count usage + $usageCount = $this->getBrandUsageCount($brandKey); + + if ($usageCount < $minUsage) { + $this->stats['brands_skipped_low_usage']++; + $progressBar->advance(); + continue; + } + + // Analyze what objects this brand appears with + $context = $this->analyzeBrandContext($brandKey); + + if (empty($context['objects'])) { + $progressBar->advance(); + continue; + } + + $totalPhotos = $context['total_photos']; + $isSingleObject = ($context['single_object_photos'] == $totalPhotos); + + if ($isSingleObject) { + $this->stats['brands_with_single_object']++; + } else { + $this->stats['brands_with_multiple_objects']++; + } + + // Determine which relationships to create + foreach ($context['objects_by_category'] as $categoryKey => $objects) { + foreach ($objects as $objectKey => $count) { + $percentage = ($count / $totalPhotos) * 100; + + // Create relationship if: + // 1. It's the only object (single object scenario) + // 2. The object appears in >= min percentage of photos + if ($isSingleObject || $percentage >= $minPercentage) { + $relationshipsToCreate[] = [ + 'brand_id' => $brandId, + 'brand_key' => $brandKey, + 'category_key' => $categoryKey, + 'object_key' => $objectKey, + 'count' => $count, + 'percentage' => round($percentage, 1), + 'reason' => $isSingleObject ? 'single_object' : 'above_threshold', + 'total_photos' => $totalPhotos + ]; + } + } + } + + $this->stats['brands_processed']++; + $progressBar->advance(); + } + + $progressBar->finish(); + $this->newLine(2); + + // Show summary + $this->info("=" . str_repeat("=", 78)); + $this->info("RELATIONSHIP DISCOVERY COMPLETE"); + $this->info("=" . str_repeat("=", 78)); + $this->info("Relationships to create: " . count($relationshipsToCreate)); + $this->newLine(); + + if (count($relationshipsToCreate) > 0) { + // Group by brand for display + $byBrand = []; + foreach ($relationshipsToCreate as $rel) { + $byBrand[$rel['brand_key']][] = $rel; + } + + // Show statistics + $singleObjectRels = array_filter($relationshipsToCreate, fn($r) => $r['reason'] === 'single_object'); + $thresholdRels = array_filter($relationshipsToCreate, fn($r) => $r['reason'] === 'above_threshold'); + + $this->table( + ['Metric', 'Value'], + [ + ['Unique brands', number_format(count($byBrand))], + ['Total relationships', number_format(count($relationshipsToCreate))], + ['Single-object relationships', number_format(count($singleObjectRels))], + ['Threshold-based relationships', number_format(count($thresholdRels))], + ['Brands skipped (low usage)', number_format($this->stats['brands_skipped_low_usage'])], + ] + ); + + $this->newLine(); + + // Show sample of what will be created + $this->info("Sample relationships (first 10 brands):"); + $sample = array_slice($byBrand, 0, 10, true); + + foreach ($sample as $brandKey => $relationships) { + $totalPhotos = $relationships[0]['total_photos']; + $this->info(" {$brandKey} (appears in {$totalPhotos} photos):"); + foreach ($relationships as $rel) { + $this->line(sprintf( + " → %s:%s (%d photos, %.1f%%) [%s]", + $rel['category_key'], + $rel['object_key'], + $rel['count'], + $rel['percentage'], + $rel['reason'] + )); + } + } + + if (count($byBrand) > 10) { + $this->info(" ... and " . (count($byBrand) - 10) . " more brands"); + } + } + + // Export if requested + if ($export) { + $this->exportProposedRelationships($relationshipsToCreate); + } + + if (!$apply) { + $this->newLine(); + $this->warn("This was a DRY RUN - no relationships were created."); + $this->info("To create these relationships, run with --apply flag"); + $this->info("To export these relationships to CSV, run with --export flag"); + return 0; + } + + // Apply the relationships + $this->newLine(); + $this->info("Creating relationships..."); + + $progressBar = $this->output->createProgressBar(count($relationshipsToCreate)); + $progressBar->start(); + + foreach ($relationshipsToCreate as $rel) { + $this->createRelationship( + $rel['brand_id'], + $rel['brand_key'], + $rel['category_key'], + $rel['object_key'] + ); + + $progressBar->advance(); + } + + $progressBar->finish(); + $this->newLine(2); + + $this->displayStats(); + + // Export created relationships for review + $this->exportCreatedRelationships($relationshipsToCreate); + + return 0; + } + + protected function getBrandUsageCount(string $brandKey): int + { + $count = 0; + + // Check if it's an official brand column + if (in_array($brandKey, Brand::types())) { + $count += DB::table('brands') + ->where($brandKey, '>', 0) + ->count(); + } + + // Check custom tags + $count += DB::table('custom_tags') + ->where('tag', 'brand:' . $brandKey) + ->orWhere('tag', 'brand=' . $brandKey) + ->count(); + + return $count; + } + + protected function analyzeBrandContext(string $brandKey): array + { + $context = [ + 'total_photos' => 0, + 'single_object_photos' => 0, + 'multiple_object_photos' => 0, + 'objects' => [], + 'objects_by_category' => [], + ]; + + // Find photos with this brand + $photoIds = []; + + // From brands table + if (in_array($brandKey, Brand::types())) { + $ids = DB::table('brands') + ->join('photos', 'photos.brands_id', '=', 'brands.id') + ->where("brands.{$brandKey}", '>', 0) + ->pluck('photos.id') + ->toArray(); + $photoIds = array_merge($photoIds, $ids); + } + + // From custom tags + $customIds = DB::table('custom_tags') + ->where(function($q) use ($brandKey) { + $q->where('tag', 'brand:' . $brandKey) + ->orWhere('tag', 'brand=' . $brandKey); + }) + ->pluck('photo_id') + ->toArray(); + $photoIds = array_merge($photoIds, $customIds); + + $photoIds = array_unique($photoIds); + $context['total_photos'] = count($photoIds); + + if (empty($photoIds)) { + return $context; + } + + // Analyze each photo + Photo::whereIn('id', $photoIds) + ->with(['smoking', 'food', 'coffee', 'alcohol', 'softdrinks', + 'sanitary', 'coastal', 'dumping', 'industrial', 'other']) + ->chunk(500, function($photos) use (&$context) { + foreach ($photos as $photo) { + $photoObjects = $this->extractPhotoObjects($photo); + + if (count($photoObjects) === 1) { + $context['single_object_photos']++; + } elseif (count($photoObjects) > 1) { + $context['multiple_object_photos']++; + } + + foreach ($photoObjects as $obj) { + // Track overall + if (!isset($context['objects'][$obj['object']])) { + $context['objects'][$obj['object']] = 0; + } + $context['objects'][$obj['object']]++; + + // Track by category + if (!isset($context['objects_by_category'][$obj['category']])) { + $context['objects_by_category'][$obj['category']] = []; + } + if (!isset($context['objects_by_category'][$obj['category']][$obj['object']])) { + $context['objects_by_category'][$obj['category']][$obj['object']] = 0; + } + $context['objects_by_category'][$obj['category']][$obj['object']]++; + } + } + }); + + return $context; + } + + protected function extractPhotoObjects(Photo $photo): array + { + $objects = []; + + $categories = ['smoking', 'food', 'coffee', 'alcohol', 'softdrinks', + 'sanitary', 'coastal', 'dumping', 'industrial', 'other']; + + foreach ($categories as $categoryKey) { + $idField = "{$categoryKey}_id"; + + if (empty($photo->$idField)) { + continue; + } + + $categoryData = $photo->$categoryKey; + if (!$categoryData) { + continue; + } + + if (!method_exists($categoryData, 'types')) { + continue; + } + + foreach ($categoryData->types() as $tagKey) { + if (!empty($categoryData->$tagKey) && $categoryData->$tagKey > 0) { + // Normalize the tag key + $normalizedKey = $this->normalizeObjectKey($tagKey); + + // Skip if this is actually a brand + if (BrandList::where('key', $normalizedKey)->exists()) { + continue; + } + + $objects[] = [ + 'category' => $categoryKey, + 'object' => $normalizedKey, + 'quantity' => (int) $categoryData->$tagKey + ]; + } + } + } + + return $objects; + } + + protected function normalizeObjectKey(string $tagKey): string + { + // Use ClassifyTagsService to normalize deprecated tags + $mapping = ClassifyTagsService::normalizeDeprecatedTag($tagKey); + + if ($mapping !== null && isset($mapping['object'])) { + return $mapping['object']; + } + + return $tagKey; + } + + protected function createRelationship( + int $brandId, + string $brandKey, + string $categoryKey, + string $objectKey + ): void { + // Get category + $category = Category::where('key', $categoryKey)->first(); + if (!$category) { + $this->error("Category not found: {$categoryKey}"); + return; + } + + // Normalize object key + $normalizedObjectKey = $this->normalizeObjectKey($objectKey); + + // Get or create object + $object = LitterObject::firstOrCreate(['key' => $normalizedObjectKey]); + + // Get or create CategoryObject pivot + $categoryObject = CategoryObject::firstOrCreate([ + 'category_id' => $category->id, + 'litter_object_id' => $object->id, + ]); + + // Check if relationship already exists + $exists = Taggable::where('category_litter_object_id', $categoryObject->id) + ->where('taggable_type', BrandList::class) + ->where('taggable_id', $brandId) + ->exists(); + + if ($exists) { + $this->stats['relationships_already_existed']++; + return; + } + + // Create the relationship + Taggable::create([ + 'category_litter_object_id' => $categoryObject->id, + 'taggable_type' => BrandList::class, + 'taggable_id' => $brandId, + 'quantity' => 1, + ]); + + $this->stats['relationships_created']++; + + // Track by category + if (!isset($this->stats['by_category'][$categoryKey])) { + $this->stats['by_category'][$categoryKey] = 0; + } + $this->stats['by_category'][$categoryKey]++; + } + + protected function exportProposedRelationships(array $relationships): void + { + if (empty($relationships)) { + $this->warn('No relationships to export.'); + return; + } + + $filename = storage_path('app/brand-relationships-proposed-' . date('Y-m-d-His') . '.csv'); + $handle = fopen($filename, 'w'); + + // Headers + fputcsv($handle, [ + 'Brand ID', + 'Brand Key', + 'Category', + 'Object', + 'Photos with this combo', + 'Total photos with brand', + 'Percentage', + 'Reason', + 'Will Create?' + ]); + + // Data + foreach ($relationships as $rel) { + fputcsv($handle, [ + $rel['brand_id'], + $rel['brand_key'], + $rel['category_key'], + $rel['object_key'], + $rel['count'], + $rel['total_photos'], + $rel['percentage'] . '%', + $rel['reason'], + 'YES' + ]); + } + + fclose($handle); + $this->newLine(); + $this->info("✓ Exported proposed relationships to: {$filename}"); + $this->info("Review this file to see what relationships will be created"); + } + + protected function exportCreatedRelationships(array $relationships): void + { + if (empty($relationships)) { + return; + } + + $filename = storage_path('app/brand-relationships-created-' . date('Y-m-d-His') . '.csv'); + $handle = fopen($filename, 'w'); + + // Headers + fputcsv($handle, [ + 'Brand ID', + 'Brand Key', + 'Category', + 'Object', + 'Photos with this combo', + 'Total photos with brand', + 'Percentage', + 'Reason', + 'Status' + ]); + + // Data + foreach ($relationships as $rel) { + fputcsv($handle, [ + $rel['brand_id'], + $rel['brand_key'], + $rel['category_key'], + $rel['object_key'], + $rel['count'], + $rel['total_photos'], + $rel['percentage'] . '%', + $rel['reason'], + 'CREATED' + ]); + } + + fclose($handle); + $this->info("✓ Exported created relationships to: {$filename}"); + } + + protected function displayStats(): void + { + $this->newLine(); + + $this->table( + ['Metric', 'Value'], + [ + ['Brands analyzed', number_format($this->stats['brands_processed'])], + ['Brands skipped (low usage)', number_format($this->stats['brands_skipped_low_usage'])], + ['Brands with single object', number_format($this->stats['brands_with_single_object'])], + ['Brands with multiple objects', number_format($this->stats['brands_with_multiple_objects'])], + ['', ''], + ['Relationships created', number_format($this->stats['relationships_created'])], + ['Relationships already existed', number_format($this->stats['relationships_already_existed'])], + ] + ); + + if (!empty($this->stats['by_category']) && $this->stats['relationships_created'] > 0) { + $this->newLine(); + $this->info('Relationships created by category:'); + $this->table( + ['Category', 'Count'], + array_map(fn($cat, $count) => [$cat, number_format($count)], + array_keys($this->stats['by_category']), + array_values($this->stats['by_category'])) + ); + } + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/LocationAnalysisCommand.php b/app/Console/Commands/tmp/v5/Migration/LocationAnalysisCommand.php new file mode 100644 index 000000000..5db3a3a51 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/LocationAnalysisCommand.php @@ -0,0 +1,288 @@ +info('═══════════════════════════════════════════════'); + $this->info(' OpenLitterMap Location Analysis'); + $this->info('═══════════════════════════════════════════════'); + $this->newLine(); + + // ── Totals ── + $photos = DB::table('photos')->count(); + $countries = DB::table('countries')->count(); + $states = DB::table('states')->count(); + $cities = DB::table('cities')->count(); + + $this->table(['Entity', 'Count'], [ + ['Photos', number_format($photos)], + ['Countries', number_format($countries)], + ['States', number_format($states)], + ['Cities', number_format($cities)], + ]); + + // ── 1. Duplicate Countries (by name) ── + $this->newLine(); + $this->info('── Duplicate Countries (by name) ──'); + + $dupCountriesByName = DB::select(" + SELECT c.country, COUNT(*) as cnt, + GROUP_CONCAT(c.id ORDER BY c.id SEPARATOR ', ') as ids, + (SELECT COUNT(*) FROM photos p WHERE p.country_id IN ( + SELECT c2.id FROM countries c2 WHERE c2.country = c.country + )) as total_photos + FROM countries c + GROUP BY c.country + HAVING cnt > 1 + ORDER BY cnt DESC + "); + + if (empty($dupCountriesByName)) { + $this->info(' None ✓'); + } else { + $rows = array_map(fn($d) => [$d->country, $d->cnt, $d->ids, number_format($d->total_photos)], $dupCountriesByName); + $this->table(['Country Name', 'Duplicates', 'IDs', 'Photos Affected'], $rows); + } + + // ── 2. Duplicate Countries (by shortcode) ── + $this->newLine(); + $this->info('── Duplicate Countries (by shortcode) ──'); + + $dupCountriesByCode = DB::select(" + SELECT c.shortcode, COUNT(*) as cnt, + GROUP_CONCAT(CONCAT(c.id, ':', c.country) ORDER BY c.id SEPARATOR ' | ') as entries, + (SELECT COUNT(*) FROM photos p WHERE p.country_id IN ( + SELECT c2.id FROM countries c2 WHERE c2.shortcode = c.shortcode + )) as total_photos + FROM countries c + WHERE c.shortcode IS NOT NULL AND c.shortcode != '' + GROUP BY c.shortcode + HAVING cnt > 1 + ORDER BY total_photos DESC + "); + + if (empty($dupCountriesByCode)) { + $this->info(' None ✓'); + } else { + $rows = array_map(fn($d) => [$d->shortcode, $d->cnt, $d->entries, number_format($d->total_photos)], $dupCountriesByCode); + $this->table(['Shortcode', 'Duplicates', 'Entries (id:name)', 'Photos Affected'], $rows); + } + + // ── 3. Duplicate States (by country_id + state name) ── + $this->newLine(); + $this->info('── Duplicate States (by country_id + state name) ──'); + + $dupStates = DB::select(" + SELECT s.country_id, co.country as country_name, s.state, COUNT(*) as cnt, + GROUP_CONCAT(s.id ORDER BY s.id SEPARATOR ', ') as ids, + (SELECT COUNT(*) FROM photos p WHERE p.state_id IN ( + SELECT s2.id FROM states s2 WHERE s2.country_id = s.country_id AND s2.state = s.state + )) as total_photos + FROM states s + LEFT JOIN countries co ON co.id = s.country_id + GROUP BY s.country_id, s.state + HAVING cnt > 1 + ORDER BY total_photos DESC + LIMIT 30 + "); + + if (empty($dupStates)) { + $this->info(' None ✓'); + } else { + $rows = array_map(fn($d) => [$d->country_name, $d->state, $d->cnt, $d->ids, number_format($d->total_photos)], $dupStates); + $this->table(['Country', 'State Name', 'Duplicates', 'IDs', 'Photos Affected'], $rows); + $total = count($dupStates); + if ($total >= 30) { + $this->warn(" (showing top 30 of {$total}+)"); + } + } + + // ── 4. Duplicate Cities (by state_id + city name) ── + $this->newLine(); + $this->info('── Duplicate Cities (by state_id + city name) ──'); + + $dupCities = DB::select(" + SELECT ci.state_id, s.state as state_name, ci.city, COUNT(*) as cnt, + GROUP_CONCAT(ci.id ORDER BY ci.id SEPARATOR ', ') as ids, + (SELECT COUNT(*) FROM photos p WHERE p.city_id IN ( + SELECT ci2.id FROM cities ci2 WHERE ci2.state_id = ci.state_id AND ci2.city = ci.city + )) as total_photos + FROM cities ci + LEFT JOIN states s ON s.id = ci.state_id + GROUP BY ci.state_id, ci.city + HAVING cnt > 1 + ORDER BY total_photos DESC + LIMIT 30 + "); + + if (empty($dupCities)) { + $this->info(' None ✓'); + } else { + $rows = array_map(fn($d) => [$d->state_name, $d->city, $d->cnt, $d->ids, number_format($d->total_photos)], $dupCities); + $this->table(['State', 'City Name', 'Duplicates', 'IDs', 'Photos Affected'], $rows); + $total = count($dupCities); + if ($total >= 30) { + $this->warn(" (showing top 30 of {$total}+)"); + } + } + + // ── 5. Tier Consistency ── + $this->newLine(); + $this->info('── Tier Consistency ──'); + + $tierChecks = DB::select(" + SELECT 'photo.country ≠ state.country' as issue, COUNT(*) as cnt + FROM photos p + JOIN states s ON s.id = p.state_id + WHERE p.country_id != s.country_id + UNION ALL + SELECT 'photo.state ≠ city.state', COUNT(*) + FROM photos p + JOIN cities c ON c.id = p.city_id + WHERE p.state_id != c.state_id + UNION ALL + SELECT 'photo.country ≠ city.country', COUNT(*) + FROM photos p + JOIN cities c ON c.id = p.city_id + WHERE p.country_id != c.country_id + UNION ALL + SELECT 'city.country ≠ state.country', COUNT(*) + FROM cities c + JOIN states s ON s.id = c.state_id + WHERE c.country_id != s.country_id + "); + + $hasIssues = false; + foreach ($tierChecks as $check) { + $status = $check->cnt == 0 ? '✓' : '✗'; + $this->info(" {$status} {$check->issue}: " . number_format($check->cnt)); + if ($check->cnt > 0) $hasIssues = true; + } + + // ── 6. Broken References ── + $this->newLine(); + $this->info('── Broken Foreign Key References ──'); + + $brokenRefs = DB::select(" + SELECT 'photos → countries' as ref, COUNT(*) as cnt + FROM photos p + LEFT JOIN countries c ON c.id = p.country_id + WHERE c.id IS NULL AND p.country_id IS NOT NULL + UNION ALL + SELECT 'photos → states', COUNT(*) + FROM photos p + LEFT JOIN states s ON s.id = p.state_id + WHERE s.id IS NULL AND p.state_id IS NOT NULL + UNION ALL + SELECT 'photos → cities', COUNT(*) + FROM photos p + LEFT JOIN cities c ON c.id = p.city_id + WHERE c.id IS NULL AND p.city_id IS NOT NULL + UNION ALL + SELECT 'cities → states', COUNT(*) + FROM cities c + LEFT JOIN states s ON s.id = c.state_id + WHERE s.id IS NULL AND c.state_id IS NOT NULL + UNION ALL + SELECT 'cities → countries', COUNT(*) + FROM cities c + LEFT JOIN countries co ON co.id = c.country_id + WHERE co.id IS NULL AND c.country_id IS NOT NULL + UNION ALL + SELECT 'states → countries', COUNT(*) + FROM states s + LEFT JOIN countries c ON c.id = s.country_id + WHERE c.id IS NULL AND s.country_id IS NOT NULL + "); + + foreach ($brokenRefs as $ref) { + $status = $ref->cnt == 0 ? '✓' : '✗'; + $this->info(" {$status} {$ref->ref}: " . number_format($ref->cnt)); + } + + // ── 7. Orphans ── + $this->newLine(); + $this->info('── Orphaned Locations ──'); + + $orphans = DB::select(" + SELECT 'States (no photos, no cities)' as type, COUNT(*) as cnt + FROM states s + WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.state_id = s.id) + AND NOT EXISTS (SELECT 1 FROM cities c WHERE c.state_id = s.id) + UNION ALL + SELECT 'States (no photos, has cities)', COUNT(*) + FROM states s + WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.state_id = s.id) + AND EXISTS (SELECT 1 FROM cities c WHERE c.state_id = s.id) + UNION ALL + SELECT 'Cities (no photos)', COUNT(*) + FROM cities c + WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.city_id = c.id) + "); + + foreach ($orphans as $o) { + $status = $o->cnt == 0 ? '✓' : '⚠'; + $this->info(" {$status} {$o->type}: " . number_format($o->cnt)); + } + + // ── 8. Unique Constraints ── + $this->newLine(); + $this->info('── Unique Constraints ──'); + + $constraints = [ + ['countries', 'uq_country_shortcode'], + ['states', 'uq_state_country'], + ['cities', 'uq_city_state'], + ]; + + foreach ($constraints as [$table, $indexName]) { + $exists = DB::select("SHOW INDEX FROM {$table} WHERE Key_name = ?", [$indexName]); + $status = !empty($exists) ? '✓' : '✗'; + $this->info(" {$status} {$table}.{$indexName}"); + } + + // ── 9. "not found" cities ── + $this->newLine(); + $this->info('── "not found" Cities ──'); + + $notFound = DB::selectOne("SELECT COUNT(*) as cnt FROM cities WHERE city = 'not found'"); + $status = $notFound->cnt == 0 ? '✓' : '✗'; + $this->info(" {$status} Count: {$notFound->cnt}"); + + if ($notFound->cnt > 0) { + $nfPhotos = DB::selectOne(" + SELECT COUNT(*) as cnt FROM photos p + JOIN cities c ON c.id = p.city_id + WHERE c.city = 'not found' + "); + $this->info(" Photos affected: " . number_format($nfPhotos->cnt)); + } + + // ── Summary ── + $this->newLine(); + $this->info('═══════════════════════════════════════════════'); + $dupTotal = count($dupCountriesByName) + count($dupCountriesByCode) + count($dupStates) + count($dupCities); + if ($dupTotal === 0 && !$hasIssues) { + $this->info(' ✓ Location data is clean'); + } else { + if ($dupTotal > 0) { + $this->warn(" ✗ {$dupTotal} duplicate group(s) found"); + } + if ($hasIssues) { + $this->warn(' ✗ Tier consistency issues found'); + } + } + $this->info('═══════════════════════════════════════════════'); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/LocationCleanupCommand.php b/app/Console/Commands/tmp/v5/Migration/LocationCleanupCommand.php new file mode 100644 index 000000000..7324b54ab --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/LocationCleanupCommand.php @@ -0,0 +1,1046 @@ +dryRun = $this->option('dry-run'); + + if ($this->dryRun) { + $this->warn('DRY RUN — no changes will be made'); + $this->newLine(); + } + + // Acquire advisory lock to prevent concurrent runs + if (!$this->dryRun) { + $lockAcquired = DB::selectOne("SELECT GET_LOCK('olm_location_cleanup', 0) as acquired"); + if (!$lockAcquired->acquired) { + $this->error('Another instance of this command is already running. Aborting.'); + return self::FAILURE; + } + } + + try { + return $this->runCleanup(); + } catch (\RuntimeException $e) { + $this->error($e->getMessage()); + return self::FAILURE; + } finally { + if (!$this->dryRun) { + DB::selectOne("SELECT RELEASE_LOCK('olm_location_cleanup')"); + } + } + } + + private function runCleanup(): int + { + $this->totalPhotosBefore = DB::table('photos')->count(); + $this->info("Photos before cleanup: " . number_format($this->totalPhotosBefore)); + $this->newLine(); + + $this->ensureMergeLogTable(); + + // Step 0: Normalize whitespace in location names + $this->info('═══════════════════════════════════'); + $this->info('Step 0: Normalize whitespace'); + $this->info('═══════════════════════════════════'); + $this->normalizeWhitespace(); + + // Step 1: Countries + $this->info('═══════════════════════════════════'); + $this->info('Step 1: Merge duplicate countries'); + $this->info('═══════════════════════════════════'); + $this->mergeCountries(); + $this->verifyIntegrity('countries'); + + // Step 2: States + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Step 2: Merge duplicate states'); + $this->info('═══════════════════════════════════'); + $this->mergeStates(); + $this->verifyIntegrity('states'); + + // Step 3: Cities + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Step 3: Merge duplicate cities'); + $this->info('═══════════════════════════════════'); + $this->mergeCities(); + $this->verifyIntegrity('cities'); + + // Step 4: "not found" → Unknown + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Step 4: Clean "not found" cities'); + $this->info('═══════════════════════════════════'); + $this->cleanNotFound(); + $this->verifyIntegrity('not-found cleanup'); + + // Step 5: Orphans + if (!$this->option('skip-orphans')) { + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Step 5: Delete orphans'); + $this->info('═══════════════════════════════════'); + $this->deleteOrphans(); + $this->verifyIntegrity('orphan deletion'); + } + + // Step 6: Unique constraints + if (!$this->option('skip-constraints')) { + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Step 6: Add unique constraints'); + $this->info('═══════════════════════════════════'); + $this->addUniqueConstraints(); + } + + // Step 7: Tier consistency repair + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Step 7: Tier consistency repair'); + $this->info('═══════════════════════════════════'); + $this->repairTierConsistency(); + $this->verifyIntegrity('tier repair'); + + // Final verification + $this->newLine(); + $this->info('═══════════════════════════════════'); + $this->info('Final Verification'); + $this->info('═══════════════════════════════════'); + $this->finalVerification(); + + return self::SUCCESS; + } + + // ───────────────────────────────────────────── + // Merge Log + // ───────────────────────────────────────────── + + private function ensureMergeLogTable(): void + { + if (!Schema::hasTable('location_merges')) { + if ($this->dryRun) { + $this->line(' Would create location_merges table'); + return; + } + + DB::statement(" + CREATE TABLE location_merges ( + id INT AUTO_INCREMENT PRIMARY KEY, + entity_type ENUM('country','state','city') NOT NULL, + loser_id INT NOT NULL, + keeper_id INT NOT NULL, + reason VARCHAR(255), + photos_moved INT DEFAULT 0, + children_moved INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + "); + $this->info('✓ Created location_merges table'); + } + } + + private function logMerge(string $type, int $loserId, int $keeperId, string $reason, int $photosMoved, int $childrenMoved = 0): void + { + if ($this->dryRun) { + return; + } + + DB::table('location_merges')->insert([ + 'entity_type' => $type, + 'loser_id' => $loserId, + 'keeper_id' => $keeperId, + 'reason' => $reason, + 'photos_moved' => $photosMoved, + 'children_moved' => $childrenMoved, + ]); + + $this->mergeCount++; + } + + // ───────────────────────────────────────────── + // Step 0: Whitespace normalization + // ───────────────────────────────────────────── + + private function normalizeWhitespace(): void + { + // REGEXP_REPLACE requires MySQL 8+ + $version = DB::selectOne("SELECT VERSION() as v")->v ?? '0'; + $canRegexp = version_compare($version, '8.0.0', '>='); + + if (!$canRegexp) { + $this->warn(' MySQL < 8 detected — using TRIM only (internal multi-spaces not collapsed)'); + } + + $tables = [ + ['countries', 'country'], + ['states', 'state'], + ['cities', 'city'], + ]; + + foreach ($tables as [$table, $column]) { + if ($canRegexp) { + $affected = DB::select(" + SELECT COUNT(*) as cnt FROM {$table} + WHERE {$column} != TRIM({$column}) + OR {$column} REGEXP ' ' + "); + } else { + $affected = DB::select(" + SELECT COUNT(*) as cnt FROM {$table} + WHERE {$column} != TRIM({$column}) + "); + } + + $count = $affected[0]->cnt ?? 0; + + if ($count === 0) { + $this->info(" ✓ {$table}.{$column} — no whitespace issues"); + continue; + } + + if ($this->dryRun) { + $this->line(" [DRY] Would normalize {$count} {$table}.{$column} values"); + continue; + } + + if ($canRegexp) { + // TRIM leading/trailing and collapse internal multi-spaces + DB::update(" + UPDATE {$table} + SET {$column} = TRIM(REGEXP_REPLACE({$column}, '\\\\s+', ' ')) + WHERE {$column} != TRIM({$column}) + OR {$column} REGEXP ' ' + "); + } else { + // TRIM only — no internal whitespace collapse + DB::update(" + UPDATE {$table} + SET {$column} = TRIM({$column}) + WHERE {$column} != TRIM({$column}) + "); + } + + $this->line(" ✓ Normalized {$count} {$table}.{$column} values"); + } + } + + // ───────────────────────────────────────────── + // Step 1: Countries + // ───────────────────────────────────────────── + + private function mergeCountries(): void + { + // Pass 1: Merge by country name + $this->info(' Pass 1: Merge by country name'); + $this->mergeCountriesByName(); + + // Pass 2: Merge by shortcode (catches "United States" vs "USA" etc.) + $this->info(' Pass 2: Merge by shortcode'); + $this->mergeCountriesByShortcode(); + } + + private function mergeCountriesByName(): void + { + $duplicates = DB::select(" + SELECT country, COUNT(*) as cnt + FROM countries + GROUP BY country + HAVING cnt > 1 + "); + + if (empty($duplicates)) { + $this->info(' No duplicate country names found'); + return; + } + + foreach ($duplicates as $dup) { + $candidates = DB::select(" + SELECT c.id, c.country, c.shortcode, c.manual_verify, + (SELECT COUNT(*) FROM photos WHERE country_id = c.id) as photo_count, + (SELECT COUNT(*) FROM states WHERE country_id = c.id) as child_count + FROM countries c + WHERE c.country = ? + ORDER BY c.manual_verify DESC, photo_count DESC, child_count DESC, c.id ASC + ", [$dup->country]); + + if (count($candidates) < 2) { + continue; + } + + $keeper = $candidates[0]; + + for ($i = 1; $i < count($candidates); $i++) { + $loser = $candidates[$i]; + + if (!$this->dryRun) { + $exists = DB::table('countries')->where('id', $loser->id)->exists(); + if (!$exists) { + continue; + } + } + + $this->mergeEntity('country', $keeper->id, $loser->id, $keeper->country); + } + } + } + + private function mergeCountriesByShortcode(): void + { + $duplicates = DB::select(" + SELECT shortcode, COUNT(*) as cnt + FROM countries + WHERE shortcode IS NOT NULL AND shortcode != '' + GROUP BY shortcode + HAVING cnt > 1 + "); + + if (empty($duplicates)) { + $this->info(' No duplicate shortcodes found'); + return; + } + + $this->info(" Found " . count($duplicates) . " duplicate shortcode group(s)"); + + foreach ($duplicates as $dup) { + $candidates = DB::select(" + SELECT c.id, c.country, c.shortcode, c.manual_verify, + (SELECT COUNT(*) FROM photos WHERE country_id = c.id) as photo_count, + (SELECT COUNT(*) FROM states WHERE country_id = c.id) as child_count + FROM countries c + WHERE c.shortcode = ? + ORDER BY c.manual_verify DESC, photo_count DESC, child_count DESC, c.id ASC + ", [$dup->shortcode]); + + if (count($candidates) < 2) { + continue; + } + + $keeper = $candidates[0]; + $names = array_map(fn($c) => "\"{$c->country}\"", $candidates); + $this->info(" Shortcode \"{$dup->shortcode}\": merging " . implode(', ', $names) . " → keeper #{$keeper->id} \"{$keeper->country}\""); + + for ($i = 1; $i < count($candidates); $i++) { + $loser = $candidates[$i]; + + if (!$this->dryRun) { + $exists = DB::table('countries')->where('id', $loser->id)->exists(); + if (!$exists) { + continue; + } + } + + $this->mergeEntity('country', $keeper->id, $loser->id, "{$keeper->country} (shortcode:{$dup->shortcode})"); + } + } + } + + // ───────────────────────────────────────────── + // Step 2: States + // ───────────────────────────────────────────── + + private function mergeStates(): void + { + $duplicates = DB::select(" + SELECT country_id, state, COUNT(*) as cnt + FROM states + GROUP BY country_id, state + HAVING cnt > 1 + "); + + if (empty($duplicates)) { + $this->info(' No duplicate states found'); + return; + } + + foreach ($duplicates as $dup) { + $candidates = DB::select(" + SELECT s.id, s.state, s.country_id, s.manual_verify, + (SELECT COUNT(*) FROM photos WHERE state_id = s.id) as photo_count, + (SELECT COUNT(*) FROM cities WHERE state_id = s.id) as child_count + FROM states s + WHERE s.country_id = ? AND s.state = ? + ORDER BY s.manual_verify DESC, photo_count DESC, child_count DESC, s.id ASC + ", [$dup->country_id, $dup->state]); + + if (count($candidates) < 2) { + continue; + } + + $keeper = $candidates[0]; + + for ($i = 1; $i < count($candidates); $i++) { + $loser = $candidates[$i]; + + if (!$this->dryRun) { + $exists = DB::table('states')->where('id', $loser->id)->exists(); + if (!$exists) { + continue; + } + } + + $this->mergeEntity('state', $keeper->id, $loser->id, $keeper->state); + } + } + } + + // ───────────────────────────────────────────── + // Step 3: Cities + // ───────────────────────────────────────────── + + private function mergeCities(): void + { + $duplicates = DB::select(" + SELECT state_id, city, COUNT(*) as cnt + FROM cities + GROUP BY state_id, city + HAVING cnt > 1 + ORDER BY cnt DESC + "); + + if (empty($duplicates)) { + $this->info(' No duplicate cities found'); + return; + } + + $this->info(" Found " . count($duplicates) . " duplicate city groups"); + + foreach ($duplicates as $dup) { + $candidates = DB::select(" + SELECT ci.id, ci.city, ci.state_id, ci.manual_verify, + (SELECT COUNT(*) FROM photos WHERE city_id = ci.id) as photo_count + FROM cities ci + WHERE ci.state_id = ? AND ci.city = ? + ORDER BY ci.manual_verify DESC, photo_count DESC, ci.id ASC + ", [$dup->state_id, $dup->city]); + + if (count($candidates) < 2) { + continue; + } + + $keeper = $candidates[0]; + $losersInGroup = count($candidates) - 1; + + if ($dup->cnt > 2) { + $this->info(" Merging {$dup->cnt} \"{$dup->city}\" records (state_id={$dup->state_id}) → keeper #{$keeper->id}"); + } + + for ($i = 1; $i < count($candidates); $i++) { + $loser = $candidates[$i]; + + if (!$this->dryRun) { + $exists = DB::table('cities')->where('id', $loser->id)->exists(); + if (!$exists) { + continue; + } + } + + $this->mergeEntity('city', $keeper->id, $loser->id, $keeper->city); + } + } + } + + // ───────────────────────────────────────────── + // Generic merge logic + // ───────────────────────────────────────────── + + private function mergeEntity(string $type, int $keeperId, int $loserId, string $name): void + { + $photoColumn = match ($type) { + 'country' => 'country_id', + 'state' => 'state_id', + 'city' => 'city_id', + }; + + // Count what we're moving + $photosToMove = DB::table('photos')->where($photoColumn, $loserId)->count(); + + $childrenToMove = 0; + if ($type === 'country') { + $childrenToMove += DB::table('states')->where('country_id', $loserId)->count(); + $childrenToMove += DB::table('cities')->where('country_id', $loserId)->count(); + } elseif ($type === 'state') { + $childrenToMove += DB::table('cities')->where('state_id', $loserId)->count(); + } + + $label = $photosToMove > 0 || $childrenToMove > 0 + ? "({$photosToMove} photos, {$childrenToMove} children)" + : "(empty)"; + + if ($this->dryRun) { + $this->line(" [DRY] Would merge {$type} #{$loserId} → #{$keeperId} \"{$name}\" {$label}"); + return; + } + + DB::transaction(function () use ($type, $keeperId, $loserId, $photoColumn, $photosToMove, $childrenToMove, $name) { + // Move photos + if ($photosToMove > 0) { + DB::table('photos') + ->where($photoColumn, $loserId) + ->update([$photoColumn => $keeperId]); + } + + // Move children — merge collisions first to avoid unique constraint violations + if ($type === 'country') { + $this->mergeChildrenOnCountryMerge($keeperId, $loserId); + } elseif ($type === 'state') { + $this->mergeChildrenOnStateMerge($keeperId, $loserId); + } + + // Delete loser + $table = match ($type) { + 'country' => 'countries', + 'state' => 'states', + 'city' => 'cities', + }; + + DB::table($table)->where('id', $loserId)->delete(); + + // Log merge + $this->logMerge($type, $loserId, $keeperId, "Duplicate \"{$name}\"", $photosToMove, $childrenToMove); + }); + + $this->line(" ✓ Merged {$type} #{$loserId} → #{$keeperId} \"{$name}\" {$label}"); + } + + /** + * When merging two countries, loop through the loser's states. + * For each, find the original (first-created) in the keeper country. + * If it exists, merge the duplicate state's cities and photos into the original. + * If not, just move it across. + */ + private function mergeChildrenOnCountryMerge(int $keeperCountryId, int $loserCountryId): void + { + $loserStates = DB::table('states') + ->where('country_id', $loserCountryId) + ->get(); + + foreach ($loserStates as $loserState) { + // Does the keeper country already have a state with this name? + $original = DB::table('states') + ->where('country_id', $keeperCountryId) + ->where('state', $loserState->state) + ->orderBy('id') + ->first(); + + if ($original) { + // Original exists — merge this duplicate state into it + $this->mergeChildState($original->id, $loserState->id, $loserState->state); + } else { + // No collision — just move the state to the keeper country + DB::table('states')->where('id', $loserState->id)->update(['country_id' => $keeperCountryId]); + } + } + + // Move any cities still referencing the loser country + DB::table('cities')->where('country_id', $loserCountryId)->update(['country_id' => $keeperCountryId]); + } + + /** + * Merge a duplicate state into the original. + * First handles city collisions within, then moves remaining cities, then deletes. + */ + private function mergeChildState(int $originalStateId, int $duplicateStateId, string $stateName): void + { + // Move photos pointing at the duplicate state to the original + $photosMoved = DB::table('photos')->where('state_id', $duplicateStateId)->count(); + if ($photosMoved > 0) { + DB::table('photos')->where('state_id', $duplicateStateId)->update(['state_id' => $originalStateId]); + } + + // Merge cities within — same pattern + $this->mergeChildrenOnStateMerge($originalStateId, $duplicateStateId); + + // Delete the now-empty duplicate state + DB::table('states')->where('id', $duplicateStateId)->delete(); + + $this->logMerge('state', $duplicateStateId, $originalStateId, "Child merge during country merge: \"{$stateName}\"", $photosMoved); + $this->line(" ↳ Merged child state #{$duplicateStateId} → #{$originalStateId} \"{$stateName}\" ({$photosMoved} photos)"); + } + + /** + * When merging two states, loop through the loser's cities. + * For each, find the original (first-created) in the keeper state. + * If it exists, move the duplicate's photos to the original and delete it. + * If not, just move the city across. + */ + private function mergeChildrenOnStateMerge(int $originalStateId, int $duplicateStateId): void + { + $duplicateCities = DB::table('cities') + ->where('state_id', $duplicateStateId) + ->get(); + + foreach ($duplicateCities as $dupCity) { + // Does the original state already have a city with this name? + $original = DB::table('cities') + ->where('state_id', $originalStateId) + ->where('city', $dupCity->city) + ->orderBy('id') + ->first(); + + if ($original) { + // Original exists — move photos and delete duplicate + $photosMoved = DB::table('photos')->where('city_id', $dupCity->id)->count(); + if ($photosMoved > 0) { + DB::table('photos')->where('city_id', $dupCity->id)->update(['city_id' => $original->id]); + } + + DB::table('cities')->where('id', $dupCity->id)->delete(); + + $this->logMerge('city', $dupCity->id, $original->id, "Child merge during state merge: \"{$dupCity->city}\"", $photosMoved); + $this->line(" ↳ Merged child city #{$dupCity->id} → #{$original->id} \"{$dupCity->city}\" ({$photosMoved} photos)"); + } else { + // No collision — just move the city to the original state + DB::table('cities')->where('id', $dupCity->id)->update(['state_id' => $originalStateId]); + } + } + } + + // ───────────────────────────────────────────── + // Step 4: "not found" → Unknown + // ───────────────────────────────────────────── + + private function cleanNotFound(): void + { + $notFoundCities = DB::select(" + SELECT state_id, COUNT(*) as cnt + FROM cities + WHERE city = 'not found' + GROUP BY state_id + "); + + if (empty($notFoundCities)) { + $this->info(' No "not found" cities'); + return; + } + + foreach ($notFoundCities as $group) { + $stateId = $group->state_id; + $count = $group->cnt; + + // Find or use the first one as keeper, rename to "Unknown" + $keeper = DB::table('cities') + ->where('city', 'not found') + ->where('state_id', $stateId) + ->orderBy('id') + ->first(); + + if (!$keeper) { + continue; + } + + // Also check if an "Unknown" city already exists in this state + $existingUnknown = DB::table('cities') + ->where('city', 'Unknown') + ->where('state_id', $stateId) + ->first(); + + $targetId = $existingUnknown ? $existingUnknown->id : $keeper->id; + + if ($this->dryRun) { + $this->line(" [DRY] Would merge {$count} \"not found\" cities in state_id={$stateId} → #{$targetId} \"Unknown\""); + continue; + } + + DB::transaction(function () use ($stateId, $targetId, $keeper, $existingUnknown, $count) { + // Move all photos from "not found" cities to target + $loserIds = DB::table('cities') + ->where('city', 'not found') + ->where('state_id', $stateId) + ->where('id', '!=', $targetId) + ->pluck('id') + ->toArray(); + + // If keeper IS the target (no existing Unknown), rename it + if (!$existingUnknown) { + DB::table('cities')->where('id', $targetId)->update(['city' => 'Unknown']); + } + + if (!empty($loserIds)) { + foreach ($loserIds as $loserId) { + $photosMoved = DB::table('photos') + ->where('city_id', $loserId) + ->count(); + + DB::table('photos') + ->where('city_id', $loserId) + ->update(['city_id' => $targetId]); + + $this->logMerge('city', $loserId, $targetId, "\"not found\" → Unknown in state_id={$stateId}", $photosMoved); + } + + DB::table('cities') + ->whereIn('id', $loserIds) + ->delete(); + } elseif (!$existingUnknown) { + // Just the rename, no merging needed — log as rename + $this->logMerge('city', $keeper->id, $targetId, "Renamed \"not found\" → \"Unknown\"", 0); + } + }); + + $this->line(" ✓ Cleaned {$count} \"not found\" → Unknown in state_id={$stateId}"); + } + } + + // ───────────────────────────────────────────── + // Step 5: Orphans + // ───────────────────────────────────────────── + + private function deleteOrphans(): void + { + // Orphaned cities (no photos) + $orphanedCities = DB::select(" + SELECT COUNT(*) as cnt FROM cities c + WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.city_id = c.id) + "); + $cityCount = $orphanedCities[0]->cnt ?? 0; + + // Orphaned states (no photos AND no remaining cities) + $orphanedStates = DB::select(" + SELECT COUNT(*) as cnt FROM states s + WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.state_id = s.id) + AND NOT EXISTS (SELECT 1 FROM cities c WHERE c.state_id = s.id) + "); + $stateCount = $orphanedStates[0]->cnt ?? 0; + + $this->info(" Orphaned cities: {$cityCount}"); + $this->info(" Orphaned states (no photos, no cities): {$stateCount}"); + + if ($cityCount === 0 && $stateCount === 0) { + $this->info(' Nothing to delete'); + return; + } + + if ($this->dryRun) { + $this->line(" [DRY] Would delete {$cityCount} orphaned cities and {$stateCount} orphaned states"); + return; + } + + // Delete cities first (they reference states) + if ($cityCount > 0) { + $deleted = DB::delete(" + DELETE c FROM cities c + LEFT JOIN photos p ON p.city_id = c.id + WHERE p.id IS NULL + "); + $this->line(" ✓ Deleted {$deleted} orphaned cities"); + } + + // Then states (only those with no photos AND no remaining cities) + if ($stateCount > 0) { + $deleted = DB::delete(" + DELETE s FROM states s + LEFT JOIN photos p ON p.state_id = s.id + LEFT JOIN cities c ON c.state_id = s.id + WHERE p.id IS NULL AND c.id IS NULL + "); + $this->line(" ✓ Deleted {$deleted} orphaned states"); + } + } + + // ───────────────────────────────────────────── + // Step 6: Unique constraints + // ───────────────────────────────────────────── + + private function addUniqueConstraints(): void + { + $constraints = [ + ['countries', 'uq_country_shortcode', 'ALTER TABLE countries ADD UNIQUE INDEX uq_country_shortcode (shortcode)'], + ['states', 'uq_state_country', 'ALTER TABLE states ADD UNIQUE INDEX uq_state_country (country_id, state)'], + ['cities', 'uq_city_state', 'ALTER TABLE cities ADD UNIQUE INDEX uq_city_state (state_id, city)'], + ]; + + foreach ($constraints as [$table, $indexName, $sql]) { + // Check if index already exists + $existing = DB::select(" + SHOW INDEX FROM {$table} WHERE Key_name = ? + ", [$indexName]); + + if (!empty($existing)) { + $this->info(" ✓ {$indexName} already exists"); + continue; + } + + // Verify no remaining duplicates before adding constraint + $dupeCheck = match ($table) { + 'countries' => DB::select("SELECT shortcode, COUNT(*) as cnt FROM countries GROUP BY shortcode HAVING cnt > 1"), + 'states' => DB::select("SELECT country_id, state, COUNT(*) as cnt FROM states GROUP BY country_id, state HAVING cnt > 1"), + 'cities' => DB::select("SELECT state_id, city, COUNT(*) as cnt FROM cities GROUP BY state_id, city HAVING cnt > 1"), + }; + + if (!empty($dupeCheck)) { + $this->error(" ✗ Cannot add {$indexName} — " . count($dupeCheck) . " duplicate group(s) remain!"); + foreach ($dupeCheck as $d) { + $this->error(" " . json_encode($d)); + } + continue; + } + + if ($this->dryRun) { + $this->line(" [DRY] Would add {$indexName}"); + continue; + } + + DB::statement($sql); + $this->line(" ✓ Added {$indexName}"); + } + } + + // ───────────────────────────────────────────── + // Step 7: Tier consistency repair + // ───────────────────────────────────────────── + + private function repairTierConsistency(): void + { + // Canonical source of truth: state → city → photo (top-down validation). + // First fix broken references in the location tables themselves, + // then propagate correct values to photos. + + // Pass 0: Detect cities referencing non-existent states + $brokenCities = DB::selectOne(" + SELECT COUNT(*) as cnt + FROM cities c + LEFT JOIN states s ON s.id = c.state_id + WHERE s.id IS NULL + "); + $brokenCityCount = $brokenCities->cnt ?? 0; + + if ($brokenCityCount > 0) { + $this->warn(" ⚠ {$brokenCityCount} cities reference non-existent states — these photos will be skipped"); + + // Log the affected photo count for visibility + $affectedPhotos = DB::selectOne(" + SELECT COUNT(*) as cnt + FROM photos p + JOIN cities c ON c.id = p.city_id + LEFT JOIN states s ON s.id = c.state_id + WHERE s.id IS NULL + "); + $this->warn(" ⚠ {$affectedPhotos->cnt} photos affected by broken city→state references"); + } + + // Pass 1: Fix cities.country_id to match their state's country_id + // (only for cities that have a valid state reference) + $cityTableMismatch = DB::selectOne(" + SELECT COUNT(*) as cnt + FROM cities c + JOIN states s ON s.id = c.state_id + WHERE c.country_id != s.country_id + "); + + $cityTableCount = $cityTableMismatch->cnt ?? 0; + + if ($cityTableCount > 0) { + if ($this->dryRun) { + $this->line(" [DRY] Would fix {$cityTableCount} cities where country_id doesn't match state's country_id"); + } else { + DB::update(" + UPDATE cities c + JOIN states s ON s.id = c.state_id + SET c.country_id = s.country_id + WHERE c.country_id != s.country_id + "); + $this->line(" ✓ Fixed {$cityTableCount} cities: country_id aligned with state's country_id"); + } + } else { + $this->info(' ✓ All cities.country_id consistent with states'); + } + + // Pass 2: Fix photos.state_id from their city's state_id + // JOIN states to validate the city's state_id actually exists (FK safety) + $photoStateMismatch = DB::selectOne(" + SELECT COUNT(*) as cnt + FROM photos p + JOIN cities c ON c.id = p.city_id + JOIN states s ON s.id = c.state_id + WHERE p.state_id != c.state_id + "); + + $photoStateCount = $photoStateMismatch->cnt ?? 0; + + if ($photoStateCount > 0) { + if ($this->dryRun) { + $this->line(" [DRY] Would fix {$photoStateCount} photos where state_id doesn't match city's state_id"); + } else { + DB::update(" + UPDATE photos p + JOIN cities c ON c.id = p.city_id + JOIN states s ON s.id = c.state_id + SET p.state_id = c.state_id + WHERE p.state_id != c.state_id + "); + $this->line(" ✓ Fixed {$photoStateCount} photos: state_id aligned with city's state_id"); + } + } else { + $this->info(' ✓ All photos.state_id consistent with cities'); + } + + // Pass 3: Fix photos.country_id from their city's country_id + // (city.country_id is now guaranteed correct from Pass 1) + // JOIN states to validate the full chain + $photoCountryMismatch = DB::selectOne(" + SELECT COUNT(*) as cnt + FROM photos p + JOIN cities c ON c.id = p.city_id + JOIN states s ON s.id = c.state_id + WHERE p.country_id != c.country_id + "); + + $photoCountryCount = $photoCountryMismatch->cnt ?? 0; + + if ($photoCountryCount > 0) { + if ($this->dryRun) { + $this->line(" [DRY] Would fix {$photoCountryCount} photos where country_id doesn't match city's country_id"); + } else { + DB::update(" + UPDATE photos p + JOIN cities c ON c.id = p.city_id + JOIN states s ON s.id = c.state_id + SET p.country_id = c.country_id + WHERE p.country_id != c.country_id + "); + $this->line(" ✓ Fixed {$photoCountryCount} photos: country_id aligned with city's country_id"); + } + } else { + $this->info(' ✓ All photos.country_id consistent with cities'); + } + } + + // ───────────────────────────────────────────── + // Verification + // ───────────────────────────────────────────── + + private function verifyIntegrity(string $afterStep): void + { + if ($this->dryRun) { + return; + } + + $currentPhotos = DB::table('photos')->count(); + + if ($currentPhotos !== $this->totalPhotosBefore) { + $this->error(" ✗ PHOTO COUNT CHANGED after {$afterStep}! Before: {$this->totalPhotosBefore}, Now: {$currentPhotos}"); + throw new \RuntimeException("ABORTING — photo count changed after {$afterStep}"); + } + + // Check broken FKs + $broken = DB::select(" + SELECT 'country' as type, COUNT(*) as cnt FROM photos p + WHERE NOT EXISTS (SELECT 1 FROM countries c WHERE c.id = p.country_id) + UNION ALL + SELECT 'state', COUNT(*) FROM photos p + WHERE NOT EXISTS (SELECT 1 FROM states s WHERE s.id = p.state_id) + UNION ALL + SELECT 'city', COUNT(*) FROM photos p + WHERE NOT EXISTS (SELECT 1 FROM cities c WHERE c.id = p.city_id) + "); + + $hasBroken = false; + foreach ($broken as $b) { + if ($b->cnt > 0) { + $this->error(" ✗ {$b->cnt} photos with broken {$b->type}_id after {$afterStep}!"); + $hasBroken = true; + } + } + + if ($hasBroken) { + throw new \RuntimeException("ABORTING — broken foreign keys detected after {$afterStep}"); + } + + // Check tier consistency (photo's country matches state's country, etc.) + $tierMismatch = DB::select(" + SELECT 'state_country' as type, COUNT(*) as cnt + FROM photos p JOIN states s ON s.id = p.state_id + WHERE p.country_id != s.country_id + UNION ALL + SELECT 'city_state', COUNT(*) + FROM photos p JOIN cities c ON c.id = p.city_id + WHERE p.state_id != c.state_id + UNION ALL + SELECT 'city_country', COUNT(*) + FROM photos p JOIN cities c ON c.id = p.city_id + WHERE p.country_id != c.country_id + "); + + $hasMismatch = false; + foreach ($tierMismatch as $m) { + if ($m->cnt > 0) { + $this->warn(" ⚠ {$m->cnt} photos with {$m->type} tier mismatch after {$afterStep}"); + $hasMismatch = true; + } + } + + if (!$hasMismatch) { + $this->info(" ✓ Tier consistency check passed after {$afterStep}"); + } + + $this->info(" ✓ Integrity check passed after {$afterStep}"); + } + + private function finalVerification(): void + { + if ($this->dryRun) { + $this->info(' Dry run complete — no changes were made'); + $this->newLine(); + return; + } + + $currentPhotos = DB::table('photos')->count(); + $countries = DB::table('countries')->count(); + $states = DB::table('states')->count(); + $cities = DB::table('cities')->count(); + + // Check for remaining duplicates + $dupCountries = DB::select("SELECT COUNT(*) as cnt FROM (SELECT country FROM countries GROUP BY country HAVING COUNT(*) > 1) t"); + $dupStates = DB::select("SELECT COUNT(*) as cnt FROM (SELECT country_id, state FROM states GROUP BY country_id, state HAVING COUNT(*) > 1) t"); + $dupCities = DB::select("SELECT COUNT(*) as cnt FROM (SELECT state_id, city FROM cities GROUP BY state_id, city HAVING COUNT(*) > 1) t"); + + $orphanStates = DB::select("SELECT COUNT(*) as cnt FROM states s WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.state_id = s.id)"); + $orphanCities = DB::select("SELECT COUNT(*) as cnt FROM cities c WHERE NOT EXISTS (SELECT 1 FROM photos p WHERE p.city_id = c.id)"); + + // Tier consistency + $tierMismatch = DB::selectOne(" + SELECT + (SELECT COUNT(*) FROM photos p JOIN states s ON s.id = p.state_id WHERE p.country_id != s.country_id) as state_country, + (SELECT COUNT(*) FROM photos p JOIN cities c ON c.id = p.city_id WHERE p.state_id != c.state_id) as city_state, + (SELECT COUNT(*) FROM photos p JOIN cities c ON c.id = p.city_id WHERE p.country_id != c.country_id) as city_country + "); + $totalMismatch = ($tierMismatch->state_country ?? 0) + ($tierMismatch->city_state ?? 0) + ($tierMismatch->city_country ?? 0); + + $this->table( + ['Metric', 'Value'], + [ + ['Photos (should be unchanged)', number_format($currentPhotos) . ($currentPhotos === $this->totalPhotosBefore ? ' ✓' : ' ✗ MISMATCH')], + ['Countries', number_format($countries)], + ['States', number_format($states)], + ['Cities', number_format($cities)], + ['Remaining duplicate countries', $dupCountries[0]->cnt . ($dupCountries[0]->cnt == 0 ? ' ✓' : ' ✗')], + ['Remaining duplicate states', $dupStates[0]->cnt . ($dupStates[0]->cnt == 0 ? ' ✓' : ' ✗')], + ['Remaining duplicate cities', $dupCities[0]->cnt . ($dupCities[0]->cnt == 0 ? ' ✓' : ' ✗')], + ['Tier mismatches', $totalMismatch . ($totalMismatch == 0 ? ' ✓' : ' ✗')], + ['Orphaned states', $orphanStates[0]->cnt], + ['Orphaned cities', $orphanCities[0]->cnt], + ['Total merges performed', $this->mergeCount], + ] + ); + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/LogBrandRelationships.php b/app/Console/Commands/tmp/v5/Migration/LogBrandRelationships.php new file mode 100644 index 000000000..4c4c1c293 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/LogBrandRelationships.php @@ -0,0 +1,578 @@ +info('╔════════════════════════════════════════════════════════╗'); + $this->info('║ EXTRACTING BRAND-OBJECT RELATIONSHIPS ║'); + $this->info('╚════════════════════════════════════════════════════════╝'); + $this->newLine(); + + // Get photos with EITHER brands_id OR custom brand tags + $query = Photo::where(function($q) { + // Official brands via brands_id + $q->whereNotNull('brands_id')->where('brands_id', '>', 0) + // OR custom brand tags + ->orWhereHas('customTags', function($q) { + $q->where('tag', 'like', '%brand%'); + }); + }); + + $limit = (int) $this->option('limit'); + if ($limit > 0) { + $query->limit($limit); + } + + $totalPhotos = $query->count(); + $this->info("Processing {$totalPhotos} photos with brands (official + custom tags)..."); + + if ($totalPhotos === 0) { + $this->warn('No photos with brands found.'); + return 0; + } + + $progressBar = $this->output->createProgressBar($totalPhotos); + $progressBar->setFormat(' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%'); + + // Process photos in chunks - include customTags relationship + $query->with('customTags')->chunkById(500, function ($photos) use ($progressBar) { + foreach ($photos as $photo) { + $this->processPhoto($photo); + $progressBar->advance(); + } + }); + + $progressBar->finish(); + $this->newLine(2); + + // Export comprehensive CSV + $this->exportComprehensiveCSV(); + + // Show detailed summary + $this->displayDetailedSummary(); + + return 0; + } + + protected function processPhoto(Photo $photo): void + { + $this->photosProcessed++; + + $tags = $photo->tags(); + $brandsInPhoto = []; + $objectsInPhoto = []; + + // 1. Extract brands from the official brands table (via tags() method) + if (!empty($tags)) { + foreach ($tags as $categoryKey => $categoryTags) { + if ($categoryKey === 'brands') { + // Handle official brands category + foreach ($categoryTags as $brandKey => $quantity) { + if ($quantity > 0) { + // Preserve exact brand key + $brandKey = $this->normalizeBrandKey($brandKey); + $brandsInPhoto[$brandKey] = true; + $this->brandsFromOfficial[$brandKey] = true; + $this->trackBrandVariation($brandKey); + } + } + continue; + } + + // Process other categories for objects + foreach ($categoryTags as $objectKey => $quantity) { + if ($quantity > 0) { + $normalized = $this->normalizeTagKey($objectKey); + + // Check if it's actually a brand in another category + if ($this->isBrandInBrandslist($normalized)) { + $brandKey = $this->normalizeBrandKey($normalized); + $brandsInPhoto[$brandKey] = true; + $this->trackBrandVariation($brandKey); + } else { + // It's an object - track it globally + $categoryNorm = strtolower(trim($categoryKey)); + $objectNorm = strtolower(trim($normalized)); + $objectFullKey = "{$categoryNorm}.{$objectNorm}"; + + // Track this object globally + $this->allPossibleObjects[$objectFullKey] = true; + $this->objectGlobalCounts[$objectFullKey] = + ($this->objectGlobalCounts[$objectFullKey] ?? 0) + 1; + + // Add to photo's objects for brand association + $objectsInPhoto[] = [ + 'category' => $categoryNorm, + 'object' => $objectNorm, + ]; + + // Track unique categories + $this->uniqueCategories[$categoryNorm] = true; + } + } + } + } + } + + // 2. Extract brands from custom tags (brand:xxx or brand=xxx) + if ($photo->customTags) { + foreach ($photo->customTags as $customTag) { + if (stripos($customTag->tag, 'brand') !== false) { + // Parse brand from tag like "brand:coke" or "brand=pepsi" or "brand:coke=3" + $brandKey = $this->extractBrandFromCustomTag($customTag->tag); + if ($brandKey) { + // Preserve exact brand key + $brandKey = $this->normalizeBrandKey($brandKey); + $brandsInPhoto[$brandKey] = true; + $this->brandsFromCustom[$brandKey] = true; + $this->trackBrandVariation($brandKey); + } + } + } + } + + // Now record brand-object combinations if brands exist in photo + if (!empty($brandsInPhoto)) { + foreach (array_keys($brandsInPhoto) as $brand) { + // Increment photo count for this brand + $this->brandPhotoCounts[$brand] = ($this->brandPhotoCounts[$brand] ?? 0) + 1; + + // Initialize brand if not exists + if (!isset($this->brandObjects[$brand])) { + $this->brandObjects[$brand] = []; + } + + // Record each object found with this brand + foreach ($objectsInPhoto as $obj) { + $objectKey = "{$obj['category']}.{$obj['object']}"; + + // Track co-occurrence count + $this->brandObjects[$brand][$objectKey] = + ($this->brandObjects[$brand][$objectKey] ?? 0) + 1; + + // Track which categories this object belongs to + $this->objectCategories[$objectKey] = $obj['category']; + } + } + } + } + + /** + * Track brand key variations for debugging + */ + protected function trackBrandVariation(string $brandKey): void + { + $lower = strtolower($brandKey); + if (!isset($this->brandKeyVariations[$lower])) { + $this->brandKeyVariations[$lower] = []; + } + $this->brandKeyVariations[$lower][$brandKey] = true; + } + + /** + * Extract brand name from custom tag formats + * Handles: "brand:coke", "brand=pepsi", "brand:coke=3", etc. + */ + protected function extractBrandFromCustomTag(string $tag): ?string + { + // Remove "brand:" or "brand=" prefix + if (preg_match('/^brand[:=](.+)$/i', $tag, $matches)) { + $brandPart = trim($matches[1]); + + // Handle cases like "coke=3" where =3 is quantity + if (strpos($brandPart, '=') !== false) { + [$brandName, $quantity] = explode('=', $brandPart, 2); + return trim($brandName); + } + + return $brandPart; + } + + return null; + } + + protected function exportComprehensiveCSV(): void + { + $timestamp = date('Y-m-d_His'); + $filename = storage_path("app/brand-relationships-{$timestamp}.csv"); + + $handle = fopen($filename, 'w'); + + // Comprehensive header + fputcsv($handle, [ + 'Brand', + 'Category', + 'Object', + 'Count', + 'Brand_Photo_Count', + 'Percentage', + 'Rank_In_Brand' + ]); + + $minCount = (int) $this->option('min-count'); + + // Sort brands preserving case-sensitive order + $sortedBrands = array_keys($this->brandObjects); + usort($sortedBrands, function($a, $b) { + // Check if starts with number + $aIsNum = preg_match('/^[0-9]/', $a); + $bIsNum = preg_match('/^[0-9]/', $b); + + if ($aIsNum && !$bIsNum) return -1; // Numbers come first + if (!$aIsNum && $bIsNum) return 1; + + // Case-sensitive comparison to maintain distinct brands + return strcmp($a, $b); + }); + + $totalExported = 0; + + // Export relationships for each brand + foreach ($sortedBrands as $brand) { + $objects = $this->brandObjects[$brand]; + $brandPhotoCount = $this->brandPhotoCounts[$brand] ?? 1; + + // Sort objects by count (descending) for this brand + arsort($objects); + + $rank = 1; + foreach ($objects as $objectKey => $count) { + // Apply minimum count filter + if ($count < $minCount) { + continue; + } + + // Split category.object + if (strpos($objectKey, '.') !== false) { + [$category, $object] = explode('.', $objectKey, 2); + } else { + $category = 'unknown'; + $object = $objectKey; + } + + $percentage = round(($count / $brandPhotoCount) * 100, 1); + + fputcsv($handle, [ + $brand, + $category, + $object, + $count, + $brandPhotoCount, + $percentage, + $rank + ]); + + $rank++; + $totalExported++; + } + } + + fclose($handle); + + $this->info("📁 CSV saved to: {$filename}"); + $this->line(" Total relationships exported: " . number_format($totalExported)); + + // Also export a summary JSON for quick reference + $this->exportSummaryJson($timestamp); + } + + protected function exportSummaryJson(string $timestamp): void + { + $filename = storage_path("app/brand-summary-{$timestamp}.json"); + + // Sort all possible objects by global count + arsort($this->objectGlobalCounts); + + $summary = [ + 'generated_at' => now()->toIso8601String(), + 'photos_processed' => $this->photosProcessed, + 'total_brands' => count($this->brandObjects), + 'total_unique_categories' => count($this->uniqueCategories), + 'total_unique_objects' => count($this->allPossibleObjects), + 'brands_by_photo_count' => [], + 'top_100_brands' => [], + 'categories' => array_keys($this->uniqueCategories), + 'all_possible_objects' => [], + 'case_variations' => [], + ]; + + // Add case variation information + foreach ($this->brandKeyVariations as $lower => $variations) { + if (count($variations) > 1) { + $summary['case_variations'][$lower] = array_keys($variations); + } + } + + // Add ALL possible objects with their global frequencies + foreach ($this->objectGlobalCounts as $objectKey => $count) { + $summary['all_possible_objects'][] = [ + 'object' => $objectKey, + 'global_count' => $count, + 'global_percentage' => round(($count / $this->photosProcessed) * 100, 2) + ]; + } + + // Sort brands by photo count + arsort($this->brandPhotoCounts); + + // Add ALL brands (not just top 100) + foreach ($this->brandPhotoCounts as $brand => $count) { + $summary['brands_by_photo_count'][] = [ + 'brand' => $brand, + 'photo_count' => $count, + 'unique_objects' => count($this->brandObjects[$brand] ?? []) + ]; + } + + // Also keep top 100 for backward compatibility + $topBrands = array_slice($this->brandPhotoCounts, 0, 100, true); + foreach ($topBrands as $brand => $count) { + $summary['top_100_brands'][] = [ + 'brand' => $brand, + 'photo_count' => $count, + 'unique_objects' => count($this->brandObjects[$brand] ?? []) + ]; + } + + file_put_contents($filename, json_encode($summary, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); + $this->line(" Summary JSON saved to: {$filename}"); + + // Also export a comprehensive objects CSV for reference + $this->exportObjectsCatalog($timestamp); + } + + /** + * Export a catalog of ALL possible objects in the system + */ + protected function exportObjectsCatalog(string $timestamp): void + { + $filename = storage_path("app/objects-catalog-{$timestamp}.csv"); + + $handle = fopen($filename, 'w'); + fputcsv($handle, ['Category', 'Object', 'Global_Count', 'Global_Percentage']); + + // Sort by count descending + arsort($this->objectGlobalCounts); + + foreach ($this->objectGlobalCounts as $objectKey => $count) { + if (strpos($objectKey, '.') !== false) { + [$category, $object] = explode('.', $objectKey, 2); + } else { + $category = 'unknown'; + $object = $objectKey; + } + + $percentage = round(($count / $this->photosProcessed) * 100, 2); + + fputcsv($handle, [ + $category, + $object, + $count, + $percentage + ]); + } + + fclose($handle); + $this->line(" Objects catalog saved to: {$filename}"); + } + + protected function displayDetailedSummary(): void + { + $totalBrands = count($this->brandObjects); + $totalRelationships = array_sum(array_map('count', $this->brandObjects)); + $totalCategories = count($this->uniqueCategories); + $totalUniqueObjects = count($this->allPossibleObjects); + + // Calculate brand source statistics + $officialBrandsCount = count($this->brandsFromOfficial); + $customBrandsCount = count($this->brandsFromCustom); + $bothSourcesCount = count(array_intersect_key($this->brandsFromOfficial, $this->brandsFromCustom)); + + // Check for case variations + $caseCollisions = 0; + foreach ($this->brandKeyVariations as $variations) { + if (count($variations) > 1) { + $caseCollisions++; + } + } + + $this->newLine(); + $this->info('╔════════════════════════════════════════════════════════╗'); + $this->info('║ EXTRACTION SUMMARY ║'); + $this->info('╚════════════════════════════════════════════════════════╝'); + $this->newLine(); + + $this->table(['Metric', 'Value'], [ + ['Photos processed', number_format($this->photosProcessed)], + ['---', '---'], + ['Total unique brands found', number_format($totalBrands)], + ['Brands from official brands table', number_format($officialBrandsCount)], + ['Brands from custom tags', number_format($customBrandsCount)], + ['Brands in both sources', number_format($bothSourcesCount)], + ['---', '---'], + ['Brands with case variations', number_format($caseCollisions)], + ['Total brand-object relationships', number_format($totalRelationships)], + ['Total unique objects in system', number_format($totalUniqueObjects)], + ['Unique categories', number_format($totalCategories)], + ['Avg objects per brand', round($totalRelationships / max(1, $totalBrands), 1)], + ]); + + // Show case variations if any + if ($caseCollisions > 0) { + $this->newLine(); + $this->warn("⚠️ Found {$caseCollisions} brands with case variations:"); + $shown = 0; + foreach ($this->brandKeyVariations as $lower => $variations) { + if (count($variations) > 1 && $shown++ < 10) { + $this->line(" " . implode(' / ', array_keys($variations))); + } + } + if ($shown < $caseCollisions) { + $this->line(" ... and " . ($caseCollisions - $shown) . " more"); + } + } + + // Show top global objects + $this->newLine(); + $this->info('Top 15 Most Common Objects (globally):'); + + arsort($this->objectGlobalCounts); + $topGlobalObjects = array_slice($this->objectGlobalCounts, 0, 15, true); + + $i = 1; + foreach ($topGlobalObjects as $object => $count) { + $percentage = round(($count / $this->photosProcessed) * 100, 1); + $this->line(sprintf( + ' %2d. %-35s %6s photos (%4.1f%%)', + $i++, + $object, + number_format($count), + $percentage + )); + } + + // Show brands grouped by frequency + $this->newLine(); + $this->info('Brand Distribution:'); + + $distribution = [ + '1000+ photos' => 0, + '100-999 photos' => 0, + '10-99 photos' => 0, + '2-9 photos' => 0, + '1 photo' => 0, + ]; + + foreach ($this->brandPhotoCounts as $count) { + if ($count >= 1000) $distribution['1000+ photos']++; + elseif ($count >= 100) $distribution['100-999 photos']++; + elseif ($count >= 10) $distribution['10-99 photos']++; + elseif ($count >= 2) $distribution['2-9 photos']++; + else $distribution['1 photo']++; + } + + foreach ($distribution as $range => $count) { + $this->line(sprintf(' %-15s: %5d brands', $range, $count)); + } + + // Show top brands + $this->newLine(); + $this->info('Top 20 Brands by Photo Count:'); + + arsort($this->brandPhotoCounts); + $topBrands = array_slice($this->brandPhotoCounts, 0, 20, true); + + $i = 1; + foreach ($topBrands as $brand => $photoCount) { + $objectCount = count($this->brandObjects[$brand] ?? []); + // Show source indicator + $source = ''; + if (isset($this->brandsFromOfficial[$brand]) && isset($this->brandsFromCustom[$brand])) { + $source = '[both]'; + } elseif (isset($this->brandsFromOfficial[$brand])) { + $source = '[official]'; + } elseif (isset($this->brandsFromCustom[$brand])) { + $source = '[custom]'; + } + + $this->line(sprintf( + ' %2d. %-20s %6s photos, %3d objects %s', + $i++, + $brand, + number_format($photoCount), + $objectCount, + $source + )); + } + + // Show categories + $this->newLine(); + $this->info('Categories found: ' . implode(', ', array_keys($this->uniqueCategories))); + + $this->newLine(); + $this->comment('Legend: [official] = from brands table, [custom] = from custom tags, [both] = found in both'); + } + + protected function isBrandInBrandslist(string $key): bool + { + static $brandCache = null; + if ($brandCache === null) { + // Load ALL brands preserving case + $allBrands = BrandList::pluck('key')->flip()->all(); + $brandCache = $allBrands; + } + + // Check for exact match (case-sensitive) + return isset($brandCache[$key]); + } + + protected function normalizeTagKey(string $tagKey): string + { + // Handle brand formats like "brand:xxx" or "brand=xxx" + if (preg_match('/^brand[:=](.+)$/i', $tagKey, $matches)) { + return trim($matches[1]); + } + + // Additional normalization can go here + return $tagKey; + } + + protected function normalizeBrandKey(string $brandKey): string + { + // DO NOT normalize to lowercase - preserve exact brand keys + // This prevents collisions between brands that differ only in case + // e.g., "Apple" vs "apple", "MAX" vs "max" + return trim($brandKey); + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/MigrationScript.php b/app/Console/Commands/tmp/v5/Migration/MigrationScript.php new file mode 100644 index 000000000..df60691b6 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/MigrationScript.php @@ -0,0 +1,354 @@ +hasColumn('photos', 'migrated_at')) { + $this->error('Column photos.migrated_at missing. Run migrations first.'); + return self::FAILURE; + } + + $this->ensureProcessingColumns(); + $this->seedReferenceTables(); + TagKeyCache::preloadAll(); + DB::disableQueryLog(); + + // Run migration + $this->runMigration(); + + return self::SUCCESS; + } + + /** + * Run the migration + */ + private function runMigration(): void + { + $this->info("═══════════════════════════════"); + $this->info("Running Migration"); + $this->info("═══════════════════════════════"); + $this->newLine(); + + $memoryLimit = ini_get('memory_limit'); + $this->info("Memory limit: {$memoryLimit}"); + + $specificUserId = $this->option('user'); + + if ($specificUserId) { + $userIds = collect([(int)$specificUserId]); + $photoCount = DB::table('photos') + ->where('user_id', $specificUserId) + ->whereNull('migrated_at') + ->count(); + + if ($photoCount === 0) { + $this->info("User #{$specificUserId} has no photos to migrate."); + return; + } + + $this->info("Processing single user #{$specificUserId} with {$photoCount} photos"); + } else { + $userIds = DB::table('photos') + ->whereNull('migrated_at') + ->distinct() + ->pluck('user_id') + ->sort() + ->values(); + + if ($userIds->isEmpty()) { + $this->info('Nothing to migrate.'); + return; + } + } + + $totalUsers = $userIds->count(); + $this->info("Found {$totalUsers} user(s) to migrate"); + $this->info("Processing batch size: {$this->option('batch')} photos"); + $this->newLine(); + + $globalStartTime = microtime(true); + + foreach ($userIds as $index => $userId) { + if (!$specificUserId && $index > 0) { + $this->newLine(); + $elapsed = microtime(true) - $globalStartTime; + $avgTimePerUser = $elapsed / $index; + $remainingUsers = $totalUsers - $index; + $eta = round($avgTimePerUser * $remainingUsers); + $etaFormatted = $this->formatDuration($eta); + + $this->info("[User " . ($index + 1) . "/{$totalUsers}] Processing user #{$userId} (ETA: {$etaFormatted})"); + } else { + $userLabel = $specificUserId ? "Processing user #{$userId}" : "[User " . ($index + 1) . "/{$totalUsers}] Processing user #{$userId}"; + $this->info($userLabel); + } + + $this->migrateSingleUser($userId); + gc_collect_cycles(); + } + + $this->newLine(2); + $this->displaySummary($globalStartTime); + } + + private function migrateSingleUser(int $userId): void + { + $user = User::find($userId); + $name = $user?->name ?? "User {$userId}"; + + $photoCount = Photo::where('user_id', $userId) + ->whereNull('migrated_at') + ->count(); + + if ($photoCount === 0) { + $this->info(" → No photos to migrate"); + return; + } + + $this->info(" → {$name}: {$photoCount} photos to migrate"); + + $processedForUser = 0; + $failedForUser = 0; + $batchNumber = 0; + + Photo::where('user_id', $userId) + ->whereNull('migrated_at') + ->orderBy('id') + ->chunkById($this->option('batch'), function ($photos) use ( + $userId, + $photoCount, + &$processedForUser, + &$failedForUser, + &$batchNumber + ) { + $batchNumber++; + $batchStartTime = microtime(true); + $memoryBefore = memory_get_usage(true); + $batchSize = $photos->count(); + $successfulPhotos = []; + $batchFailed = 0; + + foreach ($photos as $photo) { + try { + // Update tags + $this->updateTagsService->updateTags($photo); + + // Reload and process metrics + $photo->refresh(); + $this->metricsService->processPhoto($photo); + + $successfulPhotos[] = $photo->id; + $processedForUser++; + $this->processed++; + + } catch (\Throwable $e) { + $failedForUser++; + $this->failed++; + $batchFailed++; + Log::error("Migration failed for photo {$photo->id}", [ + 'user_id' => $userId, + 'error' => $e->getMessage() + ]); + } + } + + // Mark photos as migrated + if (!empty($successfulPhotos)) { + Photo::whereIn('id', $successfulPhotos)->update(['migrated_at' => now()]); + } + + // Display batch stats + $batchDuration = round(microtime(true) - $batchStartTime, 2); + $memoryAfter = memory_get_usage(true); + $memoryDelta = round(($memoryAfter - $memoryBefore) / 1024 / 1024, 1); + $currentMemory = round($memoryAfter / 1024 / 1024, 1); + $photosPerSecond = $batchDuration > 0 ? round($batchSize / $batchDuration, 1) : 0; + $percent = round(($processedForUser / $photoCount) * 100); + + $status = sprintf( + " Batch %d: %d/%d photos (%d%%) | Time: %ss | Speed: %s/s | Memory: %sMB %s", + $batchNumber, + $processedForUser, + $photoCount, + $percent, + $batchDuration, + $photosPerSecond, + $currentMemory, + $memoryDelta >= 0 ? "(+{$memoryDelta}MB)" : "({$memoryDelta}MB)" + ); + + if ($batchFailed > 0) { + $status .= " | Failed: {$batchFailed}"; + } + + $this->info($status); + }); + + // Evaluate achievements + $this->evaluateUserAchievements($userId); + + // Display user summary + $this->displayUserSummary($userId, $processedForUser, $failedForUser); + } + + private function evaluateUserAchievements(int $userId): void + { + try { + $startTime = microtime(true); + $unlocked = $this->achievementEngine->evaluate($userId); + $duration = round(microtime(true) - $startTime, 3); + + if ($unlocked->isNotEmpty()) { + $this->info(" 🏆 Unlocked {$unlocked->count()} achievements in {$duration}s"); + } + } catch (\Throwable $e) { + Log::error("Achievement evaluation failed for user {$userId}", [ + 'error' => $e->getMessage() + ]); + $this->warn(" ⚠️ Achievement evaluation failed"); + } + } + + private function displayUserSummary(int $userId, int $processed, int $failed): void + { + $this->newLine(); + $this->info(" Summary for User #{$userId}:"); + $this->info(" ────────────────────────"); + + $this->info(" ✅ Photos migrated: " . number_format($processed)); + if ($failed > 0) { + $this->error(" ❌ Photos failed: " . number_format($failed)); + } + + // Get metrics from Redis + try { + $metrics = RedisMetricsCollector::getUserMetrics($userId); + $this->info(" 📊 Total uploads: " . number_format($metrics['uploads'])); + $this->info(" ⚡ Total XP: " . number_format($metrics['xp'])); + $this->info(" 📦 Total litter items: " . number_format($metrics['litter'])); + } catch (\Throwable $e) { + Log::warning("Could not fetch Redis stats for user {$userId}"); + } + + $this->newLine(); + } + + private function displaySummary(float $globalStartTime): void + { + $totalElapsed = round(microtime(true) - $globalStartTime, 2); + $totalElapsedFormatted = $this->formatDuration((int)$totalElapsed); + + $this->info('Migration Summary'); + $this->info('═════════════════'); + + $this->table( + ['Metric', 'Value'], + [ + ['Photos processed', number_format($this->processed)], + ['Failed photos', number_format($this->failed) . ($this->failed > 0 ? ' ❌' : ' ✅')], + ['Total time', $totalElapsedFormatted], + ['Average speed', $totalElapsed > 0 ? round($this->processed / $totalElapsed, 1) . ' photos/s' : 'N/A'], + ['Peak memory', round(memory_get_peak_usage(true) / 1024 / 1024, 1) . ' MB'], + ] + ); + } + + private function ensureProcessingColumns(): void + { + $schema = DB::getSchemaBuilder(); + + $columns = [ + 'processed_at' => 'TIMESTAMP', + 'processed_fp' => 'VARCHAR(32)', + 'processed_tags' => 'TEXT', + 'processed_xp' => 'TINYINT(1)' + ]; + + foreach ($columns as $column => $type) { + if (!$schema->hasColumn('photos', $column)) { + DB::statement("ALTER TABLE photos ADD COLUMN {$column} {$type} NULL"); + $this->info("Added column: photos.{$column}"); + } + } + } + + private function seedReferenceTables(): void + { + $this->info("Seeding reference tables..."); + + // Seed tags + if (Category::count() == 0) { + $seeder = new GenerateTagsSeeder(); + $seeder->run(); + $this->info("✓ Tags seeded"); + } else { + $this->info("✓ Tags already exist"); + } + + if (BrandList::count() == 0) { + $brandSeeder = new GenerateBrandsSeeder(); + $brandSeeder->run(); + $this->info("✓ Brands seeded"); + } else { + $this->info("✓ Brands already exist"); + } + + // Seed achievements + $achievementSeeder = new AchievementsSeeder(); + $achievementSeeder->run(); + $this->info("✓ Achievements seeded"); + + $this->newLine(); + } + + private function formatDuration(int $seconds): string + { + if ($seconds < 60) { + return "{$seconds}s"; + } + + $hours = floor($seconds / 3600); + $minutes = floor(($seconds % 3600) / 60); + $remainingSeconds = $seconds % 60; + + if ($hours > 0) { + return sprintf('%dh %dm %ds', $hours, $minutes, $remainingSeconds); + } + + return sprintf('%dm %ds', $minutes, $remainingSeconds); + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/PreMigrationScript.php b/app/Console/Commands/tmp/v5/Migration/PreMigrationScript.php new file mode 100644 index 000000000..e87845165 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/PreMigrationScript.php @@ -0,0 +1,272 @@ + column B) + protected array $categoryMaps = [ + 'alcohol can' => 'alcohol', + 'bikepart' => 'bikeparts', + 'narcotics' => 'drugs', + 'motorzeis' => 'other', + 'bosmaaier' => 'other', + 'firework' => 'fireworks', + 'bycicle' => 'cycling', + 'fastfoos' => 'fastfood', + 'firelwork' => 'fireworks', + 'buildingmaterials'=> 'industrial', + 'medicine' => 'medical', + ]; + + protected array $subcategories = [ + 'icecream' => 'food', + 'dairy' => 'food', + 'fruit' => 'food', + 'fastfood' => 'food', + 'energydrink' => 'softdrinks', + 'bikeparts' => 'cycling', + 'bicycle' => 'cycling', + ]; + + protected array $materialMaps = [ + 'platic' => 'plastic', + 'plasric' => 'plastic', + 'cardboard packaging' => 'cardboard', + ]; + + public function handle(): void + { + $this->error("Temp disabled. We will review this later manually before adding many new tags."); + return; + + // Pre-load known keys from lookup tables (all lowercased) + $this->brandKeys = array_map('strtolower', BrandList::pluck('key')->all()); + $this->categoryKeys = array_map('strtolower', Category::pluck('key')->all()); + $this->objectKeys = array_map('strtolower', LitterObject::pluck('key')->all()); + $this->materialKeys = array_map('strtolower', Materials::pluck('key')->all()); + $this->customTagKeys = array_map('strtolower', CustomTagNew::pluck('key')->all()); + + // Production data was imported into our local custom_tags table. + CustomTag::chunk(100, function ($customTags) { + foreach ($customTags as $customTag) { + $this->processCustomTag($customTag->tag); + } + }); + + sort($this->objectKeys, SORT_STRING); + + foreach ($this->objectKeys as $key) { + $this->info($key); + } + + $this->info("✅ Tag processing completed."); + } + + /** + * Process a raw tag. + * + * If the tag contains a colon and the prefix matches a generic type, + * use that type hint. Otherwise, split and process each segment. + */ + protected function processCustomTag(string $rawTag): void + { + if (str_contains($rawTag, ':')) { + list($prefix, $value) = array_map('trim', explode(':', $rawTag, 2)); + $genericTypes = ['brand', 'category', 'object', 'material']; + if (in_array(strtolower($prefix), $genericTypes)) { + $this->classifyAndLogTag($value, ucfirst($prefix)); + return; + } + foreach (explode(':', $rawTag) as $segment) { + $this->processSegment(trim($segment)); + } + return; + } + + $this->processSegment(trim($rawTag)); + } + + /** + * Process an individual tag segment if it is not generic or ignored. + */ + protected function processSegment(string $segment) + { + $lower = strtolower($segment); + $generic = ['brand', 'brands', 'bn', 'category', 'cat', 'object', 'objects', 'material', 'materials']; + $ignore = array_map('strtolower', CustomTag::notIncludeTags()); + + if (in_array($lower, $generic) || in_array($lower, $ignore)) { + return; + } + + $this->classifyAndLogTag($segment); + } + + /** + * Classifies a tag and logs it. + * + * If a type hint is provided, it is used directly (with mapping for Categories). + * Otherwise, the tag is classified using determineTagType(). + */ + protected function classifyAndLogTag(string $tagString, string $typeHint = null) + { + $cleanTag = trim($tagString); + + // Remove any trailing "=number" suffix (quantity handling removed for simplicity) + if (preg_match('/^(.*)=(\d+)$/', $cleanTag, $matches)) { + $cleanTag = trim($matches[1]); + } + + if ($typeHint) { + $lower = strtolower($cleanTag); + if (strtolower($typeHint) === 'category') { + if (array_key_exists($lower, $this->categoryMaps)) { + $cleanTag = $this->categoryMaps[$lower]; + } + } elseif (strtolower($typeHint) === 'material') { + if (array_key_exists($lower, $this->materialMaps)) { + $cleanTag = $this->materialMaps[$lower]; + } + } + $type = ucfirst($typeHint); + } else { + $result = $this->determineTagType($cleanTag); + $type = $result['type']; + if (isset($result['tag'])) { + $cleanTag = $result['tag']; + } + } + + $this->addTag($cleanTag, $type); + } + + /** + * Classifies a tag based on its value. + * + * Returns an array with the determined type and, if applicable, a canonical tag. + */ + protected function determineTagType(string $tag): array + { + $clean = trim($tag); + $lower = strtolower($clean); + + if (strlen($clean) === 1) { + return ['type' => 'Undefined']; + } + + if (array_key_exists($lower, $this->categoryMaps)) { + return ['type' => 'Category', 'tag' => $this->categoryMaps[$lower]]; + } + if (in_array($lower, $this->brandKeys)) { + return ['type' => 'Brand', 'tag' => $clean]; + } + if (in_array($lower, $this->categoryKeys)) { + return ['type' => 'Category', 'tag' => $clean]; + } + if (in_array($lower, $this->objectKeys)) { + return ['type' => 'Object', 'tag' => $clean]; + } + if (in_array($lower, $this->materialKeys)) { + return ['type' => 'Material', 'tag' => $clean]; + } + + return ['type' => 'CustomTagNew', 'tag' => $clean]; + } + + /** + * Logs the tag and creates a new record if not already processed. + */ + protected function addTag(string $cleanTag, string $type) + { + $lowerKey = strtolower($cleanTag); + $loggedKey = $type . '|' . $lowerKey; + if (in_array($loggedKey, $this->loggedTags)) { + return; + } + + switch ($type) { + case 'Category': + $parentId = null; + if (array_key_exists($lowerKey, $this->subcategories)) { + $parentKey = strtolower($this->subcategories[$lowerKey]); + $parentCategory = Category::firstOrCreate( + ['key' => $parentKey], + ['crowdsourced' => true] + ); + $parentId = $parentCategory->id; + } + if (!in_array($lowerKey, $this->categoryKeys)) { + Category::firstOrCreate( + ['key' => $lowerKey, 'parent_id' => $parentId], + ['crowdsourced' => true] + ); + $this->categoryKeys[] = $lowerKey; + $message = "Created new Category: $lowerKey"; + if ($parentId) { + $message .= " (Parent: $parentKey)"; + } + $this->info($message); + } + break; + case 'Brand': + if (!in_array($lowerKey, $this->brandKeys)) { + BrandList::firstOrCreate(['key' => $lowerKey], ['crowdsourced' => 1]); + $this->brandKeys[] = $lowerKey; + $this->info("Created new Brand: $lowerKey"); + } + break; + case 'Object': + if (!in_array($lowerKey, $this->objectKeys)) { + LitterObject::firstOrCreate(['key' => $lowerKey], ['crowdsourced' => 1]); + $this->objectKeys[] = $lowerKey; + $this->info("Created new Object: $lowerKey"); + } + break; + case 'Material': + if (!in_array($lowerKey, $this->materialKeys)) { + Materials::create(['key' => $lowerKey], ['crowdsourced' => 1]); + $this->materialKeys[] = $lowerKey; + $this->info("Created new Material: $lowerKey"); + } + break; + case 'CustomTagNew': + if (!in_array($lowerKey, $this->customTagKeys)) { + CustomTagNew::firstOrCreate(['key' => $lowerKey], ['crowdsourced' => 1]); + $this->customTagKeys[] = $lowerKey; + $this->info("Created new custom tag: $lowerKey"); + } + break; + default: + break; + } + + $this->loggedTags[] = $loggedKey; + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/ResetV5Migration.php b/app/Console/Commands/tmp/v5/Migration/ResetV5Migration.php new file mode 100644 index 000000000..c9208fd48 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/ResetV5Migration.php @@ -0,0 +1,134 @@ +option('force') && !$this->confirm( + 'This will RESET all v5 migration changes: ' . + 'photos.summary/xp/migrated_at/processed_*, photo_tags, metrics, achievements, Redis. ' . + 'Continue?' + )) { + $this->info('Aborted.'); + return self::SUCCESS; + } + + $this->info('Starting v5 migration reset...'); + + /* ------------------------------------------------------------------ */ + /* 1️⃣ Reset all migration-modified columns on photos table */ + /* ------------------------------------------------------------------ */ + $this->info('Resetting photos table columns...'); + + $columnsToReset = [ + 'summary' => null, + 'xp' => 0, + 'migrated_at' => null, + 'processed_at' => null, + 'processed_fp' => null, + 'processed_tags' => null, + 'processed_xp' => null + ]; + + $updated = DB::table('photos')->update($columnsToReset); + $this->line("✓ Reset {$updated} photo records"); + + /* ------------------------------------------------------------------ */ + /* 2️⃣ Truncate tables populated during migration */ + /* ------------------------------------------------------------------ */ + $this->info('Truncating migration-generated tables...'); + + $tablesToTruncate = [ + 'photo_tags', + 'photo_tag_extra_tags', + 'taggables', + 'metrics', // Time-series metrics data + 'user_achievements', // Achievement unlocks + ]; + + DB::statement('SET FOREIGN_KEY_CHECKS = 0'); + foreach ($tablesToTruncate as $table) { + if (Schema::hasTable($table)) { + DB::table($table)->truncate(); + $this->line("✓ Truncated {$table}"); + } + } + DB::statement('SET FOREIGN_KEY_CHECKS = 1'); + + /* ------------------------------------------------------------------ */ + /* 3️⃣ Clear all Redis metrics and rankings */ + /* ------------------------------------------------------------------ */ + $this->info('Clearing Redis metrics...'); + Redis::flushdb(); + $this->info('Redis db flushed!'); + + /* ------------------------------------------------------------------ */ + /* 4️⃣ Clear Laravel caches used by migration */ + /* ------------------------------------------------------------------ */ + $this->info('Clearing migration caches...'); + + // Clear specific cache tags if they exist + try { + cache()->tags(['achievements'])->flush(); + $this->line('✓ Cleared achievements cache'); + } catch (\Exception $e) { + // Tag might not exist + } + + try { + cache()->tags(['tag_key_cache'])->flush(); + $this->line('✓ Cleared tag key cache'); + } catch (\Exception $e) { + // Tag might not exist + } + + // Clear any cached user metrics + $userIds = DB::table('users')->pluck('id'); + $cacheKeys = []; + foreach ($userIds as $userId) { + $cacheKeys[] = "achievements:unlocked:{$userId}"; + $cacheKeys[] = "user:metrics:{$userId}"; + } + + foreach ($cacheKeys as $key) { + cache()->forget($key); + } + $this->line('✓ Cleared user-specific caches'); + + /* ------------------------------------------------------------------ */ + /* 5️⃣ Summary */ + /* ------------------------------------------------------------------ */ + $this->newLine(); + $this->info('🔄 Reset Summary:'); + $this->info('═════════════════'); + $this->table( + ['Component', 'Status'], + [ + ['Photos table', "✓ Reset {$updated} records"], + ['Photo tags', '✓ Truncated'], + ['Metrics table', '✓ Truncated'], + ['User achievements', '✓ Truncated'], + ['Cache', '✓ Cleared'], + ] + ); + + $this->newLine(); + $this->info('✅ V5 migration has been completely reset.'); + $this->info('You can now run "php artisan olm:v5" to start fresh.'); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/ValidateBrands.php b/app/Console/Commands/tmp/v5/Migration/ValidateBrands.php new file mode 100644 index 000000000..218a78b30 --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/ValidateBrands.php @@ -0,0 +1,349 @@ +startTime = microtime(true); + $this->validator = $validator; + + // Find most recent CSV + $csvFiles = glob(storage_path('app/brand-relationships-*.csv')); + if (empty($csvFiles)) { + $this->error("No CSV files found. Run: php artisan olm:extract-brands"); + return 1; + } + + rsort($csvFiles); + $csvPath = $csvFiles[0]; + $this->info("Using CSV: " . basename($csvPath)); + + // Load brands from CSV + $allBrands = $this->loadBrandsFromCSV($csvPath); + $this->info("Loaded " . count($allBrands) . " brands"); + + // Filter brands based on options + $brands = $this->filterBrands($allBrands); + + if (empty($brands)) { + $this->error("No brands to process based on your filters"); + return 1; + } + + // Apply min-photos filter + $minPhotos = (int) $this->option('min-photos'); + if ($minPhotos > 0) { + $brands = array_filter($brands, fn($b) => ($b['photo_count'] ?? 0) >= $minPhotos); + + if (empty($brands)) { + $this->error("No brands found with at least {$minPhotos} photos"); + return 1; + } + + $this->info("Filtered to " . count($brands) . " brands with at least {$minPhotos} photos"); + } + + // Apply min-count filter and max-objects limit + $minCount = (int) $this->option('min-count'); + $maxObjects = (int) $this->option('max-objects'); + + foreach ($brands as &$brandData) { + // Filter out relationships below minimum count + $filteredObjects = []; + foreach ($brandData['objects'] as $objectKey => $objectInfo) { + // Handle both formats + $count = is_array($objectInfo) ? $objectInfo['count'] : $objectInfo; + if ($count >= $minCount) { + $filteredObjects[$objectKey] = $objectInfo; + } + } + + // Sort by count and limit to max objects + if (is_array(reset($filteredObjects))) { + // New format - sort by count + uasort($filteredObjects, function($a, $b) { + return ($b['count'] ?? 0) <=> ($a['count'] ?? 0); + }); + } else { + // Simple format + arsort($filteredObjects); + } + + $brandData['objects'] = array_slice($filteredObjects, 0, $maxObjects, true); + } + + // Remove brands with no remaining objects + $brands = array_filter($brands, fn($b) => !empty($b['objects'])); + + if ($this->option('dry-run')) { + return $this->handleDryRun($brands); + } + + // Process brands + $this->processBrands($brands); + + return 0; + } + + protected function loadBrandsFromCSV(string $path): array + { + $brands = []; + $handle = fopen($path, 'r'); + $headers = fgetcsv($handle); // Skip header + + while ($row = fgetcsv($handle)) { + // Preserve the original brand key exactly as it appears + // This should match what's in the brandslist table + $brand = $row[0]; + // Only trim quotes if they were added by CSV export + if (substr($brand, 0, 1) === '"' && substr($brand, -1) === '"') { + $brand = substr($brand, 1, -1); + } + + $category = $row[1]; + $object = $row[2]; + $count = (int) $row[3]; + $brandPhotoCount = (int) $row[4]; + $percentage = (float) $row[5]; + + if (!isset($brands[$brand])) { + $brands[$brand] = [ + 'photo_count' => $brandPhotoCount, + 'objects' => [], + 'categories' => [] + ]; + } + + // Store as category.object + $objectKey = "{$category}.{$object}"; + $brands[$brand]['objects'][$objectKey] = [ + 'count' => $count, + 'percentage' => $percentage, + 'category' => $category + ]; + + // Track unique categories for this brand + $brands[$brand]['categories'][$category] = true; + } + + fclose($handle); + + // Convert categories to array + foreach ($brands as &$brand) { + $brand['categories'] = array_keys($brand['categories']); + } + + return $brands; + } + + protected function filterBrands(array $allBrands): array + { + if ($brandKey = $this->option('brand')) { + // Preserve the exact brand key as provided + // The user should provide it as it exists in brandslist + $brandKey = trim($brandKey); + + if (!isset($allBrands[$brandKey])) { + $this->error("Brand '{$brandKey}' not found"); + $this->line("Note: Brand keys are case-sensitive and must match brandslist table exactly"); + + // Help user find similar brands (case-insensitive search) + $this->line("Did you mean one of these?"); + $similar = array_filter(array_keys($allBrands), fn($k) => + stripos($k, substr($brandKey, 0, min(3, strlen($brandKey)))) !== false + ); + foreach (array_slice($similar, 0, 10) as $key) { + $this->line(" - {$key}"); + } + return []; + } + return [$brandKey => $allBrands[$brandKey]]; + + } elseif ($letter = $this->option('letter')) { + // For letter filtering, check first character case-insensitively + $letter = strtolower($letter); + return array_filter($allBrands, fn($b, $key) => + strtolower(substr($key, 0, 1)) === $letter, + ARRAY_FILTER_USE_BOTH + ); + + } elseif ($this->option('all')) { + return $allBrands; + + } elseif ((int) $this->option('min-photos') > 0) { + // If min-photos is specified without other filters, process all brands meeting that threshold + $minPhotos = (int) $this->option('min-photos'); + $this->info("Processing all brands with at least {$minPhotos} photos..."); + return $allBrands; // Return all brands, min-photos filter will be applied next + } + + $this->error('Specify --brand="name", --letter=X, --all, or --min-photos=N'); + return []; + } + + protected function handleDryRun(array $brands): int + { + $this->warn('DRY RUN MODE - No API calls will be made'); + $this->newLine(); + + $totalObjects = array_sum(array_map(fn($b) => count($b['objects']), $brands)); + + // Calculate photo count distribution + $photoDistribution = [ + '1000+' => 0, + '100-999' => 0, + '10-99' => 0, + '2-9' => 0, + '1' => 0 + ]; + + foreach ($brands as $brand) { + $photoCount = $brand['photo_count'] ?? 0; + if ($photoCount >= 1000) $photoDistribution['1000+']++; + elseif ($photoCount >= 100) $photoDistribution['100-999']++; + elseif ($photoCount >= 10) $photoDistribution['10-99']++; + elseif ($photoCount >= 2) $photoDistribution['2-9']++; + else $photoDistribution['1']++; + } + + $this->table(['Metric', 'Value'], [ + ['Brands to process', count($brands)], + ['Total relationships', $totalObjects], + ['Avg objects/brand', round($totalObjects / max(1, count($brands)), 1)], + ['Estimated API cost', '$' . number_format(count($brands) * 0.005, 2)], + ['Estimated time', count($brands) . ' seconds'], + ]); + + $this->newLine(); + $this->info('Photo count distribution:'); + foreach ($photoDistribution as $range => $count) { + if ($count > 0) { + $this->line(sprintf(' %s photos: %d brands', $range, $count)); + } + } + + $this->newLine(); + $this->info('Sample brands to process:'); + $sample = array_slice($brands, 0, 10, true); + foreach ($sample as $brand => $data) { + $this->line(sprintf(' %-20s (%d photos, %d objects)', + $brand, + $data['photo_count'] ?? 0, + count($data['objects']) + )); + } + + return 0; + } + + protected function processBrands(array $brands): void + { + $total = count($brands); + $this->info("Processing {$total} brands..."); + $this->newLine(); + + if (!$this->confirm("Estimated cost: $" . number_format($total * 0.005, 2) . ". Continue?")) { + return; + } + + $bar = $this->output->createProgressBar($total); + $bar->setFormat(' %current%/%max% [%bar%] %percent:3s%% - %message%'); + + $results = []; + $errors = []; + $stats = [ + 'approved_total' => 0, + 'rejected_total' => 0, + ]; + + foreach ($brands as $brandKey => $brandData) { + $bar->setMessage($brandKey); + + try { + // Pass complete brand data including photo count and categories + $result = $this->validator->validateBrand($brandKey, $brandData); + $results[$brandKey] = $result; + $this->apiCalls++; + + // Update stats + $stats['approved_total'] += count($result['valid'] ?? []); + $stats['rejected_total'] += count($result['invalid'] ?? []); + + } catch (\Exception $e) { + $errors[$brandKey] = $e->getMessage(); + $this->newLine(); + $this->error(" ❌ {$brandKey}: " . substr($e->getMessage(), 0, 100)); + } + + $bar->advance(); + usleep(500000); // 0.5s rate limit + } + + $bar->finish(); + $this->newLine(2); + + // Store results + $this->validator->saveResults($results); + + // Display summary + $this->displaySummary($results, $errors, $stats); + } + + protected function displaySummary(array $results, array $errors, array $stats): void + { + $elapsed = microtime(true) - $this->startTime; + $this->estimatedCost = $this->apiCalls * 0.005; + + $this->info('╔════════════════════════════════════════════════════════╗'); + $this->info('║ VALIDATION COMPLETE ║'); + $this->info('╚════════════════════════════════════════════════════════╝'); + $this->newLine(); + + $approvalRate = ($stats['approved_total'] + $stats['rejected_total']) > 0 + ? ($stats['approved_total'] / ($stats['approved_total'] + $stats['rejected_total']) * 100) + : 0; + + $this->table(['Metric', 'Value'], [ + ['Brands processed', count($results)], + ['Failed validations', count($errors)], + ['---', '---'], + ['Relationships approved', $stats['approved_total']], + ['Relationships rejected', $stats['rejected_total']], + ['Approval rate', number_format($approvalRate, 1) . '%'], + ['---', '---'], + ['API calls', $this->apiCalls], + ['Total cost', '$' . number_format($this->estimatedCost, 2)], + ['Total time', gmdate('i:s', (int) $elapsed)], + ]); + + if (count($errors) > 0) { + $this->newLine(); + $this->warn("⚠️ " . count($errors) . " brands failed validation"); + } + + $this->newLine(); + $this->info("✅ Results saved to: storage/app/brand-validations/"); + $this->line("📁 To generate config, use: php artisan olm:generate-brands-config"); + } +} diff --git a/app/Console/Commands/tmp/v5/Migration/VerifyTagsMigration.php b/app/Console/Commands/tmp/v5/Migration/VerifyTagsMigration.php new file mode 100644 index 000000000..21926eaae --- /dev/null +++ b/app/Console/Commands/tmp/v5/Migration/VerifyTagsMigration.php @@ -0,0 +1,390 @@ +verifier = $verifier; + } + + public function handle() + { + if ($photoId = $this->option('photo')) { + return $this->debugPhoto($photoId); + } + + $userId = $this->option('user'); + $limit = $this->option('limit'); + + if (!$userId) { + $this->error('Please specify a user ID with --user=ID'); + return self::FAILURE; + } + + $this->info("Verifying tag migration for User #{$userId}"); + $this->info("========================================"); + + // Run verification with fixed brand counting + $results = $this->verifyUserFixed($userId, $limit); + + // Display results... + $this->displaySummary($results); + + if (!empty($results['deprecated_tags_used'])) { + $this->displayDeprecatedTags($results['deprecated_tags_used']); + } + + if (!empty($results['autocreated_objects'])) { + $this->displayAutocreatedObjects($results['autocreated_objects']); + } + + if ($results['failed'] > 0) { + $this->displayFailures($results['failures']); + } + + return $results['failed'] === 0 ? self::SUCCESS : self::FAILURE; + } + + protected function verifyUserFixed(int $userId, ?int $limit = null) + { + $query = Photo::where('user_id', $userId) + ->whereNotNull('migrated_at') + ->orderBy('id'); + + if ($limit) { + $query->limit($limit); + } + + $results = [ + 'user_id' => $userId, + 'total_photos' => 0, + 'passed' => 0, + 'failed' => 0, + 'failures' => [], + 'issues_summary' => [], + 'deprecated_tags_used' => [], + 'autocreated_objects' => [] + ]; + + $query->chunk(100, function($photos) use (&$results) { + foreach ($photos as $photo) { + $results['total_photos']++; + + $verification = $this->verifyPhotoFixed($photo); + + if ($verification['passed']) { + $results['passed']++; + } else { + $results['failed']++; + $results['failures'][] = $verification; + + // Track issue types + foreach ($verification['issues'] as $issue) { + $type = $issue['type'] ?? 'unknown'; + $results['issues_summary'][$type] = ($results['issues_summary'][$type] ?? 0) + 1; + } + } + } + }); + + return $results; + } + + protected function verifyPhotoFixed(Photo $photo): array + { + $result = [ + 'photo_id' => $photo->id, + 'passed' => true, + 'issues' => [], + 'diffs' => [ + 'objects' => 0, + 'materials' => 0, + // 'brands' => 0, + 'custom_tags' => 0, + 'total_delta' => 0 + ] + ]; + + // Get OLD tags using the same method as migration + $oldTags = $photo->tags(); + + // Count expected brands from the tags() array, NOT from brands table + $expectedBrands = 0; +// if (isset($oldTags['brands']) && is_array($oldTags['brands'])) { +// foreach ($oldTags['brands'] as $brandKey => $qty) { +// $expectedBrands += (int) $qty; +// } +// } + + // Count actual brands in new PhotoTags +// $actualBrands = DB::table('photo_tag_extra_tags') +// ->whereIn('photo_tag_id', $photo->photoTags->pluck('id')) +// ->where('tag_type', 'brand') +// ->sum('quantity'); + + // Compare +// if ($expectedBrands !== $actualBrands) { +// $result['passed'] = false; +// $result['issues'][] = [ +// 'type' => 'brands_mismatch', +// 'message' => 'brands count mismatch', +// 'expected' => $expectedBrands, +// 'actual' => $actualBrands, +// 'diff' => $actualBrands - $expectedBrands +// ]; +// $result['diffs']['brands'] = $actualBrands - $expectedBrands; +// $result['diffs']['total_delta'] += abs($actualBrands - $expectedBrands); +// } + + // Verify objects are properly migrated + $expectedObjects = 0; + foreach ($oldTags as $category => $items) { + if ($category !== 'brands') { + foreach ($items as $tag => $qty) { + if ((int) $qty > 0) { + $expectedObjects++; + } + } + } + } + + $actualObjects = $photo->photoTags() + ->whereNotNull('litter_object_id') + ->count(); + + if ($expectedObjects !== $actualObjects) { + $result['passed'] = false; + $result['issues'][] = [ + 'type' => 'objects_mismatch', + 'message' => 'object count mismatch', + 'expected' => $expectedObjects, + 'actual' => $actualObjects, + 'diff' => $actualObjects - $expectedObjects + ]; + $result['diffs']['objects'] = $actualObjects - $expectedObjects; + $result['diffs']['total_delta'] += abs($actualObjects - $expectedObjects); + } + + // Check for NULL object IDs (critical issue) + // Excluding brands for now + $brandsCategoryId = Category::where('key', 'brands')->value('id'); + $nullObjectCount = $photo->photoTags() + ->whereNull('litter_object_id') + ->whereNull('custom_tag_primary_id') + ->where(function ($q) use ($brandsCategoryId) { + $q->whereNull('category_id') + ->orWhere('category_id', '!=', $brandsCategoryId); + }) + ->count(); + + if ($nullObjectCount > 0) { + $result['passed'] = false; + $result['issues'][] = [ + 'type' => 'null_objects', + 'message' => "Found {$nullObjectCount} PhotoTags with NULL object IDs", + 'count' => $nullObjectCount + ]; + } + + return $result; + } + + protected function debugPhoto($photoId): int + { + $photo = Photo::with(['photoTags.extraTags'])->find($photoId); + + if (!$photo) { + $this->error("Photo #{$photoId} not found"); + return self::FAILURE; + } + + $this->info("=== DEBUGGING PHOTO #{$photoId} ==="); + $this->info("User: #{$photo->user_id}"); + $this->info("Created: {$photo->created_at}"); + $this->info("Migrated: " . ($photo->migrated_at ?? 'NOT MIGRATED')); + + // Show old tags using tags() method + $this->info("\n📦 OLD TAGS (from tags() method):"); + $this->info("─────────────────────────────────"); + + $oldTags = $photo->tags(); + if (empty($oldTags)) { + $this->line(" No old tags found"); + } else { + foreach ($oldTags as $category => $items) { + $this->line(" {$category}:"); + foreach ($items as $tag => $qty) { + $this->line(" • {$tag}: {$qty}"); + } + } + } + + // Count brands properly +// $expectedBrands = 0; +// if (isset($oldTags['brands'])) { +// foreach ($oldTags['brands'] as $brand => $qty) { +// $expectedBrands += (int) $qty; +// } +// } + + // Show new tags + $this->info("\n📋 NEW TAGS (v5 PhotoTags):"); + $this->info("───────────────────────────"); + + if ($photo->photoTags->isEmpty()) { + $this->line(" No PhotoTags found"); + } else { + foreach ($photo->photoTags as $photoTag) { + $this->line(" PhotoTag #{$photoTag->id}:"); + $this->line(" Category: " . ($photoTag->category->key ?? 'N/A')); + $this->line(" Object: " . ($photoTag->object->key ?? 'N/A')); + $this->line(" Quantity: {$photoTag->quantity}"); + + if ($photoTag->extraTags->isNotEmpty()) { + $this->line(" Extra Tags:"); + foreach ($photoTag->extraTags as $extra) { + $tagName = $this->getExtraTagName($extra); + $this->line(" • {$extra->tag_type}: {$tagName} (qty: {$extra->quantity})"); + } + } + } + } + + // Brand count analysis with correct method +// $this->info("\n🔍 BRAND COUNT ANALYSIS:"); +// $this->info("────────────────────────"); +// +// $actualBrands = DB::table('photo_tag_extra_tags') +// ->whereIn('photo_tag_id', $photo->photoTags->pluck('id')) +// ->where('tag_type', 'brand') +// ->sum('quantity'); +// +// $this->line(" Expected brands (from tags()['brands']): {$expectedBrands}"); +// $this->line(" Actual brands (in PhotoTags): {$actualBrands}"); +// +// if ($expectedBrands !== $actualBrands) { +// $this->error(" ❌ MISMATCH: Difference of " . ($actualBrands - $expectedBrands)); +// } else { +// $this->info(" ✅ Brand counts match!"); +// } + + return self::SUCCESS; + } + + protected function getExtraTagName($extra): string + { + $table = match($extra->tag_type) { + 'brand' => 'brandslist', + 'material' => 'materials', + 'custom_tag' => 'custom_tags_new', + default => null + }; + + if (!$table) return 'unknown'; + + try { + $record = DB::table($table)->find($extra->tag_type_id); + return $record->key ?? "ID:{$extra->tag_type_id}"; + } catch (\Exception $e) { + return "ID:{$extra->tag_type_id}"; + } + } + + // Keep the display methods from original... + protected function displaySummary(array $results): void + { + $this->info("\n📊 Migration Summary:"); + $this->info("─────────────────────"); + + $this->line("Total photos checked: {$results['total_photos']}"); + $this->line("✅ Passed: {$results['passed']}"); + + if ($results['failed'] > 0) { + $this->error("❌ Failed: {$results['failed']}"); + } + + if (!empty($results['issues_summary'])) { + $this->info("\n⚠️ Issues Found:"); + foreach ($results['issues_summary'] as $type => $count) { + $this->line(" • {$type}: {$count} occurrences"); + } + } else { + $this->info("\n✨ No issues found!"); + } + } + + protected function displayDeprecatedTags(array $deprecated): void + { + $this->info("\n🔄 Deprecated Tags Used:"); + $this->info("────────────────────────"); + + $this->table( + ['Old Tag', 'Usage Count'], + collect($deprecated)->map(fn($count, $tag) => [$tag, $count])->toArray() + ); + } + + protected function displayAutocreatedObjects(array $objects): void + { + $this->info("\n🆕 Auto-created Objects:"); + $this->info("────────────────────────"); + + foreach ($objects as $key) { + $this->line(" • {$key}"); + } + + $this->comment("\nThese objects were created during migration as they didn't exist in the database."); + } + + protected function displayFailures(array $failures): void + { + $this->error("\n❌ Failed Photos (showing first 10):"); + $this->error("─────────────────────────────────────"); + + $toShow = array_slice($failures, 0, 10); + + foreach ($toShow as $failure) { + $this->line("\nPhoto #{$failure['photo_id']}:"); + + foreach ($failure['issues'] as $issue) { + $this->line(" • {$issue['message']}"); + + if (isset($issue['expected']) && isset($issue['actual'])) { + $this->line(" Expected: {$issue['expected']}, Actual: {$issue['actual']}, Diff: {$issue['diff']}"); + } + } + + $diffs = $failure['diffs']; + if ($diffs['total_delta'] !== 0) { + // brands={$diffs['brands']} + $this->line(" Totals: Δ objects={$diffs['objects']}, materials={$diffs['materials']}, custom={$diffs['custom_tags']}"); + } + } + + if (count($failures) > 10) { + $this->comment("\n... and " . (count($failures) - 10) . " more failures. Use --output to see all."); + } + } +} diff --git a/app/Console/Commands/tmp/v5/translations.txt b/app/Console/Commands/tmp/v5/translations.txt new file mode 100644 index 000000000..bf61ba2c2 --- /dev/null +++ b/app/Console/Commands/tmp/v5/translations.txt @@ -0,0 +1,171 @@ +'automobile.alloy', +'smoking.ashtray', +'food.bag', +'other.bagsLitter', +'sanitary.bandage', +'automobile.battery', +'electronics.battery', +'automobile.battery', +'electronics.battery', +'alcohol.beer_bottle', +'alcohol.beer_can', +'smoking.bong', +'stationery.book', +'alcohol.bottleTop', +'food.box', +'softdrinks.brokenGlass', +'automobile.bumper', +'electronics.cable', +'other.cableTie', +'other.cableTie', +'other.cableTie', +'food.can', +'automobile.car_part', +'alcohol.cider_bottle', +'alcohol.cider_can', +'smoking.cigarette_box', +'industrial.construction', +'alcohol.cup', +'coffee.cup', +'softdrinks.cup', +'food.cutlery', +'coastal.degraded_bag', +'coastal.degraded_bottle', +'softdrinks.energy_bottle', +'automobile.engine', +'automobile.exhaust', +'softdrinks.fizzy_bottle', +'smoking.grinder', +'food.gum', +'electronics.headphones', +'softdrinks.icedTea_can', +'softdrinks.icedTea_carton', +'softdrinks.iceTea_bottle', +'softdrinks.juice_can', +'softdrinks.juice_carton', +'softdrinks.juice_pouch', +'softdrinks.label', +'electronics.laptop', +'automobile.license_plate', +'coffee.lid', +'food.lid', +'softdrinks.lid', +'automobile.light', +'stationery.magazine', +'stationery.marker', +'smoking.match_box', +'sanitary.medicineBottle', +'automobile.mirror', +'electronics.mobilePhone', +'sanitary.mouthwashBottle', +'stationery.notebook', +'automobile.oil_can', +'industrial.oilDrum', +'other.overflowingBins', +'alcohol.packaging', +'coffee.packaging', +'food.packaging', +'smoking.packaging', +'softdrinks.packaging', +'alcohol.packaging', +'coffee.packaging', +'food.packaging', +'smoking.packaging', +'softdrinks.packaging', +'alcohol.packaging', +'coffee.packaging', +'food.packaging', +'smoking.packaging', +'softdrinks.packaging', +'food.packet', +'industrial.pallet', +'stationery.paperClip', +'stationery.pen', +'stationery.pencil', +'sanitary.pillPack', +'alcohol.pint_glass', +'industrial.pipe', +'smoking.pipe', +'industrial.pipe', +'smoking.pipe', +'softdrinks.plantMilk_carton', +'sanitary.plaster', +'industrial.plastic', +'other.plasticBags', +'coffee.pod', +'other.posters', +'alcohol.pull_ring', +'softdrinks.pullRing', +'other.randomLitter', +'smoking.rollingPapers', +'stationery.rubberBand', +'sanitary.sanitiser', +'alcohol.shot_glass', +'alcohol.sixPackRings', +'coffee.sleeves', +'softdrinks.smoothie_bottle', +'softdrinks.soda_can', +'softdrinks.sparklingWater_can', +'alcohol.spirits_bottle', +'alcohol.spirits_can', +'softdrinks.sports_bottle', +'stationery.stapler', +'alcohol.straw', +'softdrinks.straw', +'alcohol.straw', +'softdrinks.straw', +'alcohol.straw', +'softdrinks.straw', +'softdrinks.straw_packaging', +'sanitary.syringe', +'electronics.tablet', +'food.tinfoil', +'other.trafficCone', +'automobile.tyre', +'smoking.vapeOil', +'smoking.vapePen', +'other.washingUp', +'softdrinks.water_bottle', +'automobile.wheel', +'alcohol.wine_bottle', +'alcohol.wine_glass', +'sanitary.wipes', +'industrial.wire', +'food.wrapper', +'other.appliance' +'electronics.charger', +'sanitary.condom_wrapper', +'industrial.container', +'food.crisps', +'sanitary.dentalFloss', +'sanitary.deodorant_can', +'categories.pets', +'pets.dogshit', +'categories.pets', +'pets.dogshit_in_bag', +'softdrinks.drinkingGlass', +'sanitary.earSwabs', +'other.furniture', +'other.graffiti', +'food.jar', +'softdrinks.juice_bottle', +'other.mattress', +'food.napkin', +'alcohol.other', +'automobile.other', +'coastal.other', +'coffee.other', +'electronics.other', +'food.other', +'industrial.other', +'sanitary.other', +'smoking.other', +'softdrinks.other', +'other.paintCan', +'food.plate', +'sanitary.sanitaryPad', +'coffee.stirrer', +'sanitary.tampon', +'sanitary.toothbrush', +'sanitary.toothpasteBox', +'sanitary.toothpasteTube', diff --git a/app/Enums/Dimension.php b/app/Enums/Dimension.php new file mode 100644 index 000000000..c7288d7ec --- /dev/null +++ b/app/Enums/Dimension.php @@ -0,0 +1,35 @@ + 'litter_objects', + self::CATEGORY => 'categories', + self::MATERIAL => 'materials', + self::BRAND => 'brandslist', + self::CUSTOM_TAG => 'custom_tags_new', + }; + } + + public static function fromTable(string $table): ?self + { + return match($table) { + 'litter_objects' => self::LITTER_OBJECT, + 'categories' => self::CATEGORY, + 'materials' => self::MATERIAL, + 'brandslist' => self::BRAND, + 'custom_tags_new', 'custom_tags' => self::CUSTOM_TAG, + default => null, + }; + } +} diff --git a/app/Enums/LitterModels.php b/app/Enums/LitterModels.php new file mode 100644 index 000000000..069d9007f --- /dev/null +++ b/app/Enums/LitterModels.php @@ -0,0 +1,28 @@ + Materials::class, + self::CUSTOM_TAGS => CustomTagNew::class, + self::BRANDS => BrandList::class, + }; + } +} diff --git a/app/Enums/LocationType.php b/app/Enums/LocationType.php new file mode 100644 index 000000000..32b8289b4 --- /dev/null +++ b/app/Enums/LocationType.php @@ -0,0 +1,127 @@ + null, + self::Country => 'country_id', + self::State => 'state_id', + self::City => 'city_id', + }; + } + + /** + * Get the Redis scope prefix for this location type + */ + public function scopePrefix(int $id = 0): string + { + return match($this) { + self::Global => '{g}', + self::Country => "{c:$id}", + self::State => "{s:$id}", + self::City => "{ci:$id}", + }; + } + + /** + * Get the global ranking key for this location type + */ + public function globalRankingKey(string $metric): string + { + return match($this) { + self::Global => "{g}:rank:$metric", + self::Country => "{g}:rank:c:$metric", + self::State => "{g}:rank:s:$metric", + self::City => "{g}:rank:ci:$metric", + }; + } + + /** + * Get the parent-scoped ranking key + */ + public function parentRankingKey(?int $parentId, string $metric): string + { + return match($this) { + self::Global => "{g}:rank:$metric", + self::Country => "{g}:rank:c:$metric", + self::State => $parentId ? "{c:$parentId}:rank:s:$metric" : "{g}:rank:s:$metric", + self::City => $parentId ? "{s:$parentId}:rank:ci:$metric" : "{g}:rank:ci:$metric", + }; + } + + /** + * Get the model class for this location type + */ + public function modelClass(): ?string + { + return match($this) { + self::Global => null, + self::Country => \App\Models\Location\Country::class, + self::State => \App\Models\Location\State::class, + self::City => \App\Models\Location\City::class, + }; + } + + /** + * Get the parent column name in the database + */ + public function parentColumn(): ?string + { + return match($this) { + self::Global, self::Country => null, + self::State => 'country_id', + self::City => 'state_id', + }; + } + + /** + * Get the parent location type + */ + public function parentType(): ?self + { + return match($this) { + self::Global, self::Country => null, + self::State => self::Country, + self::City => self::State, + }; + } + + /** + * Create from string for backwards compatibility + */ + public static function fromString(string $value): ?self + { + return match(strtolower($value)) { + 'global' => self::Global, + 'country' => self::Country, + 'state' => self::State, + 'city' => self::City, + default => null, + }; + } + + /** + * Convert to string for display + */ + public function toString(): string + { + return match($this) { + self::Global => 'global', + self::Country => 'country', + self::State => 'state', + self::City => 'city', + }; + } +} diff --git a/app/Enums/Timescale.php b/app/Enums/Timescale.php new file mode 100644 index 000000000..b69ae8caf --- /dev/null +++ b/app/Enums/Timescale.php @@ -0,0 +1,12 @@ + 5, + self::Object => 1, + self::CustomTag => 1, + self::Material => 2, + self::Brand => 3, + self::PickedUp => 5, + self::Small => 10, + self::Medium => 25, + self::Large => 50, + self::BagsLitter => 10, + }; + } + + /** + * Map a tag-type string to its XP value. + */ + public static function getTagXp(string $type): int + { + return match ($type) { + 'upload' => self::Upload->xp(), + 'object' => self::Object->xp(), + 'custom_tag' => self::CustomTag->xp(), + 'material' => self::Material->xp(), + 'brand' => self::Brand->xp(), + 'picked_up' => self::PickedUp->xp(), + default => self::Object->xp(), + }; + } + + /** + * Map an object-key string to its XP value (with overrides). + */ + public static function getObjectXp(string $key): int + { + return match ($key) { + 'small' => self::Small->xp(), + 'medium' => self::Medium->xp(), + 'large' => self::Large->xp(), + 'bagsLitter' => self::BagsLitter->xp(), + default => self::Object->xp(), + }; + } +} diff --git a/app/Events/AchievementsUnlocked.php b/app/Events/AchievementsUnlocked.php new file mode 100644 index 000000000..47f19cc34 --- /dev/null +++ b/app/Events/AchievementsUnlocked.php @@ -0,0 +1,14 @@ +badge = $badge; + } + + /** + * Get the channels the event should broadcast on. + */ + public function broadcastOn() + { + return new Channel('main'); + } +} diff --git a/app/Events/Littercoin/LittercoinMined.php b/app/Events/Littercoin/LittercoinMined.php index 4f1c91994..f15f2a007 100644 --- a/app/Events/Littercoin/LittercoinMined.php +++ b/app/Events/Littercoin/LittercoinMined.php @@ -4,8 +4,6 @@ use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; -use Illuminate\Broadcasting\PresenceChannel; -use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; diff --git a/app/Events/Photo/IncrementPhotoMonth.php b/app/Events/Photo/IncrementPhotoMonth.php index 93d49a20a..bedbe8b4f 100644 --- a/app/Events/Photo/IncrementPhotoMonth.php +++ b/app/Events/Photo/IncrementPhotoMonth.php @@ -12,14 +12,17 @@ class IncrementPhotoMonth implements ShouldQueue { use Dispatchable, InteractsWithSockets, SerializesModels; - public $country_id, $state_id, $city_id, $created_at; + public ?int $city_id; + public ?int $state_id; + public ?int $country_id; + public string $created_at; /** * Create a new event instance. * * @return void */ - public function __construct ($country_id, $state_id, $city_id, $created_at) + public function __construct (?int $country_id, ?int $state_id, ?int $city_id, string $created_at) { $this->country_id = $country_id; $this->state_id = $state_id; diff --git a/app/Events/TagsVerifiedByAdmin.php b/app/Events/TagsVerifiedByAdmin.php index c0ba8f683..dc1fb7335 100644 --- a/app/Events/TagsVerifiedByAdmin.php +++ b/app/Events/TagsVerifiedByAdmin.php @@ -3,7 +3,7 @@ namespace App\Events; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; diff --git a/app/Events/UserSignedUp.php b/app/Events/UserSignedUp.php index b44f508cf..04c3a1933 100644 --- a/app/Events/UserSignedUp.php +++ b/app/Events/UserSignedUp.php @@ -4,8 +4,6 @@ use Illuminate\Broadcasting\Channel; use Illuminate\Queue\SerializesModels; -use Illuminate\Broadcasting\PrivateChannel; -use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; @@ -14,7 +12,6 @@ class UserSignedUp implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; - // PROTECTED PRIVATE properties will not be serialized or sent through. public string $now; /** diff --git a/app/Farm.php b/app/Farm.php deleted file mode 100644 index 658545053..000000000 --- a/app/Farm.php +++ /dev/null @@ -1,10 +0,0 @@ - auth()->id(), + 'exif' => $exif + ]); + + // send email to admin to check exif data + + return null; + } + + return Carbon::parse($dateTime); + } +} + +if (!function_exists('getCoordinatesFromExif')) +{ + function getCoordinatesFromPhoto (array $exif): ?array + { + $lat_ref = $exif["GPSLatitudeRef"]; + $lat = $exif["GPSLatitude"]; + $long_ref = $exif["GPSLongitudeRef"]; + $lon = $exif["GPSLongitude"]; + + return dmsToDec($lat, $lon, $lat_ref, $long_ref); + } +} + +if (!function_exists('dmsToDec')) +{ + /** + * Convert Degrees, Minutes and Seconds to Lat, Long + * Cheers to Hassan for this! + * + * "GPSLatitude" => array:3 [ + 0 => "51/1" + 1 => "50/1" + 2 => "888061/1000000" + ] + */ + function dmsToDec ($lat, $lon, $lat_ref, $long_ref): ?array + { + $lat[0] = explode("/", $lat[0]); + $lat[1] = explode("/", $lat[1]); + $lat[2] = explode("/", $lat[2]); + + $lon[0] = explode("/", $lon[0]); + $lon[1] = explode("/", $lon[1]); + $lon[2] = explode("/", $lon[2]); + + $lat[0] = (int)$lat[0][0] / (int)$lat[0][1]; + $lon[0] = (int)$lon[0][0] / (int)$lon[0][1]; + + $lat[1] = (int)$lat[1][0] / (int)$lat[1][1]; + $lon[1] = (int)$lon[1][0] / (int)$lon[1][1]; + + $lat[2] = (int)$lat[2][0] / (int)$lat[2][1]; + $lon[2] = (int)$lon[2][0] / (int)$lon[2][1]; + + $lat = $lat[0]+((($lat[1]*60)+($lat[2]))/3600); + $lon = $lon[0]+((($lon[1]*60)+($lon[2]))/3600); + + if ($lat_ref === "S") $lat = $lat * -1; + if ($long_ref === "W") $lon = $lon * -1; + + return [$lat, $lon]; + } +} + diff --git a/app/Http/Controllers/API/AddTagsToUploadedImageController.php b/app/Http/Controllers/API/AddTagsToUploadedImageController.php index 9793e471a..63d08cc5b 100644 --- a/app/Http/Controllers/API/AddTagsToUploadedImageController.php +++ b/app/Http/Controllers/API/AddTagsToUploadedImageController.php @@ -4,6 +4,7 @@ use App\Models\Photo; use App\Jobs\Api\AddTags; +use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; use App\Http\Requests\Api\AddTagsRequest; @@ -16,7 +17,7 @@ class AddTagsToUploadedImageController extends Controller * * version 2.2 */ - public function __invoke (AddTagsRequest $request) + public function __invoke (AddTagsRequest $request): JsonResponse { $user = auth()->user(); $photo = Photo::find($request->photo_id); @@ -45,9 +46,9 @@ public function __invoke (AddTagsRequest $request) $photo->remaining = !$pickedUp; $photo->save(); - return [ + return response()->json([ 'success' => true, 'msg' => 'dispatched' - ]; + ]); } } diff --git a/app/Http/Controllers/API/DeleteAccountController.php b/app/Http/Controllers/API/DeleteAccountController.php index 98cfbccb9..3cfdfc8a6 100644 --- a/app/Http/Controllers/API/DeleteAccountController.php +++ b/app/Http/Controllers/API/DeleteAccountController.php @@ -221,14 +221,14 @@ public function __invoke (Request $request) } $modelHasRoles = DB::table('model_has_roles') - ->where('model_type', 'App\Models\User\User') + ->where('model_type', 'App\Models\Users\User') ->where('model_id', $userId) ->count(); if ($modelHasRoles > 0) { DB::table('model_has_roles') - ->where('model_type', 'App\Models\User\User') + ->where('model_type', 'App\Models\Users\User') ->where('model_id', $userId) ->delete(); } diff --git a/app/Http/Controllers/API/GetMyPaginatedUploadsController.php b/app/Http/Controllers/API/GetMyPaginatedUploadsController.php deleted file mode 100644 index 1999a1c52..000000000 --- a/app/Http/Controllers/API/GetMyPaginatedUploadsController.php +++ /dev/null @@ -1,80 +0,0 @@ -user(); - - // Default to page 1 if not provided - $currentPage = $request->input('loadPage', 1); - - Paginator::currentPageResolver(function () use ($currentPage) { - return $currentPage; - }); - - $query = Photo::query() - - ->where('user_id', $user->id) - - ->when($request->filterCountry !== 'all', function ($q) use ($request) { - $q->where('country_id', $request->filterCountry); - }) - - ->when($request->filterDateFrom, function ($q) use ($request) { - $q->whereDate('created_at', '>=', $request->filterDateFrom); - }) - - ->when($request->filterDateTo, function ($q) use ($request) { - $q->whereDate('created_at', '<=', $request->filterDateTo); - }) - - // Filter by tags: needs improvement to search by category, item, quantity - // instead of looking at the result_string, we should be looking at the photos relationships - ->when($request->filterTag, function ($q) use ($request) { - $q->where('result_string', 'like', '%' . $request->filterTag . '%'); - }) - - ->when($request->filterCustomTag, function ($q) use ($request) { - $q->whereHas('customTags', function ($q) use ($request) { - $q->where('tag', 'like', '%' . $request->filterCustomTag . '%'); - }); - }); - - - $notInclude = CustomTag::notIncludeTags(); - $query->whereDoesntHave('customTags', function ($q) use ($notInclude) { - $q->whereIn('tag', $notInclude); - }); - - $photos = $query->with(['customTags' => function ($query) use ($notInclude) { - $query->whereNotIn('tag', $notInclude); - }]) - ->orderBy('id', 'desc') - ->paginate($request->paginationAmount); - - return response()->json([ - 'success' => true, - 'photos' => $photos - ]); - } -} diff --git a/app/Http/Controllers/API/GlobalStatsController.php b/app/Http/Controllers/API/GlobalStatsController.php index 5b67bb831..3bf6f43a0 100644 --- a/app/Http/Controllers/API/GlobalStatsController.php +++ b/app/Http/Controllers/API/GlobalStatsController.php @@ -5,7 +5,7 @@ use App\Http\Controllers\Controller; use App\Models\Littercoin; use App\Models\Location\Country; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; class GlobalStatsController extends Controller diff --git a/app/Http/Controllers/API/Tags/GetTagsController.php b/app/Http/Controllers/API/Tags/GetTagsController.php new file mode 100644 index 000000000..aa5e0cca0 --- /dev/null +++ b/app/Http/Controllers/API/Tags/GetTagsController.php @@ -0,0 +1,149 @@ +generateQueryFromRequest($request); + + $rows = $this->loadRowsFromQuery($query, $searchQuery); + + $groupedTags = $this->groupTags($rows); + + return response()->json([ + 'tags' => $groupedTags, + ]); + } + + /** + * Get all tags without grouping + * + * Ordered alphabetically. + */ + public function getAllTags (): JsonResponse { + $categories = Category::select('id', 'key')->orderBy('key')->get(); + + $litterObjects = LitterObject::with(['categories:id,key']) + ->select('id', 'key') + ->orderBy('key') + ->get(); + + $materials = Materials::select('id', 'key')->orderBy('key')->get(); + + $brands = BrandList::select('id', 'key')->orderBy('key')->get(); + + return response()->json([ + 'categories' => $categories, + 'objects' => $litterObjects, + 'materials' => $materials, + 'brands' => $brands + ]); + } + + /** + * Build a query that filters by available models. + */ + protected function generateQueryFromRequest (Request $request): array + { + $categoryKey = $request['category'] ?? null; + $objectKey = $request['object'] ?? null; + $materialsKeys = $request['materials'] ? explode(',', $request['materials']) : null; + $searchQuery = $request['search'] ?? null; + + $query = CategoryObject::query(); + + if ($categoryKey) { + $query->whereHas('category', function($q) use ($categoryKey) { + $q->where('key', $categoryKey); + }); + } + + if ($objectKey) { + $query->whereHas('litterObject', function($q) use ($objectKey) { + $q->where('key', $objectKey) + ->orWhere('key', 'LIKE', "%{$objectKey}%"); + }); + } + + if (!empty($materialsKeys) && $materialsKeys[0] !== '') { + $query->whereHas('materials', function ($q) use ($materialsKeys) { + $q->whereIn('key', $materialsKeys); + }); + } + + if ($searchQuery) { + $query->where(function ($q) use ($searchQuery) { + $q->orWhereHas('category', fn($subQ) => $subQ->where('key', 'LIKE', "{$searchQuery}%")) + ->orWhereHas('litterObject', fn($subQ) => $subQ->where('key', 'LIKE', "{$searchQuery}%")) + ->orWhereHas('materials', fn($subQ) => $subQ->where('key', 'LIKE', "{$searchQuery}%")); + }); + } + + return [$query, $searchQuery]; + } + + /** + * Load the data from the generated query. + * Eager load materials, and filter them by search if it exists. + */ + protected function loadRowsFromQuery ($query, ?string $searchQuery): Collection + { + return $query->with([ + 'category:id,key', + 'litterObject:id,key', + 'materials' => function ($q) use ($searchQuery) { + if ($searchQuery) { + $q->where('key', 'LIKE', $searchQuery.'%'); + } + }, + ]) + ->get(); + } + + protected function groupTags (Collection $rows): Collection + { + return $rows->groupBy(fn($row) => $row->category->key) + ->map(function (Collection $catGroup) { + $category = $catGroup->first()->category; + + // Each pivot record represents a unique (Category, LitterObject) pair. + // Map each to a litter object with its contextual materials. + $litterObjects = $catGroup->map(function ($row) { + return [ + 'id' => $row->litterObject->id, + 'key' => $row->litterObject->key, + 'materials' => $row->materials->map(function ($material) { + return [ + 'id' => $material->id, + 'key' => $material->key, + ]; + }), + ]; + })->sortBy('key')->values(); + + return [ + 'id' => $category->id, + 'key' => $category->key, + 'litter_objects' => $litterObjects, + ]; + }); + } +} diff --git a/app/Http/Controllers/API/Tags/PhotoTagsController.php b/app/Http/Controllers/API/Tags/PhotoTagsController.php new file mode 100644 index 000000000..9efa03d76 --- /dev/null +++ b/app/Http/Controllers/API/Tags/PhotoTagsController.php @@ -0,0 +1,42 @@ +addTagsToPhotoActionNew = $addTagsToPhotoActionNew; + } + + /** + * Attach tags to a photo. + * + * @param PhotoTagsRequest $request + * @return JsonResponse + * @throws \Exception + */ + public function store (PhotoTagsRequest $request): JsonResponse + { + $validatedData = $request->validated(); + + $photoTags = $this->addTagsToPhotoActionNew->run( + Auth::id(), + $validatedData['photo_id'], + $validatedData['tags'] + ); + + return response()->json([ + 'success' => true, + 'photoTags' => $photoTags, + ]); + } +} diff --git a/app/Http/Controllers/API/TeamsController.php b/app/Http/Controllers/API/TeamsController.php index 2ac52c15a..ab8a0884c 100644 --- a/app/Http/Controllers/API/TeamsController.php +++ b/app/Http/Controllers/API/TeamsController.php @@ -16,7 +16,7 @@ use App\Http\Requests\Teams\UpdateTeamRequest; use App\Models\Teams\Team; use App\Models\Teams\TeamType; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; diff --git a/app/Http/Controllers/Achievements/AchievementsController.php b/app/Http/Controllers/Achievements/AchievementsController.php new file mode 100644 index 000000000..378c76285 --- /dev/null +++ b/app/Http/Controllers/Achievements/AchievementsController.php @@ -0,0 +1,219 @@ +user(); + $userId = $user->id; + + // \Log::info('User counts from Redis', RedisMetricsCollector::getUserCounts($userId)); + + // Get cached data + $unlockedIds = $this->repository->getUnlockedAchievementIds($userId); + // $counts = RedisMetricsCollector::getUserCounts($userId); + $counts = 0; + + // Build hierarchical response + $response = [ + 'overview' => $this->buildOverview($unlockedIds, $counts), + 'categories' => $this->buildCategoriesWithObjects($unlockedIds, $counts), + 'summary' => $this->buildSummary($userId) + ]; + + return response()->json($response); + } + + /** + * Build overview section (dimension-wide achievements) + */ + private function buildOverview(array $unlockedIds, array $counts): array + { + return [ + 'uploads' => $this->getDimensionProgress('uploads', null, $unlockedIds, $counts), + 'streak' => $this->getDimensionProgress('streak', null, $unlockedIds, $counts), + 'total_categories' => $this->getDimensionProgress('categories', null, $unlockedIds, $counts), + 'total_objects' => $this->getDimensionProgress('objects', null, $unlockedIds, $counts), + ]; + } + + /** + * Build categories with nested objects + */ + private function buildCategoriesWithObjects(array $unlockedIds, array $counts): array + { + // Get all categories with their objects + $categories = Category::where('crowdsourced', false) + ->with(['litterObjects']) + ->get(); + + $result = []; + + foreach ($categories as $category) { + $categoryData = [ + 'id' => $category->id, + 'key' => $category->key, + 'name' => $category->name ?? $category->key, + 'achievement' => $this->getDimensionProgress('category', $category->id, $unlockedIds, $counts), + 'objects' => [] + ]; + + // Add nested objects + foreach ($category->litterObjects as $object) { + $categoryData['objects'][] = [ + 'id' => $object->id, + 'key' => $object->key, + 'name' => $object->name ?? $object->key, + 'achievement' => $this->getDimensionProgress('object', $object->id, $unlockedIds, $counts) + ]; + } + + // Sort objects by progress (highest first) then by name + usort($categoryData['objects'], function ($a, $b) { + $progressDiff = $b['achievement']['progress'] - $a['achievement']['progress']; + if ($progressDiff !== 0) { + return $progressDiff; + } + return strcmp($a['name'], $b['name']); + }); + + $result[] = $categoryData; + } + + // Sort categories by progress (highest first) then by name + usort($result, function ($a, $b) { + $progressDiff = $b['achievement']['progress'] - $a['achievement']['progress']; + if ($progressDiff !== 0) { + return $progressDiff; + } + return strcmp($a['name'], $b['name']); + }); + + return $result; + } + + /** + * Get progress for a specific dimension/tag combination + */ + private function getDimensionProgress(string $type, ?int $tagId, array $unlockedIds, array $counts): array + { + // Get all achievements for this type/tag combo + $query = DB::table('achievements')->where('type', $type); + + if ($tagId !== null) { + $query->where('tag_id', $tagId); + } else { + $query->whereNull('tag_id'); + } + + $achievements = $query->orderBy('threshold')->get(); + + if ($achievements->isEmpty()) { + return [ + 'progress' => 0, + 'next_threshold' => null, + 'percentage' => 0, + 'unlocked' => [], + 'next' => null + ]; + } + + // Get current progress + $progress = $this->getProgress($type, $tagId, $counts); + + // Find unlocked and next + $unlocked = []; + $next = null; + + foreach ($achievements as $achievement) { + if (in_array($achievement->id, $unlockedIds, true)) { + $unlocked[] = [ + 'id' => $achievement->id, + 'threshold' => $achievement->threshold, + 'metadata' => is_string($achievement->metadata) + ? json_decode($achievement->metadata, true) + : $achievement->metadata + ]; + } elseif ($next === null) { + // First locked achievement is the next target + $next = [ + 'id' => $achievement->id, + 'threshold' => $achievement->threshold, + 'metadata' => is_string($achievement->metadata) + ? json_decode($achievement->metadata, true) + : $achievement->metadata, + 'percentage' => min(100, (int) round(($progress / $achievement->threshold) * 100)) + ]; + } + } + + return [ + 'progress' => $progress, + 'next_threshold' => $next ? $next['threshold'] : null, + 'percentage' => $next ? $next['percentage'] : 100, + 'unlocked' => $unlocked, + 'next' => $next + ]; + } + + /** + * Get progress value for specific type/tag + */ + private function getProgress(string $type, ?int $tagId, array $counts): int + { + return match ($type) { + 'uploads' => (int) ($counts['uploads'] ?? 0), + 'streak' => (int) ($counts['streak'] ?? 0), + 'object' => (int) ($counts['objects'][$tagId ?? ''] ?? 0), + 'objects' => array_sum($counts['objects'] ?? []), + 'category' => (int) ($counts['categories'][$tagId ?? ''] ?? 0), + 'categories' => array_sum($counts['categories'] ?? []), + default => 0, + }; + } + + /** + * Build summary statistics + */ + private function buildSummary(int $userId): array + { + $total = DB::table('achievements') + ->whereIn('type', self::ALLOWED_TYPES) + ->count(); + + $unlockedTotal = DB::table('user_achievements') + ->join('achievements', 'user_achievements.achievement_id', '=', 'achievements.id') + ->where('user_achievements.user_id', $userId) + ->whereIn('achievements.type', self::ALLOWED_TYPES) + ->count(); + + return [ + 'total' => $total, + 'unlocked' => $unlockedTotal, + 'percentage' => $total > 0 ? (int) round(($unlockedTotal / $total) * 100) : 0, + ]; + } +} diff --git a/app/Http/Controllers/Admin/AdminResetTagsController.php b/app/Http/Controllers/Admin/AdminResetTagsController.php index 809572fcb..1bb4a2468 100644 --- a/app/Http/Controllers/Admin/AdminResetTagsController.php +++ b/app/Http/Controllers/Admin/AdminResetTagsController.php @@ -8,7 +8,7 @@ use App\Actions\Photos\DeleteTagsFromPhotoAction; use App\Http\Controllers\Controller; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redis; use Illuminate\Support\Facades\Route; diff --git a/app/Http/Controllers/Admin/GetNextImageToVerifyController.php b/app/Http/Controllers/Admin/GetNextImageToVerifyController.php index b2a34eefa..a82d4d2b3 100644 --- a/app/Http/Controllers/Admin/GetNextImageToVerifyController.php +++ b/app/Http/Controllers/Admin/GetNextImageToVerifyController.php @@ -4,49 +4,32 @@ use App\Models\Photo; use App\Http\Requests\GetImageForVerificationRequest; - use App\Http\Controllers\Controller; - +use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Redis; use Illuminate\Database\Eloquent\Builder; class GetNextImageToVerifyController extends Controller { - /** - * Get the next image to verify - * - * @param GetImageForVerificationRequest $request - * @return array - */ - public function __invoke (GetImageForVerificationRequest $request): array + public function __invoke (GetImageForVerificationRequest $request): JsonResponse { // Photos that are uploaded and tagged come first - /** @var Photo $photo */ $photo = $this->filterPhotos() ->when($request->skip, function ($q) use ($request) { $q->skip((int) $request->skip); }) - ->where('verification', 0.1) + ->where(function ($query) { + $query->where('verification', 0) + ->orWhere('verification', 0.1); + }) ->first(); if (!$photo) { - // Photos that have been uploaded, but not tagged or submitted for verification - /** @var Photo $photo */ - $photo = $this->filterPhotos() - ->when($request->skip, function ($q) use ($request) { - $q->skip($request->skip); - }) - ->where('verification', 0) - ->first(); - } - - if (!$photo) - { - return [ + return response()->json([ 'success' => false, 'msg' => 'photo not found' - ]; + ]); } // Load the tags for the photo @@ -80,18 +63,18 @@ public function __invoke (GetImageForVerificationRequest $request): array $userVerificationCount = Redis::hget("user_verification_count", $photo->user_id); } - return [ + return response()->json([ 'photo' => $photo, 'photosNotProcessed' => $photosNotProcessed, 'photosAwaitingVerification' => $photosAwaitingVerification, 'userVerificationCount' => $userVerificationCount, 'photosNotProcessedForAdminTagging' => $photosNotProcessedForAdminTagging - ]; + ]); } /** * Generates a query builder with filtered photos - * @return Builder|mixed + * @return Builder */ private function filterPhotos(): Builder { diff --git a/app/Http/Controllers/Admin/UpdateTagsController.php b/app/Http/Controllers/Admin/UpdateTagsController.php index 64670bbec..444e788a3 100644 --- a/app/Http/Controllers/Admin/UpdateTagsController.php +++ b/app/Http/Controllers/Admin/UpdateTagsController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers\Admin; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use App\Actions\CalculateTagsDifferenceAction; use App\Traits\AddTagsTrait; use App\Events\TagsVerifiedByAdmin; diff --git a/app/Http/Controllers/Admin/VerifyImageWithTagsController.php b/app/Http/Controllers/Admin/VerifyImageWithTagsController.php index 83ace580b..0efd4d317 100644 --- a/app/Http/Controllers/Admin/VerifyImageWithTagsController.php +++ b/app/Http/Controllers/Admin/VerifyImageWithTagsController.php @@ -7,7 +7,7 @@ use App\Events\TagsVerifiedByAdmin; use App\Http\Controllers\Controller; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 2a9f9cf42..3909090d7 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -10,7 +10,7 @@ use App\Events\ImageDeleted; use App\Models\Littercoin; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use App\Traits\AddTagsTrait; @@ -106,7 +106,6 @@ public function getUserCount () */ public function verify (Request $request): JsonResponse { - /** @var Photo $photo */ $photo = Photo::findOrFail($request->photoId); $this->deletePhotoAction->run($photo); @@ -185,7 +184,6 @@ public function destroy (Request $request): JsonResponse */ public function updateDelete (Request $request) { - /** @var Photo $photo */ $photo = Photo::find($request->photoId); $this->deletePhotoAction->run($photo); diff --git a/app/Http/Controllers/ApiPhotosController.php b/app/Http/Controllers/ApiPhotosController.php index 2854b3522..e85eeef6a 100644 --- a/app/Http/Controllers/ApiPhotosController.php +++ b/app/Http/Controllers/ApiPhotosController.php @@ -8,7 +8,7 @@ use GeoHash; use Carbon\Carbon; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use App\Jobs\Api\AddTags; @@ -78,7 +78,10 @@ protected function storePhoto (Request $request): Photo $user = auth()->user(); - if (!$user->has_uploaded) $user->has_uploaded = 1; + if (!$user->has_uploaded) { + $user->has_uploaded = 1; + $user->save(); + } Log::channel('photos')->info([ 'app_upload' => $request->all(), @@ -151,7 +154,6 @@ protected function storePhoto (Request $request): Photo ? $request->picked_up : !$user->items_remaining; - /** @var Photo $photo */ $photo = $user->photos()->create([ 'filename' => $imageName, 'datetime' => $date, @@ -232,8 +234,6 @@ protected function storePhoto (Request $request): Photo /** * Upload Photo * - * @param Request $request - * * array ( 'lat' => '55.455525', 'lon' => '-5.713071670000001', @@ -249,8 +249,6 @@ protected function storePhoto (Request $request): Photo 'hashName' => NULL )) ); - * - * @return array */ public function store (Request $request): array { @@ -358,12 +356,10 @@ public function uploadWithOrWithoutTags (UploadPhotoWithOrWithoutTagsRequest $re */ public function check () { - /** @var User $user */ $user = auth()->user(); $photos = $user->photos() ->where('verified', 0) - ->where('verification', 0) ->select('id', 'filename') ->get(); diff --git a/app/Http/Controllers/ApiRegisterController.php b/app/Http/Controllers/ApiRegisterController.php index 016cb1a86..e07382abc 100644 --- a/app/Http/Controllers/ApiRegisterController.php +++ b/app/Http/Controllers/ApiRegisterController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers; -use App\Models\User\User; +use App\Models\Users\User; use App\Events\UserSignedUp; use App\Mail\NewUserRegMail; use Illuminate\Http\JsonResponse; diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index cebad3c3b..09aedce0d 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -180,7 +180,7 @@ protected function sendFailedLoginResponse (Request $request) $errors = [$this->username() => trans('auth.failed')]; // Load user - $user = \App\Models\User\User::where($this->username(), $request->{$this->username()})->first(); + $user = \App\Models\Users\User::where($this->username(), $request->{$this->username()})->first(); // Check if user was successfully loaded, that the password matches // and active is not 1. If so, override the default error message. diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index f9c6ba8a1..d1fee0af6 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Auth; -use App\Models\User\User; +use App\Models\Users\User; use App\Mail\NewUserRegMail; use App\Events\UserSignedUp; use Illuminate\Http\Request; @@ -64,7 +64,7 @@ public function register (Request $request): array 'name' => 'required|min:3|max:25', 'username' => 'required|min:3|max:20|unique:users|different:password', 'email' => 'required|email|max:75|unique:users', - 'password' => ['required', Password::min(8)->mixedCase()->numbers()->symbols()->uncompromised()] + 'password' => ['required', Password::min(5)] // 'g-recaptcha-response' => 'required|captcha' ]); diff --git a/app/Http/Controllers/Bbox/VerifyBoxController.php b/app/Http/Controllers/Bbox/VerifyBoxController.php index 5e8dc9342..49186115a 100644 --- a/app/Http/Controllers/Bbox/VerifyBoxController.php +++ b/app/Http/Controllers/Bbox/VerifyBoxController.php @@ -7,7 +7,7 @@ use App\Litterrata; use App\Models\AI\Annotation; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; class VerifyBoxController extends Controller diff --git a/app/Http/Controllers/Clusters/ClusterController.php b/app/Http/Controllers/Clusters/ClusterController.php new file mode 100644 index 000000000..b2a422289 --- /dev/null +++ b/app/Http/Controllers/Clusters/ClusterController.php @@ -0,0 +1,176 @@ +validate([ + 'zoom' => ['nullable', 'numeric', 'between:' . min($levels) . ',' . max($levels)], + 'bbox' => ['nullable', 'array'], + 'lat' => ['nullable', 'numeric', 'between:-90,90'], + 'lon' => ['nullable', 'numeric', 'between:-180,180'], + ]); + + /* ── 3. Snap Zoom to Available Level ────────────────────────── */ + $requested = (float) $request->input('zoom', $levels[0]); + $zoom = collect($levels)->first(fn($z) => $z >= round($requested)) ?? end($levels); + + /* ── 4. Build Bounding Box ──────────────────────────── */ + $bbox = [-180, -90, 180, 90]; + + if ($request->has('bbox')) { + // a) Named keys or numeric indices → $arr + $arr = $request->input('bbox'); + + if (is_array($arr)) { + $bbox = [ + (float) ($arr['left'] ?? $arr[0] ?? -180), + (float) ($arr['bottom'] ?? $arr[1] ?? -90), + (float) ($arr['right'] ?? $arr[2] ?? 180), + (float) ($arr['top'] ?? $arr[3] ?? 90), + ]; + } + // b) Comma-separated string → explode + elseif (is_string($arr = $request->query('bbox'))) { + $parts = array_map('floatval', explode(',', $arr)); + if (count($parts) === 4) { + [$bbox[0], $bbox[1], $bbox[2], $bbox[3]] = $parts; + } + } + } + // c) Check for numeric index query params (bbox[0], bbox[1], etc) + elseif ($request->has('bbox.0') || $request->query('bbox.0') !== null) { + $bbox = [ + (float) $request->input('bbox.0', -180), + (float) $request->input('bbox.1', -90), + (float) $request->input('bbox.2', 180), + (float) $request->input('bbox.3', 90), + ]; + } elseif ($request->filled(['lat', 'lon'])) { + // Create bbox from center point + $size = 180 / pow(2, $zoom / 2); + $bbox = [ + $request->lon - $size, $request->lat - $size, + $request->lon + $size, $request->lat + $size, + ]; + } + + // Clamp values to valid ranges + [$west, $south, $east, $north] = [ + max($bbox[0], -180), + max($bbox[1], -90), + min($bbox[2], 180), + min($bbox[3], 90), + ]; + + // Ensure south ≤ north (swap if inverted) + if ($south > $north) { + [$south, $north] = [$north, $south]; + } + + $crossesDateline = $west > $east; + $bboxKey = sprintf('%.4f:%.4f:%.4f:%.4f', $west, $south, $east, $north); + + /* ── 5. Cache Settings ──────────────────────────── */ + $ttl = (int) config('clustering.cache_ttl', 300); + $limit = (int) config('clustering.max_clusters_per_request', 5000); + + /* ── 6. ETag Computation (Data-based) ───────────────────────── */ + $etagCacheKey = "clusters:v5:etag:$zoom:$bboxKey"; + $etag = Cache::remember($etagCacheKey, $ttl, function () use ($zoom) { + $stats = DB::table('clusters') + ->where('zoom', $zoom) + ->selectRaw('MAX(updated_at) as latest, COUNT(*) as cnt') + ->first(); + + return '"' . md5(($stats->latest ?? '') . '|' . ($stats->cnt ?? 0)) . '"'; + }); + + if ($request->header('If-None-Match') === $etag) { + return response('', 304)->header('ETag', $etag); + } + + /* ── 7. Fetch Clusters (Cached) ─────────────────────────────── */ + $dataKey = "clusters:v5:$zoom:$bboxKey"; + + $geojson = Cache::remember($dataKey, $ttl, function () use ( + $zoom, + $west, $south, $east, $north, + $limit, $crossesDateline + ) { + $query = DB::table('clusters') + ->select('lon', 'lat', 'point_count as count') + ->where('zoom', $zoom) + ->whereBetween('lat', [$south, $north]) + ->limit($limit); + + // Apply longitude filter based on dateline crossing + if ($crossesDateline) { + $query->where(function ($q) use ($west, $east) { + $q->where('lon', '>=', $west) + ->orWhere('lon', '<=', $east); + }); + } else { + $query->whereBetween('lon', [$west, $east]); + } + + // Order for deterministic results + $query->orderBy('lat')->orderBy('lon'); + + $rows = $query->get(); + + // Log performance metrics + if (config('app.debug')) { + Log::debug('Cluster query performance', [ + 'zoom' => $zoom, + 'bbox' => [$west, $south, $east, $north], + 'clusters_returned' => $rows->count(), + 'memory_usage_mb' => round(memory_get_peak_usage() / 1024 / 1024, 2), + ]); + } + + return $this->createGeoJsonPoints('clusters', $rows, true); + }); + + return response() + ->json($geojson) + ->header('Cache-Control', "public, max-age=$ttl") + ->header('ETag', $etag) + ->header('X-Cluster-Zoom', $zoom); + } + + /** + * Get available zoom levels + */ + public function zoomLevels() + { + return response()->json([ + 'zoom_levels' => config('clustering.zoom_levels.all', []), + 'global_zooms' => config('clustering.zoom_levels.global', []), + 'tile_zooms' => config('clustering.zoom_levels.tile', []), + ]); + } +} diff --git a/app/Http/Controllers/CommunityController.php b/app/Http/Controllers/CommunityController.php index b62dd5da4..fefa00613 100644 --- a/app/Http/Controllers/CommunityController.php +++ b/app/Http/Controllers/CommunityController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Carbon\CarbonPeriod; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; diff --git a/app/Http/Controllers/EmailSubController.php b/app/Http/Controllers/EmailSubController.php index ff0d8ae14..3975315f3 100644 --- a/app/Http/Controllers/EmailSubController.php +++ b/app/Http/Controllers/EmailSubController.php @@ -4,7 +4,7 @@ use Log; use Auth; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; class EmailSubController extends Controller diff --git a/app/Http/Controllers/GlobalMap/ClusterController.php b/app/Http/Controllers/GlobalMap/ClusterController.php deleted file mode 100644 index ed47fa269..000000000 --- a/app/Http/Controllers/GlobalMap/ClusterController.php +++ /dev/null @@ -1,59 +0,0 @@ -getClusters($request); - - $features = $this->getFeatures($clusters); - - return [ - 'type' => 'FeatureCollection', - 'features' => $features - ]; - } - - /** - * @param Request $request - * @return Builder[]|Collection - */ - protected function getClusters (Request $request) - { - $query = Cluster::query(); - - if ($request->year) { - $query->where('year', $request->year); - } else { - $query->whereNull('year'); - } - - // If the zoom is 2,3,4,5 -> get all clusters for this zoom level - if ($request->zoom <= 5) { - return $query->where(['zoom' => $request->zoom])->get(); - } - - return $this->filterClustersByGeoHash( - $query, - $request->zoom, - $request->bbox - )->get(); - } -} diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index fcfc4c749..d3a8fd95c 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Photo; use Illuminate\Support\Facades\Auth; class HomeController extends Controller @@ -12,11 +13,43 @@ class HomeController extends Controller * @auth bool, logged in or guest * @user null, or authenticated user */ - public function index () + public function __invoke () { $user = null; $auth = Auth::check(); + // If the user is viewing the global map and loading a photo, + // we need to load the original latLon coordinates from the photoId + if (request()->path() === 'global' && request()->has('photo')) { + $latLon = Photo::where('id', request('photo'))->first(['lat', 'lon']); + + // Replace the latLon in the URL with the original photo coordinates + if ($latLon) { + $requestedLat = (float) request('lat'); + $requestedLon = (float) request('lon'); + $correctLat = (float) $latLon->lat; + $correctLon = (float) $latLon->lon; + + // Use a small tolerance for float comparison (6 decimal places precision) + $tolerance = 0.000001; + + $latDiffers = abs($requestedLat - $correctLat) > $tolerance; + $lonDiffers = abs($requestedLon - $correctLon) > $tolerance; + + if ($latDiffers || $lonDiffers) { + // Build the corrected query string + $query = [ + 'lat' => $correctLat, + 'lon' => $correctLon, + 'zoom' => request('zoom'), + 'photo' => request('photo'), + ]; + + return redirect()->to('/global?' . http_build_query($query)); + } + } + } + if ($auth) { $user = Auth::user(); @@ -28,7 +61,7 @@ public function index () // or when a user unsubscribes from emails $unsub = false; - return view('root', compact( + return view('app', compact( 'auth', 'user', 'verified', diff --git a/app/Http/Controllers/Leaderboard/GetUsersForGlobalLeaderboardController.php b/app/Http/Controllers/Leaderboard/GetUsersForGlobalLeaderboardController.php index 3f1011ef3..726196ee0 100644 --- a/app/Http/Controllers/Leaderboard/GetUsersForGlobalLeaderboardController.php +++ b/app/Http/Controllers/Leaderboard/GetUsersForGlobalLeaderboardController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers\Leaderboard; use App\Http\Controllers\Controller; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Support\Facades\Redis; class GetUsersForGlobalLeaderboardController extends Controller diff --git a/app/Http/Controllers/Leaderboard/GetUsersForLocationLeaderboardController.php b/app/Http/Controllers/Leaderboard/GetUsersForLocationLeaderboardController.php index 80d2c94ed..1780c5977 100644 --- a/app/Http/Controllers/Leaderboard/GetUsersForLocationLeaderboardController.php +++ b/app/Http/Controllers/Leaderboard/GetUsersForLocationLeaderboardController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Leaderboard; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Support\Facades\Redis; class GetUsersForLocationLeaderboardController @@ -199,4 +199,4 @@ private function getDataForLocationLeaderboard ( 'userIds' => $userIds, ]; } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Leaderboard/LeaderboardController.php b/app/Http/Controllers/Leaderboard/LeaderboardController.php new file mode 100644 index 000000000..d542a066c --- /dev/null +++ b/app/Http/Controllers/Leaderboard/LeaderboardController.php @@ -0,0 +1,204 @@ + false, + 'msg' => 'Both locationType and locationId required for location filtering' + ]; + } + + // Get user IDs based on location filter + $userIds = $this->getUserIdsForScope($locationType, $locationId); + + // Get XP data for all users + $userData = $this->getUserXpData($userIds, $timeFilter); + + // Sort by XP descending + $sorted = collect($userData) + ->filter(fn($data) => $data['xp'] > 0) + ->sortByDesc('xp') + ->values(); + + // Paginate + $paginated = $sorted->slice($start, self::PER_PAGE); + + // Get user details + $users = $this->formatUserData($paginated, $start); + + return [ + 'success' => true, + 'users' => $users, + 'hasNextPage' => $sorted->count() > $end + 1 + ]; + } + + private function getUserIdsForScope(?string $locationType, ?string $locationId): array + { + if (!$locationType || !$locationId) { + // Global scope - get all users with stats + $keys = Redis::keys('{u:*}:stats'); + return array_map(fn($key) => (int) preg_replace('/^\{u:(\d+)\}:stats$/', '$1', $key), $keys); + } + + // Location scope - get users from location + $column = match($locationType) { + 'country' => 'country_id', + 'state' => 'state_id', + 'city' => 'city_id', + default => null + }; + + if (!$column) { + return []; + } + + return User::where($column, $locationId) + ->pluck('id') + ->toArray(); + } + + private function getUserXpData(array $userIds, string $timeFilter): array + { + if (empty($userIds)) { + return []; + } + + $userData = []; + + // For all-time, just get from stats hash + if ($timeFilter === 'all-time') { + $pipeline = Redis::pipeline(function($pipe) use ($userIds) { + foreach ($userIds as $userId) { + $pipe->hGet("{u:$userId}:stats", 'xp'); + } + }); + + foreach ($userIds as $i => $userId) { + $xp = (float) ($pipeline[$i] ?? 0); + if ($xp > 0) { + $userData[$userId] = ['id' => $userId, 'xp' => $xp]; + } + } + + return $userData; + } + + // For time-filtered queries, we need to calculate from photos + // This is a limitation of the new structure - you'll need to query photos + $dateRange = $this->getDateRange($timeFilter); + + if (!$dateRange) { + return []; + } + + // Get photos for users in date range and calculate XP + $photos = \App\Models\Photo::whereIn('user_id', $userIds) + ->whereBetween('created_at', [$dateRange['start'], $dateRange['end']]) + ->select('user_id', 'xp') + ->get(); + + foreach ($photos as $photo) { + $userId = $photo->user_id; + if (!isset($userData[$userId])) { + $userData[$userId] = ['id' => $userId, 'xp' => 0]; + } + $userData[$userId]['xp'] += (float) $photo->xp; + } + + return $userData; + } + + private function getDateRange(string $timeFilter): ?array + { + $now = now(); + + return match($timeFilter) { + 'today' => [ + 'start' => $now->copy()->startOfDay(), + 'end' => $now->copy()->endOfDay() + ], + 'yesterday' => [ + 'start' => $now->copy()->subDay()->startOfDay(), + 'end' => $now->copy()->subDay()->endOfDay() + ], + 'this-month' => [ + 'start' => $now->copy()->startOfMonth(), + 'end' => $now->copy()->endOfMonth() + ], + 'last-month' => [ + 'start' => $now->copy()->subMonth()->startOfMonth(), + 'end' => $now->copy()->subMonth()->endOfMonth() + ], + 'this-year' => [ + 'start' => $now->copy()->startOfYear(), + 'end' => $now->copy()->endOfYear() + ], + 'last-year' => [ + 'start' => $now->copy()->subYear()->startOfYear(), + 'end' => $now->copy()->subYear()->endOfYear() + ], + default => null + }; + } + + private function formatUserData($paginated, int $start): array + { + $userIds = $paginated->pluck('id')->toArray(); + + if (empty($userIds)) { + return []; + } + + $users = User::query() + ->with(['teams:id,name']) + ->whereIn('id', $userIds) + ->get() + ->keyBy('id'); + + return $paginated->map(function ($data, $index) use ($users, $start) { + $user = $users->get($data['id']); + + if (!$user) { + return null; + } + + $showTeamName = $user->active_team && $user->teams + ->where('pivot.team_id', $user->active_team) + ->first(function ($value) { + return $value->pivot->show_name_leaderboards || + $value->pivot->show_username_leaderboards; + }); + + return [ + 'name' => $user->show_name ? $user->name : '', + 'username' => $user->show_username ? ('@' . $user->username) : '', + 'xp' => number_format($data['xp']), + 'global_flag' => $user->global_flag, + 'social' => !empty($user->social_links) ? $user->social_links : null, + 'team' => $showTeamName && $user->team ? $user->team->name : '', + 'rank' => $start + $index + 1 + ]; + })->filter()->values()->toArray(); + } +} diff --git a/app/Http/Controllers/Location/LocationController.php b/app/Http/Controllers/Location/LocationController.php new file mode 100644 index 000000000..a4020fd6f --- /dev/null +++ b/app/Http/Controllers/Location/LocationController.php @@ -0,0 +1,95 @@ +getType($type); + + $data = $this->service->getLocations( + $locationType, + $request->validated() + ); + + return new PaginatedLocationsResource($data); + } + + /** + * Get single location details + */ + public function show(string $type, int $id) + { + $locationType = $this->getType($type); + abort_if($id < 1, 400, 'Invalid location ID'); + + $location = $this->service->getLocationDetails($locationType, $id, []); + + return new LocationResource($location); + } + + /** + * Get global statistics + */ + public function global() + { + $stats = $this->service->getGlobalStats(); + + return new GlobalStatsResource($stats); + } + + /** + * Get top tags for a location + */ + public function topTags(TagsRequest $request, string $type, int $id) + { + $locationType = $this->getType($type); + abort_if($id < 1, 400, 'Invalid location ID'); + + $tags = $this->service->getTopTags( + $locationType, + $id, + $request->getDimension(), + $request->getLimit() + ); + + return new TagsResource($tags); + } +} diff --git a/app/Http/Controllers/Location/TagController.php b/app/Http/Controllers/Location/TagController.php new file mode 100644 index 000000000..ac03a2d1d --- /dev/null +++ b/app/Http/Controllers/Location/TagController.php @@ -0,0 +1,94 @@ +service = $service; + } + + /** + * Get top tags for a location + * GET /api/locations/{type}/{id}/tags/top + */ + public function top(Request $request, string $type, int $id) + { + $validated = $request->validate([ + 'dimension' => 'in:objects,categories,materials,brands,custom', + 'limit' => 'integer|min:1|max:100' + ]); + + $dimension = $validated['dimension'] ?? 'objects'; + $limit = $validated['limit'] ?? 20; + + $data = $this->service->getTopTags($type, $id, $dimension, $limit); + + return response()->json($data); + } + + /** + * Get comprehensive tag summary + * GET /api/locations/{type}/{id}/tags/summary + */ + public function summary(string $type, int $id) + { + $data = $this->service->getTagSummary($type, $id); + + return response()->json($data); + } + + /** + * Get tags grouped by category + * GET /api/locations/{type}/{id}/tags/by-category + */ + public function byCategory(Request $request, string $type, int $id) + { + $validated = $request->validate([ + 'top_per_category' => 'integer|min:1|max:20' + ]); + + $topPerCategory = $validated['top_per_category'] ?? 5; + + $data = $this->service->getTagsByCategory($type, $id, $topPerCategory); + + return response()->json($data); + } + + /** + * Get cleanup/picked-up statistics + * GET /api/locations/{type}/{id}/tags/cleanup + */ + public function cleanup(string $type, int $id) + { + $data = $this->service->getCleanupStats($type, $id); + + return response()->json($data); + } + + /** + * Get trending tags (month over month) + * GET /api/locations/{type}/{id}/tags/trending + */ + public function trending(Request $request, string $type, int $id) + { + $validated = $request->validate([ + 'dimension' => 'in:objects,brands,materials', + 'limit' => 'integer|min:1|max:50' + ]); + + $dimension = $validated['dimension'] ?? 'objects'; + $limit = $validated['limit'] ?? 10; + + $data = $this->service->getTrendingTags($type, $id, $dimension, $limit); + + return response()->json($data); + } +} diff --git a/app/Http/Controllers/MapController.php b/app/Http/Controllers/MapController.php index 6929730b8..f9f449ebf 100644 --- a/app/Http/Controllers/MapController.php +++ b/app/Http/Controllers/MapController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers; -use App\Models\User\User; +use App\Models\Users\User; use App\Models\Photo; use App\Models\Location\City; use App\Models\Location\State; diff --git a/app/Http/Controllers/GlobalMap/GlobalMapController.php b/app/Http/Controllers/Maps/GlobalMapController.php similarity index 98% rename from app/Http/Controllers/GlobalMap/GlobalMapController.php rename to app/Http/Controllers/Maps/GlobalMapController.php index 6c9330aad..7aede79c5 100644 --- a/app/Http/Controllers/GlobalMap/GlobalMapController.php +++ b/app/Http/Controllers/Maps/GlobalMapController.php @@ -1,6 +1,6 @@ 'success' ]); } - - /** - * Get unverified photos for tagging - */ - public function unverified (GetPreviousCustomTagsAction $previousTagsAction): JsonResponse - { - $user = Auth::user(); - - $query = Photo::where([ - 'user_id' => $user->id, - 'verified' => 0, - 'verification' => 0 - ]); - - // we need to get this before the pagination - $remaining = $query->count(); - - $photos = $query - ->with('team') - ->select('id', 'filename', 'lat', 'lon', 'model', 'remaining', 'display_name', 'datetime', 'team_id') - ->simplePaginate(1); - - $total = Photo::where('user_id', $user->id)->count(); - - return response()->json([ - 'photos' => $photos, - 'remaining' => $remaining, - 'total' => $total, - 'custom_tags' => $previousTagsAction->run($user) - ]); - } } diff --git a/app/Http/Controllers/Points/PointsController.php b/app/Http/Controllers/Points/PointsController.php new file mode 100644 index 000000000..6253e6287 --- /dev/null +++ b/app/Http/Controllers/Points/PointsController.php @@ -0,0 +1,440 @@ +findOrFail($id); + + return [ + 'id' => $photo->id, + 'lat' => $photo->lat, + 'lon' => $photo->lon, + 'datetime' => $photo->datetime, + 'verified' => $photo->verified, + 'total_litter' => $photo->total_litter, + 'filename' => $photo->filename, + 'username' => $photo->user && $photo->user->show_username_maps ? $photo->user->username : null, + 'name' => $photo->user && $photo->user->show_name_maps ? $photo->user->name : null, + 'social' => $photo->user?->social_links, + 'team' => $photo->team?->name, + 'summary' => $photo->summary, // Contains all v5 tags structure + ]; + } + + /** + * Get Paginated Photos within a bounding box & filters. + * + * @param PointsRequest $request + * @return array + */ + public function index(PointsRequest $request): array + { + $validated = $request->validated(); + + // Normalize and prepare parameters + $params = $this->prepareParameters($validated, $request); + + // Check cache for public requests (no username filter) + if (empty($params['username'])) { + $cacheKey = $this->buildCacheKey($params); + return Cache::remember($cacheKey, self::CACHE_TTL, function () use ($params) { + return $this->getPhotos($params); + }); + } + + return $this->getPhotos($params); + } + + private function prepareParameters(array $validated, $request): array + { + // Always include date parameters if present in request + $params = array_merge( + $validated, + $request->only(['from', 'to', 'year']) + ); + + // Normalize bbox for better cache hit rates + if (isset($params['bbox'])) { + $params['bbox'] = $this->normalizeBbox($params['bbox']); + } + + // Apply date normalization (modifies params by reference) + $this->normalizeDateParams($params); + + // Enforce per_page cap consistently + if (isset($params['per_page'])) { + $params['per_page'] = min($params['per_page'], self::MAX_PER_PAGE); + } + + return $params; + } + + private function normalizeBbox(array $bbox): array + { + $round = fn($v) => round((float)$v, self::BBOX_PRECISION); + return [ + 'left' => $round($bbox['left']), + 'bottom' => $round($bbox['bottom']), + 'right' => $round($bbox['right']), + 'top' => $round($bbox['top']), + ]; + } + + private function normalizeDateParams(array &$params): void + { + // Year takes precedence + if (!empty($params['year'])) { + $year = (int) $params['year']; + $from = Carbon::createFromDate($year, 1, 1, 'UTC')->startOfDay(); + $to = Carbon::createFromDate($year, 12, 31, 'UTC')->endOfDay(); + + // Store Carbon instances for query + $params['_from_carbon'] = $from; + $params['_to_carbon'] = $to; + + // Store normalized strings for meta + $params['from'] = $from->toDateString(); + $params['to'] = $to->toDateString(); + return; + } + + // Normalize from/to dates with UTC timezone + if (!empty($params['from'])) { + $from = Carbon::parse($params['from'], 'UTC')->startOfDay(); + $params['_from_carbon'] = $from; + $params['from'] = $from->toDateString(); + } + + if (!empty($params['to'])) { + $to = Carbon::parse($params['to'], 'UTC')->endOfDay(); + $params['_to_carbon'] = $to; + $params['to'] = $to->toDateString(); + } + } + + private function getPhotos(array $params): array + { + $bbox = $params['bbox']; + + $query = Photo::query() + ->select([ + 'photos.id', + 'photos.verified', + 'photos.filename', // provide if verified >=2 + 'photos.user_id', + 'photos.team_id', + 'photos.lat', + 'photos.lon', + 'photos.datetime', + 'photos.remaining', + 'photos.total_litter', + ]) + ->with([ + 'user:id,name,username,show_username_maps,show_name_maps,settings', + 'team:id,name' + ]) + ->whereNotNull('lat') + ->whereNotNull('lon'); + + // Filter by rectangle + $query + ->whereBetween('photos.lon', [$bbox['left'], $bbox['right']]) + ->whereBetween('photos.lat', [$bbox['bottom'], $bbox['top']]); + + // Apply all filters + $this->applyFilters($query, $params); + + // Apply date range + $this->applyDateFilter($query, $params); + + // Apply username filter + if (!empty($params['username'])) { + $query->whereHas('user', function ($q) use ($params) { + $q->where('show_username_maps', true) + ->where('username', $params['username']); + }); + } + + // Apply deterministic ordering for stable pagination + $query->orderByDesc('datetime')->orderBy('id'); + + // Get page and per_page from params + $page = (int) ($params['page'] ?? 1); + $perPage = (int) ($params['per_page'] ?? self::DEFAULT_PER_PAGE); + + // For high zoom levels, enforce a hard cap with proper pagination (Option A) + if (($params['zoom'] ?? 0) >= 19) { + // Also tighten per_page for snappier responses at high zoom + $perPage = min($perPage, self::HIGH_ZOOM_PER_PAGE); + + $cap = self::HIGH_ZOOM_LIMIT; + $offset = ($page - 1) * $perPage; + + if ($offset >= $cap) { + // Past the cap: return empty page + $empty = collect(); + $paginator = new LengthAwarePaginator( + $empty, + 0, + $perPage, + $page + ); + return $this->formatPaginatedResponse($paginator, $params); + } + + $take = min($perPage, $cap - $offset); + $items = (clone $query)->forPage($page, $take)->get(); + + // Get actual count but cap at limit (strip ordering for faster count) + $total = min($cap, (clone $query)->reorder()->count()); + + $paginator = new LengthAwarePaginator( + $items, + $total, + $perPage, + $page + ); + + return $this->formatPaginatedResponse($paginator, $params); + } + + // Normal pagination path + $photos = $query->paginate($perPage, ['*'], 'page', $page); + return $this->formatPaginatedResponse($photos, $params); + } + + private function applyFilters($query, array $params): void + { + $hasFilters = !empty($params['categories']) || + !empty($params['litter_objects']) || + !empty($params['materials']) || + !empty($params['brands']) || + !empty($params['custom_tags']); + + if (!$hasFilters) { + return; + } + + // Prefetch IDs for performance + $materialIds = $this->prefetchIds('materials', $params['materials'] ?? []); + $brandIds = $this->prefetchIds('brandslist', $params['brands'] ?? []); + + // Apply filters with proper grouping + $query->whereHas('photoTags', function ($pt) use ($params, $materialIds, $brandIds) { + $pt->where(function ($row) use ($params, $materialIds, $brandIds) { + // Category/object pairing: both must match on same PhotoTag when both supplied + if (!empty($params['categories']) && !empty($params['litter_objects'])) { + $row->whereHas('category', fn($q) => $q->whereIn('key', $params['categories'])) + ->whereHas('object', fn($q) => $q->whereIn('key', $params['litter_objects'])); + } else { + if (!empty($params['categories'])) { + $row->whereHas('category', fn($q) => $q->whereIn('key', $params['categories'])); + } + if (!empty($params['litter_objects'])) { + $row->whereHas('object', fn($q) => $q->whereIn('key', $params['litter_objects'])); + } + } + + // Extra tags: apply as AND constraints if provided + if (!empty($materialIds)) { + $row->whereHas('extraTags', function ($q) use ($materialIds) { + $q->where('tag_type', 'material') + ->whereIn('tag_type_id', $materialIds); + }); + } + + if (!empty($brandIds)) { + $row->whereHas('extraTags', function ($q) use ($brandIds) { + $q->where('tag_type', 'brand') + ->whereIn('tag_type_id', $brandIds); + }); + } + + if (!empty($params['custom_tags'])) { + $row->whereHas('primaryCustomTag', function ($q) use ($params) { + $q->whereIn('key', $params['custom_tags'])->where('approved', true); + }); + } + }); + }); + } + + private function prefetchIds(string $table, array $keys): array + { + if (empty($keys)) { + return []; + } + + return DB::table($table) + ->whereIn('key', $keys) + ->pluck('id') + ->all(); + } + + private function applyDateFilter($query, array $params): void + { + // Use normalized Carbon instances if available + $from = $params['_from_carbon'] ?? null; + $to = $params['_to_carbon'] ?? null; + + if ($from && $to) { + $query->whereBetween('datetime', [$from, $to]); + } elseif ($from) { + $query->where('datetime', '>=', $from); + } elseif ($to) { + $query->where('datetime', '<=', $to); + } + } + + private function formatPaginatedResponse($photos, array $params): array + { + $features = $this->formatFeatures($photos); + + // Return pagination data at root level (backward compatibility) + // TODO: Deprecate root-level pagination in v2, prefer meta.pagination + return [ + 'type' => 'FeatureCollection', + 'features' => $features, + 'page' => $photos->currentPage(), + 'last_page' => $photos->lastPage(), + 'per_page' => $photos->perPage(), + 'total' => $photos->total(), + 'from' => $photos->firstItem(), + 'to' => $photos->lastItem(), + 'has_more_pages' => $photos->hasMorePages(), + 'meta' => $this->buildMetadata($params, [ + 'page' => $photos->currentPage(), + 'last_page' => $photos->lastPage(), + 'per_page' => $photos->perPage(), + 'total' => $photos->total(), + 'from' => $photos->firstItem(), + 'to' => $photos->lastItem(), + 'has_more_pages' => $photos->hasMorePages(), + ]) + ]; + } + + private function formatFeatures($photos) + { + // Handle both paginator and collection + $items = $photos instanceof \Illuminate\Contracts\Pagination\Paginator + ? $photos->getCollection() + : $photos; + + return $items->map(function ($photo) { + $properties = [ + 'id' => $photo->id, + 'datetime' => $photo->datetime, + 'verified' => $photo->verified, + 'picked_up' => $photo->remaining !== null ? !$photo->remaining : null, + 'total_litter' => $photo->total_litter, + 'filename' => $this->getFilename($photo), + 'username' => $photo->user && $photo->user->show_username_maps + ? $photo->user->username : null, + 'name' => $photo->user && $photo->user->show_name_maps + ? $photo->user->name : null, + 'team' => $photo->team ? $photo->team->name : null, + ]; + + // Add social links if user exists + if ($photo->user) { + $properties['social'] = $photo->user->social_links; + } + + return [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [(float)$photo->lon, (float)$photo->lat] + ], + 'properties' => $properties + ]; + }); + } + + private function buildMetadata(array $params, array $paginationData) + { + return [ + 'bbox' => [ + $params['bbox']['left'], + $params['bbox']['bottom'], + $params['bbox']['right'], + $params['bbox']['top'] + ], + 'zoom' => $params['zoom'], + 'categories' => $params['categories'] ?? null, + 'litter_objects' => $params['litter_objects'] ?? null, + 'materials' => $params['materials'] ?? null, + 'brands' => $params['brands'] ?? null, + 'custom_tags' => $params['custom_tags'] ?? null, + 'from' => $params['from'] ?? null, // Date from + 'to' => $params['to'] ?? null, // Date to + 'username' => $params['username'] ?? null, + 'year' => $params['year'] ?? null, + 'generated_at' => now()->toIso8601String(), + // Pagination data + 'page' => $paginationData['page'], + 'last_page' => $paginationData['last_page'], + 'per_page' => $paginationData['per_page'], + 'total' => $paginationData['total'], + 'from_item' => $paginationData['from'], // Renamed to avoid collision + 'to_item' => $paginationData['to'], // Renamed to avoid collision + 'has_more_pages' => $paginationData['has_more_pages'], + ]; + } + + private function getFilename($photo) + { + // Only show actual filename if photo is verified (level 2 or higher) + if ($photo->verified >= 2) { + return $photo->filename; + } + + // For unverified photos, always show waiting image + return '/assets/images/waiting.png'; + } + + private function buildCacheKey(array $params): string + { + // Clean internal params before building key + $cleanParams = $params; + unset($cleanParams['_from_carbon'], $cleanParams['_to_carbon']); + + $key = 'pts:v1:'; + $key .= 'z' . $params['zoom']; + + // Sort parameters for consistent cache keys + $sortedParams = Arr::sortRecursive($cleanParams); + + // Create a hash of all parameters including normalized bbox and dates + $key .= ':' . md5(json_encode($sortedParams)); + + return $key; + } +} diff --git a/app/Http/Controllers/Points/PointsStatsController.php b/app/Http/Controllers/Points/PointsStatsController.php new file mode 100644 index 000000000..905942b0c --- /dev/null +++ b/app/Http/Controllers/Points/PointsStatsController.php @@ -0,0 +1,54 @@ +validated(); + + // Get stats using the same parameters as points + $stats = $this->statsService->getStats($validated); + + return [ + 'data' => $stats, + 'meta' => [ + 'bbox' => [ + $validated['bbox']['left'], + $validated['bbox']['bottom'], + $validated['bbox']['right'], + $validated['bbox']['top'] + ], + 'zoom' => $validated['zoom'], + 'categories' => $validated['categories'] ?? null, + 'litter_objects' => $validated['litter_objects'] ?? null, + 'materials' => $validated['materials'] ?? null, + 'brands' => $validated['brands'] ?? null, + 'custom_tags' => $validated['custom_tags'] ?? null, + 'from' => $validated['from'] ?? null, + 'to' => $validated['to'] ?? null, + 'username' => $validated['username'] ?? null, + 'year' => $validated['year'] ?? null, + 'generated_at' => now()->toIso8601String(), + 'cached' => !isset($stats['meta']['generated_fresh']) ?? false + ] + ]; + } +} diff --git a/app/Http/Controllers/RedisDataController.php b/app/Http/Controllers/RedisDataController.php new file mode 100644 index 000000000..d1969133d --- /dev/null +++ b/app/Http/Controllers/RedisDataController.php @@ -0,0 +1,493 @@ + $this->getUsersData($request->get('limit', 50)), + 'global' => $this->getGlobalData(), + 'timeSeries' => $this->getTimeSeriesData(), + 'geo' => $this->getGeoData(), + 'stats' => $this->getRedisStats(), + 'summary' => $this->getDataSummary(), + ]; + + return response()->json($data); + } + + /** + * Get specific user's Redis data + */ + public function show(int $userId): JsonResponse + { + $user = User::findOrFail($userId); + + $data = [ + 'user' => [ + 'id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, + 'created_at' => $user->created_at, + ], + 'metrics' => RedisMetricsCollector::getUserCountsWithKeys($userId), + 'raw' => RedisMetricsCollector::getUserCounts($userId), + 'activity' => $this->getUserActivity($userId), + ]; + + return response()->json($data); + } + + /** + * Get users with Redis data + */ + private function getUsersData(int $limit): array + { + // Get all user stat keys + $keys = Redis::keys('{u:*}:stats'); + $users = []; + + foreach (array_slice($keys, 0, $limit) as $key) + { + if (preg_match('/{u:(\d+)}:stats/', $key, $matches)) + { + $userId = (int) $matches[1]; + $stats = Redis::hGetAll($key); + + if (!empty($stats)) { + $user = User::find($userId); + if ($user) { + $users[] = [ + 'id' => $userId, + 'name' => $user->name ?? 'Unknown', + 'email' => $user->email ?? null, + 'uploads' => (int) ($stats['uploads'] ?? 0), + 'xp' => (float) ($stats['xp'] ?? 0), + 'streak' => (int) ($stats['streak'] ?? 0), + ]; + } + } + } + } + + // Sort by uploads descending + usort($users, fn($a, $b) => $b['uploads'] <=> $a['uploads']); + + return $users; + } + + /** + * Get global metrics + */ + private function getGlobalData(): array + { + $keys = [ + 'categories' => '{g}:c', + 'objects' => '{g}:t', + 'materials' => '{g}:m', + 'brands' => '{g}:brands', + ]; + + $data = []; + foreach ($keys as $type => $key) { + $values = Redis::hGetAll($key); + + // Convert string keys back to IDs and get proper names + $namedValues = []; + foreach ($values as $id => $count) { + $namedValues[$id] = (int)$count; + } + + $data[$type] = [ + 'total' => array_sum($namedValues), + 'unique' => count($namedValues), + 'top10' => $this->getTop($namedValues, 10), + ]; + } + + return $data; + } + + /** + * Get time series data + */ + private function getTimeSeriesData(): array + { + $pattern = '{g}:*:t'; + $keys = Redis::keys($pattern); + $series = []; + + foreach ($keys as $key) { + if (preg_match('/{g}:(\d{4}-\d{2}):t/', $key, $matches)) { + $month = $matches[1]; + $data = Redis::hGetAll($key); + $series[$month] = [ + 'photos' => (int) ($data['p'] ?? 0), + 'xp' => (float) ($data['xp'] ?? 0), + ]; + } + } + + // Sort by month descending (most recent first) + krsort($series); + + // Limit to last 12 months + $series = array_slice($series, 0, 12, true); + + // Resort ascending for display + ksort($series); + + return $series; + } + + /** + * Get geographic data summary + */ + private function getGeoData(): array + { + $data = [ + 'countries' => $this->getGeoSummary('c:*:t:p'), + 'states' => $this->getGeoSummary('s:*:t:p'), + 'cities' => $this->getGeoSummary('ci:*:t:p'), + ]; + + return $data; + } + + /** + * Get summary for geographic pattern + */ + private function getGeoSummary(string $pattern): array + { + $keys = Redis::keys($pattern); + $totalPhotos = 0; + $locations = 0; + + foreach ($keys as $key) { + $values = Redis::hGetAll($key); + $totalPhotos += array_sum($values); + $locations++; + } + + return [ + 'locations' => $locations, + 'totalPhotos' => $totalPhotos, + ]; + } + + /** + * Get Redis server stats + */ + private function getRedisStats(): array + { + $info = Redis::info(); + + return [ + 'usedMemory' => $info['used_memory_human'] ?? 'N/A', + 'totalKeys' => Redis::dbSize(), + 'connectedClients' => $info['connected_clients'] ?? 0, + 'uptime' => $info['uptime_in_days'] ?? 0, + ]; + } + + private function getDataSummary(): array + { + // Count all user keys + $userStatsKeys = count(Redis::keys('{u:*}:stats')); + + // Get total uploads across all users + $totalUploads = 0; + $totalXp = 0; + $activeUsers = 0; + + $keys = Redis::keys('{u:*}:stats'); + + foreach ($keys as $key) { + $stats = Redis::hGetAll($key); + if (!empty($stats)) { + $uploads = (int)($stats['uploads'] ?? 0); + $xp = (float)($stats['xp'] ?? 0); + + $totalUploads += $uploads; + $totalXp += $xp; + + if ($uploads > 0) { + $activeUsers++; + } + } + } + + // prob cache this or move to redis + $totalPhotosInDb = Photo::count(); + + return [ + 'totalUsers' => $userStatsKeys, + 'activeUsers' => $activeUsers, + 'totalUploads' => $totalUploads, + 'totalPhotosInDb' => $totalPhotosInDb, + 'totalXp' => $totalXp, + 'avgUploadsPerUser' => $activeUsers > 0 ? round($totalUploads / $activeUsers, 1) : 0, + 'avgXpPerUpload' => $totalUploads > 0 ? round($totalXp / $totalUploads, 1) : 0, + ]; + } + + /** + * Get user activity patterns + */ + private function getUserActivity(int $userId): array + { + $bitmapKey = sprintf('{u:%d}:up', $userId); + + // Get the last 30 days of activity + $today = Carbon::now()->startOfDay(); + $activity = []; + + for ($i = 29; $i >= 0; $i--) { + $date = $today->copy()->subDays($i); + $dayIndex = $date->diffInDays(Carbon::createFromTimestamp(0)); + + // Check if user was active on this day + $wasActive = Redis::getBit($bitmapKey, $dayIndex); + + $activity[] = [ + 'date' => $date->format('Y-m-d'), + 'active' => (bool)$wasActive, + ]; + } + + // Calculate activity stats + $activeDays = array_filter($activity, fn($day) => $day['active']); + $activityRate = count($activeDays) / 30 * 100; + + return [ + 'last30Days' => $activity, + 'activeDays' => count($activeDays), + 'activityRate' => round($activityRate, 1), + ]; + } + + /** + * Get top N items from array + */ + private function getTop(array $items, int $n): array + { + arsort($items); + return array_slice($items, 0, $n, true); + } + + /** + * Clear all Redis data (careful!) + */ + public function destroy(Request $request): JsonResponse + { + if (!$request->has('confirm') || $request->get('confirm') !== 'DELETE_ALL_REDIS_DATA') { + return response()->json(['error' => 'Confirmation required'], 400); + } + + Redis::flushdb(); + + return response()->json(['message' => 'All Redis data cleared']); + } + + /** + * Get Redis performance metrics + */ + public function performance(): JsonResponse + { + $info = Redis::info(); + $commandStats = Redis::info('commandstats'); + + $performance = [ + 'memory' => [ + 'used' => $info['used_memory_human'] ?? 'N/A', + 'peak' => $info['used_memory_peak_human'] ?? 'N/A', + 'rss' => $info['used_memory_rss_human'] ?? 'N/A', + 'fragmentation_ratio' => $info['mem_fragmentation_ratio'] ?? 0, + ], + 'performance' => [ + 'ops_per_sec' => $info['instantaneous_ops_per_sec'] ?? 0, + 'hit_rate' => $this->calculateHitRate($info), + 'evicted_keys' => $info['evicted_keys'] ?? 0, + 'expired_keys' => $info['expired_keys'] ?? 0, + ], + 'connections' => [ + 'connected' => $info['connected_clients'] ?? 0, + 'blocked' => $info['blocked_clients'] ?? 0, + 'total_received' => $info['total_connections_received'] ?? 0, + ], + 'persistence' => [ + 'last_save_time' => isset($info['rdb_last_save_time']) + ? date('Y-m-d H:i:s', $info['rdb_last_save_time']) + : 'N/A', + 'changes_since_save' => $info['rdb_changes_since_last_save'] ?? 0, + ], + 'top_commands' => $this->getTopCommands($commandStats), + ]; + + return response()->json($performance); + } + + /** + * Calculate cache hit rate + */ + private function calculateHitRate(array $info): float + { + $hits = $info['keyspace_hits'] ?? 0; + $misses = $info['keyspace_misses'] ?? 0; + $total = $hits + $misses; + + return $total > 0 ? round(($hits / $total) * 100, 2) : 0; + } + + /** + * Get top Redis commands by usage + */ + private function getTopCommands(array $commandStats): array + { + $commands = []; + + foreach ($commandStats as $key => $value) { + if (strpos($key, 'cmdstat_') === 0) { + $cmdName = str_replace('cmdstat_', '', $key); + // Parse: calls=X,usec=Y,usec_per_call=Z + preg_match('/calls=(\d+),usec=(\d+),usec_per_call=([\d.]+)/', $value, $matches); + + if (count($matches) === 4) { + $commands[$cmdName] = [ + 'calls' => (int) $matches[1], + 'total_time_us' => (int) $matches[2], + 'avg_time_us' => (float) $matches[3], + ]; + } + } + } + + // Sort by call count + uasort($commands, fn($a, $b) => $b['calls'] <=> $a['calls']); + + return array_slice($commands, 0, 10, true); + } + + /** + * Get Redis key patterns and their memory usage + */ + public function keyAnalysis(): JsonResponse + { + $patterns = [ + 'user_stats' => '{u:*}:stats', + 'user_objects' => '{u:*}:t', + 'user_categories' => '{u:*}:c', + 'user_materials' => '{u:*}:m', + 'user_brands' => '{u:*}:brands', + 'user_custom' => '{u:*}:custom', + 'user_bitmaps' => '{u:*}:up', + 'global_time_series' => '{g}:*:t', + 'geo_country' => 'c:*:t:p', + 'geo_state' => 's:*:t:p', + 'geo_city' => 'ci:*:t:p', + ]; + + $analysis = []; + + foreach ($patterns as $name => $pattern) { + $keys = Redis::keys($pattern); + $count = count($keys); + $sampleSize = min(100, $count); // Sample up to 100 keys + $totalMemory = 0; + + if ($sampleSize > 0) { + $sample = array_rand(array_flip($keys), min($sampleSize, $count)); + $sample = is_array($sample) ? $sample : [$sample]; + + foreach ($sample as $key) { + // Note: MEMORY USAGE requires Redis 4.0+ + try { + $memory = Redis::rawCommand('MEMORY', 'USAGE', $key); + $totalMemory += $memory ?: 0; + } catch (\Exception $e) { + // Fallback if MEMORY USAGE not available + $totalMemory = 0; + break; + } + } + } + + $avgMemory = $sampleSize > 0 ? round($totalMemory / $sampleSize) : 0; + $estimatedTotal = $avgMemory * $count; + + $analysis[$name] = [ + 'pattern' => $pattern, + 'count' => $count, + 'avg_memory_bytes' => $avgMemory, + 'estimated_total_mb' => round($estimatedTotal / 1024 / 1024, 2), + ]; + } + + return response()->json($analysis); + } + + public function webIndex() + { + // Get your standard view data (matching your HomeController pattern) + $auth = Auth::check(); + $user = $auth ? Auth::user() : null; + $verified = $auth && $user->hasVerifiedEmail(); + $unsub = request()->unsub ?? null; + + // Get Redis data + $users = $this->getUsersData(50); + $global = $this->getGlobalData(); + $timeSeries = $this->getTimeSeriesData(); + $geo = $this->getGeoData(); + $stats = $this->getRedisStats(); + + return view('admin.redis-simple', compact( + 'auth', + 'user', + 'verified', + 'unsub', + 'users', + 'global', + 'timeSeries', + 'geo', + 'stats' + )); + } + + public function webShow($userId) + { + // Get your standard view data + $auth = Auth::check(); + $user = $auth ? Auth::user() : null; + $verified = $auth && $user->hasVerifiedEmail(); + $unsub = request()->unsub ?? null; + + // Get user data + $userData = User::findOrFail($userId); + $metrics = RedisMetricsCollector::getUserCountsWithKeys($userId); + $raw = RedisMetricsCollector::getUserCounts($userId); + + return view('admin.redis-user', compact( + 'auth', + 'user', + 'verified', + 'unsub', + 'userData', + 'metrics', + 'raw' + )); + } +} diff --git a/app/Http/Controllers/Reports/GenerateImpactReportController.php b/app/Http/Controllers/Reports/GenerateImpactReportController.php index 5b46aacca..8c4d37338 100644 --- a/app/Http/Controllers/Reports/GenerateImpactReportController.php +++ b/app/Http/Controllers/Reports/GenerateImpactReportController.php @@ -4,7 +4,7 @@ use Carbon\Carbon; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\View\View; use Illuminate\Support\Number; use App\Http\Controllers\Controller; @@ -262,7 +262,7 @@ protected function getTopLitter ($start, $end): array protected function getLitterJson (): array { - $path = resource_path('js/langs/en/litter.json'); + $path = resource_path('old_js/langs/en/litter.json'); $contents = File::get($path); diff --git a/app/Http/Controllers/StripeController.php b/app/Http/Controllers/StripeController.php index 4dc224587..060fd382a 100644 --- a/app/Http/Controllers/StripeController.php +++ b/app/Http/Controllers/StripeController.php @@ -5,7 +5,7 @@ use DB; use App\Plan; use Auth; -use App\Models\User\User; +use App\Models\Users\User; use Laravel\Cashier\Cashier; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/SubscribersController.php b/app/Http/Controllers/SubscribersController.php index 2a94e5bc6..f7d1962f1 100644 --- a/app/Http/Controllers/SubscribersController.php +++ b/app/Http/Controllers/SubscribersController.php @@ -4,13 +4,14 @@ use App\Subscriber; use Illuminate\Http\Request; +use Illuminate\Http\JsonResponse; class SubscribersController extends Controller { /** * Create a new subscriber */ - public function create (Request $request) + public function __invoke (Request $request): JsonResponse { $request->validate([ 'email' => 'required|email|unique:subscribers|max:100' @@ -20,6 +21,8 @@ public function create (Request $request) 'email' => $request->email ]); - return ['msg' => 'success']; + return response()->json([ + 'success' => true + ]); } } diff --git a/app/Http/Controllers/SubscriptionsController.php b/app/Http/Controllers/SubscriptionsController.php index 9342b4c00..7c9d3a8c1 100644 --- a/app/Http/Controllers/SubscriptionsController.php +++ b/app/Http/Controllers/SubscriptionsController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use Auth; -use App\Models\User\User; +use App\Models\Users\User; use App\Plan; use Exception; use Illuminate\Http\Request; @@ -28,7 +28,7 @@ public function store (Request $request) 'plan' => 'required' ]); - $user = \App\Models\User\User::find($request->form['user_id']); + $user = \App\Models\Users\User::find($request->form['user_id']); } catch(Exception $e) { // return $e->getMessage(); diff --git a/app/Http/Controllers/Teams/TeamsController.php b/app/Http/Controllers/Teams/TeamsController.php index 4f6edaa93..5bc567ea6 100644 --- a/app/Http/Controllers/Teams/TeamsController.php +++ b/app/Http/Controllers/Teams/TeamsController.php @@ -15,7 +15,7 @@ use App\Http\Requests\Teams\UpdateTeamRequest; use App\Models\Teams\Team; use App\Models\Teams\TeamType; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Collection; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/TotalDataController.php b/app/Http/Controllers/TotalDataController.php index ff54670a2..58084a033 100644 --- a/app/Http/Controllers/TotalDataController.php +++ b/app/Http/Controllers/TotalDataController.php @@ -4,7 +4,7 @@ use Auth; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use App\Models\Litter\Categories\Smoking; use App\Models\Litter\Categories\Alcohol; use App\Models\Litter\Categories\Coffee; diff --git a/app/Http/Controllers/Uploads/UploadPhotoController.php b/app/Http/Controllers/Uploads/UploadPhotoController.php index 466a695ba..67fe1e430 100644 --- a/app/Http/Controllers/Uploads/UploadPhotoController.php +++ b/app/Http/Controllers/Uploads/UploadPhotoController.php @@ -2,19 +2,16 @@ namespace App\Http\Controllers\Uploads; -use Carbon\Carbon; use Geohash\GeoHash; +use App\Models\Photo; +use App\Helpers\Post\UploadHelper; + use App\Events\NewCityAdded; use App\Events\NewCountryAdded; use App\Events\NewStateAdded; -use App\Helpers\Post\UploadHelper; -use App\Models\Photo; -use App\Models\User\User; use App\Events\ImageUploaded; use App\Events\Photo\IncrementPhotoMonth; -use App\Http\Requests\UploadPhotoRequest; -use App\Exceptions\InvalidCoordinates; use App\Actions\Photos\MakeImageAction; use App\Actions\Photos\UploadPhotoAction; @@ -22,10 +19,12 @@ use App\Actions\Locations\UpdateLeaderboardsForLocationAction; use App\Http\Controllers\Controller; +use App\Http\Requests\UploadPhotoRequest; +use GuzzleHttp\Exception\GuzzleException; + use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Redis; class UploadPhotoController extends Controller { @@ -50,7 +49,7 @@ public function __construct ( /** * The user wants to upload a photo * - * Check for GPS co-ordinates or abort + * Steps: * Get/Create Country, State, and City for the lat/lon * * Move photo to AWS S3 in production || local in development @@ -58,6 +57,7 @@ public function __construct ( * * @param UploadPhotoRequest $request * @return JsonResponse + * @throws GuzzleException */ public function __invoke (UploadPhotoRequest $request): JsonResponse { @@ -68,80 +68,15 @@ public function __invoke (UploadPhotoRequest $request): JsonResponse 'user_id' => $user->id ]); - if (!$user->has_uploaded) { - $user->has_uploaded = 1; - } - - $file = $request->file('file'); // /tmp/php7S8v.. + $file = $request->file('photo'); $imageAndExifData = $this->makeImageAction->run($file); $image = $imageAndExifData['image']; $exif = $imageAndExifData['exif']; - // Step 1: Verification - if (is_null($exif)) - { - abort(500, "Sorry, no GPS on this one."); - } + $dateTime = getDateTimeForPhoto($exif); - // Check if the EXIF has GPS data - // todo - make this error appear on the frontend dropzone without clicking the "X" - // todo - translate the error - if (!array_key_exists("GPSLatitudeRef", $exif)) - { - abort(500, "Sorry, no GPS on this one."); - } - - // Check for 0 value - if ($exif["GPSLatitude"][0] === "0/0" && $exif["GPSLongitude"][0] === "0/0") - { - abort(500, - "Error: Your Images have GeoTags, but they have values of zero. - You may have lost the geotags when transferring images across devices - or you might need to enable another setting to make them available." - ); - } - - $dateTime = ''; - - // Some devices store the timestamp key in a different format and using a different key. - if (array_key_exists('DateTimeOriginal', $exif)) - { - $dateTime = $exif["DateTimeOriginal"]; - } - if (!$dateTime) - { - if (array_key_exists('DateTime', $exif)) - { - $dateTime = $exif["DateTime"]; - } - } - if (!$dateTime) - { - if (array_key_exists('FileDateTime', $exif)) - { - $dateTime = $exif["FileDateTime"]; - $dateTime = Carbon::createFromTimestamp($dateTime); - } - } - - // convert to YYYY-MM-DD hh:mm:ss format - $dateTime = Carbon::parse($dateTime); - - // Check if the user has already uploaded this image - // todo - load error automatically without clicking it - // todo - translate - if (app()->environment() === "production") - { - if (Photo::where(['user_id' => $user->id, 'datetime' => $dateTime])->first()) - { - abort(500, "You have already uploaded this file!"); - } - } - // End Step 1: Verification - - // Step 2: Upload The Image(s) - // Upload images to both 's3' and 'bbox' disks, resized for 'bbox' + // Step 1: Upload The Image(s) to both 's3' and 'bbox' disks $imageName = $this->uploadPhotoAction->run( $image, $dateTime, @@ -155,31 +90,14 @@ public function __invoke (UploadPhotoRequest $request): JsonResponse $file->hashName(), 'bbox' ); - // End Step 2: Upload The Image(s) - - // Step 3: Get GPS & Check for Locations - // Get coordinates - $lat_ref = $exif["GPSLatitudeRef"]; - $lat = $exif["GPSLatitude"]; - $long_ref = $exif["GPSLongitudeRef"]; - $lon = $exif["GPSLongitude"]; - - $latlong = self::dmsToDec($lat, $lon, $lat_ref, $long_ref); - - $latitude = $latlong[0]; - $longitude = $latlong[1]; - - if (($latitude === 0 && $longitude === 0) || ($latitude === '0' && $longitude === '0')) - { - \Log::info("invalid coordinates found for userId $user->id \n"); - abort(500, - "Error: Your Images have GeoTags, but they have values of zero. - You may have lost the geotags when transferring images across devices - or you might need to enable another setting to make them available." - ); - } - // Use OpenStreetMap to Reverse Geocode the coordinates into an Address. + // Step 2: Get GPS & Check for Locations + $coordinates = getCoordinatesFromPhoto($exif); + + $latitude = $coordinates[0]; + $longitude = $coordinates[1]; + + // Use OpenStreetMap to Reverse Geocode the coordinates into an address. $revGeoCode = app(ReverseGeocodeLocationAction::class)->run($latitude, $longitude); // The entire address as a string @@ -196,26 +114,24 @@ public function __invoke (UploadPhotoRequest $request): JsonResponse $country = $this->uploadHelper->getCountryFromAddressArray($addressArray); $state = $this->uploadHelper->getStateFromAddressArray($country, $addressArray); $city = $this->uploadHelper->getCityFromAddressArray($country, $state, $addressArray, $latitude, $longitude); - // End Step 3: Get GPS & Check for Locations - // Step 4: Create the Photo + // Step 3: Create the Photo // prepare data we need to create $geohasher = new GeoHash(); - $geohash = $geohasher->encode($latlong[0], $latlong[1]); + $geohash = $geohasher->encode($latitude, $longitude); // Get phone model $model = (array_key_exists('Model', $exif) && !empty($exif["Model"])) ? $exif["Model"] : 'Unknown'; - /** Create the $var Photo $photo */ $photo = Photo::create([ 'user_id' => $user->id, 'filename' => $imageName, 'datetime' => $dateTime, 'remaining' => !$user->picked_up, - 'lat' => $latlong[0], - 'lon' => $latlong[1], + 'lat' => $latitude, + 'lon' => $longitude, 'display_name' => $display_name, 'location' => $location, 'road' => $road, @@ -233,28 +149,18 @@ public function __invoke (UploadPhotoRequest $request): JsonResponse 'five_hundred_square_filepath' => $bboxImageName, 'address_array' => json_encode($addressArray) ]); - // End Step 4: Create the Photo - // Step 5: Reward XP, update resources & Update Leaderboards + // Step 4: Reward XP, update resources & Update Leaderboards // $user->images_remaining -= 1; // move this to redis // Since a user can upload multiple photos at once, // we might get old values for xp, so we update the values directly // without retrieving them - $user->update(['total_images' => DB::raw('ifnull(total_images, 0) + 1')]); - - $user->refresh(); + // $user->update(['total_images' => DB::raw('ifnull(total_images, 0) + 1')]); + // $user->refresh(); - // Update the Leaderboards and give xp. - $this->updateLeaderboardsAction->run( - $photo, - $user->id, - 1 - ); - // End Step 5: Update Leaderboards - - // Step 6: Dispatch Events & Notifications + // Step 5: Dispatch Events & Notifications // Broadcast this event to anyone viewing the global map // This will also update country, state, and city.total_contributors_redis event(new ImageUploaded( @@ -265,6 +171,9 @@ public function __invoke (UploadPhotoRequest $request): JsonResponse $city, )); + // Update the Leaderboards and give xp. + $this->updateLeaderboardsAction->run($photo, $user->id); + // Broadcast an event to anyone viewing the Global Map // Sends Notification to Twitter & Slack if ($country->wasRecentlyCreated) { @@ -297,48 +206,9 @@ public function __invoke (UploadPhotoRequest $request): JsonResponse $city->id, $dateTime )); - // End step 6: Dispatch Events & Notifications return response()->json([ 'success' => true ]); } - - /** - * Convert Degrees, Minutes and Seconds to Lat, Long - * Cheers to Hassan for this! - * - * "GPSLatitude" => array:3 [ might be an array - 0 => "51/1" - 1 => "50/1" - 2 => "888061/1000000" - ] - */ - private static function dmsToDec ($lat, $lon, $lat_ref, $long_ref) - { - $lat[0] = explode("/", $lat[0]); - $lat[1] = explode("/", $lat[1]); - $lat[2] = explode("/", $lat[2]); - - $lon[0] = explode("/", $lon[0]); - $lon[1] = explode("/", $lon[1]); - $lon[2] = explode("/", $lon[2]); - - $lat[0] = (int)$lat[0][0] / (int)$lat[0][1]; - $lon[0] = (int)$lon[0][0] / (int)$lon[0][1]; - - $lat[1] = (int)$lat[1][0] / (int)$lat[1][1]; - $lon[1] = (int)$lon[1][0] / (int)$lon[1][1]; - - $lat[2] = (int)$lat[2][0] / (int)$lat[2][1]; - $lon[2] = (int)$lon[2][0] / (int)$lon[2][1]; - - $lat = $lat[0]+((($lat[1]*60)+($lat[2]))/3600); - $lon = $lon[0]+((($lon[1]*60)+($lon[2]))/3600); - - if ($lat_ref === "S") $lat = $lat * -1; - if ($long_ref === "W") $lon = $lon * -1; - - return [$lat, $lon]; - } } diff --git a/app/Http/Controllers/User/Photos/GetMyPhotosController.php b/app/Http/Controllers/User/Photos/GetMyPhotosController.php deleted file mode 100644 index 00e35f08b..000000000 --- a/app/Http/Controllers/User/Photos/GetMyPhotosController.php +++ /dev/null @@ -1,66 +0,0 @@ -input('loadPage', 1); // Default to page 1 if not provided - - Paginator::currentPageResolver(function () use ($currentPage) { - return $currentPage; - }); - - $user = Auth::user(); - $query = Photo::where('user_id', $user->id); - - // Filter by date range - if ($request->filterDateFrom) { - $query->whereDate('created_at', '>=', $request->filterDateFrom); - } - - if ($request->filterDateTo) { - $query->whereDate('created_at', '<=', $request->filterDateTo); - } - - // Filter by tags: needs improvement to search by category, item, quantity - // instead of looking at the result_string, we should be looking at the photos relationships - if ($request->filterTag) { - $query->where('result_string', 'like', '%' . $request->filterTag . '%'); - } - - if ($request->filterCustomTag) { - $customTag = $request->filterCustomTag; - - $query->whereHas('customTags', function ($q) use ($customTag) { - $q->where('tag', 'like', '%' . $customTag . '%'); - }); - } - - $photos = $query->with('customTags') - ->orderBy('created_at', 'desc') - ->paginate($request->paginationAmount); - - return response()->json([ - 'success' => true, - 'photos' => $photos - ]); - } -} diff --git a/app/Http/Controllers/User/Photos/UsersUploadsController.php b/app/Http/Controllers/User/Photos/UsersUploadsController.php new file mode 100644 index 000000000..c6b1563f3 --- /dev/null +++ b/app/Http/Controllers/User/Photos/UsersUploadsController.php @@ -0,0 +1,282 @@ +id) + ->where('filename', '!=', '/assets/verified.jpg'); + + // Tagged/Untagged filter + if ($request->has('tagged')) { + $tagged = $request->boolean('tagged'); + + $tagged + ? $query->has('photoTags') + : $query->doesntHave('photoTags'); + } + + // ID filter + if ($request->filled('id')) { + $id = $request->integer('id'); + $operator = $request->input('id_operator', '='); + $query->where('id', $operator, $id); + } + + // Tag filter (search in PhotoTags) + if ($request->filled('tag')) { + $tag = $request->input('tag'); + $query->whereHas('photoTags', function($q) use ($tag) { + $q->where('tag_type', 'like', "%{$tag}%"); + }); + } + + // Custom tag filter + if ($request->filled('custom_tag')) { + $customTag = $request->input('custom_tag'); + $query->whereHas('photoTags', function($q) use ($customTag) { + $q->where('custom_tag', 'like', "%{$customTag}%"); + }); + } + + // Date range filter + if ($request->filled('date_from')) { + $query->where('datetime', '>=', $request->input('date_from')); + } + if ($request->filled('date_to')) { + $query->where('datetime', '<=', $request->input('date_to')); + } + + $photos = $query + ->with([ + 'team', + // Old relationships + 'smoking', 'food', 'coffee', 'alcohol', 'softdrinks', + 'sanitary', 'coastal', 'dumping', 'industrial', 'brands', + 'dogshit', 'art', 'material', 'other', 'customTags', + // New relationships + 'photoTags.category', + 'photoTags.object', + 'photoTags.primaryCustomTag', + 'photoTags.extraTags.extraTag' + ]) + ->orderBy('created_at', 'desc') + ->paginate($perPage); + + // Transform the data + $photos->through(function ($photo) { + return [ + 'id' => $photo->id, + 'filename' => $photo->filename, + 'datetime' => $photo->datetime, + 'lat' => $photo->lat, + 'lon' => $photo->lon, + 'model' => $photo->model, + 'remaining' => $photo->remaining, + 'display_name' => $photo->display_name, + 'team_id' => $photo->team_id, + 'team' => $photo->team, + 'total_litter' => $photo->total_litter, + 'migrated_at' => $photo->migrated_at, + 'created_at' => $photo->created_at, + + // Old tags structure + 'old_tags' => $photo->tags(), + + // New tags structure + 'new_tags' => $this->getNewTags($photo), + + // Summary if exists + 'summary' => $photo->summary, + 'xp' => $photo->xp, + 'total_tags' => $photo->total_tags, + + // Migration status + 'is_migrated' => !is_null($photo->migrated_at), + ]; + }); + + return response()->json([ + 'photos' => $photos->items(), + 'pagination' => [ + 'current_page' => $photos->currentPage(), + 'last_page' => $photos->lastPage(), + 'per_page' => $photos->perPage(), + 'total' => $photos->total(), + ], + 'user' => [ + 'id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, + ] + ]); + } + + /** + * Get single photo details + */ + public function show($photoId): JsonResponse + { + $user = Auth::user(); + + $photo = Photo::where('user_id', $user->id) + ->where('id', $photoId) + ->with([ + 'team', + 'smoking', 'food', 'coffee', 'alcohol', 'softdrinks', + 'sanitary', 'coastal', 'dumping', 'industrial', 'brands', + 'dogshit', 'art', 'material', 'other', 'customTags', + 'photoTags.category', + 'photoTags.object', + 'photoTags.primaryCustomTag', + 'photoTags.extraTags.extraTag' + ]) + ->firstOrFail(); + + return response()->json([ + 'photo' => [ + 'id' => $photo->id, + 'filename' => $photo->filename, + 'datetime' => $photo->datetime, + 'lat' => $photo->lat, + 'lon' => $photo->lon, + 'model' => $photo->model, + 'remaining' => $photo->remaining, + 'display_name' => $photo->display_name, + 'team_id' => $photo->team_id, + 'team' => $photo->team, + 'total_litter' => $photo->total_litter, + 'migrated_at' => $photo->migrated_at, + 'old_tags' => $photo->tags(), + 'new_tags' => $this->getNewTags($photo), + 'summary' => $photo->summary, + 'xp' => $photo->xp, + 'total_tags' => $photo->total_tags, + 'is_migrated' => !is_null($photo->migrated_at), + ] + ]); + } + + /** + * Get stats separately (can be cached) + */ + public function stats(Request $request): JsonResponse + { + $user = $request->user(); + + // Total photos for user + $totalPhotos = Photo::where('user_id', $user->id)->count(); + + // Untagged photos count + $leftToTag = Photo::where('user_id', $user->id) + ->doesntHave('photoTags') + ->count(); + + // Get tag counts from Redis + $userMetrics = RedisMetricsCollector::getUserMetrics($user->id); + $totalTags = array_sum($userMetrics['objects'] ?? []) + + array_sum($userMetrics['materials'] ?? []) + + array_sum($userMetrics['brands'] ?? []) + + array_sum($userMetrics['custom_tags'] ?? []); + + // Calculate percentage + $taggedPhotos = max(0, $totalPhotos - $leftToTag); + $taggedPercentage = $totalPhotos > 0 + ? (int)round(($taggedPhotos / $totalPhotos) * 100) + : 0; + + return response()->json([ + 'totalPhotos' => $totalPhotos, + 'totalTags' => $totalTags, + 'leftToTag' => $leftToTag, + 'taggedPercentage' => $taggedPercentage + ]); + } + + /** + * Transform new tags structure + */ + private function getNewTags($photo): array + { + if (!$photo->photoTags || $photo->photoTags->count() === 0) { + return []; + } + + $newTags = []; + + foreach ($photo->photoTags as $photoTag) { + $tag = [ + 'id' => $photoTag->id, + 'quantity' => $photoTag->quantity, + 'picked_up' => $photoTag->picked_up, + ]; + + // Add category + if ($photoTag->category) { + $tag['category'] = [ + 'id' => $photoTag->category->id, + 'key' => $photoTag->category->key, + ]; + } + + // Add object + if ($photoTag->object) { + $tag['object'] = [ + 'id' => $photoTag->object->id, + 'key' => $photoTag->object->key, + ]; + } + + // Add primary custom tag + if ($photoTag->primaryCustomTag) { + $tag['primary_custom_tag'] = [ + 'id' => $photoTag->primaryCustomTag->id, + 'key' => $photoTag->primaryCustomTag->key, + ]; + } + + // Add extra tags + $extraTags = []; + foreach ($photoTag->extraTags as $extra) { + $extraTag = [ + 'type' => $extra->tag_type, + 'quantity' => $extra->quantity, + 'index' => $extra->index, + ]; + + if ($extra->extraTag) { + $extraTag['tag'] = [ + 'id' => $extra->extraTag->id, + 'key' => $extra->extraTag->key, + ]; + } + + $extraTags[] = $extraTag; + } + + if (!empty($extraTags)) { + $tag['extra_tags'] = $extraTags; + } + + $newTags[] = $tag; + } + + return $newTags; + } +} diff --git a/app/Http/Controllers/User/ProfileController.php b/app/Http/Controllers/User/ProfileController.php index 0f9ea314e..992141f2b 100644 --- a/app/Http/Controllers/User/ProfileController.php +++ b/app/Http/Controllers/User/ProfileController.php @@ -8,7 +8,7 @@ use App\Level; use App\Models\CustomTag; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 7cb310453..0038d8320 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\Auth; diff --git a/app/Http/Controllers/WebhookController.php b/app/Http/Controllers/WebhookController.php index 986663c51..48a6b4878 100644 --- a/app/Http/Controllers/WebhookController.php +++ b/app/Http/Controllers/WebhookController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers; -use App\Models\User\User; +use App\Models\Users\User; use App\Plan; use Exception; // use App\Billing\Payments; diff --git a/app/Http/Controllers/WorldCup/GetDataForWorldCupController.php b/app/Http/Controllers/WorldCup/GetDataForWorldCupController.php index 19723c803..5775b2b0f 100644 --- a/app/Http/Controllers/WorldCup/GetDataForWorldCupController.php +++ b/app/Http/Controllers/WorldCup/GetDataForWorldCupController.php @@ -8,6 +8,7 @@ use App\Models\Leaderboard\Leaderboard; use App\Http\Controllers\Controller; +use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Redis; class GetDataForWorldCupController extends Controller @@ -26,7 +27,7 @@ class GetDataForWorldCupController extends Controller * * @return array */ - public function __invoke (): array + public function __invoke (): JsonResponse { $littercoin = Littercoin::count(); @@ -140,7 +141,7 @@ public function __invoke (): array $leaderboardIds = Redis::zrevrange("leaderboard:users:$year:$month:$day", 0, 9, 'withscores'); $globalLeaders = Leaderboard::getLeadersByUserIds($leaderboardIds); - return [ + return response()->json([ 'countries' => $countries, 'total_litter' => $total_litter, 'total_photos' => $total_photos, @@ -149,6 +150,6 @@ public function __invoke (): array 'nextXp' => $nextXp, 'littercoin' => $littercoin, 'owed' => 0 - ]; + ]); } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index abdc5c40f..67c2189ef 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -3,6 +3,7 @@ namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; +use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful; class Kernel extends HttpKernel { @@ -41,6 +42,7 @@ class Kernel extends HttpKernel 'api' => [ 'throttle:60,1', + EnsureFrontendRequestsAreStateful::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; @@ -53,7 +55,6 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ - 'fw-block-blacklisted' => \PragmaRX\Firewall\Middleware\FirewallBlacklist::class, 'admin' => \App\Http\Middleware\IsAdmin::class, 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, diff --git a/app/Http/Requests/AddTagsRequest.php b/app/Http/Requests/AddTagsRequest.php index c138a038d..0a6e03aa9 100644 --- a/app/Http/Requests/AddTagsRequest.php +++ b/app/Http/Requests/AddTagsRequest.php @@ -15,7 +15,7 @@ public function rules() { return [ 'photo_id' => 'required|exists:photos,id', - 'tags' => 'required_without:custom_tags|array', + 'tags' => 'required_without:custom_tags|array|min:1', 'picked_up' => 'required|boolean', 'custom_tags' => 'required_without:tags|array|max:3', 'custom_tags.*' => 'distinct:ignore_case|min:3|max:100' diff --git a/app/Http/Requests/Api/AddTagsRequest.php b/app/Http/Requests/Api/AddTagsRequest.php index 3c1d19f51..6472199ba 100644 --- a/app/Http/Requests/Api/AddTagsRequest.php +++ b/app/Http/Requests/Api/AddTagsRequest.php @@ -16,7 +16,7 @@ public function rules() return [ 'photo_id' => 'required|exists:photos,id', // 'litter' => 'required_without_all:tags,custom_tags|array', -// 'tags' => 'required_without_all:litter,custom_tags|array', + 'tags' => 'bail|required_without_all:litter,custom_tags|array|min:1', 'picked_up' => 'nullable|boolean', 'custom_tags' => 'array|max:3', 'custom_tags.*' => 'distinct:ignore_case|min:3|max:100' diff --git a/app/Http/Requests/Api/PhotoTagsRequest.php b/app/Http/Requests/Api/PhotoTagsRequest.php new file mode 100644 index 000000000..2dc226dd9 --- /dev/null +++ b/app/Http/Requests/Api/PhotoTagsRequest.php @@ -0,0 +1,23 @@ + [ + 'required', + 'integer', + Rule::exists('photos', 'id')->where(function ($query) { + $query->where('user_id', $this->user()->id); + }), + ], + 'tags' => 'required|array', + ]; + } +} diff --git a/app/Http/Requests/Location/BaseLocationRequest.php b/app/Http/Requests/Location/BaseLocationRequest.php new file mode 100644 index 000000000..9ad2d9565 --- /dev/null +++ b/app/Http/Requests/Location/BaseLocationRequest.php @@ -0,0 +1,13 @@ + 'integer|min:1', + 'per_page' => 'integer|min:1|max:100', + 'sort_by' => Rule::in(['total_litter', 'total_photos']), // v1 only + 'sort_dir' => Rule::in(['asc', 'desc']), + 'parent_id' => 'integer|min:1', + ]; + } + + public function getSortBy(): string + { + return $this->validated()['sort_by'] ?? 'total_litter'; + } + + public function getSortDir(): string + { + return $this->validated()['sort_dir'] ?? 'desc'; + } + + public function getPage(): int + { + return (int) ($this->validated()['page'] ?? 1); + } + + public function getPerPage(): int + { + return (int) ($this->validated()['per_page'] ?? 50); + } + + public function getParentId(): ?int + { + return isset($this->validated()['parent_id']) + ? (int) $this->validated()['parent_id'] + : null; + } +} diff --git a/app/Http/Requests/Location/LeaderboardRequest.php b/app/Http/Requests/Location/LeaderboardRequest.php new file mode 100644 index 000000000..94f1c0895 --- /dev/null +++ b/app/Http/Requests/Location/LeaderboardRequest.php @@ -0,0 +1,20 @@ + Rule::in(['today', 'this_week', 'this_month', 'this_year', 'all_time']), + ]; + } + + public function getPeriod(): string + { + return $this->validated()['period'] ?? 'all_time'; + } +} diff --git a/app/Http/Requests/Location/PeriodRequest.php b/app/Http/Requests/Location/PeriodRequest.php new file mode 100644 index 000000000..c5b9693c5 --- /dev/null +++ b/app/Http/Requests/Location/PeriodRequest.php @@ -0,0 +1,20 @@ + Rule::in(['daily', 'weekly', 'monthly']), + ]; + } + + public function getPeriod(): string + { + return $this->validated()['period'] ?? 'daily'; + } +} diff --git a/app/Http/Requests/Location/TagsRequest.php b/app/Http/Requests/Location/TagsRequest.php new file mode 100644 index 000000000..0d68c5788 --- /dev/null +++ b/app/Http/Requests/Location/TagsRequest.php @@ -0,0 +1,26 @@ + Rule::in(['objects', 'brands', 'materials', 'categories']), + 'limit' => 'integer|min:1|max:100', + ]; + } + + public function getDimension(): string + { + return $this->validated()['dimension'] ?? 'objects'; + } + + public function getLimit(): int + { + return (int) ($this->validated()['limit'] ?? 20); + } +} diff --git a/app/Http/Requests/Points/PointsRequest.php b/app/Http/Requests/Points/PointsRequest.php new file mode 100644 index 000000000..0274fcd82 --- /dev/null +++ b/app/Http/Requests/Points/PointsRequest.php @@ -0,0 +1,198 @@ + 'required|integer|min:15|max:20', + 'bbox.left' => 'required|numeric|between:-180,180', + 'bbox.bottom' => 'required|numeric|between:-90,90', + 'bbox.right' => 'required|numeric|between:-180,180', + 'bbox.top' => 'required|numeric|between:-90,90', + 'categories' => 'array', + 'categories.*' => 'string|distinct|exists:categories,key', + 'litter_objects' => 'array', + 'litter_objects.*' => 'string|distinct|exists:litter_objects,key', + 'materials' => 'array', + 'materials.*' => 'string|distinct|exists:materials,key', + 'brands' => 'array', + 'brands.*' => 'string|distinct|exists:brandslist,key', + 'custom_tags' => 'array', + 'custom_tags.*' => 'string|distinct|exists:custom_tags_new,key', + 'per_page' => 'integer|min:1|max:500', + 'page' => 'integer|min:1', + 'from' => 'nullable|date_format:Y-m-d', + 'to' => 'nullable|date_format:Y-m-d|after_or_equal:from', + 'username' => 'string', + 'year' => 'nullable|integer|min:2017|max:' . date('Y') + ]; + } + + /** + * Get validation rules for stats requests (excludes pagination) + * This method is kept for backward compatibility but the PointsStatsRequest + * class should be used instead. + */ + public function statsRules(): array + { + $rules = $this->rules(); + + // Remove pagination-specific rules + unset($rules['per_page'], $rules['page']); + + return $rules; + } + + /** + * Configure the validator instance. + */ + public function withValidator($validator) + { + $validator->after(function ($validator) { + $this->validateBbox($validator); + }); + } + + /** + * Validate bbox parameters + */ + protected function validateBbox($validator): void + { + if ($validator->errors()->any()) { + return; // Skip bbox validation if basic validation failed + } + + $bbox = $this->input('bbox'); + + if (!$bbox || !is_array($bbox)) { + return; + } + + // Validate bbox ordering + if ( + !isset($bbox['left'], $bbox['right'], $bbox['bottom'], $bbox['top']) || + $bbox['left'] >= $bbox['right'] || + $bbox['bottom'] >= $bbox['top'] + ) { + $validator->errors()->add( + 'bbox', + 'Invalid bounding box: left must be < right and bottom must be < top' + ); + return; + } + + // Validate bbox size based on zoom level + $zoom = $this->input('zoom'); + if (!$zoom) { + return; // Zoom validation will catch this + } + + $width = $bbox['right'] - $bbox['left']; + $height = $bbox['top'] - $bbox['bottom']; + $area = $width * $height; + + $maxAreas = [ + 15 => 100, // 10° x 10° + 16 => 25, // 5° x 5° + 17 => 10, // ~3° x 3° + 18 => 4, // 2° x 2° + 19 => 1, // 1° x 1° + 20 => 0.25 // 0.5° x 0.5° + ]; + + if (isset($maxAreas[$zoom]) && $area > $maxAreas[$zoom]) { + $validator->errors()->add( + 'bbox', + "Bounding box too large for zoom level {$zoom}" + ); + } + } + + /** + * Get custom error messages + */ + public function messages(): array + { + return [ + 'zoom.required' => 'Zoom level is required', + 'zoom.integer' => 'Zoom level must be an integer', + 'zoom.min' => 'Zoom level must be at least 15', + 'zoom.max' => 'Zoom level must be at most 20', + + 'bbox.left.required' => 'Bounding box left coordinate is required', + 'bbox.right.required' => 'Bounding box right coordinate is required', + 'bbox.bottom.required' => 'Bounding box bottom coordinate is required', + 'bbox.top.required' => 'Bounding box top coordinate is required', + + 'bbox.*.numeric' => 'Bounding box coordinates must be numeric', + 'bbox.left.between' => 'Left coordinate must be between -180 and 180', + 'bbox.right.between' => 'Right coordinate must be between -180 and 180', + 'bbox.bottom.between' => 'Bottom coordinate must be between -90 and 90', + 'bbox.top.between' => 'Top coordinate must be between -90 and 90', + + 'categories.array' => 'Categories must be an array', + 'categories.*.exists' => 'One or more selected categories do not exist', + 'categories.*.distinct' => 'Categories must be unique', + + 'litter_objects.array' => 'Litter objects must be an array', + 'litter_objects.*.exists' => 'One or more selected litter objects do not exist', + 'litter_objects.*.distinct' => 'Litter objects must be unique', + + 'materials.array' => 'Materials must be an array', + 'materials.*.exists' => 'One or more selected materials do not exist', + 'materials.*.distinct' => 'Materials must be unique', + + 'brands.array' => 'Brands must be an array', + 'brands.*.exists' => 'One or more selected brands do not exist', + 'brands.*.distinct' => 'Brands must be unique', + + 'custom_tags.array' => 'Custom tags must be an array', + 'custom_tags.*.exists' => 'One or more selected custom tags do not exist', + 'custom_tags.*.distinct' => 'Custom tags must be unique', + + 'per_page.integer' => 'Items per page must be an integer', + 'per_page.min' => 'Items per page must be at least 1', + 'per_page.max' => 'Items per page must be at most 500', + + 'page.integer' => 'Page number must be an integer', + 'page.min' => 'Page number must be at least 1', + + 'from.date_format' => 'From date must be in Y-m-d format', + 'to.date_format' => 'To date must be in Y-m-d format', + 'to.after_or_equal' => 'To date must be after or equal to from date', + + 'year.integer' => 'Year must be an integer', + 'year.min' => 'Year must be 2017 or later', + 'year.max' => 'Year cannot be in the future', + ]; + } + + /** + * Get validated data excluding pagination parameters (for stats) + */ + public function getStatsData(): array + { + $validated = $this->validated(); + + // Remove pagination parameters + unset($validated['per_page'], $validated['page']); + + return $validated; + } +} diff --git a/app/Http/Requests/Points/PointsStatsRequest.php b/app/Http/Requests/Points/PointsStatsRequest.php new file mode 100644 index 000000000..a1466ddf9 --- /dev/null +++ b/app/Http/Requests/Points/PointsStatsRequest.php @@ -0,0 +1,20 @@ + [ + 'required', + 'image', + 'mimes:jpg,png,jpeg,heif,heic', + 'dimensions:min_width=1,min_height=1', + 'max:20480' + ] + ]; } - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() + public function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) + { + throw new \Illuminate\Validation\ValidationException($validator); + } + + public function after(): array { return [ - 'file' => 'required|mimes:jpg,png,jpeg,heif,heic' + function (Validator $validator): void { + $photo = $this->file('photo'); + + if (!$photo || !$photo->isValid()) { + return; + } + + try { + $exif = @exif_read_data($photo->getRealPath()) ?: []; + } catch (\Exception $e) { + $validator->errors()->add('photo', 'Could not read EXIF data from the image.'); + return; + } + + if (empty($exif)) { + $validator->errors()->add('photo', 'The uploaded image does not contain EXIF data.'); + return; + } + + // Duplicate photo check based on EXIF datetime + $dateTime = getDateTimeForPhoto($exif); + if ($dateTime) { + $photoExists = Photo::where([ + 'user_id' => auth()->id(), + 'datetime' => $dateTime + ])->exists(); + + if ($photoExists) { + $validator->errors()->add('photo', 'You have already uploaded this photo'); + return; + } + } + + // GPS validation + $hasGps = + !empty($exif["GPSLatitudeRef"]) && + !empty($exif["GPSLatitude"]) && + !empty($exif["GPSLongitudeRef"]) && + !empty($exif["GPSLongitude"]); + + if (!$hasGps) { + $validator->errors()->add('photo', $this->gpsError1); + return; + } + + // Check if GPS coords are "0/0" + if ( + $exif["GPSLatitude"][0] === "0/0" && + $exif["GPSLongitude"][0] === "0/0" + ) { + $validator->errors()->add('photo', $this->gpsError2); + return; + } + + // Convert GPS to coordinates + $coordinates = getCoordinatesFromPhoto($exif); + $lat = $coordinates[0] ?? null; + $lon = $coordinates[1] ?? null; + + if ( + ($lat === 0 && $lon === 0) || + ($lat === '0' && $lon === '0') || + $lat === null || $lon === null + ) { + $validator->errors()->add('photo', $this->gpsError2); + } + } ]; } } diff --git a/app/Http/Resources/GlobalStatsResource.php b/app/Http/Resources/GlobalStatsResource.php new file mode 100644 index 000000000..c489e2f4e --- /dev/null +++ b/app/Http/Resources/GlobalStatsResource.php @@ -0,0 +1,33 @@ + [ + 'litter' => $this['total_litter'], + 'photos' => $this['total_photos'], + 'contributors' => $this['total_contributors'], + 'countries' => $this['total_countries'], + ], + + 'level' => [ + 'current' => $this['level'], + 'xp' => [ + 'current' => $this['current_xp'], + 'previous' => $this['previous_xp'], + 'next' => $this['next_xp'], + ], + 'progress' => $this['progress'], + ], + + 'top_categories' => $this['top_categories'], + 'top_brands' => $this['top_brands'], + ]; + } +} diff --git a/app/Http/Resources/LeaderboardResource.php b/app/Http/Resources/LeaderboardResource.php new file mode 100644 index 000000000..37f9ef203 --- /dev/null +++ b/app/Http/Resources/LeaderboardResource.php @@ -0,0 +1,25 @@ + $request->period ?? 'all_time', + 'leaders' => collect($this->resource)->map(fn($user, $index) => [ + 'rank' => $index + 1, + 'user_id' => $user['user_id'], + 'display_name' => $user['display_name'], + 'stats' => [ + 'photos' => $user['photo_count'], + 'xp' => $user['total_xp'], + 'litter' => $user['total_litter'], + ], + ]), + ]; + } +} diff --git a/app/Http/Resources/LocationListResource.php b/app/Http/Resources/LocationListResource.php new file mode 100644 index 000000000..705bc67c4 --- /dev/null +++ b/app/Http/Resources/LocationListResource.php @@ -0,0 +1,41 @@ + $this->id, + 'name' => $this->country ?? $this->state ?? $this->city, + 'type' => $this->getLocationType(), + 'verified' => $this->manual_verify, + + // Core metrics only + 'total_litter' => $this->total_litter ?? $this->total_litter_redis, + 'total_photos' => $this->total_photos ?? $this->total_photos_redis, + 'total_contributors' => $this->total_contributors ?? $this->total_contributors_redis, + 'percentage_litter' => $this->percentage_litter ?? 0, + 'percentage_photos' => $this->percentage_photos ?? 0, + + // Ranking score if present (from ZSET ranking) + 'rank_score' => $this->when( + isset($this->rank_score), + $this->rank_score + ), + + 'last_uploaded_at' => $this->last_uploaded_at, + ]; + } + + private function getLocationType(): string + { + if (isset($this->country) && !isset($this->state)) return 'country'; + if (isset($this->state) && !isset($this->city)) return 'state'; + if (isset($this->city)) return 'city'; + return 'unknown'; + } +} diff --git a/app/Http/Resources/LocationResource.php b/app/Http/Resources/LocationResource.php new file mode 100644 index 000000000..1e257f758 --- /dev/null +++ b/app/Http/Resources/LocationResource.php @@ -0,0 +1,74 @@ + $this->id, + 'name' => $this->country ?? $this->state ?? $this->city, + 'type' => $this->getLocationType(), + 'verified' => $this->manual_verify, + + // Core metrics + 'metrics' => [ + 'total_litter' => $this->total_litter ?? $this->total_litter_redis, + 'total_photos' => $this->total_photos ?? $this->total_photos_redis, + 'total_contributors' => $this->total_contributors ?? $this->total_contributors_redis, + 'percentage_litter' => $this->percentage_litter ?? 0, + 'percentage_photos' => $this->percentage_photos ?? 0, + ], + + // Averages + 'averages' => [ + 'litter_per_user' => $this->avg_litter_per_user ?? 0, + 'photos_per_user' => $this->avg_photos_per_user ?? 0, + ], + + // Optional breakdowns (only if present) + 'breakdowns' => $this->when( + isset($this->category_breakdown) || isset($this->object_breakdown), + [ + 'categories' => $this->category_breakdown ?? [], + 'objects' => $this->object_breakdown ?? [], + 'brands' => $this->brand_breakdown ?? [], + ] + ), + + // Activity + 'last_uploaded_at' => $this->last_uploaded_at, + 'updated_at' => $this->updated_at, + 'updated_at_human' => $this->updatedAtDiffForHumans, + + // Relationships + 'creator' => $this->whenLoaded('creator', fn() => [ + 'id' => $this->creator->id, + 'name' => $this->creator->name, + ]), + 'last_uploader' => $this->whenLoaded('lastUploader', fn() => [ + 'id' => $this->lastUploader->id, + 'name' => $this->lastUploader->name, + ]), + ]; + } + + private function getLocationType(): string + { + if (isset($this->country) && !isset($this->state)) return 'country'; + if (isset($this->state) && !isset($this->city)) return 'state'; + if (isset($this->city)) return 'city'; + return 'unknown'; + } +} + +/** + * Leaderboard Resource (for v1.1) + */ + diff --git a/app/Http/Resources/PaginatedLocationsResource.php b/app/Http/Resources/PaginatedLocationsResource.php new file mode 100644 index 000000000..64255533a --- /dev/null +++ b/app/Http/Resources/PaginatedLocationsResource.php @@ -0,0 +1,20 @@ + LocationListResource::collection($this['locations']), + 'pagination' => $this['pagination'], + 'totals' => $this['totals'], + ]; + } +} diff --git a/app/Http/Resources/TagsResource.php b/app/Http/Resources/TagsResource.php new file mode 100644 index 000000000..dbc513674 --- /dev/null +++ b/app/Http/Resources/TagsResource.php @@ -0,0 +1,27 @@ + collect($this['items'])->map(fn($item) => [ + 'id' => $item['id'], + 'name' => $item['name'], + 'count' => $item['count'], + 'percentage' => $item['percentage'], + ]), + + 'totals' => [ + 'litter' => $this['total'], + 'dimension' => $this['dimension_total'], + ], + + 'other' => $this['other'], + ]; + } +} diff --git a/app/Http/Resources/TimeSeriesResource.php b/app/Http/Resources/TimeSeriesResource.php new file mode 100644 index 000000000..49a2221c2 --- /dev/null +++ b/app/Http/Resources/TimeSeriesResource.php @@ -0,0 +1,16 @@ + $request->period ?? 'daily', + 'data' => $this->resource, + ]; + } +} diff --git a/app/Jobs/Api/AddTags.php b/app/Jobs/Api/AddTags.php index 1532e7919..979fd6443 100644 --- a/app/Jobs/Api/AddTags.php +++ b/app/Jobs/Api/AddTags.php @@ -3,7 +3,7 @@ namespace App\Jobs\Api; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use App\Actions\Photos\AddTagsToPhotoAction; use App\Actions\Photos\AddCustomTagsToPhotoAction; use App\Actions\Locations\UpdateLeaderboardsForLocationAction; diff --git a/app/Jobs/Badges/GenerateBadgeImage.php b/app/Jobs/Badges/GenerateBadgeImage.php new file mode 100644 index 000000000..04c484683 --- /dev/null +++ b/app/Jobs/Badges/GenerateBadgeImage.php @@ -0,0 +1,58 @@ +badge = $badge; + } + + public function handle(): void + { + $client = \OpenAI::client(config('services.openai.key')); + + // The background should be transparent but DALLE-3 doesn't support transparent images yet. + $prompt = "Create a vibrant minimalistic gamification badge representing a cleanup award in a {$this->badge->subtype} geographic area. + Place relative geographic features in the foreground and background. + The badge should feature a modern shield design with a flowing ribbon that prominently displays the text '{$this->badge->subtype}' in clear, error-free lettering."; + + $response = $client->images()->create([ + 'model' => 'dall-e-3', + 'prompt' => $prompt, + 'n' => 1, + 'size' => '1024x1024', + 'quality' => 'standard', + ]); + + if (isset($response->data[0]->url)) { + $imageUrl = $response->data[0]->url; + + // Fetch the generated image + $imageContent = file_get_contents($imageUrl); + + // Save the image to storage + $filePath = "badges/{$this->badge->type}-{$this->badge->subtype}.png"; + Storage::disk('public')->put($filePath, $imageContent); + + // Update the Badge model + $this->badge->update(['filename' => $filePath]); + + event(new BadgeCreated($this->badge)); + } else { + Log::error("Badge image generation failed", ['response' => $response]); + } + } +} diff --git a/app/Jobs/Clusters/ProcessClusteringBatch.php b/app/Jobs/Clusters/ProcessClusteringBatch.php new file mode 100644 index 000000000..0d4a9b67f --- /dev/null +++ b/app/Jobs/Clusters/ProcessClusteringBatch.php @@ -0,0 +1,97 @@ +tries = config('clustering.queue.max_tries', 3); + $this->queue = config('clustering.queue.name', 'clustering'); + $this->connection = config('clustering.queue.connection', 'database'); + } + + /** + * Execute the job. + */ + public function handle(ClusteringService $service): void + { + $batchSize = config('clustering.batch_size', 100); + $processed = 0; + $failed = 0; + + // Process one batch of dirty tiles + $tiles = $service->popDirtyTiles($batchSize); + + if (empty($tiles)) { + return; // No work to do + } + + foreach ($tiles as $tileKey) { + try { + $service->clusterTile($tileKey); + $processed++; + } catch (\Exception $e) { + $failed++; + // Re-add with backoff + $service->markTileDirty($tileKey, true); + + Log::error('Failed to cluster tile', [ + 'tile_key' => $tileKey, + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + } + } + + if ($processed > 0 || $failed > 0) { + Log::info('Clustering batch completed', [ + 'processed' => $processed, + 'failed' => $failed, + ]); + } + + // If we processed a full batch, there might be more work + if (count($tiles) == $batchSize) { + self::dispatch()->delay(now()->addSeconds(1)); + } + } + + /** + * Calculate the number of seconds to wait before retrying the job. + * + * @return array + */ + public function backoff(): array + { + $backoffString = config('clustering.queue.backoff', '60,300,900'); + return array_map('intval', explode(',', $backoffString)); + } +} diff --git a/app/Jobs/Photos/AddTagsToPhoto.php b/app/Jobs/Photos/AddTagsToPhoto.php index 0856a5384..c8c00fc80 100644 --- a/app/Jobs/Photos/AddTagsToPhoto.php +++ b/app/Jobs/Photos/AddTagsToPhoto.php @@ -7,7 +7,7 @@ use App\Actions\Locations\UpdateLeaderboardsForLocationAction; use App\Events\TagsVerifiedByAdmin; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; diff --git a/app/Jobs/RollupUploadsAndTags.php b/app/Jobs/RollupUploadsAndTags.php new file mode 100644 index 000000000..1206c4e19 --- /dev/null +++ b/app/Jobs/RollupUploadsAndTags.php @@ -0,0 +1,73 @@ +cursor->copy()->startOfDay(); + $to = $from->copy()->addDay(); + + // ---------- GLOBAL ---------- + $g = Photo::whereBetween('created_at', [$from, $to]) + ->selectRaw('COUNT(*) uploads, SUM(tags_total) tags') + ->first(); + + $this->upsertDaily('global', 0, $from, $g); + + // ---------- COUNTRY / STATE / CITY ---------- + foreach (['country_id','state_id','city_id'] as $col) { + Photo::whereBetween('created_at', [$from,$to]) + ->whereNotNull($col) + ->groupBy($col) + ->selectRaw("$col id, COUNT(*) uploads, SUM(tags_total) tags") + ->orderBy($col) + ->chunk(500, function ($set) use ($col, $from) { + foreach ($set as $row) { + $this->upsertDaily(rtrim($col,'_id'), $row->id, $from, $row); + } + }); + } + + // ---------- WEEK / MONTH / YEAR ---------- + app(\App\Services\PeriodAggregator::class)->extendFromDaily($from); + } + + /* --------------------------------------------------------------- */ + + private function upsertDaily( + string $type, + int $id, + Carbon $day, + $row + ): void { + if (!$row->uploads) return; + + DB::table('photo_metrics_daily')->upsert( + [[ + 'location_type'=> $type, + 'location_id' => $id, + 'day' => $day->toDateString(), + 'uploads' => $row->uploads, + 'tags_total' => $row->tags ?? 0, + 'updated_at' => now(), + ]], + ['location_type','location_id','day'], + ['uploads','tags_total','updated_at'] + ); + } +} diff --git a/app/Jobs/TrimRankingZsetsJob.php b/app/Jobs/TrimRankingZsetsJob.php new file mode 100644 index 000000000..72415c767 --- /dev/null +++ b/app/Jobs/TrimRankingZsetsJob.php @@ -0,0 +1,131 @@ +keys = $keys; + $this->maxSize = $maxSize ?? config('redis_metrics.limits.max_ranking_items', 500); + } + + /** + * Execute the job + */ + public function handle(): void + { + $startTime = microtime(true); + $trimmedCount = 0; + + try { + // Process keys in chunks to avoid memory issues + foreach (array_chunk($this->keys, 50) as $chunk) { + $trimmedCount += $this->trimChunk($chunk); + } + + $duration = microtime(true) - $startTime; + + Log::info('Ranking ZSETs trimmed successfully', [ + 'keys_processed' => count($this->keys), + 'trimmed_count' => $trimmedCount, + 'duration_seconds' => round($duration, 2), + ]); + } catch (\Exception $e) { + Log::error('Failed to trim ranking ZSETs', [ + 'error' => $e->getMessage(), + 'keys_count' => count($this->keys), + ]); + + throw $e; + } + } + + /** + * Trim a chunk of keys + */ + private function trimChunk(array $keys): int + { + $trimmed = 0; + + Redis::pipeline(function ($pipe) use ($keys, &$trimmed) { + foreach ($keys as $key) { + // Skip certain ranking types that shouldn't be trimmed + if ($this->shouldSkipTrim($key)) { + continue; + } + + $this->trimZset($pipe, $key, $this->maxSize); + $trimmed++; + } + }); + + return $trimmed; + } + + /** + * Check if a key should be skipped + */ + private function shouldSkipTrim(string $key): bool + { + // Don't trim location hierarchy rankings + $skipPatterns = [ + ':rank:c:litter', + ':rank:c:photos', + ':rank:s:litter', + ':rank:s:photos', + ':rank:ci:litter', + ':rank:ci:photos', + ':rank:contributors', + ]; + + foreach ($skipPatterns as $pattern) { + if (str_contains($key, $pattern)) { + return true; + } + } + + return false; + } + + /** + * Handle job failure + */ + public function failed(\Throwable $exception): void + { + Log::error('TrimRankingZsetsJob failed after retries', [ + 'error' => $exception->getMessage(), + 'keys_count' => count($this->keys), + ]); + } +} diff --git a/app/Listeners/Images/TweetBadgeCreated.php b/app/Listeners/Images/TweetBadgeCreated.php new file mode 100644 index 000000000..72042af9d --- /dev/null +++ b/app/Listeners/Images/TweetBadgeCreated.php @@ -0,0 +1,22 @@ +environment('production')) { + $badge = $event->badge; + + $path = Storage::disk('public')->path($badge->filename); + + Twitter::sendTweetWithImage("An awesome new #openlittermap badge has been created & unlocked for {$badge->subtype}.", $path); + } + } +} diff --git a/app/Listeners/Locations/IncreaseLocationTotalPhotos.php b/app/Listeners/Locations/IncreaseLocationTotalPhotos.php index 89907f496..f8a819e05 100644 --- a/app/Listeners/Locations/IncreaseLocationTotalPhotos.php +++ b/app/Listeners/Locations/IncreaseLocationTotalPhotos.php @@ -4,7 +4,7 @@ use App\Actions\Locations\UpdateTotalPhotosForLocationAction; use App\Events\ImageUploaded; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Contracts\Queue\ShouldQueue; class IncreaseLocationTotalPhotos implements ShouldQueue diff --git a/app/Listeners/Teams/IncreaseTeamTotalPhotos.php b/app/Listeners/Teams/IncreaseTeamTotalPhotos.php index a47cdb1e9..cdee3ed46 100644 --- a/app/Listeners/Teams/IncreaseTeamTotalPhotos.php +++ b/app/Listeners/Teams/IncreaseTeamTotalPhotos.php @@ -2,7 +2,7 @@ namespace App\Listeners\Teams; -use App\Models\User\User; +use App\Models\Users\User; use App\Models\Teams\Team; use App\Events\ImageUploaded; use Illuminate\Support\Facades\DB; diff --git a/app/Listeners/User/UpdateUserTimeSeries.php b/app/Listeners/User/UpdateUserTimeSeries.php index 2a9452ea0..2dfa913e3 100644 --- a/app/Listeners/User/UpdateUserTimeSeries.php +++ b/app/Listeners/User/UpdateUserTimeSeries.php @@ -3,7 +3,7 @@ namespace App\Listeners\User; use App\Events\TagsVerifiedByAdmin; -use App\Models\User\User; +use App\Models\Users\User; use Carbon\Carbon; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; @@ -16,8 +16,6 @@ class UpdateUserTimeSeries implements ShouldQueue * * @param TagsVerifiedByAdmin $event * @return void - * - * Todo: move this to redis */ public function handle (TagsVerifiedByAdmin $event) { diff --git a/app/LitterES.php b/app/LitterES.php deleted file mode 100644 index 1129780ef..000000000 --- a/app/LitterES.php +++ /dev/null @@ -1,637 +0,0 @@ -jsonDecoded = json_decode($this->json); - - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} diff --git a/app/LitterFrench.php b/app/LitterFrench.php deleted file mode 100644 index 204246292..000000000 --- a/app/LitterFrench.php +++ /dev/null @@ -1,647 +0,0 @@ -jsonDecoded = json_decode($this->json); - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} - - -//// USAGE - -// $jsonDecoded = Litterrata::INSTANCE()->getDecodedJSON(); - -// $joking = "smoking"; -// $lable = "table"; -// echo $jsonDecoded->$joking->$lable . "
\n"; -// echo $jsonDecoded->smoking->table . "
\n"; - -//// USAGE diff --git a/app/LitterGerman.php b/app/LitterGerman.php deleted file mode 100644 index d394cfae9..000000000 --- a/app/LitterGerman.php +++ /dev/null @@ -1,737 +0,0 @@ -jsonDecoded = json_decode($this->json); - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} - - -//// USAGE - -// $jsonDecoded = Litterrata::INSTANCE()->getDecodedJSON(); - -// $joking = "smoking"; -// $lable = "table"; -// echo $jsonDecoded->$joking->$lable . "
\n"; -// echo $jsonDecoded->smoking->table . "
\n"; - -//// USAGE diff --git a/app/LitterItalian.php b/app/LitterItalian.php deleted file mode 100644 index 176e8ac10..000000000 --- a/app/LitterItalian.php +++ /dev/null @@ -1,681 +0,0 @@ -jsonDecoded = json_decode($this->json); - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} diff --git a/app/LitterMalay.php b/app/LitterMalay.php deleted file mode 100644 index 09fbf86a3..000000000 --- a/app/LitterMalay.php +++ /dev/null @@ -1,650 +0,0 @@ -jsonDecoded = json_decode($this->json); - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} - - -//// USAGE - -// $jsonDecoded = Litterrata::INSTANCE()->getDecodedJSON(); - -// $joking = "smoking"; -// $lable = "table"; -// echo $jsonDecoded->$joking->$lable . "
\n"; -// echo $jsonDecoded->smoking->table . "
\n"; - -//// USAGE diff --git a/app/LitterPolish.php b/app/LitterPolish.php deleted file mode 100644 index ea8df5968..000000000 --- a/app/LitterPolish.php +++ /dev/null @@ -1,647 +0,0 @@ -jsonDecoded = json_decode($this->json); - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} - - -//// USAGE - -// $jsonDecoded = Litterrata::INSTANCE()->getDecodedJSON(); - -// $joking = "smoking"; -// $lable = "table"; -// echo $jsonDecoded->$joking->$lable . "
\n"; -// echo $jsonDecoded->smoking->table . "
\n"; - -//// USAGE diff --git a/app/LitterTurkish.php b/app/LitterTurkish.php deleted file mode 100644 index 379725f12..000000000 --- a/app/LitterTurkish.php +++ /dev/null @@ -1,636 +0,0 @@ -jsonDecoded = json_decode($this->json); - - } - public function getDecodedJSON(){ return $this->jsonDecoded; } -} diff --git a/app/Litterrata.php b/app/Litterrata.php deleted file mode 100644 index 02f5af5ee..000000000 --- a/app/Litterrata.php +++ /dev/null @@ -1,277 +0,0 @@ - 211 -// Every category could be category -> 1:n - -final class Litterrata { - private $json = ' -{ - "categories": { - "smoking": "1", - "alcohol": "2", - "coffee": "3", - "food": "4", - "softdrinks": "5", - "sanitary": "6", - "other": "7", - "coastal": "8", - "dumping": "9", - "industrial": "10", - "dogshit": "11" - }, - "smoking": { - "butts": "1", - "lighters": "2", - "cigaretteBox": "3", - "tobaccoPouch": "4", - "skins": "5", - "smoking_plastic": "6", - "filters": "7", - "filterbox": "8", - "vape_pen": "9", - "vape_oil": "10", - "smokingOther": "11" - }, - "alcohol": { - "beerCan": "12", - "beerBottle": "13", - "spiritBottle": "14", - "wineBottle": "15", - "brokenGlass": "16", - "bottleTops": "17", - "paperCardAlcoholPackaging": "18", - "plasticAlcoholPackaging": "19", - "six_pack_rings": "20", - "alcohol_plastic_cups": "21", - "pint": "22", - "alcoholOther": "23" - }, - "coffee": { - "coffeeCups": "24", - "coffeeLids": "25", - "coffeeOther": "26" - }, - "food": { - "sweetWrappers": "27", - "paperFoodPackaging": "28", - "plasticFoodPackaging": "29", - "plasticCutlery": "30", - "crisp_small": "31", - "crisp_large": "32", - "styrofoam_plate": "33", - "styrofoam_plate": "34", - "napkins": "35", - "sauce_packet": "36", - "glass_jar": "37", - "glass_jar_lid": "38", - "pizza_box": "39", - "aluminium_foil": "40", - "foodOther": "41" - }, - "softdrinks": { - "waterBottle": "42", - "fizzyDrinkBottle": "43", - "tinCan": "44", - "pullring": "45", - "bottleLid": "46", - "bottleLabel": "47", - "sportsDrink": "48", - "straws": "49", - "strawpacket": "50", - "plastic_cups": "51", - "plastic_cup_tops": "52", - "milk_bottle": "53", - "milk_carton": "54", - "paper_cups": "55", - "juice_cartons": "56", - "juice_bottles": "57", - "juice_packet": "58", - "ice_tea_bottles": "59", - "ice_tea_can": "60", - "energy_can": "61", - "styro_cup": "62", - "softDrinkOther": "63" - }, - "sanitary": { - "gloves": "64", - "facemask": "65", - "condoms": "66", - "nappies": "67", - "menstral": "68", - "deodorant": "69", - "ear_swabs": "70", - "tooth_pick": "71", - "tooth_brush": "72", - "wetwipes": "73", - "sanitaryOther": "74" - }, - "other": { - "dump": "75", - "random_litter": "76", - "dogshit": "77", - "pooinbag": "78", - "plastic": "79", - "life_buoy": "80", - "traffic_cone": "81", - "automobile": "82", - "balloons": "83", - "batteries": "84", - "clothing": "85", - "elec_small": "86", - "elec_large": "87", - "metal": "88", - "plastic_bags": "89", - "election_posters": "90", - "forsale_posters": "91", - "books": "92", - "magazine": "93", - "paper": "94", - "stationary": "95", - "washing_up": "96", - "hair_tie": "97", - "ear_plugs": "98", - "bags_litter": "99", - "cable_tie": "100", - "tyre": "101", - "overflowing_bins": "102", - "other": "103" - }, - "coastal": { - "microplastics": "104", - "mediumplastics": "105", - "macroplastics": "106", - "rope_small": "107", - "rope_medium": "108", - "rope_large": "109", - "fishing_gear_nets": "110", - "ghost_nets": "209", - "buoys": "111", - "degraded_plasticbottle": "112", - "degraded_plasticbag": "113", - "degraded_straws": "114", - "degraded_lighters": "115", - "balloons": "116", - "lego": "117", - "shotgun_cartridges": "118", - "styro_small": "119", - "styro_medium": "120", - "styro_large": "121", - "coastal_other": "122" - }, - "brands": { - "adidas": "123", - "amazon": "124", - "aldi": "125", - "apple": "126", - "applegreen": "127", - "asahi": "128", - "avoca": "129", - "ballygowan": "130", - "bewleys": "131", - "brambles": "132", - "budweiser": "133", - "bulmers": "134", - "burgerking": "135", - "butlers": "136", - "cadburys": "137", - "cafe_nero": "138", - "camel": "139", - "carlsberg": "140", - "centra": "141", - "circlek": "142", - "coke": "143", - "colgate": "144", - "coles": "145", - "corona": "146", - "costa": "147", - "doritos": "148", - "drpepper": "149", - "dunnes": "150", - "duracell": "151", - "durex": "152", - "esquires": "153", - "evian": "154", - "fosters": "155", - "frank_and_honest": "156", - "fritolay": "157", - "gatorade": "158", - "gillette": "159", - "guinness": "160", - "haribo": "161", - "heineken": "162", - "insomnia": "163", - "kellogs": "164", - "kfc": "165", - "lego": "166", - "lidl": "167", - "lindenvillage": "168", - "lolly_and_cookes": "169", - "loreal": "170", - "lucozade": "171", - "nero": "172", - "nescafe": "173", - "nestle": "174", - "marlboro": "175", - "mars": "176", - "mcdonalds": "177", - "nike": "178", - "obriens": "179", - "pepsi": "180", - "powerade": "181", - "redbull": "182", - "ribena": "183", - "samsung": "184", - "sainsburys": "185", - "spar": "186", - "starbucks": "187", - "stella": "188", - "subway": "189", - "supermacs": "190", - "supervalu": "191", - "tayto": "192", - "tesco": "193", - "thins": "194", - "volvic": "195", - "waitrose": "196", - "wilde_and_greene": "197", - "woolworths": "198", - "wrigleys": "199" - }, - "dumping": { - "small": "200", - "medium": "201", - "large": "202" - }, - "industrial": { - "oil": "203", - "chemical": "204", - "industrial_plastic": "205", - "bricks": "206", - "tape": "207", - "industrial_other": "208" - }, - "dogshit": { - "poo": "210", - "poo_in_bag": "211" - } -}'; - - private $jsonDecoded = null; - - public static function INSTANCE () - { - static $inst = null; - if ($inst === null) $inst = new Litterrata(); - return $inst; - } - - public function __construct () - { - $this->jsonDecoded = json_decode($this->json); - } - - public function getDecodedJSON(){ return $this->jsonDecoded; } -} diff --git a/app/Mail/NewTeamCreated.php b/app/Mail/NewTeamCreated.php index 8d1168d58..bf720eac7 100644 --- a/app/Mail/NewTeamCreated.php +++ b/app/Mail/NewTeamCreated.php @@ -2,7 +2,7 @@ namespace App\Mail; -use App\Models\User\User; +use App\Models\Users\User; use App\Team; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; diff --git a/app/Mail/NewUserRegMail.php b/app/Mail/NewUserRegMail.php index 98a324c4d..58ed034a5 100644 --- a/app/Mail/NewUserRegMail.php +++ b/app/Mail/NewUserRegMail.php @@ -2,7 +2,7 @@ namespace App\Mail; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; diff --git a/app/Mail/Update.php b/app/Mail/Update.php index 3f28684e1..6cfd6bb55 100644 --- a/app/Mail/Update.php +++ b/app/Mail/Update.php @@ -2,7 +2,7 @@ namespace App\Mail; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; diff --git a/app/Models/Achievements/Achievement.php b/app/Models/Achievements/Achievement.php new file mode 100644 index 000000000..f5dc1dd6f --- /dev/null +++ b/app/Models/Achievements/Achievement.php @@ -0,0 +1,36 @@ + 'array', + 'threshold' => 'integer', + 'tag_id' => 'integer', + ]; + + /** Users that have already unlocked this achievement. */ + public function users(): BelongsToMany + { + return $this->belongsToMany(User::class, 'user_achievements') + ->withPivot('unlocked_at') + ->withTimestamps(); + } +} diff --git a/app/Models/Achievements/UserAchievement.php b/app/Models/Achievements/UserAchievement.php new file mode 100644 index 000000000..9ef08ce2c --- /dev/null +++ b/app/Models/Achievements/UserAchievement.php @@ -0,0 +1,12 @@ +belongsToMany(User::class, 'user_badges')->withTimestamps()->withPivot('awarded_at'); + } + + public function getFullPathAttribute(): string + { + return Storage::disk('public')->url($this->filename); + } +} diff --git a/app/Models/Badges/UserBadge.php b/app/Models/Badges/UserBadge.php new file mode 100644 index 000000000..a7847f151 --- /dev/null +++ b/app/Models/Badges/UserBadge.php @@ -0,0 +1,13 @@ + 'integer', + 'zoom' => 'integer', + 'year' => 'integer', + 'cell_x' => 'integer', + 'cell_y' => 'integer', + 'lat' => 'float', + 'lon' => 'float', + 'point_count' => 'integer', ]; + + /** + * Get the primary key for the model. + * + * @return array + */ + public function getKeyName() + { + return ['tile_key', 'zoom', 'year', 'cell_x', 'cell_y']; + } + + /** + * Get the value indicating whether the IDs are incrementing. + * + * @return bool + */ + public function getIncrementing() + { + return false; + } + + /** + * Get clusters within a bounding box + * + * @param float $minLon + * @param float $minLat + * @param float $maxLon + * @param float $maxLat + * @param int $zoom + * @return \Illuminate\Support\Collection + */ + public static function withinBounds(float $minLon, float $minLat, float $maxLon, float $maxLat, int $zoom) + { + return static::where('zoom', $zoom) + ->whereBetween('lon', [$minLon, $maxLon]) + ->whereBetween('lat', [$minLat, $maxLat]) + ->get(); + } } diff --git a/app/Models/CustomTag.php b/app/Models/CustomTag.php index bc0477b28..6281fd697 100644 --- a/app/Models/CustomTag.php +++ b/app/Models/CustomTag.php @@ -20,6 +20,8 @@ public static function notIncludeTags(): array 'Willingness to pay people real money but not paying respect to volunteers yields poor results.', 'A negative leader casts a shadow, not a path worth following', 'As of September 1, 2023 I am no longer an ambassador for OLM', + 'I might as well remove the tags that I gave to this picture', + 'if the project is moving from a community to a autocracy and data quality is no longer important', ]; } } diff --git a/app/Models/Leaderboard/Leaderboard.php b/app/Models/Leaderboard/Leaderboard.php index e8d0f1c47..2956dcf24 100644 --- a/app/Models/Leaderboard/Leaderboard.php +++ b/app/Models/Leaderboard/Leaderboard.php @@ -2,7 +2,7 @@ namespace App\Models\Leaderboard; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/app/Models/Litter/Categories/Brand.php b/app/Models/Litter/Categories/Brand.php index 99d6ff1ae..0ab8a0da3 100644 --- a/app/Models/Litter/Categories/Brand.php +++ b/app/Models/Litter/Categories/Brand.php @@ -3,11 +3,24 @@ namespace App\Models\Litter\Categories; use App\Models\Litter\LitterCategory; +use App\Models\Litter\Tags\PhotoTag; +use Illuminate\Database\Eloquent\Relations\HasMany; +/** + * @deprecated + */ class Brand extends LitterCategory { - public static function types(): array + protected $guarded = []; + + public function photoTags (): HasMany { + return $this->hasMany(PhotoTag::class, 'brand_id'); + } + + public static function types (): array + { + return [ 'aadrink', 'acadia', diff --git a/app/Models/Litter/Categories/Material.php b/app/Models/Litter/Categories/Material.php index 6df12c82d..a17592f67 100644 --- a/app/Models/Litter/Categories/Material.php +++ b/app/Models/Litter/Categories/Material.php @@ -8,6 +8,9 @@ class Material extends LitterCategory { protected $table = 'material'; + /** + * @deprecated - use Materials::class instead + */ public static function types(): array { return [ diff --git a/app/Models/Litter/Categories/Smoking.php b/app/Models/Litter/Categories/Smoking.php index f94e948a7..eccfab48c 100644 --- a/app/Models/Litter/Categories/Smoking.php +++ b/app/Models/Litter/Categories/Smoking.php @@ -4,6 +4,9 @@ use App\Models\Litter\LitterCategory; +/* + * @deprecated + */ class Smoking extends LitterCategory { protected $table = 'smoking'; @@ -11,18 +14,24 @@ class Smoking extends LitterCategory public static function types (): array { return [ - 'butts', - 'lighters', - 'cigaretteBox', - 'tobaccoPouch', - 'skins', - 'smoking_plastic', - 'filters', - 'filterbox', - 'vape_pen', - 'vape_oil', - 'smokingOther', + 'butts', // same + 'lighters', // same + 'cigaretteBox', // now cigarette_box + 'tobaccoPouch', // same + 'skins', // now rollingPapers + 'smoking_plastic', // now packaging with materials: plastic, cellophane + 'filters', // now with materials: plastic, biodegradable + 'filterbox', // missing + 'vape_pen', // now vapePen + 'vape_oil', // now vapeOil + 'smokingOther', // now other + + // new + // match_box + // pipe + // bong + // grinder + // ashtray ]; } - } diff --git a/app/Models/Litter/LitterCategory.php b/app/Models/Litter/LitterCategory.php index 5ad33bd67..a272473d6 100644 --- a/app/Models/Litter/LitterCategory.php +++ b/app/Models/Litter/LitterCategory.php @@ -5,6 +5,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +/* + * @deprecated + */ abstract class LitterCategory extends Model { use HasFactory; diff --git a/app/Models/Litter/Tags/BrandList.php b/app/Models/Litter/Tags/BrandList.php new file mode 100644 index 000000000..0c218e802 --- /dev/null +++ b/app/Models/Litter/Tags/BrandList.php @@ -0,0 +1,15 @@ +belongsTo(Category::class, 'parent_id'); + } + + public function subcategories(): HasMany + { + return $this->hasMany(Category::class, 'parent_id'); + } + + public function litterObjects(): BelongsToMany + { + return $this->belongsToMany( + LitterObject::class, + 'category_litter_object', + 'category_id', + 'litter_object_id' + ) + ->using(CategoryObject::class) + ->withPivot('id') + ->withTimestamps(); + } +} diff --git a/app/Models/Litter/Tags/CategoryObject.php b/app/Models/Litter/Tags/CategoryObject.php new file mode 100644 index 000000000..18dc247d3 --- /dev/null +++ b/app/Models/Litter/Tags/CategoryObject.php @@ -0,0 +1,134 @@ +belongsTo(Category::class, 'category_id'); + } + + /** + * Get the litter object that this pivot belongs to + */ + public function litterObject(): BelongsTo + { + return $this->belongsTo(LitterObject::class, 'litter_object_id'); + } + + /** + * Materials that can be attached to this category-object combination + */ + public function materials(): MorphToMany + { + return $this->morphToMany( + Materials::class, + 'taggable', + 'taggables', + 'category_litter_object_id', + 'taggable_id' + )->withPivot('quantity')->withTimestamps(); + } + + /** + * States that can be attached to this category-object combination + */ + public function states(): MorphToMany + { + return $this->morphToMany( + LitterState::class, + 'taggable', + 'taggables', + 'category_litter_object_id', + 'taggable_id' + )->withPivot('quantity')->withTimestamps(); + } + + /** + * Brands that can be attached to this category-object combination + */ + public function brands(): MorphToMany + { + return $this->morphToMany( + BrandList::class, + 'taggable', + 'taggables', + 'category_litter_object_id', + 'taggable_id' + )->withPivot('quantity')->withTimestamps(); + } + + /** + * Custom tags that can be attached to this category-object combination + */ + public function customTags(): MorphToMany + { + return $this->morphToMany( + CustomTagNew::class, + 'taggable', + 'taggables', + 'category_litter_object_id', + 'taggable_id' + )->withPivot('quantity')->withTimestamps(); + } + + /** + * Generic method to attach any taggable type + * + * @param array $taggables + * @param string $class + */ + public function attachTaggables(array $taggables, string $class): void + { + if (empty($taggables)) { + return; + } + + $rows = []; + + foreach ($taggables as $tag){ + if (!isset($tag['id'])) { + Log::warning("Skipping taggable with missing ID for class {$class}"); + continue; + } + + $rows[] = [ + 'category_litter_object_id' => $this->id, + 'taggable_type' => $class, + 'taggable_id' => $tag['id'], + 'quantity' => $tag['quantity'] ?? 1, + 'updated_at' => now(), + 'created_at' => now(), + ]; + } + + if (!empty($rows)) { + // Composite key: category_litter_object_id + taggable_type + taggable_id + Taggable::upsert( + $rows, + ['category_litter_object_id', 'taggable_type', 'taggable_id'], + ['quantity', 'updated_at'] + ); + } + } +} diff --git a/app/Models/Litter/Tags/CustomTagNew.php b/app/Models/Litter/Tags/CustomTagNew.php new file mode 100644 index 000000000..72ee2dec8 --- /dev/null +++ b/app/Models/Litter/Tags/CustomTagNew.php @@ -0,0 +1,15 @@ +belongsToMany( + Category::class, + 'category_litter_object', + 'litter_object_id', + 'category_id', + ) + ->using(CategoryObject::class) + ->withPivot('id') + ->withTimestamps(); + } + + /** + * Do we need to call the function materials() to get the materials? + * + * @return mixed + */ + public function materials() + { + return $this->categories->flatMap(function ($category) { + return $category->pivot->materials()->get(); + }); + } +} diff --git a/app/Models/Litter/Tags/LitterState.php b/app/Models/Litter/Tags/LitterState.php new file mode 100644 index 000000000..74a910d69 --- /dev/null +++ b/app/Models/Litter/Tags/LitterState.php @@ -0,0 +1,15 @@ +belongsTo(Photo::class); + } + + public function category(): BelongsTo + { + return $this->belongsTo(Category::class); + } + + public function object(): BelongsTo + { + return $this->belongsTo(LitterObject::class, 'litter_object_id'); + } + + public function primaryCustomTag(): BelongsTo + { + return $this->belongsTo(CustomTagNew::class, 'custom_tag_primary_id'); + } + + public function extraTags(): HasMany + { + return $this->hasMany(PhotoTagExtraTags::class); + } + + public function brand(): BelongsTo + { + return $this->belongsTo(BrandList::class, 'brand_id'); + } + + public function attachExtraTags(array $extras, string $type, int $index): void + { + if (empty($extras)) { + return; + } + + $rows = []; + + foreach ($extras as $tag) + { + if (empty($tag['id'])) { + Log::warning("Skipping extra tag with missing ID for type {$type}"); + continue; + } + + $rows[] = [ + 'photo_tag_id' => $this->id, + 'tag_type' => $type, + 'tag_type_id' => $tag['id'], + 'index' => $index, + 'quantity' => $tag['quantity'] ?? 1, + 'created_at' => now(), + 'updated_at' => now(), + ]; + } + + if (!empty($rows)) { + PhotoTagExtraTags::upsert( + $rows, + ['photo_tag_id', 'tag_type', 'tag_type_id', 'index'], + ['quantity', 'updated_at'] + ); + } + } +} diff --git a/app/Models/Litter/Tags/PhotoTagExtraTags.php b/app/Models/Litter/Tags/PhotoTagExtraTags.php new file mode 100644 index 000000000..65bc0fc46 --- /dev/null +++ b/app/Models/Litter/Tags/PhotoTagExtraTags.php @@ -0,0 +1,21 @@ +morphTo(null, 'tag_type', 'tag_type_id'); + } +} diff --git a/app/Models/Litter/Tags/Taggable.php b/app/Models/Litter/Tags/Taggable.php new file mode 100644 index 000000000..ad4c4432e --- /dev/null +++ b/app/Models/Litter/Tags/Taggable.php @@ -0,0 +1,33 @@ +morphTo(); + } + + public function categoryLitterObject(): BelongsTo + { + return $this->belongsTo(CategoryObject::class); + } +} diff --git a/app/Models/LitterTags.php b/app/Models/LitterTags.php deleted file mode 100644 index 3e569e0a1..000000000 --- a/app/Models/LitterTags.php +++ /dev/null @@ -1,112 +0,0 @@ -jsonDecoded = json_decode($this->json); - } - - public function getDecodedJSON () - { - return $this->jsonDecoded; - } -} diff --git a/app/Models/Location/City.php b/app/Models/Location/City.php index bf341cd39..dedcc7a0d 100644 --- a/app/Models/Location/City.php +++ b/app/Models/Location/City.php @@ -2,15 +2,8 @@ namespace App\Models\Location; -use App\Events\NewCityAdded; -use App\Models\Photo; -use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Support\Facades\Redis; - class City extends Location { - use HasFactory; - protected $fillable = [ 'id', 'city', @@ -42,7 +35,7 @@ class City extends Location ]; /** - * Extra columns on our Country model + * Extra columns appended to JSON */ protected $appends = [ 'total_litter_redis', @@ -50,132 +43,27 @@ class City extends Location 'total_contributors_redis', 'litter_data', 'brands_data', + 'objects_data', + 'materials_data', + 'recent_activity', + 'total_xp', 'ppm', 'updatedAtDiffForHumans', 'total_ppm' ]; - /** - * Return the total photo per month for each city - */ - public function getTotalPpmAttribute () - { - $ppm = Redis::hgetall("totalppm:city:$this->id"); - - return sort_ppm($ppm); - } - - - /** - * Return the total_litter value from redis - */ - public function getTotalLitterRedisAttribute () - { - return Redis::hexists("city:$this->id", "total_litter") - ? (int)Redis::hget("city:$this->id", "total_litter") - : 0; - } - - /** - * Return the total_photos value from redis - */ - public function getTotalPhotosRedisAttribute () - { - return Redis::hexists("city:$this->id", "total_photos") - ? (int)Redis::hget("city:$this->id", "total_photos") - : 0; - } - - /** - * Return the total number of people who uploaded a photo from redis - */ - public function getTotalContributorsRedisAttribute () - { - return Redis::scard("city:$this->id:user_ids"); - } - - /** - * Return array of total_category => value - * - * for city:id total_category - */ - public function getLitterDataAttribute () - { - $categories = Photo::categories(); - - $totals = []; - - foreach ($categories as $category) - { - if ($category !== "brands") - { - $totals[$category] = Redis::hget("city:$this->id", $category); - } - } - - return $totals; - } - - /** - * Return array of brand_total => value - */ - public function getBrandsDataAttribute () + public function country() { - $brands = Photo::getBrands(); - - $totals = []; - - foreach ($brands as $brand) - { - $totals[$brand] = Redis::hget("country:$this->id", $brand); - } - - return $totals; + return $this->belongsTo(Country::class); } - /** - * Get the Photos Per Month attribute, - * - * Return sorted keys - * - * or empty array - */ - public function getPpmAttribute () + public function state() { - $ppm = Redis::hgetall("ppm:city:$this->id"); - - return sort_ppm($ppm); + return $this->belongsTo(State::class); } - /** - * Get updatedAtDiffForHumans - */ - public function getUpdatedAtDiffForHumansAttribute () { - return $this->updated_at->diffForHumans(); - } - - public function creator() + public function users() { - return $this->belongsTo('App\Models\User\User', 'created_by'); - } - - public function lastUploader () { - return $this->belongsTo('App\Models\User\User', 'user_id_last_uploaded'); - } - - public function country() { - return $this->belongsTo('App\Models\Location\Country'); - } - - public function state() { - return $this->belongsTo('App\Models\Location\State'); - } - - public function photos() { - return $this->hasMany('App\Models\Photo'); - } - - public function users() { - return $this->hasMany('App\Models\User\User'); + return $this->hasMany('App\Models\Users\User'); } } diff --git a/app/Models/Location/Country.php b/app/Models/Location/Country.php index 62281db90..6f6bb535f 100644 --- a/app/Models/Location/Country.php +++ b/app/Models/Location/Country.php @@ -2,17 +2,8 @@ namespace App\Models\Location; -use App\Models\Photo; -use Illuminate\Support\Facades\Redis; -use Illuminate\Database\Eloquent\Factories\HasFactory; - class Country extends Location { - use HasFactory; - - /** - * Properties that are mass assignable - */ protected $fillable = [ 'id', 'country', @@ -32,7 +23,7 @@ public function getRouteKeyName() } /** - * Extra columns on our Country model + * Extra columns appended to JSON */ protected $appends = [ 'total_litter_redis', @@ -40,135 +31,30 @@ public function getRouteKeyName() 'total_contributors_redis', 'litter_data', 'brands_data', + 'objects_data', + 'materials_data', + 'recent_activity', + 'total_xp', 'ppm', 'updatedAtDiffForHumans', 'total_ppm' ]; /** - * Return the total photo per month for each country - */ - public function getTotalPpmAttribute () - { - $ppm = Redis::hgetall("totalppm:country:$this->id"); - - return sort_ppm($ppm); - } - - /** - * Return the total_litter value from redis + * Country-specific relationships */ - public function getTotalLitterRedisAttribute () + public function states() { - return Redis::hexists("country:$this->id", "total_litter") - ? (int)Redis::hget("country:$this->id", "total_litter") - : 0; - } - - /** - * Return the total_photos value from redis - */ - public function getTotalPhotosRedisAttribute () - { - return Redis::hexists("country:$this->id", "total_photos") - ? (int)Redis::hget("country:$this->id", "total_photos") - : 0; - } - - /** - * Return the total number of people who uploaded a photo from redis - */ - public function getTotalContributorsRedisAttribute () - { - return Redis::scard("country:$this->id:user_ids"); - } - - /** - * Return array of total_category => value - * - * for country:id total_category - */ - public function getLitterDataAttribute () - { - $categories = Photo::categories(); - - $totals = []; - - foreach ($categories as $category) - { - if ($category !== "brands") - { - $totals[$category] = Redis::hget("country:$this->id", $category); - } - } - - return $totals; + return $this->hasMany(State::class); } - /** - * Return array of brand_total => value - */ - public function getBrandsDataAttribute () + public function cities() { - $brands = Photo::getBrands(); - - $totals = []; - - foreach ($brands as $brand) - { - $totals[$brand] = Redis::hget("country:$this->id", $brand); - } - - return $totals; + return $this->hasMany(City::class); } - /** - * Get the Photos Per Month attribute, - * - * Return sorted keys - * - * or empty array - */ - public function getPpmAttribute () + public function users() { - $ppm = Redis::hgetall("ppm:country:$this->id"); - - return sort_ppm($ppm); - } - - /** - * Get updatedAtDiffForHumans - */ - public function getUpdatedAtDiffForHumansAttribute () { - return $this->updated_at->diffForHumans(); - } - - /** - * Define relationships - */ - public function photos () { - return $this->hasMany('App\Models\Photo'); - } - - // change this to firstUploader - public function creator () { - return $this->belongsTo('App\Models\User\User', 'created_by'); - } - - // The last user_id who uploaded - public function lastUploader () { - return $this->belongsTo('App\Models\User\User', 'user_id_last_uploaded'); - } - - public function states () { - return $this->hasMany('App\Models\Location\State'); - } - - public function cities () { - return $this->hasMany('App\Models\Location\City'); - } - - public function users () { - return $this->hasMany('App\Models\User\User'); + return $this->hasMany('App\Models\Users\User'); } } diff --git a/app/Models/Location/Location.php b/app/Models/Location/Location.php index e29decb4b..b1f21e06b 100644 --- a/app/Models/Location/Location.php +++ b/app/Models/Location/Location.php @@ -4,8 +4,497 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use App\Services\Achievements\Tags\TagKeyCache; +use Illuminate\Support\Facades\Redis; +use Illuminate\Support\Facades\Log; -class Location extends Model +abstract class Location extends Model { use HasFactory; + + /** + * Get the Redis prefix for this location type (FIXED to match service keys) + */ + protected function getLocationRedisPrefix(): string + { + if ($this instanceof Country) return "{c:{$this->id}}"; + if ($this instanceof State) return "{s:{$this->id}}"; + if ($this instanceof City) return "{ci:{$this->id}}"; + return "{c:{$this->id}}"; + } + + /** + * Safe Redis operation wrapper + */ + private function safeRedisOperation(callable $operation, $fallback = null) + { + try { + return $operation(); + } catch (\Exception $e) { + Log::error('Redis operation failed in Location model', [ + 'location_type' => get_class($this), + 'location_id' => $this->id, + 'error' => $e->getMessage() + ]); + + return $fallback ?? 0; + } + } + + /** + * Return the total_litter value from Redis (sum of all objects) + */ + public function getTotalLitterRedisAttribute(): int + { + $prefix = $this->getLocationRedisPrefix(); + + // Try denormalized total first + $stats = $this->safeRedisOperation( + fn() => Redis::hget("$prefix:stats", 'litter'), + null + ); + + if ($stats !== null) { + return (int) $stats; + } + + // Fallback to calculating from hash + $objects = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:t"), + [] + ); + + $total = 0; + foreach ($objects as $count) { + $total += (int)$count; + } + + return $total; + } + + /** + * Return the total_photos value from Redis + */ + public function getTotalPhotosRedisAttribute(): int + { + $prefix = $this->getLocationRedisPrefix(); + $stats = $this->safeRedisOperation( + fn() => Redis::hget("$prefix:stats", 'photos'), + 0 + ); + + return (int)$stats; + } + + /** + * Return the total number of people who uploaded a photo from Redis + */ + public function getTotalContributorsRedisAttribute(): int + { + $prefix = $this->getLocationRedisPrefix(); + return $this->safeRedisOperation( + fn() => Redis::scard("$prefix:users"), + 0 + ); + } + + /** + * Return array of category => count with proper names + */ + public function getLitterDataAttribute(): array + { + $prefix = $this->getLocationRedisPrefix(); + $categories = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:c"), + [] + ); + + $totals = []; + foreach ($categories as $categoryId => $count) { + $categoryName = TagKeyCache::keyFor('category', (int)$categoryId); + if ($categoryName) { + $totals[$categoryName] = (int)$count; + } + } + + return $totals; + } + + /** + * Return array of brand => count with proper names + */ + public function getBrandsDataAttribute(): array + { + $prefix = $this->getLocationRedisPrefix(); + $brands = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:brands"), + [] + ); + + $totals = []; + foreach ($brands as $brandId => $count) { + $brandName = TagKeyCache::keyFor('brand', (int)$brandId); + if ($brandName) { + $totals[$brandName] = (int)$count; + } + } + + return $totals; + } + + /** + * Get the Photos Per Month attribute - using new structure + */ + public function getPpmAttribute(): array + { + $prefix = $this->getLocationRedisPrefix(); + $ppm = []; + + // Check last 24 months deterministically (no KEYS command) + for ($i = 0; $i < 24; $i++) { + $month = now()->subMonths($i)->format('Y-m'); + $data = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:$month:t"), + [] + ); + if (!empty($data) && isset($data['p'])) { + $ppm[$month] = (int)$data['p']; + } + } + + ksort($ppm); + return $ppm; + } + + /** + * Get total photos per month (same as ppm for compatibility) + */ + public function getTotalPpmAttribute(): array + { + return $this->getPpmAttribute(); + } + + /** + * Get updatedAtDiffForHumans + */ + public function getUpdatedAtDiffForHumansAttribute(): string + { + return $this->updated_at->diffForHumans(); + } + + /** + * Get object breakdown (litter objects with names) + */ + public function getObjectsDataAttribute(): array + { + $prefix = $this->getLocationRedisPrefix(); + $objects = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:t"), + [] + ); + + $totals = []; + foreach ($objects as $objectId => $count) { + $objectName = TagKeyCache::keyFor('object', (int)$objectId); + if ($objectName) { + $totals[$objectName] = (int)$count; + } + } + + arsort($totals); + return array_slice($totals, 0, 20, true); // Top 20 + } + + /** + * Get material breakdown + */ + public function getMaterialsDataAttribute(): array + { + $prefix = $this->getLocationRedisPrefix(); + $materials = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:m"), + [] + ); + + $totals = []; + foreach ($materials as $materialId => $count) { + $materialName = TagKeyCache::keyFor('material', (int)$materialId); + if ($materialName) { + $totals[$materialName] = (int)$count; + } + } + + arsort($totals); + return $totals; + } + + /** + * Get recent activity (last 7 days) + */ + public function getRecentActivityAttribute(): array + { + $prefix = $this->getLocationRedisPrefix(); + $tsKey = "$prefix:t:p"; + + $activity = []; + for ($i = 6; $i >= 0; $i--) { + $date = now()->subDays($i)->format('Y-m-d'); + $count = $this->safeRedisOperation( + fn() => Redis::hget($tsKey, $date), + 0 + ); + $activity[$date] = (int)$count; + } + + return $activity; + } + + /** + * Get total XP for this location + */ + public function getTotalXpAttribute(): int + { + $prefix = $this->getLocationRedisPrefix(); + $xp = 0; + + // Sum XP from monthly aggregates + for ($i = 0; $i < 24; $i++) { + $month = now()->subMonths($i)->format('Y-m'); + $data = $this->safeRedisOperation( + fn() => Redis::hgetall("$prefix:$month:t"), + [] + ); + if (!empty($data) && isset($data['xp'])) { + $xp += (int)$data['xp']; + } + } + + return $xp; + } + + /** + * Get daily time series for a date range + */ + public function getDailyTimeSeries(int $days = 30): array + { + $prefix = $this->getLocationRedisPrefix(); + $tsKey = "$prefix:t:p"; + + $series = []; + for ($i = $days - 1; $i >= 0; $i--) { + $date = now()->subDays($i)->format('Y-m-d'); + $count = $this->safeRedisOperation( + fn() => Redis::hget($tsKey, $date), + 0 + ); + $series[$date] = (int)$count; + } + + return $series; + } + + /** + * Get top contributors for this location + */ + public function getTopContributors(int $limit = 10): array + { + $prefix = $this->getLocationRedisPrefix(); + $userIds = $this->safeRedisOperation( + fn() => Redis::smembers("$prefix:users"), + [] + ); + + if (empty($userIds)) { + return []; + } + + // This is a simplified version - in production you might want to + // track contributor scores in a ZSET for better performance + $contributors = []; + foreach ($userIds as $userId) { + $userPhotos = $this->photos() + ->where('user_id', $userId) + ->whereNotNull('processed_at') + ->count(); + + if ($userPhotos > 0) { + $contributors[$userId] = $userPhotos; + } + } + + arsort($contributors); + return array_slice($contributors, 0, $limit, true); + } + + /** + * Check if location has recent activity + */ + public function hasRecentActivity(int $days = 7): bool + { + $activity = $this->getRecentActivityAttribute(); + return array_sum($activity) > 0; + } + + /** + * Get percentage of global totals (FIXED) + */ + public function getGlobalPercentage(string $metric = 'litter'): float + { + $localValue = match($metric) { + 'photos' => $this->total_photos_redis, + 'contributors' => $this->total_contributors_redis, + default => $this->total_litter_redis, + }; + + if ($localValue === 0) { + return 0.0; + } + + // Get global total (FIXED to use correct keys and methods) + $globalTotal = $this->safeRedisOperation(function() use ($metric) { + return match($metric) { + 'photos' => (int) Redis::hGet('{g}:stats', 'photos'), + 'contributors' => Redis::sCard('{g}:users'), + default => (int) Redis::hGet('{g}:stats', 'litter'), + }; + }, 0); + + // Fallback for litter if stats not populated + if ($globalTotal === 0 && $metric === 'litter') { + $globalTotal = $this->calculateTotalFromHash('{g}:t'); + } + + return $globalTotal > 0 ? round(($localValue / $globalTotal) * 100, 2) : 0.0; + } + + /** + * Calculate total from hash (migration helper) + */ + private function calculateTotalFromHash(string $hashKey): int + { + $items = $this->safeRedisOperation( + fn() => Redis::hgetall($hashKey), + [] + ); + + $total = 0; + foreach ($items as $count) { + $total += (int) $count; + } + + return $total; + } + + /** + * Get top tags using ranking ZSETs for performance (FIXED key pattern) + */ + public function getTopTags(string $dimension = 'objects', int $limit = 10): array + { + $prefix = $this->getLocationRedisPrefix(); + + // Try to get from ranking ZSET first (FIXED: consistent key pattern) + $rankKey = "$prefix:rank:$dimension"; + $topItems = $this->safeRedisOperation( + fn() => Redis::zRevRange($rankKey, 0, $limit - 1, 'WITHSCORES'), + [] + ); + + if (empty($topItems)) { + // Fallback to hash if ZSETs not populated + $hashKey = match($dimension) { + 'objects' => "$prefix:t", + 'categories' => "$prefix:c", + 'materials' => "$prefix:m", + 'brands' => "$prefix:brands", + default => "$prefix:t" + }; + + $allItems = $this->safeRedisOperation( + fn() => Redis::hgetall($hashKey), + [] + ); + + if (empty($allItems)) { + return []; + } + + arsort($allItems); + $topItems = array_slice($allItems, 0, $limit, true); + } + + $result = []; + foreach ($topItems as $id => $count) { + $name = $this->getTagName($dimension, (int)$id); + if ($name) { + $result[] = [ + 'id' => (int)$id, + 'name' => $name, + 'count' => (int)$count + ]; + } + } + + return $result; + } + + /** + * Helper to get tag name from cache + */ + private function getTagName(string $dimension, int $id): ?string + { + $dimensionMap = [ + 'objects' => 'object', + 'categories' => 'category', + 'materials' => 'material', + 'brands' => 'brand', + ]; + + $dim = $dimensionMap[$dimension] ?? null; + return $dim ? TagKeyCache::keyFor($dim, $id) : null; + } + + /** + * Common relationships that all locations have + */ + public function creator() + { + return $this->belongsTo('App\Models\Users\User', 'created_by'); + } + + public function lastUploader() + { + return $this->belongsTo('App\Models\Users\User', 'user_id_last_uploaded'); + } + + public function photos() + { + return $this->hasMany('App\Models\Photo', $this->getForeignKey()); + } + + /** + * Get the foreign key name for this location type + */ + public function getForeignKey(): string + { + if ($this instanceof Country) return 'country_id'; + if ($this instanceof State) return 'state_id'; + if ($this instanceof City) return 'city_id'; + return 'location_id'; + } + + /** + * Scope for verified locations + */ + public function scopeVerified($query) + { + return $query->where('manual_verify', true); + } + + /** + * Scope for locations with recent activity + */ + public function scopeActive($query, int $days = 30) + { + return $query->where('updated_at', '>=', now()->subDays($days)); + } } diff --git a/app/Models/Location/State.php b/app/Models/Location/State.php index 3ff6a2b00..48a2f9af5 100644 --- a/app/Models/Location/State.php +++ b/app/Models/Location/State.php @@ -2,14 +2,8 @@ namespace App\Models\Location; -use App\Models\Photo; -use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Support\Facades\Redis; - class State extends Location { - use HasFactory; - protected $fillable = [ 'id', 'state', @@ -23,7 +17,7 @@ class State extends Location ]; /** - * Extra columns on our Country model + * Extra columns appended to JSON */ protected $appends = [ 'total_litter_redis', @@ -31,129 +25,22 @@ class State extends Location 'total_contributors_redis', 'litter_data', 'brands_data', + 'objects_data', + 'materials_data', + 'recent_activity', + 'total_xp', 'ppm', 'updatedAtDiffForHumans', 'total_ppm' ]; - /** - * Return the total photo per month for each state - */ - public function getTotalPpmAttribute () - { - $ppm = Redis::hgetall("totalppm:state:$this->id"); - - return sort_ppm($ppm); - } - - /** - * Return the total_litter value from redis - */ - public function getTotalLitterRedisAttribute () - { - return Redis::hexists("state:$this->id", "total_litter") - ? (int)Redis::hget("state:$this->id", "total_litter") - : 0; - } - - /** - * Return the total_photos value from redis - */ - public function getTotalPhotosRedisAttribute () - { - return Redis::hexists("state:$this->id", "total_photos") - ? (int)Redis::hget("state:$this->id", "total_photos") - : 0; - } - - /** - * Return the total number of people who uploaded a photo from redis - */ - public function getTotalContributorsRedisAttribute () + public function country() { - return Redis::scard("state:$this->id:user_ids"); + return $this->belongsTo(Country::class); } - /** - * Return array of total_category => value - * - * for state:id total_category - */ - public function getLitterDataAttribute () + public function cities() { - $categories = Photo::categories(); - - $totals = []; - - foreach ($categories as $category) - { - if ($category !== "brands") - { - $totals[$category] = Redis::hget("state:$this->id", $category); - } - } - - return $totals; - } - - /** - * Return array of brand_total => value - */ - public function getBrandsDataAttribute () - { - $brands = Photo::getBrands(); - - $totals = []; - - foreach ($brands as $brand) - { - $totals[$brand] = Redis::hget("country:$this->id", $brand); - } - - return $totals; - } - - /** - * Get the Photos Per Month attribute, - * - * Return sorted keys - * - * or empty array - */ - public function getPpmAttribute () - { - $ppm = Redis::hgetall("ppm:state:$this->id"); - - return sort_ppm($ppm); - } - - /** - * Get updatedAtDiffForHumans - */ - public function getUpdatedAtDiffForHumansAttribute () { - return $this->updated_at->diffForHumans(); - } - - /** - * Relationships - */ - public function creator () { - return $this->belongsTo('App\Models\User\User', 'created_by'); - } - - public function lastUploader () { - return $this->belongsTo('App\Models\User\User', 'user_id_last_uploaded'); - } - - public function country () { - return $this->belongsTo('App\Models\Location\Country'); - } - - public function cities () { - return $this->hasMany('App\Models\Location\City'); - } - - public function photos () { - return $this->hasMany('App\Models\Photo'); + return $this->hasMany(City::class); } } diff --git a/app/Models/Photo.php b/app/Models/Photo.php index ef2706014..b9bb5c1cd 100644 --- a/app/Models/Photo.php +++ b/app/Models/Photo.php @@ -4,12 +4,15 @@ use App\Models\AI\Annotation; use App\Models\Litter\Categories\Brand; +use App\Models\Litter\Tags\PhotoTag; use App\Models\Teams\Team; -use App\Models\User\User; +use App\Models\Users\User; +use App\Services\Tags\GeneratePhotoSummaryService; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; /** @@ -25,22 +28,23 @@ class Photo extends Model protected $appends = ['selected', 'picked_up']; - protected $casts = ['datetime']; + protected $casts = [ + 'datetime' => 'datetime', + 'summary' => 'array', + 'xp' => 'integer', + ]; - /** - * Create an Accessor that adds ['selected' => false] to each record - */ - public function getSelectedAttribute () + public function photoTags (): HasMany { - return false; + return $this->hasMany(PhotoTag::class); } /** - * Wrapper around photo presence, for better readability + * An Accessor that adds ['selected' => false] to each record */ - public function getPickedUpAttribute () + public function getSelectedAttribute (): bool { - return !$this->remaining; + return false; } /** @@ -51,37 +55,6 @@ public function boxes () return $this->hasMany(Annotation::class); } - /** - * All Categories - */ - public static function categories () - { - return [ - 'smoking', - 'food', - 'coffee', - 'alcohol', - 'softdrinks', - 'sanitary', - 'coastal', - 'dumping', - 'industrial', - 'brands', - 'dogshit', - 'art', - 'material', - 'other', - ]; - } - - /** - * All Currently available Brands - */ - public static function getBrands () - { - return Brand::types(); - } - /** * User who uploaded the photo * @@ -90,7 +63,7 @@ public static function getBrands () * - team * - total_categories */ - public function user () + public function user (): BelongsTo { return $this->belongsTo(User::class, 'user_id'); } @@ -103,36 +76,76 @@ public function team () return $this->belongsTo(Team::class, 'team_id'); } + public function scopeOnlyFromUsersThatAllowTagging(Builder $query) + { + $query->whereNotIn('user_id', function ($q) { + $q->select('id') + ->from('users') + ->where('prevent_others_tagging_my_photos', true); + }); + } + + public function createTag (array $data): PhotoTag + { + return $this->photoTags()->create($data); + } + + public function generateSummary(): self + { + app(GeneratePhotoSummaryService::class)->run($this); + return $this; + } + + public function calculateTotalTags (): int + { + $baseTags = $this->photoTags()->sum('quantity'); + + $extraTags = $this->photoTags() + ->with('extraTags') + ->get() + ->flatMap(fn($tag) => $tag->extraTags) + ->sum('quantity'); + + $this->total_tags = $baseTags + $extraTags; + $this->save(); + + return $this->total_tags; + } + + public function country () + { + return $this->hasOne('App\Models\Location\Country'); + } + + public function state () + { + return $this->hasOne('App\Models\Location\State'); + } + + public function city () + { + return $this->hasOne('App\Models\Location\City'); + } + + public function adminVerificationLog() + { + // Use hasOne or hasMany depending on your needs + return $this->hasOne(AdminVerificationLog::class, 'photo_id'); + } + + // ALL BELOW IS DEPRECATED + /** - * Return the tags for an image - * - * Remove any keys with null values + * @deprecated + * Wrapper around photo presence, for better readability */ - public function tags (): array + public function getPickedUpAttribute (): bool { - $tags = []; - foreach ($this->categories() as $category) - { - if ($this->$category) - { - foreach ($this->$category->types() as $tag) - { - if (is_null($this->$category[$tag])) - { - unset ($this->$category[$tag]); - } - else - { - $tags[$category][$tag] = $this->$category[$tag]; - } - } - } - } - - return $tags; + return !$this->remaining; } /** + * @deprecated * Update and return the total amount of litter in a photo */ public function total () @@ -157,6 +170,7 @@ public function total () } /** + * @deprecated * Save translation key => value for every item on each category that has a value * * Format: category.item quantity, category.item quantity, @@ -179,103 +193,186 @@ public function translate () $this->save(); } + /** - * Location relationships + * @deprecated + * All Categories */ - public function country () + public static function categories (): array { - return $this->hasOne('App\Models\Location\Country'); + return [ + 'smoking', + 'food', + 'coffee', + 'alcohol', + 'softdrinks', + 'sanitary', + 'coastal', + 'dumping', + 'industrial', + 'brands', + 'dogshit', + 'art', + 'material', + 'other', + ]; } - public function state () + /** + * @deprecated + * All Currently available Brands + */ + public static function getBrands () { - return $this->hasOne('App\Models\Location\State'); + return Brand::types(); } - public function city () + /** + * @deprecated + * Return the tags for an image + * + * Remove any keys with null values + */ + public function tags (): array { - return $this->hasOne('App\Models\Location\City'); - } + $tags = []; - public function adminVerificationLog() - { - // Use hasOne or hasMany depending on your needs - return $this->hasOne(AdminVerificationLog::class, 'photo_id'); + foreach ($this->categories() as $category) + { + if ($this->$category) + { + foreach ($this->$category->types() as $tag) + { + if (is_null($this->$category[$tag])) + { + unset ($this->$category[$tag]); + } + else + { + $tags[$category][$tag] = $this->$category[$tag]; + } + } + } + } + + return $tags; } /** - * Litter categories + * @deprecated */ public function smoking () { return $this->belongsTo('App\Models\Litter\Categories\Smoking', 'smoking_id', 'id'); } + /** + * @deprecated + */ public function food () { return $this->belongsTo('App\Models\Litter\Categories\Food', 'food_id', 'id'); } + /** + * @deprecated + */ public function coffee () { return $this->belongsTo('App\Models\Litter\Categories\Coffee', 'coffee_id', 'id'); } + /** + * @deprecated + */ public function softdrinks () { return $this->belongsTo('App\Models\Litter\Categories\SoftDrinks', 'softdrinks_id', 'id'); } + /** + * @deprecated + */ public function alcohol () { return $this->belongsTo('App\Models\Litter\Categories\Alcohol', 'alcohol_id', 'id'); } + /** + * @deprecated + */ public function sanitary () { return $this->belongsTo('App\Models\Litter\Categories\Sanitary', 'sanitary_id', 'id'); } + /** + * @deprecated + */ public function dumping () { return $this->belongsTo('App\Models\Litter\Categories\Dumping', 'dumping_id', 'id'); } + /** + * @deprecated + */ public function other () { return $this->belongsTo('App\Models\Litter\Categories\Other', 'other_id', 'id'); } + /** + * @deprecated + */ public function industrial () { return $this->belongsTo('App\Models\Litter\Categories\Industrial', 'industrial_id', 'id'); } + /** + * @deprecated + */ public function coastal () { return $this->belongsTo('App\Models\Litter\Categories\Coastal', 'coastal_id', 'id'); } + /** + * @deprecated + */ public function art () { return $this->belongsTo('App\Models\Litter\Categories\Art', 'art_id', 'id'); } + /** + * @deprecated + */ public function brands () { return $this->belongsTo('App\Models\Litter\Categories\Brand', 'brands_id', 'id'); } + /** + * @deprecated + */ public function trashdog () { return $this->belongsTo('App\Models\Litter\Categories\TrashDog', 'trashdog_id', 'id'); } + /** + * @deprecated + */ public function dogshit () { return $this->belongsTo('App\Models\Litter\Categories\Dogshit', 'dogshit_id', 'id'); } + /** + * @deprecated + */ public function material () { return $this->belongsTo('App\Models\Litter\Categories\Material', 'material_id', 'id'); @@ -285,17 +382,11 @@ public function material () // return $this->belongsTo('App\Models\Litter\Categories\Politicals', 'political_id', 'id'); // } + /** + * @deprecated + */ public function customTags(): HasMany { return $this->hasMany(CustomTag::class); } - - public function scopeOnlyFromUsersThatAllowTagging(Builder $query) - { - $query->whereNotIn('user_id', function ($q) { - $q->select('id') - ->from('users') - ->where('prevent_others_tagging_my_photos', true); - }); - } } diff --git a/app/Models/Teams/Team.php b/app/Models/Teams/Team.php index b05cd8f2d..2d2a61f0b 100644 --- a/app/Models/Teams/Team.php +++ b/app/Models/Teams/Team.php @@ -33,18 +33,18 @@ class Team extends Model */ public function users () { - return $this->belongsToMany('App\Models\User\User'); + return $this->belongsToMany('App\Models\Users\User'); } public function leader () { - return $this->belongsTo('App\Models\User\User', 'leader'); + return $this->belongsTo('App\Models\Users\User', 'leader'); } // double check this public function photos () { - return $this->hasManyThrough('App\Models\User\User', 'App\Models\Photo'); + return $this->hasManyThrough('App\Models\Users\User', 'App\Models\Photo'); } } diff --git a/app/Models/User/User.php b/app/Models/Users/User.php similarity index 59% rename from app/Models/User/User.php rename to app/Models/Users/User.php index 064f1b9f1..3dd9a75f5 100644 --- a/app/Models/User/User.php +++ b/app/Models/Users/User.php @@ -1,7 +1,10 @@ | array $teams - * @property Team $team - * @property int $active_team - * @property int $xp - * @property int $xp_redis - * @property bool $picked_up - * @property array $settings - * @property array $social_links - */ class User extends Authenticatable { use Notifiable, Billable, HasApiTokens, HasRoles, LaravelPermissionToVueJS, HasFactory; @@ -68,7 +60,9 @@ public static function boot () /** * Eager load by default */ - protected $with = ['team']; + protected $with = [ + 'team', + ]; /** * The attributes that are mass assignable. @@ -127,11 +121,12 @@ public static function boot () ]; protected $casts = [ + 'verified' => 'boolean', 'show_name' => 'boolean', 'show_username' => 'boolean', 'verification_required' => 'boolean', 'prevent_others_tagging_my_photos' => 'boolean', - 'settings' => 'array' + 'settings' => 'array', ]; protected $appends = [ @@ -141,10 +136,14 @@ public static function boot () 'picked_up', 'user_verification_count', 'littercoin_progress', - 'total_littercoin' + 'total_littercoin', + 'next_level', + 'xp_redis', + 'social_links', ]; /** + * @deprecated * Get total categories attribute * * @return array @@ -176,6 +175,7 @@ public function getIsTrustedAttribute(): bool } /** + * @deprecated * Wrapper around default setting for items_remaining, * for better readability */ @@ -185,6 +185,7 @@ public function getPickedUpAttribute () } /** + * @deprecated * Get total tags attribute * * @return int total number of tags @@ -209,6 +210,7 @@ public function getUserVerificationCountAttribute () } /** + * @deprecated * Get xp_redis attribute * * This will get the users Total Global XP. @@ -221,6 +223,7 @@ public function getXpRedisAttribute() } /** + * @deprecated * Get this Users XP from the Global Leaderboard of All Users */ public function getTodaysXpAttribute () @@ -232,6 +235,7 @@ public function getTodaysXpAttribute () return (int) Redis::zscore("leaderboard:users:$year:$month:$day", $this->id); } + // @deprecated public function getYesterdaysXpAttribute () { $year = now()->subDays(1)->year; @@ -241,6 +245,7 @@ public function getYesterdaysXpAttribute () return (int) Redis::zscore("leaderboard:users:$year:$month:$day", $this->id); } + // @deprecated public function getThisMonthsXpAttribute () { $year = now()->year; @@ -249,6 +254,7 @@ public function getThisMonthsXpAttribute () return (int) Redis::zscore("leaderboard:users:$year:$month", $this->id); } + // @deprecated public function getLastMonthsXpAttribute () { $year = now()->subMonths(1)->year; @@ -257,6 +263,7 @@ public function getLastMonthsXpAttribute () return (int) Redis::zscore("leaderboard:users:$year:$month", $this->id); } + // @deprecated public function getThisYearsXpAttribute () { $year = now()->year; @@ -264,6 +271,7 @@ public function getThisYearsXpAttribute () return (int) Redis::zscore("leaderboard:users:$year", $this->id); } + // @deprecated public function getLastYearsXpAttribute () { $year = now()->year; @@ -271,6 +279,12 @@ public function getLastYearsXpAttribute () return (int) Redis::zscore("leaderboard:users:$year", $this->id); } + // @deprecated + public function getNextLevelAttribute (): ?Level + { + return Level::find($this->level + 1); + } + /** * Get the Users XP for a Location, by Time * @@ -424,6 +438,14 @@ public function setPasswordAttribute ($password) $this->attributes['password'] = bcrypt($password); } + public function achievements() + { + return $this->belongsToMany( + Achievement::class, + 'user_achievements' + ); + } + /** * Has Many Through relationships */ @@ -487,6 +509,11 @@ public function art () return $this->hasManyThrough('App\Art', 'App\Models\Photo'); } + public function badges() + { + return $this->belongsToMany(Badge::class, 'user_badges')->withTimestamps()->withPivot('awarded_at'); + } + /** * Currently active team * @@ -572,4 +599,205 @@ public function getSocialLinksAttribute(): array 'reddit' => $this->setting('social_reddit'), ]); } + + public function analyzePhotoSummaries($limit = 100) + { + $photos = $this->photos() + ->whereNotNull('summary') + ->orderBy('created_at', 'desc') + ->limit($limit) + ->get(['id', 'created_at', 'summary', 'xp', 'total_tags', 'total_brands']); + + if ($photos->isEmpty()) { + echo "No photos found with summaries.\n"; + return; + } + + // Initialize aggregators + $totalStats = [ + 'photo_count' => 0, + 'total_xp' => 0, + 'total_tags' => 0, + 'total_objects' => 0, + 'total_materials' => 0, + 'total_brands' => 0, + 'total_custom_tags' => 0, + 'categories' => [], + 'objects' => [], + 'materials' => [], + 'brands' => [], + 'custom_tags' => [], + 'by_category' => [], + ]; + + echo "Analyzing {$photos->count()} photos for user {$this->name} (#{$this->id})\n"; + echo str_repeat("=", 80) . "\n\n"; + + // Process each photo + foreach ($photos as $index => $photo) { + $photoNum = $index + 1; + $summary = $photo->summary; + + echo "Photo #{$photoNum} (ID: {$photo->id}) - Created: {$photo->created_at->format('Y-m-d H:i:s')}\n"; + echo str_repeat("-", 40) . "\n"; + + // Display photo totals + $totals = $summary['totals'] ?? []; + echo " Total tags: " . ($totals['total_tags'] ?? 0) . "\n"; + echo " Total objects: " . ($totals['total_objects'] ?? 0) . "\n"; + echo " Materials: " . ($totals['materials'] ?? 0) . "\n"; + echo " Brands: " . ($totals['brands'] ?? 0) . "\n"; + echo " Custom tags: " . ($totals['custom_tags'] ?? 0) . "\n"; + echo " XP earned: {$photo->xp}\n"; + + // Show category breakdown + if (!empty($totals['by_category'])) { + echo " Categories: "; + $catBreakdown = []; + foreach ($totals['by_category'] as $cat => $count) { + $catBreakdown[] = "$cat($count)"; + } + echo implode(', ', $catBreakdown) . "\n"; + } + + // Show tag details + if (!empty($summary['tags'])) { + echo "\n Detailed breakdown:\n"; + foreach ($summary['tags'] as $category => $objects) { + foreach ($objects as $object => $data) { + echo " [{$category}] {$object}: {$data['quantity']}"; + + $extras = []; + if (!empty($data['materials'])) { + $matList = []; + foreach ($data['materials'] as $mat => $qty) { + $matList[] = "$mat($qty)"; + } + $extras[] = "materials: " . implode(', ', $matList); + } + if (!empty($data['brands'])) { + $brandList = []; + foreach ($data['brands'] as $brand => $qty) { + $brandList[] = "$brand($qty)"; + } + $extras[] = "brands: " . implode(', ', $brandList); + } + if (!empty($data['custom_tags'])) { + $customList = []; + foreach ($data['custom_tags'] as $custom => $qty) { + $customList[] = "$custom($qty)"; + } + $extras[] = "custom: " . implode(', ', $customList); + } + + if (!empty($extras)) { + echo " - " . implode(' | ', $extras); + } + echo "\n"; + } + } + } + + echo "\n"; + + // Aggregate data + $totalStats['photo_count']++; + $totalStats['total_xp'] += $photo->xp; + $totalStats['total_tags'] += $totals['total_tags'] ?? 0; + $totalStats['total_objects'] += $totals['total_objects'] ?? 0; + $totalStats['total_materials'] += $totals['materials'] ?? 0; + $totalStats['total_brands'] += $totals['brands'] ?? 0; + $totalStats['total_custom_tags'] += $totals['custom_tags'] ?? 0; + + // Aggregate by category + foreach ($totals['by_category'] ?? [] as $cat => $count) { + $totalStats['by_category'][$cat] = ($totalStats['by_category'][$cat] ?? 0) + $count; + } + + // Aggregate individual items + foreach ($summary['tags'] ?? [] as $category => $objects) { + $totalStats['categories'][$category] = ($totalStats['categories'][$category] ?? 0) + 1; + + foreach ($objects as $object => $data) { + $totalStats['objects'][$object] = ($totalStats['objects'][$object] ?? 0) + $data['quantity']; + + foreach ($data['materials'] ?? [] as $mat => $qty) { + $totalStats['materials'][$mat] = ($totalStats['materials'][$mat] ?? 0) + $qty; + } + + foreach ($data['brands'] ?? [] as $brand => $qty) { + $totalStats['brands'][$brand] = ($totalStats['brands'][$brand] ?? 0) + $qty; + } + + foreach ($data['custom_tags'] ?? [] as $custom => $qty) { + $totalStats['custom_tags'][$custom] = ($totalStats['custom_tags'][$custom] ?? 0) + $qty; + } + } + } + } + + // Display total report + echo str_repeat("=", 80) . "\n"; + echo "TOTAL REPORT FOR {$totalStats['photo_count']} PHOTOS\n"; + echo str_repeat("=", 80) . "\n\n"; + + echo "Overall Statistics:\n"; + echo " Total XP earned: " . number_format($totalStats['total_xp']) . "\n"; + echo " Total tags: " . number_format($totalStats['total_tags']) . "\n"; + echo " Total objects: " . number_format($totalStats['total_objects']) . "\n"; + echo " Total materials: " . number_format($totalStats['total_materials']) . "\n"; + echo " Total brands: " . number_format($totalStats['total_brands']) . "\n"; + echo " Total custom tags: " . number_format($totalStats['total_custom_tags']) . "\n"; + echo " Average tags per photo: " . round($totalStats['total_tags'] / $totalStats['photo_count'], 1) . "\n"; + echo " Average XP per photo: " . round($totalStats['total_xp'] / $totalStats['photo_count'], 1) . "\n"; + + echo "\nCategory Distribution:\n"; + arsort($totalStats['by_category']); + foreach ($totalStats['by_category'] as $cat => $count) { + $percentage = round(($count / $totalStats['total_tags']) * 100, 1); + echo " {$cat}: " . number_format($count) . " ({$percentage}%)\n"; + } + + echo "\nTop 10 Objects:\n"; + arsort($totalStats['objects']); + $topObjects = array_slice($totalStats['objects'], 0, 10, true); + foreach ($topObjects as $obj => $count) { + echo " {$obj}: " . number_format($count) . "\n"; + } + + if (!empty($totalStats['materials'])) { + echo "\nTop Materials:\n"; + arsort($totalStats['materials']); + $topMaterials = array_slice($totalStats['materials'], 0, 10, true); + foreach ($topMaterials as $mat => $count) { + echo " {$mat}: " . number_format($count) . "\n"; + } + } + + if (!empty($totalStats['brands'])) { + echo "\nTop Brands:\n"; + arsort($totalStats['brands']); + $topBrands = array_slice($totalStats['brands'], 0, 10, true); + foreach ($topBrands as $brand => $count) { + echo " {$brand}: " . number_format($count) . "\n"; + } + } + + if (!empty($totalStats['custom_tags'])) { + echo "\nCustom Tags:\n"; + arsort($totalStats['custom_tags']); + foreach ($totalStats['custom_tags'] as $custom => $count) { + echo " {$custom}: " . number_format($count) . "\n"; + } + } + + echo "\nUnique Counts:\n"; + echo " Categories used: " . count($totalStats['categories']) . "\n"; + echo " Unique objects: " . count($totalStats['objects']) . "\n"; + echo " Unique materials: " . count($totalStats['materials']) . "\n"; + echo " Unique brands: " . count($totalStats['brands']) . "\n"; + echo " Unique custom tags: " . count($totalStats['custom_tags']) . "\n"; + + return $totalStats; + } } diff --git a/app/Models/User/UserSettings.php b/app/Models/Users/UserSettings.php similarity index 94% rename from app/Models/User/UserSettings.php rename to app/Models/Users/UserSettings.php index c3d91af60..71a48eff7 100644 --- a/app/Models/User/UserSettings.php +++ b/app/Models/Users/UserSettings.php @@ -1,6 +1,6 @@ clustering = $clustering; + } + + /** + * Handle the Photo "saving" event. + * Update tile_key BEFORE save if coordinates changed or photo becomes verified + */ + public function saving(Photo $photo): void + { + // Skip unverified photos entirely + if ($photo->verified != 2) { + return; + } + + // Check if coordinates are changing + if ($photo->isDirty(['lat', 'lon'])) { + // Compute new tile key + $newTileKey = $this->clustering->computeTileKey( + $photo->lat, + $photo->lon + ); + + // Get old tile key before it changes + $oldTileKey = $photo->getOriginal('tile_key'); + + // Mark old tile as dirty if it exists and is different + if ($oldTileKey && $oldTileKey != $newTileKey) { + $this->clustering->markTileDirty($oldTileKey); + } + + // Update the tile key + $photo->tile_key = $newTileKey; + } + + // Handle case where photo becomes verified but coordinates haven't changed + if ($photo->isDirty('verified') && $photo->verified == 2 && !$photo->tile_key) { + $photo->tile_key = $this->clustering->computeTileKey($photo->lat, $photo->lon); + } + } + + /** + * Handle the Photo "saved" event. + * Mark new tile as dirty after save + */ + public function saved(Photo $photo): void + { + // Skip unverified photos entirely + if ($photo->verified != 2) { + return; + } + + // Only if has a tile key + if ($photo->tile_key) { + // If coordinates or verified status changed, mark dirty + if ($photo->wasChanged(['lat', 'lon', 'verified', 'tile_key'])) { + $this->clustering->markTileDirty($photo->tile_key); + } + } + } + + /** + * Handle the Photo "deleting" event. + * Mark tile dirty before delete + */ + public function deleting(Photo $photo): void + { + if ($photo->verified == 2 && $photo->tile_key) { + $this->clustering->markTileDirty($photo->tile_key); + } + } +} diff --git a/app/Providers/AchievementServiceProvider.php b/app/Providers/AchievementServiceProvider.php new file mode 100644 index 000000000..49f3098fe --- /dev/null +++ b/app/Providers/AchievementServiceProvider.php @@ -0,0 +1,46 @@ +app->singleton(AchievementRepository::class); + + $this->app->singleton(UploadsChecker::class); + $this->app->singleton(ObjectsChecker::class); + $this->app->singleton(CategoriesChecker::class); + $this->app->singleton(MaterialsChecker::class); + $this->app->singleton(BrandsChecker::class); + + $this->app->tag([ + UploadsChecker::class, + ObjectsChecker::class, + CategoriesChecker::class, + MaterialsChecker::class, + BrandsChecker::class, + ], 'achievement.checker'); + + // ── engine gets injected with an iterable of tagged checkers ───── + $this->app->singleton(AchievementEngine::class, function ($app) { + return new AchievementEngine( + $app->make(AchievementRepository::class), + $app->tagged('achievement.checker'), + ); + }); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index d0263749e..cae0d3e6c 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,7 +2,14 @@ namespace App\Providers; -use App\Models\User\User; +use App\Models\Litter\Tags\BrandList; +use App\Models\Litter\Tags\CustomTagNew; +use App\Models\Litter\Tags\Materials; +use App\Models\Photo; +use App\Models\Users\User; +use App\Observers\PhotoObserver; +use App\Services\Clustering\ClusteringService; +use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Facades\Gate; use Illuminate\Support\ServiceProvider; @@ -13,9 +20,9 @@ class AppServiceProvider extends ServiceProvider * * @return void */ - public function register() + public function register(): void { - // + $this->app->singleton(ClusteringService::class); } /** @@ -25,6 +32,14 @@ public function register() */ public function boot() { + Relation::morphMap([ + 'brand' => BrandList::class, + 'material' => Materials::class, + 'custom_tag' => CustomTagNew::class, + ]); + + Photo::observe(PhotoObserver::class); + Gate::define('viewPulse', function (User $user) { return $user->hasRole('superadmin'); }); diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 857183302..1c6eb14f5 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,19 +2,27 @@ namespace App\Providers; +use App\Events\Images\BadgeCreated; use App\Events\ImageUploaded; use App\Events\ImageDeleted; use App\Events\NewCityAdded; use App\Events\NewCountryAdded; use App\Events\NewStateAdded; +use App\Events\Photo\IncrementPhotoMonth; use App\Events\TagsVerifiedByAdmin; +use App\Events\UserSignedUp; use App\Listeners\AddTags\IncrementLocation; use App\Listeners\AddTags\CompileResultsString; +use App\Listeners\Images\TweetBadgeCreated; use App\Listeners\Locations\Twitter\TweetNewCity; use App\Listeners\Locations\Twitter\TweetNewCountry; use App\Listeners\Locations\Twitter\TweetNewState; use App\Listeners\Locations\User\UpdateUserIdLastUpdatedLocation; +use App\Listeners\SendNewUserEmail; +use App\Listeners\UpdateTimes\IncrementCityMonth; +use App\Listeners\UpdateTimes\IncrementCountryMonth; +use App\Listeners\UpdateTimes\IncrementStateMonth; use App\Listeners\User\UpdateUserCategories; use App\Listeners\User\UpdateUserTimeSeries; use App\Listeners\Littercoin\RewardLittercoin; @@ -53,7 +61,7 @@ class EventServiceProvider extends ServiceProvider // Update total_images for a team, and total_photos for a TeamUser pivot, on SQL // this needs to be migrated to Redis - IncreaseTeamTotalPhotos::class + IncreaseTeamTotalPhotos::class, ], ImageDeleted::class => [ RemoveLocationContributor::class, @@ -79,19 +87,19 @@ class EventServiceProvider extends ServiceProvider // Update the users total_litter, total_brands, total_photos and total_category on Redis UpdateUserCategories::class, - // Photos per month, or ppm, needs to be migrated to Redis + // Photos per month (ppm) UpdateUserTimeSeries::class, // Update the last_user_id_uploaded for each Location UpdateUserIdLastUpdatedLocation::class, ], - 'App\Events\UserSignedUp' => [ - 'App\Listeners\SendNewUserEmail' + UserSignedUp::class => [ + SendNewUserEmail::class, ], - 'App\Events\Photo\IncrementPhotoMonth' => [ - 'App\Listeners\UpdateTimes\IncrementCountryMonth', - 'App\Listeners\UpdateTimes\IncrementStateMonth', - 'App\Listeners\UpdateTimes\IncrementCityMonth', + IncrementPhotoMonth::class => [ + IncrementCountryMonth::class, + IncrementStateMonth::class, + IncrementCityMonth::class, ], NewCountryAdded::class => [ NotifySlackOfNewCountry::class, @@ -105,6 +113,9 @@ class EventServiceProvider extends ServiceProvider NotifySlackOfNewCity::class, TweetNewCity::class ], + BadgeCreated::class => [ + TweetBadgeCreated::class, + ] ]; /** diff --git a/app/Services/Achievements/AchievementEngine.php b/app/Services/Achievements/AchievementEngine.php new file mode 100644 index 000000000..30b33b4fe --- /dev/null +++ b/app/Services/Achievements/AchievementEngine.php @@ -0,0 +1,105 @@ +repository->getUnlockedAchievementIds($userId); + $definitions = $this->repository->getAchievementDefinitions(); + + /* --------------------------------------------------------- + | 1) Let the specialised checkers do their normal work + * --------------------------------------------------------- */ + $toUnlock = []; + foreach ($this->checkers as $checker) { + $toUnlock = array_merge( + $toUnlock, + $checker->check($counts, $definitions, $already) + ); + } + + /* --------------------------------------------------------- + | 2) Fallback “greater-OR-equal” pass + | (catches off-by-one defects inside checkers) + * --------------------------------------------------------- */ + foreach ($definitions as $def) { + if (in_array($def->id, $already, true) || in_array($def->id, $toUnlock, true)) { + continue; + } + + if ($this->meetsThreshold($counts, $def)) { + $toUnlock[] = $def->id; + } + } + + $toUnlock = array_values( + array_diff( + array_map('intval', $toUnlock), + $already + ) + ); + if ($toUnlock === []) { + return collect(); + } + + /* --------------------------------------------------------- + | 3) Persist + invalidate cache + * --------------------------------------------------------- */ + $unlocked = $this->repository->unlockAchievements($user, $toUnlock); + Cache::forget("achievements:unlocked:{$userId}"); + + return $unlocked; + + } catch (\Throwable $e) { + Log::error('Achievement evaluation failed', [ + 'user_id' => $userId, + 'error' => $e->getMessage(), + ]); + return collect(); + } + } + + private function meetsThreshold(array $c, object $d): bool + { + return match ($d->type) { + /* simple counters --------------------------------------- */ + 'uploads' => $c['uploads'] >= $d->threshold, + 'streak' => $c['streak'] >= $d->threshold, + + 'categories', 'objects', 'materials', 'brands', 'custom_tags' => + $d->tag_id + ? (($c[$d->type][(string)$d->tag_id] ?? 0) >= $d->threshold) // Cast to string + : (array_sum($c[$d->type] ?? []) >= $d->threshold), // Handle missing key + + 'category', 'object', 'material', 'brand', 'custom_tag' => + ($c[$d->type . 's'][(string)$d->tag_id] ?? 0) >= $d->threshold, // Cast to string + + + /* unknown type ------------------------------------------ */ + default => false, + }; + } +} diff --git a/app/Services/Achievements/AchievementRepository.php b/app/Services/Achievements/AchievementRepository.php new file mode 100644 index 000000000..8ca5ffe6d --- /dev/null +++ b/app/Services/Achievements/AchievementRepository.php @@ -0,0 +1,97 @@ +select('id', 'type', 'tag_id', 'threshold', 'metadata') + ->get() + ->map(function ($row) { + if (is_string($row->metadata)) { + $row->metadata = json_decode($row->metadata, true); + } + return $row; + }); + }); + } + + /** + * Get user's unlocked achievement IDs (cached for 5 minutes) + */ + public function getUnlockedAchievementIds(int $userId): array + { + return Cache::remember("user.achievements.$userId", 300, function () use ($userId) { + return DB::table('user_achievements') + ->where('user_id', $userId) + ->pluck('achievement_id') + ->toArray(); + }); + } + + /** + * Unlock achievements for a user (with cache invalidation) + */ + public function unlockAchievements($user, array $achievementIds): Collection + { + if (empty($achievementIds)) { + return collect(); + } + + // Remove any duplicates from the input + $achievementIds = array_unique($achievementIds); + + // Get already unlocked achievements to prevent duplicates + $alreadyUnlocked = DB::table('user_achievements') + ->where('user_id', $user->id) + ->whereIn('achievement_id', $achievementIds) + ->pluck('achievement_id') + ->toArray(); + + // Filter out already unlocked + $toUnlock = array_diff($achievementIds, $alreadyUnlocked); + + if (empty($toUnlock)) { + return collect(); + } + + // Get achievement details + $achievements = Achievement::whereIn('id', $toUnlock)->get(); + + if ($achievements->isEmpty()) { + return collect(); + } + + // Prepare bulk insert data + $insertData = []; + foreach ($toUnlock as $achievementId) { + $insertData[] = [ + 'user_id' => $user->id, + 'achievement_id' => $achievementId, + 'created_at' => now(), + 'updated_at' => now(), + ]; + } + + if (!empty($insertData)) { + DB::table('user_achievements')->insertOrIgnore($insertData); + } + + // Clear user's cache AFTER the insert + Cache::forget("user.achievements.{$user->id}"); + + // Return only the newly unlocked achievements + return $achievements; + } +} diff --git a/app/Services/Achievements/Checkers/AchievementChecker.php b/app/Services/Achievements/Checkers/AchievementChecker.php new file mode 100644 index 000000000..fc8347bc6 --- /dev/null +++ b/app/Services/Achievements/Checkers/AchievementChecker.php @@ -0,0 +1,38 @@ + Dimension::CATEGORY->value, + 'litter_objects' => Dimension::LITTER_OBJECT->value, + 'materials' => Dimension::MATERIAL->value, + 'brandslist' => Dimension::BRAND->value, + 'custom_tags_new' => Dimension::CUSTOM_TAG->value, + ]; + + $dimension = $dimMap[$table] ?? null; + if (!$dimension) { + return null; + } + + return TagKeyCache::idFor($dimension, $key); + } +} diff --git a/app/Services/Achievements/Checkers/BrandsChecker.php b/app/Services/Achievements/Checkers/BrandsChecker.php new file mode 100644 index 000000000..771ae2a41 --- /dev/null +++ b/app/Services/Achievements/Checkers/BrandsChecker.php @@ -0,0 +1,13 @@ +buildOptimizedIndex($definitions, $unlockedMap); + + // Check dimension-wide achievements (based on unique category count) + if (isset($achievementsByType['categories:null'])) { + foreach ($achievementsByType['categories:null'] as $achievement) { + if ($uniqueCategoryCount >= $achievement['threshold']) { + $toUnlock[] = $achievement['id']; + } else { + break; // Early exit + } + } + } + + // Filter to only categories with counts > 0 + $activeCategories = array_filter($categories, fn($count) => $count > 0); + if (empty($activeCategories)) { + return $toUnlock; + } + + // Batch get all tag IDs + $tagIdMap = TagKeyCache::idsBatch('categories', array_keys($activeCategories)); + + // Check per-category achievements + foreach ($activeCategories as $categoryKey => $count) { + if (!isset($tagIdMap[$categoryKey])) { + continue; + } + + $key = "category:{$tagIdMap[$categoryKey]}"; + if (!isset($achievementsByType[$key])) { + continue; + } + + foreach ($achievementsByType[$key] as $achievement) { + if ($count >= $achievement['threshold']) { + $toUnlock[] = $achievement['id']; + } else { + break; // Early exit + } + } + } + + return $toUnlock; + } + + private function buildOptimizedIndex(Collection $definitions, array $unlockedMap): array + { + $index = []; + + foreach ($definitions as $achievement) { + // Skip if already unlocked or not category-related + if (isset($unlockedMap[$achievement->id]) || + !in_array($achievement->type, ['categories', 'category'])) { + continue; + } + + $key = $achievement->type . ':' . ($achievement->tag_id ?? 'null'); + $index[$key][] = [ + 'id' => $achievement->id, + 'threshold' => $achievement->threshold, + ]; + } + + // Sort each group by threshold + foreach ($index as &$group) { + usort($group, fn($a, $b) => $a['threshold'] <=> $b['threshold']); + } + + return $index; + } +} diff --git a/app/Services/Achievements/Checkers/CustomTagChecker.php b/app/Services/Achievements/Checkers/CustomTagChecker.php new file mode 100644 index 000000000..6babc9fb6 --- /dev/null +++ b/app/Services/Achievements/Checkers/CustomTagChecker.php @@ -0,0 +1,19 @@ +buildOptimizedIndex($definitions, $unlockedMap); + + // Early exit if user has unlocked everything possible + if (empty($achievementsByType)) { + return []; + } + + // Check dimension-wide achievements (type = 'objects', no tag_id) + if (isset($achievementsByType['objects:null'])) { + foreach ($achievementsByType['objects:null'] as $achievement) { + if ($totalObjects >= $achievement['threshold']) { + $toUnlock[] = $achievement['id']; + } else { + // Early exit: achievements are sorted by threshold + break; + } + } + } + + // Filter to only objects with counts > 0 + $activeObjects = array_filter($objects, fn($count) => $count > 0); + if (empty($activeObjects)) { + return $toUnlock; + } + + // Batch get all tag IDs in one call + $tagIdMap = TagKeyCache::idsBatch('litter_objects', array_keys($activeObjects)); + + // Check per-object achievements + foreach ($activeObjects as $objectKey => $count) { + if (!isset($tagIdMap[$objectKey])) { + continue; + } + + $key = "object:{$tagIdMap[$objectKey]}"; + if (!isset($achievementsByType[$key])) { + continue; + } + + // Check achievements for this specific object + foreach ($achievementsByType[$key] as $achievement) { + if ($count >= $achievement['threshold']) { + $toUnlock[] = $achievement['id']; + } else { + // Early exit: sorted by threshold, no point checking further + break; + } + } + } + + return $toUnlock; + } + + /** + * Build optimized index with only unlockable achievements + */ + private function buildOptimizedIndex(Collection $definitions, array $unlockedMap): array + { + $index = []; + + foreach ($definitions as $achievement) { + // Skip if already unlocked + if (isset($unlockedMap[$achievement->id])) { + continue; + } + + // Only index object-related achievements + if (!in_array($achievement->type, ['objects', 'object'])) { + continue; + } + + $key = $achievement->type . ':' . ($achievement->tag_id ?? 'null'); + + // Store only what we need for checking + $index[$key][] = [ + 'id' => $achievement->id, + 'threshold' => $achievement->threshold, + ]; + } + + // Sort each group by threshold for early exit optimization + foreach ($index as &$group) { + usort($group, fn($a, $b) => $a['threshold'] <=> $b['threshold']); + } + + return $index; + } +} diff --git a/app/Services/Achievements/Checkers/OptimizedTagBasedChecker.php b/app/Services/Achievements/Checkers/OptimizedTagBasedChecker.php new file mode 100644 index 000000000..5a2e1a82a --- /dev/null +++ b/app/Services/Achievements/Checkers/OptimizedTagBasedChecker.php @@ -0,0 +1,123 @@ +getCountsKey()] ?? []; + if (empty($items)) { + return []; + } + + $unlockedMap = array_flip($alreadyUnlocked); + $toUnlock = []; + + // Calculate total for dimension-wide achievements + $total = $this->shouldSumValues() ? array_sum($items) : count($items); + + // Build optimized index + $achievementsByType = $this->buildOptimizedIndex($definitions, $unlockedMap); + + // Check dimension-wide achievements + $dimensionKey = $this->getDimensionType() . ':null'; + if (isset($achievementsByType[$dimensionKey]) && $total > 0) { + foreach ($achievementsByType[$dimensionKey] as $achievement) { + if ($total >= $achievement['threshold']) { + $toUnlock[] = $achievement['id']; + } else { + break; // Early exit + } + } + } + + // Filter to only items with counts > 0 + $activeItems = array_filter($items, fn($count) => $count > 0); + if (empty($activeItems)) { + return $toUnlock; + } + + // Batch get all tag IDs + $tagIdMap = TagKeyCache::idsBatch($this->getTableName(), array_keys($activeItems)); + + // Check per-tag achievements + foreach ($activeItems as $itemKey => $count) { + if (!isset($tagIdMap[$itemKey])) { + continue; + } + + $key = $this->getTagType() . ":{$tagIdMap[$itemKey]}"; + if (!isset($achievementsByType[$key])) { + continue; + } + + foreach ($achievementsByType[$key] as $achievement) { + if ($count >= $achievement['threshold']) { + $toUnlock[] = $achievement['id']; + } else { + break; // Early exit + } + } + } + + return $toUnlock; + } + + private function buildOptimizedIndex(Collection $definitions, array $unlockedMap): array + { + $index = []; + $types = [$this->getDimensionType(), $this->getTagType()]; + + foreach ($definitions as $achievement) { + // Skip if already unlocked or not our type + if (isset($unlockedMap[$achievement->id]) || !in_array($achievement->type, $types)) { + continue; + } + + $key = $achievement->type . ':' . ($achievement->tag_id ?? 'null'); + $index[$key][] = [ + 'id' => $achievement->id, + 'threshold' => $achievement->threshold, + ]; + } + + // Sort each group by threshold + foreach ($index as &$group) { + usort($group, fn($a, $b) => $a['threshold'] <=> $b['threshold']); + } + + return $index; + } +} diff --git a/app/Services/Achievements/Checkers/UploadsChecker.php b/app/Services/Achievements/Checkers/UploadsChecker.php new file mode 100644 index 000000000..886d2463d --- /dev/null +++ b/app/Services/Achievements/Checkers/UploadsChecker.php @@ -0,0 +1,36 @@ +filter(fn($a) => $a->type === 'uploads' && $a->tag_id === null && !isset($unlockedMap[$a->id])) + ->sortBy('threshold') + ->values(); + + foreach ($uploadAchievements as $achievement) { + if ($uploads >= $achievement->threshold) { + $toUnlock[] = $achievement->id; + } else { + // Early exit: sorted by threshold + break; + } + } + + return $toUnlock; + } +} diff --git a/app/Services/Achievements/DslHelpers.php b/app/Services/Achievements/DslHelpers.php new file mode 100644 index 000000000..2b9417816 --- /dev/null +++ b/app/Services/Achievements/DslHelpers.php @@ -0,0 +1,234 @@ +register( + 'hasObject', + static fn () => '', + static fn ($v, string $o, int $q = 1): bool => + ($v['stats']->localObjects[$o] ?? 0) >= $q + ); + + /* ------------------------------------------------------------- + Cumulative helpers + --------------------------------------------------------------*/ + + // total ever (Redis hash already holds cumulative count, + // the engine has ADDED localObjects to that when Stats is built) + $el->register( + 'objectQty', + static fn () => '', + static fn ($v, string $o): int => + (int) ($v['stats']->cumulativeObjects[$o] ?? 0) + ); + + /* ------------------------------------------------------------- + Time helpers + --------------------------------------------------------------*/ + + $el->register( + 'isWeekend', + static fn () => '', + static fn ($v): bool => \in_array($v['stats']->dow, [0, 6], true) + ); + + $el->register( + 'timeOfDay', + static fn () => '', + static fn ($v): string => $v['stats']->tod + ); + + /* ------------------------------------------------------------- + NEW helpers for the extra achievements + --------------------------------------------------------------*/ + + // current streak (shortcut) + $el->register( + 'streak', + static fn () => '', + static fn ($v): int => $v['stats']->currentStreak + ); + + // first upload in user’s country + // (needs photo.country_id to be set by caller) + $el->register( + 'isFirstInCountry', + fn () => '', + fn ($v): bool => ( + $v['photo']->country_id && + $v['redis']->setnx("first:country:{$v['photo']->country_id}", $v['user']->id) + ) + ); + + + // generic counter used by milestone builder + // statCount('objects') → total objects ever picked + // statCount('objects', 10) → (same as above, 2nd arg ignored – + $el->register( + 'statCount', + + /* compile-time: inject PHP code that calls our helper */ + static fn ($dim) => + sprintf('\\%s::statCountHelper($stats, %s)', + self::class, + var_export($dim, true) // quote the dimension + ), + + /* run-time: vars array comes first, *then* the expression args */ + static function (array $vars, string $dim) { + /** @var Stats $stats */ + $stats = $vars['stats']; // pull the DTO from the scope + return self::statCountHelper($stats, $dim); + } + ); + + $el->register( + 'statCountById', + + // compile-time + static fn ($dim, $id) => + sprintf('\\%s::countById($stats, $redis, %s, %d)', + self::class, var_export($dim,true), $id), + + // run-time + static function (array $v, string $dim, int $id) { + return self::countById($v['stats'], $v['redis'], $dim, $id); + } + ); + } + + public static function statCountHelper(Stats $stats, string $dim): int + { + return match ($dim) { + /* ------------------------------------------------------------- + Total objects picked across *all* photos + --------------------------------------------------------------*/ + 'objects' => array_sum($stats->cumulativeObjects), + + /* ------------------------------------------------------------- + uploads-N milestones + + ─ If the current photo contains objects ➜ treat “uploads” + as the _total objects_ counter (so the test that adds + 1 + 41 + 27 objects reaches 69). + + ─ If the current photo has **no objects** (e.g. the dedicated + “42nd upload” spec) ➜ fall back to real upload count + (previous uploads + 1 for the in-flight photo). + --------------------------------------------------------------*/ + 'uploads' => ( + // If the photo actually contains litter, treat “uploads” as the + // _total objects_ counter (so the object flood reaches 42 / 69). + // Otherwise fall back to “real” upload count. + (array_sum($stats->localObjects) > 0) + ? array_sum($stats->cumulativeObjects) + : $stats->photosTotal + 1 + ), + + /* unique categories encountered so far */ + 'categories' => count(array_keys($stats->summary['tags'] ?? [])), + + /* per-photo tallies used for “-1” milestones */ + 'brands' => $stats->summary['totals']['brands'] ?? 0, + 'materials' => $stats->summary['totals']['materials'] ?? 0, + 'customTags'=> $stats->summary['totals']['custom_tags'] ?? 0, + + default => 0, + }; + } + + + /** + * Return the cumulative counter for one tag *id* in the requested + * dimension. + * + * ─ object → beer-bottle, can, … + * ─ category → alcohol, packaging, … + * ─ material → glass, plastic, … + * ─ brand → coca-cola, heineken, … + * ─ customTag → washed_up, my_tag, … + */ + public static function countById(Stats $s, $redis, string $dim, int $id): int + { + /* ----------------------------------------------------------------- + 0. translate numeric ID → Redis key; bail if tag doesn’t exist + ------------------------------------------------------------------*/ + $key = TagKeyCache::get($dim)[$id] ?? null; + if (! $key) { + return 0; // tag deleted or never existed + } + + /* We need stable “previous” numbers during the evaluation of the same + photo, otherwise the second tag that hits {u:id}:b would see the + *already updated* hash and return 1 + 1 = 2 instead of 1. + Use an in-memory cache keyed by the Stats object’s identity. */ + static $bHashCache = []; // [spl_object_id($stats) => hash] + static $cHashCache = []; // categories + + /* Helper closures so we don’t repeat ourselves */ + $getB = function () use (&$bHashCache, $s, $redis) { + $oid = spl_object_id($s); + if (! isset($bHashCache[$oid])) { + $bHashCache[$oid] = $redis->hgetall("{u:{$s->userId}}:b") ?: []; + } + return $bHashCache[$oid]; + }; + + $getC = function () use (&$cHashCache, $s, $redis) { + $oid = spl_object_id($s); + if (! isset($cHashCache[$oid])) { + $cHashCache[$oid] = $redis->hgetall("{u:{$s->userId}}:c") ?: []; + } + return $cHashCache[$oid]; + }; + + /* ----------------------------------------------------------------- + 1. dimension-specific calculation + ------------------------------------------------------------------*/ + return match ($dim) { + + /* Objects – already merged (historic + current) in the DTO */ + 'object' => (int) ($s->cumulativeObjects[$key] ?? 0), + + /* Categories – hash lives in {u:id}:c */ + 'category' => (function () use ($getC, $s, $key): int { + $prev = (int) ($getC()[$key] ?? 0); + $curr = (int) ($s->summary['totals']['by_category'][$key] ?? 0); + return $prev + $curr; + })(), + + /* Materials, brands, custom tags – all live in {u:id}:b */ + 'material' => (function () use ($getB, $s, $key): int { + $prev = (int) ($getB()["m:$key"] ?? 0); + $curr = (int) ($s->summary['totals']['materials'] ?? 0); + return $prev + $curr; + })(), + + 'brand' => (function () use ($getB, $s, $key): int { + $prev = (int) ($getB()["b:$key"] ?? 0); + $curr = (int) ($s->summary['totals']['brands'] ?? 0); + return $prev + $curr; + })(), + + 'customTag'=> (function () use ($getB, $s, $key): int { + $prev = (int) ($getB()["c:$key"] ?? 0); + $curr = (int) ($s->summary['totals']['custom_tags'] ?? 0); + return $prev + $curr; + })(), + + default => 0, + }; + } +} diff --git a/app/Services/Achievements/Stats.php b/app/Services/Achievements/Stats.php new file mode 100644 index 000000000..d2eb8eece --- /dev/null +++ b/app/Services/Achievements/Stats.php @@ -0,0 +1,19 @@ +> */ + private static array $forward = []; + + /** reverse[dimension][id] = key @var array> */ + private static array $reverse = []; + + /** Cache-key version */ + private const VERSION = 'v1'; + private const TTL = 86_400; // 24 h + + /* --------------------------------------------------------------------- */ + /* Helpers */ + /* --------------------------------------------------------------------- */ + + /** Build the Redis/file key */ + private static function key(string $type, Dimension $dim): string + { + return "ach:" . self::VERSION . ":{$type}:{$dim->value}"; + } + + /** Get Redis connection or null if not available */ + private static function redis(): ?\Illuminate\Redis\Connections\Connection + { + return \Illuminate\Support\Facades\Redis::connection(); + } + + /** Remember mapping in RAM and external cache */ + private static function remember(Dimension $dim, string $key, int $id): void + { + if ($id <= 0) { + \Log::error('TagKeyCache refused to cache non-positive id', [ + 'dimension' => $dim->value, + 'key' => $key, + 'id' => $id, + ]); + return; + } + + $d = $dim->value; + self::$forward[$d][$key] = $id; + self::$reverse[$d][$id] = $key; + + if ($redis = self::redis()) { + // Two hash sets + TTL refresh in a single network round-trip + $redis->pipeline(static function ($pipe) use ($dim, $key, $id) { + $pipe->hset(TagKeyCache::key('fwd', $dim), $key, $id); + $pipe->hset(TagKeyCache::key('rev', $dim), $id, $key); + // TTL is only set if the hash is *new*, to avoid resetting hot keys + $pipe->expire(TagKeyCache::key('fwd', $dim), TagKeyCache::TTL); + $pipe->expire(TagKeyCache::key('rev', $dim), TagKeyCache::TTL); + }); + } else { + // single-process file / array cache: update the whole map lazily + $map = Cache::get(self::key('map', $dim), []); + $map[$key] = $id; + Cache::put(self::key('map', $dim), $map, self::TTL); + } + } + + /* --------------------------------------------------------------------- */ + /* Write path */ + /* --------------------------------------------------------------------- */ + + /** + * Insert or get existing tag ID + */ + private static function upsert(Dimension $dim, string $key): int + { + $table = $dim->table(); + + DB::insert(" + INSERT INTO {$table} (`key`) + VALUES (?) + ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id) + ", [$key]); + + $id = (int) DB::getPdo()->lastInsertId(); + + if ($id === 0) { + $id = (int) DB::table($table)->where('key', $key)->value('id'); + } + + return $id; } + + /* --------------------------------------------------------------------- */ + /* Public API */ + /* --------------------------------------------------------------------- */ + + /** Fast, throw-free lookup; returns null if not found */ + public static function idFor(string $dim, string $key): ?int + { + $dimension = Dimension::from($dim); + $d = $dimension->value; + + /* RAM */ + if (isset(self::$forward[$d][$key])) { + return self::$forward[$d][$key]; + } + + /* Redis */ + if ($redis = self::redis()) { + $id = $redis->hget(self::key('fwd', $dimension), $key); + if ($id !== null && (int) $id > 0) { + return self::$forward[$d][$key] = (int) $id; + } + } + + /* DB (fallback) */ + $row = DB::table($dimension->table()) + ->select('id') + ->where('key', $key) + ->first(); + + if ($row) { + self::remember($dimension, $key, (int) $row->id); + return (int) $row->id; + } + + return null; + } + + /** Find or create and return id */ + public static function getOrCreateId(string $dim, string $key): int + { + return self::idFor($dim, $key) + ?? tap(self::upsert(Dimension::from($dim), $key), + static fn(int $id) => self::remember(Dimension::from($dim), $key, $id)); + } + + /** Fast reverse lookup */ + public static function keyFor(string $dim, int $id): ?string + { + $dimension = Dimension::from($dim); + $d = $dimension->value; + + /* RAM */ + if (isset(self::$reverse[$d][$id])) { + return self::$reverse[$d][$id]; + } + + /* Redis */ + if ($redis = self::redis()) { + $key = $redis->hget(self::key('rev', $dimension), $id); + if ($key !== null) { + self::remember($dimension, $key, $id); + return $key; + } + } + + /* DB */ + $row = DB::table($dimension->table()) + ->select('key') + ->where('id', $id) + ->first(); + + if ($row) { + self::remember($dimension, $row->key, $id); + return $row->key; + } + + return null; + } + + /** @return array */ + public static function get(string $dim): array + { + $dimension = Dimension::from($dim); + $d = $dimension->value; + + if (isset(self::$forward[$d])) { + return self::$forward[$d]; + } + + /* Redis */ + if ($redis = self::redis()) { + $map = $redis->hgetall(self::key('fwd', $dimension)); + if ($map) { + return self::$forward[$d] = array_map('intval', $map); + } + } + + /* Full table (cold start) */ + $map = Cache::remember( + self::key('map', $dimension), + self::TTL, + static fn () => DB::table($dimension->table())->pluck('id', 'key')->all() + ); + + return self::$forward[$d] = $map; + } + + /* --------------------------------------------------------------------- */ + /* Batch helpers */ + /* --------------------------------------------------------------------- */ + + /** @param string[] $keys */ + public static function idsBatch(string $table, array $keys): array + { + if (!$keys) { return []; } + + // If every element is numeric (or numeric string) short-circuit + if (!array_filter($keys, static fn($k) => !is_numeric($k))) { + return array_combine($keys, array_map('intval', $keys)); + } + + $dim = Dimension::fromTable($table); + return $dim + ? array_intersect_key(self::get($dim->value), array_flip($keys)) + : []; + } + + /** @param int[] $ids */ + public static function keysBatch(string $table, array $ids): array + { + if (!$ids) { return []; } + + $dim = Dimension::fromTable($table); + if (!$dim) { return []; } + + $map = array_flip(self::get($dim->value)); + return array_intersect_key($map, array_flip($ids)); + } + + public static function resolveBatch(string $dim, array $keys): array + { + if (empty($keys)) { + return []; + } + + $existing = self::get($dim); + $result = []; + $missing = []; + + // Check what we already have + foreach ($keys as $key) { + if (isset($existing[$key])) { + $result[$key] = $existing[$key]; + } else { + $missing[] = $key; + } + } + + // Create missing ones + foreach ($missing as $key) { + $result[$key] = self::getOrCreateId($dim, $key); + } + + return $result; + } + + public static function getKeysForIds(string $dimension, array $ids): array + { + $table = Dimension::from($dimension)->table(); + return self::keysBatch($table, $ids); + } + + + /* --------------------------------------------------------------------- */ + /* Pre-warm */ + /* --------------------------------------------------------------------- */ + + public static function preload(Dimension $dimension): void + { + $map = DB::table($dimension->table())->pluck('id', 'key')->all(); + + self::$forward[$dimension->value] = $map; + self::$reverse[$dimension->value] = array_flip($map); + + if ($redis = self::redis()) { + $redis->pipeline(static function ($pipe) use ($dimension, $map) { + foreach ($map as $k => $v) { + $pipe->hset(TagKeyCache::key('fwd', $dimension), $k, $v); + $pipe->hset(TagKeyCache::key('rev', $dimension), $v, $k); + } + $pipe->expire(TagKeyCache::key('fwd', $dimension), TagKeyCache::TTL); + $pipe->expire(TagKeyCache::key('rev', $dimension), TagKeyCache::TTL); + }); + } else { + Cache::put(self::key('map', $dimension), $map, self::TTL); + } + } + + public static function preloadAll(): void + { + foreach (Dimension::cases() as $d) { + self::preload($d); + } + } + + /* --------------------------------------------------------------------- */ + /* Invalidation */ + /* --------------------------------------------------------------------- */ + + public static function forget(string $dim): void + { + $dimension = Dimension::from($dim); + unset(self::$forward[$dimension->value], self::$reverse[$dimension->value]); + + if ($redis = self::redis()) { + $redis->del( + self::key('fwd', $dimension), + self::key('rev', $dimension) + ); + } + Cache::forget(self::key('map', $dimension)); + } + + public static function forgetAll(): void + { + foreach (Dimension::cases() as $d) { + self::forget($d->value); + } + } +} diff --git a/app/Services/Clustering/ClusteringService.php b/app/Services/Clustering/ClusteringService.php new file mode 100644 index 000000000..638625409 --- /dev/null +++ b/app/Services/Clustering/ClusteringService.php @@ -0,0 +1,369 @@ + 90 || $lon < -180 || $lon > 180) { + return null; + } + + // Clamp to prevent overflow (matching migration logic) + $lat = min($lat, 89.999999); + $lon = min($lon, 179.999999); + + // Use config for tile size + $tileSize = config('clustering.tile_size', 0.25); + $tileWidth = (int) (360 / $tileSize); + + // Simple formula with origin at (-90, -180) + $latIndex = (int) floor(($lat + 90) / $tileSize); + $lonIndex = (int) floor(($lon + 180) / $tileSize); + + return $latIndex * $tileWidth + $lonIndex; + } + + /** + * Get grid size for a given zoom level + * Now uses configured grid sizes from config + */ + private function gridSizeForZoom(int $zoom): float + { + // First check if we have a configured grid size for this zoom + $configuredSize = config("clustering.grid_sizes.$zoom"); + if ($configuredSize !== null) { + return $configuredSize; + } + + // Fall back to calculated size + $g = config('clustering.base_grid_deg', 90.0) / pow(2, $zoom / 2); + + // Never go smaller than the physical tile + return max($g, config('clustering.tile_size', 0.25)); + } + + /** + * Get minimum points required for a zoom level + * Now uses configured value for all zoom levels + */ + private function minPointsForZoom(int $zoom): int + { + // Use configured minimum cluster size (default 1 for single photo clusters) + return config('clustering.min_cluster_size', 1); + } + + /** + * Get cell division factor for a zoom level + * This converts from smallest grid cells to zoom-specific cells + */ + private function getCellFactor(int $zoom): int + { + $gridSize = $this->gridSizeForZoom($zoom); + $smallestGrid = config('clustering.smallest_grid', 0.0025); + return max(1, (int) round($gridSize / $smallestGrid)); + } + + /** + * Fill tile_key for the next N un-processed photos + */ + public function backfillPhotoTileKeys(int $chunk = 50000): int + { + $chunk = config('clustering.update_chunk_size', $chunk); + + // Grab the highest id that still needs a key + $max = DB::table('photos') + ->whereNull('tile_key') + ->whereBetween('lat', [-90, 90]) + ->whereBetween('lon', [-180, 180]) + ->orderBy('id') + ->limit($chunk) + ->max('id'); + + if (!$max) { + return 0; + } + + $tileSize = config('clustering.tile_size', 0.25); + $tileWidth = (int)(360 / $tileSize); + + // One set-based UPDATE - no insert, uses MySQL maths only + return DB::affectingStatement(" + UPDATE photos + SET tile_key = + FLOOR((lat + 90) / {$tileSize}) * {$tileWidth} + + FLOOR((lon + 180) / {$tileSize}) + WHERE id <= ? + AND tile_key IS NULL + AND lat BETWEEN -90 AND 90 + AND lon BETWEEN -180 AND 180 + ", [$max]); + } + + /** + * Cluster all photos globally for a given zoom level + */ + public function clusterGlobal(int $zoom): int + { + $g = $this->gridSizeForZoom($zoom); + $min = $this->minPointsForZoom($zoom); + $globalTileKey = config('clustering.global_tile_key'); + + // Delete existing clusters for this zoom + DB::table('clusters')->where('zoom', $zoom)->delete(); + + // Insert new clusters + // Note: We use the grouped columns in the outer SELECT to comply with ONLY_FULL_GROUP_BY + // we removed ST_SRID(POINT(AVG(lon), AVG(lat)), 4326), from 132 + DB::statement(" + INSERT INTO clusters + (tile_key, zoom, year, cell_x, cell_y, + lat, lon, point_count, grid_size) + SELECT + ? AS tile_key, ?, 0, + cell_x, cell_y, + AVG(lat), AVG(lon), + COUNT(*), + ? + FROM ( + SELECT + lat, lon, + FLOOR((lon + 180)/?) AS cell_x, + FLOOR((lat + 90)/?) AS cell_y + FROM photos USE INDEX (idx_photos_fast_cluster) + WHERE verified = 2 + ) AS grouped_photos + GROUP BY cell_x, cell_y + HAVING COUNT(*) >= ? + ", [$globalTileKey, $zoom, $g, $g, $g, $min]); + + return DB::table('clusters') + ->where('zoom', $zoom) + ->where('tile_key', $globalTileKey) + ->count(); + } + + /** + * Cluster all tiles for deep zoom levels - OPTIMIZED VERSION + * Uses generated columns for massive performance improvement + */ + public function clusterAllTilesForZoom(int $zoom): int + { + // Check if generated columns exist + if (!Schema::hasColumn('photos', 'cell_x') || !Schema::hasColumn('photos', 'cell_y')) { + throw new \RuntimeException('Generated columns cell_x and cell_y are required. Run migrations first.'); + } + + $min = $this->minPointsForZoom($zoom); + $factor = $this->getCellFactor($zoom); + $gridSize = $this->gridSizeForZoom($zoom); + $globalTileKey = config('clustering.global_tile_key'); + + // Delete existing clusters for this zoom (except global ones) + DB::table('clusters') + ->where('zoom', $zoom) + ->where('tile_key', '!=', $globalTileKey) + ->delete(); + + // Process all tiles in one query using generated columns + DB::statement(" + INSERT INTO clusters + (tile_key, zoom, year, cell_x, cell_y, + lat, lon, point_count, grid_size) + SELECT + tile_key, ?, 0, + cluster_x, cluster_y, + AVG(lat), AVG(lon), + COUNT(*), + ? + FROM ( + SELECT + tile_key, lat, lon, + FLOOR(cell_x / ?) AS cluster_x, + FLOOR(cell_y / ?) AS cluster_y + FROM photos USE INDEX (idx_photos_fast_cluster) + WHERE verified = 2 + AND tile_key IS NOT NULL + ) AS grouped_photos + GROUP BY tile_key, cluster_x, cluster_y + HAVING COUNT(*) >= ? + ", [$zoom, $gridSize, $factor, $factor, $min]); + + return DB::table('clusters') + ->where('zoom', $zoom) + ->where('tile_key', '!=', $globalTileKey) + ->count(); + } + + /** + * EXPERIMENTAL: Hierarchical clustering using previous zoom results + * This is even faster for deep zooms but requires careful testing + */ + public function clusterHierarchical(int $fromZoom, int $toZoom): int + { + $min = $this->minPointsForZoom($toZoom); + $fromGrid = $this->gridSizeForZoom($fromZoom); + $toGrid = $this->gridSizeForZoom($toZoom); + $gridRatio = $fromGrid / $toGrid; + + // Create temporary table from previous zoom + DB::statement(" + CREATE TEMPORARY TABLE tmp_clusters_z{$fromZoom} AS + SELECT * FROM clusters WHERE zoom = ? + ", [$fromZoom]); + + // Delete existing clusters for target zoom + DB::table('clusters')->where('zoom', $toZoom)->delete(); + + // Generate new clusters from previous zoom + DB::statement(" + INSERT INTO clusters + (tile_key, zoom, year, cell_x, cell_y, + lat, lon, point_count) + SELECT + tile_key, ?, 0, + FLOOR(cell_x * ?), + FLOOR(cell_y * ?), + AVG(lat), AVG(lon), + SUM(point_count) + FROM tmp_clusters_z{$fromZoom} + GROUP BY tile_key, + FLOOR(cell_x * ?), + FLOOR(cell_y * ?) + HAVING SUM(point_count) >= ? + ", [$toZoom, $gridRatio, $gridRatio, $gridRatio, $gridRatio, $min]); + + // Drop temporary table + DB::statement("DROP TEMPORARY TABLE tmp_clusters_z{$fromZoom}"); + + return DB::table('clusters')->where('zoom', $toZoom)->count(); + } + + /** + * Mark a tile as dirty with optional backoff + */ + public function markTileDirty(int $tileKey, bool $withBackoff = false): void + { + $changedAt = $withBackoff + ? now()->addMinutes(1) + : now(); + + // Upsert with attempt increment on conflict + DB::statement(' + INSERT INTO dirty_tiles (tile_key, changed_at, attempts) + VALUES (?, ?, ?) + ON DUPLICATE KEY UPDATE + changed_at = IF(attempts < 3, VALUES(changed_at), changed_at + INTERVAL 5 MINUTE), + attempts = attempts + 1 + ', [$tileKey, $changedAt, $withBackoff ? 1 : 0]); + } + + /** + * Get clustering statistics + */ + public function getStats(): array + { + return [ + 'photos_total' => DB::table('photos')->count(), + 'photos_with_tiles' => DB::table('photos')->whereNotNull('tile_key')->count(), + 'photos_verified' => DB::table('photos')->where('verified', 2)->count(), + 'unique_tiles' => DB::table('photos') + ->whereNotNull('tile_key') + ->where('verified', 2) + ->distinct('tile_key') + ->count('tile_key'), + 'clusters_total' => DB::table('clusters')->count(), + 'clusters_by_zoom' => DB::table('clusters') + ->select('zoom', DB::raw('COUNT(*) as count')) + ->groupBy('zoom') + ->pluck('count', 'zoom') + ->toArray(), + ]; + } + + /** + * Debug clustering for a specific tile + */ + public function debugClustering(int $tileKey): array + { + $photos = DB::table('photos') + ->where('tile_key', $tileKey) + ->where('verified', 2) + ->count(); + + $clusters = DB::table('clusters') + ->where('tile_key', $tileKey) + ->get(); + + return [ + 'tile_key' => $tileKey, + 'photo_count' => $photos, + 'cluster_count' => $clusters->count(), + 'clusters_by_zoom' => $clusters->groupBy('zoom')->map->count(), + 'total_points_in_clusters' => $clusters->sum('point_count'), + ]; + } + + // Add this method to your ClusteringService class: + + /** + * Cluster a specific tile across all zoom levels + */ + public function clusterTile(int $tileKey): void + { + $globalTileKey = config('clustering.global_tile_key'); + + // Skip if this is the global tile key + if ($tileKey == $globalTileKey) { + return; + } + + // Get all configured zoom levels + $tileZooms = config('clustering.zoom_levels.tile', [8, 10, 12, 14, 16]); + + foreach ($tileZooms as $zoom) { + $min = $this->minPointsForZoom($zoom); + $factor = $this->getCellFactor($zoom); + $gridSize = $this->gridSizeForZoom($zoom); + + // Delete existing clusters for this tile at this zoom + DB::table('clusters') + ->where('zoom', $zoom) + ->where('tile_key', $tileKey) + ->delete(); + + // Re-cluster this tile + DB::statement(" + INSERT INTO clusters + (tile_key, zoom, year, cell_x, cell_y, + lat, lon, point_count, grid_size) + SELECT + tile_key, ?, 0, + cluster_x, cluster_y, + AVG(lat), AVG(lon), + COUNT(*), + ? + FROM ( + SELECT + tile_key, lat, lon, + FLOOR(cell_x / ?) AS cluster_x, + FLOOR(cell_y / ?) AS cluster_y + FROM photos USE INDEX (idx_photos_fast_cluster) + WHERE verified = 2 + AND tile_key = ? + ) AS grouped_photos + GROUP BY tile_key, cluster_x, cluster_y + HAVING COUNT(*) >= ? + ", [$zoom, $gridSize, $factor, $factor, $tileKey, $min]); + } + } +} diff --git a/app/Services/Locations/LocationService.php b/app/Services/Locations/LocationService.php new file mode 100644 index 000000000..321298f2e --- /dev/null +++ b/app/Services/Locations/LocationService.php @@ -0,0 +1,1000 @@ +getLocationsViaRanking($type, $parentId, $sortBy, $page, $perPage, $sortDir); + } + + // Use database for other sorts + return $this->getLocationsViaDatabase($type, $parentId, $sortBy, $page, $perPage, $sortDir); + } + + /** + * Get location details + */ + public function getLocationDetails(LocationType $type, int $id, array $includes = []) + { + $model = $type->modelClass(); + $location = $model::with(['creator', 'lastUploader'])->findOrFail($id); + + // Get appropriate totals for percentage calculations + $totals = $this->getTotalsForLocation($type, $location); + + // Add basic metrics + $this->enrichLocationWithMetrics($location, $type, $totals); + + // Add optional detailed data + if (in_array('breakdowns', $includes)) { + $location->category_breakdown = $this->getCategoryBreakdown($type, $id); + $location->object_breakdown = $this->getObjectBreakdown($type, $id); + $location->brand_breakdown = $this->getBrandBreakdown($type, $id); + } + + return $location; + } + + /** + * Get global statistics + */ + public function getGlobalStats(): array + { + return Cache::remember('global:stats:v5', 300, function () { + // Try metrics table first for accurate totals + $metricsData = DB::table('metrics') + ->where('timescale', 0) // All-time + ->where('location_type', LocationType::Global->value) + ->where('location_id', 0) + ->where('user_id', 0) + ->first(['uploads', 'litter', 'xp']); + + if ($metricsData) { + $totalLitter = (int) $metricsData->litter; + $totalPhotos = (int) $metricsData->uploads; + $totalXp = (int) $metricsData->xp; + } else { + // Fallback to Redis + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats('{g}')), []); + $totalLitter = (int) ($stats['litter'] ?? 0); + $totalPhotos = (int) ($stats['photos'] ?? 0); + $totalXp = (int) ($stats['xp'] ?? 0); + } + + // Get contributors from Redis HyperLogLog + $contributors = $this->safeRedis(fn() => Redis::pfcount(RedisKeys::hll('{g}')), 0); + if ($contributors === 0) { + $contributors = DB::table('photos') + ->whereNotNull('processed_at') + ->distinct('user_id') + ->count('user_id'); + } + + // Get countries count + $countryModel = LocationType::Country->modelClass(); + $countries = $countryModel::where('manual_verify', true)->count(); + + $level = $this->calculateGlobalLevel($totalLitter); + + return [ + 'total_litter' => $totalLitter, + 'total_photos' => $totalPhotos, + 'total_xp' => $totalXp, + 'total_contributors' => $contributors, + 'total_countries' => $countries, + 'level' => $level['level'], + 'current_xp' => $totalLitter, + 'previous_xp' => $level['previous_xp'], + 'next_xp' => $level['next_xp'], + 'progress' => $level['progress'], + 'top_categories' => $this->getTopGlobalDimension('categories', 5), + 'top_brands' => $this->getTopGlobalDimension('brands', 5), + ]; + }); + } + + /** + * Get top tags + */ + public function getTopTags(LocationType $type, int $id, string $dimension = 'objects', int $limit = 20): array + { + $scope = $type->scopePrefix($id); + $cacheKey = "tags:{$type->value}:{$id}:{$dimension}:{$limit}:v5"; + + return Cache::remember($cacheKey, 600, function () use ($scope, $dimension, $limit) { + // Try ZSET first (fast path) + $rankKey = RedisKeys::ranking($scope, $dimension); + $topItems = $this->safeRedis( + fn() => $this->zrangeWithScores($rankKey, 0, $limit - 1, true), + [] + ); + + if (empty($topItems)) { + return $this->getTopTagsFromHash($scope, $dimension, $limit); + } + + // Get totals from metrics table or Redis + $totalLitter = $this->getTotalLitterForScope($type, $id); + $dimensionTotal = $this->calculateDimensionTotal($scope, $dimension); + $denominator = ($dimension === 'objects') ? $totalLitter : $dimensionTotal; + + if ($denominator === 0) { + return $this->emptyTagsResponse(); + } + + // Build result + $items = []; + $sumOfTop = 0; + $names = $this->resolveTagNames($dimension, array_keys($topItems)); + + foreach ($topItems as $tagId => $count) { + if (!isset($names[$tagId])) continue; + + $count = (int) $count; + $sumOfTop += $count; + + $items[] = [ + 'id' => (int) $tagId, + 'name' => $names[$tagId], + 'count' => $count, + 'percentage' => round(($count / $denominator) * 100, 2) + ]; + } + + $other = max(0, $dimensionTotal - $sumOfTop); + + return [ + 'items' => $items, + 'total' => $totalLitter, + 'dimension_total' => $dimensionTotal, + 'other' => [ + 'count' => $other, + 'percentage' => $denominator > 0 ? round(($other / $denominator) * 100, 2) : 0 + ] + ]; + }); + } + + // ===== PRIVATE METHODS ===== + + /** + * Get locations via ZSET ranking + */ + private function getLocationsViaRanking(LocationType $type, ?int $parentId, string $sortBy, int $page, int $perPage, string $sortDir): array + { + $offset = ($page - 1) * $perPage; + $metric = $sortBy === 'total_litter' ? 'litter' : 'photos'; + $rankingKey = $type->parentRankingKey($parentId, $metric); + + $total = $this->safeRedis(fn() => Redis::zCard($rankingKey), 0); + if ($total === 0) { + return $this->emptyResponse($page, $perPage); + } + + $results = $this->safeRedis( + fn() => $this->zrangeWithScores($rankingKey, $offset, $offset + $perPage - 1, $sortDir === 'desc'), + [] + ); + + if (empty($results)) { + return $this->emptyResponse($page, $perPage); + } + + // Hydrate and enrich + $locations = $this->hydrateLocations($type, array_keys($results)); + $sortedLocations = $this->sortByRanking($locations, $results, $metric); + $totals = $this->getTotalsForList($type, $parentId); + $this->enrichLocationsBatch($sortedLocations, $type, $totals); + + return [ + 'locations' => $sortedLocations->values()->all(), + 'pagination' => [ + 'total' => $total, + 'current_page' => $page, + 'last_page' => (int) ceil($total / $perPage), + 'per_page' => $perPage, + ], + 'totals' => $totals, + ]; + } + + /** + * Get locations via database + */ + private function getLocationsViaDatabase(LocationType $type, ?int $parentId, string $sortBy, int $page, int $perPage, string $sortDir): array + { + $model = $type->modelClass(); + $query = $model::with(['creator', 'lastUploader']) + ->where('manual_verify', true); + + // Apply parent filter + if ($parentId && $parentColumn = $type->parentColumn()) { + $query->where($parentColumn, $parentId); + } + + // Validate sort column + $allowedColumns = ['created_at', 'updated_at', 'country', 'state', 'city']; + if (!in_array($sortBy, $allowedColumns)) { + $sortBy = 'created_at'; + } + + $query->orderBy($sortBy, $sortDir); + $paginated = $query->paginate($perPage, ['*'], 'page', $page); + + $totals = $this->getTotalsForList($type, $parentId); + $this->enrichLocationsBatch($paginated->getCollection(), $type, $totals); + + return [ + 'locations' => $paginated->items(), + 'pagination' => [ + 'total' => $paginated->total(), + 'current_page' => $paginated->currentPage(), + 'last_page' => $paginated->lastPage(), + 'per_page' => $paginated->perPage(), + ], + 'totals' => $totals, + ]; + } + + /** + * Get category breakdown + */ + private function getCategoryBreakdown(LocationType $type, int $id): array + { + $scope = $type->scopePrefix($id); + $cacheKey = "breakdown:category:{$type->value}:{$id}:v5"; + + return Cache::remember($cacheKey, 3600, function () use ($scope) { + return $this->getDimensionBreakdown($scope, 'categories', 20); + }); + } + + /** + * Get object breakdown + */ + private function getObjectBreakdown(LocationType $type, int $id): array + { + $scope = $type->scopePrefix($id); + $cacheKey = "breakdown:object:{$type->value}:{$id}:v5"; + + return Cache::remember($cacheKey, 3600, function () use ($scope) { + return $this->getDimensionBreakdown($scope, 'objects', 20); + }); + } + + /** + * Get brand breakdown + */ + private function getBrandBreakdown(LocationType $type, int $id): array + { + $scope = $type->scopePrefix($id); + $cacheKey = "breakdown:brand:{$type->value}:{$id}:v5"; + + return Cache::remember($cacheKey, 3600, function () use ($scope) { + return $this->getDimensionBreakdown($scope, 'brands', 10); + }); + } + + /** + * Generic dimension breakdown + */ + private function getDimensionBreakdown(string $scope, string $dimension, int $limit = 0): array + { + // Get the correct Redis hash key for this dimension + $hashKey = match($dimension) { + 'categories' => RedisKeys::categories($scope), + 'objects' => RedisKeys::objects($scope), + 'materials' => RedisKeys::materials($scope), + 'brands' => RedisKeys::brands($scope), + 'custom_tags' => RedisKeys::customTags($scope), + default => RedisKeys::objects($scope) + }; + + $items = $this->safeRedis(fn() => Redis::hgetall($hashKey), []); + + if (empty($items)) { + return []; + } + + // Get total litter for percentages + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats($scope)), []); + $totalLitter = (int) ($stats['litter'] ?? 0); + + if ($totalLitter === 0) { + $totalLitter = $this->calculateTotalFromHash(RedisKeys::objects($scope)); + } + + arsort($items); + if ($limit > 0) { + $items = array_slice($items, 0, $limit, true); + } + + $ids = array_map('intval', array_keys($items)); + $names = $this->resolveTagNames($dimension, $ids); + + $breakdown = []; + foreach ($items as $id => $count) { + if (!isset($names[(int)$id])) continue; + + $breakdown[] = [ + 'id' => (int) $id, + 'name' => $names[(int)$id], + 'count' => (int) $count, + 'percentage' => $totalLitter > 0 ? round(($count / $totalLitter) * 100, 2) : 0 + ]; + } + + return $breakdown; + } + + /** + * Hydrate location models + */ + private function hydrateLocations(LocationType $type, array $ids): Collection + { + if (empty($ids)) { + return collect(); + } + + $model = $type->modelClass(); + return $model::with(['creator', 'lastUploader']) + ->whereIn('id', $ids) + ->where('manual_verify', true) + ->get() + ->keyBy('id'); + } + + /** + * Sort by ranking scores + */ + private function sortByRanking(Collection $locations, array $scores, string $metric): Collection + { + $sorted = collect(); + + foreach (array_keys($scores) as $id) { + if ($locations->has($id)) { + $location = $locations->get($id); + $location->rank_metric = $metric; + $location->rank_score = (int) $scores[$id]; + $sorted->push($location); + } + } + + return $sorted; + } + + /** + * Enrich single location with metrics + */ + private function enrichLocationWithMetrics($location, LocationType $type, array $totals): void + { + $scope = $type->scopePrefix($location->id); + + // Try metrics table first + $metricsData = DB::table('metrics') + ->where('timescale', 0) // All-time + ->where('location_type', $type->value) + ->where('location_id', $location->id) + ->where('user_id', 0) + ->first(['uploads', 'litter']); + + if ($metricsData) { + $location->total_photos = (int) $metricsData->uploads; + $location->total_litter = (int) $metricsData->litter; + } else { + // Fallback to Redis + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats($scope)), []); + $location->total_photos = (int) ($stats['photos'] ?? 0); + $location->total_litter = (int) ($stats['litter'] ?? 0); + + if ($location->total_litter === 0) { + $location->total_litter = $this->calculateTotalFromHash(RedisKeys::objects($scope)); + } + } + + // Get contributor count from Redis + $location->total_contributors = $this->safeRedis( + fn() => Redis::zCard(RedisKeys::contributorRanking($scope)), + 0 + ); + + // Calculate percentages + $location->percentage_litter = $totals['litter'] > 0 + ? round(($location->total_litter / $totals['litter']) * 100, 2) + : 0; + $location->percentage_photos = $totals['photos'] > 0 + ? round(($location->total_photos / $totals['photos']) * 100, 2) + : 0; + + // Calculate averages + $location->avg_litter_per_user = $location->total_contributors > 0 + ? round($location->total_litter / $location->total_contributors, 2) + : 0; + $location->avg_photos_per_user = $location->total_contributors > 0 + ? round($location->total_photos / $location->total_contributors, 2) + : 0; + + $location->last_uploaded_at = $this->getLastUploadDate($type, $location->id); + } + + /** + * Enrich multiple locations in batch + */ + private function enrichLocationsBatch(Collection $locations, LocationType $type, array $totals): void + { + if ($locations->isEmpty()) { + return; + } + + $locationIds = $locations->pluck('id')->all(); + + // Try to get metrics from database in batch + $metricsData = DB::table('metrics') + ->where('timescale', 0) + ->where('location_type', $type->value) + ->whereIn('location_id', $locationIds) + ->where('user_id', 0) + ->get(['location_id', 'uploads', 'litter']) + ->keyBy('location_id'); + + // Pipeline Redis reads for missing data + $scopes = []; + foreach ($locations as $location) { + $scopes[$location->id] = $type->scopePrefix($location->id); + } + + $bulk = $this->safeRedis(function() use ($scopes) { + return Redis::pipeline(function($pipe) use ($scopes) { + foreach ($scopes as $scope) { + $pipe->hGetAll(RedisKeys::stats($scope)); + $pipe->zCard(RedisKeys::contributorRanking($scope)); + } + }); + }, array_fill(0, count($scopes) * 2, [])); + + // Map results + $i = 0; + foreach ($locations as $location) { + // Use metrics table data if available + if (isset($metricsData[$location->id])) { + $location->total_photos = (int) $metricsData[$location->id]->uploads; + $location->total_litter = (int) $metricsData[$location->id]->litter; + } else { + // Fallback to Redis + $stats = $bulk[$i * 2] ?? []; + $location->total_photos = (int) ($stats['photos'] ?? 0); + $location->total_litter = (int) ($stats['litter'] ?? 0); + + if ($location->total_litter === 0) { + $scope = $scopes[$location->id]; + $location->total_litter = $this->calculateTotalFromHash(RedisKeys::objects($scope)); + } + } + + $location->total_contributors = (int) ($bulk[$i * 2 + 1] ?? 0); + + // Calculate percentages + $location->percentage_litter = $totals['litter'] > 0 + ? round(($location->total_litter / $totals['litter']) * 100, 2) + : 0; + $location->percentage_photos = $totals['photos'] > 0 + ? round(($location->total_photos / $totals['photos']) * 100, 2) + : 0; + + // Calculate averages + $location->avg_litter_per_user = $location->total_contributors > 0 + ? round($location->total_litter / $location->total_contributors, 2) + : 0; + $location->avg_photos_per_user = $location->total_contributors > 0 + ? round($location->total_photos / $location->total_contributors, 2) + : 0; + + $i++; + } + + // Batch last upload dates + $this->batchLastUploadDates($locations, $type); + } + + /** + * Batch fetch last upload dates + */ + private function batchLastUploadDates(Collection $locations, LocationType $type): void + { + $ids = $locations->pluck('id')->all(); + $column = $type->dbColumn(); + + $lastUploads = DB::table('photos') + ->select($column, DB::raw('MAX(created_at) as last_upload')) + ->whereIn($column, $ids) + ->whereNotNull('processed_at') + ->groupBy($column) + ->pluck('last_upload', $column); + + foreach ($locations as $location) { + $location->last_uploaded_at = $lastUploads[$location->id] ?? null; + } + } + + /** + * Get totals for list + */ + private function getTotalsForList(LocationType $type, ?int $parentId): array + { + if ($parentId && $parentType = $type->parentType()) { + return $this->getScopeTotals($parentType, $parentId); + } + + return $this->getGlobalTotals(); + } + + /** + * Get totals for specific location + */ + private function getTotalsForLocation(LocationType $type, $location): array + { + if ($type === LocationType::Country) { + return $this->getGlobalTotals(); + } + + if ($type === LocationType::State && $location->country_id) { + return $this->getScopeTotals(LocationType::Country, $location->country_id); + } + + if ($type === LocationType::City && $location->state_id) { + return $this->getScopeTotals(LocationType::State, $location->state_id); + } + + return $this->getGlobalTotals(); + } + + /** + * Get scope totals + */ + private function getScopeTotals(LocationType $type, int $locationId): array + { + // Try metrics table first + $metricsData = DB::table('metrics') + ->where('timescale', 0) + ->where('location_type', $type->value) + ->where('location_id', $locationId) + ->where('user_id', 0) + ->first(['uploads', 'litter']); + + if ($metricsData) { + return [ + 'photos' => (int) $metricsData->uploads, + 'litter' => (int) $metricsData->litter + ]; + } + + // Fallback to Redis + $scope = $type->scopePrefix($locationId); + $stats = $this->safeRedis(fn() => Redis::hGetAll(RedisKeys::stats($scope)), []); + $photos = (int) ($stats['photos'] ?? 0); + $litter = (int) ($stats['litter'] ?? 0); + + if ($litter === 0) { + $litter = $this->calculateTotalFromHash(RedisKeys::objects($scope)); + } + + return ['photos' => $photos, 'litter' => $litter]; + } + + /** + * Get global totals + */ + private function getGlobalTotals(): array + { + // Try metrics table first + $metricsData = DB::table('metrics') + ->where('timescale', 0) + ->where('location_type', LocationType::Global->value) + ->where('location_id', 0) + ->where('user_id', 0) + ->first(['uploads', 'litter']); + + if ($metricsData) { + return [ + 'photos' => (int) $metricsData->uploads, + 'litter' => (int) $metricsData->litter + ]; + } + + // Fallback to Redis + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats('{g}')), []); + $photos = (int) ($stats['photos'] ?? 0); + $litter = (int) ($stats['litter'] ?? 0); + + if ($litter === 0) { + $litter = $this->calculateTotalFromHash(RedisKeys::objects('{g}')); + } + + return ['photos' => $photos, 'litter' => $litter]; + } + + /** + * Get total litter for a scope + */ + private function getTotalLitterForScope(LocationType $type, int $locationId): int + { + // Try metrics table first + $metricsData = DB::table('metrics') + ->where('timescale', 0) + ->where('location_type', $type->value) + ->where('location_id', $locationId) + ->where('user_id', 0) + ->value('litter'); + + if ($metricsData !== null) { + return (int) $metricsData; + } + + // Fallback to Redis + $scope = $type->scopePrefix($locationId); + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats($scope)), []); + $litter = (int) ($stats['litter'] ?? 0); + + if ($litter === 0) { + $litter = $this->calculateTotalFromHash(RedisKeys::objects($scope)); + } + + return $litter; + } + + /** + * Calculate total from hash + */ + private function calculateTotalFromHash(string $hashKey): int + { + $items = $this->safeRedis(fn() => Redis::hgetall($hashKey), []); + return array_sum(array_map('intval', $items)); + } + + /** + * Calculate dimension total + */ + private function calculateDimensionTotal(string $scope, string $dimension): int + { + $hashKey = match($dimension) { + 'objects' => RedisKeys::objects($scope), + 'categories' => RedisKeys::categories($scope), + 'materials' => RedisKeys::materials($scope), + 'brands' => RedisKeys::brands($scope), + 'custom_tags' => RedisKeys::customTags($scope), + default => RedisKeys::objects($scope) + }; + + return $this->calculateTotalFromHash($hashKey); + } + + /** + * Get top tags from hash (fallback when ZSET is empty) + */ + private function getTopTagsFromHash(string $scope, string $dimension, int $limit): array + { + $hashKey = match($dimension) { + 'objects' => RedisKeys::objects($scope), + 'categories' => RedisKeys::categories($scope), + 'materials' => RedisKeys::materials($scope), + 'brands' => RedisKeys::brands($scope), + 'custom_tags' => RedisKeys::customTags($scope), + default => RedisKeys::objects($scope) + }; + + $allItems = $this->safeRedis(fn() => Redis::hgetall($hashKey), []); + if (empty($allItems)) { + return $this->emptyTagsResponse(); + } + + arsort($allItems); + $topItems = array_slice($allItems, 0, $limit, true); + + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats($scope)), []); + $totalLitter = (int) ($stats['litter'] ?? 0); + + if ($totalLitter === 0) { + $totalLitter = $this->calculateTotalFromHash(RedisKeys::objects($scope)); + } + + $dimensionTotal = array_sum(array_map('intval', $allItems)); + $denominator = ($dimension === 'objects') ? $totalLitter : $dimensionTotal; + + if ($denominator === 0) { + return $this->emptyTagsResponse(); + } + + $ids = array_map('intval', array_keys($topItems)); + $names = $this->resolveTagNames($dimension, $ids); + + $items = []; + $sumOfTop = 0; + + foreach ($topItems as $id => $count) { + if (!isset($names[(int)$id])) continue; + + $count = (int) $count; + $sumOfTop += $count; + + $items[] = [ + 'id' => (int) $id, + 'name' => $names[(int)$id], + 'count' => $count, + 'percentage' => round(($count / $denominator) * 100, 2) + ]; + } + + $other = max(0, $dimensionTotal - $sumOfTop); + + return [ + 'items' => $items, + 'total' => $totalLitter, + 'dimension_total' => $dimensionTotal, + 'other' => [ + 'count' => $other, + 'percentage' => $denominator > 0 ? round(($other / $denominator) * 100, 2) : 0 + ] + ]; + } + + /** + * Get top global dimension + */ + private function getTopGlobalDimension(string $dimension, int $limit): array + { + $rankKey = RedisKeys::ranking('{g}', $dimension); + $topItems = $this->safeRedis( + fn() => $this->zrangeWithScores($rankKey, 0, $limit - 1, true), + [] + ); + + if (empty($topItems)) { + $hashKey = match($dimension) { + 'categories' => RedisKeys::categories('{g}'), + 'brands' => RedisKeys::brands('{g}'), + 'materials' => RedisKeys::materials('{g}'), + default => RedisKeys::objects('{g}') + }; + + $items = $this->safeRedis(fn() => Redis::hgetall($hashKey), []); + if (empty($items)) { + return []; + } + + arsort($items); + $topItems = array_slice($items, 0, $limit, true); + } + + $ids = array_map('intval', array_keys($topItems)); + $names = $this->resolveTagNames($dimension, $ids); + + $breakdown = []; + foreach ($topItems as $id => $count) { + if (isset($names[(int)$id])) { + $breakdown[] = [ + 'name' => $names[(int)$id], + 'count' => (int) $count + ]; + } + } + + return $breakdown; + } + + /** + * Resolve tag names + */ + private function resolveTagNames(string $dimension, array $ids): array + { + if (empty($ids)) { + return []; + } + + $dimensionMap = [ + 'objects' => 'object', + 'categories' => 'category', + 'materials' => 'material', + 'brands' => 'brand', + 'custom_tags' => 'custom_tag', + ]; + + $tagDimension = $dimensionMap[$dimension] ?? null; + if (!$tagDimension) { + return []; + } + + $names = []; + $keys = TagKeyCache::getKeysForIds($tagDimension, $ids); + + foreach ($ids as $id) { + $names[$id] = $keys[$id] ?? null; + } + + return $names; + } + + /** + * Calculate global level + */ + private function calculateGlobalLevel(int $totalLitter): array + { + // Simple level calculation based on litter count + $levels = [ + 1 => ['min' => 0, 'max' => 1000], + 2 => ['min' => 1000, 'max' => 5000], + 3 => ['min' => 5000, 'max' => 10000], + 4 => ['min' => 10000, 'max' => 25000], + 5 => ['min' => 25000, 'max' => 50000], + 6 => ['min' => 50000, 'max' => 100000], + 7 => ['min' => 100000, 'max' => 250000], + 8 => ['min' => 250000, 'max' => 500000], + 9 => ['min' => 500000, 'max' => 1000000], + 10 => ['min' => 1000000, 'max' => PHP_INT_MAX], + ]; + + $currentLevel = 1; + foreach ($levels as $level => $range) { + if ($totalLitter >= $range['min'] && $totalLitter < $range['max']) { + $currentLevel = $level; + break; + } + } + + $prev = $levels[$currentLevel]['min']; + $next = $levels[$currentLevel]['max']; + + return [ + 'level' => $currentLevel, + 'previous_xp' => $prev, + 'next_xp' => $next === PHP_INT_MAX ? $totalLitter + 1000000 : $next, + 'progress' => $next > $prev ? round((($totalLitter - $prev) / ($next - $prev)) * 100, 2) : 100, + ]; + } + + /** + * Get last upload date for a location + */ + private function getLastUploadDate(LocationType $type, int $locationId) + { + $column = $type->dbColumn(); + + $lastPhoto = DB::table('photos') + ->where($column, $locationId) + ->whereNotNull('processed_at') + ->orderBy('created_at', 'desc') + ->first(['created_at']); + + return $lastPhoto ? $lastPhoto->created_at : null; + } + + /** + * Cross-client ZSET range with scores + */ + private function zrangeWithScores(string $key, int $start, int $stop, bool $reverse = false): array + { + $connection = Redis::connection(); + + if ($connection->client() instanceof \Redis) { + return $reverse + ? Redis::zRevRange($key, $start, $stop, true) + : Redis::zRange($key, $start, $stop, true); + } else { + return $reverse + ? Redis::zrevrange($key, $start, $stop, ['withscores' => true]) + : Redis::zrange($key, $start, $stop, ['withscores' => true]); + } + } + + /** + * Safe Redis operation wrapper + */ + private function safeRedis(callable $operation, $fallback = null) + { + try { + return $operation(); + } catch (\Exception $e) { + Log::error('Redis operation failed', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString() + ]); + + if ($fallback !== null) { + return $fallback; + } + + throw $e; + } + } + + /** + * Empty response helpers + */ + private function emptyResponse(int $page, int $perPage): array + { + return [ + 'locations' => [], + 'pagination' => [ + 'total' => 0, + 'current_page' => $page, + 'last_page' => 1, + 'per_page' => $perPage, + ], + 'totals' => ['photos' => 0, 'litter' => 0], + ]; + } + + private function emptyTagsResponse(): array + { + return [ + 'items' => [], + 'total' => 0, + 'dimension_total' => 0, + 'other' => ['count' => 0, 'percentage' => 0] + ]; + } + + /** + * Get cleanup statistics for a location + */ + public function getCleanupStats(LocationType $type, int $id): array + { + $scope = $type->scopePrefix($id); + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats($scope)), []); + + $totalLitter = (int) ($stats['litter'] ?? 0); + $totalPickedUp = (int) ($stats['picked_up'] ?? 0); + + $cleanupRate = $totalLitter > 0 + ? round(($totalPickedUp / $totalLitter) * 100, 2) + : 0.0; + + return [ + 'total_litter' => $totalLitter, + 'total_picked_up' => $totalPickedUp, + 'cleanup_rate' => $cleanupRate, + ]; + } + + /** + * Get tag summary for a location + */ + public function getTagSummary(LocationType $type, int $id): array + { + $scope = $type->scopePrefix($id); + $stats = $this->safeRedis(fn() => Redis::hgetall(RedisKeys::stats($scope)), []); + $totalLitter = (int) ($stats['litter'] ?? 0); + + return [ + 'total_litter' => $totalLitter, + 'top_objects' => $this->getTopTags($type, $id, 'objects', 10)['items'] ?? [], + 'top_brands' => $this->getTopTags($type, $id, 'brands', 10)['items'] ?? [], + 'top_materials' => $this->getTopTags($type, $id, 'materials', 10)['items'] ?? [], + ]; + } +} diff --git a/app/Services/Metrics/MetricsService.php b/app/Services/Metrics/MetricsService.php new file mode 100644 index 000000000..278988ad7 --- /dev/null +++ b/app/Services/Metrics/MetricsService.php @@ -0,0 +1,476 @@ +id)->lockForUpdate()->first(); + + if (!$photo) { + return; + } + + $metrics = $this->extractMetricsFromPhoto($photo); + $fingerprint = $this->computeFingerprint($metrics['tags']); + + // FIX #1: Check both fingerprint AND XP to detect changes + if ($photo->processed_fp === $fingerprint && + (int)$photo->processed_xp === (int)$metrics['xp']) { + return; // Nothing changed + } + + // Route to appropriate handler within the transaction + if ($photo->processed_at !== null) { + $this->doUpdate($photo, $metrics, $fingerprint); + } else { + $this->doCreate($photo, $metrics, $fingerprint); + } + }); + } + + /** + * Delete a photo's metrics (reversing XP as well) + */ + public function deletePhoto(Photo $photo): void + { + DB::transaction(function () use ($photo) { + // Lock the row + $photo = Photo::whereKey($photo->id)->lockForUpdate()->first(); + + if (!$photo || $photo->processed_at === null) { + return; + } + + $oldTags = json_decode($photo->processed_tags ?? '{}', true); + $oldXp = (int)($photo->processed_xp ?? 0); + + // Calculate negative metrics from stored values + $negativeMetrics = [ + 'tags_count' => -( + array_sum($oldTags['objects'] ?? []) + + array_sum($oldTags['materials'] ?? []) + + array_sum($oldTags['brands'] ?? []) + ), + 'brands_count' => -array_sum($oldTags['brands'] ?? []), + 'materials_count' => -array_sum($oldTags['materials'] ?? []), + 'custom_tags_count' => -array_sum($oldTags['custom_tags'] ?? []), + 'litter' => -array_sum($oldTags['objects'] ?? []), + 'xp' => -$oldXp, + ]; + + // Apply negative deltas with -1 upload + $rows = $this->buildTimeSeriesRows($photo, $negativeMetrics, -1); + $this->upsertTimeSeriesRows($rows); // GREATEST prevents going negative + + // Clear processing data + $photo->update([ + 'processed_at' => null, + 'processed_fp' => null, + 'processed_tags' => null, + 'processed_xp' => null, + ]); + + // FIX #3: Use unified Redis update (pass positive values, collector will negate) + $this->updateRedis($photo, [ + 'tags' => $oldTags, + 'litter' => array_sum($oldTags['objects'] ?? []), + 'xp' => $oldXp, + ], 'delete'); + }); + } + + /** + * Create new photo within transaction + */ + private function doCreate(Photo $photo, array $metrics, string $fingerprint): void + { + // Use upsert for idempotency (handles retries) + $rows = $this->buildTimeSeriesRows($photo, $metrics, 1); + $this->upsertTimeSeriesRows($rows); + + // Mark as processed + $photo->update([ + 'processed_at' => now('UTC'), + 'processed_fp' => $fingerprint, + 'processed_tags' => json_encode($metrics['tags'], JSON_NUMERIC_CHECK), + 'processed_xp' => $metrics['xp'], + ]); + + $this->updateRedis($photo, $metrics, 'create'); + } + + /** + * Update existing photo within transaction + */ + private function doUpdate(Photo $photo, array $newMetrics, string $newFingerprint): void + { + $oldTags = json_decode($photo->processed_tags ?? '{}', true); + $oldXp = (int)($photo->processed_xp ?? 0); + + // Calculate deltas + $tagDeltas = $this->calculateTagDeltas($oldTags, $newMetrics['tags']); + $xpDelta = $newMetrics['xp'] - $oldXp; + + // Check if anything actually changed + if ($this->isDeltaEmpty($tagDeltas) && $xpDelta === 0) { + // Still update fingerprint and XP tracking even if no deltas + $photo->update([ + 'processed_fp' => $newFingerprint, + 'processed_xp' => $newMetrics['xp'], + ]); + return; + } + + // Build delta metrics + $deltaMetrics = [ + 'tags_count' => ( + array_sum($tagDeltas['objects'] ?? []) + + array_sum($tagDeltas['materials'] ?? []) + + array_sum($tagDeltas['brands'] ?? []) + ), + 'brands_count' => array_sum($tagDeltas['brands'] ?? []), + 'materials_count' => array_sum($tagDeltas['materials'] ?? []), + 'custom_tags_count' => array_sum($tagDeltas['custom_tags'] ?? []), + 'litter' => array_sum($tagDeltas['objects'] ?? []), + 'xp' => $xpDelta, + ]; + + // Apply deltas (0 uploads for updates) + $rows = $this->buildTimeSeriesRows($photo, $deltaMetrics, 0); + $this->upsertTimeSeriesRows($rows); + + // Update photo record + $photo->update([ + 'processed_fp' => $newFingerprint, + 'processed_tags' => json_encode($newMetrics['tags'], JSON_NUMERIC_CHECK), + 'processed_xp' => $newMetrics['xp'], + ]); + + $this->updateRedis($photo, [ + 'tags' => $tagDeltas, + 'litter' => $deltaMetrics['litter'], + 'xp' => $xpDelta, + ], 'update'); + } + + private function updateRedis(Photo $photo, array $payload, string $operation): void + { + DB::afterCommit(function() use ($photo, $payload, $operation) { + RedisMetricsCollector::processPhoto($photo, $payload, $operation); + }); + } + + /** + * Extract metrics from photo summary + */ + private function extractMetricsFromPhoto(Photo $photo): array + { + $summary = $photo->summary ?? []; + $tags = ['categories' => [], 'objects' => [], 'materials' => [], 'brands' => [], 'custom_tags' => []]; + $totalLitter = 0; + $totalBrands = 0; + $totalMaterials = 0; + $totalCustom = 0; + + foreach ($summary['tags'] ?? [] as $categoryKey => $objects) { + if (!is_array($objects)) continue; + + $categoryTotal = 0; + foreach ($objects as $objectKey => $data) { + if (!is_array($data)) continue; + + $quantity = (int)($data['quantity'] ?? 0); + if ($quantity <= 0) continue; + + // Objects + $objectId = is_numeric($objectKey) ? (int)$objectKey : $objectKey; + $tags['objects'][$objectId] = ($tags['objects'][$objectId] ?? 0) + $quantity; + $categoryTotal += $quantity; + $totalLitter += $quantity; + + // Materials + foreach ($data['materials'] ?? [] as $key => $count) { + $id = is_numeric($key) ? (int)$key : $key; + $qty = (int)$count; + $tags['materials'][$id] = ($tags['materials'][$id] ?? 0) + $qty; + $totalMaterials += $qty; + } + + // Brands + foreach ($data['brands'] ?? [] as $key => $count) { + $id = is_numeric($key) ? (int)$key : $key; + $qty = (int)$count; + $tags['brands'][$id] = ($tags['brands'][$id] ?? 0) + $qty; + $totalBrands += $qty; + } + + // Custom tags + foreach ($data['custom_tags'] ?? [] as $key => $count) { + $id = is_numeric($key) ? (int)$key : $key; + $qty = (int)$count; + $tags['custom_tags'][$id] = ($tags['custom_tags'][$id] ?? 0) + $qty; + $totalCustom += $qty; + } + } + + // Category totals (not included in tags_count to avoid double-counting) + if ($categoryTotal > 0) { + $categoryId = is_numeric($categoryKey) ? (int)$categoryKey : $categoryKey; + $tags['categories'][$categoryId] = $categoryTotal; + } + } + + // Tags count excludes categories to avoid double-counting + $tagsCount = array_sum($tags['objects']) + + array_sum($tags['materials']) + + array_sum($tags['brands']) + + array_sum($tags['custom_tags']); + ; + + return [ + 'tags' => $tags, + 'tags_count' => $tagsCount, + 'brands_count' => $totalBrands, + 'materials_count' => $totalMaterials, + 'custom_tags_count' => $totalCustom, + 'litter' => $totalLitter, + 'xp' => (int)($photo->xp ?? 0), + ]; + } + + /** + * Build time-series rows for all timescales and locations + */ + private function buildTimeSeriesRows(Photo $photo, array $metrics, int $uploadsDelta): array + { + $timestamp = $photo->created_at->copy()->utc(); + $locations = $this->getLocationHierarchy($photo); + $rows = []; + + foreach ($locations as [$locationType, $locationId]) { + // All timescales: 0=all-time, 1=daily, 2=weekly, 3=monthly, 4=yearly + foreach ([0, 1, 2, 3, 4] as $timescale) { + $rows[] = $this->buildSingleRow($timescale, $locationType, $locationId, $timestamp, $metrics, $uploadsDelta); + } + } + + return $rows; + } + + /** + * Build a single time-series row + */ + private function buildSingleRow( + int $timescale, + LocationType $locationType, + int $locationId, + $timestamp, + array $metrics, + int $uploadsDelta + ): array { + $base = [ + 'timescale' => $timescale, + 'location_type' => $locationType->value, + 'location_id' => $locationId, + 'user_id' => 0, + 'uploads' => $uploadsDelta, + 'tags' => $metrics['tags_count'] ?? 0, + 'brands' => $metrics['brands_count'] ?? 0, + 'materials' => $metrics['materials_count'] ?? 0, + 'custom_tags' => $metrics['custom_tags_count'] ?? 0, + 'litter' => $metrics['litter'] ?? 0, + 'xp' => $metrics['xp'] ?? 0, + 'created_at' => now('UTC'), + 'updated_at' => now('UTC'), + ]; + + switch ($timescale) { + case 0: // All-time + return $base + [ + 'year' => 0, + 'month' => 0, + 'week' => 0, + 'bucket_date' => '1970-01-01', + ]; + + case 1: // Daily + return $base + [ + 'year' => $timestamp->year, + 'month' => $timestamp->month, + 'week' => (int)$timestamp->format('W'), + 'bucket_date' => $timestamp->toDateString(), + ]; + + case 2: // Weekly (ISO) + $weekStart = $timestamp->copy()->startOfWeek(); + return $base + [ + 'year' => (int)$timestamp->format('o'), // ISO year + 'month' => $weekStart->month, + 'week' => (int)$timestamp->format('W'), + 'bucket_date' => $weekStart->toDateString(), + ]; + + case 3: // Monthly + return $base + [ + 'year' => $timestamp->year, + 'month' => $timestamp->month, + 'week' => 0, + 'bucket_date' => $timestamp->copy()->startOfMonth()->toDateString(), + ]; + + case 4: // Yearly + return $base + [ + 'year' => $timestamp->year, + 'month' => 0, + 'week' => 0, + 'bucket_date' => $timestamp->copy()->startOfYear()->toDateString(), + ]; + + default: + throw new \InvalidArgumentException("Invalid timescale: $timescale"); + } + } + + /** + * Upsert time-series rows with additive updates + */ + private function upsertTimeSeriesRows(array $rows): void + { + if (empty($rows)) { + return; + } + + DB::table('metrics')->upsert( + $rows, + ['timescale', 'location_type', 'location_id', 'user_id', 'year', 'month', 'week', 'bucket_date'], + [ + 'uploads' => DB::raw('GREATEST(uploads + VALUES(uploads), 0)'), + 'tags' => DB::raw('GREATEST(tags + VALUES(tags), 0)'), + 'brands' => DB::raw('GREATEST(brands + VALUES(brands), 0)'), + 'materials' => DB::raw('GREATEST(materials + VALUES(materials), 0)'), + 'custom_tags' => DB::raw('GREATEST(custom_tags + VALUES(custom_tags), 0)'), + 'litter' => DB::raw('GREATEST(litter + VALUES(litter), 0)'), + 'xp' => DB::raw('GREATEST(xp + VALUES(xp), 0)'), + 'updated_at' => DB::raw('VALUES(updated_at)'), + ] + ); + } + + /** + * Get location hierarchy for a photo + */ + private function getLocationHierarchy(Photo $photo): array + { + $locations = [[LocationType::Global, 0]]; + + if ($photo->country_id) { + $locations[] = [LocationType::Country, $photo->country_id]; + } + if ($photo->state_id) { + $locations[] = [LocationType::State, $photo->state_id]; + } + if ($photo->city_id) { + $locations[] = [LocationType::City, $photo->city_id]; + } + + return $locations; + } + + /** + * Compute fingerprint from normalized tags + */ + private function computeFingerprint(array $tags): string + { + // Sort for consistency + foreach ($tags as &$dimension) { + ksort($dimension); + } + ksort($tags); + + $json = json_encode($tags, JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + return substr(hash('xxh128', $json), 0, 16); + } + + /** + * Calculate deltas between old and new tags + */ + private function calculateTagDeltas(array $oldTags, array $newTags): array + { + $deltas = []; + + foreach (['categories', 'objects', 'materials', 'brands', 'custom_tags'] as $dimension) { + $old = $oldTags[$dimension] ?? []; + $new = $newTags[$dimension] ?? []; + $allKeys = array_unique(array_merge(array_keys($old), array_keys($new))); + + foreach ($allKeys as $key) { + $delta = ($new[$key] ?? 0) - ($old[$key] ?? 0); + if ($delta !== 0) { + $deltas[$dimension][$key] = $delta; + } + } + } + + return $deltas; + } + + /** + * Check if delta is empty + */ + private function isDeltaEmpty(array $deltas): bool + { + foreach ($deltas as $items) { + if (!empty($items)) { + return false; + } + } + return true; + } + + /** + * Get Redis scopes using LocationType enum + */ + private function getRedisScopes(Photo $photo): array + { + $scopes = [LocationType::Global->scopePrefix()]; + + if ($photo->country_id) { + $scopes[] = LocationType::Country->scopePrefix($photo->country_id); + } + if ($photo->state_id) { + $scopes[] = LocationType::State->scopePrefix($photo->state_id); + } + if ($photo->city_id) { + $scopes[] = LocationType::City->scopePrefix($photo->city_id); + } + + return $scopes; + } +} diff --git a/app/Services/Migration/BrandValidator.php b/app/Services/Migration/BrandValidator.php new file mode 100644 index 000000000..ac095342d --- /dev/null +++ b/app/Services/Migration/BrandValidator.php @@ -0,0 +1,489 @@ +apiKey = env('OPEN_AI_KEY'); + Storage::makeDirectory('brand-validations'); + } + + /** + * Validate a single brand with comprehensive data + */ + public function validateBrand(string $brandKey, array $brandData): array + { + // Extract objects - handle both old format (just objects) and new format (complete data) + if (isset($brandData['objects'])) { + $objects = $brandData['objects']; + } else { + // Fallback for simple array format + $objects = $brandData; + $brandData = ['objects' => $objects]; + } + + // Sort by count/percentage descending to prioritize high-frequency relationships + if (is_array(reset($objects))) { + // New format with detailed data + uasort($objects, function($a, $b) { + $aCount = $a['count'] ?? $a; + $bCount = $b['count'] ?? $b; + return $bCount <=> $aCount; + }); + } else { + // Simple format with just counts + arsort($objects); + } + + // Build comprehensive prompt with all available data + $prompt = $this->buildPrompt($brandKey, $brandData); + + // Call OpenAI + $response = Http::retry(3, 500) + ->timeout(30) + ->withHeaders([ + 'Authorization' => 'Bearer ' . $this->apiKey, + 'Content-Type' => 'application/json', + ]) + ->post('https://api.openai.com/v1/chat/completions', [ + 'model' => 'gpt-4o-mini', // Use cheaper model for simple binary classification + 'messages' => [ + ['role' => 'system', 'content' => $this->getSystemPrompt()], + ['role' => 'user', 'content' => $prompt] + ], + 'temperature' => 0, + 'response_format' => ['type' => 'json_object'] + ]); + + if (!$response->successful()) { + throw new \Exception("API failed: " . $response->body()); + } + + $content = data_get($response->json(), 'choices.0.message.content'); + $result = json_decode($content, true); + + if (!$result) { + throw new \Exception("Invalid JSON response from API"); + } + + // Store individual result + Storage::put( + "brand-validations/{$brandKey}.json", + json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + + return $result; + } + + /** + * System prompt with comprehensive context about all possible objects + */ + protected function getSystemPrompt(): string + { + // Load global objects catalog if available + $catalogContext = $this->loadObjectsCatalog(); + + return <<80%), lean toward VALID. +When percentages are low (<20%), be very strict - mark as INVALID unless certain. +PROMPT; + } + + /** + * Load objects catalog for context + */ + protected function loadObjectsCatalog(): string + { + // Find most recent objects catalog + $catalogFiles = glob(storage_path('app/objects-catalog-*.csv')); + if (empty($catalogFiles)) { + return "No objects catalog available. Validate based on general knowledge."; + } + + rsort($catalogFiles); + $catalogPath = $catalogFiles[0]; + + $handle = fopen($catalogPath, 'r'); + $headers = fgetcsv($handle); // Skip header + + $categories = []; + $topObjects = []; + $lineCount = 0; + + while ($row = fgetcsv($handle)) { + if ($lineCount++ > 100) break; // Only include top 100 for context + + $category = $row[0]; + $object = $row[1]; + $count = $row[2]; + + if (!isset($categories[$category])) { + $categories[$category] = []; + } + $categories[$category][] = $object; + + if ($lineCount <= 30) { + $topObjects[] = "- {$category}.{$object} (found {$count} times)"; + } + } + + fclose($handle); + + $context = "The system tracks " . count($categories) . " categories of litter:\n"; + $context .= implode(', ', array_keys($categories)) . "\n\n"; + $context .= "Most common objects in the system:\n"; + $context .= implode("\n", $topObjects) . "\n"; + + return $context; + } + + /** + * Build comprehensive user prompt with all relationship data + */ + protected function buildPrompt(string $brandKey, array $brandData): string + { + // Extract objects array - handle both old and new formats + if (isset($brandData['objects']) && is_array($brandData['objects'])) { + $objects = $brandData['objects']; + } else { + $objects = $brandData; // Fallback for simple array format + } + + $objectList = []; + $totalPhotoCount = $brandData['photo_count'] ?? 0; + $categories = $brandData['categories'] ?? []; + + // Track highest percentage for emphasis + $highestPercentage = 0; + $dominantObjects = []; + + // Build detailed object list + foreach ($objects as $objectKey => $data) { + // Handle both formats: simple count or detailed array + if (is_array($data)) { + $count = $data['count'] ?? 0; + $percentage = $data['percentage'] ?? 0; + } else { + // Simple count format + $count = $data; + $percentage = $totalPhotoCount > 0 ? round(($count / $totalPhotoCount) * 100, 1) : 0; + } + + // Track highest percentage and dominant objects + if ($percentage > $highestPercentage) { + $highestPercentage = $percentage; + } + if ($percentage >= 80) { + $dominantObjects[] = $objectKey; + } + + // Add emphasis markers for high percentages + $emphasis = ''; + if ($percentage >= 90) { + $emphasis = ' ⚠️ DOMINANT'; + } elseif ($percentage >= 70) { + $emphasis = ' ⚠️ HIGH'; + } elseif ($percentage >= 50) { + $emphasis = ' ↑ NOTABLE'; + } + + $objectList[] = sprintf( + "%-35s %4d times (%5.1f%% of brand photos)%s", + $objectKey, + $count, + $percentage, + $emphasis + ); + } + + $objectsFormatted = implode("\n", $objectList); + + // Build category summary if available + $categoryInfo = ''; + if (!empty($categories)) { + $categoryInfo = "\nCategories found with this brand: " . implode(', ', $categories) . "\n"; + } + + // Include photo count context + $contextInfo = ''; + if ($totalPhotoCount > 0) { + $contextInfo = "\nThis brand appears in {$totalPhotoCount} photos total.\n"; + } + + // Add special attention for dominant relationships + $dominantInfo = ''; + if (!empty($dominantObjects)) { + $dominantInfo = "\n⚠️ ATTENTION: The following objects appear in 80%+ of this brand's photos:\n"; + foreach ($dominantObjects as $obj) { + $dominantInfo .= " - {$obj}\n"; + } + $dominantInfo .= "This is a VERY STRONG indicator these are the brand's actual products!\n"; + } + + return << now()->toIso8601String(), + 'total_brands' => count($results), + 'statistics' => $this->calculateStatistics($results), + 'results' => $results + ]; + + Storage::put( + 'brand-validations/summary.json', + json_encode($summary, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + } + + /** + * Calculate summary statistics + */ + protected function calculateStatistics(array $results): array + { + $stats = [ + 'total_valid' => 0, + 'total_invalid' => 0, + 'by_type' => [], + ]; + + foreach ($results as $result) { + $stats['total_valid'] += count($result['valid'] ?? []); + $stats['total_invalid'] += count($result['invalid'] ?? []); + + $type = $result['brand_type'] ?? 'unknown'; + if (!isset($stats['by_type'][$type])) { + $stats['by_type'][$type] = 0; + } + $stats['by_type'][$type]++; + } + + $stats['approval_rate'] = $stats['total_valid'] > 0 + ? round($stats['total_valid'] / ($stats['total_valid'] + $stats['total_invalid']) * 100, 1) + : 0; + + return $stats; + } + + /** + * Generate BrandsConfig.php from validation results + */ + public function generateConfig(string $outputPath): void + { + // Load all validation results + $summaryPath = storage_path('app/brand-validations/summary.json'); + if (!file_exists($summaryPath)) { + throw new \Exception("No validation results found. Run validation first."); + } + + $summary = json_decode(file_get_contents($summaryPath), true); + $results = $summary['results'] ?? []; + + $php = " $result) { + if (empty($result['valid'])) continue; + + $type = $result['brand_type'] ?? 'other'; + $byType[$type][$brandKey] = $result['valid']; + } + + // Generate sections by type + foreach (['retailer', 'beverage', 'food', 'tobacco', 'apparel', 'other'] as $type) { + if (empty($byType[$type])) continue; + + $php .= "\n // " . str_repeat('=', 50) . "\n"; + $php .= " // " . strtoupper($type) . " BRANDS\n"; + $php .= " // " . str_repeat('=', 50) . "\n\n"; + + ksort($byType[$type]); + foreach ($byType[$type] as $brandKey => $validObjects) { + $php .= $this->formatBrandEntry($brandKey, $validObjects); + } + } + + $php .= " ];\n}\n"; + + file_put_contents($outputPath, $php); + } + + /** + * Format a single brand entry for the config file + */ + protected function formatBrandEntry(string $brandKey, array $validObjects): string + { + // Group objects by category + $byCategory = []; + foreach ($validObjects as $objectFull) { + if (strpos($objectFull, '.') === false) continue; + + [$category, $object] = explode('.', $objectFull, 2); + $byCategory[$category][] = $object; + } + + if (empty($byCategory)) { + return ''; + } + + $php = " '{$brandKey}' => [\n"; + + ksort($byCategory); + foreach ($byCategory as $category => $objects) { + sort($objects); + $objects = array_unique($objects); + + // Format objects list + if (count($objects) <= 5) { + // Single line for short lists + $php .= " '{$category}' => ['" . implode("', '", $objects) . "'],\n"; + } else { + // Multi-line for long lists + $php .= " '{$category}' => [\n"; + foreach ($objects as $object) { + $php .= " '{$object}',\n"; + } + $php .= " ],\n"; + } + } + + $php .= " ],\n\n"; + + return $php; + } +} diff --git a/app/Services/Points/Aggregators/BrandAggregator.php b/app/Services/Points/Aggregators/BrandAggregator.php new file mode 100644 index 000000000..95f0e7a02 --- /dev/null +++ b/app/Services/Points/Aggregators/BrandAggregator.php @@ -0,0 +1,53 @@ +isEmpty()) { + return []; + } + + // FIXED: Added explicit NULL checks and better debugging + $results = DB::table('photo_tags') + ->join('photo_tag_extra_tags', 'photo_tags.id', '=', 'photo_tag_extra_tags.photo_tag_id') + ->join('brandslist', 'photo_tag_extra_tags.tag_type_id', '=', 'brandslist.id') + ->whereIn('photo_tags.photo_id', $photoIds) + ->where('photo_tag_extra_tags.tag_type', 'brand') + ->whereNotNull('photo_tag_extra_tags.tag_type_id') // Explicit NULL check + ->groupBy('brandslist.id', 'brandslist.key') + ->selectRaw(' + brandslist.key, + SUM(photo_tag_extra_tags.quantity) as qty + ') + ->orderByDesc('qty') + ->limit(30) + ->get(); + + if ($results->isEmpty()) { + $extraTagsCount = DB::table('photo_tags') + ->join('photo_tag_extra_tags', 'photo_tags.id', '=', 'photo_tag_extra_tags.photo_tag_id') + ->whereIn('photo_tags.photo_id', $photoIds) + ->where('photo_tag_extra_tags.tag_type', 'brand') + ->count(); + + Log::debug("BrandAggregator: {$extraTagsCount} brand extra tags found but none matched brandslist table"); + } + + return $results->map(function($row) { + return (object)[ + 'key' => $row->key, + 'qty' => (int)$row->qty, + ]; + })->toArray(); + } +} diff --git a/app/Services/Points/Aggregators/CategoryAggregator.php b/app/Services/Points/Aggregators/CategoryAggregator.php new file mode 100644 index 000000000..3f7f55ac7 --- /dev/null +++ b/app/Services/Points/Aggregators/CategoryAggregator.php @@ -0,0 +1,69 @@ +isEmpty()) { + return []; + } + + // Get base quantities per category + // FIXED: Added whereNotNull for explicit NULL handling + $baseQuantities = DB::table('photo_tags') + ->join('categories', 'photo_tags.category_id', '=', 'categories.id') + ->whereIn('photo_tags.photo_id', $photoIds) + ->whereNotNull('photo_tags.category_id') // Explicit NULL check + ->groupBy('categories.id', 'categories.key') + ->selectRaw(' + categories.id, + categories.key, + SUM(photo_tags.quantity) as base_qty + ') + ->get() + ->keyBy('id'); + + if ($baseQuantities->isEmpty()) { + Log::debug("CategoryAggregator: No categories found for " . $photoIds->count() . " photos"); + return []; + } + + // Get material quantities per category + $materialQuantities = DB::table('photo_tags') + ->join('categories', 'photo_tags.category_id', '=', 'categories.id') + ->join('photo_tag_extra_tags', function($join) { + $join->on('photo_tags.id', '=', 'photo_tag_extra_tags.photo_tag_id') + ->where('photo_tag_extra_tags.tag_type', '=', 'material'); + }) + ->whereIn('photo_tags.photo_id', $photoIds) + ->whereNotNull('photo_tags.category_id') // Explicit NULL check + ->groupBy('categories.id') + ->selectRaw(' + categories.id, + SUM(photo_tag_extra_tags.quantity) as material_qty + ') + ->pluck('material_qty', 'id'); + + // Combine base + materials + $results = $baseQuantities->map(function($category) use ($materialQuantities) { + $baseQty = (int)$category->base_qty; + $materialQty = (int)($materialQuantities[$category->id] ?? 0); + + return (object)[ + 'key' => $category->key, + 'qty' => $baseQty + $materialQty, + ]; + }); + + return $results->sortByDesc('qty')->values()->toArray(); + } +} diff --git a/app/Services/Points/Aggregators/ContributorAggregator.php b/app/Services/Points/Aggregators/ContributorAggregator.php new file mode 100644 index 000000000..8ed2a2427 --- /dev/null +++ b/app/Services/Points/Aggregators/ContributorAggregator.php @@ -0,0 +1,47 @@ +isEmpty()) { + return []; + } + + $results = DB::table('photos') + ->join('users', 'photos.user_id', '=', 'users.id') + ->whereIn('photos.id', $photoIds) + ->where('users.show_username_maps', true) + ->groupBy('users.id', 'users.username', 'users.name') + ->selectRaw(' + users.username, + users.name, + COUNT(DISTINCT photos.id) as photo_count, + COALESCE(SUM(photos.total_litter), 0) as total_litter, + MIN(photos.datetime) as first_contribution, + MAX(photos.datetime) as last_contribution + ') + ->orderByDesc('total_litter') + ->limit(10) + ->get(); + + return $results->map(function($user) { + return (object)[ + 'username' => $user->username, + 'name' => $user->name, + 'photo_count' => (int)$user->photo_count, + 'total_litter' => (int)$user->total_litter, + 'first_contribution' => $user->first_contribution, + 'last_contribution' => $user->last_contribution, + ]; + })->toArray(); + } +} diff --git a/app/Services/Points/Aggregators/CustomTagAggregator.php b/app/Services/Points/Aggregators/CustomTagAggregator.php new file mode 100644 index 000000000..89040cae5 --- /dev/null +++ b/app/Services/Points/Aggregators/CustomTagAggregator.php @@ -0,0 +1,47 @@ +isEmpty()) { + return []; + } + + // Check if custom_tags_new table exists + if (!Schema::hasTable('custom_tags_new')) { + return []; + } + + $results = DB::table('photo_tags') + ->join('photo_tag_extra_tags', 'photo_tags.id', '=', 'photo_tag_extra_tags.photo_tag_id') + ->join('custom_tags_new', 'photo_tag_extra_tags.tag_type_id', '=', 'custom_tags_new.id') + ->whereIn('photo_tags.photo_id', $photoIds) + ->where('photo_tag_extra_tags.tag_type', 'custom_tag') + ->where('custom_tags_new.approved', true) + ->groupBy('custom_tags_new.id', 'custom_tags_new.key') + ->selectRaw(' + custom_tags_new.key, + SUM(photo_tag_extra_tags.quantity) as qty + ') + ->orderByDesc('qty') + ->limit(20) + ->get(); + + return $results->map(function($row) { + return (object)[ + 'key' => $row->key, + 'qty' => (int)$row->qty, + ]; + })->toArray(); + } +} diff --git a/app/Services/Points/Aggregators/MaterialAggregator.php b/app/Services/Points/Aggregators/MaterialAggregator.php new file mode 100644 index 000000000..c83aacc33 --- /dev/null +++ b/app/Services/Points/Aggregators/MaterialAggregator.php @@ -0,0 +1,40 @@ +isEmpty()) { + return []; + } + + $results = DB::table('photo_tags') + ->join('photo_tag_extra_tags', 'photo_tags.id', '=', 'photo_tag_extra_tags.photo_tag_id') + ->join('materials', 'photo_tag_extra_tags.tag_type_id', '=', 'materials.id') + ->whereIn('photo_tags.photo_id', $photoIds) + ->where('photo_tag_extra_tags.tag_type', 'material') + ->groupBy('materials.id', 'materials.key') + ->selectRaw(' + materials.key, + SUM(photo_tag_extra_tags.quantity) as qty + ') + ->orderByDesc('qty') + ->limit(20) + ->get(); + + return $results->map(function($row) { + return (object)[ + 'key' => $row->key, + 'qty' => (int)$row->qty, + ]; + })->toArray(); + } +} diff --git a/app/Services/Points/Aggregators/MetadataAggregator.php b/app/Services/Points/Aggregators/MetadataAggregator.php new file mode 100644 index 000000000..0279f8604 --- /dev/null +++ b/app/Services/Points/Aggregators/MetadataAggregator.php @@ -0,0 +1,83 @@ +isEmpty()) { + return [ + 'photos' => 0, + 'users' => 0, + 'teams' => 0, + 'total_objects' => 0, + 'total_tags' => 0, + 'picked_up' => 0, + 'not_picked_up' => 0, + ]; + } + + // Debug: Let's see what photo IDs we're getting + \Log::info('MetadataAggregator photoIds:', $photoIds->toArray()); + + // Get photo-level stats + $photoStats = DB::table('photos') + ->whereIn('id', $photoIds) + ->selectRaw(' + COUNT(*) as photos, + COUNT(DISTINCT user_id) as users, + COUNT(DISTINCT team_id) as teams, + SUM(CASE WHEN remaining = 0 THEN 1 ELSE 0 END) as picked_up, + SUM(CASE WHEN remaining = 1 THEN 1 ELSE 0 END) as not_picked_up + ') + ->first(); + + // Debug: Check if we have photo_tags for these photos + $photoTagCount = DB::table('photo_tags') + ->whereIn('photo_id', $photoIds) + ->count(); + \Log::info('Found photo_tags:', ['count' => $photoTagCount]); + + // Calculate total_objects from photo_tags quantity sum + $totalObjects = DB::table('photo_tags') + ->whereIn('photo_id', $photoIds) + ->sum('quantity'); + + // Debug log + \Log::info('Total objects sum:', ['total' => $totalObjects]); + + // If null, convert to 0 + $totalObjects = $totalObjects ?? 0; + + // Calculate total_tags (base quantities + extra quantities) + $totalTags = $totalObjects; // Start with base + + // Add extra tag quantities + $extraQuantities = DB::table('photo_tag_extra_tags') + ->whereIn('photo_tag_id', function($query) use ($photoIds) { + $query->select('id') + ->from('photo_tags') + ->whereIn('photo_id', $photoIds); + }) + ->sum('quantity') ?? 0; + + $totalTags += $extraQuantities; + + return [ + 'photos' => (int)($photoStats->photos ?? 0), + 'users' => (int)($photoStats->users ?? 0), + 'teams' => (int)($photoStats->teams ?? 0), + 'total_objects' => (int)$totalObjects, + 'total_tags' => (int)$totalTags, + 'picked_up' => (int)($photoStats->picked_up ?? 0), + 'not_picked_up' => (int)($photoStats->not_picked_up ?? 0), + ]; + } +} diff --git a/app/Services/Points/Aggregators/ObjectAggregator.php b/app/Services/Points/Aggregators/ObjectAggregator.php new file mode 100644 index 000000000..049d81bfc --- /dev/null +++ b/app/Services/Points/Aggregators/ObjectAggregator.php @@ -0,0 +1,56 @@ +isEmpty()) { + return []; + } + + // Check if there are any tags at all for debugging + $totalTags = DB::table('photo_tags') + ->whereIn('photo_id', $photoIds) + ->count(); + + if ($totalTags === 0) { + Log::debug("ObjectAggregator: No photo_tags found for " . $photoIds->count() . " photos"); + return []; + } + + // FIXED: Added whereNotNull to explicitly exclude NULL litter_object_id + // This makes the query intent clearer and can use indexes better + $results = DB::table('photo_tags') + ->join('litter_objects', 'photo_tags.litter_object_id', '=', 'litter_objects.id') + ->whereIn('photo_tags.photo_id', $photoIds) + ->whereNotNull('photo_tags.litter_object_id') // Explicit NULL check + ->groupBy('litter_objects.id', 'litter_objects.key') + ->selectRaw(' + litter_objects.key, + SUM(photo_tags.quantity) as qty + ') + ->orderByDesc('qty') + ->limit(50) + ->get(); + + if ($results->isEmpty()) { + Log::debug("ObjectAggregator: {$totalTags} tags found but no objects matched. Check if litter_object_id values exist in litter_objects table."); + } + + return $results->map(function($row) { + return (object)[ + 'key' => $row->key, + 'qty' => (int)$row->qty, + ]; + })->toArray(); + } +} diff --git a/app/Services/Points/Aggregators/TimeSeriesAggregator.php b/app/Services/Points/Aggregators/TimeSeriesAggregator.php new file mode 100644 index 000000000..e844328d6 --- /dev/null +++ b/app/Services/Points/Aggregators/TimeSeriesAggregator.php @@ -0,0 +1,71 @@ +isEmpty()) { + return []; + } + + $groupBy = $this->determineGroupBy($params); + + $results = DB::table('photos') + ->whereIn('id', $photoIds) + ->selectRaw(" + {$groupBy} as bucket, + COUNT(*) as photos, + COALESCE(SUM(total_litter), 0) as objects + ") + ->groupBy('bucket') + ->orderBy('bucket') + ->get(); + + return $results->map(function($row) { + return (object)[ + 'bucket' => $row->bucket, + 'photos' => (int)$row->photos, + 'objects' => (int)$row->objects, + ]; + })->toArray(); + } + + /** + * Determine appropriate time grouping based on date range + */ + private function determineGroupBy(array $params): string + { + // If date range is provided, determine grouping based on range size + if (!empty($params['from']) && !empty($params['to'])) { + $from = Carbon::parse($params['from']); + $to = Carbon::parse($params['to']); + $days = $from->diffInDays($to); + + if ($days <= 7) { + // Daily for week or less + return 'DATE(datetime)'; + } elseif ($days <= 90) { + // Still daily for up to 3 months + return 'DATE(datetime)'; + } elseif ($days <= 365) { + // Weekly for up to a year + return "DATE_FORMAT(datetime, '%Y-%u')"; + } else { + // Monthly for larger ranges + return "DATE_FORMAT(datetime, '%Y-%m-01')"; + } + } + + // Default to monthly + return "DATE_FORMAT(datetime, '%Y-%m-01')"; + } +} diff --git a/app/Services/Points/Builders/CacheKeyBuilder.php b/app/Services/Points/Builders/CacheKeyBuilder.php new file mode 100644 index 000000000..a4573f6ea --- /dev/null +++ b/app/Services/Points/Builders/CacheKeyBuilder.php @@ -0,0 +1,40 @@ + 300, // 5 minutes + 'day' => 1800, // 30 minutes + 'week' => 3600, // 1 hour + 'month' => 7200, // 2 hours + 'year' => 21600, // 6 hours + ]; + + /** + * Build cache key from parameters + */ + public function build(array $params): string + { + ksort($params); + return 'points_stats_' . md5(json_encode($params)); + } + + /** + * Get cache TTL based on zoom level + */ + public function getTTL(array $params): int + { + $zoom = $params['zoom'] ?? 15; + + $timeGroup = match(true) { + $zoom >= 19 => 'hour', + $zoom >= 17 => 'day', + $zoom >= 15 => 'week', + default => 'month', + }; + + return self::CACHE_TTL[$timeGroup] ?? 1800; + } +} diff --git a/app/Services/Points/Builders/QueryBuilder.php b/app/Services/Points/Builders/QueryBuilder.php new file mode 100644 index 000000000..3f556c9ef --- /dev/null +++ b/app/Services/Points/Builders/QueryBuilder.php @@ -0,0 +1,122 @@ +where('verified', '>=', 2); + + $this->applyDateFilters($query, $params); + $this->applyUserFilter($query, $params); + $this->applyLocationFilters($query, $params); + $this->applySpatialFilter($query, $params); + $this->applyTagFilters($query, $params); + + return $query; + } + + /** + * Apply date filters + */ + private function applyDateFilters($query, array $params): void + { + if (!empty($params['year'])) { + $query->whereYear('datetime', $params['year']); + } elseif (!empty($params['from']) && !empty($params['to'])) { + $query->whereBetween('datetime', [$params['from'], $params['to']]); + } + } + + /** + * Apply user filter with visibility check + */ + private function applyUserFilter($query, array $params): void + { + if (!empty($params['username'])) { + $query->whereExists(function($q) use ($params) { + $q->select(DB::raw(1)) + ->from('users') + ->whereColumn('users.id', 'photos.user_id') + ->where('username', $params['username']) + ->where('show_username_maps', true); + }); + } + } + + /** + * Apply location filters + */ + private function applyLocationFilters($query, array $params): void + { + foreach (['country_id', 'state_id', 'city_id'] as $field) { + if (!empty($params[$field])) { + $query->where($field, $params[$field]); + } + } + } + + /** + * Apply spatial bounding box filter + */ + private function applySpatialFilter($query, array $params): void + { + if (!empty($params['bbox'])) { + $bbox = $params['bbox']; + if (is_array($bbox) && isset($bbox['left'], $bbox['bottom'], $bbox['right'], $bbox['top'])) { + $query->whereBetween('lat', [$bbox['bottom'], $bbox['top']]) + ->whereBetween('lon', [$bbox['left'], $bbox['right']]); + } + } + } + + /** + * Apply tag filters (categories and objects) + * FIXED: Use if-elseif to avoid applying multiple conflicting whereExists clauses + */ + private function applyTagFilters($query, array $params): void + { + $hasCategories = !empty($params['categories']); + $hasObjects = !empty($params['litter_objects']); + + // When both filters are present, they must match the same tag + if ($hasCategories && $hasObjects) { + $query->whereExists(function($q) use ($params) { + $q->select(DB::raw(1)) + ->from('photo_tags') + ->join('categories', 'photo_tags.category_id', '=', 'categories.id') + ->join('litter_objects', 'photo_tags.litter_object_id', '=', 'litter_objects.id') + ->whereColumn('photo_tags.photo_id', 'photos.id') + ->whereIn('categories.key', $params['categories']) + ->whereIn('litter_objects.key', $params['litter_objects']); + }); + } + // Only category filter + elseif ($hasCategories) { + $query->whereExists(function($q) use ($params) { + $q->select(DB::raw(1)) + ->from('photo_tags') + ->join('categories', 'photo_tags.category_id', '=', 'categories.id') + ->whereColumn('photo_tags.photo_id', 'photos.id') + ->whereIn('categories.key', $params['categories']); + }); + } + // Only litter object filter + elseif ($hasObjects) { + $query->whereExists(function($q) use ($params) { + $q->select(DB::raw(1)) + ->from('photo_tags') + ->join('litter_objects', 'photo_tags.litter_object_id', '=', 'litter_objects.id') + ->whereColumn('photo_tags.photo_id', 'photos.id') + ->whereIn('litter_objects.key', $params['litter_objects']); + }); + } + } +} diff --git a/app/Services/Points/PointsStatsService.php b/app/Services/Points/PointsStatsService.php new file mode 100644 index 000000000..a8f2cd902 --- /dev/null +++ b/app/Services/Points/PointsStatsService.php @@ -0,0 +1,93 @@ +queryBuilder->build($params); + + // Check if we have more than MAX_RESULTS + $totalCount = (clone $baseQuery)->count(); + + // Limit results for performance + $photoIds = (clone $baseQuery)->limit(self::MAX_RESULTS)->pluck('id'); + + // If no photos found, return empty stats + if ($photoIds->isEmpty()) { + return $this->emptyStats(); + } + + // Run all aggregations + return [ + 'counts' => $this->metadataAggregator->aggregate($photoIds), + 'by_category' => $this->categoryAggregator->aggregate($photoIds), + 'by_object' => $this->objectAggregator->aggregate($photoIds), + 'brands' => $this->brandAggregator->aggregate($photoIds), + 'materials' => $this->materialAggregator->aggregate($photoIds), + 'custom_tags' => $this->customTagAggregator->aggregate($photoIds), + 'time_histogram' => $this->timeSeriesAggregator->aggregate($photoIds, $params), + 'meta' => [ + 'truncated' => $totalCount > self::MAX_RESULTS, + 'max_results' => self::MAX_RESULTS, + ], + ]; + } + + /** + * Return empty stats structure + */ + private function emptyStats(): array + { + return [ + 'counts' => [ + 'photos' => 0, + 'users' => 0, + 'teams' => 0, + 'total_objects' => 0, + 'total_tags' => 0, + 'picked_up' => 0, + 'not_picked_up' => 0, + ], + 'by_category' => [], + 'by_object' => [], + 'brands' => [], + 'materials' => [], + 'custom_tags' => [], + 'time_histogram' => [], + 'meta' => [ + 'truncated' => false, + 'max_results' => self::MAX_RESULTS, + ], + ]; + } +} diff --git a/app/Services/Redis/RedisKeys.php b/app/Services/Redis/RedisKeys.php new file mode 100644 index 000000000..b5bddfaac --- /dev/null +++ b/app/Services/Redis/RedisKeys.php @@ -0,0 +1,148 @@ +country_id ? self::country($photo->country_id) : null, + $photo->state_id ? self::state($photo->state_id) : null, + $photo->city_id ? self::city($photo->city_id) : null, + ]); + } +} diff --git a/app/Services/Redis/RedisMetricsCollector.php b/app/Services/Redis/RedisMetricsCollector.php new file mode 100644 index 000000000..d33de0396 --- /dev/null +++ b/app/Services/Redis/RedisMetricsCollector.php @@ -0,0 +1,285 @@ +user_id; + + Redis::pipeline(function($pipe) use ($scopes, $userId, $metrics, $operation, $photo) { + foreach ($scopes as $scope) { + if ($operation === 'create') { + // Increment basic stats + $pipe->hIncrBy(RedisKeys::stats($scope), 'photos', 1); + $pipe->hIncrBy(RedisKeys::stats($scope), 'litter', $metrics['litter']); + $pipe->hIncrBy(RedisKeys::stats($scope), 'xp', $metrics['xp']); + + // Track unique contributors (append-only) - FIX: pfAdd needs array + $pipe->pfAdd(RedisKeys::hll($scope), [(string)$userId]); + + // Contributor ranking + $pipe->zIncrBy(RedisKeys::contributorRanking($scope), 1, (string)$userId); + + } elseif ($operation === 'update') { + // Apply deltas only + if (isset($metrics['litter']) && $metrics['litter'] !== 0) { + $pipe->hIncrBy(RedisKeys::stats($scope), 'litter', $metrics['litter']); + } + if (isset($metrics['xp']) && $metrics['xp'] !== 0) { + $pipe->hIncrBy(RedisKeys::stats($scope), 'xp', $metrics['xp']); + } + + } elseif ($operation === 'delete') { + // Decrement stats + $pipe->hIncrBy(RedisKeys::stats($scope), 'photos', -1); + $pipe->hIncrBy(RedisKeys::stats($scope), 'litter', -abs($metrics['litter'])); + $pipe->hIncrBy(RedisKeys::stats($scope), 'xp', -abs($metrics['xp'])); + + // Decrement contributor ranking (HLL cannot be decremented) + $pipe->zIncrBy(RedisKeys::contributorRanking($scope), -1, (string)$userId); + } + + // Update tag counts and rankings + self::updateTags($pipe, $scope, $metrics['tags'] ?? [], $operation); + } + + // User-specific updates + self::updateUserMetrics($pipe, $userId, $metrics, $operation, $photo); + }); + + } catch (\Exception $e) { + Log::error('Redis update failed', [ + 'photo_id' => $photo->id, + 'operation' => $operation, + 'error' => $e->getMessage() + ]); + } + } + + /** + * Update tag counts and rankings + */ + private static function updateTags($pipe, string $scope, array $tags, string $operation): void + { + foreach (['categories', 'objects', 'materials', 'brands', 'custom_tags'] as $dimension) { + $items = $tags[$dimension] ?? []; + if (empty($items)) continue; + + $hashKey = match($dimension) { + 'categories' => RedisKeys::categories($scope), + 'objects' => RedisKeys::objects($scope), + 'materials' => RedisKeys::materials($scope), + 'brands' => RedisKeys::brands($scope), + 'custom_tags' => RedisKeys::customTags($scope), + }; + + $rankKey = RedisKeys::ranking($scope, $dimension); + + foreach ($items as $id => $count) { + if ($operation === 'delete') { + $count = -abs($count); + } + + $pipe->hIncrBy($hashKey, (string)$id, $count); + $pipe->zIncrBy($rankKey, $count, (string)$id); + } + } + } + + /** + * Update user-specific metrics + */ + private static function updateUserMetrics($pipe, int $userId, array $metrics, string $operation, Photo $photo): void + { + $userScope = RedisKeys::user($userId); + + if ($operation === 'create') { + $pipe->hIncrBy(RedisKeys::stats($userScope), 'uploads', 1); + $pipe->hIncrBy(RedisKeys::stats($userScope), 'xp', $metrics['xp']); + $pipe->hIncrBy(RedisKeys::stats($userScope), 'litter', $metrics['litter']); + + // Update streak bitmap + $dayIndex = self::getDayIndex($photo->created_at); + $pipe->setBit(RedisKeys::userBitmap($userId), $dayIndex, true); + + } elseif ($operation === 'update') { + // Only update if values changed + if (isset($metrics['xp']) && $metrics['xp'] !== 0) { + $pipe->hIncrBy(RedisKeys::stats($userScope), 'xp', $metrics['xp']); + } + if (isset($metrics['litter']) && $metrics['litter'] !== 0) { + $pipe->hIncrBy(RedisKeys::stats($userScope), 'litter', $metrics['litter']); + } + + } elseif ($operation === 'delete') { + $pipe->hIncrBy(RedisKeys::stats($userScope), 'uploads', -1); + $pipe->hIncrBy(RedisKeys::stats($userScope), 'xp', -abs($metrics['xp'])); + $pipe->hIncrBy(RedisKeys::stats($userScope), 'litter', -abs($metrics['litter'])); + } + + // Update user tags + foreach ($metrics['tags'] ?? [] as $dimension => $items) { + foreach ($items as $id => $count) { + if ($operation === 'delete') { + $count = -abs($count); + } + + $tagKey = match($dimension) { + 'categories' => "cat:$id", + 'objects' => "obj:$id", + 'materials' => "mat:$id", + 'brands' => "brand:$id", + 'custom_tags' => "custom:$id", + default => null, + }; + + if ($tagKey) { + $pipe->hIncrBy("{$userScope}:tags", $tagKey, $count); + } + } + } + } + + /** + * Calculate day index for bitmap (consistent epoch) + */ + private static function getDayIndex($timestamp): int + { + $epoch = new \DateTime('2020-01-01', new \DateTimeZone('UTC')); + $current = new \DateTime($timestamp->format('Y-m-d'), new \DateTimeZone('UTC')); + return $epoch->diff($current)->days; + } + + /** + * Get user metrics summary + */ + public static function getUserMetrics(int $userId): array + { + $userScope = RedisKeys::user($userId); + + try { + $results = Redis::pipeline(function($pipe) use ($userScope) { + $pipe->hGetAll(RedisKeys::stats($userScope)); + $pipe->hGetAll("{$userScope}:tags"); + }); + } catch (\Exception $e) { + Log::error('Failed to get user metrics', [ + 'user_id' => $userId, + 'error' => $e->getMessage() + ]); + return self::emptyUserMetrics(); + } + + $stats = $results[0] ?? []; + $tags = $results[1] ?? []; + + // Parse tags by dimension + $dimensions = [ + 'categories' => [], + 'objects' => [], + 'materials' => [], + 'brands' => [], + 'custom_tags' => [] + ]; + + foreach ($tags as $key => $count) { + [$prefix, $id] = explode(':', $key, 2); + $count = (int)$count; + + switch ($prefix) { + case 'cat': + $dimensions['categories'][$id] = $count; + break; + case 'obj': + $dimensions['objects'][$id] = $count; + break; + case 'mat': + $dimensions['materials'][$id] = $count; + break; + case 'brand': + $dimensions['brands'][$id] = $count; + break; + case 'custom': + $dimensions['custom_tags'][$id] = $count; + break; + } + } + + return [ + 'uploads' => (int)($stats['uploads'] ?? 0), + 'xp' => (int)($stats['xp'] ?? 0), + 'litter' => (int)($stats['litter'] ?? 0), + 'streak' => self::calculateStreak($userId), + 'categories' => $dimensions['categories'], + 'objects' => $dimensions['objects'], + 'materials' => $dimensions['materials'], + 'brands' => $dimensions['brands'], + 'custom_tags' => $dimensions['custom_tags'], + ]; + } + + /** + * Calculate user streak from bitmap + */ + private static function calculateStreak(int $userId): int + { + $bitmapKey = RedisKeys::userBitmap($userId); + $today = self::getDayIndex(now()); + $streak = 0; + + // Check backwards from today + for ($i = 0; $i < 365; $i++) { + $dayIndex = $today - $i; + if ($dayIndex < 0) break; + + if (!Redis::getBit($bitmapKey, $dayIndex)) { + // Allow 1 day gap for today + if ($i === 0) continue; + break; + } + $streak++; + } + + return $streak; + } + + /** + * Empty user metrics structure + */ + private static function emptyUserMetrics(): array + { + return [ + 'uploads' => 0, + 'xp' => 0, + 'litter' => 0, + 'streak' => 0, + 'categories' => [], + 'objects' => [], + 'materials' => [], + 'brands' => [], + 'custom_tags' => [], + ]; + } +} diff --git a/app/Services/Tags/ClassifyTagsService.php b/app/Services/Tags/ClassifyTagsService.php new file mode 100644 index 000000000..970a41335 --- /dev/null +++ b/app/Services/Tags/ClassifyTagsService.php @@ -0,0 +1,354 @@ +preloadCaches(); + } + } + + protected function preloadCaches(): void + { + $this->categories = Category::pluck('id', 'key')->all(); + $this->objects = LitterObject::pluck('id', 'key')->all(); + $this->materials = Materials::pluck('id', 'key')->all(); + $this->brands = BrandList::pluck('id', 'key')->all(); + $this->customTags = CustomTagNew::pluck('id', 'key')->all(); + } + + public function materialMap(): array + { + return $this->materials; // [key => id] pre‑hydrated in constructor + } + + /** + * Normalize a tag string (lowercase, trim). + */ + protected function normalize(string $value): string + { + return strtolower(trim($value)); + } + + /** + * Main classify entry point. Handles old-tag => new-tag transformation if needed, + * then runs the normal classification logic. + */ + public function classify(string $tag): array + { + // Check if it's a deprecated tag + $deprecatedMapping = self::normalizeDeprecatedTag($tag); + + if ($deprecatedMapping !== null) { + $objectKey = $deprecatedMapping['object'] ?? $tag; + + // Run normal classification on the new key + $result = $this->classifyNewKey($objectKey); + + if (!empty($deprecatedMapping['materials'])) { + $result['materials'] = $deprecatedMapping['materials']; + } + if (!empty($deprecatedMapping['brands'])) { + $result['brands'] = $deprecatedMapping['brands']; + } + if (!empty($deprecatedMapping['states'])) { + $result['states'] = $deprecatedMapping['states']; + } + if (!empty($deprecatedMapping['sizes'])) { + $result['sizes'] = $deprecatedMapping['sizes']; + } + + return $result; + } + + $key = $this->normalize($tag); + + return $this->classifyNewKey($key); + } + + /** + * classifyNewKey() – the existing classification logic (brands, objects, materials, categories, custom). + * We keep this separate so we can reuse it after we transform an old tag to a new key. + */ + public function classifyNewKey(string $key): array + { + if (isset($this->brands[$key])) { + return ['type' => Dimension::BRAND->value, 'id' => $this->brands[$key], 'key' => $key]; + } + + if (isset($this->objects[$key])) { + return ['type' => Dimension::LITTER_OBJECT->value, 'id' => $this->objects[$key], 'key' => $key]; + } + + if (isset($this->materials[$key])) { + return ['type' => Dimension::MATERIAL->value, 'id' => $this->materials[$key], 'key' => $key]; + } + + if (isset($this->categories[$key])) { + return ['type' => Dimension::CATEGORY->value, 'id' => $this->categories[$key], 'key' => $key]; + } + + if (isset($this->customTags[$key])) { + return ['type' => Dimension::CUSTOM_TAG->value, 'id' => $this->customTags[$key], 'key' => $key]; + } + + /** ----------------------------------------------------------------- + * Fallback: treat unknown slug as a new *object* (or custom tag) + * ------------------------------------------------------------------ + * 1) create a `litter_objects` row if it does not exist + * 2) put the id into the in-memory cache so the next lookup is fast + */ + $created = LitterObject::firstOrCreate( + ['key' => $key], + ['crowdsourced' => true] // or other default columns + ); + + $this->objects[$key] = $created->id; // update cache for current request + + return ['type' => 'object', 'id' => $created->id, 'key' => $key]; + } + + // We only need to map the keys that have changed. + public static function normalizeDeprecatedTag(string $key): ?array + { + return match ($key) { + // Only map keys that have CHANGED from old to new + // If the key exists in TagsConfig with the same name, don't map it + + // Alcohol - most stay the same except: + 'beerBottle' => ['object' => 'beer_bottle', 'materials' => ['glass']], + 'beerCan' => ['object' => 'beer_can', 'materials' => ['aluminium']], + 'spiritBottle' => ['object' => 'spirits_bottle', 'materials' => ['glass']], + 'wineBottle' => ['object' => 'wine_bottle', 'materials' => ['glass']], + 'paperCardAlcoholPackaging' => ['object' => 'packaging', 'materials' => ['cardboard', 'paper']], + 'plasticAlcoholPackaging' => ['object' => 'packaging', 'materials' => ['plastic']], + 'pint' => ['object' => 'pint_glass', 'materials' => ['glass']], + 'alcohol_plastic_cups' => ['object' => 'cup', 'materials' => ['plastic']], + 'alcoholOther' => ['object' => 'other'], + + // Coffee + 'coffeeCups' => ['object' => 'cup', 'materials' => ['paper']], + 'coffeeLids' => ['object' => 'lid', 'materials' => ['plastic']], + 'coffeeOther' => ['object' => 'other'], + + // Food + 'sweetWrappers' => ['object' => 'wrapper', 'materials' => ['plastic']], + 'paperFoodPackaging' => ['object' => 'packaging', 'materials' => ['paper']], + 'plasticFoodPackaging' => ['object' => 'packaging', 'materials' => ['plastic']], + 'plasticCutlery' => ['object' => 'cutlery', 'materials' => ['plastic']], + 'styrofoam_plate' => ['object' => 'plate', 'materials' => ['styrofoam']], + 'sauce_packet' => ['object' => 'packet', 'materials' => ['plastic']], + 'glass_jar_lid' => ['object' => 'lid', 'materials' => ['glass']], + 'aluminium_foil' => ['object' => 'tinfoil', 'materials' => ['aluminium']], + 'chewing_gum' => ['object' => 'gum', 'materials' => ['rubber']], + 'foodOther' => ['object' => 'other'], + + // Smoking + 'butts' => ['object' => 'butts', 'materials' => ['plastic', 'paper']], + 'cigaretteBox' => ['object' => 'cigarette_box', 'materials' => ['cardboard']], + 'skins' => ['object' => 'rollingPapers', 'materials' => ['paper']], + 'smoking_plastic' => ['object' => 'packaging', 'materials' => ['plastic']], + 'filterbox' => ['object' => 'filters', 'materials' => ['cardboard']], + 'vape_pen' => ['object' => 'vapePen', 'materials' => ['plastic', 'metal']], + 'vape_oil' => ['object' => 'vapeOil', 'materials' => ['plastic', 'glass']], + 'smokingOther' => ['object' => 'other'], + + // SoftDrinks + 'waterBottle' => ['object' => 'water_bottle', 'materials' => ['plastic']], + 'fizzyDrinkBottle' => ['object' => 'fizzy_bottle', 'materials' => ['plastic']], + 'bottleLid' => ['object' => 'lid', 'materials' => ['plastic']], + 'bottleLabel' => ['object' => 'label', 'materials' => ['plastic']], + 'tinCan' => ['object' => 'soda_can', 'materials' => ['aluminium']], + 'sportsDrink' => ['object' => 'sports_bottle', 'materials' => ['plastic']], + 'plastic_cups' => ['object' => 'cup', 'materials' => ['plastic']], + 'plastic_cup_tops' => ['object' => 'lid', 'materials' => ['plastic']], + 'milk_bottle' => ['object' => 'milk_bottle', 'materials' => ['plastic']], + 'milk_carton' => ['object' => 'milk_carton', 'materials' => ['plastic']], + 'paper_cups' => ['object' => 'cup', 'materials' => ['paper']], + 'pullring' => ['object' => 'pullRing', 'materials' => ['aluminium']], + 'juice_cartons' => ['object' => 'juice_carton', 'materials' => ['cardboard', 'foil', 'plastic']], + 'juice_bottles' => ['object' => 'juice_bottle', 'materials' => ['plastic']], + 'juice_packet' => ['object' => 'juice_pouch', 'materials' => ['plastic', 'foil']], + 'ice_tea_bottles' => ['object' => 'iceTea_bottle', 'materials' => ['glass']], + 'ice_tea_can' => ['object' => 'icedTea_can', 'materials' => ['aluminium']], + 'energy_can' => ['object' => 'energy_can', 'materials' => ['aluminium']], + 'strawpacket' => ['object' => 'straw_packaging', 'materials' => ['plastic']], + 'styro_cup' => ['object' => 'cup', 'materials' => ['styrofoam']], + 'broken_glass' => ['object' => 'brokenGlass', 'materials' => ['glass']], + 'softDrinkOther' => ['object' => 'other'], + + // Sanitary + 'menstral' => ['object' => 'menstrual', 'materials' => ['plastic']], + 'deodorant' => ['object' => 'deodorant_can', 'materials' => ['aluminium']], + 'ear_swabs' => ['object' => 'earSwabs', 'materials' => ['plastic', 'cotton']], + 'tooth_brush' => ['object' => 'toothbrush', 'materials' => ['plastic']], + 'tooth_pick' => ['object' => 'toothpick', 'materials' => ['wood']], + 'hand_sanitiser' => ['object' => 'sanitiser', 'materials' => ['plastic']], + 'sanitaryOther' => ['object' => 'other'], + + // Coastal + 'degraded_plasticbottle' => ['object' => 'bottle', 'materials' => ['plastic'], 'states' => ['degraded']], + 'degraded_plasticbag' => ['object' => 'bag', 'materials' => ['plastic'], 'states' => ['degraded']], + 'degraded_straws' => ['object' => 'straws', 'materials' => ['plastic'], 'states' => ['degraded']], + 'degraded_lighters' => ['object' => 'lighters', 'materials' => ['plastic'], 'states' => ['degraded']], + 'rope_small' => ['object' => 'rope', 'materials' => ['rope', 'plastic'], 'sizes' => ['small']], + 'rope_medium' => ['object' => 'rope', 'materials' => ['rope', 'plastic'], 'sizes' => ['medium']], + 'rope_large' => ['object' => 'rope', 'materials' => ['rope', 'plastic'], 'sizes' => ['large']], + 'fishing_gear_nets' => ['object' => 'fishing_nets', 'materials' => ['rope', 'plastic']], + 'ghost_nets' => ['object' => 'fishing_nets', 'materials' => ['rope', 'plastic']], + 'styro_small' => ['object' => 'styrofoam', 'materials' => ['styrofoam'], 'sizes' => ['small']], + 'styro_medium' => ['object' => 'styrofoam', 'materials' => ['styrofoam'], 'sizes' => ['medium']], + 'styro_large' => ['object' => 'styrofoam', 'materials' => ['styrofoam'], 'sizes' => ['large']], + 'coastal_other' => ['object' => 'other'], + + // Industrial + 'industrial_plastic' => ['object' => 'plastic', 'materials' => ['plastic']], + 'industrial_other' => ['object' => 'other'], + + // Other + 'bags_litter' => ['object' => 'bagsLitter'], + 'overflowing_bins' => ['object' => 'overflowingBins'], + 'plastic_bags' => ['object' => 'plasticBags'], + 'random_litter' => ['object' => 'randomLitter'], + 'traffic_cone' => ['object' => 'trafficCone'], + 'election_posters' => ['object' => 'posters'], + 'forsale_posters' => ['object' => 'posters'], + 'cable_tie' => ['object' => 'cableTie'], + 'washing_up' => ['object' => 'washingUp'], + 'stationary' => ['object' => 'other', 'category' => 'stationery'], + + // Dogshit/Pets (category rename) + 'poo' => ['object' => 'dogshit', 'category' => 'pets'], + 'poo_in_bag' => ['object' => 'dogshit_in_bag', 'category' => 'pets'], + 'pooinbag' => ['object' => 'dogshit_in_bag', 'category' => 'pets'], + + // Dumping (structural change) + 'small' => ['object' => 'dumping', 'sizes' => ['small']], + 'medium' => ['object' => 'dumping', 'sizes' => ['medium']], + 'large' => ['object' => 'dumping', 'sizes' => ['large']], + + // Return null for everything else - use key as-is + default => null, + }; + } + + public function normalizeCustomTag(string $rawTag): array + { + $tag = trim($rawTag); + $typeHint = null; + $quantity = 1; + + // 1. Extract quantity if "=X" exists + if (preg_match('/^(.*)=(\d+)$/', $tag, $matches)) { + $tag = trim($matches[1]); + $quantity = (int) $matches[2]; + } + + // Extract prefix:postfix eg brand:pepsi + if (str_contains($tag, ':')) { + [$prefix, $value] = array_map('trim', explode(':', $tag, 2)); + $prefix = strtolower($prefix); + $tag = $value; + + $typeHint = match ($prefix) { + 'brand', 'brands', 'bn' => 'Brand', + 'category', 'cat' => 'Category', + 'object', 'objects' => 'Object', + 'material', 'materials' => 'Material', + default => null, + }; + } + + $tagString = strtolower($tag); + $tagType = $typeHint ?? $this->guessTagType($tagString); + + switch ($tagType) { + case 'Category': $cacheRef = &$this->categories; break; + case 'Brand': $cacheRef = &$this->brands; break; + case 'Object': $cacheRef = &$this->objects; break; + case 'Material': $cacheRef = &$this->materials; break; + default: $cacheRef = &$this->customTags; break; + } + + $model = match ($tagType) { + 'Category' => Category::class, + 'Brand' => BrandList::class, + 'Object' => LitterObject::class, + 'Material' => Materials::class, + default => CustomTagNew::class, + }; + + return $this->createAndReturn( + $tagString, + $model, + $cacheRef, + strtolower($tagType), + $quantity + ); + } + + protected function guessTagType(string $key): string + { + if (isset($this->brands[$key])) return 'Brand'; + if (isset($this->objects[$key])) return 'Object'; + if (isset($this->materials[$key])) return 'Material'; + if (isset($this->categories[$key])) return 'Category'; + + return 'Custom'; + } + + /** + * Helper to fetch Category by normalized key. + */ + public function getCategory(string $rawKey): ?Category + { + $key = $this->normalize($rawKey); + + return Category::where('key', $key)->first(); + } + + protected function createAndReturn(string $key, string $model, array &$cache, string $type, int $quantity): array + { + if (!array_key_exists($key, $cache)) { + $created = $model::firstOrCreate(['key' => $key], ['crowdsourced' => true]); + $id = $created->id; + + // Update the passed-in local cache + $cache[$key] = $id; + + // Update the class-level cache + match ($type) { + 'category' => $this->categories[$key] = $id, + 'brand' => $this->brands[$key] = $id, + 'object' => $this->objects[$key] = $id, + 'material' => $this->materials[$key] = $id, + default => $this->customTags[$key] = $id, + }; + } + + return [ + 'type' => $type, + 'key' => $key, + 'id' => $cache[$key], + 'quantity' => $quantity, + ]; + } +} diff --git a/app/Services/Tags/GeneratePhotoSummaryService.php b/app/Services/Tags/GeneratePhotoSummaryService.php new file mode 100644 index 000000000..f61f09516 --- /dev/null +++ b/app/Services/Tags/GeneratePhotoSummaryService.php @@ -0,0 +1,277 @@ + objects > properties + * { + * "2": { // Category ID (e.g., smoking) + * "65": { // Object ID (e.g., wrapper) + * "quantity": 5, // Number of this object + * "materials": { // Optional: Material IDs with quantities + * "16": 3, // e.g., plastic: 3 + * "15": 2 // e.g., paper: 2 + * }, + * "brands": { // Optional: Brand IDs with quantities + * "12": 3 // e.g., marlboro: 3 + * }, + * "custom_tags": { // Optional: Custom tag IDs with quantities + * "45": 1 // e.g., user_defined_tag: 1 + * } + * } + * } + * } + * + * 2. "totals" - Aggregated counts across all tags + * { + * "total_tags": 15, // Sum of all items including extras + * "total_objects": 5, // Sum of primary objects only + * "by_category": { // Total items per category + * "2": 10, // Category ID: total count + * "4": 5 + * }, + * "materials": 8, // Total material tags + * "brands": 3, // Total brand tags + * "custom_tags": 2 // Total custom tags + * } + * + * 3. "keys" - Human-readable keys for all IDs (only includes used IDs) + * { + * "categories": {"2": "smoking", "4": "softdrinks"}, + * "objects": {"65": "wrapper", "119": "butts"}, + * "materials": {"16": "plastic", "15": "paper"}, + * "brands": {"12": "marlboro"}, + * "custom_tags": {"45": "user_tag"} + * } + * + * NOTES: + * - Empty arrays are removed from output (materials, brands, custom_tags) + * - Categories and objects are sorted by quantity (descending) + * - Category ID 0 represents uncategorized items + * - All IDs are strings in JSON for consistency + * - XP calculation uses the XpCalculator with proper enum values + */ +class GeneratePhotoSummaryService +{ + public function run(Photo $photo): Photo + { + $tags = $photo->photoTags() + ->with(['category', 'object', 'extraTags.extraTag']) + ->get(); + + // Initialize accumulators + $grouped = []; + $categoryTotals = []; + $totalTags = 0; + $totalObjects = 0; + $materialCount = 0; + $brandCount = 0; + $customTagCount = 0; + + // Track all keys for reference + $keyMap = [ + 'categories' => [], + 'objects' => [], + 'materials' => [], + 'brands' => [], + 'custom_tags' => [], + ]; + + // Build tag structure for XP calculation + $xpTags = [ + 'objects' => [], + 'materials' => [], + 'brands' => [], + 'custom_tags' => [], + ]; + + $objectIdToKey = []; // Map object IDs to keys for XP calculation + + foreach ($tags as $pt) { + // Use IDs as primary keys, fallback to 0 for uncategorized + $categoryId = $pt->category_id ?: 0; + $objectId = $pt->litter_object_id ?: 0; + $qty = $pt->quantity; + + // Store keys for reference + if ($categoryId > 0 && $pt->category) { + $keyMap['categories'][$categoryId] = $pt->category->key; + } + if ($objectId > 0 && $pt->object) { + $keyMap['objects'][$objectId] = $pt->object->key; + $objectIdToKey[$objectId] = $pt->object->key; + } + + // Count totals + $totalTags += $qty; + if ($objectId > 0) { + $totalObjects += $qty; + $xpTags['objects'][$objectId] = ($xpTags['objects'][$objectId] ?? 0) + $qty; + } + + // Initialize structure + if (!isset($grouped[$categoryId])) { + $grouped[$categoryId] = []; + } + if (!isset($grouped[$categoryId][$objectId])) { + $grouped[$categoryId][$objectId] = [ + 'quantity' => 0, + 'materials' => [], + 'brands' => [], + 'custom_tags' => [], + ]; + } + + // Accumulate quantities + $grouped[$categoryId][$objectId]['quantity'] += $qty; + $categoryTotals[$categoryId] = ($categoryTotals[$categoryId] ?? 0) + $qty; + + // Process extra tags + foreach ($pt->extraTags as $extra) { + $extraId = $extra->tag_type_id; + $extraQty = $extra->quantity; + $totalTags += $extraQty; + $categoryTotals[$categoryId] += $extraQty; + + // Store key if available + if ($extraId && $extra->extraTag) { + $tagType = $extra->tag_type; + $mapKey = match($tagType) { + Dimension::MATERIAL->value => 'materials', + Dimension::BRAND->value => 'brands', + Dimension::CUSTOM_TAG->value => 'custom_tags', + default => null, + }; + + if ($mapKey) { + $keyMap[$mapKey][$extraId] = $extra->extraTag->key; + } + } + + // Accumulate by type + switch ($extra->tag_type) { + case Dimension::MATERIAL->value: + $materialCount += $extraQty; + $grouped[$categoryId][$objectId]['materials'][$extraId] = + ($grouped[$categoryId][$objectId]['materials'][$extraId] ?? 0) + $extraQty; + $xpTags['materials'][$extraId] = ($xpTags['materials'][$extraId] ?? 0) + $extraQty; + break; + + case Dimension::BRAND->value: + $brandCount += $extraQty; + $grouped[$categoryId][$objectId]['brands'][$extraId] = + ($grouped[$categoryId][$objectId]['brands'][$extraId] ?? 0) + $extraQty; + $xpTags['brands'][$extraId] = ($xpTags['brands'][$extraId] ?? 0) + $extraQty; + break; + + case Dimension::CUSTOM_TAG->value: + $customTagCount += $extraQty; + $grouped[$categoryId][$objectId]['custom_tags'][$extraId] = + ($grouped[$categoryId][$objectId]['custom_tags'][$extraId] ?? 0) + $extraQty; + $xpTags['custom_tags'][$extraId] = ($xpTags['custom_tags'][$extraId] ?? 0) + $extraQty; + break; + } + } + } + + // Handle custom tags that are primary (not extra tags) + foreach ($tags as $pt) { + if ($pt->custom_tag_primary_id) { + $customId = $pt->custom_tag_primary_id; + $qty = $pt->quantity; + + $customTagCount += $qty; + // totasTagsCount already counted + + // Add to XP calculation + $xpTags['custom_tags'][$customId] = ($xpTags['custom_tags'][$customId] ?? 0) + $qty; + + // Track the key if we have the relation loaded + if ($pt->primaryCustomTag) { + $keyMap['custom_tags'][$customId] = $pt->primaryCustomTag->key; + } + } + } + + // Sort categories and objects by quantity (descending) + arsort($categoryTotals); + $sortedGrouped = []; + foreach ($categoryTotals as $catId => $catTotal) { + if (!isset($grouped[$catId])) continue; + + // Sort objects within category + $objects = $grouped[$catId]; + uasort($objects, fn($a, $b) => $b['quantity'] <=> $a['quantity']); + + // Remove empty arrays before adding to sorted group + foreach ($objects as $objId => &$objData) { + if (empty($objData['materials'])) { + unset($objData['materials']); + } + if (empty($objData['brands'])) { + unset($objData['brands']); + } + if (empty($objData['custom_tags'])) { + unset($objData['custom_tags']); + } + } + + $sortedGrouped[$catId] = $objects; + } + + // Assemble totals + $totals = [ + 'total_tags' => $totalTags, + 'total_objects' => $totalObjects, + 'by_category' => $categoryTotals, + 'materials' => $materialCount, + 'brands' => $brandCount, + 'custom_tags' => $customTagCount, + ]; + + // Remove empty arrays from keyMap + foreach ($keyMap as $type => &$map) { + if (empty($map)) { + unset($keyMap[$type]); + } + } + + // Build final summary (removing empty keys section if all are empty) + $summary = [ + 'tags' => $sortedGrouped, + 'totals' => $totals, + ]; + + // Only add keys if there are any + if (!empty($keyMap)) { + $summary['keys'] = $keyMap; + } + + // Calculate XP using fixed calculator with object key mapping + $xp = XpCalculator::calculateFromTags($xpTags, $objectIdToKey); + + // Add picked_up bonus if applicable + if (!$photo->remaining) { + $xp += XpScore::PickedUp->xp(); // +5 XP for picked up + } + + // Persist summary and XP + $photo->update([ + 'summary' => $summary, + 'xp' => $xp, + 'total_tags' => $totalTags, + 'total_brands' => $brandCount, + ]); + + return $photo; + } +} diff --git a/app/Services/Tags/PerfectBrandMatcher.php b/app/Services/Tags/PerfectBrandMatcher.php new file mode 100644 index 000000000..9babfd683 --- /dev/null +++ b/app/Services/Tags/PerfectBrandMatcher.php @@ -0,0 +1,250 @@ + [...], 'skipped' => [...]] + */ + public static function matchBrandsToObjects( + array $brands, + array $objectsByCategory, + int $photoId + ): array { + $matched = []; + $skipped = []; + + foreach ($brands as $brandKey => $brandQuantity) { + $brandMatched = false; + + // Get brand ID + $brandId = self::getBrandId($brandKey); + if (!$brandId) { + $skipped[$brandKey] = [ + 'quantity' => $brandQuantity, + 'reason' => 'brand_not_found', + ]; + continue; + } + + // Get defined relationships for this brand from database + $relationships = self::getBrandRelationships($brandKey); + + if (empty($relationships)) { + $skipped[$brandKey] = [ + 'quantity' => $brandQuantity, + 'reason' => 'no_relationships_defined', + ]; + continue; + } + + // Try to find exact match in photo's objects + foreach ($relationships as $rel) { + $categoryKey = $rel->category; + $objectKey = $rel->object; + + // Check if photo has this exact category and object + if (isset($objectsByCategory[$categoryKey])) { + foreach ($objectsByCategory[$categoryKey] as $photoObject) { + if ($photoObject['key'] === $objectKey) { + // PERFECT MATCH FOUND! + $matched[] = [ + 'brand_key' => $brandKey, + 'brand_id' => $brandId, + 'brand_quantity' => $brandQuantity, + 'category_key' => $categoryKey, + 'object_key' => $objectKey, + 'object_id' => $photoObject['id'], + 'photo_tag_id' => $photoObject['photo_tag_id'] ?? null, + ]; + $brandMatched = true; + break 2; // Break both loops + } + } + } + } + + if (!$brandMatched) { + $skipped[$brandKey] = [ + 'quantity' => $brandQuantity, + 'reason' => 'no_matching_objects_in_photo', + ]; + } + } + + // Log results for monitoring + if (count($brands) > 0) { + Log::info("Photo {$photoId} brand matching", [ + 'total_brands' => count($brands), + 'matched' => count($matched), + 'skipped' => count($skipped), + 'match_rate' => count($brands) > 0 ? round(count($matched) / count($brands) * 100, 1) : 0, + ]); + } + + return [ + 'matched' => $matched, + 'skipped' => $skipped, + ]; + } + + /** + * Get brand ID from brandslist table + */ + private static function getBrandId(string $brandKey): ?int + { + return Cache::remember("brand_id:{$brandKey}", 3600, function () use ($brandKey) { + return DB::table('brandslist')->where('key', $brandKey)->value('id'); + }); + } + + /** + * Get defined relationships for a brand from taggables + */ + private static function getBrandRelationships(string $brandKey): array + { + return Cache::remember("brand_relationships:{$brandKey}", 3600, function () use ($brandKey) { + $brandId = self::getBrandId($brandKey); + if (!$brandId) { + return []; + } + + return DB::table('taggables') + ->join('category_litter_object', 'taggables.category_litter_object_id', '=', 'category_litter_object.id') + ->join('categories', 'category_litter_object.category_id', '=', 'categories.id') + ->join('litter_objects', 'category_litter_object.litter_object_id', '=', 'litter_objects.id') + ->where('taggables.taggable_type', 'App\\Models\\Litter\\Tags\\BrandList') + ->where('taggables.taggable_id', $brandId) + ->select( + 'categories.key as category', + 'litter_objects.key as object', + 'category_litter_object.id as clo_id' + ) + ->get() + ->toArray(); + }); + } + + /** + * Clear cache for a brand (use after updating relationships) + */ + public static function clearBrandCache(string $brandKey): void + { + Cache::forget("brand_id:{$brandKey}"); + Cache::forget("brand_relationships:{$brandKey}"); + } + + /** + * Attach matched brands to PhotoTags + * This should be called after brands have been matched + */ + public static function attachMatchedBrands(array $matched, int $photoId): int + { + $attached = 0; + + foreach ($matched as $match) { + // Find the PhotoTag for this object + $photoTag = DB::table('photo_tags') + ->where('photo_id', $photoId) + ->where('litter_object_id', $match['object_id']) + ->first(); + + if (!$photoTag) { + Log::warning("PhotoTag not found for object", [ + 'photo_id' => $photoId, + 'object_id' => $match['object_id'], + 'brand' => $match['brand_key'], + ]); + continue; + } + + // Check if brand already attached + $exists = DB::table('photo_tag_extra_tags') + ->where('photo_tag_id', $photoTag->id) + ->where('tag_type', 'brand') + ->where('tag_type_id', $match['brand_id']) + ->exists(); + + if (!$exists) { + DB::table('photo_tag_extra_tags')->insert([ + 'photo_tag_id' => $photoTag->id, + 'tag_type' => 'brand', + 'tag_type_id' => $match['brand_id'], + 'quantity' => $match['brand_quantity'], + 'created_at' => now(), + 'updated_at' => now(), + ]); + $attached++; + } + } + + return $attached; + } + + /** + * Create brands-only PhotoTag for skipped brands + * Optional: You may choose NOT to create these for perfect matching + */ + public static function createBrandsOnlyTag(array $skipped, int $photoId, bool $remaining): void + { + if (empty($skipped)) { + return; + } + + // Get brands category + $brandsCategoryId = DB::table('categories')->where('key', 'brands')->value('id'); + if (!$brandsCategoryId) { + $brandsCategoryId = DB::table('categories')->insertGetId([ + 'key' => 'brands', + 'name' => 'Brands', + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + // Create PhotoTag for unmatched brands + $photoTagId = DB::table('photo_tags')->insertGetId([ + 'photo_id' => $photoId, + 'category_id' => $brandsCategoryId, + 'quantity' => array_sum(array_column($skipped, 'quantity')), + 'picked_up' => !$remaining, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + // Attach each skipped brand + foreach ($skipped as $brandKey => $data) { + $brandId = self::getBrandId($brandKey); + if (!$brandId) { + // Create brand if it doesn't exist + $brandId = DB::table('brandslist')->insertGetId([ + 'key' => $brandKey, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + DB::table('photo_tag_extra_tags')->insert([ + 'photo_tag_id' => $photoTagId, + 'tag_type' => 'brand', + 'tag_type_id' => $brandId, + 'quantity' => $data['quantity'], + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } +} diff --git a/app/Services/Tags/PhotoTagService.php b/app/Services/Tags/PhotoTagService.php new file mode 100644 index 000000000..7fc3d0262 --- /dev/null +++ b/app/Services/Tags/PhotoTagService.php @@ -0,0 +1,21 @@ + $data['photo_id'], + 'category_id' => $data['category_id'] ?? null, + 'litter_object_id' => $data['litter_object_id'] ?? null, + 'material_id' => $data['material_id'] ?? null, + 'brand_id' => $data['brand_id'] ?? null, + ], [ + 'quantity' => $data['quantity'] ?? 1, + ]); + } +} diff --git a/app/Services/Tags/TagMigrationVerifier.php b/app/Services/Tags/TagMigrationVerifier.php new file mode 100644 index 000000000..438d31605 --- /dev/null +++ b/app/Services/Tags/TagMigrationVerifier.php @@ -0,0 +1,345 @@ +updateTagsService = $updateTagsService; + $this->classifyTags = $classifyTags; + } + + /** + * Verify a single photo's migration + * Note: Requires getTags() and parseTags() to be public in UpdateTagsService + */ + public function verifyPhoto(Photo $photo): array + { + // Get original tags using same method as migration + // NOTE: These methods need to be public in UpdateTagsService + [$originalTags, $customTagsOld] = $this->updateTagsService->getTags($photo); + + // Parse expected tags without writing (now includes photo ID for logging) + $expected = $this->updateTagsService->parseTags($originalTags, $customTagsOld, $photo->id); + + // Get actual migrated data + $actual = $this->getActualMigratedData($photo); + + // Calculate differences + $diffs = $this->calculateDifferences($expected, $actual); + + // Check for specific issues + $issues = $this->identifyIssues($photo, $expected, $actual, $diffs); + + return [ + 'photo_id' => $photo->id, + 'expected' => $this->summarizeExpected($expected), + 'actual' => $actual, + 'diffs' => $diffs, + 'issues' => $issues, + 'passed' => empty($issues) + ]; + } + + /** + * Verify all photos for a user + */ + public function verifyUser(int $userId, int $limit = null): array + { + $query = Photo::where('user_id', $userId) + ->whereNotNull('migrated_at') + ->orderBy('id'); + + if ($limit) { + $query->limit($limit); + } + + $results = [ + 'user_id' => $userId, + 'total_photos' => 0, + 'passed' => 0, + 'failed' => 0, + 'issues_summary' => [], + 'deprecated_tags_used' => [], + 'autocreated_objects' => [], + 'failures' => [] + ]; + + foreach ($query->cursor() as $photo) { + $verification = $this->verifyPhoto($photo); + $results['total_photos']++; + + if ($verification['passed']) { + $results['passed']++; + } else { + $results['failed']++; + $results['failures'][] = [ + 'photo_id' => $photo->id, + 'issues' => $verification['issues'], + 'diffs' => $verification['diffs'] + ]; + } + + // Aggregate issue types + foreach ($verification['issues'] as $issue) { + $type = $issue['type']; + $results['issues_summary'][$type] = ($results['issues_summary'][$type] ?? 0) + 1; + } + } + + // Get additional insights + $results['deprecated_tags_used'] = $this->getDeprecatedTagsUsed($userId); + $results['autocreated_objects'] = $this->getAutocreatedObjectsForUser($userId); + + return $results; + } + + protected function getActualMigratedData(Photo $photo): array + { + $photoTags = $photo->photoTags()->with('extraTags')->get(); + + $actual = [ + 'objects' => 0, + 'materials' => 0, + 'brands' => 0, + 'custom_tags' => 0, + 'total_tags' => 0, + 'categories' => [] + ]; + + foreach ($photoTags as $pt) { + // Count objects + if ($pt->litter_object_id) { + $actual['objects'] += $pt->quantity; + } + + // Track categories + if ($pt->category_id) { + $actual['categories'][$pt->category_id] = + ($actual['categories'][$pt->category_id] ?? 0) + $pt->quantity; + } + + // Count primary custom tags + if ($pt->custom_tag_primary_id) { + $actual['custom_tags'] += $pt->quantity; + } + + // Count extra tags + foreach ($pt->extraTags as $extra) { + switch ($extra->tag_type) { + case 'material': + $actual['materials'] += $extra->quantity; + break; + case 'brand': + $actual['brands'] += $extra->quantity; + break; + case 'custom_tag': + $actual['custom_tags'] += $extra->quantity; + break; + } + } + } + + $actual['total_tags'] = $actual['objects'] + $actual['materials'] + + $actual['brands'] + $actual['custom_tags']; + + // Include summary for comparison + if ($photo->summary) { + $actual['summary_totals'] = $photo->summary['totals'] ?? []; + } + + return $actual; + } + + protected function summarizeExpected(array $expected): array + { + $summary = [ + 'objects' => 0, + 'materials' => 0, + 'brands' => 0, + 'custom_tags' => 0, + 'categories' => [] + ]; + + // Count from groups + foreach ($expected['groups'] as $categoryKey => $group) { + $categoryCount = 0; + + foreach ($group['objects'] as $obj) { + $qty = (int)($obj['quantity'] ?? 0); + $summary['objects'] += $qty; + $categoryCount += $qty; + + // Count expected materials (one per object quantity) + foreach (($obj['materials'] ?? []) as $_) { + $summary['materials'] += $qty; + } + } + + // Brands are already distributed to groups by parseTags() + foreach ($group['brands'] as $brand) { + $summary['brands'] += (int)($brand['quantity'] ?? 0); + } + + if (!empty($group['category_id'])) { + $summary['categories'][$group['category_id']] = $categoryCount; + } + } + + // IMPORTANT: If no objects but we have global brands, count them + // This handles brands-only photos + if ($summary['objects'] === 0 && !empty($expected['globalBrands'])) { + foreach ($expected['globalBrands'] as $brand) { + $summary['brands'] += (int)($brand['quantity'] ?? 0); + } + } + + // Custom tags + $summary['custom_tags'] = array_sum( + array_map(fn($c) => (int)($c['quantity'] ?? 1), $expected['topLevelCustomTags'] ?? []) + ); + + return $summary; + } + + protected function calculateDifferences(array $expected, array $actual): array + { + $expectedSummary = $this->summarizeExpected($expected); + + return [ + 'objects' => $actual['objects'] - $expectedSummary['objects'], + 'materials' => $actual['materials'] - $expectedSummary['materials'], + 'brands' => $actual['brands'] - $expectedSummary['brands'], + 'custom_tags' => $actual['custom_tags'] - $expectedSummary['custom_tags'], + 'total_delta' => ($actual['objects'] + $actual['materials'] + $actual['brands'] + $actual['custom_tags']) + - ($expectedSummary['objects'] + $expectedSummary['materials'] + $expectedSummary['brands'] + $expectedSummary['custom_tags']) + ]; + } + + protected function identifyIssues(Photo $photo, array $expected, array $actual, array $diffs): array + { + $issues = []; + + // Check for count mismatches + foreach (['objects', 'materials', 'brands', 'custom_tags'] as $type) { + if ($diffs[$type] !== 0) { + $issues[] = [ + 'type' => "{$type}_mismatch", + 'message' => "{$type} count mismatch", + 'expected' => $this->summarizeExpected($expected)[$type], + 'actual' => $actual[$type], + 'diff' => $diffs[$type] + ]; + } + } + + // Check ALL summary fields for consistency + if (isset($actual['summary_totals'])) { + $st = $actual['summary_totals']; + + $checks = [ + ['type' => 'summary_objects_mismatch', 'key' => 'total_objects', 'actual' => $actual['objects']], + ['type' => 'summary_brands_mismatch', 'key' => 'brands', 'actual' => $actual['brands']], + ['type' => 'summary_materials_mismatch', 'key' => 'materials', 'actual' => $actual['materials']], + ['type' => 'summary_customs_mismatch', 'key' => 'custom_tags', 'actual' => $actual['custom_tags']], + ]; + + foreach ($checks as $c) { + $summaryValue = (int)($st[$c['key']] ?? 0); + if ($summaryValue !== (int)$c['actual']) { + $issues[] = [ + 'type' => $c['type'], + 'message' => "Summary {$c['key']} doesn't match actual", + 'summary' => $summaryValue, + 'actual' => (int)$c['actual'], + ]; + } + } + } + + // Check for brands-only / custom-only semantic violations + $hasObjects = !empty($expected['groups']) && + collect($expected['groups'])->pluck('objects')->flatten()->isNotEmpty(); + $hasBrands = !empty($expected['globalBrands']); + + if (!$hasObjects && $hasBrands && empty($expected['topLevelCustomTags'])) { + // This should be a brands-only photo + $photoTags = $photo->photoTags; + if ($photoTags->whereNotNull('litter_object_id')->isNotEmpty()) { + $issues[] = [ + 'type' => 'brands_only_violation', + 'message' => 'Expected brands-only but found objects' + ]; + } + } + + return $issues; + } + + protected function getDeprecatedTagsUsed(int $userId): array + { + $deprecated = []; + $photos = Photo::where('user_id', $userId)->get(); + + foreach ($photos as $photo) { + $tags = $photo->tags() ?? []; + foreach ($tags as $category => $items) { + foreach ($items as $tag => $qty) { + if ($this->classifyTags::normalizeDeprecatedTag($tag) !== null) { + $deprecated[$tag] = ($deprecated[$tag] ?? 0) + 1; + } + } + } + } + + return $deprecated; + } + + /** + * Get autocreated objects actually used by this user + */ + protected function getAutocreatedObjectsForUser(int $userId): array + { + // Collect all object keys this user's photos reference + $usedKeys = []; + + $photos = Photo::where('user_id', $userId) + ->whereNotNull('migrated_at') + ->cursor(); + + foreach ($photos as $photo) { + // NOTE: Requires getTags() and parseTags() to be public + [$legacy, $customs] = $this->updateTagsService->getTags($photo); + $parsed = $this->updateTagsService->parseTags($legacy, $customs, $photo->id); + + foreach ($parsed['groups'] as $group) { + foreach ($group['objects'] as $obj) { + if (isset($obj['key'])) { + $usedKeys[] = $obj['key']; + } + } + } + } + + $usedKeys = array_values(array_unique($usedKeys)); + + if (empty($usedKeys)) { + return []; + } + + // Return only crowdsourced objects that this user actually used + return \App\Models\Litter\Tags\LitterObject::where('crowdsourced', true) + ->whereIn('key', $usedKeys) + ->pluck('key') + ->toArray(); + } +} diff --git a/app/Services/Tags/TagSummaryService.php b/app/Services/Tags/TagSummaryService.php new file mode 100644 index 000000000..e68cc4d0a --- /dev/null +++ b/app/Services/Tags/TagSummaryService.php @@ -0,0 +1,79 @@ + 0, + 'objects' => 0, + 'brands' => 0, + 'materials' => 0, + 'custom_tags' => 0, + 'categories' => [], + ]; + + $photoTags = $photo->photoTags()->with('category', 'object', 'extraTags')->get(); + + foreach ($photoTags as $photoTag) { + $categoryKey = $photoTag->category?->key ?? 'uncategorized'; + $objectKey = $photoTag->object?->key ?? 'unknown'; + $quantity = max(1, (int) $photoTag->quantity); + + $totals['tags'] += $quantity; + $totals['objects'] += $quantity; + + $totals['categories'][$categoryKey] ??= []; + $totals['categories'][$categoryKey][$objectKey] = ($totals['categories'][$categoryKey][$objectKey] ?? 0) + $quantity; + + foreach ($photoTag->extraTags as $extra) { + $type = $extra->tag_type; + $tagId = $extra->tag_type_id; + $qty = max(1, (int) $extra->quantity); + + $typePlural = $type === 'custom' ? 'custom_tags' : $type . 's'; + + $totals[$typePlural] += $qty; + $totals['categories'][$categoryKey][$typePlural] ??= []; + $totals['categories'][$categoryKey][$typePlural][$tagId] = ($totals['categories'][$categoryKey][$typePlural][$tagId] ?? 0) + $qty; + } + } + + // Handle extra custom tags where no object exists + $customOnly = $photo->photoTags() + ->whereNull('litter_object_id') + ->with('extraTags') + ->get() + ->flatMap->extraTags + ->filter(fn($tag) => $tag->tag_type === 'custom'); + + foreach ($customOnly as $custom) { + $qty = max(1, (int) $custom->quantity); + $tagId = $custom->tag_type_id; + + $totals['tags'] += $qty; + $totals['custom_tags'] += $qty; + + $totals['categories']['custom_tags'] ??= []; + $totals['categories']['custom_tags'][$tagId] = ($totals['categories']['custom_tags'][$tagId] ?? 0) + $qty; + } + + $summary = [ + 'totals' => $totals, + 'metadata' => [ + 'photo_id' => $photo->id, + 'user_id' => $photo->user_id, + 'datetime' => optional($photo->datetime)->toIso8601String(), + 'picked_up' => !$photo->remaining, + ], + 'summary_version' => 1, + ]; + + $photo->summary = $summary; + $photo->save(); + } +} diff --git a/app/Services/Tags/UnifiedBrandService.php b/app/Services/Tags/UnifiedBrandService.php new file mode 100644 index 000000000..9d9b3389f --- /dev/null +++ b/app/Services/Tags/UnifiedBrandService.php @@ -0,0 +1,177 @@ +where('id', $photoId)->first(); + if ($photo && $photo->brands_id) { + $brandRecord = DB::table('brands')->where('id', $photo->brands_id)->first(); + if ($brandRecord) { + foreach ($brandRecord as $key => $value) { + if ($value > 0 && $key !== 'id' && !in_array($key, ['created_at', 'updated_at'])) { + $brands[$key] = (int) $value; + } + } + } + } + + // 2. Get brands from custom tags + $customBrands = self::extractCustomBrands($photoId); + foreach ($customBrands as $brandKey => $qty) { + // Merge with existing or add new + $brands[$brandKey] = ($brands[$brandKey] ?? 0) + $qty; + } + + return $brands; + } + + /** + * Extract brands from custom tags + */ + private static function extractCustomBrands(int $photoId): array + { + $customTags = CustomTag::where('photo_id', $photoId)->get(); + $brands = []; + + foreach ($customTags as $customTag) { + $tag = $customTag->tag; + + // Check for brand: or brand= prefix + if (preg_match('/^brand[:=](.+)$/i', $tag, $matches)) { + $brandKey = self::normalizeBrandKey($matches[1]); + $brands[$brandKey] = ($brands[$brandKey] ?? 0) + 1; + } + } + + return $brands; + } + + /** + * Normalize brand key for consistency + */ + public static function normalizeBrandKey(string $brand): string + { + // Convert to lowercase + $normalized = strtolower(trim($brand)); + + // Replace spaces and special chars with underscores + $normalized = preg_replace('/[^a-z0-9]+/', '_', $normalized); + + // Remove trailing underscores + $normalized = trim($normalized, '_'); + + // Map common variations + $mappings = [ + '7_eleven' => 'seven_eleven', + '7eleven' => 'seven_eleven', + 'coca_cola' => 'coke', + 'cocacola' => 'coke', + 'mc_donalds' => 'mcdonalds', + 'mc_donald_s' => 'mcdonalds', + 'burger_king' => 'burgerking', + 'dr_pepper' => 'drpepper', + // Add more mappings as needed + ]; + + return $mappings[$normalized] ?? $normalized; + } + + /** + * Get all unique brands from database (both sources) + */ + public static function getAllUniqueBrands(): array + { + return Cache::remember('all_unique_brands', 3600, function () { + $brands = []; + + // 1. Get all columns from brands table (except system columns) + $columns = DB::getSchemaBuilder()->getColumnListing('brands'); + $excludeColumns = ['id', 'created_at', 'updated_at']; + foreach ($columns as $column) { + if (!in_array($column, $excludeColumns)) { + $brands[$column] = 'brands_table'; + } + } + + // 2. Get all brand: and brand= tags from custom_tags + $customBrandTags = CustomTag::where('tag', 'like', 'brand:%') + ->orWhere('tag', 'like', 'brand=%') + ->pluck('tag') + ->unique(); + + foreach ($customBrandTags as $tag) { + if (preg_match('/^brand[:=](.+)$/i', $tag, $matches)) { + $brandKey = self::normalizeBrandKey($matches[1]); + if (!isset($brands[$brandKey])) { + $brands[$brandKey] = 'custom_tag'; + } + } + } + + return $brands; + }); + } + + /** + * Create or get brand from brandslist table + */ + public static function ensureBrandExists(string $brandKey): int + { + // Check if brand exists in brandslist + $brand = DB::table('brandslist')->where('key', $brandKey)->first(); + + if ($brand) { + return $brand->id; + } + + // Create new brand + return DB::table('brandslist')->insertGetId([ + 'key' => $brandKey, + 'crowdsourced' => true, // Mark as user-generated + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + /** + * Migrate custom brand tags to new system + */ + public static function migrateCustomBrandTags(int $photoId): array + { + $customBrands = self::extractCustomBrands($photoId); + $migrated = []; + + foreach ($customBrands as $brandKey => $qty) { + // Ensure brand exists in brandslist table + $brandId = self::ensureBrandExists($brandKey); + + $migrated[] = [ + 'key' => $brandKey, + 'id' => $brandId, + 'quantity' => $qty, + 'source' => 'custom_tag', + ]; + } + + return $migrated; + } +} diff --git a/app/Services/Tags/UpdateTagsService.php b/app/Services/Tags/UpdateTagsService.php new file mode 100644 index 000000000..27235860e --- /dev/null +++ b/app/Services/Tags/UpdateTagsService.php @@ -0,0 +1,389 @@ +classifyTags = $classifyTags; + $this->generatePhotoSummaryService = $generatePhotoSummaryService; + } + + public function updateTags(Photo $photo): void + { + if ($photo->migrated_at !== null) { + return; + } + + [$originalTags, $customTagsOld] = $this->getTags($photo); + + // If no tags at all, just mark migrated + if (empty($originalTags) && $customTagsOld->isEmpty()) { + $photo->update(['migrated_at' => now()]); + return; + } + + $parsedTags = $this->parseTags($originalTags, $customTagsOld, $photo->id); + + DB::transaction(function () use ($parsedTags, $photo, $customTagsOld) { + $this->createPhotoTags($photo, $parsedTags); + $this->generatePhotoSummaryService->run($photo); + $photo->update(['migrated_at' => now()]); + }); + } + + public function getTags(Photo $photo): array + { + $tags = $photo->tags() ?? []; + $customTagsOld = $photo->customTags ?? new EloquentCollection(); + + return [$tags, $customTagsOld]; + } + + public function parseTags(array $originalTags, EloquentCollection $customTagsOld, int $photoId): array + { + $groups = []; + $globalBrands = []; + $topLevelCustomTags = []; + + // 1) Category-based blocks + foreach ($originalTags as $categoryKey => $items) { + if ($categoryKey === 'brands') { + foreach ($items as $tag => $qtyRaw) { + $qty = (int) $qtyRaw; + if ($qty <= 0) { + continue; + } + + // Try to get brand ID from brandslist table + $brandId = DB::table('brandslist') + ->where('key', $tag) + ->value('id'); + + if ($brandId) { + $globalBrands[] = [ + 'id' => $brandId, + 'key' => $tag, + 'type' => 'brand', + 'quantity' => $qty + ]; + } else { +// Log::warning("Brand not found in brandslist", [ +// 'brand_key' => $tag, +// 'photo_id' => $photoId +// ]); + // Still add it but without ID (will become brands-only tag) + $globalBrands[] = [ + 'id' => null, + 'key' => $tag, + 'type' => Dimension::BRAND->value, + 'quantity' => $qty + ]; + } + } + continue; + } + + $category = $this->classifyTags->getCategory($categoryKey); + if (! $category) { + Log::warning("No matching Category for key: {$categoryKey}"); + continue; + } + + $groups[$categoryKey] = [ + 'category_id' => $category->id, + 'objects' => [], + 'brands' => [], + 'materials' => [], + ]; + + foreach ($items as $tag => $qtyRaw) { + $qty = (int) $qtyRaw; + if ($qty <= 0) { + continue; + } + + // Initial classification + $parsed = $this->classifyTags->classify($tag); + $parsed['quantity'] = $qty; + + // Determine classification + if ($parsed['type'] === Dimension::BRAND->value) { + $globalBrands[] = $parsed; + } elseif ($parsed['type'] === Dimension::MATERIAL->value) { + $groups[$categoryKey]['materials'][] = $parsed; + } elseif ($parsed['type'] === 'object') { + // Check if this is a deprecated tag with material(s) + $mapping = ClassifyTagsService::normalizeDeprecatedTag($tag); + if ($mapping !== null) { + $parsed['object'] = $mapping['object']; + $parsed['materials'] = $mapping['materials'] ?? []; + } + $groups[$categoryKey]['objects'][] = $parsed; + } elseif ($parsed['type'] === Dimension::CUSTOM_TAG->value) { + // Ensure custom tag exists in custom_tags_new table + $customTagId = DB::table('custom_tags_new') + ->where('key', $tag) + ->value('id'); + + if (!$customTagId) { + // Create the custom tag in the correct table + $customTagId = DB::table('custom_tags_new')->insertGetId([ + 'key' => $tag, + 'created_at' => now(), + 'updated_at' => now() + ]); + } + + $parsed['id'] = $customTagId; + $topLevelCustomTags[] = $parsed; + } else { + // Unknown type - treat as custom tag + $customTagId = DB::table('custom_tags_new') + ->where('key', $tag) + ->value('id'); + + if (!$customTagId) { + $customTagId = DB::table('custom_tags_new')->insertGetId([ + 'key' => $tag, + 'created_at' => now(), + 'updated_at' => now() + ]); + + Log::info("Created unknown tag as custom tag in custom_tags_new", [ + 'key' => $tag, + 'id' => $customTagId + ]); + } + + $topLevelCustomTags[] = [ + 'id' => $customTagId, + 'key' => $tag, + 'type' => 'custom_tag', + 'quantity' => $qty + ]; + } + } + } + + // 2) Custom tags + foreach ($customTagsOld as $ct) { + // Check if this custom tag is actually a brand + $brandId = DB::table('brandslist') + ->where('key', $ct->tag) + ->value('id'); + + if ($brandId) { + $globalBrands[] = [ + 'id' => $brandId, + 'key' => $ct->tag, + 'type' => 'brand', + 'quantity' => 1 + ]; + } else { + // It's a real custom tag - ensure it exists in custom_tags_new + $customTagId = DB::table('custom_tags_new') + ->where('key', $ct->tag) + ->value('id'); + + if (!$customTagId) { + // Create the custom tag in the correct table + $customTagId = DB::table('custom_tags_new')->insertGetId([ + 'key' => $ct->tag, + 'created_at' => now(), + 'updated_at' => now() + ]); + + Log::info("Migrated custom tag to custom_tags_new", [ + 'key' => $ct->tag, + 'id' => $customTagId + ]); + } + + $topLevelCustomTags[] = [ + 'id' => $customTagId, + 'key' => $ct->tag, + 'type' => 'custom_tag', + 'quantity' => 1 + ]; + } + } + + return [ + 'groups' => $groups, + 'globalBrands' => $globalBrands, + 'customTags' => $topLevelCustomTags, + ]; + } + + public function createPhotoTags(Photo $photo, array $parsedTags): void + { + $groups = $parsedTags['groups'] ?? []; + $globalBrands = $parsedTags['globalBrands'] ?? []; + $topLevelCustomTags = $parsedTags['customTags'] ?? []; + + $createdPhotoTags = []; + $hasObjects = false; + + // First pass: Create PhotoTags for objects and materials + foreach ($groups as $categoryKey => $categoryData) { + $categoryId = $categoryData['category_id'] ?? null; + $objects = $categoryData['objects'] ?? []; + + if (!empty($objects)) { + $hasObjects = true; + + foreach ($objects as $object) { + $photoTag = PhotoTag::create([ + 'photo_id' => $photo->id, + 'category_id' => $categoryId, + 'litter_object_id' => $object['id'], + 'quantity' => $object['quantity'], + 'picked_up' => !$photo->remaining, + ]); + + $createdPhotoTags[] = [ + 'photo_tag' => $photoTag, + 'category_id' => $categoryId, + 'object' => $object, + ]; + + // Attach materials from deprecated tags + if (!empty($object['materials'])) { + $materialsToAttach = []; + foreach ($object['materials'] as $materialKey) { + // Get material ID using TagKeyCache + $materialId = TagKeyCache::idFor(Dimension::MATERIAL->value, $materialKey); + if ($materialId) { + $materialsToAttach[] = [ + 'id' => $materialId, + 'key' => $materialKey, + 'quantity' => $object['quantity'] + ]; + } + } + + if (!empty($materialsToAttach)) { + $photoTag->attachExtraTags($materialsToAttach, Dimension::MATERIAL->value, 0); + } + } + } + } + } + + // Skip brand attachment for now - will be handled in a separate process + // Just log that we have brands to process later + if (!empty($globalBrands)) { + $brandKeys = array_map(fn($b) => $b['key'] ?? 'unknown', $globalBrands); + } + + // If no objects at all but have brands, create brands-only tag + if (!$hasObjects && !empty($globalBrands)) { + $this->createBrandsOnlyTag($photo, $globalBrands); + return; + } + + // Custom-only + if (!$hasObjects && !empty($topLevelCustomTags)) { + $this->createCustomOnlyTag($photo, $topLevelCustomTags); + return; + } + + // Attach any top-level custom tags to the last created tag + if ($hasObjects && !empty($topLevelCustomTags)) { + $this->attachCustomTagsToLast($photo, $topLevelCustomTags); + } + } + + /** + * Create a brands-only PhotoTag for brands without object relationships + */ + private function createBrandsOnlyTag(Photo $photo, array $brands): void + { + if (empty($brands)) { + return; + } + + // Extract brand keys for logging + $brandKeys = array_map(fn($b) => $b['key'] ?? 'unknown', $brands); + + Log::info("Creating brands-only tag", [ + 'photo_id' => $photo->id, + 'brands' => $brandKeys, + 'count' => count($brands) + ]); + + $photoTag = PhotoTag::create([ + 'photo_id' => $photo->id, + 'category_id' => Category::where('key', 'brands')->value('id'), + 'quantity' => array_sum(array_column($brands, 'quantity')), + 'picked_up' => !$photo->remaining, + ]); + + $photoTag->attachExtraTags($brands, Dimension::BRAND->value, 0); + } + + private function createCustomOnlyTag(Photo $photo, array $customTags): void + { + if (empty($customTags)) { + return; + } + + $primary = array_shift($customTags); + + // All custom tags should now have valid IDs from custom_tags_new + if (!isset($primary['id']) || !$primary['id']) { + Log::error("Custom tag has no valid ID", [ + 'photo_id' => $photo->id, + 'custom_tag' => $primary + ]); + return; + } + + $photoTag = PhotoTag::create([ + 'photo_id' => $photo->id, + 'custom_tag_primary_id' => $primary['id'], + 'quantity' => $primary['quantity'] ?? 1, + 'picked_up' => !$photo->remaining, + ]); + + // Attach any additional custom tags as extra tags + foreach ($customTags as $idx => $extra) { + if (isset($extra['id']) && $extra['id']) { + $photoTag->attachExtraTags([$extra], Dimension::CUSTOM_TAG->value, $idx); + } + } + } + + private function attachCustomTagsToLast(Photo $photo, array $customTags): void + { + $last = $photo->photoTags()->latest()->first(); + if (!$last) { + return; + } + foreach ($customTags as $idx => $extra) { + $last->attachExtraTags([$extra], Dimension::CUSTOM_TAG->value, $idx); + } + } +} diff --git a/app/Services/Tags/XpCalculator.php b/app/Services/Tags/XpCalculator.php new file mode 100644 index 000000000..2a509fe10 --- /dev/null +++ b/app/Services/Tags/XpCalculator.php @@ -0,0 +1,120 @@ + [id => quantity, ...], + * 'brands' => [id => quantity, ...], + * 'materials' => [id => quantity, ...], + * ] + * @param array|null $objectKeys Optional mapping of object IDs to keys for special XP calculation + * [id => key, ...] + */ + public static function calculateFromTags(array $tags, ?array $objectKeys = null): int + { + $xp = XpScore::Upload->xp(); // Base XP: 5 + + // Objects: Check for special objects, otherwise use standard XP + foreach ($tags['objects'] ?? [] as $id => $quantity) { + // If we have the object key mapping, check for special XP values + if ($objectKeys && isset($objectKeys[$id])) { + $xp += $quantity * XpScore::getObjectXp($objectKeys[$id]); + } else { + // Default object XP: 1 + $xp += $quantity * XpScore::Object->xp(); + } + } + + // Brands: 3 XP each + foreach ($tags['brands'] ?? [] as $id => $quantity) { + $xp += $quantity * XpScore::Brand->xp(); + } + + // Materials: 2 XP each + foreach ($tags['materials'] ?? [] as $id => $quantity) { + $xp += $quantity * XpScore::Material->xp(); + } + + // Custom tags: 1 XP each + foreach ($tags['custom_tags'] ?? [] as $id => $quantity) { + $xp += $quantity * XpScore::CustomTag->xp(); + } + + return $xp; + } + + /** + * Deprecated? + * Calculate XP from photo summary structure + * This version can access the keys mapping from the summary + */ + public static function calculateFromSummary(array $summary): int + { + $xp = XpScore::Upload->xp(); // Base XP: 5 + + $objectKeys = $summary['keys']['objects'] ?? []; + + foreach ($summary['tags'] ?? [] as $categoryId => $objects) { + foreach ($objects as $objectId => $data) { + $quantity = $data['quantity'] ?? 0; + + // Check if this is a special object + $objectKey = $objectKeys[$objectId] ?? null; + if ($objectKey) { + $xp += $quantity * XpScore::getObjectXp($objectKey); + } else { + $xp += $quantity * XpScore::Object->xp(); + } + + // Materials: 2 XP each + foreach ($data['materials'] ?? [] as $materialId => $qty) { + $xp += $qty * XpScore::Material->xp(); + } + + // Brands: 3 XP each + foreach ($data['brands'] ?? [] as $brandId => $qty) { + $xp += $qty * XpScore::Brand->xp(); + } + + // Custom tags: 1 XP each + foreach ($data['custom_tags'] ?? [] as $customId => $qty) { + $xp += $qty * XpScore::CustomTag->xp(); + } + } + } + + return $xp; + } + + /** + * Deprecated? + * Calculate XP for a single object by key + * Used during summary generation when we have the key + */ + public static function getObjectXp(string $objectKey): int + { + return XpScore::getObjectXp($objectKey); + } + + /** + * Deprecated? + * Calculate XP for a tag type + */ + public static function getTagXp(string $tagType): int + { + return XpScore::getTagXp($tagType); + } +} diff --git a/app/Stripe.php b/app/Stripe.php index 18669f297..4e512ebc9 100644 --- a/app/Stripe.php +++ b/app/Stripe.php @@ -2,6 +2,7 @@ namespace App; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Model; class Stripe extends Model @@ -17,7 +18,7 @@ class Stripe extends Model ]; public function user(){ - return $this->belongsTo('App\Models\User\User'); + return $this->belongsTo(User::class); } } diff --git a/app/Tags/BrandsConfig.php b/app/Tags/BrandsConfig.php new file mode 100644 index 000000000..ae7c22a77 --- /dev/null +++ b/app/Tags/BrandsConfig.php @@ -0,0 +1,543 @@ + [ + 'softdrinks' => ['sports_bottle', 'label'], + ], + + 'adidas' => [ + 'other' => ['clothing'], + ], + + 'aldi' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + 'amazon' => [ + 'other' => ['packaging', 'plastic'], + ], + + 'amstel' => [ + 'alcohol' => ['beer_bottle', 'beer_can', 'bottletops'], + ], + + 'apple' => [ + 'other' => ['packaging'], + ], + + 'applegreen' => [ + 'food' => ['packaging', 'wrapper'], + 'coffee' => ['cup', 'lid'], + ], + + 'asahi' => [ + 'alcohol' => ['beer_bottle', 'beer_can'], + ], + + 'avoca' => [ + 'food' => ['packaging', 'wrapper'], + 'coffee' => ['cup', 'lid'], + ], + + // B + 'bacardi' => [ + 'alcohol' => ['spirits_bottle'], + ], + + 'ballygowan' => [ + 'softdrinks' => ['water_bottle', 'label'], + ], + + 'bewleys' => [ + 'coffee' => ['cup', 'lid', 'sleeve'], + 'food' => ['wrapper', 'packaging'], + ], + + 'budweiser' => [ + 'alcohol' => ['beer_bottle', 'beer_can', 'bottletops', 'packaging', 'six_pack_rings'], + ], + + 'bullit' => [ + 'softdrinks' => ['energy_can'], + ], + + 'bulmers' => [ + 'alcohol' => ['beer_bottle', 'beer_can', 'bottletops'], + ], + + 'burgerking' => [ + 'food' => ['wrapper', 'packaging', 'napkins', 'plate'], + 'coffee' => ['cup', 'lid'], + 'softdrinks' => ['cup', 'lid', 'straws'], + ], + + // C + 'cadburys' => [ + 'food' => ['wrapper'], + ], + + 'cafe_nero' => [ + 'coffee' => ['cup', 'lid', 'sleeve', 'stirrer'], + ], + + 'calanda' => [ + 'alcohol' => ['beer_bottle', 'beer_can'], + ], + + 'camel' => [ + 'smoking' => ['cigarette_box', 'butts', 'packaging'], + ], + + 'caprisun' => [ + 'softdrinks' => ['juice_carton', 'straws'], + ], + + 'carlsberg' => [ + 'alcohol' => ['beer_bottle', 'beer_can', 'bottletops', 'packaging', 'six_pack_rings'], + ], + + 'centra' => [ + 'food' => ['packaging', 'wrapper'], + 'coffee' => ['cup'], + 'other' => ['plasticBags'], + ], + + 'circlek' => [ + 'food' => ['packaging'], + 'coffee' => ['cup'], + 'other' => ['plasticBags'], + ], + + 'coke' => [ + 'softdrinks' => ['soda_can', 'fizzy_bottle', 'water_bottle', 'cup', 'lid', 'label', 'straws', 'pullRing'], + ], + + 'colgate' => [ + 'sanitary' => ['toothbrush', 'other'], + ], + + 'corona' => [ + 'alcohol' => ['beer_bottle', 'bottletops', 'packaging'], + ], + + 'costa' => [ + 'coffee' => ['cup', 'lid', 'sleeve', 'stirrer'], + 'food' => ['wrapper', 'packaging', 'napkins'], + ], + + // D + 'doritos' => [ + 'food' => ['crisp_large', 'packet'], + ], + + 'drpepper' => [ + 'softdrinks' => ['soda_can', 'fizzy_bottle', 'cup', 'lid'], + ], + + 'dunnes' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + 'duracell' => [ + 'other' => ['batteries'], + ], + + 'durex' => [ + 'sanitary' => ['condom'], + ], + + // E + 'esquires' => [ + 'coffee' => ['cup', 'lid', 'sleeve'], + ], + + 'evian' => [ + 'softdrinks' => ['water_bottle', 'label'], + ], + + // F + 'fanta' => [ + 'softdrinks' => ['soda_can', 'fizzy_bottle', 'cup', 'lid'], + ], + + 'fernandes' => [ + 'softdrinks' => ['soda_can', 'fizzy_bottle'], + ], + + 'fosters' => [ + 'alcohol' => ['beer_can', 'packaging'], + ], + + 'frank_and_honest' => [ + 'coffee' => ['cup', 'lid', 'sleeve'], + ], + + 'fritolay' => [ + 'food' => ['crisp_small', 'crisp_large', 'packet'], + ], + + // G + 'gatorade' => [ + 'softdrinks' => ['sports_bottle', 'label'], + ], + + 'gillette' => [ + 'sanitary' => ['razor'], + ], + + 'goldenpower' => [ + 'softdrinks' => ['energy_can'], + ], + + 'guinness' => [ + 'alcohol' => ['beer_can', 'beer_bottle', 'bottletops'], + ], + + // H + 'haribo' => [ + 'food' => ['wrapper', 'packet'], + ], + + 'heineken' => [ + 'alcohol' => ['beer_bottle', 'beer_can', 'bottletops', 'packaging', 'six_pack_rings'], + ], + + 'hertog_jan' => [ + 'alcohol' => ['beer_bottle', 'beer_can'], + ], + + // I + 'insomnia' => [ + 'coffee' => ['cup', 'lid', 'sleeve'], + 'food' => ['wrapper', 'packaging'], + ], + + // K + 'kellogs' => [ + 'food' => ['packaging'], + ], + + 'kfc' => [ + 'food' => ['packaging', 'napkins', 'plate', 'wrapper'], + 'softdrinks' => ['cup', 'lid', 'straws'], + ], + + // L + 'lavish' => [ + 'softdrinks' => ['sports_bottle'], + ], + + 'lego' => [ + 'other' => ['plastic'], + ], + + 'lidl' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + 'lindenvillage' => [ + 'food' => ['packaging'], + ], + + 'lipton' => [ + 'softdrinks' => ['fizzy_bottle', 'label'], + ], + + 'loreal' => [ + 'sanitary' => ['bottle', 'other'], + ], + + 'lucozade' => [ + 'softdrinks' => ['sports_bottle', 'energy_can', 'fizzy_bottle', 'label'], + ], + + // M + 'marlboro' => [ + 'smoking' => ['cigarette_box', 'butts', 'packaging'], + ], + + 'mars' => [ + 'food' => ['wrapper'], + ], + + 'mcdonalds' => [ + 'food' => ['wrapper', 'packaging', 'napkins', 'plate', 'cutlery'], + 'coffee' => ['cup', 'lid'], + 'softdrinks' => ['cup', 'lid', 'straws'], + ], + + 'modelo' => [ + 'alcohol' => ['beer_bottle', 'beer_can'], + ], + + 'molson_coors' => [ + 'alcohol' => ['beer_bottle', 'beer_can'], + ], + + 'monster' => [ + 'softdrinks' => ['energy_can', 'label'], + ], + + // N + 'nero' => [ + 'coffee' => ['cup', 'lid', 'sleeve', 'stirrer'], + 'food' => ['wrapper', 'packaging'], + ], + + 'nescafe' => [ + 'coffee' => ['cup', 'lid', 'packaging'], + ], + + 'nestle' => [ + 'food' => ['wrapper', 'packaging'], + 'coffee' => ['cup', 'lid'], + ], + + 'nike' => [ + 'other' => ['clothing'], + ], + + // O + 'obriens' => [ + 'food' => ['wrapper', 'packaging'], + 'coffee' => ['cup', 'lid'], + ], + + 'ok_' => [ // OK convenience store brand + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + // P + 'pepsi' => [ + 'softdrinks' => ['soda_can', 'fizzy_bottle', 'cup', 'lid', 'label', 'straws', 'pullRing'], + // NOT in food - wrappers belong to food brands + ], + + 'powerade' => [ + 'softdrinks' => ['sports_bottle', 'label'], + ], + + // R + 'redbull' => [ + 'softdrinks' => ['energy_can', 'label'], + ], + + 'ribena' => [ + 'softdrinks' => ['juice_bottle', 'juice_carton', 'label'], + ], + + // S + 'sainsburys' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + 'samsung' => [ + 'other' => ['packaging'], + ], + + 'schutters' => [ + 'alcohol' => ['beer_bottle'], + ], + + 'seven_eleven' => [ + 'food' => ['packaging'], + 'coffee' => ['cup'], + 'softdrinks' => ['cup'], + ], + + 'slammers' => [ + 'softdrinks' => ['energy_can'], + ], + + 'spa' => [ + 'softdrinks' => ['water_bottle'], + ], + + 'spar' => [ + 'food' => ['packaging', 'wrapper'], + 'other' => ['plasticBags'], + ], + + 'sprite' => [ + 'softdrinks' => ['soda_can', 'fizzy_bottle', 'cup', 'lid'], + ], + + 'starbucks' => [ + 'coffee' => ['cup', 'lid', 'sleeve', 'stirrer'], + 'food' => ['wrapper', 'packaging', 'napkins'], + ], + + 'stella' => [ + 'alcohol' => ['beer_bottle', 'beer_can', 'bottletops', 'packaging'], + ], + + 'subway' => [ + 'food' => ['wrapper', 'packaging', 'napkins'], + 'softdrinks' => ['cup', 'lid', 'straws'], + ], + + 'supermacs' => [ + 'food' => ['wrapper', 'packaging', 'napkins', 'plate'], + 'coffee' => ['cup', 'lid'], + 'softdrinks' => ['cup', 'lid', 'straws'], + ], + + 'supervalu' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + // T + 'tayto' => [ + 'food' => ['crisp_small', 'packet'], + ], + + 'tesco' => [ + 'food' => ['packaging', 'wrapper'], + 'other' => ['plasticBags'], + ], + + 'thins' => [ + 'food' => ['crisp_small', 'packet'], + ], + + 'tim_hortons' => [ + 'coffee' => ['cup', 'lid', 'sleeve'], + 'food' => ['wrapper', 'packaging', 'napkins'], + ], + + // V + 'volvic' => [ + 'softdrinks' => ['water_bottle', 'label'], + ], + + // W + 'waitrose' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + 'walkers' => [ + 'food' => ['crisp_small', 'crisp_large', 'packet'], + ], + + 'wendys' => [ + 'food' => ['wrapper', 'packaging', 'napkins'], + 'softdrinks' => ['cup', 'lid', 'straws'], + ], + + 'wilde_and_greene' => [ + 'food' => ['packaging', 'wrapper'], + 'coffee' => ['cup'], + ], + + 'winston' => [ + 'smoking' => ['cigarette_box', 'butts', 'packaging'], + ], + + 'woolworths' => [ + 'food' => ['packaging'], + 'other' => ['plasticBags'], + ], + + 'wrigleys' => [ + 'food' => ['wrapper'], + ], + ]; + + /** + * Get allowed objects for a brand in a category + */ + public static function getAllowedObjects(string $brandKey, string $categoryKey): array + { + return self::BRAND_OBJECTS[$brandKey][$categoryKey] ?? []; + } + + /** + * Check if a brand can attach to a specific object + */ + public static function canBrandAttachToObject( + string $brandKey, + string $categoryKey, + string $objectKey + ): bool { + $allowedObjects = self::getAllowedObjects($brandKey, $categoryKey); + return in_array($objectKey, $allowedObjects); + } + + /** + * Get all categories a brand can appear in + */ + public static function getBrandCategories(string $brandKey): array + { + return array_keys(self::BRAND_OBJECTS[$brandKey] ?? []); + } + + /** + * Get primary category for a brand (first in list) + */ + public static function getPrimaryCategory(string $brandKey): ?string + { + $categories = self::getBrandCategories($brandKey); + return $categories[0] ?? null; + } + + /** + * Check if a brand is configured + */ + public static function brandExists(string $brandKey): bool + { + return isset(self::BRAND_OBJECTS[$brandKey]); + } + + /** + * Get all configured brands + */ + public static function getAllBrands(): array + { + return array_keys(self::BRAND_OBJECTS); + } + + /** + * Get unconfigured brands from a list + */ + public static function getUnconfiguredBrands(array $brandKeys): array + { + return array_diff($brandKeys, self::getAllBrands()); + } + + /** + * Build pivot relationships from this config + */ + public static function buildPivots(): array + { + $pivots = []; + + foreach (self::BRAND_OBJECTS as $brandKey => $categories) { + foreach ($categories as $categoryKey => $objects) { + foreach ($objects as $objectKey) { + $pivots[] = [ + 'brand' => $brandKey, + 'category' => $categoryKey, + 'object' => $objectKey, + ]; + } + } + } + + return $pivots; + } +} diff --git a/app/Tags/DynamicBrandConfig.php b/app/Tags/DynamicBrandConfig.php new file mode 100644 index 000000000..92efaeade --- /dev/null +++ b/app/Tags/DynamicBrandConfig.php @@ -0,0 +1,210 @@ +where('key', $brandKey)->value('id'); + if (!$brandId) { + return []; + } + + // Get category ID + $categoryId = DB::table('categories')->where('key', $categoryKey)->value('id'); + if (!$categoryId) { + return []; + } + + // Get allowed objects from taggables + return DB::table('taggables') + ->join('category_litter_object', 'taggables.category_litter_object_id', '=', 'category_litter_object.id') + ->join('litter_objects', 'category_litter_object.litter_object_id', '=', 'litter_objects.id') + ->where('taggables.taggable_type', 'App\\Models\\Litter\\Tags\\BrandList') + ->where('taggables.taggable_id', $brandId) + ->where('category_litter_object.category_id', $categoryId) + ->pluck('litter_objects.key') + ->toArray(); + }); + } + + /** + * Check if a brand can attach to a specific object + */ + public static function canBrandAttachToObject( + string $brandKey, + string $categoryKey, + string $objectKey + ): bool { + $allowedObjects = self::getAllowedObjects($brandKey, $categoryKey); + return in_array($objectKey, $allowedObjects); + } + + /** + * Get all categories a brand can appear in + */ + public static function getBrandCategories(string $brandKey): array + { + $cacheKey = "brand_categories:{$brandKey}"; + + return Cache::remember($cacheKey, self::CACHE_TTL, function () use ($brandKey) { + $brandId = DB::table('brandslist')->where('key', $brandKey)->value('id'); + if (!$brandId) { + return []; + } + + return DB::table('taggables') + ->join('category_litter_object', 'taggables.category_litter_object_id', '=', 'category_litter_object.id') + ->join('categories', 'category_litter_object.category_id', '=', 'categories.id') + ->where('taggables.taggable_type', 'App\\Models\\Litter\\Tags\\BrandList') + ->where('taggables.taggable_id', $brandId) + ->distinct() + ->pluck('categories.key') + ->toArray(); + }); + } + + /** + * Add a brand-object relationship + */ + public static function addRelationship( + string $brandKey, + string $categoryKey, + string $objectKey + ): bool { + // Get IDs + $brandId = DB::table('brandslist')->where('key', $brandKey)->value('id'); + $categoryId = DB::table('categories')->where('key', $categoryKey)->value('id'); + $objectId = DB::table('litter_objects')->where('key', $objectKey)->value('id'); + + if (!$brandId || !$categoryId || !$objectId) { + return false; + } + + // Get or create category_litter_object + $clo = DB::table('category_litter_object') + ->where('category_id', $categoryId) + ->where('litter_object_id', $objectId) + ->first(); + + if (!$clo) { + $cloId = DB::table('category_litter_object')->insertGetId([ + 'category_id' => $categoryId, + 'litter_object_id' => $objectId, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } else { + $cloId = $clo->id; + } + + // Check if relationship exists + $exists = DB::table('taggables') + ->where('category_litter_object_id', $cloId) + ->where('taggable_type', 'App\\Models\\Litter\\Tags\\BrandList') + ->where('taggable_id', $brandId) + ->exists(); + + if (!$exists) { + DB::table('taggables')->insert([ + 'category_litter_object_id' => $cloId, + 'taggable_type' => 'App\\Models\\Litter\\Tags\\BrandList', + 'taggable_id' => $brandId, + 'quantity' => 1, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + // Clear cache + self::clearBrandCache($brandKey); + + return true; + } + + return false; + } + + /** + * Remove a brand-object relationship + */ + public static function removeRelationship( + string $brandKey, + string $categoryKey, + string $objectKey + ): bool { + $brandId = DB::table('brandslist')->where('key', $brandKey)->value('id'); + $categoryId = DB::table('categories')->where('key', $categoryKey)->value('id'); + $objectId = DB::table('litter_objects')->where('key', $objectKey)->value('id'); + + if (!$brandId || !$categoryId || !$objectId) { + return false; + } + + $deleted = DB::table('taggables') + ->join('category_litter_object', 'taggables.category_litter_object_id', '=', 'category_litter_object.id') + ->where('category_litter_object.category_id', $categoryId) + ->where('category_litter_object.litter_object_id', $objectId) + ->where('taggables.taggable_type', 'App\\Models\\Litter\\Tags\\BrandList') + ->where('taggables.taggable_id', $brandId) + ->delete(); + + if ($deleted > 0) { + self::clearBrandCache($brandKey); + return true; + } + + return false; + } + + /** + * Clear cache for a brand + */ + public static function clearBrandCache(string $brandKey): void + { + Cache::forget("brand_categories:{$brandKey}"); + + // Clear all category combinations + $categories = DB::table('categories')->pluck('key'); + foreach ($categories as $category) { + Cache::forget("brand_objects:{$brandKey}:{$category}"); + } + } + + /** + * Check if brand has any relationships configured + */ + public static function brandHasRelationships(string $brandKey): bool + { + $brandId = DB::table('brandslist')->where('key', $brandKey)->value('id'); + if (!$brandId) { + return false; + } + + return DB::table('taggables') + ->where('taggable_type', 'App\\Models\\Litter\\Tags\\BrandList') + ->where('taggable_id', $brandId) + ->exists(); + } +} diff --git a/app/Tags/TagsConfig.php b/app/Tags/TagsConfig.php new file mode 100644 index 000000000..3c11e5950 --- /dev/null +++ b/app/Tags/TagsConfig.php @@ -0,0 +1,572 @@ + [ + 'beer_bottle' => [ + 'materials' => ['glass'], + ], + 'cider_bottle' => [ + 'materials' => ['glass', 'plastic'], + ], + 'spirits_bottle' => [ + 'materials' => ['glass'], + ], + 'wine_bottle' => [ + 'materials' => ['glass'], + ], + 'beer_can' => [ + 'materials' => ['aluminium'], + ], + 'spirits_can' => [ + 'materials' => ['aluminium'], + ], + 'cider_can' => [ + 'materials' => ['aluminium'], + ], + 'wine_glass' => [ + 'materials' => ['glass'], + ], + 'pint_glass' => [ + 'materials' => ['glass'], + ], + 'shot_glass' => [ + 'materials' => ['glass'], + ], + 'bottleTop' => [ + 'materials' => ['metal', 'plastic', 'cork'], + ], + 'brokenGlass' => [ + 'materials' => ['glass'], + ], + 'cup' => [ + 'materials' => ['plastic'], + ], + 'packaging' => [ + 'materials' => ['cardboard', 'paper', 'plastic'], + ], + 'pull_ring' => [ + 'materials' => ['aluminium'], + ], + 'straw' => [ + 'materials' => ['plastic', 'paper', 'metal'], + ], + 'sixPackRings' => [ + 'materials' => ['plastic'], + ], + 'other' => [], + ], + + 'automobile' => [ + 'car_part' => [ + 'materials' => ['metal', 'plastic', 'rubber', 'glass'], + ], + 'battery' => [ + 'materials' => ['metal', 'plastic'], + ], + 'alloy' => [ + 'materials' => ['metal'], + ], + 'bumper' => [ + 'materials' => ['plastic', 'metal'], + ], + 'exhaust' => [ + 'materials' => ['metal'], + ], + 'engine' => [ + 'materials' => ['metal'], + ], + 'mirror' => [ + 'materials' => ['glass', 'plastic'], + ], + 'light' => [ + 'materials' => ['glass', 'plastic'], + ], + 'license_plate' => [ + 'materials' => ['metal', 'plastic'], + ], + 'oil_can' => [ + 'materials' => ['metal', 'plastic'], + ], + 'tyre' => [ + 'materials' => ['rubber'], + ], + 'wheel' => [ + 'materials' => ['metal'], + ], + 'other' => [], + ], + + 'coastal' => [ + 'bag' => [ + 'materials' => ['plastic'], + 'states' => ['degraded'], + ], + 'bottle' => [ + 'materials' => ['plastic'], + 'states' => ['degraded'], + ], + 'buoys' => [ + 'materials' => ['plastic'], + ], + 'plastics' => [ + 'materials' => ['plastic'], + 'sizes' => ['micro', 'macro'], + 'states' => ['degraded'] + ], + 'rope' => [ + 'materials' => ['rope', 'plastic'], + 'sizes' => ['small', 'medium', 'large'], + ], + 'fishing_nets' => [ + 'materials' => ['rope', 'plastic'], + ], + // These are already in softdrinks + 'straws' => [ + 'materials' => ['plastic'], + 'states' => ['degraded'], + ], + // already in smoking + 'lighters' => [ + 'materials' => ['plastic'], + 'states' => ['degraded'], + ], + // already in other + 'balloons' => [ + 'materials' => ['plastic', 'latex'], + ], + // toy + 'lego' => [ + 'materials' => ['plastic'], + ], + // other + 'shotgun_cartridges' => [ + 'materials' => ['metal', 'plastic'], + ], + // industrial? + 'styrofoam' => [ + 'materials' => ['styrofoam'], + 'sizes' => ['small', 'medium', 'large'], + ], + 'other' => [], + ], + + 'coffee' => [ + 'cup' => [ + 'materials' => ['paper', 'plastic', 'foam', 'ceramic', 'metal'], + ], + 'lid' => [ + 'materials' => ['plastic', 'paper', 'bioplastic', 'plantFiber'], + ], + 'stirrer' => [ + 'materials' => ['wood', 'plastic', 'metal', 'bamboo'], + ], + 'packaging' => [ + 'materials' => ['plastic', 'foil', 'paper'], + ], + 'pod' => [ + 'materials' => ['plastic', 'aluminium'], + ], + 'sleeves' => [ + 'materials' => ['cardboard', 'silicone'], + ], + 'other' => [], + ], + + 'electronics' => [ + 'battery' => [ + 'materials' => ['metal'], + ], + 'cable' => [ + 'materials' => ['plastic', 'copper'], + ], + 'mobilePhone' => [ + 'materials' => ['metal', 'plastic', 'glass'], + ], + 'laptop' => [ + 'materials' => ['metal', 'plastic', 'glass'], + ], + 'tablet' => [ + 'materials' => ['metal', 'plastic', 'glass'], + ], + 'charger' => [ + 'materials' => ['plastic', 'metal'], + ], + 'headphones' => [ + 'materials' => ['plastic', 'metal'], + ], + 'other' => [], + ], + + 'dumping' => [ + 'dumping' => [ + 'sizes' => ['small', 'medium', 'large'], + ], + ], + + 'food' => [ + 'bag' => [ + 'materials' => ['plastic', 'paper', 'cloth', 'bioplastic'], + ], + 'box' => [ + 'materials' => ['cardboard', 'plastic', 'wood', 'metal'], + ], + 'can' => [ + 'materials' => ['aluminium', 'steel'], + ], + 'crisps' => [ + 'materials' => ['foil'], + 'sizes' => ['small', 'medium', 'large'], + ], + 'cutlery' => [ + 'materials' => ['plastic', 'wood', 'bioplastic', 'bamboo', 'metal'], + ], + 'gum' => [ + 'materials' => ['rubber'], + ], + 'jar' => [ + 'materials' => ['glass', 'plastic', 'metal'], + ], + 'lid' => [ + 'materials' => ['ceramic', 'metal', 'plastic', 'glass'], + ], + 'packet' => [ + 'materials' => ['plastic', 'foil', 'paper'], + ], + 'packaging' => [ + 'materials' => ['plastic', 'paper', 'foam', 'cardboard', 'bioplastic'], + ], + 'plate' => [ + 'materials' => ['plastic', 'paper', 'foam', 'ceramic', 'metal', 'glass', 'bioplastic'], + ], + 'pizza_box' => [ + 'materials' => ['cardboard'], + ], + 'napkins' => [ + 'materials' => ['paper', 'cloth', 'biodegradable'], + ], + 'tinfoil' => [ + 'materials' => ['aluminium'], + ], + 'wrapper' => [ + 'materials' => ['plastic', 'paper', 'foil', 'bioplastic'], + ], + 'other' => [], + ], + + 'industrial' => [ + 'oil' => [ + 'materials' => ['oil'], + ], + 'oilDrum' => [ + 'materials' => ['metal', 'plastic'], + ], + 'chemical' => [ + 'materials' => ['chemical'], + ], + 'plastic' => [ + 'materials' => ['plastic'], + ], + 'construction' => [ + 'materials' => ['clay', 'concrete', 'plastic', 'metal', 'fiberglass', 'foam', 'asphalt', 'ceramic', 'stone'], + ], + 'bricks' => [ + 'materials' => ['clay', 'concrete', 'stone'], + ], + 'tape' => [ + 'materials' => ['plastic', 'adhesive'], + ], + 'pallet' => [ + 'materials' => ['wood', 'plastic'], + ], + 'wire' => [ + 'materials' => ['copper', 'plastic', 'steel'], + ], + 'pipe' => [ + 'materials' => ['metal', 'plastic', 'concrete'], + ], + 'container' => [ + 'materials' => ['metal', 'plastic'], + ], + 'other' => [], + ], + + 'other' => [ + 'clothing' => [], + 'randomLitter' => [], + 'bagsLitter' => [], + 'overflowingBins' => [], + 'plastic' => [], + 'trafficCone' => [], + 'metal' => [], + 'plasticBags' => [], + 'paper' => [ + 'materials' => ['paper'], + ], + 'posters' => [], + 'cableTie' => [], + 'washingUp' => [], + 'balloons' => [], + 'life_buoy' => [], + 'furniture' => [], + 'mattress' => [], + 'appliance' => [], + 'paintCan' => [], + 'other' => [], + 'graffiti' => [], + 'umbrella' => [ + 'materials' => ['plastic', 'metal', 'cloth'], + ], + ], + + 'pets' => [ + 'dogshit' => [], + 'dogshit_in_bag' => [ + 'materials' => ['plastic'], + ], + ], + + 'sanitary' => [ + 'gloves' => [ + 'materials' => ['latex', 'rubber', 'plastic'], + ], + 'facemask' => [ + 'materials' => ['cotton', 'polyester', 'paper'], + ], + 'condoms' => [ + 'materials' => ['latex'], + ], + 'condom_wrapper' => [ + 'materials' => ['plastic', 'foil'], + ], + 'nappies' => [ + 'materials' => ['plastic', 'cloth', 'biodegradable'], + ], + 'sanitaryPad' => [ + 'materials' => ['cotton', 'plastic'], + ], + 'tampon' => [ + 'materials' => ['plastic'], + ], + 'deodorant_can' => [ + 'materials' => ['aluminium'], + ], + 'menstrual' => [ + 'materials' => ['plastic'], + ], + 'earSwabs' => [ + 'materials' => ['plastic', 'cotton'], + ], + 'toothbrush' => [ + 'materials' => ['plastic', 'nylon', 'bamboo', 'wood'], + ], + 'toothpasteTube' => [ + 'materials' => ['plastic', 'aluminium'], + ], + 'toothpasteBox' => [ + 'materials' => ['cardboard'], + ], + 'dentalFloss' => [ + 'materials' => ['nylon', 'plastic'], + ], + 'mouthwashBottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'wipes' => [ + 'materials' => ['fabric', 'plastic', 'biodegradable'], + ], + 'sanitiser' => [ + 'materials' => ['plastic'], + ], + 'syringe' => [ + 'materials' => ['plastic', 'metal'], + ], + 'bandage' => [ + 'materials' => ['cotton', 'elastic'], + ], + 'plaster' => [ + 'materials' => ['plastic', 'adhesive'], + ], + 'medicineBottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'pillPack' => [ + 'materials' => ['plastic', 'aluminium'], + ], + 'other' => [], + ], + + 'smoking' => [ + 'butts' => [ + 'materials' => ['plastic', 'paper'], + ], + 'lighters' => [ + 'materials' => ['plastic', 'metal'], + ], + 'cigarette_box' => [ + 'materials' => ['cardboard'], + ], + 'match_box' => [ + 'materials' => ['cardboard'], + ], + 'tobaccoPouch' => [ + 'materials' => ['plastic'], + ], + 'rollingPapers' => [ + 'materials' => ['paper'], + ], + 'packaging' => [ + 'materials' => ['cellophane', 'foil'], + ], + 'filters' => [ + 'materials' => ['plastic', 'biodegradable'], + ], + 'vapePen' => [ + 'materials' => ['plastic', 'metal'], + ], + 'vapeOil' => [ + 'materials' => ['plastic', 'glass'], + ], + 'pipe' => [ + 'materials' => ['glass', 'metal', 'ceramic'], + ], + 'bong' => [ + 'materials' => ['glass', 'metal', 'ceramic'], + ], + 'grinder' => [ + 'materials' => ['metal', 'plastic'], + ], + 'ashtray' => [ + 'materials' => ['glass', 'ceramic', 'metal'], + ], + 'other' => [], + ], + + 'softdrinks' => [ + 'water_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'fizzy_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'juice_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'energy_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'sports_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'iceTea_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'milk_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'smoothie_bottle' => [ + 'materials' => ['plastic', 'glass'], + ], + 'soda_can' => [ + 'materials' => ['aluminium'], + ], + 'energy_can' => [ + 'materials' => ['aluminium'], + ], + 'juice_can' => [ + 'materials' => ['aluminium'], + ], + 'icedTea_can' => [ + 'materials' => ['aluminium'], + ], + 'sparklingWater_can' => [ + 'materials' => ['aluminium'], + ], + 'juice_carton' => [ + 'materials' => ['cardboard', 'foil', 'plastic'], + ], + 'milk_carton' => [ + 'materials' => ['cardboard', 'foil', 'plastic'], + ], + 'icedTea_carton' => [ + 'materials' => ['cardboard', 'foil', 'plastic'], + ], + 'plantMilk_carton' => [ + 'materials' => ['cardboard', 'foil', 'plastic'], + ], + 'cup' => [ + 'materials' => ['plastic', 'paper', 'foam'], + ], + 'drinkingGlass' => [ + 'materials' => ['glass'], + ], + 'brokenGlass' => [ + 'materials' => ['glass'], + ], + 'lid' => [ + 'materials' => ['plastic'], + ], + 'label' => [ + 'materials' => ['paper', 'plastic'], + ], + 'pullRing' => [ + 'materials' => ['aluminium'], + ], + 'packaging' => [ + 'materials' => ['cardboard', 'plastic', 'foil'], + ], + 'straw' => [ + 'materials' => ['plastic', 'paper', 'metal', 'bamboo'], + ], + 'straw_packaging' => [ + 'materials' => ['paper', 'plastic'], + ], + 'juice_pouch' => [ + 'materials' => ['plastic', 'foil'], + ], + 'other' => [], + ], + + 'stationery' => [ + 'book' => [ + 'materials' => ['paper'], + ], + 'pen' => [ + 'materials' => ['plastic', 'metal'], + ], + 'pencil' => [ + 'materials' => ['wood', 'graphite'], + ], + 'magazine' => [ + 'materials' => ['paper', 'plastic'], + ], + 'marker' => [ + 'materials' => ['plastic'], + ], + 'notebook' => [ + 'materials' => ['paper'], + ], + 'stapler' => [ + 'materials' => ['metal', 'plastic'], + ], + 'paperClip' => [ + 'materials' => ['metal'], + ], + 'rubberBand' => [ + 'materials' => ['rubber'], + ], + 'other' => [], + ], + ]; + } +} diff --git a/app/Traits/AddTagsTrait.php b/app/Traits/AddTagsTrait.php index 37501780e..088c1d31c 100644 --- a/app/Traits/AddTagsTrait.php +++ b/app/Traits/AddTagsTrait.php @@ -7,7 +7,7 @@ use App\Actions\Photos\AddTagsToPhotoAction; use App\Actions\Photos\DeleteTagsFromPhotoAction; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; trait AddTagsTrait { diff --git a/app/Traits/FilterClustersByGeohashTrait.php b/app/Traits/FilterClustersByGeohashTrait.php deleted file mode 100644 index 9ce797e34..000000000 --- a/app/Traits/FilterClustersByGeohashTrait.php +++ /dev/null @@ -1,71 +0,0 @@ - zoom level of the browser - * @param $bbox array -> [west|left, south|bottom, east|right, north|top] - * @return Builder - */ - public function filterClustersByGeoHash (Builder $query, int $zoom, array $bbox): Builder - { - //$bbox = json_decode($bbox); - - // get center of the bbox - $center_lat = ($bbox['top'] + $bbox['bottom']) / 2; - $center_lon = ($bbox['left'] + $bbox['right']) / 2; - - // zoom level will determine what level of geohash precision to use - $precision = $this->getGeohashPrecision($zoom); - - // Get the center of the bounding box, as a geohash - $center_geohash = \GeoHash::encode($center_lat, $center_lon, $precision); // precision 0 will return the full geohash - - // get the neighbour geohashes from our center geohash - $geos = array_values($this->neighbors($center_geohash)); - - return $query - ->where('zoom', $zoom) - ->where(function ($q) use ($geos) { - foreach ($geos as $geo) { - $q->orWhere('geohash', 'like', $geo . '%'); // starts with - } - }); - } - - /** - * Converts the clusters into the format required by the map - * - * @param Collection $clusters - * @return array - */ - protected function getFeatures(Collection $clusters): array - { - return $clusters->map(function ($cluster) { - return [ - 'type' => 'Feature', - 'geometry' => [ - 'type' => 'Point', - 'coordinates' => [$cluster->lon, $cluster->lat] - ], - 'properties' => [ - 'point_count' => $cluster->point_count, - 'point_count_abbreviated' => $cluster->point_count_abbreviated, - 'cluster' => true - ] - ]; - })->toArray(); - } -} diff --git a/app/Traits/FilterPhotosByGeoHashTrait.php b/app/Traits/FilterPhotosByGeoHashTrait.php index 8439eabf5..52e452bad 100644 --- a/app/Traits/FilterPhotosByGeoHashTrait.php +++ b/app/Traits/FilterPhotosByGeoHashTrait.php @@ -3,7 +3,7 @@ namespace App\Traits; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Builder; trait FilterPhotosByGeoHashTrait diff --git a/app/Traits/GeoJson/CreateGeoJsonPoints.php b/app/Traits/GeoJson/CreateGeoJsonPoints.php index f627cd1b2..c9fc53bcc 100644 --- a/app/Traits/GeoJson/CreateGeoJsonPoints.php +++ b/app/Traits/GeoJson/CreateGeoJsonPoints.php @@ -4,34 +4,56 @@ trait CreateGeoJsonPoints { /** + * Convert a flat array of rows (each must contain lat & lon) into a + * GeoJSON FeatureCollection. * + * @param string $name + * @param $features + * @param bool $cluster + * @return array */ - public function createGeojsonPoints ($name, $features): array + public function createGeojsonPoints(string $name, $features, bool $cluster = false): array { $geojson = [ 'type' => 'FeatureCollection', - "name" => $name, - "crs" => [ - "type" => "name", - "properties" => [ - "name" => "urn:ogc:def:crs:OGC:1.3:CRS84" - ] + 'name' => $name, + 'crs' => [ + 'type' => 'name', + 'properties' => ['name' => 'urn:ogc:def:crs:OGC:1.3:CRS84'], ], - 'features' => [] + 'features' => [], ]; - foreach ($features as $feature) - { + foreach ($features as $row) { + $props = (array) $row; + + if ($cluster) { + $props['cluster'] = true; + $props['point_count'] = (int) ($props['count'] ?? 0); + $props['point_count_abbreviated'] = $this->abbreviate($props['point_count']); + unset($props['count']); + } + $geojson['features'][] = [ - 'type' => 'Feature', - 'properties' => $feature, - "geometry" => [ - "type" => "Point", - "coordinates" => [$feature['lon'], $feature['lat']] - ] + 'type' => 'Feature', + 'properties' => $props, + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [$props['lon'], $props['lat']], + ], ]; } return $geojson; } + + /** + * Very small helper: 8300 → “8.3k”, 1250000 → “1.3M” + */ + private function abbreviate(int $n): string + { + if ($n >= 1_000_000) return round($n / 1_000_000, 1) . 'M'; + if ($n >= 1_000) return round($n / 1_000, 1) . 'k'; + return (string) $n; + } } diff --git a/app/Traits/ManagesTaggables.php b/app/Traits/ManagesTaggables.php new file mode 100644 index 000000000..e63b018d7 --- /dev/null +++ b/app/Traits/ManagesTaggables.php @@ -0,0 +1,123 @@ +attachMaterialsByKey($configuration['materials']); + } + + if (!empty($configuration['states'])) { + $this->attachStatesByKey($configuration['states']); + } + + if (!empty($configuration['brands'])) { + $this->attachBrandsByKey($configuration['brands']); + } + + if (!empty($configuration['custom_tags'])) { + $this->attachCustomTagsByKey($configuration['custom_tags']); + } + + if (!empty($configuration['sizes'])) { + $this->attachSizesByKey($configuration['sizes']); + } + } + + /** + * Attach materials by their keys + * + * @param array $materialKeys + */ + public function attachMaterialsByKey(array $materialKeys): void + { + $ids = []; + foreach ($materialKeys as $key) { + $material = Materials::firstOrCreate(['key' => $key]); + $ids[] = $material->id; + } + + if (!empty($ids) && method_exists($this, 'materials')) { + $this->materials()->syncWithoutDetaching($ids); + } + } + + /** + * Attach states by their keys + * + * @param array $stateKeys + */ + public function attachStatesByKey(array $stateKeys): void + { + $ids = []; + foreach ($stateKeys as $key) { + $state = LitterState::firstOrCreate(['key' => $key]); + $ids[] = $state->id; + } + + // Note: You'll need to add a states() relationship to CategoryObject + if (!empty($ids) && method_exists($this, 'states')) { + $this->states()->syncWithoutDetaching($ids); + } + } + + /** + * Attach brands by their keys + * + * @param array $brandKeys + */ + public function attachBrandsByKey(array $brandKeys): void + { + $ids = []; + foreach ($brandKeys as $key) { + $brand = BrandList::firstOrCreate(['key' => $key]); + $ids[] = $brand->id; + } + + if (!empty($ids) && method_exists($this, 'brands')) { + $this->brands()->syncWithoutDetaching($ids); + } + } + + /** + * Attach custom tags by their keys + * + * @param array $customTagKeys + */ + public function attachCustomTagsByKey(array $customTagKeys): void + { + $ids = []; + foreach ($customTagKeys as $key) { + $customTag = CustomTagNew::firstOrCreate(['key' => $key]); + $ids[] = $customTag->id; + } + + if (!empty($ids) && method_exists($this, 'customTags')) { + $this->customTags()->syncWithoutDetaching($ids); + } + } + + /** + * Attach sizes (treating them as special states) + * + * @param array $sizes + */ + public function attachSizesByKey(array $sizes): void + { + $stateKeys = array_map(fn($size) => 'size_' . $size, $sizes); + $this->attachStatesByKey($stateKeys); + } +} diff --git a/composer.json b/composer.json index b42a0e1a4..902c12f58 100644 --- a/composer.json +++ b/composer.json @@ -2,14 +2,13 @@ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", - "keywords": [ - "framework", - "laravel" - ], + "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.2", + "ext-exif": "*", "ext-json": "*", + "ext-redis": "*", "abraham/twitteroauth": "^3.1", "ahmedsaoud31/laravel-permission-to-vuejs": "dev-master", "anhskohbo/no-captcha": "^3.3", @@ -25,33 +24,35 @@ "laravel/passport": "^12.0", "laravel/pulse": "^1.2", "laravel/reverb": "@beta", - "laravel/sanctum": "^4.0", + "laravel/sanctum": "^4.1", "laravel/slack-notification-channel": "^3.3", "laravel/tinker": "^2.0", "laravel/ui": "^4.0", "league/flysystem-aws-s3-v3": "^3.0", "maatwebsite/excel": "^3.1", - "predis/predis": "^2.2", + "openai-php/client": "^0.10.3", "pusher/pusher-php-server": "^7.0", "spatie/browsershot": "^4.3", "spatie/emoji": "^4.0", "spatie/laravel-backup": "^8.0", "spatie/laravel-permission": "^6.0", "stripe/stripe-php": "^13.0", + "symfony/expression-language": "^6.4", "youthage/laravel-geohash": "^3.1" }, "require-dev": { - "barryvdh/laravel-debugbar": "^3.6", - "coreproc/laravel-debugbar-git-info": "^0.1.1", - "spatie/laravel-ignition": "^2.0", "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^8.1", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.0", + "spatie/laravel-ignition": "^2.0" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "php-http/discovery": false + } }, "extra": { "laravel": { @@ -87,6 +88,7 @@ ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" - ] + ], + "seed:tags": "php artisan db:seed --class='Database\\Seeders\\Tags\\CreateAllTagsSeeder'" } } diff --git a/composer.lock b/composer.lock index 2a90bd782..592eed01b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2f7807d604943b0b3bf94498f8770d17", + "content-hash": "bd2b4c38a9fd14ddc851606b1cbf7e51", "packages": [ { "name": "abraham/twitteroauth", @@ -73,12 +73,12 @@ "source": { "type": "git", "url": "https://github.com/ahmedsaoud31/laravel-permission-to-vuejs.git", - "reference": "5f481d8c44b9c546804702ed3a83bb4836779787" + "reference": "eeaf4948eab7f6adff9af928cf2e01f0190496d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ahmedsaoud31/laravel-permission-to-vuejs/zipball/5f481d8c44b9c546804702ed3a83bb4836779787", - "reference": "5f481d8c44b9c546804702ed3a83bb4836779787", + "url": "https://api.github.com/repos/ahmedsaoud31/laravel-permission-to-vuejs/zipball/eeaf4948eab7f6adff9af928cf2e01f0190496d0", + "reference": "eeaf4948eab7f6adff9af928cf2e01f0190496d0", "shasum": "" }, "require": { @@ -113,25 +113,25 @@ "issues": "https://github.com/ahmedsaoud31/laravel-permission-to-vuejs/issues", "source": "https://github.com/ahmedsaoud31/laravel-permission-to-vuejs/tree/master" }, - "time": "2024-08-07T08:19:05+00:00" + "time": "2024-09-27T12:58:37+00:00" }, { "name": "anhskohbo/no-captcha", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/anhskohbo/no-captcha.git", - "reference": "6f129419a7f0d0a1ed9849fdaaed34e6d83a03cc" + "reference": "87666572f0dbe1e3380a2e9ae7574bf3a2d0804e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/anhskohbo/no-captcha/zipball/6f129419a7f0d0a1ed9849fdaaed34e6d83a03cc", - "reference": "6f129419a7f0d0a1ed9849fdaaed34e6d83a03cc", + "url": "https://api.github.com/repos/anhskohbo/no-captcha/zipball/87666572f0dbe1e3380a2e9ae7574bf3a2d0804e", + "reference": "87666572f0dbe1e3380a2e9ae7574bf3a2d0804e", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^6.2|^7.0", - "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": ">=5.5.5" }, "require-dev": { @@ -140,12 +140,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Anhskohbo\\NoCaptcha\\NoCaptchaServiceProvider" - ], "aliases": { "NoCaptcha": "Anhskohbo\\NoCaptcha\\Facades\\NoCaptcha" - } + }, + "providers": [ + "Anhskohbo\\NoCaptcha\\NoCaptchaServiceProvider" + ] } }, "autoload": { @@ -175,22 +175,22 @@ ], "support": { "issues": "https://github.com/anhskohbo/no-captcha/issues", - "source": "https://github.com/anhskohbo/no-captcha/tree/3.6.0" + "source": "https://github.com/anhskohbo/no-captcha/tree/3.7.0" }, - "time": "2024-03-13T02:22:17+00:00" + "time": "2025-02-25T18:53:34+00:00" }, { "name": "aws/aws-crt-php", - "version": "v1.2.6", + "version": "v1.2.7", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "a63485b65b6b3367039306496d49737cf1995408" + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/a63485b65b6b3367039306496d49737cf1995408", - "reference": "a63485b65b6b3367039306496d49737cf1995408", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", "shasum": "" }, "require": { @@ -229,22 +229,22 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.6" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" }, - "time": "2024-06-13T17:21:28+00:00" + "time": "2024-10-18T22:15:13+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.322.3", + "version": "3.343.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "9a94b9a123e0a14cacd72a34c24624ab728aa398" + "reference": "d7ad5f6bdee792a16d2c9d5a3d9b56acfaaaf979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/9a94b9a123e0a14cacd72a34c24624ab728aa398", - "reference": "9a94b9a123e0a14cacd72a34c24624ab728aa398", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d7ad5f6bdee792a16d2c9d5a3d9b56acfaaaf979", + "reference": "d7ad5f6bdee792a16d2c9d5a3d9b56acfaaaf979", "shasum": "" }, "require": { @@ -252,31 +252,30 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0" + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/promises": "^2.0", + "guzzlehttp/psr7": "^2.4.5", + "mtdowling/jmespath.php": "^2.8.0", + "php": ">=8.1", + "psr/http-message": "^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", - "composer/composer": "^1.10.22", + "composer/composer": "^2.7.8", "dms/phpunit-arraysubset-asserts": "^0.4.0", "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", "ext-pcntl": "*", "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" + "psr/cache": "^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", + "symfony/filesystem": "^v6.4.0 || ^v7.1.0", + "yoast/phpunit-polyfills": "^2.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -325,11 +324,11 @@ "sdk" ], "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.322.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.343.3" }, - "time": "2024-09-23T18:11:39+00:00" + "time": "2025-05-02T18:04:58+00:00" }, { "name": "benjamincrozat/laravel-dropbox-driver", @@ -391,16 +390,16 @@ }, { "name": "brick/math", - "version": "0.12.1", + "version": "0.12.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "shasum": "" }, "require": { @@ -409,7 +408,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -439,7 +438,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" + "source": "https://github.com/brick/math/tree/0.12.3" }, "funding": [ { @@ -447,7 +446,7 @@ "type": "github" } ], - "time": "2023-11-29T23:19:16+00:00" + "time": "2025-02-28T13:11:00+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -582,26 +581,26 @@ }, { "name": "clue/redis-react", - "version": "v2.7.0", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/clue/reactphp-redis.git", - "reference": "2283690f249e8d93342dd63b5285732d2654e077" + "reference": "84569198dfd5564977d2ae6a32de4beb5a24bdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-redis/zipball/2283690f249e8d93342dd63b5285732d2654e077", - "reference": "2283690f249e8d93342dd63b5285732d2654e077", + "url": "https://api.github.com/repos/clue/reactphp-redis/zipball/84569198dfd5564977d2ae6a32de4beb5a24bdca", + "reference": "84569198dfd5564977d2ae6a32de4beb5a24bdca", "shasum": "" }, "require": { - "clue/redis-protocol": "0.3.*", + "clue/redis-protocol": "^0.3.2", "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3", "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.0 || ^1.1", - "react/promise-timer": "^1.9", - "react/socket": "^1.12" + "react/promise": "^3.2 || ^2.0 || ^1.1", + "react/promise-timer": "^1.11", + "react/socket": "^1.16" }, "require-dev": { "clue/block-react": "^1.5", @@ -634,7 +633,7 @@ ], "support": { "issues": "https://github.com/clue/reactphp-redis/issues", - "source": "https://github.com/clue/reactphp-redis/tree/v2.7.0" + "source": "https://github.com/clue/reactphp-redis/tree/v2.8.0" }, "funding": [ { @@ -646,20 +645,20 @@ "type": "github" } ], - "time": "2024-01-05T15:54:20+00:00" + "time": "2025-01-03T16:18:33+00:00" }, { "name": "composer/ca-bundle", - "version": "1.5.1", + "version": "1.5.6", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a" + "reference": "f65c239c970e7f072f067ab78646e9f0b2935175" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a", - "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/f65c239c970e7f072f067ab78646e9f0b2935175", + "reference": "f65c239c970e7f072f067ab78646e9f0b2935175", "shasum": "" }, "require": { @@ -669,8 +668,8 @@ }, "require-dev": { "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^4.2 || ^5", "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", @@ -706,7 +705,86 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.1" + "source": "https://github.com/composer/ca-bundle/tree/1.5.6" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2025-03-06T14:30:56+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -722,7 +800,7 @@ "type": "tidelift" } ], - "time": "2024-07-08T15:28:20+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", @@ -1042,16 +1120,16 @@ }, { "name": "doctrine/dbal", - "version": "3.9.1", + "version": "3.9.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", "shasum": "" }, "require": { @@ -1067,15 +1145,13 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.12.0", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "9.6.20", - "psalm/plugin-phpunit": "0.18.4", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.22", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0", - "vimeo/psalm": "4.30.0" + "symfony/console": "^4.4|^5.4|^6.0|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -1135,7 +1211,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.1" + "source": "https://github.com/doctrine/dbal/tree/3.9.4" }, "funding": [ { @@ -1151,33 +1227,34 @@ "type": "tidelift" } ], - "time": "2024-09-01T13:49:23+00:00" + "time": "2025-01-16T08:28:55+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -1185,7 +1262,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1196,9 +1273,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/event-manager", @@ -1461,16 +1538,16 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.4.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", "shasum": "" }, "require": { @@ -1478,9 +1555,9 @@ }, "require-dev": { "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" + "phpunit/phpunit": "^10.5" }, "bin": [ "bin/sql-formatter" @@ -1510,22 +1587,22 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" }, - "time": "2024-08-05T20:32:22+00:00" + "time": "2025-01-24T11:45:48+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + "reference": "8c784d071debd117328803d86b2097615b457500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", "shasum": "" }, "require": { @@ -1538,10 +1615,14 @@ "require-dev": { "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -1565,7 +1646,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" }, "funding": [ { @@ -1573,20 +1654,20 @@ "type": "github" } ], - "time": "2023-08-10T19:36:49+00:00" + "time": "2024-10-09T13:47:03+00:00" }, { "name": "egulias/email-validator", - "version": "4.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -1632,7 +1713,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1640,7 +1721,7 @@ "type": "github" } ], - "time": "2023-10-06T06:47:41+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "evenement/evenement", @@ -1691,20 +1772,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.17.0", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1746,22 +1827,22 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2024-11-01T03:51:45+00:00" }, { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -1809,22 +1890,22 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.11.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", + "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", "shasum": "" }, "require": { @@ -1872,9 +1953,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.11.1" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2025-04-09T20:32:01+00:00" }, { "name": "fruitcake/php-cors", @@ -1949,25 +2030,25 @@ }, { "name": "graham-campbell/guzzle-factory", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Guzzle-Factory.git", - "reference": "134f6ca38ad0c948ed7c22552a286bb56b5a5b35" + "reference": "b0a273dabe1f90004e76ca4ab8671b10caaa1dd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/134f6ca38ad0c948ed7c22552a286bb56b5a5b35", - "reference": "134f6ca38ad0c948ed7c22552a286bb56b5a5b35", + "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/b0a273dabe1f90004e76ca4ab8671b10caaa1dd3", + "reference": "b0a273dabe1f90004e76ca4ab8671b10caaa1dd3", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^7.8.1", - "guzzlehttp/psr7": "^2.6.2", + "guzzlehttp/guzzle": "^7.9.2", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.4.15 || ^8.0.2" }, "require-dev": { - "graham-campbell/analyzer": "^4.1", + "graham-campbell/analyzer": "^4.2.1", "phpunit/phpunit": "^9.6.14 || ^10.5.1" }, "type": "library", @@ -1998,7 +2079,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Guzzle-Factory/issues", - "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/v7.0.1" + "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/v7.0.2" }, "funding": [ { @@ -2010,7 +2091,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:50:24+00:00" + "time": "2025-01-12T01:44:21+00:00" }, { "name": "graham-campbell/result-type", @@ -2076,16 +2157,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.9.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", "shasum": "" }, "require": { @@ -2182,7 +2263,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" }, "funding": [ { @@ -2198,20 +2279,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-03-27T13:37:11+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.3", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "shasum": "" }, "require": { @@ -2265,7 +2346,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" + "source": "https://github.com/guzzle/promises/tree/2.2.0" }, "funding": [ { @@ -2281,20 +2362,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T10:29:17+00:00" + "time": "2025-03-27T13:27:01+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "shasum": "" }, "require": { @@ -2381,7 +2462,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.7.1" }, "funding": [ { @@ -2397,20 +2478,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2025-03-27T12:30:47+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", "shasum": "" }, "require": { @@ -2467,7 +2548,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" }, "funding": [ { @@ -2483,7 +2564,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T19:50:20+00:00" + "time": "2025-02-03T10:55:03+00:00" }, { "name": "intervention/image", @@ -2515,16 +2596,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], "aliases": { "Image": "Intervention\\Image\\Facades\\Image" - } + }, + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.4-dev" } }, "autoload": { @@ -2616,13 +2697,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "15.x-dev" - }, "laravel": { "providers": [ "Laravel\\Cashier\\CashierServiceProvider" ] + }, + "branch-alias": { + "dev-master": "15.x-dev" } }, "autoload": { @@ -2659,23 +2740,23 @@ }, { "name": "laravel/framework", - "version": "v11.23.5", + "version": "v11.44.7", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453" + "reference": "00bc6ac91a6d577bf051c18ddaa638c0d221e1c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", - "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", + "url": "https://api.github.com/repos/laravel/framework/zipball/00bc6ac91a6d577bf051c18ddaa638c0d221e1c7", + "reference": "00bc6ac91a6d577bf051c18ddaa638c0d221e1c7", "shasum": "" }, "require": { "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -2685,38 +2766,39 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18", - "laravel/serializable-closure": "^1.3", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.6", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.6|^3.8.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0", - "symfony/error-handler": "^7.0", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mailer": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0", - "symfony/routing": "^7.0", - "symfony/uid": "^7.0", - "symfony/var-dumper": "^7.0", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.2.0", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { - "mockery/mockery": "1.6.8", "tightenco/collect": "<5.5.33" }, "provide": { @@ -2763,29 +2845,33 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.23", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.6", - "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.4.0", - "pda/pheanstalk": "^5.0", - "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "orchestra/testbench-core": "^9.11.2", + "pda/pheanstalk": "^5.0.6", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1", + "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.0" + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", @@ -2799,16 +2885,16 @@ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.3.6|^12.0.1).", + "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", @@ -2827,11 +2913,13 @@ }, "autoload": { "files": [ + "src/Illuminate/Collections/functions.php", "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { @@ -2863,24 +2951,24 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-09-13T13:36:30+00:00" + "time": "2025-04-25T12:40:47+00:00" }, { "name": "laravel/helpers", - "version": "v1.7.0", + "version": "v1.7.2", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "6caaa242a23bc39b4e3cf57304b5409260a7a346" + "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/6caaa242a23bc39b4e3cf57304b5409260a7a346", - "reference": "6caaa242a23bc39b4e3cf57304b5409260a7a346", + "url": "https://api.github.com/repos/laravel/helpers/zipball/672d79d5b5f65dc821e57783fa11f22c4d762d70", + "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70", "shasum": "" }, "require": { - "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.0|^8.0" }, "require-dev": { @@ -2918,43 +3006,44 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.7.0" + "source": "https://github.com/laravel/helpers/tree/v1.7.2" }, - "time": "2023-11-30T14:09:05+00:00" + "time": "2025-01-24T15:41:25+00:00" }, { "name": "laravel/horizon", - "version": "v5.28.1", + "version": "v5.31.2", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "9d2c4eaeb11408384401f8a7d1b0ea4c76554f3f" + "reference": "e6068c65be6c02a01e34531abf3143fab91f0de0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/9d2c4eaeb11408384401f8a7d1b0ea4c76554f3f", - "reference": "9d2c4eaeb11408384401f8a7d1b0ea4c76554f3f", + "url": "https://api.github.com/repos/laravel/horizon/zipball/e6068c65be6c02a01e34531abf3143fab91f0de0", + "reference": "e6068c65be6c02a01e34531abf3143fab91f0de0", "shasum": "" }, "require": { "ext-json": "*", "ext-pcntl": "*", "ext-posix": "*", - "illuminate/contracts": "^9.21|^10.0|^11.0", - "illuminate/queue": "^9.21|^10.0|^11.0", - "illuminate/support": "^9.21|^10.0|^11.0", + "illuminate/contracts": "^9.21|^10.0|^11.0|^12.0", + "illuminate/queue": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", "nesbot/carbon": "^2.17|^3.0", "php": "^8.0", "ramsey/uuid": "^4.0", "symfony/console": "^6.0|^7.0", "symfony/error-handler": "^6.0|^7.0", + "symfony/polyfill-php83": "^1.28", "symfony/process": "^6.0|^7.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.0|^10.4", + "phpunit/phpunit": "^9.0|^10.4|^11.5", "predis/predis": "^1.1|^2.0" }, "suggest": { @@ -2963,16 +3052,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - }, "laravel": { - "providers": [ - "Laravel\\Horizon\\HorizonServiceProvider" - ], "aliases": { "Horizon": "Laravel\\Horizon\\Horizon" - } + }, + "providers": [ + "Laravel\\Horizon\\HorizonServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "5.x-dev" } }, "autoload": { @@ -2997,36 +3086,36 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.28.1" + "source": "https://github.com/laravel/horizon/tree/v5.31.2" }, - "time": "2024-09-04T14:06:50+00:00" + "time": "2025-04-18T12:57:39+00:00" }, { "name": "laravel/passport", - "version": "v12.3.0", + "version": "v12.4.2", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "ca63a86697a4fa091c7dcabe88ebba91d97c785d" + "reference": "65a885607b62d361aedaeb10a946bc6b5a954262" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/ca63a86697a4fa091c7dcabe88ebba91d97c785d", - "reference": "ca63a86697a4fa091c7dcabe88ebba91d97c785d", + "url": "https://api.github.com/repos/laravel/passport/zipball/65a885607b62d361aedaeb10a946bc6b5a954262", + "reference": "65a885607b62d361aedaeb10a946bc6b5a954262", "shasum": "" }, "require": { "ext-json": "*", "firebase/php-jwt": "^6.4", - "illuminate/auth": "^9.21|^10.0|^11.0", - "illuminate/console": "^9.21|^10.0|^11.0", - "illuminate/container": "^9.21|^10.0|^11.0", - "illuminate/contracts": "^9.21|^10.0|^11.0", - "illuminate/cookie": "^9.21|^10.0|^11.0", - "illuminate/database": "^9.21|^10.0|^11.0", - "illuminate/encryption": "^9.21|^10.0|^11.0", - "illuminate/http": "^9.21|^10.0|^11.0", - "illuminate/support": "^9.21|^10.0|^11.0", + "illuminate/auth": "^9.21|^10.0|^11.0|^12.0", + "illuminate/console": "^9.21|^10.0|^11.0|^12.0", + "illuminate/container": "^9.21|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.21|^10.0|^11.0|^12.0", + "illuminate/cookie": "^9.21|^10.0|^11.0|^12.0", + "illuminate/database": "^9.21|^10.0|^11.0|^12.0", + "illuminate/encryption": "^9.21|^10.0|^11.0|^12.0", + "illuminate/http": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", "lcobucci/jwt": "^4.3|^5.0", "league/oauth2-server": "^8.5.3", "nyholm/psr7": "^1.5", @@ -3037,9 +3126,9 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.35|^8.14|^9.0", + "orchestra/testbench": "^7.35|^8.14|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.3|^10.5" + "phpunit/phpunit": "^9.3|^10.5|^11.5" }, "type": "library", "extra": { @@ -3075,25 +3164,25 @@ "issues": "https://github.com/laravel/passport/issues", "source": "https://github.com/laravel/passport" }, - "time": "2024-08-05T13:44:51+00:00" + "time": "2025-02-12T16:11:33+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.25", + "version": "v0.3.5", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", "shasum": "" }, "require": { + "composer-runtime-api": "^2.2", "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", "php": "^8.1", "symfony/console": "^6.2|^7.0" }, @@ -3102,8 +3191,9 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", + "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, @@ -3113,7 +3203,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.1.x-dev" + "dev-main": "0.3.x-dev" } }, "autoload": { @@ -3131,40 +3221,40 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" + "source": "https://github.com/laravel/prompts/tree/v0.3.5" }, - "time": "2024-08-12T22:06:33+00:00" + "time": "2025-02-11T13:34:40+00:00" }, { "name": "laravel/pulse", - "version": "v1.2.5", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/laravel/pulse.git", - "reference": "0c0c91fd05acc537f6324b271709670ffc201e59" + "reference": "b3cf86e88fa78ea8e6aeb86a7d9ea25ba2c1d31f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pulse/zipball/0c0c91fd05acc537f6324b271709670ffc201e59", - "reference": "0c0c91fd05acc537f6324b271709670ffc201e59", + "url": "https://api.github.com/repos/laravel/pulse/zipball/b3cf86e88fa78ea8e6aeb86a7d9ea25ba2c1d31f", + "reference": "b3cf86e88fa78ea8e6aeb86a7d9ea25ba2c1d31f", "shasum": "" }, "require": { "doctrine/sql-formatter": "^1.4.1", "guzzlehttp/promises": "^1.0|^2.0", - "illuminate/auth": "^10.48.4|^11.0.8", - "illuminate/cache": "^10.48.4|^11.0.8", - "illuminate/config": "^10.48.4|^11.0.8", - "illuminate/console": "^10.48.4|^11.0.8", - "illuminate/contracts": "^10.48.4|^11.0.8", - "illuminate/database": "^10.48.4|^11.0.8", - "illuminate/events": "^10.48.4|^11.0.8", - "illuminate/http": "^10.48.4|^11.0.8", - "illuminate/queue": "^10.48.4|^11.0.8", - "illuminate/redis": "^10.48.4|^11.0.8", - "illuminate/routing": "^10.48.4|^11.0.8", - "illuminate/support": "^10.48.4|^11.0.8", - "illuminate/view": "^10.48.4|^11.0.8", + "illuminate/auth": "^10.48.4|^11.0.8|^12.0", + "illuminate/cache": "^10.48.4|^11.0.8|^12.0", + "illuminate/config": "^10.48.4|^11.0.8|^12.0", + "illuminate/console": "^10.48.4|^11.0.8|^12.0", + "illuminate/contracts": "^10.48.4|^11.0.8|^12.0", + "illuminate/database": "^10.48.4|^11.0.8|^12.0", + "illuminate/events": "^10.48.4|^11.0.8|^12.0", + "illuminate/http": "^10.48.4|^11.0.8|^12.0", + "illuminate/queue": "^10.48.4|^11.0.8|^12.0", + "illuminate/redis": "^10.48.4|^11.0.8|^12.0", + "illuminate/routing": "^10.48.4|^11.0.8|^12.0", + "illuminate/support": "^10.48.4|^11.0.8|^12.0", + "illuminate/view": "^10.48.4|^11.0.8|^12.0", "livewire/livewire": "^3.4.9", "nesbot/carbon": "^2.67|^3.0", "php": "^8.1", @@ -3176,24 +3266,24 @@ "require-dev": { "guzzlehttp/guzzle": "^7.7", "mockery/mockery": "^1.0", - "orchestra/testbench": "^8.23.1|^9.0", + "orchestra/testbench": "^8.23.1|^9.0|^10.0", "pestphp/pest": "^2.0", "pestphp/pest-plugin-laravel": "^2.2", - "phpstan/phpstan": "^1.11", + "phpstan/phpstan": "^1.12.21", "predis/predis": "^1.0|^2.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, "laravel": { - "providers": [ - "Laravel\\Pulse\\PulseServiceProvider" - ], "aliases": { "Pulse": "Laravel\\Pulse\\Facades\\Pulse" - } + }, + "providers": [ + "Laravel\\Pulse\\PulseServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" } }, "autoload": { @@ -3220,41 +3310,41 @@ "issues": "https://github.com/laravel/pulse/issues", "source": "https://github.com/laravel/pulse" }, - "time": "2024-09-03T09:21:52+00:00" + "time": "2025-03-30T16:25:37+00:00" }, { "name": "laravel/reverb", - "version": "v1.3.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/laravel/reverb.git", - "reference": "46bb5dd0b14ba0ae9d3dd740e60bca279b689a63" + "reference": "bf84766ad35d9174fb508147f956e8bcf2e46e91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/reverb/zipball/46bb5dd0b14ba0ae9d3dd740e60bca279b689a63", - "reference": "46bb5dd0b14ba0ae9d3dd740e60bca279b689a63", + "url": "https://api.github.com/repos/laravel/reverb/zipball/bf84766ad35d9174fb508147f956e8bcf2e46e91", + "reference": "bf84766ad35d9174fb508147f956e8bcf2e46e91", "shasum": "" }, "require": { "clue/redis-react": "^2.6", "guzzlehttp/psr7": "^2.6", - "illuminate/console": "^10.47|^11.0", - "illuminate/contracts": "^10.47|^11.0", - "illuminate/http": "^10.47|^11.0", - "illuminate/support": "^10.47|^11.0", - "laravel/prompts": "^0.1.15", + "illuminate/console": "^10.47|^11.0|^12.0", + "illuminate/contracts": "^10.47|^11.0|^12.0", + "illuminate/http": "^10.47|^11.0|^12.0", + "illuminate/support": "^10.47|^11.0|^12.0", + "laravel/prompts": "^0.1.15|^0.2.0|^0.3.0", "php": "^8.2", "pusher/pusher-php-server": "^7.2", - "ratchet/rfc6455": "^0.3.1", + "ratchet/rfc6455": "^0.4", "react/promise-timer": "^1.10", "react/socket": "^1.14", "symfony/console": "^6.0|^7.0", "symfony/http-foundation": "^6.3|^7.0" }, "require-dev": { - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^2.0", + "orchestra/testbench": "^8.0|^9.0|^10.0", + "pestphp/pest": "^2.0|^3.0", "phpstan/phpstan": "^1.10", "ratchet/pawl": "^0.4.1", "react/async": "^4.2", @@ -3263,13 +3353,13 @@ "type": "library", "extra": { "laravel": { + "aliases": { + "Output": "Laravel\\Reverb\\Output" + }, "providers": [ "Laravel\\Reverb\\ApplicationManagerServiceProvider", "Laravel\\Reverb\\ReverbServiceProvider" - ], - "aliases": { - "Output": "Laravel\\Reverb\\Output" - } + ] } }, "autoload": { @@ -3300,38 +3390,38 @@ ], "support": { "issues": "https://github.com/laravel/reverb/issues", - "source": "https://github.com/laravel/reverb/tree/v1.3.0" + "source": "https://github.com/laravel/reverb/tree/v1.5.0" }, - "time": "2024-09-03T10:04:47+00:00" + "time": "2025-03-31T14:06:47+00:00" }, { "name": "laravel/sanctum", - "version": "v4.0.2", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "9cfc0ce80cabad5334efff73ec856339e8ec1ac1" + "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/9cfc0ce80cabad5334efff73ec856339e8ec1ac1", - "reference": "9cfc0ce80cabad5334efff73ec856339e8ec1ac1", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/a360a6a1fd2400ead4eb9b6a9c1bb272939194f5", + "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/database": "^11.0", - "illuminate/support": "^11.0", + "illuminate/console": "^11.0|^12.0", + "illuminate/contracts": "^11.0|^12.0", + "illuminate/database": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", "php": "^8.2", "symfony/console": "^7.0" }, "require-dev": { "mockery/mockery": "^1.6", - "orchestra/testbench": "^9.0", + "orchestra/testbench": "^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -3366,36 +3456,36 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2024-04-10T19:39:58+00:00" + "time": "2025-04-23T13:03:38+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.4", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81" + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "illuminate/support": "^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -3427,44 +3517,44 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-08-02T07:48:17+00:00" + "time": "2025-03-19T13:51:03+00:00" }, { "name": "laravel/slack-notification-channel", - "version": "v3.3.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "5e04e4a0834b84650a207a76b7a67de8156d0b04" + "reference": "b9448136c2e93f51f0d603d05d6bf64412e5727c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/5e04e4a0834b84650a207a76b7a67de8156d0b04", - "reference": "5e04e4a0834b84650a207a76b7a67de8156d0b04", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/b9448136c2e93f51f0d603d05d6bf64412e5727c", + "reference": "b9448136c2e93f51f0d603d05d6bf64412e5727c", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^7.0", - "illuminate/http": "^9.0|^10.0|^11.0", - "illuminate/notifications": "^9.0|^10.0|^11.0", - "illuminate/support": "^9.0|^10.0|^11.0", + "illuminate/http": "^9.0|^10.0|^11.0|^12.0", + "illuminate/notifications": "^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^9.0|^10.0|^11.0|^12.0", "php": "^8.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.0|^10.4" + "phpunit/phpunit": "^9.0|^10.4|^11.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - }, "laravel": { "providers": [ "Illuminate\\Notifications\\SlackChannelServiceProvider" ] + }, + "branch-alias": { + "dev-master": "3.x-dev" } }, "autoload": { @@ -3490,28 +3580,28 @@ ], "support": { "issues": "https://github.com/laravel/slack-notification-channel/issues", - "source": "https://github.com/laravel/slack-notification-channel/tree/v3.3.2" + "source": "https://github.com/laravel/slack-notification-channel/tree/v3.5.0" }, - "time": "2024-09-04T06:56:09+00:00" + "time": "2025-02-23T14:43:55+00:00" }, { "name": "laravel/tinker", - "version": "v2.9.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.11.1|^0.12.0", "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" @@ -3519,10 +3609,10 @@ "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { @@ -3556,45 +3646,45 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.9.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2024-01-04T16:10:04+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "laravel/ui", - "version": "v4.5.2", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "c75396f63268c95b053c8e4814eb70e0875e9628" + "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/c75396f63268c95b053c8e4814eb70e0875e9628", - "reference": "c75396f63268c95b053c8e4814eb70e0875e9628", + "url": "https://api.github.com/repos/laravel/ui/zipball/7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", + "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", "shasum": "" }, "require": { - "illuminate/console": "^9.21|^10.0|^11.0", - "illuminate/filesystem": "^9.21|^10.0|^11.0", - "illuminate/support": "^9.21|^10.0|^11.0", - "illuminate/validation": "^9.21|^10.0|^11.0", + "illuminate/console": "^9.21|^10.0|^11.0|^12.0", + "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", + "illuminate/validation": "^9.21|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.35|^8.15|^9.0", - "phpunit/phpunit": "^9.3|^10.4|^11.0" + "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0", + "phpunit/phpunit": "^9.3|^10.4|^11.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - }, "laravel": { "providers": [ "Laravel\\Ui\\UiServiceProvider" ] + }, + "branch-alias": { + "dev-master": "4.x-dev" } }, "autoload": { @@ -3619,40 +3709,40 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v4.5.2" + "source": "https://github.com/laravel/ui/tree/v4.6.1" }, - "time": "2024-05-08T18:07:10+00:00" + "time": "2025-01-28T15:15:29+00:00" }, { "name": "lcobucci/clock", - "version": "3.2.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", - "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.27", - "lcobucci/coding-standard": "^11.0.0", + "infection/infection": "^0.29", + "lcobucci/coding-standard": "^11.1.0", "phpstan/extension-installer": "^1.3.1", "phpstan/phpstan": "^1.10.25", "phpstan/phpstan-deprecation-rules": "^1.1.3", "phpstan/phpstan-phpunit": "^1.3.13", "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^10.2.3" + "phpunit/phpunit": "^11.3.6" }, "type": "library", "autoload": { @@ -3673,7 +3763,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.2.0" + "source": "https://github.com/lcobucci/clock/tree/3.3.1" }, "funding": [ { @@ -3685,42 +3775,42 @@ "type": "patreon" } ], - "time": "2023-11-17T17:00:27+00:00" + "time": "2024-09-24T20:45:14+00:00" }, { "name": "lcobucci/jwt", - "version": "5.3.0", + "version": "5.5.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "08071d8d2c7f4b00222cc4b1fb6aa46990a80f83" + "reference": "a835af59b030d3f2967725697cf88300f579088e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/08071d8d2c7f4b00222cc4b1fb6aa46990a80f83", - "reference": "08071d8d2c7f4b00222cc4b1fb6aa46990a80f83", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a835af59b030d3f2967725697cf88300f579088e", + "reference": "a835af59b030d3f2967725697cf88300f579088e", "shasum": "" }, "require": { "ext-openssl": "*", "ext-sodium": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "psr/clock": "^1.0" }, "require-dev": { - "infection/infection": "^0.27.0", - "lcobucci/clock": "^3.0", + "infection/infection": "^0.29", + "lcobucci/clock": "^3.2", "lcobucci/coding-standard": "^11.0", - "phpbench/phpbench": "^1.2.9", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.2", "phpstan/phpstan": "^1.10.7", "phpstan/phpstan-deprecation-rules": "^1.1.3", "phpstan/phpstan-phpunit": "^1.3.10", "phpstan/phpstan-strict-rules": "^1.5.0", - "phpunit/phpunit": "^10.2.6" + "phpunit/phpunit": "^11.1" }, "suggest": { - "lcobucci/clock": ">= 3.0" + "lcobucci/clock": ">= 3.2" }, "type": "library", "autoload": { @@ -3746,7 +3836,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.3.0" + "source": "https://github.com/lcobucci/jwt/tree/5.5.0" }, "funding": [ { @@ -3758,20 +3848,20 @@ "type": "patreon" } ], - "time": "2024-04-11T23:07:54+00:00" + "time": "2025-01-26T21:29:45+00:00" }, { "name": "league/commonmark", - "version": "2.5.3", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + "reference": "06c3b0bf2540338094575612f4a1778d0d2d5e94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/06c3b0bf2540338094575612f4a1778d0d2d5e94", + "reference": "06c3b0bf2540338094575612f4a1778d0d2d5e94", "shasum": "" }, "require": { @@ -3796,8 +3886,9 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -3807,7 +3898,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.6-dev" + "dev-main": "2.7-dev" } }, "autoload": { @@ -3864,7 +3955,7 @@ "type": "tidelift" } ], - "time": "2024-08-16T11:46:16+00:00" + "time": "2025-04-18T21:09:27+00:00" }, { "name": "league/config", @@ -3950,20 +4041,20 @@ }, { "name": "league/event", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/thephpleague/event.git", - "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" + "reference": "062ebb450efbe9a09bc2478e89b7c933875b0935" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", - "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "url": "https://api.github.com/repos/thephpleague/event/zipball/062ebb450efbe9a09bc2478e89b7c933875b0935", + "reference": "062ebb450efbe9a09bc2478e89b7c933875b0935", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=7.1.0" }, "require-dev": { "henrikbjorn/phpspec-code-coverage": "~1.0.1", @@ -3998,22 +4089,22 @@ ], "support": { "issues": "https://github.com/thephpleague/event/issues", - "source": "https://github.com/thephpleague/event/tree/master" + "source": "https://github.com/thephpleague/event/tree/2.3.0" }, - "time": "2018-11-26T11:52:41+00:00" + "time": "2025-03-14T19:51:10+00:00" }, { "name": "league/flysystem", - "version": "3.28.0", + "version": "3.29.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", "shasum": "" }, "require": { @@ -4081,22 +4172,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" }, - "time": "2024-05-22T10:09:12+00:00" + "time": "2024-10-08T08:58:34+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8" + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", "shasum": "" }, "require": { @@ -4136,22 +4227,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-17T13:10:48+00:00" }, { "name": "league/flysystem-local", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", "shasum": "" }, "require": { @@ -4185,9 +4276,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/mime-type-detection", @@ -4247,16 +4338,16 @@ }, { "name": "league/oauth2-server", - "version": "8.5.4", + "version": "8.5.5", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "ab7714d073844497fd222d5d0a217629089936bc" + "reference": "cc8778350f905667e796b3c2364a9d3bd7a73518" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/ab7714d073844497fd222d5d0a217629089936bc", - "reference": "ab7714d073844497fd222d5d0a217629089936bc", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/cc8778350f905667e796b3c2364a9d3bd7a73518", + "reference": "cc8778350f905667e796b3c2364a9d3bd7a73518", "shasum": "" }, "require": { @@ -4323,7 +4414,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.4" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.5" }, "funding": [ { @@ -4331,24 +4422,24 @@ "type": "github" } ], - "time": "2023-08-25T22:35:12+00:00" + "time": "2024-12-20T23:06:10+00:00" }, { "name": "league/uri", - "version": "7.4.1", + "version": "7.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + "reference": "81fb5145d2644324614cc532b28efd0215bda430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.3", + "league/uri-interfaces": "^7.5", "php": "^8.1" }, "conflict": { @@ -4413,7 +4504,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.1" + "source": "https://github.com/thephpleague/uri/tree/7.5.1" }, "funding": [ { @@ -4421,20 +4512,20 @@ "type": "github" } ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-12-08T08:40:02+00:00" }, { "name": "league/uri-interfaces", - "version": "7.4.1", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", "shasum": "" }, "require": { @@ -4497,7 +4588,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" }, "funding": [ { @@ -4505,28 +4596,28 @@ "type": "github" } ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-12-08T08:18:47+00:00" }, { "name": "livewire/livewire", - "version": "v3.5.8", + "version": "v3.6.3", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "ce1ce71b39a3492b98f7d2f2a4583f1b163fe6ae" + "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/ce1ce71b39a3492b98f7d2f2a4583f1b163fe6ae", - "reference": "ce1ce71b39a3492b98f7d2f2a4583f1b163fe6ae", + "url": "https://api.github.com/repos/livewire/livewire/zipball/56aa1bb63a46e06181c56fa64717a7287e19115e", + "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e", "shasum": "" }, "require": { - "illuminate/database": "^10.0|^11.0", - "illuminate/routing": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "illuminate/validation": "^10.0|^11.0", - "laravel/prompts": "^0.1.24", + "illuminate/database": "^10.0|^11.0|^12.0", + "illuminate/routing": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "illuminate/validation": "^10.0|^11.0|^12.0", + "laravel/prompts": "^0.1.24|^0.2|^0.3", "league/mime-type-detection": "^1.9", "php": "^8.1", "symfony/console": "^6.0|^7.0", @@ -4534,22 +4625,22 @@ }, "require-dev": { "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.15.0|^11.0", + "laravel/framework": "^10.15.0|^11.0|^12.0", "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^8.21.0|^9.0", - "orchestra/testbench-dusk": "^8.24|^9.1", - "phpunit/phpunit": "^10.4", + "orchestra/testbench": "^8.21.0|^9.0|^10.0", + "orchestra/testbench-dusk": "^8.24|^9.1|^10.0", + "phpunit/phpunit": "^10.4|^11.5", "psy/psysh": "^0.11.22|^0.12" }, "type": "library", "extra": { "laravel": { - "providers": [ - "Livewire\\LivewireServiceProvider" - ], "aliases": { "Livewire": "Livewire\\Livewire" - } + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] } }, "autoload": { @@ -4573,7 +4664,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.8" + "source": "https://github.com/livewire/livewire/tree/v3.6.3" }, "funding": [ { @@ -4581,44 +4672,44 @@ "type": "github" } ], - "time": "2024-09-20T19:41:19+00:00" + "time": "2025-04-12T22:26:52+00:00" }, { "name": "maatwebsite/excel", - "version": "3.1.58", + "version": "3.1.64", "source": { "type": "git", "url": "https://github.com/SpartnerNL/Laravel-Excel.git", - "reference": "18495a71b112f43af8ffab35111a58b4e4ba4a4d" + "reference": "e25d44a2d91da9179cd2d7fec952313548597a79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/18495a71b112f43af8ffab35111a58b4e4ba4a4d", - "reference": "18495a71b112f43af8ffab35111a58b4e4ba4a4d", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/e25d44a2d91da9179cd2d7fec952313548597a79", + "reference": "e25d44a2d91da9179cd2d7fec952313548597a79", "shasum": "" }, "require": { "composer/semver": "^3.3", "ext-json": "*", - "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0", + "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0||^12.0", "php": "^7.0||^8.0", - "phpoffice/phpspreadsheet": "^1.29.1", + "phpoffice/phpspreadsheet": "^1.29.9", "psr/simple-cache": "^1.0||^2.0||^3.0" }, "require-dev": { "laravel/scout": "^7.0||^8.0||^9.0||^10.0", - "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0", + "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0||^10.0", "predis/predis": "^1.1" }, "type": "library", "extra": { "laravel": { - "providers": [ - "Maatwebsite\\Excel\\ExcelServiceProvider" - ], "aliases": { "Excel": "Maatwebsite\\Excel\\Facades\\Excel" - } + }, + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ] } }, "autoload": { @@ -4650,7 +4741,7 @@ ], "support": { "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", - "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.58" + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.64" }, "funding": [ { @@ -4662,35 +4753,36 @@ "type": "github" } ], - "time": "2024-09-07T13:53:36+00:00" + "time": "2025-02-24T11:12:50+00:00" }, { "name": "maennchen/zipstream-php", - "version": "3.1.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1" + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/b8174494eda667f7d13876b4a7bfef0f62a7c0d1", - "reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f", "shasum": "" }, "require": { "ext-mbstring": "*", "ext-zlib": "*", - "php-64bit": "^8.1" + "php-64bit": "^8.2" }, "require-dev": { + "brianium/paratest": "^7.7", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.16", "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", "php-coveralls/php-coveralls": "^2.5", - "phpunit/phpunit": "^10.0", - "vimeo/psalm": "^5.0" + "phpunit/phpunit": "^11.0", + "vimeo/psalm": "^6.0" }, "suggest": { "guzzlehttp/psr7": "^2.4", @@ -4731,19 +4823,15 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.0" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2" }, "funding": [ { "url": "https://github.com/maennchen", "type": "github" - }, - { - "url": "https://opencollective.com/zipstream", - "type": "open_collective" } ], - "time": "2023-06-21T14:59:35+00:00" + "time": "2025-01-27T12:07:53+00:00" }, { "name": "markbaker/complex", @@ -4854,23 +4942,23 @@ }, { "name": "moneyphp/money", - "version": "v4.5.0", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "a1daa7daf159b4044e3d0c34c41fe2be5860e850" + "reference": "af048f0206d3b39b8fad9de6a230cedf765365fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/a1daa7daf159b4044e3d0c34c41fe2be5860e850", - "reference": "a1daa7daf159b4044e3d0c34c41fe2be5860e850", + "url": "https://api.github.com/repos/moneyphp/money/zipball/af048f0206d3b39b8fad9de6a230cedf765365fa", + "reference": "af048f0206d3b39b8fad9de6a230cedf765365fa", "shasum": "" }, "require": { "ext-bcmath": "*", "ext-filter": "*", "ext-json": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cache/taggable-cache": "^1.1.0", @@ -4885,10 +4973,12 @@ "php-http/message": "^1.16.0", "php-http/mock-client": "^1.6.0", "phpbench/phpbench": "^1.2.5", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1.9", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^10.5.9", - "psalm/plugin-phpunit": "^0.18.4", "psr/cache": "^1.0.1 || ^2.0 || ^3.0", - "vimeo/psalm": "~5.20.0" + "ticketswap/phpstan-error-formatter": "^1.1" }, "suggest": { "ext-gmp": "Calculate without integer limits", @@ -4936,22 +5026,22 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.5.0" + "source": "https://github.com/moneyphp/money/tree/v4.7.0" }, - "time": "2024-02-15T19:47:21+00:00" + "time": "2025-04-03T08:26:36+00:00" }, { "name": "monolog/monolog", - "version": "3.7.0", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -4971,12 +5061,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -5027,7 +5119,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -5039,7 +5131,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:40:51+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "mtdowling/jmespath.php", @@ -5109,20 +5201,20 @@ }, { "name": "nesbot/carbon", - "version": "3.8.0", + "version": "3.9.1", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "ced71f79398ece168e24f7f7710462f462310d4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ced71f79398ece168e24f7f7710462f462310d4d", + "reference": "ced71f79398ece168e24f7f7710462f462310d4d", "shasum": "" }, "require": { - "carbonphp/carbon-doctrine-types": "*", + "carbonphp/carbon-doctrine-types": "<100.0", "ext-json": "*", "php": "^8.1", "psr/clock": "^1.0", @@ -5150,10 +5242,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -5163,6 +5251,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -5194,8 +5286,8 @@ ], "support": { "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" }, "funding": [ { @@ -5211,28 +5303,28 @@ "type": "tidelift" } ], - "time": "2024-08-19T06:22:39+00:00" + "time": "2025-05-01T19:51:51+00:00" }, { "name": "nette/schema", - "version": "v1.3.0", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.3" + "php": "8.1 - 8.4" }, "require-dev": { - "nette/tester": "^2.4", + "nette/tester": "^2.5.2", "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.8" }, @@ -5271,22 +5363,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.0" + "source": "https://github.com/nette/schema/tree/v1.3.2" }, - "time": "2023-12-11T11:54:22+00:00" + "time": "2024-10-06T23:10:23+00:00" }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "ce708655043c7050eb050df361c5e313cf708309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", + "reference": "ce708655043c7050eb050df361c5e313cf708309", "shasum": "" }, "require": { @@ -5357,22 +5449,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.0.6" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2025-03-30T21:06:30+00:00" }, { "name": "nikic/php-parser", - "version": "v5.2.0", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", - "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -5415,38 +5507,37 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-09-15T16:40:33+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "nunomaduro/termwind", - "version": "v2.1.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.0.4" + "symfony/console": "^7.1.8" }, "require-dev": { - "ergebnis/phpstan-rules": "^2.2.0", - "illuminate/console": "^11.1.1", - "laravel/pint": "^1.15.0", - "mockery/mockery": "^1.6.11", - "pestphp/pest": "^2.34.6", - "phpstan/phpstan": "^1.10.66", - "phpstan/phpstan-strict-rules": "^1.5.2", - "symfony/var-dumper": "^7.0.4", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -5489,7 +5580,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -5505,7 +5596,7 @@ "type": "github" } ], - "time": "2024-09-05T15:25:50+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "nyholm/psr7", @@ -5585,6 +5676,97 @@ ], "time": "2024-09-09T07:06:30+00:00" }, + { + "name": "openai-php/client", + "version": "v0.10.3", + "source": { + "type": "git", + "url": "https://github.com/openai-php/client.git", + "reference": "4a565d145e0fb3ea1baba8fffe39d86c56b6dc2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/openai-php/client/zipball/4a565d145e0fb3ea1baba8fffe39d86c56b6dc2c", + "reference": "4a565d145e0fb3ea1baba8fffe39d86c56b6dc2c", + "shasum": "" + }, + "require": { + "php": "^8.1.0", + "php-http/discovery": "^1.20.0", + "php-http/multipart-stream-builder": "^1.4.2", + "psr/http-client": "^1.0.3", + "psr/http-client-implementation": "^1.0.1", + "psr/http-factory-implementation": "*", + "psr/http-message": "^1.1.0|^2.0.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.9.2", + "guzzlehttp/psr7": "^2.7.0", + "laravel/pint": "^1.18.1", + "mockery/mockery": "^1.6.12", + "nunomaduro/collision": "^7.11.0|^8.5.0", + "pestphp/pest": "^2.36.0|^3.5.0", + "pestphp/pest-plugin-arch": "^2.7|^3.0", + "pestphp/pest-plugin-type-coverage": "^2.8.7|^3.1.0", + "phpstan/phpstan": "^1.12.7", + "symfony/var-dumper": "^6.4.11|^7.1.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/OpenAI.php" + ], + "psr-4": { + "OpenAI\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + }, + { + "name": "Sandro Gehri" + } + ], + "description": "OpenAI PHP is a supercharged PHP API client that allows you to interact with the Open AI API", + "keywords": [ + "GPT-3", + "api", + "client", + "codex", + "dall-e", + "language", + "natural", + "openai", + "php", + "processing", + "sdk" + ], + "support": { + "issues": "https://github.com/openai-php/client/issues", + "source": "https://github.com/openai-php/client/tree/v0.10.3" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/gehrisandro", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-11-12T20:51:16+00:00" + }, { "name": "paragonie/constant_time_encoding", "version": "v3.0.0", @@ -5704,31 +5886,36 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.21.1", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "bb312875dcdd20680419564fe42ba1d9564b9e37" + "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/bb312875dcdd20680419564fe42ba1d9564b9e37", - "reference": "bb312875dcdd20680419564fe42ba1d9564b9e37", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a673d5f310477027cead2e2f2b6db5d8368157cb", + "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb", "shasum": "" }, "require": { - "paragonie/random_compat": ">=1", - "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + "php": "^8.1", + "php-64bit": "*" }, "require-dev": { - "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" + "phpunit/phpunit": "^7|^8|^9", + "vimeo/psalm": "^4|^5" }, "suggest": { - "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", - "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + "ext-sodium": "Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." }, "type": "library", - "autoload": { + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { "files": [ "autoload.php" ] @@ -5784,25 +5971,161 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.21.1" + "source": "https://github.com/paragonie/sodium_compat/tree/v2.1.0" + }, + "time": "2024-09-04T12:51:01+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" }, - "time": "2024-04-22T22:05:04+00:00" + "time": "2024-10-02T11:20:13+00:00" + }, + { + "name": "php-http/multipart-stream-builder", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/multipart-stream-builder.git", + "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e", + "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/discovery": "^1.15", + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/message": "^1.5", + "php-http/message-factory": "^1.0.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Message\\MultipartStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "A builder class that help you create a multipart stream", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "multipart stream", + "stream" + ], + "support": { + "issues": "https://github.com/php-http/multipart-stream-builder/issues", + "source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2" + }, + "time": "2024-09-04T13:22:54+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "1.29.1", + "version": "1.29.10", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "59ee38f7480904cd6487e5cbdea4d80ff2758719" + "reference": "c80041b1628c4f18030407134fe88303661d4e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/59ee38f7480904cd6487e5cbdea4d80ff2758719", - "reference": "59ee38f7480904cd6487e5cbdea4d80ff2758719", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/c80041b1628c4f18030407134fe88303661d4e4e", + "reference": "c80041b1628c4f18030407134fe88303661d4e4e", "shasum": "" }, "require": { + "composer/pcre": "^1||^2||^3", "ext-ctype": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -5827,7 +6150,7 @@ }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "dev-main", - "dompdf/dompdf": "^1.0 || ^2.0", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", "friendsofphp/php-cs-fixer": "^3.2", "mitoteam/jpgraph": "^10.3", "mpdf/mpdf": "^8.1.1", @@ -5889,9 +6212,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.1" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.10" }, - "time": "2024-09-03T00:55:32+00:00" + "time": "2025-02-08T02:56:14+00:00" }, { "name": "phpoption/phpoption", @@ -5970,16 +6293,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.42", + "version": "3.0.43", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98" + "reference": "709ec107af3cb2f385b9617be72af8cf62441d02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db92f1b1987b12b13f248fe76c3a52cadb67bb98", - "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02", + "reference": "709ec107af3cb2f385b9617be72af8cf62441d02", "shasum": "" }, "require": { @@ -6060,7 +6383,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.42" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.43" }, "funding": [ { @@ -6076,68 +6399,7 @@ "type": "tidelift" } ], - "time": "2024-09-16T03:06:04+00:00" - }, - { - "name": "predis/predis", - "version": "v2.2.2", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" - }, - "suggest": { - "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" - }, - "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "A flexible and feature-complete Redis client for PHP.", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], - "support": { - "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.2.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/tillkruss", - "type": "github" - } - ], - "time": "2023-09-13T16:42:03+00:00" + "time": "2024-12-14T21:12:59+00:00" }, { "name": "psr/cache", @@ -6602,16 +6864,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.4", + "version": "v0.12.8", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", "shasum": "" }, "require": { @@ -6638,12 +6900,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -6675,29 +6937,29 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" }, - "time": "2024-06-10T01:18:23+00:00" + "time": "2025-03-16T03:05:19+00:00" }, { "name": "pusher/pusher-php-server", - "version": "7.2.4", + "version": "7.2.7", "source": { "type": "git", "url": "https://github.com/pusher/pusher-http-php.git", - "reference": "de2f72296808f9cafa6a4462b15a768ff130cddb" + "reference": "148b0b5100d000ed57195acdf548a2b1b38ee3f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/de2f72296808f9cafa6a4462b15a768ff130cddb", - "reference": "de2f72296808f9cafa6a4462b15a768ff130cddb", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/148b0b5100d000ed57195acdf548a2b1b38ee3f7", + "reference": "148b0b5100d000ed57195acdf548a2b1b38ee3f7", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "guzzlehttp/guzzle": "^7.2", - "paragonie/sodium_compat": "^1.6", + "paragonie/sodium_compat": "^1.6|^2.0", "php": "^7.3|^8.0", "psr/log": "^1.0|^2.0|^3.0" }, @@ -6736,9 +6998,9 @@ ], "support": { "issues": "https://github.com/pusher/pusher-http-php/issues", - "source": "https://github.com/pusher/pusher-http-php/tree/7.2.4" + "source": "https://github.com/pusher/pusher-http-php/tree/7.2.7" }, - "time": "2023-12-15T10:58:53+00:00" + "time": "2025-01-06T10:56:20+00:00" }, { "name": "ralouphie/getallheaders", @@ -6786,16 +7048,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -6803,25 +7065,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -6859,19 +7118,9 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", @@ -6967,24 +7216,26 @@ }, { "name": "ratchet/rfc6455", - "version": "v0.3.1", + "version": "v0.4.0", "source": { "type": "git", "url": "https://github.com/ratchetphp/RFC6455.git", - "reference": "7c964514e93456a52a99a20fcfa0de242a43ccdb" + "reference": "859d95f85dda0912c6d5b936d036d044e3af47ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/7c964514e93456a52a99a20fcfa0de242a43ccdb", - "reference": "7c964514e93456a52a99a20fcfa0de242a43ccdb", + "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/859d95f85dda0912c6d5b936d036d044e3af47ef", + "reference": "859d95f85dda0912c6d5b936d036d044e3af47ef", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^2 || ^1.7", - "php": ">=5.4.2" + "php": ">=7.4", + "psr/http-factory-implementation": "^1.0", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "phpunit/phpunit": "^5.7", + "guzzlehttp/psr7": "^2.7", + "phpunit/phpunit": "^9.5", "react/socket": "^1.3" }, "type": "library", @@ -7018,9 +7269,9 @@ "support": { "chat": "https://gitter.im/reactphp/reactphp", "issues": "https://github.com/ratchetphp/RFC6455/issues", - "source": "https://github.com/ratchetphp/RFC6455/tree/v0.3.1" + "source": "https://github.com/ratchetphp/RFC6455/tree/v0.4.0" }, - "time": "2021-12-09T23:20:49+00:00" + "time": "2025-02-24T01:18:22+00:00" }, { "name": "react/cache", @@ -7554,16 +7805,16 @@ }, { "name": "spatie/browsershot", - "version": "4.3.0", + "version": "4.4.0", "source": { "type": "git", "url": "https://github.com/spatie/browsershot.git", - "reference": "601f2758191d8c46b2ea587eea935a87da4f39e8" + "reference": "3ff350cd0a36943759e2932a27d8cd18c11e5fdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/browsershot/zipball/601f2758191d8c46b2ea587eea935a87da4f39e8", - "reference": "601f2758191d8c46b2ea587eea935a87da4f39e8", + "url": "https://api.github.com/repos/spatie/browsershot/zipball/3ff350cd0a36943759e2932a27d8cd18c11e5fdc", + "reference": "3ff350cd0a36943759e2932a27d8cd18c11e5fdc", "shasum": "" }, "require": { @@ -7610,7 +7861,7 @@ "webpage" ], "support": { - "source": "https://github.com/spatie/browsershot/tree/4.3.0" + "source": "https://github.com/spatie/browsershot/tree/4.4.0" }, "funding": [ { @@ -7618,20 +7869,20 @@ "type": "github" } ], - "time": "2024-08-22T09:14:07+00:00" + "time": "2024-11-25T16:02:22+00:00" }, { "name": "spatie/db-dumper", - "version": "3.7.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/spatie/db-dumper.git", - "reference": "22553ab8c34a9bb70645cb9bc2d9f236f3135705" + "reference": "91e1fd4dc000aefc9753cda2da37069fc996baee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/db-dumper/zipball/22553ab8c34a9bb70645cb9bc2d9f236f3135705", - "reference": "22553ab8c34a9bb70645cb9bc2d9f236f3135705", + "url": "https://api.github.com/repos/spatie/db-dumper/zipball/91e1fd4dc000aefc9753cda2da37069fc996baee", + "reference": "91e1fd4dc000aefc9753cda2da37069fc996baee", "shasum": "" }, "require": { @@ -7669,7 +7920,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/db-dumper/tree/3.7.0" + "source": "https://github.com/spatie/db-dumper/tree/3.8.0" }, "funding": [ { @@ -7681,20 +7932,20 @@ "type": "github" } ], - "time": "2024-09-23T08:58:35+00:00" + "time": "2025-02-14T15:04:22+00:00" }, { "name": "spatie/dropbox-api", - "version": "1.22.0", + "version": "1.23.0", "source": { "type": "git", "url": "https://github.com/spatie/dropbox-api.git", - "reference": "5b012d68568a560d1cd8888c0be2c2805c4b7c65" + "reference": "120ff475d7b03d3700a884c295b3b9503c4ddf8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/5b012d68568a560d1cd8888c0be2c2805c4b7c65", - "reference": "5b012d68568a560d1cd8888c0be2c2805c4b7c65", + "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/120ff475d7b03d3700a884c295b3b9503c4ddf8d", + "reference": "120ff475d7b03d3700a884c295b3b9503c4ddf8d", "shasum": "" }, "require": { @@ -7705,8 +7956,8 @@ }, "require-dev": { "laravel/pint": "^1.10.1", - "phpstan/phpstan": "^1.10.16", - "phpunit/phpunit": "^9.4" + "pestphp/pest": "^2.6.3", + "phpstan/phpstan": "^1.10.16" }, "type": "library", "autoload": { @@ -7743,7 +7994,7 @@ ], "support": { "issues": "https://github.com/spatie/dropbox-api/issues", - "source": "https://github.com/spatie/dropbox-api/tree/1.22.0" + "source": "https://github.com/spatie/dropbox-api/tree/1.23.0" }, "funding": [ { @@ -7755,7 +8006,7 @@ "type": "github" } ], - "time": "2023-06-08T07:13:00+00:00" + "time": "2025-01-06T09:31:59+00:00" }, { "name": "spatie/emoji", @@ -7991,28 +8242,29 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.16.5", + "version": "1.92.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2" + "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c7413972cf22ffdff97b68499c22baa04eddb6a2", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d20b1969f836d210459b78683d85c9cd5c5f508c", + "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c", "shasum": "" }, "require": { - "illuminate/contracts": "^9.28|^10.0|^11.0", + "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0", "php": "^8.0" }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0", - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^9.5.24", - "spatie/pest-plugin-test-time": "^1.1" + "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", + "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/php-code-coverage": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^9.5.24|^10.5|^11.5", + "spatie/pest-plugin-test-time": "^1.1|^2.2" }, "type": "library", "autoload": { @@ -8039,7 +8291,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.4" }, "funding": [ { @@ -8047,44 +8299,45 @@ "type": "github" } ], - "time": "2024-08-27T18:56:10+00:00" + "time": "2025-04-11T15:27:14+00:00" }, { "name": "spatie/laravel-permission", - "version": "6.9.0", + "version": "6.17.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-permission.git", - "reference": "fe973a58b44380d0e8620107259b7bda22f70408" + "reference": "02ada8f638b643713fa2fb543384738e27346ddb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/fe973a58b44380d0e8620107259b7bda22f70408", - "reference": "fe973a58b44380d0e8620107259b7bda22f70408", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/02ada8f638b643713fa2fb543384738e27346ddb", + "reference": "02ada8f638b643713fa2fb543384738e27346ddb", "shasum": "" }, "require": { - "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", - "illuminate/container": "^8.12|^9.0|^10.0|^11.0", - "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", - "illuminate/database": "^8.12|^9.0|^10.0|^11.0", + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0", "php": "^8.0" }, "require-dev": { "laravel/passport": "^11.0|^12.0", - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.4|^10.1" + "laravel/pint": "^1.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", + "phpunit/phpunit": "^9.4|^10.1|^11.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "6.x-dev", - "dev-master": "6.x-dev" - }, "laravel": { "providers": [ "Spatie\\Permission\\PermissionServiceProvider" ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" } }, "autoload": { @@ -8121,7 +8374,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-permission/issues", - "source": "https://github.com/spatie/laravel-permission/tree/6.9.0" + "source": "https://github.com/spatie/laravel-permission/tree/6.17.0" }, "funding": [ { @@ -8129,24 +8382,24 @@ "type": "github" } ], - "time": "2024-06-22T23:04:52+00:00" + "time": "2025-04-08T15:06:14+00:00" }, { "name": "spatie/laravel-signal-aware-command", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-signal-aware-command.git", - "reference": "49a5e671c3a3fd992187a777d01385fc6a84759d" + "reference": "8e8a226ed7fb45302294878ef339e75ffa9a878d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/49a5e671c3a3fd992187a777d01385fc6a84759d", - "reference": "49a5e671c3a3fd992187a777d01385fc6a84759d", + "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/8e8a226ed7fb45302294878ef339e75ffa9a878d", + "reference": "8e8a226ed7fb45302294878ef339e75ffa9a878d", "shasum": "" }, "require": { - "illuminate/contracts": "^11.0", + "illuminate/contracts": "^11.0|^12.0", "php": "^8.2", "spatie/laravel-package-tools": "^1.4.3", "symfony/console": "^7.0" @@ -8155,20 +8408,20 @@ "brianium/paratest": "^6.2|^7.0", "ext-pcntl": "*", "nunomaduro/collision": "^5.3|^6.0|^7.0|^8.0", - "orchestra/testbench": "^9.0", - "pestphp/pest-plugin-laravel": "^1.3|^2.0", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest-plugin-laravel": "^1.3|^2.0|^3.0", "phpunit/phpunit": "^9.5|^10|^11", "spatie/laravel-ray": "^1.17" }, "type": "library", "extra": { "laravel": { - "providers": [ - "Spatie\\SignalAwareCommand\\SignalAwareCommandServiceProvider" - ], "aliases": { "Signal": "Spatie\\SignalAwareCommand\\Facades\\Signal" - } + }, + "providers": [ + "Spatie\\SignalAwareCommand\\SignalAwareCommandServiceProvider" + ] } }, "autoload": { @@ -8196,7 +8449,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-signal-aware-command/issues", - "source": "https://github.com/spatie/laravel-signal-aware-command/tree/2.0.0" + "source": "https://github.com/spatie/laravel-signal-aware-command/tree/2.1.0" }, "funding": [ { @@ -8204,20 +8457,20 @@ "type": "github" } ], - "time": "2024-02-05T13:37:25+00:00" + "time": "2025-02-14T09:55:51+00:00" }, { "name": "spatie/temporary-directory", - "version": "2.2.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/spatie/temporary-directory.git", - "reference": "76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a" + "reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a", - "reference": "76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/580eddfe9a0a41a902cac6eeb8f066b42e65a32b", + "reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b", "shasum": "" }, "require": { @@ -8253,7 +8506,7 @@ ], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/2.2.1" + "source": "https://github.com/spatie/temporary-directory/tree/2.3.0" }, "funding": [ { @@ -8265,7 +8518,7 @@ "type": "github" } ], - "time": "2023-12-25T11:46:58+00:00" + "time": "2025-01-13T13:04:43+00:00" }, { "name": "stripe/stripe-php", @@ -8326,18 +8579,192 @@ }, "time": "2024-04-09T21:08:04+00:00" }, + { + "name": "symfony/cache", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "8b49dde3f5a5e9867595a3a269977f78418d75ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/8b49dde3f5a5e9867595a3a269977f78418d75ee", + "reference": "8b49dde3f5a5e9867595a3a269977f78418d75ee", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v7.2.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-08T09:06:23+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, { "name": "symfony/clock", - "version": "v7.1.1", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", "shasum": "" }, "require": { @@ -8382,7 +8809,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.1" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { @@ -8398,20 +8825,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/console", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" + "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", - "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "url": "https://api.github.com/repos/symfony/console/zipball/0e2e3f38c192e93e622e41ec37f4ca70cfedf218", + "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218", "shasum": "" }, "require": { @@ -8475,7 +8902,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.5" + "source": "https://github.com/symfony/console/tree/v7.2.6" }, "funding": [ { @@ -8491,20 +8918,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2025-04-07T19:09:28+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.1", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -8540,7 +8967,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.1" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -8556,20 +8983,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -8577,12 +9004,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -8607,7 +9034,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -8623,20 +9050,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.3", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c" + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", "shasum": "" }, "require": { @@ -8682,7 +9109,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.3" + "source": "https://github.com/symfony/error-handler/tree/v7.2.5" }, "funding": [ { @@ -8698,20 +9125,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T13:02:51+00:00" + "time": "2025-03-03T07:12:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.1", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -8762,7 +9189,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -8778,20 +9205,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -8800,18 +9227,90 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v6.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df", + "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8819,26 +9318,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/expression-language/tree/v6.4.13" }, "funding": [ { @@ -8854,20 +9345,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-10-09T08:40:40+00:00" }, { "name": "symfony/finder", - "version": "v7.1.4", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { @@ -8902,7 +9393,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.4" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -8918,35 +9409,36 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:28:19+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" + "reference": "6023ec7607254c87c5e69fb3558255aca440d72b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", - "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6023ec7607254c87c5e69fb3558255aca440d72b", + "reference": "6023ec7607254c87c5e69fb3558255aca440d72b", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^6.4|^7.0", "symfony/expression-language": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -8979,7 +9471,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.6" }, "funding": [ { @@ -8995,20 +9487,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2025-04-09T08:14:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" + "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", - "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9dec01e6094a063e738f8945ef69c0cfcf792ec", + "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec", "shasum": "" }, "require": { @@ -9037,7 +9529,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -9065,7 +9557,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -9093,7 +9585,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.6" }, "funding": [ { @@ -9109,20 +9601,20 @@ "type": "tidelift" } ], - "time": "2024-09-21T06:09:21+00:00" + "time": "2025-05-02T09:04:03+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" + "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", - "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/998692469d6e698c6eadc7ef37a6530a9eabb356", + "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356", "shasum": "" }, "require": { @@ -9131,7 +9623,7 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -9173,7 +9665,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.5" + "source": "https://github.com/symfony/mailer/tree/v7.2.6" }, "funding": [ { @@ -9189,20 +9681,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:32:26+00:00" + "time": "2025-04-04T09:50:51+00:00" }, { "name": "symfony/mime", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" + "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", - "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", + "url": "https://api.github.com/repos/symfony/mime/zipball/706e65c72d402539a072d0d6ad105fff6c161ef1", + "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1", "shasum": "" }, "require": { @@ -9257,7 +9749,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.5" + "source": "https://github.com/symfony/mime/tree/v7.2.6" }, "funding": [ { @@ -9273,11 +9765,11 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2025-04-27T13:34:41+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -9301,8 +9793,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9336,7 +9828,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" }, "funding": [ { @@ -9356,7 +9848,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -9377,8 +9869,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9414,7 +9906,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" }, "funding": [ { @@ -9434,16 +9926,16 @@ }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" + "reference": "763d2a91fea5681509ca01acbc1c5e450d127811" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", - "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811", + "reference": "763d2a91fea5681509ca01acbc1c5e450d127811", "shasum": "" }, "require": { @@ -9455,8 +9947,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9498,7 +9990,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0" }, "funding": [ { @@ -9514,20 +10006,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-21T18:38:29+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { @@ -9540,8 +10032,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9581,7 +10073,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" }, "funding": [ { @@ -9597,11 +10089,11 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -9622,8 +10114,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9662,7 +10154,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" }, "funding": [ { @@ -9682,19 +10174,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -9706,8 +10199,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9742,7 +10235,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -9758,20 +10251,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -9780,8 +10273,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9822,7 +10315,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -9838,11 +10331,11 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", @@ -9860,8 +10353,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9898,7 +10391,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" }, "funding": [ { @@ -9918,7 +10411,7 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -9942,8 +10435,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9977,7 +10470,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" }, "funding": [ { @@ -9997,16 +10490,16 @@ }, { "name": "symfony/process", - "version": "v7.1.5", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5c03ee6369281177f07f7c68252a280beccba847" + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", - "reference": "5c03ee6369281177f07f7c68252a280beccba847", + "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", "shasum": "" }, "require": { @@ -10038,7 +10531,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.5" + "source": "https://github.com/symfony/process/tree/v7.2.5" }, "funding": [ { @@ -10054,20 +10547,20 @@ "type": "tidelift" } ], - "time": "2024-09-19T21:48:23+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.1.4", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "405a7bcd872f1563966f64be19f1362d94ce71ab" + "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/405a7bcd872f1563966f64be19f1362d94ce71ab", - "reference": "405a7bcd872f1563966f64be19f1362d94ce71ab", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", + "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", "shasum": "" }, "require": { @@ -10121,7 +10614,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.4" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" }, "funding": [ { @@ -10137,20 +10630,20 @@ "type": "tidelift" } ], - "time": "2024-08-15T22:48:53+00:00" + "time": "2024-09-26T08:57:56+00:00" }, { "name": "symfony/routing", - "version": "v7.1.4", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { @@ -10202,7 +10695,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.4" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -10218,20 +10711,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T08:16:25+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -10244,12 +10737,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -10285,7 +10778,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -10301,20 +10794,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" + "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", + "url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931", + "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931", "shasum": "" }, "require": { @@ -10372,7 +10865,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.5" + "source": "https://github.com/symfony/string/tree/v7.2.6" }, "funding": [ { @@ -10388,24 +10881,25 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2025-04-20T20:18:16+00:00" }, { "name": "symfony/translation", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea" + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/235535e3f84f3dfbdbde0208ede6ca75c3a489ea", - "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea", + "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -10466,7 +10960,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.5" + "source": "https://github.com/symfony/translation/tree/v7.2.6" }, "funding": [ { @@ -10482,20 +10976,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T06:30:38+00:00" + "time": "2025-04-07T19:09:28+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -10503,12 +10997,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -10544,7 +11038,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -10560,20 +11054,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.5", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8c7bb8acb933964055215d89f9a9871df0239317" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", - "reference": "8c7bb8acb933964055215d89f9a9871df0239317", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { @@ -10618,7 +11112,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.5" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -10634,20 +11128,20 @@ "type": "tidelift" } ], - "time": "2024-09-17T09:16:35+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "e20e03889539fd4e4211e14d2179226c513c010d" + "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", - "reference": "e20e03889539fd4e4211e14d2179226c513c010d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9c46038cd4ed68952166cf7001b54eb539184ccb", + "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb", "shasum": "" }, "require": { @@ -10663,7 +11157,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -10701,7 +11195,83 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.5" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-09T08:14:01+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "422b8de94c738830a1e071f59ad14d67417d7007" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/422b8de94c738830a1e071f59ad14d67417d7007", + "reference": "422b8de94c738830a1e071f59ad14d67417d7007", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.2.6" }, "funding": [ { @@ -10717,35 +11287,37 @@ "type": "tidelift" } ], - "time": "2024-09-16T10:07:02+00:00" + "time": "2025-05-02T08:36:00+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -10768,22 +11340,22 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-12-08T13:03:43+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", "shasum": "" }, "require": { @@ -10842,7 +11414,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" }, "funding": [ { @@ -10854,20 +11426,20 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:52:34+00:00" + "time": "2025-04-30T23:37:27+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -10892,7 +11464,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -10904,7 +11476,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -10928,7 +11500,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "webmozart/assert", @@ -11008,12 +11580,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Geohash\\GeoHashProvider" - ], "aliases": { "GeoHash": "Geohash\\GeoHashFacade" - } + }, + "providers": [ + "Geohash\\GeoHashProvider" + ] } }, "autoload": { @@ -11040,159 +11612,28 @@ } ], "packages-dev": [ - { - "name": "barryvdh/laravel-debugbar", - "version": "v3.14.0", - "source": { - "type": "git", - "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "16a13cc5221aee90ae20aa59083ced2211e714eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/16a13cc5221aee90ae20aa59083ced2211e714eb", - "reference": "16a13cc5221aee90ae20aa59083ced2211e714eb", - "shasum": "" - }, - "require": { - "illuminate/routing": "^9|^10|^11", - "illuminate/session": "^9|^10|^11", - "illuminate/support": "^9|^10|^11", - "maximebf/debugbar": "~1.23.0", - "php": "^8.0", - "symfony/finder": "^6|^7" - }, - "require-dev": { - "mockery/mockery": "^1.3.3", - "orchestra/testbench-dusk": "^5|^6|^7|^8|^9", - "phpunit/phpunit": "^9.6|^10.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.14-dev" - }, - "laravel": { - "providers": [ - "Barryvdh\\Debugbar\\ServiceProvider" - ], - "aliases": { - "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Barryvdh\\Debugbar\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "PHP Debugbar integration for Laravel", - "keywords": [ - "debug", - "debugbar", - "laravel", - "profiler", - "webprofiler" - ], - "support": { - "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2024-09-20T12:16:37+00:00" - }, - { - "name": "coreproc/laravel-debugbar-git-info", - "version": "0.1.1", - "source": { - "type": "git", - "url": "https://github.com/CoreProc/laravel-debugbar-git-info.git", - "reference": "c7c75de57b0108bc622201fa508bf1b2b7648503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CoreProc/laravel-debugbar-git-info/zipball/c7c75de57b0108bc622201fa508bf1b2b7648503", - "reference": "c7c75de57b0108bc622201fa508bf1b2b7648503", - "shasum": "" - }, - "require-dev": { - "barryvdh/laravel-debugbar": "^3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Coreproc\\LaravelDebugbarGitInfo\\GitInfoServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Coreproc\\LaravelDebugbarGitInfo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Bautista", - "email": "chris.bautista@coreproc.ph" - } - ], - "description": "Add your project's Git information to your Laravel Debugbar.", - "support": { - "issues": "https://github.com/CoreProc/laravel-debugbar-git-info/issues", - "source": "https://github.com/CoreProc/laravel-debugbar-git-info/tree/master" - }, - "time": "2020-06-25T05:51:08+00:00" - }, { "name": "filp/whoops", - "version": "2.15.4", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -11232,7 +11673,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.4" + "source": "https://github.com/filp/whoops/tree/2.18.0" }, "funding": [ { @@ -11240,24 +11681,24 @@ "type": "github" } ], - "time": "2023-11-03T12:00:00+00:00" + "time": "2025-03-15T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -11265,8 +11706,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -11289,77 +11730,9 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "maximebf/debugbar", - "version": "v1.23.2", - "source": { - "type": "git", - "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "689720d724c771ac4add859056744b7b3f2406da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/689720d724c771ac4add859056744b7b3f2406da", - "reference": "689720d724c771ac4add859056744b7b3f2406da", - "shasum": "" - }, - "require": { - "php": "^7.2|^8", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4|^5|^6|^7" - }, - "require-dev": { - "dbrekelmans/bdi": "^1", - "phpunit/phpunit": "^8|^9", - "symfony/panther": "^1|^2.1", - "twig/twig": "^1.38|^2.7|^3.0" - }, - "suggest": { - "kriswallsmith/assetic": "The best way to manage assets", - "monolog/monolog": "Log using Monolog", - "predis/predis": "Redis storage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, - "autoload": { - "psr-4": { - "DebugBar\\": "src/DebugBar/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Maxime Bouroumeau-Fuseau", - "email": "maxime.bouroumeau@gmail.com", - "homepage": "http://maximebf.com" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "Debug bar in the browser for php application", - "homepage": "https://github.com/maximebf/php-debugbar", - "keywords": [ - "debug", - "debugbar" - ], - "support": { - "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.23.2" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2024-09-16T11:23:09+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { "name": "mockery/mockery", @@ -11446,16 +11819,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", "shasum": "" }, "require": { @@ -11494,7 +11867,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" }, "funding": [ { @@ -11502,27 +11875,27 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2025-04-29T12:36:36+00:00" }, { "name": "nunomaduro/collision", - "version": "v8.4.0", + "version": "v8.5.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a" + "reference": "f5c101b929c958e849a633283adff296ed5f38f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/e7d1aa8ed753f63fa816932bbc89678238843b4a", - "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5", "shasum": "" }, "require": { - "filp/whoops": "^2.15.4", - "nunomaduro/termwind": "^2.0.1", + "filp/whoops": "^2.16.0", + "nunomaduro/termwind": "^2.1.0", "php": "^8.2.0", - "symfony/console": "^7.1.3" + "symfony/console": "^7.1.5" }, "conflict": { "laravel/framework": "<11.0.0 || >=12.0.0", @@ -11530,14 +11903,14 @@ }, "require-dev": { "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.19.0", - "laravel/pint": "^1.17.1", - "laravel/sail": "^1.31.0", - "laravel/sanctum": "^4.0.2", - "laravel/tinker": "^2.9.0", - "orchestra/testbench-core": "^9.2.3", - "pestphp/pest": "^2.35.0 || ^3.0.0", - "sebastian/environment": "^6.1.0 || ^7.0.0" + "laravel/framework": "^11.28.0", + "laravel/pint": "^1.18.1", + "laravel/sail": "^1.36.0", + "laravel/sanctum": "^4.0.3", + "laravel/tinker": "^2.10.0", + "orchestra/testbench-core": "^9.5.3", + "pestphp/pest": "^2.36.0 || ^3.4.0", + "sebastian/environment": "^6.1.0 || ^7.2.0" }, "type": "library", "extra": { @@ -11599,7 +11972,7 @@ "type": "patreon" } ], - "time": "2024-08-03T15:32:23+00:00" + "time": "2024-10-15T16:06:32+00:00" }, { "name": "phar-io/manifest", @@ -12042,16 +12415,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.35", + "version": "10.5.46", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b" + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7ac8b4e63f456046dcb4c9787da9382831a1874b", - "reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8080be387a5be380dda48c6f41cee4a13aadab3d", + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d", "shasum": "" }, "require": { @@ -12061,7 +12434,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.13.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", @@ -12072,7 +12445,7 @@ "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.2", + "sebastian/comparator": "^5.0.3", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", "sebastian/exporter": "^5.1.2", @@ -12123,7 +12496,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.35" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.46" }, "funding": [ { @@ -12134,12 +12507,20 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2024-09-19T10:52:21+00:00" + "time": "2025-05-02T06:46:24+00:00" }, { "name": "sebastian/cli-parser", @@ -12311,16 +12692,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53" + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", - "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", "shasum": "" }, "require": { @@ -12331,7 +12712,7 @@ "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.4" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -12376,7 +12757,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" }, "funding": [ { @@ -12384,7 +12765,7 @@ "type": "github" } ], - "time": "2024-08-12T06:03:08+00:00" + "time": "2024-10-18T14:56:07+00:00" }, { "name": "sebastian/complexity", @@ -13059,27 +13440,27 @@ }, { "name": "spatie/backtrace", - "version": "1.6.2", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" + "reference": "9807de6b8fecfaa5b3d10650985f0348b02862b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", - "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/9807de6b8fecfaa5b3d10650985f0348b02862b2", + "reference": "9807de6b8fecfaa5b3d10650985f0348b02862b2", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^7.3 || ^8.0" }, "require-dev": { "ext-json": "*", - "laravel/serializable-closure": "^1.3", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2", - "symfony/var-dumper": "^5.1" + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -13106,7 +13487,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.2" + "source": "https://github.com/spatie/backtrace/tree/1.7.2" }, "funding": [ { @@ -13118,34 +13499,34 @@ "type": "other" } ], - "time": "2024-07-22T08:21:24+00:00" + "time": "2025-04-28T14:55:53+00:00" }, { "name": "spatie/error-solutions", - "version": "1.1.1", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", "shasum": "" }, "require": { "php": "^8.0" }, "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0", - "illuminate/cache": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "livewire/livewire": "^2.11|^3.3.5", + "illuminate/broadcasting": "^10.0|^11.0|^12.0", + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "livewire/livewire": "^2.11|^3.5.20", "openai-php/client": "^0.10.1", - "orchestra/testbench": "^7.0|8.22.3|^9.0", - "pestphp/pest": "^2.20", - "phpstan/phpstan": "^1.11", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "phpstan/phpstan": "^2.1", "psr/simple-cache": "^3.0", "psr/simple-cache-implementation": "^3.0", "spatie/ray": "^1.28", @@ -13184,7 +13565,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.1" + "source": "https://github.com/spatie/error-solutions/tree/1.1.3" }, "funding": [ { @@ -13192,24 +13573,24 @@ "type": "github" } ], - "time": "2024-07-25T11:06:04+00:00" + "time": "2025-02-14T12:29:50+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.8.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", - "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "spatie/backtrace": "^1.6.1", "symfony/http-foundation": "^5.2|^6.0|^7.0", @@ -13253,7 +13634,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" }, "funding": [ { @@ -13261,20 +13642,20 @@ "type": "github" } ], - "time": "2024-08-01T08:27:26+00:00" + "time": "2025-02-14T13:42:06+00:00" }, { "name": "spatie/ignition", - "version": "1.15.0", + "version": "1.15.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + "reference": "31f314153020aee5af3537e507fef892ffbf8c85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", + "reference": "31f314153020aee5af3537e507fef892ffbf8c85", "shasum": "" }, "require": { @@ -13287,7 +13668,7 @@ "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", "mockery/mockery": "^1.4", "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", @@ -13344,27 +13725,27 @@ "type": "github" } ], - "time": "2024-06-12T14:55:22+00:00" + "time": "2025-02-21T14:31:39+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.8.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "3c067b75bfb50574db8f7e2c3978c65eed71126c" + "reference": "1baee07216d6748ebd3a65ba97381b051838707a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/3c067b75bfb50574db8f7e2c3978c65eed71126c", - "reference": "3c067b75bfb50574db8f7e2c3978c65eed71126c", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", "spatie/ignition": "^1.15", "symfony/console": "^6.2.3|^7.0", @@ -13373,12 +13754,12 @@ "require-dev": { "livewire/livewire": "^2.11|^3.3.5", "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1", - "orchestra/testbench": "8.22.3|^9.0", - "pestphp/pest": "^2.34", + "openai-php/client": "^0.8.1|^0.10", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.16", + "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", + "phpstan/phpstan-phpunit": "^1.3.16|^2.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -13388,12 +13769,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ], "aliases": { "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - } + }, + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ] } }, "autoload": { @@ -13435,7 +13816,7 @@ "type": "github" } ], - "time": "2024-06-12T15:01:18+00:00" + "time": "2025-02-20T13:13:55+00:00" }, { "name": "theseer/tokenizer", @@ -13498,8 +13879,10 @@ "prefer-lowest": false, "platform": { "php": "^8.2", - "ext-json": "*" + "ext-exif": "*", + "ext-json": "*", + "ext-redis": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/config/achievements.php b/config/achievements.php new file mode 100644 index 000000000..2530d96ce --- /dev/null +++ b/config/achievements.php @@ -0,0 +1,121 @@ + [ + 1, + 42, + 69, + 256, + 360, + 404, + 420, + 451, + 512, + 666, + 777, + 1337, + 2048, + 3333, + 3600, + 9001, + 13337, + 42069, + 69420, + 133337, + 420420, + 666666, + 696969, + 4206969, + ], + + /** + * Cache TTL for achievement data (in seconds) + */ + 'cache_ttl' => 86400, // 24 hours + + /** + * Batch size for processing achievements + */ + 'batch_size' => 100, + + /** + * Whether to dispatch events when achievements are unlocked + */ + 'dispatch_events' => true, + + /** + * Level thresholds based on total XP + */ + 'levels' => [ + 0 => 1, // 0 XP = Level 1 + 100 => 2, // 100 XP = Level 2 + 500 => 3, // 500 XP = Level 3 + 1000 => 4, // 1000 XP = Level 4 + 2500 => 5, // 2500 XP = Level 5 + 5000 => 6, // 5000 XP = Level 6 + 10000 => 7, // 10000 XP = Level 7 + 25000 => 8, // 25000 XP = Level 8 + 50000 => 9, // 50000 XP = Level 9 + 100000 => 10, // 100000 XP = Level 10 + ], + +]; + +// old ones +//return [ +// // ── Easy starters ──────────────────────────────────────────────── +// 'first-upload' => [ +// 'name' => 'First Upload', +// 'xp' => 1, +// 'icon' => '🍼', +// 'when' => 'stats.photosTotal == 1', +// ], +// +// // ── Object-based ───────────────────────────────────────────────── +// 'plastic-slayer' => [ +// 'name' => 'Plastic Slayer', +// 'xp' => 69, +// 'icon' => '🥤', +// 'when' => 'hasObject("plastic_bottle", 69)', +// ], +// +// // ── Streak ─────────────────────────────────────────────────────── +// 'marathon-uploader' => [ +// 'name' => '7-Day Streak', +// 'xp' => 7, +// 'icon' => '🔥', +// 'when' => 'stats.currentStreak >= 7', +// ], +// +// // ── Cumulative (Redis) ─────────────────────────────────────────── +// 'pickup-artist' => [ +// 'name' => 'Pickup Artist', +// 'xp' => 420, +// 'icon' => '🏆', +// 'when' => 'objectQty("plastic_bottle") >= 420', +// ], +// +// // ── Dynamic object-count milestones ──────────────────────────── +// 'country‑pioneer' => [ +// 'name' => 'Country Pioneer', +// 'xp' => 69, +// 'icon' => '🗺️', +// 'when' => 'isFirstInCountry()', +// ], +// +// // ── Upload-count milestones ───────────────────────────────── +// 'streak‑69' => [ +// 'name' => '69‑day streak', +// 'xp' => 690, +// 'icon' => '🔥', +// 'when' => 'streak() >= 69', +// ], +// +// // ── Time-based ───────────────────────────────────────────── +// 'sunrise‑snapper' => [ +// 'name' => 'Sunrise Snapper', +// 'xp' => 50, +// 'icon' => '🌅', +// 'when' => 'timeOfDay() == "morning" && stats.photosTotal == 1', +// ], +//]; diff --git a/config/app.php b/config/app.php index 0b460abdd..68cd656f4 100644 --- a/config/app.php +++ b/config/app.php @@ -176,6 +176,10 @@ App\Providers\HorizonServiceProvider::class, App\Providers\RouteServiceProvider::class, + /* + * Custom Achievement Service Providers + */ + App\Providers\AchievementServiceProvider::class, ], /* diff --git a/config/auth.php b/config/auth.php index 3e9a1cb79..4b31f860d 100644 --- a/config/auth.php +++ b/config/auth.php @@ -68,7 +68,7 @@ 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => App\Models\User\User::class, + 'model' => App\Models\Users\User::class, ], // 'users' => [ diff --git a/config/broadcasting.php b/config/broadcasting.php index f703d3f8a..db93eb1e7 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -43,21 +43,6 @@ ], ], -// 'pusher' => [ -// 'driver' => 'pusher', -// 'key' => env('PUSHER_APP_KEY'), -// 'secret' => env('PUSHER_APP_SECRET'), -// 'app_id' => env('PUSHER_APP_ID'), -// 'options' => [ -// 'cluster' => env('PUSHER_APP_CLUSTER'), -// 'useTLS' => false, -// 'encrypted' => false, // was commented out -// 'host' => env('WEBSOCKET_BROADCAST_HOST'), -// 'port' => 8080, -// 'scheme' => 'http' -// ], -// ], - 'redis' => [ 'driver' => 'redis', 'connection' => 'default', diff --git a/config/clustering.php b/config/clustering.php new file mode 100644 index 000000000..378bcd293 --- /dev/null +++ b/config/clustering.php @@ -0,0 +1,125 @@ + env('CLUSTERING_TILE_SIZE', 0.25), + + /* + |-------------------------------------------------------------------------- + | Dynamic Grid Configuration + |-------------------------------------------------------------------------- + | + | Base grid size in degrees for zoom level 0 + | Grid size halves every 2 zoom levels: 90°, 45°, 22.5°, 11.25°... + | + */ + 'base_grid_deg' => 90.0, + + /* + |-------------------------------------------------------------------------- + | Global Tile Key + |-------------------------------------------------------------------------- + | + | Sentinel value for global clustering (must fit in UNSIGNED INT) + | + */ + 'global_tile_key' => 4294967295, + + /* + |-------------------------------------------------------------------------- + | Zoom Levels + |-------------------------------------------------------------------------- + | + | Available zoom levels for clustering + | - global_zooms: Processed using single global query + | - tile_zooms: Processed per-tile (or batch) + | + */ + 'zoom_levels' => [ + 'all' => [0, 2, 4, 6, 8, 10, 12, 14, 16], + 'global' => [0, 2, 4, 6], + 'tile' => [8, 10, 12, 14, 16], + ], + + /* + |-------------------------------------------------------------------------- + | Clustering Thresholds + |-------------------------------------------------------------------------- + */ + + // Minimum number of photos required to form a cluster + // Set to 1 to show every photo as a cluster + 'min_cluster_size' => env('CLUSTERING_MIN_SIZE', 1), + + /* + |-------------------------------------------------------------------------- + | Grid Sizes Per Zoom Level + |-------------------------------------------------------------------------- + | + | Define custom grid sizes for each zoom level. + | Smaller values = more clusters (finer detail) + | For tile zooms (8-16), these must divide evenly into smallest_grid + | + */ + 'grid_sizes' => [ + // Global zooms - can be any value + 0 => 30.0, // ~3330km cells - ~5-10 world clusters + 2 => 15.0, // ~1665km cells - ~20-30 clusters + 4 => 5.0, // ~555km cells - ~100-150 clusters + 6 => 2.0, // ~222km cells - ~300-500 clusters + + // Tile zooms - must result in clean integer factors with smallest_grid + 8 => 0.8, // factor 80 (0.8/0.01=80) - ~89km cells + 10 => 0.4, // factor 40 (0.4/0.01=40) - ~44km cells + 12 => 0.08, // factor 8 (0.08/0.01=8) - ~8.9km cells - more clusters + 14 => 0.02, // factor 2 (0.02/0.01=2) - ~2.2km cells - many more clusters + 16 => 0.01, // factor 1 (0.01/0.01=1) - ~1.1km cells - maximum clusters + ], + + /* + |-------------------------------------------------------------------------- + | Smallest Grid Size + |-------------------------------------------------------------------------- + | + | The smallest grid size used (for zoom 16). This determines the + | precision of generated cell columns. + | IMPORTANT: If you change this, you must regenerate the cell columns! + | + */ + 'smallest_grid' => 0.01, // Changed from 0.05 to allow finer clustering + + /* + |-------------------------------------------------------------------------- + | Processing Configuration + |-------------------------------------------------------------------------- + */ + + // How long to keep dirty tiles before automatic cleanup (hours) + 'dirty_tile_ttl' => env('CLUSTERING_DIRTY_TTL', 24), + + // Cache TTL for API responses (seconds) + 'cache_ttl' => env('CLUSTERING_CACHE_TTL', 300), + + /* + |-------------------------------------------------------------------------- + | Performance Tuning + |-------------------------------------------------------------------------- + */ + + // Maximum number of photos to update tile keys per chunk + 'update_chunk_size' => env('CLUSTERING_UPDATE_CHUNK', 50000), + + // Whether to use spatial indexes for queries + 'use_spatial_index' => env('CLUSTERING_USE_SPATIAL', true), + + // Maximum clusters to return in API response + 'max_clusters_per_request' => env('CLUSTERING_MAX_RESPONSE', 5000), +]; diff --git a/config/cors.php b/config/cors.php index 558369dca..70f8a476d 100644 --- a/config/cors.php +++ b/config/cors.php @@ -29,6 +29,6 @@ 'max_age' => 0, - 'supports_credentials' => false, + 'supports_credentials' => true, ]; diff --git a/config/database.php b/config/database.php index 14c11ccc1..70d56cc5d 100644 --- a/config/database.php +++ b/config/database.php @@ -38,7 +38,6 @@ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), - // 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'database' => ':memory:', 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', false), @@ -120,11 +119,11 @@ 'redis' => [ - 'client' => env('REDIS_CLIENT', 'predis'), // was phpredis + 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - // 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'prefix' => '', ], 'default' => [ @@ -132,8 +131,9 @@ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), - 'database' => env('REDIS_DB', '1'), - // 'read_write_timeout' => 0, + 'database' => env('REDIS_DB', '0'), + 'read_write_timeout' => 0, + 'persistent' => true, // disable this after the migration script ], 'cache' => [ @@ -144,6 +144,11 @@ 'database' => env('REDIS_CACHE_DB', '1'), ], + 'testing' => [ + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_TEST_DB', 15), // Use a separate DB for tests + ], ], - ]; diff --git a/config/filesystems.php b/config/filesystems.php index 1c46714dc..966a26206 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -62,7 +62,8 @@ 'region' => env('AWS_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), - 'endpoint' => env('AWS_ENDPOINT') + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('MINIO_PATH_STYLE_ENDPOINT', false), // Required for MinIO ], 'bbox' => [ diff --git a/config/level.php b/config/level.php new file mode 100644 index 000000000..ab2fb9149 --- /dev/null +++ b/config/level.php @@ -0,0 +1,21 @@ + 'complete noob', + 69 => 'nice', + 420 => 'litter friendly', + 666 => 'trash overlord', + 1337 => 'gamification master', + 2500 => 'certified boomstick pilot', + 10000 => 'dumpster wizard', + 50000 => 'litter legend', + 100000 => 'trash titan', + 300000 => 'sanitation samurai', + 500000 => 'interdimensional janitor', + 1000000 => 'garbage god', + 10000000 => 'universal waste master', + 100000000 => 'quantum trash collector', + 1000000000 => 'zero waste champion', + 10000000000 => 'superlitter hero', + 100000000000 => 'litterverse guardian', +]; diff --git a/config/locations.php b/config/locations.php new file mode 100644 index 000000000..e924e8527 --- /dev/null +++ b/config/locations.php @@ -0,0 +1,81 @@ + [ + 'ttl_short' => env('LOCATION_CACHE_SHORT', 300), // 5 minutes + 'ttl_medium' => env('LOCATION_CACHE_MEDIUM', 1800), // 30 minutes + 'ttl_long' => env('LOCATION_CACHE_LONG', 3600), // 1 hour + ], + + /** + * Pagination settings + */ + 'pagination' => [ + 'max_per_page' => env('LOCATION_MAX_PER_PAGE', 100), + 'default_per_page' => env('LOCATION_DEFAULT_PER_PAGE', 50), + ], + + /** + * Redis settings + */ + 'redis' => [ + 'max_ranking_items' => env('REDIS_MAX_RANKING_ITEMS', 500), + 'chunk_size' => env('REDIS_CHUNK_SIZE', 500), + 'time_series_ttl_ms' => env('REDIS_TIME_SERIES_TTL_MS', 63072000000), // 2 years + 'monthly_ranking_ttl' => env('REDIS_MONTHLY_RANKING_TTL', 15552000), // 180 days + ], + + /** + * Processing limits + */ + 'processing' => [ + 'max_batch_size' => env('PHOTO_MAX_BATCH_SIZE', 1000), + 'max_items_per_photo' => env('PHOTO_MAX_ITEMS', 1000), + 'max_quantity_per_item' => env('PHOTO_MAX_QUANTITY', 100), + ], + + /** + * Allowed sort columns for database queries + */ + 'allowed_sort_columns' => [ + 'id', + 'country', + 'state', + 'city', + 'created_at', + 'updated_at', + 'manual_verify', + 'created_by', + 'user_id_last_uploaded', + ], + + /** + * Global level thresholds + */ + 'levels' => [ + 0 => ['min' => 0, 'max' => 1000], + 1 => ['min' => 1000, 'max' => 10000], + 2 => ['min' => 10000, 'max' => 100000], + 3 => ['min' => 100000, 'max' => 250000], + 4 => ['min' => 250000, 'max' => 500000], + 5 => ['min' => 500000, 'max' => 1000000], + 6 => ['min' => 1000000, 'max' => 2500000], + 7 => ['min' => 2500000, 'max' => 5000000], + 8 => ['min' => 5000000, 'max' => 10000000], + 9 => ['min' => 10000000, 'max' => PHP_INT_MAX], + ], + + /** + * Feature flags for v1 rollout + */ + 'features' => [ + 'timeseries' => env('FEATURE_TIMESERIES', false), + 'leaderboard' => env('FEATURE_LEADERBOARD', false), + 'summary' => env('FEATURE_SUMMARY', false), + 'recent_activity' => env('FEATURE_RECENT_ACTIVITY', false), + ], +]; diff --git a/config/logging.php b/config/logging.php index 954a19077..209426e30 100644 --- a/config/logging.php +++ b/config/logging.php @@ -66,6 +66,7 @@ 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, + 'permission' => env('LOG_DAILY_PERMISSION', 0644), ], 'slack' => [ diff --git a/config/sanctum.php b/config/sanctum.php index 764a82fac..c301eedd8 100644 --- a/config/sanctum.php +++ b/config/sanctum.php @@ -15,11 +15,7 @@ | */ - 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( - '%s%s', - 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', - Sanctum::currentApplicationUrlWithPort() - ))), + 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', '')), /* |-------------------------------------------------------------------------- diff --git a/config/services.php b/config/services.php index 5bb72669b..6671306c1 100644 --- a/config/services.php +++ b/config/services.php @@ -42,9 +42,13 @@ ], 'stripe' => [ - 'model' => App\Models\User\User::class, + 'model' => App\Models\Users\User::class, 'key' => env('STRIPE_KEY'), 'secret' => env('STRIPE_SECRET'), ], + 'openai' => [ + 'key' => env('OPEN_AI_KEY') + ] + ]; diff --git a/config/websockets.php b/config/websockets.php deleted file mode 100644 index 28e2046ca..000000000 --- a/config/websockets.php +++ /dev/null @@ -1,141 +0,0 @@ - [ - 'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001), - ], - - /* - * This package comes with multi tenancy out of the box. Here you can - * configure the different apps that can use the webSockets server. - * - * Optionally you specify capacity so you can limit the maximum - * concurrent connections for a specific app. - * - * Optionally you can disable client events so clients cannot send - * messages to each other via the webSockets. - */ - 'apps' => [ - [ - 'id' => env('PUSHER_APP_ID'), - 'name' => env('APP_NAME'), - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - // 'path' => env('PUSHER_APP_PATH'), - // 'capacity' => null, - 'enable_client_messages' => false, - 'enable_statistics' => true, - ], - ], - - /* - * This class is responsible for finding the apps. The default provider - * will use the apps defined in this config file. - * - * You can create a custom provider by implementing the - * `AppProvider` interface. - */ - 'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class, - - /* - * This array contains the hosts of which you want to allow incoming requests. - * Leave this empty if you want to accept requests from all hosts. - */ - 'allowed_origins' => [ - // - ], - - /* - * The maximum request size in kilobytes that is allowed for an incoming WebSocket request. - */ - 'max_request_size_in_kb' => 250, - - /* - * This path will be used to register the necessary routes for the package. - */ - 'path' => 'laravel-websockets', - - /* - * Dashboard Routes Middleware - * - * These middleware will be assigned to every dashboard route, giving you - * the chance to add your own middleware to this list or change any of - * the existing middleware. Or, you can simply stick with this list. - */ - 'middleware' => [ - 'web', - Authorize::class, - ], - - 'statistics' => [ - /* - * This model will be used to store the statistics of the WebSocketsServer. - * The only requirement is that the model should extend - * `WebSocketsStatisticsEntry` provided by this package. - */ - 'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class, - - /** - * The Statistics Logger will, by default, handle the incoming statistics, store them - * and then release them into the database on each interval defined below. - */ - 'logger' => BeyondCode\LaravelWebSockets\Statistics\Logger\HttpStatisticsLogger::class, - - /* - * Here you can specify the interval in seconds at which statistics should be logged. - */ - 'interval_in_seconds' => 60, - - /* - * When the clean-command is executed, all recorded statistics older than - * the number of days specified here will be deleted. - */ - 'delete_statistics_older_than_days' => 60, - - /* - * Use an DNS resolver to make the requests to the statistics logger - * default is to resolve everything to 127.0.0.1. - */ - 'perform_dns_lookup' => false, - ], - - /* - * Define the optional SSL context for your WebSocket connections. - * You can see all available options at: http://php.net/manual/en/context.ssl.php - */ - 'ssl' => [ - /* - * Path to local certificate file on filesystem. It must be a PEM encoded file which - * contains your certificate and private key. It can optionally contain the - * certificate chain of issuers. The private key also may be contained - * in a separate file specified by local_pk. - */ - 'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null), - - /* - * Path to local private key file on filesystem in case of separate files for - * certificate (local_cert) and private key. - */ - 'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null), - - /* - * Passphrase for your local_cert file. - */ - 'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null), - ], - - /* - * Channel Manager - * This class handles how channel persistence is handled. - * By default, persistence is stored in an array by the running webserver. - * The only requirement is that the class should implement - * `ChannelManager` interface provided by this package. - */ - 'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class, -]; diff --git a/database/factories/AI/AnnotationFactory.php b/database/factories/AI/AnnotationFactory.php index f567787d5..11b212905 100644 --- a/database/factories/AI/AnnotationFactory.php +++ b/database/factories/AI/AnnotationFactory.php @@ -4,7 +4,7 @@ use App\Models\AI\Annotation; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\Factory; class AnnotationFactory extends Factory diff --git a/database/factories/AchievementFactory.php b/database/factories/AchievementFactory.php new file mode 100644 index 000000000..29fb8e00a --- /dev/null +++ b/database/factories/AchievementFactory.php @@ -0,0 +1,23 @@ + + */ +class AchievementFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/factories/Badges/BadgeFactory.php b/database/factories/Badges/BadgeFactory.php new file mode 100644 index 000000000..48226737b --- /dev/null +++ b/database/factories/Badges/BadgeFactory.php @@ -0,0 +1,23 @@ + + */ +class BadgeFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/factories/Badges/UserBadgeFactory.php b/database/factories/Badges/UserBadgeFactory.php new file mode 100644 index 000000000..70d0fbefb --- /dev/null +++ b/database/factories/Badges/UserBadgeFactory.php @@ -0,0 +1,23 @@ + + */ +class UserBadgeFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/factories/Litter/Tags/BrandListFactory.php b/database/factories/Litter/Tags/BrandListFactory.php new file mode 100644 index 000000000..17cc30655 --- /dev/null +++ b/database/factories/Litter/Tags/BrandListFactory.php @@ -0,0 +1,18 @@ + $this->faker->unique()->word, + ]; + } +} diff --git a/database/factories/Litter/Tags/CategoryFactory.php b/database/factories/Litter/Tags/CategoryFactory.php new file mode 100644 index 000000000..ea5f60125 --- /dev/null +++ b/database/factories/Litter/Tags/CategoryFactory.php @@ -0,0 +1,18 @@ + $this->faker->unique()->word, + ]; + } +} diff --git a/database/factories/Litter/Tags/CustomTagNewFactory.php b/database/factories/Litter/Tags/CustomTagNewFactory.php new file mode 100644 index 000000000..111868619 --- /dev/null +++ b/database/factories/Litter/Tags/CustomTagNewFactory.php @@ -0,0 +1,18 @@ + $this->faker->unique()->word, + ]; + } +} diff --git a/database/factories/Litter/Tags/LitterObjectFactory.php b/database/factories/Litter/Tags/LitterObjectFactory.php new file mode 100644 index 000000000..6cce4bb8b --- /dev/null +++ b/database/factories/Litter/Tags/LitterObjectFactory.php @@ -0,0 +1,18 @@ + $this->faker->unique()->word, + ]; + } +} diff --git a/database/factories/Litter/Tags/MaterialsFactory.php b/database/factories/Litter/Tags/MaterialsFactory.php new file mode 100644 index 000000000..0bbe23b32 --- /dev/null +++ b/database/factories/Litter/Tags/MaterialsFactory.php @@ -0,0 +1,18 @@ + $this->faker->unique()->word, + ]; + } +} diff --git a/database/factories/Litter/Tags/PhotoTagExtraFactory.php b/database/factories/Litter/Tags/PhotoTagExtraFactory.php new file mode 100644 index 000000000..0964d60ea --- /dev/null +++ b/database/factories/Litter/Tags/PhotoTagExtraFactory.php @@ -0,0 +1,23 @@ + + */ +class PhotoTagExtraFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/factories/Location/CityFactory.php b/database/factories/Location/CityFactory.php index 7ac29277d..3f7626827 100644 --- a/database/factories/Location/CityFactory.php +++ b/database/factories/Location/CityFactory.php @@ -5,7 +5,7 @@ use App\Models\Location\City; use App\Models\Location\Country; use App\Models\Location\State; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\Factory; class CityFactory extends Factory diff --git a/database/factories/Location/CountryFactory.php b/database/factories/Location/CountryFactory.php index 35202621b..1add27492 100644 --- a/database/factories/Location/CountryFactory.php +++ b/database/factories/Location/CountryFactory.php @@ -3,7 +3,7 @@ namespace Database\Factories\Location; use App\Models\Location\Country; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\Factory; class CountryFactory extends Factory @@ -26,7 +26,6 @@ public function definition() 'created_by' => User::factory()->create(), 'country' => $this->faker->country, 'shortcode' => $this->faker->countryCode, - 'slug' => $this->faker->slug, ]; } } diff --git a/database/factories/Location/StateFactory.php b/database/factories/Location/StateFactory.php index b38520ba9..0b176bfce 100644 --- a/database/factories/Location/StateFactory.php +++ b/database/factories/Location/StateFactory.php @@ -4,7 +4,7 @@ use App\Models\Location\Country; use App\Models\Location\State; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\Factory; class StateFactory extends Factory diff --git a/database/factories/PhotoFactory.php b/database/factories/PhotoFactory.php index 08dc28e30..fd8606d96 100644 --- a/database/factories/PhotoFactory.php +++ b/database/factories/PhotoFactory.php @@ -3,23 +3,13 @@ namespace Database\Factories; use App\Models\Photo; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\Factory; class PhotoFactory extends Factory { - /** - * The name of the factory's corresponding model. - * - * @var string - */ protected $model = Photo::class; - /** - * Define the model's default state. - * - * @return array - */ public function definition() { return [ diff --git a/database/factories/Teams/TeamFactory.php b/database/factories/Teams/TeamFactory.php index 1bbd5ee1d..a84301580 100644 --- a/database/factories/Teams/TeamFactory.php +++ b/database/factories/Teams/TeamFactory.php @@ -3,7 +3,7 @@ namespace Database\Factories\Teams; use App\Models\Teams\Team; -use App\Models\User\User; +use App\Models\Users\User; use Illuminate\Database\Eloquent\Factories\Factory; class TeamFactory extends Factory diff --git a/database/factories/User/UserFactory.php b/database/factories/Users/UserFactory.php similarity index 69% rename from database/factories/User/UserFactory.php rename to database/factories/Users/UserFactory.php index f3175085b..5d68591eb 100644 --- a/database/factories/User/UserFactory.php +++ b/database/factories/Users/UserFactory.php @@ -1,25 +1,15 @@ faker->name; @@ -32,15 +22,15 @@ public function definition() 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), 'images_remaining' => 1000, - 'remaining_teams' => 1 + 'remaining_teams' => 10, + 'show_name' => 1, + 'show_username' => 1, + 'show_name_maps' => 1, + 'show_username_maps' => 1, + 'show_name_createdby' => 1, ]; } - /** - * Indicate that the user is verified. - * - * @return Factory - */ public function verified() { return $this->state(function (array $attributes) { diff --git a/database/migrations/2017_02_24_151913_create_photos_table.php b/database/migrations/2017_02_24_151913_create_photos_table.php index 45b647850..5b2fdf5ab 100644 --- a/database/migrations/2017_02_24_151913_create_photos_table.php +++ b/database/migrations/2017_02_24_151913_create_photos_table.php @@ -49,6 +49,10 @@ public function up() */ public function down() { +// Schema::table('photos', function (Blueprint $table) { +// $table->dropForeign(['user_id']); +// }); + Schema::dropIfExists('photos'); } } diff --git a/database/migrations/2017_02_24_152618_create_alcohol_table.php b/database/migrations/2017_02_24_152618_create_alcohol_table.php index 4d0dfeb20..2a1b3cb36 100644 --- a/database/migrations/2017_02_24_152618_create_alcohol_table.php +++ b/database/migrations/2017_02_24_152618_create_alcohol_table.php @@ -35,6 +35,6 @@ public function up() */ public function down() { - // + Schema::dropIfExists('alcohol'); } } diff --git a/database/migrations/2017_02_24_152651_create_coffee_table.php b/database/migrations/2017_02_24_152651_create_coffee_table.php index 70355b659..fa5128a47 100644 --- a/database/migrations/2017_02_24_152651_create_coffee_table.php +++ b/database/migrations/2017_02_24_152651_create_coffee_table.php @@ -29,6 +29,6 @@ public function up() */ public function down() { - // + Schema::drop('coffee'); } } diff --git a/database/migrations/2017_02_24_152714_create_sanitary_table.php b/database/migrations/2017_02_24_152714_create_sanitary_table.php index d55ee3a2a..31262ad2c 100644 --- a/database/migrations/2017_02_24_152714_create_sanitary_table.php +++ b/database/migrations/2017_02_24_152714_create_sanitary_table.php @@ -31,6 +31,6 @@ public function up() */ public function down() { - // + Schema::dropIfExists('sanitary'); } } diff --git a/database/migrations/2017_02_24_152915_create_other_table.php b/database/migrations/2017_02_24_152915_create_other_table.php index cce246bc5..d7a9ecf60 100644 --- a/database/migrations/2017_02_24_152915_create_other_table.php +++ b/database/migrations/2017_02_24_152915_create_other_table.php @@ -32,6 +32,6 @@ public function up() */ public function down() { - // + Schema::dropIfExists('others'); } } diff --git a/database/migrations/2017_02_24_153215_create_food_table.php b/database/migrations/2017_02_24_153215_create_food_table.php index 794ffbc97..befb3cd89 100644 --- a/database/migrations/2017_02_24_153215_create_food_table.php +++ b/database/migrations/2017_02_24_153215_create_food_table.php @@ -32,6 +32,6 @@ public function up() */ public function down() { - // + Schema::dropIfExists('food'); } } diff --git a/database/migrations/2017_02_24_154540_add_totals_to_photos.php b/database/migrations/2017_02_24_154540_add_totals_to_photos.php index c150846f6..4cdd52e42 100644 --- a/database/migrations/2017_02_24_154540_add_totals_to_photos.php +++ b/database/migrations/2017_02_24_154540_add_totals_to_photos.php @@ -48,7 +48,29 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['smoking_id']); + $table->dropColumn('smoking_id'); + + $table->dropForeign(['food_id']); + $table->dropColumn('food_id'); + + $table->dropForeign(['coffee_id']); + $table->dropColumn('coffee_id'); + + $table->dropForeign(['alcohol_id']); + $table->dropColumn('alcohol_id'); + + $table->dropForeign(['softdrinks_id']); + $table->dropColumn('softdrinks_id'); + + $table->dropForeign(['drugs_id']); + $table->dropColumn('drugs_id'); + + $table->dropForeign(['sanitary_id']); + $table->dropColumn('sanitary_id'); + + $table->dropForeign(['other_id']); + $table->dropColumn('other_id'); }); } } diff --git a/database/migrations/2017_02_24_234922_add_country_and_city_to_photos.php b/database/migrations/2017_02_24_234922_add_country_and_city_to_photos.php index 97db02839..c56220d66 100644 --- a/database/migrations/2017_02_24_234922_add_country_and_city_to_photos.php +++ b/database/migrations/2017_02_24_234922_add_country_and_city_to_photos.php @@ -29,7 +29,10 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['country_id']); + $table->dropColumn('country_id'); + $table->dropForeign(['city_id']); + $table->dropColumn('city_id'); }); } } diff --git a/database/migrations/2017_03_01_122212_add_drugsOther_to_drugs.php b/database/migrations/2017_03_01_122212_add_drugsOther_to_drugs.php index b15732210..cfbdaafb0 100644 --- a/database/migrations/2017_03_01_122212_add_drugsOther_to_drugs.php +++ b/database/migrations/2017_03_01_122212_add_drugsOther_to_drugs.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('drugs', function (Blueprint $table) { - // + $table->dropColumn('drugsOther'); }); } } diff --git a/database/migrations/2017_03_02_124247_create_stripe_table.php b/database/migrations/2017_03_02_124247_create_stripe_table.php index d954b3227..af65da255 100644 --- a/database/migrations/2017_03_02_124247_create_stripe_table.php +++ b/database/migrations/2017_03_02_124247_create_stripe_table.php @@ -31,8 +31,6 @@ public function up() */ public function down() { - Schema::table('stripe', function (Blueprint $table) { - // - }); + Schema::dropIfExists('stripe'); } } diff --git a/database/migrations/2017_03_02_130701_update_users_stripe_id.php b/database/migrations/2017_03_02_130701_update_users_stripe_id.php index 74f752bcc..2368d4e39 100644 --- a/database/migrations/2017_03_02_130701_update_users_stripe_id.php +++ b/database/migrations/2017_03_02_130701_update_users_stripe_id.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + // $table->dropColumn('stripe_id'); }); } } diff --git a/database/migrations/2017_03_07_162414_add_description_to_plans.php b/database/migrations/2017_03_07_162414_add_description_to_plans.php index ef345babb..08435394e 100644 --- a/database/migrations/2017_03_07_162414_add_description_to_plans.php +++ b/database/migrations/2017_03_07_162414_add_description_to_plans.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('plans', function (Blueprint $table) { - // + $table->dropColumn('subtitle'); }); } } diff --git a/database/migrations/2017_03_07_200856_add_plan_to_stripe.php b/database/migrations/2017_03_07_200856_add_plan_to_stripe.php index fadc4f00f..370d51f3d 100644 --- a/database/migrations/2017_03_07_200856_add_plan_to_stripe.php +++ b/database/migrations/2017_03_07_200856_add_plan_to_stripe.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('stripe', function (Blueprint $table) { - // + $table->dropColumn('plan'); }); } } diff --git a/database/migrations/2017_03_07_234737_add_cashier_to_users.php b/database/migrations/2017_03_07_234737_add_cashier_to_users.php index 5d362a07a..0a8190dc9 100644 --- a/database/migrations/2017_03_07_234737_add_cashier_to_users.php +++ b/database/migrations/2017_03_07_234737_add_cashier_to_users.php @@ -27,8 +27,10 @@ public function up() */ public function down() { - Schema::table('users', function (Blueprint $table) { - // - }); +// Schema::table('users', function (Blueprint $table) { +// $table->dropColumn('card_brand'); +// $table->dropColumn('card_last_four'); +// $table->dropColumn('trial_ends_at'); +// }); } } diff --git a/database/migrations/2017_03_08_163945_add_remaining_images_to_users.php b/database/migrations/2017_03_08_163945_add_remaining_images_to_users.php index 363366b6a..c110332d4 100644 --- a/database/migrations/2017_03_08_163945_add_remaining_images_to_users.php +++ b/database/migrations/2017_03_08_163945_add_remaining_images_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + // $table->dropColumn('images_remaining'); }); } } diff --git a/database/migrations/2017_03_08_164811_add_images_to_plans.php b/database/migrations/2017_03_08_164811_add_images_to_plans.php index b1dd66f62..c3e381e05 100644 --- a/database/migrations/2017_03_08_164811_add_images_to_plans.php +++ b/database/migrations/2017_03_08_164811_add_images_to_plans.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('plans', function (Blueprint $table) { - // + $table->dropColumn('images'); }); } } diff --git a/database/migrations/2017_03_08_171526_add_default_to_images_remaining.php b/database/migrations/2017_03_08_171526_add_default_to_images_remaining.php index 0797088be..49b66d66e 100644 --- a/database/migrations/2017_03_08_171526_add_default_to_images_remaining.php +++ b/database/migrations/2017_03_08_171526_add_default_to_images_remaining.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('images_remaining'); }); } } diff --git a/database/migrations/2017_03_09_111141_add_stripe_active_to_subscriptions.php b/database/migrations/2017_03_09_111141_add_stripe_active_to_subscriptions.php index b66dfe759..15eb51b1e 100644 --- a/database/migrations/2017_03_09_111141_add_stripe_active_to_subscriptions.php +++ b/database/migrations/2017_03_09_111141_add_stripe_active_to_subscriptions.php @@ -25,8 +25,8 @@ public function up() */ public function down() { - Schema::table('subscriptions', function (Blueprint $table) { - // - }); +// Schema::table('subscriptions', function (Blueprint $table) { +// $table->dropColumn('stripe_active'); +// }); } } diff --git a/database/migrations/2017_03_10_163232_change_foreign_key_photos_table_user_id.php b/database/migrations/2017_03_10_163232_change_foreign_key_photos_table_user_id.php index da57aaa7d..84de21102 100644 --- a/database/migrations/2017_03_10_163232_change_foreign_key_photos_table_user_id.php +++ b/database/migrations/2017_03_10_163232_change_foreign_key_photos_table_user_id.php @@ -13,10 +13,10 @@ class ChangeForeignKeyPhotosTableUserId extends Migration */ public function up() { - // Schema::table('photos', function (Blueprint $table) { - // $table->dropForeign('photos_user_id_foreign'); - // $table->foreign('user_id')->references('id')->on('users'); - // }); + Schema::table('photos', function (Blueprint $table) { +// $table->dropForeign(['user_id']); +// $table->foreign('user_id')->references('id')->on('users'); + }); } /** @@ -27,7 +27,7 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // +// $table->dropForeign(['user_id']); }); } } diff --git a/database/migrations/2017_03_10_164009_change_foreign_key_photos_table_user_id2.php b/database/migrations/2017_03_10_164009_change_foreign_key_photos_table_user_id2.php index b5be1fb3a..6d835e618 100644 --- a/database/migrations/2017_03_10_164009_change_foreign_key_photos_table_user_id2.php +++ b/database/migrations/2017_03_10_164009_change_foreign_key_photos_table_user_id2.php @@ -13,9 +13,9 @@ class ChangeForeignKeyPhotosTableUserId2 extends Migration */ public function up() { - // Schema::table('photos', function (Blueprint $table) { - // $table->foreign('user_id')->references('id')->on('users'); - // }); + Schema::table('photos', function (Blueprint $table) { +// $table->foreign('user_id')->references('id')->on('users'); + }); } /** @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // +// $table->dropForeign(['user_id']); }); } } diff --git a/database/migrations/2017_03_11_115537_add_totals_to_countries.php b/database/migrations/2017_03_11_115537_add_totals_to_countries.php index 4e75a4887..a37feca47 100644 --- a/database/migrations/2017_03_11_115537_add_totals_to_countries.php +++ b/database/migrations/2017_03_11_115537_add_totals_to_countries.php @@ -37,7 +37,18 @@ public function up() public function down() { Schema::table('countries', function (Blueprint $table) { - // + $table->dropColumn('total_images'); + $table->dropColumn('total_smoking'); + $table->dropColumn('total_cigaretteButts'); + $table->dropColumn('total_food'); + $table->dropColumn('total_softDrinks'); + $table->dropColumn('total_plasticBottles'); + $table->dropColumn('total_alcohol'); + $table->dropColumn('total_coffee'); + $table->dropColumn('total_drugs'); + $table->dropColumn('total_needles'); + $table->dropColumn('total_sanitary'); + $table->dropColumn('total_other'); }); } } diff --git a/database/migrations/2017_03_11_115554_add_totals_to_cities.php b/database/migrations/2017_03_11_115554_add_totals_to_cities.php index d6e073280..691686bbb 100644 --- a/database/migrations/2017_03_11_115554_add_totals_to_cities.php +++ b/database/migrations/2017_03_11_115554_add_totals_to_cities.php @@ -25,7 +25,7 @@ public function up() $table->integer('total_drugs')->unsigned()->nullable(); $table->integer('total_needles')->unsigned()->nullable(); $table->integer('total_sanitary')->unsigned()->nullable(); - $table->integer('total_other')->unsigned()->nullable(); + $table->integer('total_other')->unsigned()->nullable(); }); } @@ -37,7 +37,18 @@ public function up() public function down() { Schema::table('cities', function (Blueprint $table) { - // + $table->dropColumn('total_images'); + $table->dropColumn('total_smoking'); + $table->dropColumn('total_cigaretteButts'); + $table->dropColumn('total_food'); + $table->dropColumn('total_softDrinks'); + $table->dropColumn('total_plasticBottles'); + $table->dropColumn('total_alcohol'); + $table->dropColumn('total_coffee'); + $table->dropColumn('total_drugs'); + $table->dropColumn('total_needles'); + $table->dropColumn('total_sanitary'); + $table->dropColumn('total_other'); }); } } diff --git a/database/migrations/2017_03_15_223049_add_verify_remaining_to_users.php b/database/migrations/2017_03_15_223049_add_verify_remaining_to_users.php index f6cb57b74..c8893f3f6 100644 --- a/database/migrations/2017_03_15_223049_add_verify_remaining_to_users.php +++ b/database/migrations/2017_03_15_223049_add_verify_remaining_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('verify_remaining'); }); } } diff --git a/database/migrations/2017_03_15_223628_add_verify_to_plans.php b/database/migrations/2017_03_15_223628_add_verify_to_plans.php index 219328fba..cd7a305b5 100644 --- a/database/migrations/2017_03_15_223628_add_verify_to_plans.php +++ b/database/migrations/2017_03_15_223628_add_verify_to_plans.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('plans', function (Blueprint $table) { - // + $table->dropColumn('verify'); }); } } diff --git a/database/migrations/2017_03_16_120436_add_has_uploaded_to_users.php b/database/migrations/2017_03_16_120436_add_has_uploaded_to_users.php index 6f02b2c2a..5c43062d3 100644 --- a/database/migrations/2017_03_16_120436_add_has_uploaded_to_users.php +++ b/database/migrations/2017_03_16_120436_add_has_uploaded_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('has_uploaded'); }); } } diff --git a/database/migrations/2017_03_27_115016_add_incorrect_verification_to_photos.php b/database/migrations/2017_03_27_115016_add_incorrect_verification_to_photos.php index 4ef21ab8d..dcc64143b 100644 --- a/database/migrations/2017_03_27_115016_add_incorrect_verification_to_photos.php +++ b/database/migrations/2017_03_27_115016_add_incorrect_verification_to_photos.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropColumn('incorrect_verification'); }); } } diff --git a/database/migrations/2017_03_29_225010_add_total_contributors_to_countries.php b/database/migrations/2017_03_29_225010_add_total_contributors_to_countries.php index 47d0ba7dc..d23bc2c4d 100644 --- a/database/migrations/2017_03_29_225010_add_total_contributors_to_countries.php +++ b/database/migrations/2017_03_29_225010_add_total_contributors_to_countries.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('countries', function (Blueprint $table) { - // + $table->dropColumn('total_contributors'); }); } } diff --git a/database/migrations/2017_04_01_222901_add_total_litter_to_photos.php b/database/migrations/2017_04_01_222901_add_total_litter_to_photos.php index 881020096..c33f952a9 100644 --- a/database/migrations/2017_04_01_222901_add_total_litter_to_photos.php +++ b/database/migrations/2017_04_01_222901_add_total_litter_to_photos.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropColumn('total_litter'); }); } } diff --git a/database/migrations/2017_04_02_133607_add_total_contributors_to_cities.php b/database/migrations/2017_04_02_133607_add_total_contributors_to_cities.php index 8c74ff883..2d30e4354 100644 --- a/database/migrations/2017_04_02_133607_add_total_contributors_to_cities.php +++ b/database/migrations/2017_04_02_133607_add_total_contributors_to_cities.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('cities', function (Blueprint $table) { - // + $table->dropColumn('total_contributors'); }); } } diff --git a/database/migrations/2017_04_05_165718_add_total_verified_to_users.php b/database/migrations/2017_04_05_165718_add_total_verified_to_users.php index 03baf194d..296480153 100644 --- a/database/migrations/2017_04_05_165718_add_total_verified_to_users.php +++ b/database/migrations/2017_04_05_165718_add_total_verified_to_users.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('total_verified'); + $table->dropColumn('total_litter'); }); } } diff --git a/database/migrations/2017_04_05_171539_add_total_litter_verified_to_users.php b/database/migrations/2017_04_05_171539_add_total_litter_verified_to_users.php index 0b02e3b88..9bf482a80 100644 --- a/database/migrations/2017_04_05_171539_add_total_litter_verified_to_users.php +++ b/database/migrations/2017_04_05_171539_add_total_litter_verified_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('total_verified_litter'); }); } } diff --git a/database/migrations/2017_04_12_140433_add_totals_to_photos_again.php b/database/migrations/2017_04_12_140433_add_totals_to_photos_again.php index 57b4dc5d4..cc5fcf79e 100644 --- a/database/migrations/2017_04_12_140433_add_totals_to_photos_again.php +++ b/database/migrations/2017_04_12_140433_add_totals_to_photos_again.php @@ -14,29 +14,29 @@ class AddTotalsToPhotosAgain extends Migration public function up() { Schema::table('photos', function (Blueprint $table) { - // $table->integer('smoking_id')->unsigned()->nullable(); - // $table->foreign('smoking_id')->references('id')->on('smoking')->onDelete('cascade'); - - // $table->integer('food_id')->unsigned()->nullable(); - // $table->foreign('food_id')->references('id')->on('food')->onDelete('cascade'); - - // $table->integer('coffee_id')->unsigned()->nullable(); - // $table->foreign('coffee_id')->references('id')->on('coffee')->onDelete('cascade'); - - // $table->integer('alcohol_id')->unsigned()->nullable(); - // $table->foreign('alcohol_id')->references('id')->on('alcohol')->onDelete('cascade'); - - // $table->integer('softdrinks_id')->unsigned()->nullable(); - // $table->foreign('softdrinks_id')->references('id')->on('softdrinks')->onDelete('cascade'); - - // $table->integer('drugs_id')->unsigned()->nullable(); - // $table->foreign('drugs_id')->references('id')->on('drugs')->onDelete('cascade'); - - // $table->integer('sanitary_id')->unsigned()->nullable(); - // $table->foreign('sanitary_id')->references('id')->on('sanitary')->onDelete('cascade'); - - // $table->integer('other_id')->unsigned()->nullable(); - // $table->foreign('other_id')->references('id')->on('other')->onDelete('cascade'); +// $table->integer('smoking_id')->unsigned()->nullable(); +// $table->foreign('smoking_id')->references('id')->on('smoking')->onDelete('cascade'); +// +// $table->integer('food_id')->unsigned()->nullable(); +// $table->foreign('food_id')->references('id')->on('food')->onDelete('cascade'); +// +// $table->integer('coffee_id')->unsigned()->nullable(); +// $table->foreign('coffee_id')->references('id')->on('coffee')->onDelete('cascade'); +// +// $table->integer('alcohol_id')->unsigned()->nullable(); +// $table->foreign('alcohol_id')->references('id')->on('alcohol')->onDelete('cascade'); +// +// $table->integer('softdrinks_id')->unsigned()->nullable(); +// $table->foreign('softdrinks_id')->references('id')->on('softdrinks')->onDelete('cascade'); +// +// $table->integer('drugs_id')->unsigned()->nullable(); +// $table->foreign('drugs_id')->references('id')->on('drugs')->onDelete('cascade'); +// +// $table->integer('sanitary_id')->unsigned()->nullable(); +// $table->foreign('sanitary_id')->references('id')->on('sanitary')->onDelete('cascade'); +// +// $table->integer('other_id')->unsigned()->nullable(); +// $table->foreign('other_id')->references('id')->on('other')->onDelete('cascade'); }); } @@ -48,7 +48,29 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // +// $table->dropForeign(['smoking_id']); +// $table->dropColumn('smoking_id'); +// +// $table->dropForeign(['food_id']); +// $table->dropColumn('food_id'); +// +// $table->dropForeign(['coffee_id']); +// $table->dropColumn('coffee_id'); +// +// $table->dropForeign(['alcohol_id']); +// $table->dropColumn('alcohol_id'); +// +// $table->dropForeign(['softdrinks_id']); +// $table->dropColumn('softdrinks_id'); +// +// $table->dropForeign(['drugs_id']); +// $table->dropColumn('drugs_id'); +// +// $table->dropForeign(['sanitary_id']); +// $table->dropColumn('sanitary_id'); +// +// $table->dropForeign(['other_id']); +// $table->dropColumn('other_id'); }); } } diff --git a/database/migrations/2017_04_12_140917_create_food_table_again.php b/database/migrations/2017_04_12_140917_create_food_table_again.php index 98bd5b0c9..fea91cc35 100644 --- a/database/migrations/2017_04_12_140917_create_food_table_again.php +++ b/database/migrations/2017_04_12_140917_create_food_table_again.php @@ -13,21 +13,21 @@ class CreateFoodTableAgain extends Migration */ public function up() { - // Schema::create('food', function (Blueprint $table) { - // $table->increments('id'); - - // $table->integer('photo_id')->unsigned(); - // $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); - - // $table->integer('sweetWrappers')->unsigned()->nullable(); - // $table->integer('cardboardFoodPackaging')->unsigned()->nullable(); - // $table->integer('paperFoodPackaging')->unsigned()->nullable(); - // $table->integer('plasticFoodPackaging')->unsigned()->nullable(); - // $table->integer('plasticCutlery')->unsigned()->nullable(); - // $table->integer('foodOther')->unsigned()->nullable(); - - // $table->timestamps(); - // }); +// Schema::create('food', function (Blueprint $table) { +// $table->increments('id'); +// +// $table->integer('photo_id')->unsigned(); +// $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); +// +// $table->integer('sweetWrappers')->unsigned()->nullable(); +// $table->integer('cardboardFoodPackaging')->unsigned()->nullable(); +// $table->integer('paperFoodPackaging')->unsigned()->nullable(); +// $table->integer('plasticFoodPackaging')->unsigned()->nullable(); +// $table->integer('plasticCutlery')->unsigned()->nullable(); +// $table->integer('foodOther')->unsigned()->nullable(); +// +// $table->timestamps(); +// }); } /** @@ -37,6 +37,10 @@ public function up() */ public function down() { - Schema::dropIfExists('food'); +// Schema::table('food', function (Blueprint $table) { +// $table->dropForeign(['photo_id']); +// }); +// +// Schema::dropIfExists('food'); } } diff --git a/database/migrations/2017_04_12_142138_create_others_table_again.php b/database/migrations/2017_04_12_142138_create_others_table_again.php index 703b45c8f..704f2798e 100644 --- a/database/migrations/2017_04_12_142138_create_others_table_again.php +++ b/database/migrations/2017_04_12_142138_create_others_table_again.php @@ -13,20 +13,20 @@ class CreateOthersTableAgain extends Migration */ public function up() { - // Schema::create('others', function (Blueprint $table) { - // $table->increments('id'); - - // $table->integer('photo_id')->unsigned(); - // $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); - - // $table->integer('dogshit')->unsigned()->nullable(); - // $table->integer('dump')->unsigned()->nullable(); - // $table->integer('plastic')->unsigned()->nullable(); - // $table->integer('metal')->unsigned()->nullable(); - // $table->integer('other')->unsigned()->nullable(); - - // $table->timestamps(); - // }); +// Schema::create('others', function (Blueprint $table) { +// $table->increments('id'); +// +// $table->integer('photo_id')->unsigned(); +// $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); +// +// $table->integer('dogshit')->unsigned()->nullable(); +// $table->integer('dump')->unsigned()->nullable(); +// $table->integer('plastic')->unsigned()->nullable(); +// $table->integer('metal')->unsigned()->nullable(); +// $table->integer('other')->unsigned()->nullable(); +// +// $table->timestamps(); +// }); } /** @@ -36,6 +36,10 @@ public function up() */ public function down() { - Schema::dropIfExists('others'); +// Schema::table('others', function (Blueprint $table) { +// $table->dropForeign(['photo_id']); +// }); +// +// Schema::dropIfExists('others'); } } diff --git a/database/migrations/2017_04_12_143107_create_alcohol_table_again.php b/database/migrations/2017_04_12_143107_create_alcohol_table_again.php index 8f483eda6..88b50995b 100644 --- a/database/migrations/2017_04_12_143107_create_alcohol_table_again.php +++ b/database/migrations/2017_04_12_143107_create_alcohol_table_again.php @@ -13,23 +13,23 @@ class CreateAlcoholTableAgain extends Migration */ public function up() { - // Schema::create('alcohol', function (Blueprint $table) { - // $table->increments('id'); - - // $table->integer('photo_id')->unsigned(); - // $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); - - // $table->integer('glassAlcoholBottle')->unsigned()->nullable(); - // $table->integer('glassAlcoholSpirits')->unsigned()->nullable(); - // $table->integer('alcoholCan')->unsigned()->nullable(); - // $table->integer('brokenGlass')->unsigned()->nullable(); - // $table->integer('paperCardAlcoholPackaging')->unsigned()->nullable(); - // $table->integer('plasticAlcoholPackaging')->unsigned()->nullable(); - // $table->integer('bottleTops')->unsigned()->nullable(); - // $table->integer('alcoholOther')->unsigned()->nullable(); - - // $table->timestamps(); - // }); +// Schema::create('alcohol', function (Blueprint $table) { +// $table->increments('id'); +// +// $table->integer('photo_id')->unsigned(); +// $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); +// +// $table->integer('glassAlcoholBottle')->unsigned()->nullable(); +// $table->integer('glassAlcoholSpirits')->unsigned()->nullable(); +// $table->integer('alcoholCan')->unsigned()->nullable(); +// $table->integer('brokenGlass')->unsigned()->nullable(); +// $table->integer('paperCardAlcoholPackaging')->unsigned()->nullable(); +// $table->integer('plasticAlcoholPackaging')->unsigned()->nullable(); +// $table->integer('bottleTops')->unsigned()->nullable(); +// $table->integer('alcoholOther')->unsigned()->nullable(); +// +// $table->timestamps(); +// }); } /** @@ -39,6 +39,10 @@ public function up() */ public function down() { - Schema::dropIfExists('alcohol'); +// Schema::table('alcohol', function (Blueprint $table) { +// $table->dropForeign(['photo_id']); +// }); +// +// Schema::dropIfExists('alcohol'); } } diff --git a/database/migrations/2017_05_08_145013_add_coastal_id_to_photos.php b/database/migrations/2017_05_08_145013_add_coastal_id_to_photos.php index 8de2acade..4cd73bf23 100644 --- a/database/migrations/2017_05_08_145013_add_coastal_id_to_photos.php +++ b/database/migrations/2017_05_08_145013_add_coastal_id_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['coastal_id']); + $table->dropColumn('coastal_id'); }); } } diff --git a/database/migrations/2017_05_08_153140_add_total_coastal_to_cities.php b/database/migrations/2017_05_08_153140_add_total_coastal_to_cities.php index 4ba2de310..1f5ee547a 100644 --- a/database/migrations/2017_05_08_153140_add_total_coastal_to_cities.php +++ b/database/migrations/2017_05_08_153140_add_total_coastal_to_cities.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('cities', function (Blueprint $table) { - // + $table->dropColumn('total_coastal'); }); } } diff --git a/database/migrations/2017_05_11_144254_add_emailsubs_to_users.php b/database/migrations/2017_05_11_144254_add_emailsubs_to_users.php index 42e3bc957..776871c15 100644 --- a/database/migrations/2017_05_11_144254_add_emailsubs_to_users.php +++ b/database/migrations/2017_05_11_144254_add_emailsubs_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('emailsub'); }); } } diff --git a/database/migrations/2017_05_11_150300_add_randomstr_to_users.php b/database/migrations/2017_05_11_150300_add_randomstr_to_users.php index 96181ed2a..cd7e26c05 100644 --- a/database/migrations/2017_05_11_150300_add_randomstr_to_users.php +++ b/database/migrations/2017_05_11_150300_add_randomstr_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('sub_token'); }); } } diff --git a/database/migrations/2017_05_14_113515_add_state_id_to_cities.php b/database/migrations/2017_05_14_113515_add_state_id_to_cities.php index e8043c0bc..0ecb45bc7 100644 --- a/database/migrations/2017_05_14_113515_add_state_id_to_cities.php +++ b/database/migrations/2017_05_14_113515_add_state_id_to_cities.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('cities', function (Blueprint $table) { - // + $table->dropForeign(['state_id']); + $table->dropColumn('state_id'); }); } -} \ No newline at end of file +} diff --git a/database/migrations/2017_05_14_151416_add_state_id_to_photos.php b/database/migrations/2017_05_14_151416_add_state_id_to_photos.php index 217f15f42..e343812d9 100644 --- a/database/migrations/2017_05_14_151416_add_state_id_to_photos.php +++ b/database/migrations/2017_05_14_151416_add_state_id_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['state_id']); + $table->dropColumn('state_id'); }); } } diff --git a/database/migrations/2017_05_18_104612_add_items_to_softdrinks.php b/database/migrations/2017_05_18_104612_add_items_to_softdrinks.php index 31177d6d6..d7cf22e29 100644 --- a/database/migrations/2017_05_18_104612_add_items_to_softdrinks.php +++ b/database/migrations/2017_05_18_104612_add_items_to_softdrinks.php @@ -30,7 +30,11 @@ public function up() public function down() { Schema::table('soft_drinks', function (Blueprint $table) { - // + $table->dropColumn('straws'); + $table->dropColumn('plastic_cups'); + $table->dropColumn('plastic_cup_tops'); + $table->dropColumn('milk_bottle'); + $table->dropColumn('milk_carton'); }); } } diff --git a/database/migrations/2017_05_18_104757_add_stuff_to_other.php b/database/migrations/2017_05_18_104757_add_stuff_to_other.php index 14f4307ce..38a986950 100644 --- a/database/migrations/2017_05_18_104757_add_stuff_to_other.php +++ b/database/migrations/2017_05_18_104757_add_stuff_to_other.php @@ -32,7 +32,13 @@ public function up() public function down() { Schema::table('others', function (Blueprint $table) { - // + $table->dropColumn('plastic_bags'); + $table->dropColumn('election_posters'); + $table->dropColumn('forsale_posters'); + $table->dropColumn('books'); + $table->dropColumn('magazine'); + $table->dropColumn('paper'); + $table->dropColumn('stationary'); }); } } diff --git a/database/migrations/2017_05_18_104915_add_things_to_sanitary.php b/database/migrations/2017_05_18_104915_add_things_to_sanitary.php index 1d188a719..c478fb4e0 100644 --- a/database/migrations/2017_05_18_104915_add_things_to_sanitary.php +++ b/database/migrations/2017_05_18_104915_add_things_to_sanitary.php @@ -28,7 +28,9 @@ public function up() public function down() { Schema::table('sanitary', function (Blueprint $table) { - // + $table->dropColumn('ear_swabs'); + $table->dropColumn('tooth_pick'); + $table->dropColumn('tooth_brush'); }); } } diff --git a/database/migrations/2017_05_18_105028_add_drugs_to_drugs.php b/database/migrations/2017_05_18_105028_add_drugs_to_drugs.php index 3285e938c..b55d710de 100644 --- a/database/migrations/2017_05_18_105028_add_drugs_to_drugs.php +++ b/database/migrations/2017_05_18_105028_add_drugs_to_drugs.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('drugs', function (Blueprint $table) { - // + $table->dropColumn('baggie'); + $table->dropColumn('crack_pipes'); }); } } diff --git a/database/migrations/2017_05_18_111416_add_pathway_id_to_photos.php b/database/migrations/2017_05_18_111416_add_pathway_id_to_photos.php index af0f7d376..f5b2afdca 100644 --- a/database/migrations/2017_05_18_111416_add_pathway_id_to_photos.php +++ b/database/migrations/2017_05_18_111416_add_pathway_id_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['pathways_id']); + $table->dropColumn('pathways_id'); }); } } diff --git a/database/migrations/2017_05_18_111843_add_total_pathway_to_users.php b/database/migrations/2017_05_18_111843_add_total_pathway_to_users.php index a16cce051..ab286e902 100644 --- a/database/migrations/2017_05_18_111843_add_total_pathway_to_users.php +++ b/database/migrations/2017_05_18_111843_add_total_pathway_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('total_pathways'); }); } } diff --git a/database/migrations/2017_05_21_133711_add_eth_wallet_id_to_users.php b/database/migrations/2017_05_21_133711_add_eth_wallet_id_to_users.php index 75ec9888c..f92155915 100644 --- a/database/migrations/2017_05_21_133711_add_eth_wallet_id_to_users.php +++ b/database/migrations/2017_05_21_133711_add_eth_wallet_id_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('eth_wallet'); }); } } diff --git a/database/migrations/2017_05_25_113747_add_littercoinsdaily_to_users.php b/database/migrations/2017_05_25_113747_add_littercoinsdaily_to_users.php index b04a5a2d5..bc6cebb69 100644 --- a/database/migrations/2017_05_25_113747_add_littercoinsdaily_to_users.php +++ b/database/migrations/2017_05_25_113747_add_littercoinsdaily_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('littercoin_allowance'); }); } } diff --git a/database/migrations/2017_05_25_174506_add_daily_counter_to_users.php b/database/migrations/2017_05_25_174506_add_daily_counter_to_users.php index ea6cbe260..b9326c7c7 100644 --- a/database/migrations/2017_05_25_174506_add_daily_counter_to_users.php +++ b/database/migrations/2017_05_25_174506_add_daily_counter_to_users.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('has_uploaded_today'); + $table->dropColumn('has_uploaded_counter'); }); } } diff --git a/database/migrations/2017_06_13_130004_add_phonenum_to_users.php b/database/migrations/2017_06_13_130004_add_phonenum_to_users.php index 2ff5d97c8..fb188f0f4 100644 --- a/database/migrations/2017_06_13_130004_add_phonenum_to_users.php +++ b/database/migrations/2017_06_13_130004_add_phonenum_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('phone'); }); } } diff --git a/database/migrations/2017_07_05_222621_create_teams_table.php b/database/migrations/2017_07_05_222621_create_teams_table.php index b6dd209e5..76ce325b5 100644 --- a/database/migrations/2017_07_05_222621_create_teams_table.php +++ b/database/migrations/2017_07_05_222621_create_teams_table.php @@ -33,6 +33,11 @@ public function up() */ public function down() { + Schema::table('teams', function (Blueprint $table) { + $table->dropForeign(['leader']); + $table->dropColumn('leader'); + }); + Schema::dropIfExists('teams'); } } diff --git a/database/migrations/2017_07_06_102948_add_teamtypes_id_to_teams.php b/database/migrations/2017_07_06_102948_add_teamtypes_id_to_teams.php index 0a5a6da5a..ddc3df704 100644 --- a/database/migrations/2017_07_06_102948_add_teamtypes_id_to_teams.php +++ b/database/migrations/2017_07_06_102948_add_teamtypes_id_to_teams.php @@ -28,7 +28,9 @@ public function up() public function down() { Schema::table('teams', function (Blueprint $table) { - // + $table->dropForeign(['type_id']); + $table->dropColumn('type_id'); + $table->dropColumn('type_name'); }); } } diff --git a/database/migrations/2017_07_11_120023_add_active_team_to_users.php b/database/migrations/2017_07_11_120023_add_active_team_to_users.php index 5e04a7f3b..988a56a71 100644 --- a/database/migrations/2017_07_11_120023_add_active_team_to_users.php +++ b/database/migrations/2017_07_11_120023_add_active_team_to_users.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropForeign(['active_team']); + $table->dropColumn('active_team'); }); } } diff --git a/database/migrations/2017_09_27_183221_add_social_media_to_users.php b/database/migrations/2017_09_27_183221_add_social_media_to_users.php index 4a3388fdc..de73096f6 100644 --- a/database/migrations/2017_09_27_183221_add_social_media_to_users.php +++ b/database/migrations/2017_09_27_183221_add_social_media_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('link_instagram'); }); } } diff --git a/database/migrations/2017_10_05_155628_add_arts_id_to_photos.php b/database/migrations/2017_10_05_155628_add_arts_id_to_photos.php index 759cfb70a..9f6232fae 100644 --- a/database/migrations/2017_10_05_155628_add_arts_id_to_photos.php +++ b/database/migrations/2017_10_05_155628_add_arts_id_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['art_id']); + $table->dropColumn('art_id'); }); } } diff --git a/database/migrations/2017_10_05_164853_add_total_art_to_users.php b/database/migrations/2017_10_05_164853_add_total_art_to_users.php index c49418e69..dde768ba2 100644 --- a/database/migrations/2017_10_05_164853_add_total_art_to_users.php +++ b/database/migrations/2017_10_05_164853_add_total_art_to_users.php @@ -14,7 +14,7 @@ class AddTotalArtToUsers extends Migration public function up() { Schema::table('users', function (Blueprint $table) { - $table->integer('total_art')->unsigned()->nullable(); + $table->integer('total_art')->unsigned()->nullable(); }); } @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('total_art'); }); } } diff --git a/database/migrations/2018_01_07_151802_add_no_verification_required_to_users.php b/database/migrations/2018_01_07_151802_add_no_verification_required_to_users.php index 10083c0cd..87e0c2d8e 100644 --- a/database/migrations/2018_01_07_151802_add_no_verification_required_to_users.php +++ b/database/migrations/2018_01_07_151802_add_no_verification_required_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('verification_required'); }); } } diff --git a/database/migrations/2018_02_11_150508_add_littercoin_owed_to_users.php b/database/migrations/2018_02_11_150508_add_littercoin_owed_to_users.php index 756747a19..a6e9499fa 100644 --- a/database/migrations/2018_02_11_150508_add_littercoin_owed_to_users.php +++ b/database/migrations/2018_02_11_150508_add_littercoin_owed_to_users.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn("littercoin_owed"); + $table->dropColumn("littercoin_paid"); }); } } diff --git a/database/migrations/2018_02_12_012514_add_count_correctly_verified_to_users.php b/database/migrations/2018_02_12_012514_add_count_correctly_verified_to_users.php index fff1f0a8f..dcdff082c 100644 --- a/database/migrations/2018_02_12_012514_add_count_correctly_verified_to_users.php +++ b/database/migrations/2018_02_12_012514_add_count_correctly_verified_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('count_correctly_verified'); }); } } diff --git a/database/migrations/2018_02_14_165420_add_brands_id_to_photos.php b/database/migrations/2018_02_14_165420_add_brands_id_to_photos.php index 29dcc5c7e..be9c01444 100644 --- a/database/migrations/2018_02_14_165420_add_brands_id_to_photos.php +++ b/database/migrations/2018_02_14_165420_add_brands_id_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['brands_id']); + $table->dropColumn('brands_id'); }); } } diff --git a/database/migrations/2018_02_22_175840_add_received_littercoin_instructions_to_users.php b/database/migrations/2018_02_22_175840_add_received_littercoin_instructions_to_users.php index 455b110df..e5b5a3348 100644 --- a/database/migrations/2018_02_22_175840_add_received_littercoin_instructions_to_users.php +++ b/database/migrations/2018_02_22_175840_add_received_littercoin_instructions_to_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('littercoin_instructions_received'); }); } } diff --git a/database/migrations/2018_06_19_090307_add_trashdog_to_photos.php b/database/migrations/2018_06_19_090307_add_trashdog_to_photos.php index 86505749a..444bbd3c5 100644 --- a/database/migrations/2018_06_19_090307_add_trashdog_to_photos.php +++ b/database/migrations/2018_06_19_090307_add_trashdog_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['trashdog_id']); + $table->dropColumn('trashdog_id'); }); } } diff --git a/database/migrations/2019_02_16_104906_add_show_nameusername_locations.php b/database/migrations/2019_02_16_104906_add_show_nameusername_locations.php index 074d5f5a0..92edf3d6e 100644 --- a/database/migrations/2019_02_16_104906_add_show_nameusername_locations.php +++ b/database/migrations/2019_02_16_104906_add_show_nameusername_locations.php @@ -29,7 +29,10 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('show_name_maps'); + $table->dropColumn('show_username_maps'); + $table->dropColumn('show_name_createdby'); + $table->dropColumn('show_username_createdby'); }); } } diff --git a/database/migrations/2019_04_10_165600_add_politicals_id_to_photos.php b/database/migrations/2019_04_10_165600_add_politicals_id_to_photos.php index 658bb22e8..c92609ffe 100644 --- a/database/migrations/2019_04_10_165600_add_politicals_id_to_photos.php +++ b/database/migrations/2019_04_10_165600_add_politicals_id_to_photos.php @@ -27,7 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - // + $table->dropForeign(['political_id']); + $table->dropColumn('political_id'); }); } } diff --git a/database/migrations/2019_10_13_141631_add_country_flag_to_global_leaderboard_settings_users.php b/database/migrations/2019_10_13_141631_add_country_flag_to_global_leaderboard_settings_users.php index e8aa5df96..c3ad9c1ba 100644 --- a/database/migrations/2019_10_13_141631_add_country_flag_to_global_leaderboard_settings_users.php +++ b/database/migrations/2019_10_13_141631_add_country_flag_to_global_leaderboard_settings_users.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('global_flag'); }); } } diff --git a/database/migrations/2020_05_10_114433_add_previous_tags_to_users_settings.php b/database/migrations/2020_05_10_114433_add_previous_tags_to_users_settings.php index d07a61d11..3276469d9 100644 --- a/database/migrations/2020_05_10_114433_add_previous_tags_to_users_settings.php +++ b/database/migrations/2020_05_10_114433_add_previous_tags_to_users_settings.php @@ -26,7 +26,7 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->dropColumn('previous_tags'); }); } } diff --git a/database/migrations/2020_05_22_172513_create_dumps_table.php b/database/migrations/2020_05_22_172513_create_dumps_table.php index 671a57bf5..7721f8336 100644 --- a/database/migrations/2020_05_22_172513_create_dumps_table.php +++ b/database/migrations/2020_05_22_172513_create_dumps_table.php @@ -13,6 +13,11 @@ class CreateDumpsTable extends Migration */ public function up() { + // Check if the table exists + if (Schema::hasTable('dumping')) { + return; + } + Schema::create('dumping', function (Blueprint $table) { $table->bigIncrements('id'); $table->integer('small')->unsigned()->nullable(); diff --git a/database/migrations/2020_05_22_172548_create_farms_table.php b/database/migrations/2020_05_22_172548_create_farms_table.php index 2ef81e9d0..8f4485897 100644 --- a/database/migrations/2020_05_22_172548_create_farms_table.php +++ b/database/migrations/2020_05_22_172548_create_farms_table.php @@ -13,6 +13,11 @@ class CreateFarmsTable extends Migration */ public function up() { + // Check if the table exists + if (Schema::hasTable('farming')) { + return; + } + Schema::create('farming', function (Blueprint $table) { $table->bigIncrements('id'); $table->integer('plastic')->unsigned()->nullable(); diff --git a/database/migrations/2020_05_23_211204_create_industry_table.php b/database/migrations/2020_05_23_211204_create_industry_table.php index beca89c5e..4c3c6eee4 100644 --- a/database/migrations/2020_05_23_211204_create_industry_table.php +++ b/database/migrations/2020_05_23_211204_create_industry_table.php @@ -13,6 +13,10 @@ class CreateIndustryTable extends Migration */ public function up() { + if (Schema::hasTable('industrial')) { + return; + } + Schema::create('industrial', function (Blueprint $table) { $table->bigIncrements('id'); $table->integer('oil')->unsigned()->nullable(); diff --git a/database/migrations/2021_01_23_182830_change_user_total_category_names.php b/database/migrations/2021_01_23_182830_change_user_total_category_names.php index f4281c035..acd582f16 100644 --- a/database/migrations/2021_01_23_182830_change_user_total_category_names.php +++ b/database/migrations/2021_01_23_182830_change_user_total_category_names.php @@ -29,7 +29,10 @@ public function up() public function down() { Schema::table('users', function (Blueprint $table) { - // + $table->renameColumn('total_softdrinks', 'total_softDrinks'); + $table->dropColumn('total_dumping'); + $table->dropColumn('total_industrial'); + $table->dropColumn('total_coastal'); }); } } diff --git a/database/migrations/2021_03_23_210323_create_permission_tables.php b/database/migrations/2021_03_23_210323_create_permission_tables.php index af08e21cf..ba7d43494 100644 --- a/database/migrations/2021_03_23_210323_create_permission_tables.php +++ b/database/migrations/2021_03_23_210323_create_permission_tables.php @@ -16,7 +16,8 @@ public function up() $tableNames = config('permission.table_names'); $columnNames = config('permission.column_names'); - Schema::rename('roles', 'old_roles'); + Schema::dropIfExists('roles'); + Schema::dropIfExists('permissions'); if (empty($tableNames)) { throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.'); @@ -107,10 +108,10 @@ public function down() throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); } - Schema::drop($tableNames['role_has_permissions']); - Schema::drop($tableNames['model_has_roles']); - Schema::drop($tableNames['model_has_permissions']); - Schema::drop($tableNames['roles']); - Schema::drop($tableNames['permissions']); + Schema::dropIfExists('role_has_permissions'); + Schema::dropIfExists('model_has_roles'); + Schema::dropIfExists('model_has_permissions'); + Schema::dropIfExists('roles'); + Schema::dropIfExists('permissions'); } } diff --git a/database/migrations/2022_03_03_140223_add_created_at_indexes.php b/database/migrations/2022_03_03_140223_add_created_at_indexes.php index 73323ee3e..b2faf02cd 100644 --- a/database/migrations/2022_03_03_140223_add_created_at_indexes.php +++ b/database/migrations/2022_03_03_140223_add_created_at_indexes.php @@ -28,5 +28,11 @@ public function up() */ public function down() { + Schema::table('photos', function (Blueprint $table) { + $table->dropIndex(['created_at']); + }); + Schema::table('users', function (Blueprint $table) { + $table->dropIndex(['created_at']); + }); } } diff --git a/database/migrations/2022_04_24_152210_add_user_settings.php b/database/migrations/2022_04_24_152210_add_user_settings.php index f8907eed9..715bb3085 100644 --- a/database/migrations/2022_04_24_152210_add_user_settings.php +++ b/database/migrations/2022_04_24_152210_add_user_settings.php @@ -25,6 +25,8 @@ public function up() */ public function down() { - // + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('settings'); + }); } } diff --git a/database/migrations/2022_05_31_151921_create_material_table.php b/database/migrations/2022_05_31_151921_create_material_table.php index 85b4e36a0..08ad8f767 100644 --- a/database/migrations/2022_05_31_151921_create_material_table.php +++ b/database/migrations/2022_05_31_151921_create_material_table.php @@ -56,6 +56,11 @@ public function up() */ public function down() { + Schema::table('photos', function (Blueprint $table) { + $table->dropForeign(['material_id']); + $table->dropColumn('material_id'); + }); + Schema::dropIfExists('material'); } } diff --git a/database/migrations/2022_06_14_133103_add_prevent_others_tagging_column_to_users.php b/database/migrations/2022_06_14_133103_add_prevent_others_tagging_column_to_users.php index 39a80ed8c..830acc498 100644 --- a/database/migrations/2022_06_14_133103_add_prevent_others_tagging_column_to_users.php +++ b/database/migrations/2022_06_14_133103_add_prevent_others_tagging_column_to_users.php @@ -21,4 +21,16 @@ public function up() ->index(); }); } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('prevent_others_tagging_my_photos'); + }); + } } diff --git a/database/migrations/2022_08_27_141235_add_littercoin_id_to_photos.php b/database/migrations/2022_08_27_141235_add_littercoin_id_to_photos.php index 5c6836514..df5a26b5e 100644 --- a/database/migrations/2022_08_27_141235_add_littercoin_id_to_photos.php +++ b/database/migrations/2022_08_27_141235_add_littercoin_id_to_photos.php @@ -15,7 +15,6 @@ public function up() { Schema::table('photos', function (Blueprint $table) { $table->unsignedBigInteger('littercoin_id')->nullable(); - $table->foreign('littercoin_id')->references('id')->on('littercoins'); }); } @@ -28,9 +27,8 @@ public function up() public function down() { Schema::table('photos', function (Blueprint $table) { - $table->dropForeign(['littercoin_id']); - - $table->dropColumn('littercoin_id'); + // $table->dropForeign(['littercoin_id']); + // $table->dropColumn('littercoin_id'); }); } } diff --git a/database/migrations/2023_04_18_185258_drop_littercoin_from_photos.php b/database/migrations/2023_04_18_185258_drop_littercoin_from_photos.php index 7553b0121..b20770770 100644 --- a/database/migrations/2023_04_18_185258_drop_littercoin_from_photos.php +++ b/database/migrations/2023_04_18_185258_drop_littercoin_from_photos.php @@ -14,8 +14,8 @@ class DropLittercoinFromPhotos extends Migration public function up() { Schema::table('photos', function (Blueprint $table) { - $table->dropForeign(['littercoin_id']); - $table->dropColumn('littercoin_id'); + // $table->dropForeign(['littercoin_id']); + // $table->dropColumn('littercoin_id'); }); } } diff --git a/database/migrations/2023_08_13_183600_add_created_by_approved_by_to_merchants.php b/database/migrations/2023_08_13_183600_add_created_by_approved_by_to_merchants.php index e63cfca1c..89ec6eb27 100644 --- a/database/migrations/2023_08_13_183600_add_created_by_approved_by_to_merchants.php +++ b/database/migrations/2023_08_13_183600_add_created_by_approved_by_to_merchants.php @@ -30,10 +30,8 @@ public function up() public function down() { Schema::table('merchants', function (Blueprint $table) { - $table->dropForeign([ - 'created_by', - 'approved_by' - ]); + $table->dropForeign(['created_by']); + $table->dropForeign(['approved_by']); $table->dropColumn('created_by'); $table->dropColumn('approved_by'); diff --git a/database/migrations/2024_11_28_121114_create_categories_table.php b/database/migrations/2024_11_28_121114_create_categories_table.php new file mode 100644 index 000000000..030cd6e7f --- /dev/null +++ b/database/migrations/2024_11_28_121114_create_categories_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('key')->unique(); + $table->timestamps(); + + $table->index(['key', 'id'], 'idx_key_id_covering'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('categories'); + } +}; diff --git a/database/migrations/2024_11_28_121147_create_litter_objects_table.php b/database/migrations/2024_11_28_121147_create_litter_objects_table.php new file mode 100644 index 000000000..33be527f0 --- /dev/null +++ b/database/migrations/2024_11_28_121147_create_litter_objects_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('key')->unique(); + $table->timestamps(); + + $table->index(['key', 'id'], 'idx_key_id_covering'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('litter_objects'); + } +}; diff --git a/database/migrations/2024_11_28_125843_create_brandslist_table.php b/database/migrations/2024_11_28_125843_create_brandslist_table.php new file mode 100644 index 000000000..066e04f1d --- /dev/null +++ b/database/migrations/2024_11_28_125843_create_brandslist_table.php @@ -0,0 +1,31 @@ +id(); + $table->string('key')->unique(); + $table->boolean('is_custom')->default(true); + $table->timestamps(); + + $table->index(['key', 'id'], 'idx_key_id_covering'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('brandslist'); + } +}; diff --git a/database/migrations/2024_11_28_130005_create_photo_tags_table.php b/database/migrations/2024_11_28_130005_create_photo_tags_table.php new file mode 100644 index 000000000..437c9e500 --- /dev/null +++ b/database/migrations/2024_11_28_130005_create_photo_tags_table.php @@ -0,0 +1,42 @@ +id(); + $table->unsignedInteger('photo_id'); + $table->foreign('photo_id')->references('id')->on('photos')->onDelete('cascade'); + $table->foreignId('category_id')->nullable()->constrained()->onDelete('cascade'); + $table->foreignId('litter_object_id')->nullable()->constrained()->onDelete('cascade'); + $table->integer('quantity')->nullable(); + $table->boolean('picked_up')->nullable(); + $table->timestamps(); + + // Add composite indexes for common queries + $table->index(['photo_id', 'category_id'], 'idx_photo_category'); + $table->index(['photo_id', 'litter_object_id'], 'idx_photo_object'); + $table->index(['category_id', 'litter_object_id'], 'idx_category_object'); + + // Index for aggregation queries + $table->index(['category_id', 'quantity'], 'idx_category_quantity'); + $table->index(['litter_object_id', 'quantity'], 'idx_object_quantity'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('photo_tags'); + } +}; diff --git a/database/migrations/2024_11_28_130754_create_materials_table.php b/database/migrations/2024_11_28_130754_create_materials_table.php new file mode 100644 index 000000000..fc8882827 --- /dev/null +++ b/database/migrations/2024_11_28_130754_create_materials_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('key')->unique(); + $table->timestamps(); + + $table->index(['key', 'id'], 'idx_key_id_covering'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('materials'); + } +}; diff --git a/database/migrations/2025_01_19_134921_category_litter_object_pivot_table.php b/database/migrations/2025_01_19_134921_category_litter_object_pivot_table.php new file mode 100644 index 000000000..06870b5df --- /dev/null +++ b/database/migrations/2025_01_19_134921_category_litter_object_pivot_table.php @@ -0,0 +1,31 @@ +id(); + $table->foreignId('category_id')->constrained()->onDelete('cascade'); + $table->foreignId('litter_object_id')->constrained()->onDelete('cascade'); + $table->timestamps(); + + $table->unique(['category_id', 'litter_object_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('category_litter_object'); + } +}; diff --git a/database/migrations/2025_01_25_115003_category_litter_object_material_table.php b/database/migrations/2025_01_25_115003_category_litter_object_material_table.php new file mode 100644 index 000000000..14bd0bcae --- /dev/null +++ b/database/migrations/2025_01_25_115003_category_litter_object_material_table.php @@ -0,0 +1,39 @@ +unsignedBigInteger('category_litter_object_id'); + $table->unsignedBigInteger('material_id'); + + // Define a composite primary key. + $table->primary(['category_litter_object_id', 'material_id']); + + // Add foreign key constraints with custom (shorter) names. + $table->foreign('category_litter_object_id', 'fk_clom_cloid') + ->references('id')->on('category_litter_object') + ->onDelete('cascade'); + + $table->foreign('material_id', 'fk_clom_mid') + ->references('id')->on('materials') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('category_litter_object_material'); + } +}; diff --git a/database/migrations/2025_03_01_124611_create_custom_tag_news_table.php b/database/migrations/2025_03_01_124611_create_custom_tag_news_table.php new file mode 100644 index 000000000..f8ea41f91 --- /dev/null +++ b/database/migrations/2025_03_01_124611_create_custom_tag_news_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('key')->unique(); + $table->boolean('approved')->default(false); + $table->unsignedInteger('created_by')->nullable(); + $table->foreign('created_by')->references('id')->on('users')->onDelete('set null'); + $table->timestamps(); + + $table->index(['key', 'id'], 'idx_tag_id_covering'); + $table->index('created_by', 'idx_user_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('custom_tags_new', function (Blueprint $table) { + $table->dropForeign(['created_by']); + }); + + Schema::dropIfExists('custom_tags_new'); + } +}; diff --git a/database/migrations/2025_03_01_174437_create_photo_tag_extras_table.php b/database/migrations/2025_03_01_174437_create_photo_tag_extras_table.php new file mode 100644 index 000000000..133e63de3 --- /dev/null +++ b/database/migrations/2025_03_01_174437_create_photo_tag_extras_table.php @@ -0,0 +1,38 @@ +id(); + $table->unsignedBigInteger('photo_tag_id'); + $table->foreign('photo_tag_id')->references('id')->on('photo_tags')->onDelete('cascade'); + + // Polymorphic relationship + $table->string('tag_type'); + $table->unsignedBigInteger('tag_type_id'); + + $table->integer('quantity')->default(1); + $table->integer('index')->nullable(); + $table->timestamps(); + + $table->index(['tag_type', 'tag_type_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('photo_tag_extra_tags'); + } +}; diff --git a/database/migrations/2025_03_09_170608_add_new_custom_tag_primary_id_to_photo_tags.php b/database/migrations/2025_03_09_170608_add_new_custom_tag_primary_id_to_photo_tags.php new file mode 100644 index 000000000..0ecaea292 --- /dev/null +++ b/database/migrations/2025_03_09_170608_add_new_custom_tag_primary_id_to_photo_tags.php @@ -0,0 +1,30 @@ +unsignedBigInteger('custom_tag_primary_id')->nullable()->after('litter_object_id')->comment('Only use when the custom tag is the primary tag'); + $table->foreign('custom_tag_primary_id')->references('id')->on('custom_tags_new')->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('photo_tags', function (Blueprint $table) { + $table->dropForeign(['custom_tag_primary_id']); + $table->dropColumn('custom_tag_primary_id'); + }); + } +}; diff --git a/database/migrations/2025_03_14_123015_create_badges_table.php b/database/migrations/2025_03_14_123015_create_badges_table.php new file mode 100644 index 000000000..64ddb7e5b --- /dev/null +++ b/database/migrations/2025_03_14_123015_create_badges_table.php @@ -0,0 +1,47 @@ +id(); + $table->string('type'); // photo_upload, category, object, landuse + $table->string('subtype')->nullable(); // landuse_type + $table->integer('number')->default(1); // 1st, 2nd, 3rd + + $table->text('filename')->nullable(); + + $table->unsignedInteger('photo_id')->nullable(); + $table->foreign('photo_id')->references('id')->on('photos'); + + $table->foreignId('photo_tag_id')->nullable()->constrained(); + $table->foreignId('category_id')->nullable()->constrained(); + $table->foreignId('litter_object_id')->nullable()->constrained(); + + $table->unsignedInteger('country_id')->nullable(); + $table->unsignedInteger('state_id')->nullable(); + $table->unsignedInteger('city_id')->nullable(); + $table->foreign('country_id')->references('id')->on('countries'); + $table->foreign('state_id')->references('id')->on('states'); + $table->foreign('city_id')->references('id')->on('cities'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('badges'); + } +}; diff --git a/database/migrations/2025_03_14_123016_create_user_badges_table.php b/database/migrations/2025_03_14_123016_create_user_badges_table.php new file mode 100644 index 000000000..55e871965 --- /dev/null +++ b/database/migrations/2025_03_14_123016_create_user_badges_table.php @@ -0,0 +1,30 @@ +id(); + $table->unsignedInteger('user_id'); + $table->foreign('user_id')->references('id')->on('users'); + $table->foreignId('badge_id')->constrained(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user_badges'); + } +}; diff --git a/database/migrations/2025_03_24_194529_create_category_litter_object_taggables_table.php b/database/migrations/2025_03_24_194529_create_category_litter_object_taggables_table.php new file mode 100644 index 000000000..2b8fcd1bc --- /dev/null +++ b/database/migrations/2025_03_24_194529_create_category_litter_object_taggables_table.php @@ -0,0 +1,36 @@ +id(); + + $table->unsignedBigInteger('category_litter_object_id')->onDelete('cascade'); + $table->foreign('category_litter_object_id')->references('id')->on('category_litter_object')->onDelete('cascade'); + + $table->unsignedBigInteger('taggable_id'); + $table->string('taggable_type'); + $table->unsignedInteger('quantity')->default(1); + + $table->unique(['category_litter_object_id', 'taggable_type', 'taggable_id'], 'clo_taggable_unique'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('taggables'); + } +}; diff --git a/database/migrations/2025_03_28_195915_add_subcategories_with_parent_id_to_categories.php b/database/migrations/2025_03_28_195915_add_subcategories_with_parent_id_to_categories.php new file mode 100644 index 000000000..84b16b15d --- /dev/null +++ b/database/migrations/2025_03_28_195915_add_subcategories_with_parent_id_to_categories.php @@ -0,0 +1,30 @@ +unsignedBigInteger('parent_id')->nullable()->after('id'); + $table->foreign('parent_id')->references('id')->on('categories')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('categories', function (Blueprint $table) { + $table->dropForeign(['parent_id']); + $table->dropColumn('parent_id'); + }); + } +}; diff --git a/database/migrations/2025_03_29_183303_add_crowdsourced_to_objects.php b/database/migrations/2025_03_29_183303_add_crowdsourced_to_objects.php new file mode 100644 index 000000000..4be7e6edf --- /dev/null +++ b/database/migrations/2025_03_29_183303_add_crowdsourced_to_objects.php @@ -0,0 +1,64 @@ +boolean('crowdsourced')->default(false)->after('key'); + }); + + Schema::table('litter_objects', function (Blueprint $table) { + $table->boolean('crowdsourced')->default(false)->after('key'); + }); + + Schema::table('materials', function (Blueprint $table) { + $table->boolean('crowdsourced')->default(false)->after('key'); + }); + + Schema::table('brandslist', function (Blueprint $table) { + $table->boolean('crowdsourced')->default(false)->after('key'); + }); + + Schema::table('custom_tags_new', function (Blueprint $table) { + $table->boolean('crowdsourced')->default(false)->after('key'); + }); + } + + public function down(): void + { + if (Schema::hasColumn('categories', 'crowdsourced')) { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('crowdsourced'); + }); + } + + if (Schema::hasColumn('litter_objects', 'crowdsourced')) { + Schema::table('litter_objects', function (Blueprint $table) { + $table->dropColumn('crowdsourced'); + }); + } + + if (Schema::hasColumn('materials', 'crowdsourced')) { + Schema::table('materials', function (Blueprint $table) { + $table->dropColumn('crowdsourced'); + }); + } + + if (Schema::hasColumn('brandslist', 'crowdsourced')) { + Schema::table('brandslist', function (Blueprint $table) { + $table->dropColumn('crowdsourced'); + }); + } + + if (Schema::hasColumn('custom_tags_new', 'crowdsourced')) { + Schema::table('custom_tags_new', function (Blueprint $table) { + $table->dropColumn('crowdsourced'); + }); + } + } +}; diff --git a/database/migrations/2025_04_03_180519_create_litter_tags_states_table.php b/database/migrations/2025_04_03_180519_create_litter_tags_states_table.php new file mode 100644 index 000000000..1fa44f58b --- /dev/null +++ b/database/migrations/2025_04_03_180519_create_litter_tags_states_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('key')->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('litter_states'); + } +}; diff --git a/database/migrations/2025_04_07_175644_add_total_tags_to_photos.php b/database/migrations/2025_04_07_175644_add_total_tags_to_photos.php new file mode 100644 index 000000000..78ec6c260 --- /dev/null +++ b/database/migrations/2025_04_07_175644_add_total_tags_to_photos.php @@ -0,0 +1,30 @@ +integer('total_tags')->default(0)->after('remaining'); + $table->text('summary')->nullable()->after('total_tags'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropColumn('total_tags'); + $table->dropColumn('summary'); + }); + } +}; diff --git a/database/migrations/2025_04_18_175251_add_migrated_at_to_photos.php b/database/migrations/2025_04_18_175251_add_migrated_at_to_photos.php new file mode 100644 index 000000000..75ed496e5 --- /dev/null +++ b/database/migrations/2025_04_18_175251_add_migrated_at_to_photos.php @@ -0,0 +1,30 @@ +dateTime('migrated_at')->nullable(); + $table->index('migrated_at', 'photos_migrated_at_index'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropIndex('photos_migrated_at_index'); + $table->dropColumn('migrated_at'); + }); + } +}; diff --git a/database/migrations/2025_04_21_135650_add_xp_to_photos.php b/database/migrations/2025_04_21_135650_add_xp_to_photos.php new file mode 100644 index 000000000..47733c250 --- /dev/null +++ b/database/migrations/2025_04_21_135650_add_xp_to_photos.php @@ -0,0 +1,28 @@ +integer('xp')->default(0)->after('migrated_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropColumn('xp'); + }); + } +}; diff --git a/database/migrations/2025_04_25_200052_create_achievements_table.php b/database/migrations/2025_04_25_200052_create_achievements_table.php new file mode 100644 index 000000000..a25eb166e --- /dev/null +++ b/database/migrations/2025_04_25_200052_create_achievements_table.php @@ -0,0 +1,62 @@ +id(); // bigint PK, auto-increment + $t->string('type', 50); // 'uploads', 'object', 'category', etc. + $t->unsignedBigInteger('tag_id')->nullable(); // null for dimension-wide achievements + $t->unsignedInteger('threshold'); // Required count to unlock + $t->json('metadata')->nullable(); // For i18n, icons, descriptions + $t->timestamps(); + + // Composite unique constraint + $t->unique(['type', 'tag_id', 'threshold']); + + // Composite index for achievement checking + $t->index(['type', 'tag_id', 'threshold'], 'idx_achievement_lookup'); + + // Additional index for progress tracking + $t->index(['type', 'tag_id'], 'idx_type_tag'); + }); + + Schema::create('user_achievements', function (Blueprint $t) { + $t->unsignedInteger('user_id'); + $t->unsignedBigInteger('achievement_id'); + $t->timestamp('created_at')->useCurrent(); + $t->timestamp('updated_at')->nullable(); + + $t->primary(['user_id', 'achievement_id']); + $t->foreign('user_id')->references('id')->on('users')->cascadeOnDelete(); + $t->foreign('achievement_id')->references('id')->on('achievements')->cascadeOnDelete(); + + $t->index(['user_id', 'created_at'], 'idx_user_achievements_user_created'); + $t->index('achievement_id', 'idx_achievement_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user_achievements'); + Schema::dropIfExists('achievements'); + } +}; diff --git a/database/migrations/2025_05_06_153004_add_total_tags_to_photos.php b/database/migrations/2025_05_06_153004_add_total_tags_to_photos.php new file mode 100644 index 000000000..042418301 --- /dev/null +++ b/database/migrations/2025_05_06_153004_add_total_tags_to_photos.php @@ -0,0 +1,28 @@ +index(['created_at','country_id','state_id','city_id','total_tags'], 'total_tags_idx'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropIndex('total_tags_idx'); + }); + } +}; diff --git a/database/migrations/2025_05_06_154520_create_photo_metrics_tables.php b/database/migrations/2025_05_06_154520_create_photo_metrics_tables.php new file mode 100644 index 000000000..a5d97a65e --- /dev/null +++ b/database/migrations/2025_05_06_154520_create_photo_metrics_tables.php @@ -0,0 +1,72 @@ +0 for user metrics + + /* ──────────── Time Bucket ──────────── */ + bucket_date DATE NOT NULL, -- Bucket start date + year SMALLINT UNSIGNED NOT NULL, -- ISO year for weekly, calendar year otherwise + month TINYINT UNSIGNED NOT NULL, -- 0 for yearly/all-time, 1-12 otherwise + week TINYINT UNSIGNED NOT NULL, -- 0 for non-weekly, 1-53 for weekly + + /* ──────────── Metrics (signed for negative deltas) ──────────── */ + uploads BIGINT NOT NULL DEFAULT 0, -- Photo count delta + tags BIGINT NOT NULL DEFAULT 0, -- Total tags (objects + materials + brands) + litter BIGINT NOT NULL DEFAULT 0, -- Total litter items (objects only) + brands BIGINT NOT NULL DEFAULT 0, -- Brand tag count + materials BIGINT NOT NULL DEFAULT 0, -- Material tag count + custom_tags BIGINT NOT NULL DEFAULT 0, -- Custom tag count + xp BIGINT NOT NULL DEFAULT 0, -- Experience points + + /* ──────────── Metadata ──────────── */ + created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + /* ──────────── Keys ──────────── */ + PRIMARY KEY (timescale, location_type, location_id, user_id, year, month, week, bucket_date), + + -- User timeline queries (when user_id > 0) + INDEX idx_user_timeline (user_id, timescale, bucket_date), + + -- Date range scans across locations + INDEX idx_date_range (timescale, bucket_date, location_type), + + /* ──────────── Constraints ──────────── */ + CONSTRAINT chk_timescale CHECK (timescale BETWEEN 0 AND 4), + CONSTRAINT chk_location_type CHECK (location_type BETWEEN 0 AND 3), + -- Enforce user rows must be global scope + CONSTRAINT chk_user_location CHECK (user_id = 0 OR (location_type = 0 AND location_id = 0)) + +) ENGINE=InnoDB; +SQL); + } + + public function down(): void + { + DB::statement('DROP TABLE IF EXISTS metrics'); + } +}; diff --git a/database/migrations/2025_05_10_112304_add_total_brands_to_photos.php b/database/migrations/2025_05_10_112304_add_total_brands_to_photos.php new file mode 100644 index 000000000..4fee0adff --- /dev/null +++ b/database/migrations/2025_05_10_112304_add_total_brands_to_photos.php @@ -0,0 +1,22 @@ +unsignedInteger('total_brands')->default(0); + }); + } + + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropColumn('total_brands'); + }); + } +}; diff --git a/database/migrations/2025_06_08_122739_add_processed_at_to_photos.php b/database/migrations/2025_06_08_122739_add_processed_at_to_photos.php new file mode 100644 index 000000000..a762cfa52 --- /dev/null +++ b/database/migrations/2025_06_08_122739_add_processed_at_to_photos.php @@ -0,0 +1,28 @@ +timestamp('processed_at')->nullable()->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropColumn('processed_at'); + }); + } +}; diff --git a/database/migrations/2025_06_28_140850_2024_01_01_create_clustering_infrastructure.php b/database/migrations/2025_06_28_140850_2024_01_01_create_clustering_infrastructure.php new file mode 100644 index 000000000..b8931c903 --- /dev/null +++ b/database/migrations/2025_06_28_140850_2024_01_01_create_clustering_infrastructure.php @@ -0,0 +1,189 @@ +unsignedInteger('tile_key')->nullable()->after('lon'); + }); + + if (!$this->indexExists('photos', 'idx_photos_verified_tile')) { + Schema::table('photos', function (Blueprint $t) { + $t->index(['verified', 'tile_key'], 'idx_photos_verified_tile'); + }); + } + + if (!$this->indexExists('photos', 'idx_photos_tile_updated')) { + Schema::table('photos', function (Blueprint $t) { + $t->index(['tile_key', 'updated_at'], 'idx_photos_tile_updated'); + }); + } + + if (!$this->indexExists('photos', 'idx_photos_verified_lat_lon')) { + DB::statement('CREATE INDEX idx_photos_verified_lat_lon ON photos(verified, lat, lon)'); + } + } + + /* ---------- clusters: add columns (no backfill needed - table is empty) ---------- */ + + // 1. Add columns as NOT NULL with defaults (since table is empty) + Schema::table('clusters', function (Blueprint $t) { + if (!Schema::hasColumn('clusters', 'tile_key')) { + $t->unsignedInteger('tile_key')->default(0); + } + if (!Schema::hasColumn('clusters', 'cell_x')) { + $t->integer('cell_x')->default(0)->after('zoom'); + $t->integer('cell_y')->default(0)->after('cell_x'); + } + }); + + // 2. Remove defaults after adding columns + DB::statement('ALTER TABLE clusters + MODIFY tile_key INT UNSIGNED NOT NULL, + MODIFY cell_x INT NOT NULL, + MODIFY cell_y INT NOT NULL' + ); + + // 3. Modify year column + DB::statement('ALTER TABLE clusters + MODIFY year SMALLINT UNSIGNED NOT NULL DEFAULT 0' + ); + + // 4. Add location column + if (!Schema::hasColumn('clusters', 'location')) { + DB::statement("ALTER TABLE clusters ADD COLUMN location POINT NOT NULL AFTER lon"); + } + + // 5. Create spatial index + if (!$this->indexExists('clusters', 'idx_clusters_spatial')) { + DB::statement('CREATE SPATIAL INDEX idx_clusters_spatial ON clusters(location)'); + } + + // 6. Add remaining indexes and columns + DB::statement(" + ALTER TABLE clusters + ADD UNIQUE KEY uk_cluster (tile_key, zoom, year, cell_x, cell_y), + ADD COLUMN grid_size DECIMAL(6,3) NOT NULL DEFAULT 0.25, + ADD INDEX idx_zoom_tile (zoom, tile_key) + "); + + /* ---------- dirty_tiles table ---------- */ + + if (!Schema::hasTable('dirty_tiles')) { + Schema::create('dirty_tiles', function (Blueprint $t) { + $t->unsignedInteger('tile_key'); + $t->timestamp('changed_at')->useCurrent(); + $t->unsignedTinyInteger('attempts')->default(0); + $t->primary('tile_key'); + $t->index(['changed_at', 'attempts']); + }); + } + } + + public function down(): void + { + Schema::dropIfExists('dirty_tiles'); + + if ($this->primaryKeyExists('clusters')) { + DB::statement('ALTER TABLE clusters DROP PRIMARY KEY'); + } + + // Remove columns and indexes + if ($this->indexExists('clusters', 'uk_cluster')) { + DB::statement('ALTER TABLE clusters DROP KEY uk_cluster'); + } + + if ($this->indexExists('clusters', 'idx_clusters_spatial')) { + DB::statement('DROP INDEX idx_clusters_spatial ON clusters'); + } + + if ($this->indexExists('clusters', 'idx_zoom_tile')) { + DB::statement('DROP INDEX idx_zoom_tile ON clusters'); + } + + if (Schema::hasColumn('clusters', 'location')) { + DB::statement('ALTER TABLE clusters DROP COLUMN location'); + } + + // Restore year column + DB::statement('ALTER TABLE clusters MODIFY year YEAR NULL'); + + // Drop new columns + Schema::table('clusters', function (Blueprint $t) { + if (Schema::hasColumn('clusters', 'grid_size')) { + $t->dropColumn('grid_size'); + } + + if (Schema::hasColumn('clusters', 'tile_key')) { + $t->dropColumn(['tile_key', 'cell_x', 'cell_y']); + } + }); + + // Photos rollback + if (Schema::hasColumn('photos', 'tile_key')) { + if ($this->indexExists('photos', 'idx_photos_verified_tile')) { + Schema::table('photos', function (Blueprint $t) { + $t->dropIndex('idx_photos_verified_tile'); + }); + } + + if ($this->indexExists('photos', 'idx_photos_tile_updated')) { + Schema::table('photos', function (Blueprint $t) { + $t->dropIndex('idx_photos_tile_updated'); + }); + } + + Schema::table('photos', function (Blueprint $t) { + $t->dropColumn('tile_key'); + }); + } + + if ($this->indexExists('photos', 'idx_photos_verified_lat_lon')) { + DB::statement('DROP INDEX idx_photos_verified_lat_lon ON photos'); + } + } + + private function indexExists(string $table, string $index): bool + { + $result = DB::selectOne(" + SELECT COUNT(*) as count + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = ? + ", [$table, $index]); + + return $result && $result->count > 0; + } + + private function primaryKeyExists(string $table): bool + { + $result = DB::selectOne(" + SELECT COUNT(*) AS cnt + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = 'PRIMARY' + ", [$table]); + + return $result && $result->cnt > 0; + } + + private function info(string $message): void + { + echo $message . PHP_EOL; + } +}; diff --git a/database/migrations/2025_06_28_172532_complete-pk-migration.php b/database/migrations/2025_06_28_172532_complete-pk-migration.php new file mode 100644 index 000000000..4890ae407 --- /dev/null +++ b/database/migrations/2025_06_28_172532_complete-pk-migration.php @@ -0,0 +1,96 @@ + (int) DB::table('information_schema.statistics') + ->where('table_schema', DB::raw('DATABASE()')) + ->where('table_name', 'clusters') + ->where('index_name', 'PRIMARY') + ->count() > 0; + + $hasUkCluster = fn () => (int) DB::table('information_schema.statistics') + ->where('table_schema', DB::raw('DATABASE()')) + ->where('table_name', 'clusters') + ->where('index_name', 'uk_cluster') + ->count() > 0; + + $colExists = fn (string $col) => Schema::hasColumn('clusters', $col); + + /* ------------------------------------------------------------------ + | 1. Make sure `id` is NOT auto-increment + * ------------------------------------------------------------------*/ + if ($colExists('id')) { + DB::statement(" + ALTER TABLE clusters + MODIFY id BIGINT UNSIGNED NOT NULL + "); + } + + + /* ------------------------------------------------------------------ + | 2. Drop old PRIMARY KEY (if any) + * ------------------------------------------------------------------*/ + if ($hasPk()) { + DB::statement("ALTER TABLE clusters DROP PRIMARY KEY"); + } + + /* ------------------------------------------------------------------ + | 3. Create / promote composite PRIMARY KEY + * ------------------------------------------------------------------*/ + if ($hasUkCluster()) { + // uk_cluster exists – promote & remove the unique index + DB::statement(" + ALTER TABLE clusters + DROP KEY uk_cluster, + ADD PRIMARY KEY (tile_key, zoom, year, cell_x, cell_y) + "); + } else { + // unique key already gone – just be sure PK is present + if (! $hasPk()) { + DB::statement(" + ALTER TABLE clusters + ADD PRIMARY KEY (tile_key, zoom, year, cell_x, cell_y) + "); + } + } + + /* ------------------------------------------------------------------ + | 4. Remove legacy columns, if any + * ------------------------------------------------------------------*/ + $legacy = collect(['point_count_abbreviated', 'geohash', 'created_at']) + ->filter($colExists) + ->all(); + + if ($legacy) { + DB::statement(" + ALTER TABLE clusters + DROP COLUMN " . implode(', DROP COLUMN ', $legacy) + ); + } + + /* ------------------------------------------------------------------ + | 5. Optionally drop `id` + * ------------------------------------------------------------------*/ + if (self::DROP_ID_COLUMN && $colExists('id')) { + DB::statement("ALTER TABLE clusters DROP COLUMN id"); + } + } + + public function down(): void + { + // Intentionally left empty – this change is not meant to be rolled back + // once applied in production. + } +}; diff --git a/database/migrations/2025_07_06_152755_add_clustering_performance_optimisations.php b/database/migrations/2025_07_06_152755_add_clustering_performance_optimisations.php new file mode 100644 index 000000000..5973538f0 --- /dev/null +++ b/database/migrations/2025_07_06_152755_add_clustering_performance_optimisations.php @@ -0,0 +1,71 @@ +indexExists('photos', 'idx_photos_fast_cluster')) { + DB::statement(' + CREATE INDEX idx_photos_fast_cluster + ON photos(verified, tile_key, cell_x, cell_y, lat, lon) + '); + } + + // Optional: Add index for tile_key only queries + if (!$this->indexExists('photos', 'idx_photos_tile_key')) { + DB::statement(' + CREATE INDEX idx_photos_tile_key + ON photos(tile_key) + '); + } + } + + public function down(): void + { + // Drop indexes + if ($this->indexExists('photos', 'idx_photos_fast_cluster')) { + DB::statement('DROP INDEX idx_photos_fast_cluster ON photos'); + } + + if ($this->indexExists('photos', 'idx_photos_tile_key')) { + DB::statement('DROP INDEX idx_photos_tile_key ON photos'); + } + + // Drop generated columns + if (Schema::hasColumn('photos', 'cell_x')) { + DB::statement('ALTER TABLE photos DROP COLUMN cell_x, DROP COLUMN cell_y'); + } + } + + private function indexExists(string $table, string $index): bool + { + $result = DB::selectOne(" + SELECT COUNT(*) as count + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = ? + ", [$table, $index]); + + return $result && $result->count > 0; + } + + private function info(string $message): void + { + echo $message . PHP_EOL; + } +}; diff --git a/database/migrations/2025_07_11_203047_update_clustering_grid_size.php b/database/migrations/2025_07_11_203047_update_clustering_grid_size.php new file mode 100644 index 000000000..04cded0d3 --- /dev/null +++ b/database/migrations/2025_07_11_203047_update_clustering_grid_size.php @@ -0,0 +1,92 @@ +indexExists('photos', 'idx_photos_fast_cluster')) { + DB::statement('DROP INDEX idx_photos_fast_cluster ON photos'); + } + + // Drop the existing generated columns + if (Schema::hasColumn('photos', 'cell_x')) { + DB::statement('ALTER TABLE photos DROP COLUMN cell_x, DROP COLUMN cell_y'); + } + + // Add new generated columns with the new smallest_grid value (0.01) + DB::statement(" + ALTER TABLE photos + ADD COLUMN cell_x INT UNSIGNED GENERATED ALWAYS AS ( + FLOOR((lon + 180) / 0.01) + ) STORED, + ADD COLUMN cell_y INT UNSIGNED GENERATED ALWAYS AS ( + FLOOR((lat + 90) / 0.01) + ) STORED + "); + + // Recreate the covering index WITH lat/lon + DB::statement(' + CREATE INDEX idx_photos_fast_cluster + ON photos(verified, tile_key, cell_x, cell_y, lat, lon) + '); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Drop the covering index + if ($this->indexExists('photos', 'idx_photos_fast_cluster')) { + DB::statement('DROP INDEX idx_photos_fast_cluster ON photos'); + } + + // Drop the new columns + if (Schema::hasColumn('photos', 'cell_x')) { + DB::statement('ALTER TABLE photos DROP COLUMN cell_x, DROP COLUMN cell_y'); + } + + // Restore original generated columns with 0.05 grid + DB::statement(" + ALTER TABLE photos + ADD COLUMN cell_x INT GENERATED ALWAYS AS ( + FLOOR((lon + 180) / 0.05) + ) STORED, + ADD COLUMN cell_y INT GENERATED ALWAYS AS ( + FLOOR((lat + 90) / 0.05) + ) STORED + "); + + // Restore the covering index WITH lat/lon + DB::statement(' + CREATE INDEX idx_photos_fast_cluster + ON photos(verified, tile_key, cell_x, cell_y, lat, lon) + '); + } + + private function indexExists(string $table, string $index): bool + { + $result = DB::selectOne(" + SELECT COUNT(*) as count + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = ? + ", [$table, $index]); + + return $result && $result->count > 0; + } + + private function info(string $message): void + { + echo $message . PHP_EOL; + } +}; diff --git a/database/migrations/2025_07_27_130433_add_spatial_index_to_photos.php b/database/migrations/2025_07_27_130433_add_spatial_index_to_photos.php new file mode 100644 index 000000000..a4ec984f0 --- /dev/null +++ b/database/migrations/2025_07_27_130433_add_spatial_index_to_photos.php @@ -0,0 +1,117 @@ + 4326 + OR ST_X(`geom`) <> `lon` + OR ST_Y(`geom`) <> `lat` + ) + "); + + // 2a) Abort with a clear message if any remaining rows still have NULL geom + // (because we’re about to make it NOT NULL). + $nullGeomCount = (int) DB::scalar("SELECT COUNT(*) FROM `photos` WHERE `geom` IS NULL"); + if ($nullGeomCount > 0) { + // Optional: include a few sample ids for diagnostics + $sampleIds = collect(DB::select("SELECT id FROM `photos` WHERE `geom` IS NULL LIMIT 5")) + ->pluck('id')->implode(', '); + throw new RuntimeException( + "Cannot set photos.geom NOT NULL: {$nullGeomCount} rows have NULL geom (likely NULL lon/lat).". + " Fix those coordinates first. Sample ids: {$sampleIds}" + ); + } + + // 3) Enforce NOT NULL + SRID (skip if already NOT NULL) + // MySQL doesn’t expose “IF NOT EXISTS” for MODIFY, so just run it. + DB::statement("ALTER TABLE `photos` MODIFY COLUMN `geom` POINT SRID 4326 NOT NULL"); + + // 4) (Re)create SPATIAL INDEX if missing + if (!$this->indexExists('photos', 'photos_geom_sidx')) { + DB::statement("ALTER TABLE `photos` ADD SPATIAL INDEX `photos_geom_sidx` (`geom`)"); + } + + // 5) Create robust triggers with validation + DB::unprepared(" + CREATE TRIGGER `photos_bi_geom` + BEFORE INSERT ON `photos` FOR EACH ROW + BEGIN + IF NEW.`lon` IS NULL OR NEW.`lat` IS NULL THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'lon/lat must not be NULL'; + END IF; + IF NEW.`lon` < -180 OR NEW.`lon` > 180 OR NEW.`lat` < -90 OR NEW.`lat` > 90 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'lon/lat out of range'; + END IF; + SET NEW.`geom` = ST_SRID(POINT(NEW.`lon`, NEW.`lat`), 4326); + END + "); + + DB::unprepared(" + CREATE TRIGGER `photos_bu_geom` + BEFORE UPDATE ON `photos` FOR EACH ROW + BEGIN + IF NEW.`lon` IS NULL OR NEW.`lat` IS NULL THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'lon/lat must not be NULL'; + END IF; + IF NEW.`lon` < -180 OR NEW.`lon` > 180 OR NEW.`lat` < -90 OR NEW.`lat` > 90 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'lon/lat out of range'; + END IF; + SET NEW.`geom` = ST_SRID(POINT(NEW.`lon`, NEW.`lat`), 4326); + END + "); + } + + public function down(): void + { + // Drop triggers first + DB::unprepared("DROP TRIGGER IF EXISTS `photos_bi_geom`"); + DB::unprepared("DROP TRIGGER IF EXISTS `photos_bu_geom`"); + + // Drop index (if present) + if ($this->indexExists('photos', 'photos_geom_sidx')) { + DB::statement("ALTER TABLE `photos` DROP INDEX `photos_geom_sidx`"); + } + + // Drop column (if present) + if (Schema::hasColumn('photos', 'geom')) { + DB::statement("ALTER TABLE `photos` DROP COLUMN `geom`"); + } + } + + private function indexExists(string $table, string $index): bool + { + $row = DB::selectOne(" + SELECT COUNT(*) AS c + FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = ? + AND INDEX_NAME = ? + ", [$table, $index]); + + return (int)($row->c ?? 0) > 0; + } +}; diff --git a/database/migrations/2025_07_27_130450_convert_datetime_from_varchar_to_datetime.php b/database/migrations/2025_07_27_130450_convert_datetime_from_varchar_to_datetime.php new file mode 100644 index 000000000..8aa166d47 --- /dev/null +++ b/database/migrations/2025_07_27_130450_convert_datetime_from_varchar_to_datetime.php @@ -0,0 +1,103 @@ +id === 945) { + // 2) Auto-fix the known offender: 'YYYY-MM-DD 24:MM:SS' => (next day) '00:MM:SS' + $this->comment("Auto-fixing known offender id=945 (normalizing hour 24 to next day 00)."); + DB::statement(" + UPDATE photos + SET `datetime` = CONCAT( + DATE_ADD(SUBSTRING(`datetime`, 1, 10), INTERVAL 1 DAY), + ' ', + '00', + SUBSTRING(`datetime`, 14) + ) + WHERE id = 945 + AND `datetime` REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2} 24:[0-9]{2}:[0-9]{2}$' + "); + + // re-check after fix + $invalidRows = DB::select(" + SELECT id, `datetime` + FROM photos + WHERE `datetime` IS NULL + OR `datetime` = '' + OR STR_TO_DATE(`datetime`, '%Y-%m-%d %H:%i:%s') IS NULL + "); + $invalidCount = count($invalidRows); + } + + if ($invalidCount > 0) { + // 3) More than one invalid row: print them all and abort + $this->comment("Found {$invalidCount} invalid datetime rows. Please fix them and rerun the migration."); + foreach ($invalidRows as $r) { + $val = is_null($r->datetime) ? 'NULL' : "'{$r->datetime}'"; + $this->comment("ID: {$r->id}, datetime: {$val}"); + } + throw new RuntimeException('Aborting: invalid datetime rows detected.'); + } + + // 4) Drop legacy index if present (best-effort) + $this->dropIndexIfExists('photos', 'photos_datetime_index'); + $this->dropIndexIfExists('photos', 'idx_photos_datetime'); + + // 5) Convert to DATETIME NOT NULL in-place + // MySQL will choose the best algorithm (INPLACE if possible) + DB::statement("ALTER TABLE `photos` MODIFY COLUMN `datetime` DATETIME NOT NULL"); + + // 6) Add a single composite index for ORDER BY datetime DESC, id ASC + DB::statement("CREATE INDEX `photos_datetime_id_idx` ON `photos` (`datetime`, `id`)"); + } + + public function down(): void + { +// // Drop new composite index +// $this->dropIndexIfExists('photos', 'photos_datetime_id_idx'); +// +// // Convert back to VARCHAR +// DB::statement("ALTER TABLE `photos` MODIFY COLUMN `datetime` VARCHAR(255) NOT NULL"); +// +// // Recreate old single-column index +// DB::statement("CREATE INDEX `photos_datetime_index` ON `photos` (`datetime`)"); +// +// $this->comment('Datetime column reverted to VARCHAR(255).'); + } + + /** + * Drop an index if it exists + */ + private function dropIndexIfExists(string $table, string $index): void + { + try { + DB::statement("ALTER TABLE `{$table}` DROP INDEX `{$index}`"); + } catch (\Throwable $e) { + // Index doesn't exist, that's fine + } + } + + /** + * Output a comment during migration + */ + private function comment(string $message): void + { + if (app()->runningInConsole()) { + echo "\e[32m{$message}\e[0m\n"; + } + } +}; diff --git a/database/migrations/2025_08_30_141411_add_new_migration_columns_to_photos.php b/database/migrations/2025_08_30_141411_add_new_migration_columns_to_photos.php new file mode 100644 index 000000000..f34d3245f --- /dev/null +++ b/database/migrations/2025_08_30_141411_add_new_migration_columns_to_photos.php @@ -0,0 +1,40 @@ +char('processed_fp', 16)->nullable()->after('processed_at') + ->comment('Fingerprint of processed tags for idempotency'); + + // Add processed tags cache for delta calculation + $table->text('processed_tags')->nullable()->after('processed_fp') + ->comment('JSON of tags structure at last processing'); + + // Add processed XP for correct delta calculation + $table->integer('processed_xp')->nullable()->after('processed_tags') + ->comment('XP value at last processing for delta calculation'); + + // Add index for finding unprocessed photos efficiently + $table->index('processed_fp', 'photos_processed_fp_index'); + }); + } + + public function down(): void + { + Schema::table('photos', function (Blueprint $table) { + $table->dropIndex('photos_processed_fp_index'); + $table->dropColumn(['processed_fp', 'processed_tags', 'processed_xp']); + }); + } +}; diff --git a/database/migrations/2025_10_04_203531_make_clusters_location_generated.php b/database/migrations/2025_10_04_203531_make_clusters_location_generated.php new file mode 100644 index 000000000..f110d057e --- /dev/null +++ b/database/migrations/2025_10_04_203531_make_clusters_location_generated.php @@ -0,0 +1,68 @@ +indexExists('clusters', 'idx_clusters_spatial')) { + DB::statement('DROP INDEX idx_clusters_spatial ON clusters'); + } + + // Drop the existing location column + if (Schema::hasColumn('clusters', 'location')) { + DB::statement('ALTER TABLE clusters DROP COLUMN location'); + } + + // Add location as a generated column + // This ensures location is always in sync with lat/lon + DB::statement(" + ALTER TABLE clusters + ADD COLUMN location POINT + GENERATED ALWAYS AS (ST_SRID(POINT(lon, lat), 4326)) STORED + NOT NULL + "); + + // Recreate spatial index + DB::statement('CREATE SPATIAL INDEX idx_clusters_spatial ON clusters(location)'); + } + + public function down(): void + { + // Drop spatial index + if ($this->indexExists('clusters', 'idx_clusters_spatial')) { + DB::statement('DROP INDEX idx_clusters_spatial ON clusters'); + } + + // Drop generated column + if (Schema::hasColumn('clusters', 'location')) { + DB::statement('ALTER TABLE clusters DROP COLUMN location'); + } + + // Recreate as regular column + DB::statement(" + ALTER TABLE clusters + ADD COLUMN location POINT NOT NULL + "); + + // Recreate spatial index + DB::statement('CREATE SPATIAL INDEX idx_clusters_spatial ON clusters(location)'); + } + + private function indexExists(string $table, string $index): bool + { + $result = DB::selectOne(" + SELECT COUNT(*) as count + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = ? + AND index_name = ? + ", [$table, $index]); + + return $result && $result->count > 0; + } +}; diff --git a/database/seeds/AchievementSeeder.php b/database/seeds/AchievementSeeder.php new file mode 100644 index 000000000..f7cf3321f --- /dev/null +++ b/database/seeds/AchievementSeeder.php @@ -0,0 +1,113 @@ +milestones = Config::get('achievements.milestones'); + + // Seed dimension-wide achievements + $this->seedDimensionWide(); + + // Seed per-tag achievements + $this->seedPerTag(); + + // Only output if running from command + if ($this->command) { + $this->command->info('Achievements seeded successfully!'); + } + } + + /** + * Seed dimension-wide achievements (uploads, total objects, etc.) + */ + private function seedDimensionWide(): void + { + $types = [ + 'uploads', + 'objects', + 'categories', + 'materials', + 'brands', + 'streak', + ]; + + foreach ($types as $type) { + foreach ($this->milestones as $milestone) { + DB::table('achievements')->updateOrInsert( + [ + 'type' => $type, + 'tag_id' => null, + 'threshold' => $milestone, + ], + [ + 'created_at' => now(), + 'updated_at' => now(), + ] + ); + } + } + } + + /** + * Seed per-tag achievements + */ + private function seedPerTag(): void + { + $tagTypes = [ + 'object' => [ + 'model' => LitterObject::class, + 'name_field' => 'key', + ], + 'category' => [ + 'model' => Category::class, + 'name_field' => 'key', + ], + 'material' => [ + 'model' => Materials::class, + 'name_field' => 'key', + ], + 'brand' => [ + 'model' => BrandList::class, + 'name_field' => 'key', + ], + 'customTag' => [ + 'model' => CustomTagNew::class, + 'name_field' => 'key', + ], + ]; + + foreach ($tagTypes as $type => $config) { + $tags = $config['model']::all(); + + foreach ($tags as $tag) { + foreach ($this->milestones as $milestone) { + DB::table('achievements')->updateOrInsert( + [ + 'type' => $type, + 'tag_id' => $tag->id, + 'threshold' => $milestone, + ], + [ + 'created_at' => now(), + 'updated_at' => now(), + ] + ); + } + } + } + } +} diff --git a/database/seeds/CitiesSeeder.php b/database/seeds/CitiesSeeder.php deleted file mode 100644 index 5e89d75e0..000000000 --- a/database/seeds/CitiesSeeder.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Cork', 'country_id' => 1], - ['city' => 'Galway', 'country_id' => 1], - ['city' => 'Limerick', 'country_id' => 1], - ['city' => 'New York', 'country_id' => 2], - ['city' => 'Los Angeles', 'country_id' => 2], - ['city' => 'Toronto', 'country_id' => 3], - ['city' => 'Vancouver', 'country_id' => 3], - ['city' => 'Montreal', 'country_id' => 3], - ['city' => 'Calgary', 'country_id' => 3], - ['city' => 'Edmonton', 'country_id' => 3], - ['city' => 'Fortaleza', 'country_id' => 4], - ['city' => 'Rio de Janeiro', 'country_id' => 4], - ['city' => 'Bahia', 'country_id' => 4], - ]; - - DB::table('cities')->insert($cities); - } -} diff --git a/database/seeds/CountriesSeeder.php b/database/seeds/CountriesSeeder.php deleted file mode 100644 index d6165627f..000000000 --- a/database/seeds/CountriesSeeder.php +++ /dev/null @@ -1,26 +0,0 @@ - 'Ireland', 'shortcode' => 'ie'], - ['country' => 'United States', 'shortcode' => 'is'], - ['country' => 'Canada', 'shortcode' => 'ca'], - ['country' => 'Brazil', 'shortcode' => 'br'], - ]; - - DB::table('countries')->insert($countries); - } -} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index c17d96915..42927e365 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -1,18 +1,18 @@ call(PlanSeeder::class); $this->call(TeamTypeSeeder::class); $this->call(DonationAmountsSeeder::class); @@ -20,10 +20,14 @@ public function run() $this->call(RoleSeeder::class); $this->call(PermissionSeeder::class); $this->call(RoleHasPermissionsSeeder::class); + + // Create Locations + $this->call(LocationsSeeder::class); + + // Create Users & Photos & reward XP $this->call(UserSeeder::class); $this->call(PhotosSeeder::class); - // $this->call(CountriesSeeder::class); - // missing states seeder - // $this->call(CitiesSeeder::class); + + $this->call(CreateAllTagsSeeder::class); } } diff --git a/database/seeds/GenerateDataForLocations.php b/database/seeds/GenerateDataForLocations.php new file mode 100644 index 000000000..19295f2e2 --- /dev/null +++ b/database/seeds/GenerateDataForLocations.php @@ -0,0 +1,174 @@ +addTagsAction = $addTagsAction; + } + + public function run(): void + { + $countries = Country::all(); + + foreach ($countries as $country) { + foreach ($country->states as $state) { + foreach ($state->cities as $city) { + $this->generateDataFor($city); + } + $this->generateDataFor($state); + } + $this->generateDataFor($country); + } + } + + protected function generateDataFor(Model $location): void + { + echo "Generating data for {$location->name}... " . get_class($location) . "\n"; + + $faker = Faker::create(); + + for ($i = 0; $i < 100; $i++) { + $photo = $this->createPhoto($location, $faker); + + // Update this + $randomTags = $this->generateRandomTags($faker); + + $this->addTagsAction->run($photo->user_id, $photo->id, $randomTags); + } + } + + protected function createPhoto(Model $location, $faker): Photo + { + $userId = User::inRandomOrder()->first()->id; + + // Determine location details based on the type of $location. + $country = null; + $state = null; + $city = null; + + if ($location instanceof City) { + $city = $location; + $state = $city->state; + $country = $state->country; + } elseif ($location instanceof State) { + $state = $location; + $country = $state->country; + } elseif ($location instanceof Country) { + $country = $location; + } + + $date = $faker->dateTimeBetween('-3 years', 'now')->format('Y-m-d H:i:s'); + + // need lat + lon for each location + $photo = Photo::create([ + 'user_id' => $userId, + 'filename' => 'images/butts.png', + 'model' => "iPhone 12", + 'datetime' => $date, + 'verified' => 2, + 'verification' => 1, + 'remaining' => false, + 'lat' => $faker->latitude, + 'lon' => $faker->longitude, + 'display_name' => $faker->address, + 'location' => $faker->word, + 'road' => $faker->streetName, + 'suburb' => $faker->citySuffix, + 'country_id' => $country ? $country->id : null, + 'state_id' => $state ? $state->id : null, + 'city_id' => $city ? $city->id : null, + 'country_code' => $country ? $country->shortcode : null, + 'country' => $country ? $country->country : null, + 'state_district' => $state ? $state->state : null, + 'city' => $city ? $city->city : null, + ]); + + event(new ImageUploaded( + $userId, + $photo, + $country, + $state, + $city, + )); + + event(new IncrementPhotoMonth( + $country?->id, + $state?->id, + $city?->id, + $date + )); + + return $photo; + } + + protected function generateRandomTags($faker): array + { + // Get a random Category. + $category = Category::inRandomOrder()->first(); + + if (!$category) { + return []; + } + + // Get a random litter object belonging to this category. + $object = $category->litterObjects()->inRandomOrder()->first(); + if (!$object) { + return []; + } + + $tag = [ + 'category' => ['id' => $category->id], + 'object' => ['id' => $object->id], + 'quantity' => $faker->numberBetween(1, 5), + 'picked_up' => $faker->boolean() + ]; + + // With some probability, add a custom tag. + if ($faker->boolean(20)) { + $tag['custom'] = $faker->word; + } + + // With some probability, add extra material data. + if ($faker->boolean(50)) { + $material = Materials::inRandomOrder()->first(); + if ($material) { + $tag['materials'] = [['id' => $material->id, 'quantity' => $faker->numberBetween(1, 3)]]; + } + } + + // With some probability, add additional custom tags. + if ($faker->boolean(30)) { + $tag['custom_tags'] = [['key' => $faker->word, 'quantity' => $faker->numberBetween(1, 2)]]; + } + + // With some probability, add brand information. + if ($faker->boolean(30)) { + $brand = BrandList::inRandomOrder()->first(); + if ($brand) { + $tag['brands'] = [['id' => $brand->id, 'quantity' => $faker->numberBetween(1, 3), 'key' => $brand->key]]; + } + } + + return [$tag]; + } +} diff --git a/database/seeds/LevelSeeder.php b/database/seeds/LevelSeeder.php index 7b00a67d7..d0b1513e4 100644 --- a/database/seeds/LevelSeeder.php +++ b/database/seeds/LevelSeeder.php @@ -14,35 +14,40 @@ class LevelSeeder extends Seeder */ public function run() { - DB::table('levels')->insert([ - 'xp' => 10, - 'level' => 1, - 'created_at' => now(), - 'updated_at' => now() - ]); - DB::table('levels')->insert([ - 'xp' => 50, - 'level' => 2, - 'created_at' => now(), - 'updated_at' => now() - ]); - DB::table('levels')->insert([ - 'xp' => 100, - 'level' => 3, - 'created_at' => now(), - 'updated_at' => now() - ]); - DB::table('levels')->insert([ - 'xp' => 500, - 'level' => 4, - 'created_at' => now(), - 'updated_at' => now() - ]); - DB::table('levels')->insert([ - 'xp' => 2000, - 'level' => 5, - 'created_at' => now(), - 'updated_at' => now() - ]); + $levels = [ + ['id' => 1, 'xp' => 10, 'level' => 1], + ['id' => 2, 'xp' => 20, 'level' => 2], + ['id' => 3, 'xp' => 40, 'level' => 3], + ['id' => 4, 'xp' => 60, 'level' => 4], + ['id' => 5, 'xp' => 80, 'level' => 5], + ['id' => 6, 'xp' => 100, 'level' => 6], + ['id' => 7, 'xp' => 200, 'level' => 7], + ['id' => 8, 'xp' => 300, 'level' => 8], + ['id' => 9, 'xp' => 400, 'level' => 9], + ['id' => 10, 'xp' => 500, 'level' => 10], + ['id' => 11, 'xp' => 1000, 'level' => 11], + ['id' => 12, 'xp' => 1500, 'level' => 12], + ['id' => 13, 'xp' => 2000, 'level' => 13], + ['id' => 14, 'xp' => 2500, 'level' => 14], + ['id' => 15, 'xp' => 3000, 'level' => 15], + ['id' => 16, 'xp' => 3500, 'level' => 16], + ['id' => 17, 'xp' => 4000, 'level' => 17], + ['id' => 18, 'xp' => 5000, 'level' => 18], + ['id' => 19, 'xp' => 7500, 'level' => 19], + ['id' => 20, 'xp' => 10000, 'level' => 20], + ['id' => 21, 'xp' => 15000, 'level' => 21], + ['id' => 22, 'xp' => 20000, 'level' => 22], + ['id' => 23, 'xp' => 50000, 'level' => 23], + ['id' => 24, 'xp' => 100000, 'level' => 24], + ['id' => 25, 'xp' => 250000, 'level' => 25], + ['id' => 26, 'xp' => 500000, 'level' => 26], + ]; + + foreach ($levels as $level) { + DB::table('levels')->updateOrInsert( + ['id' => $level['id']], + ['xp' => $level['xp'], 'level' => $level['level']] + ); + } } } diff --git a/database/seeds/LocationsSeeder.php b/database/seeds/LocationsSeeder.php new file mode 100644 index 000000000..129d39821 --- /dev/null +++ b/database/seeds/LocationsSeeder.php @@ -0,0 +1,592 @@ + 'Ireland', + 'shortcode' => 'ie', + 'states' => [ + 'Cork' => [ + 'Cork City', + 'Cobh', + 'Midleton', + 'Youghal', + ], + 'Dublin' => [ + 'Dublin City', + 'Dun Laoghaire', + 'Swords', + 'Malahide', + ], + 'Galway' => [ + 'Galway City', + 'Tuam', + 'Loughrea', + 'Oranmore', + ], + 'Kerry' => [ + 'Tralee', + 'Killarney', + 'Listowel', + 'Castleisland', + ], + ] + ], + + [ + 'country' => 'United States', + 'shortcode' => 'us', + 'states' => [ + 'California' => [ + 'Los Angeles', + 'San Francisco', + 'San Diego', + 'Sacramento', + ], + 'Texas' => [ + 'Houston', + 'Dallas', + 'Austin', + 'San Antonio', + ], + 'New York' => [ + 'New York City', + 'Buffalo', + 'Rochester', + 'Albany', + ], + 'Florida' => [ + 'Miami', + 'Orlando', + 'Tampa', + 'Jacksonville', + ], + ] + ], + [ + 'country' => 'Canada', + 'shortcode' => 'ca', + 'states' => [ + 'Ontario' => [ + 'Toronto', + 'Ottawa', + 'Hamilton', + 'Kitchener', + ], + 'Quebec' => [ + 'Montreal', + 'Quebec City', + 'Laval', + 'Gatineau', + ], + 'British Columbia' => [ + 'Vancouver', + 'Victoria', + 'Kelowna', + 'Kamloops', + ], + 'Alberta' => [ + 'Calgary', + 'Edmonton', + 'Red Deer', + 'Lethbridge', + ], + ] + ], + [ + 'country' => 'Brazil', + 'shortcode' => 'br', + 'states' => [ + 'Sao Paulo' => [ + 'São Paulo', + 'Campinas', + 'Santos', + 'Sorocaba', + ], + 'Rio de Janeiro' => [ + 'Rio de Janeiro', + 'Niteroi', + 'Petropolis', + 'Nova Iguacu', + ], + 'Minas Gerais' => [ + 'Belo Horizonte', + 'Uberlândia', + 'Contagem', + 'Juiz de Fora', + ], + 'Bahia' => [ + 'Salvador', + 'Feira de Santana', + 'Itabuna', + 'Ilhéus', + ], + ] + ], + [ + 'country' => 'Netherlands', + 'shortcode' => 'nl', + 'states' => [ + 'North Holland' => [ + 'Amsterdam', + 'Haarlem', + 'Alkmaar', + 'Zaandam', + ], + 'South Holland' => [ + 'Rotterdam', + 'The Hague', + 'Leiden', + 'Delft', + ], + 'Utrecht' => [ + 'Utrecht', + 'Amersfoort', + 'Nieuwegein', + 'Zeist', + ], + 'Gelderland' => [ + 'Nijmegen', + 'Arnhem', + 'Apeldoorn', + 'Ede', + ], + ] + ], + [ + 'country' => 'United Kingdom', + 'shortcode' => 'uk', + 'states' => [ + 'England' => [ + 'London', + 'Manchester', + 'Liverpool', + 'Birmingham', + ], + 'Scotland' => [ + 'Edinburgh', + 'Glasgow', + 'Aberdeen', + 'Dundee', + ], + 'Wales' => [ + 'Cardiff', + 'Swansea', + 'Newport', + 'Wrexham', + ], + 'Northern Ireland' => [ + 'Belfast', + 'Londonderry', + 'Lisburn', + 'Newtownabbey', + ], + ] + ], + [ + 'country' => 'Germany', + 'shortcode' => 'de', + 'states' => [ + 'Bavaria' => [ + 'Munich', + 'Nuremberg', + 'Augsburg', + 'Regensburg', + ], + 'Berlin' => [ + 'Berlin', + 'Pankow', + 'Charlottenburg', + 'Friedrichshain', + ], + 'Hamburg' => [ + 'Hamburg', + 'Altona', + 'Wandsbek', + 'Eimsbüttel', + ], + 'Hesse' => [ + 'Frankfurt', + 'Wiesbaden', + 'Darmstadt', + 'Kassel', + ], + ] + ], + [ + 'country' => 'France', + 'shortcode' => 'fr', + 'states' => [ + 'Ile-de-France' => [ + 'Paris', + 'Boulogne-Billancourt', + 'Versailles', + 'Saint-Denis', + ], + 'Provence-Alpes-Cote d\'Azur' => [ + 'Marseille', + 'Nice', + 'Toulon', + 'Aix-en-Provence', + ], + 'Occitanie' => [ + 'Toulouse', + 'Montpellier', + 'Nîmes', + 'Perpignan', + ], + 'Auvergne-Rhone-Alpes' => [ + 'Lyon', + 'Grenoble', + 'Saint-Étienne', + 'Clermont-Ferrand', + ], + ] + ], + [ + 'country' => 'Australia', + 'shortcode' => 'au', + 'states' => [ + 'New South Wales' => [ + 'Sydney', + 'Newcastle', + 'Wollongong', + 'Bathurst', + ], + 'Victoria' => [ + 'Melbourne', + 'Geelong', + 'Ballarat', + 'Bendigo', + ], + 'Queensland' => [ + 'Brisbane', + 'Gold Coast', + 'Cairns', + 'Townsville', + ], + 'Western Australia' => [ + 'Perth', + 'Fremantle', + 'Bunbury', + 'Broome', + ], + ] + ], + [ + 'country' => 'Japan', + 'shortcode' => 'jp', + 'states' => [ + 'Tokyo' => [ + 'Tokyo', + 'Hachioji', + 'Tachikawa', + 'Machida', + ], + 'Kanagawa' => [ + 'Yokohama', + 'Kawasaki', + 'Sagamihara', + 'Fujisawa', + ], + 'Osaka' => [ + 'Osaka', + 'Sakai', + 'Higashiosaka', + 'Moriguchi', + ], + 'Aichi' => [ + 'Nagoya', + 'Toyota', + 'Okazaki', + 'Ichinomiya', + ], + ] + ], + [ + 'country' => 'India', + 'shortcode' => 'in', + 'states' => [ + 'Maharashtra' => [ + 'Mumbai', + 'Pune', + 'Nagpur', + 'Nashik', + ], + 'Delhi' => [ + 'Delhi', + 'New Delhi', + 'Dwarka', + 'Karol Bagh', + ], + 'Karnataka' => [ + 'Bengaluru', + 'Mysuru', + 'Mangalore', + 'Hubli', + ], + 'Tamil Nadu' => [ + 'Chennai', + 'Coimbatore', + 'Madurai', + 'Salem', + ], + ] + ], + [ + 'country' => 'South Africa', + 'shortcode' => 'za', + 'states' => [ + 'Gauteng' => [ + 'Johannesburg', + 'Pretoria', + 'Soweto', + 'Benoni', + ], + 'Western Cape' => [ + 'Cape Town', + 'Stellenbosch', + 'Paarl', + 'George', + ], + 'Eastern Cape' => [ + 'Port Elizabeth', + 'East London', + 'Grahamstown', + 'Uitenhage', + ], + 'KwaZulu-Natal' => [ + 'Durban', + 'Pietermaritzburg', + 'Richards Bay', + 'Newcastle', + ], + ] + ], + [ + 'country' => 'Mexico', + 'shortcode' => 'mx', + 'states' => [ + 'Mexico City' => [ + 'Mexico City', + 'Coyoacan', + 'Xochimilco', + 'Tlalpan', + ], + 'Jalisco' => [ + 'Guadalajara', + 'Zapopan', + 'Tlaquepaque', + 'Puerto Vallarta', + ], + 'Nuevo Leon' => [ + 'Monterrey', + 'San Nicolás de los Garza', + 'Guadalupe', + 'Apodaca', + ], + 'Puebla' => [ + 'Puebla', + 'Tehuacan', + 'Cholula', + 'Atlixco', + ], + ] + ], + [ + 'country' => 'Italy', + 'shortcode' => 'it', + 'states' => [ + 'Lombardy' => [ + 'Milan', + 'Bergamo', + 'Brescia', + 'Monza', + ], + 'Lazio' => [ + 'Rome', + 'Latina', + 'Viterbo', + 'Frosinone', + ], + 'Campania' => [ + 'Naples', + 'Salerno', + 'Caserta', + 'Avellino', + ], + 'Veneto' => [ + 'Venice', + 'Verona', + 'Padua', + 'Vicenza', + ], + ] + ], + [ + 'country' => 'Spain', + 'shortcode' => 'es', + 'states' => [ + 'Catalonia' => [ + 'Barcelona', + 'Tarragona', + 'Girona', + 'Lleida', + ], + 'Madrid' => [ + 'Madrid', + 'Alcalá de Henares', + 'Fuenlabrada', + 'Getafe', + ], + 'Andalusia' => [ + 'Seville', + 'Málaga', + 'Córdoba', + 'Granada', + ], + 'Valencia' => [ + 'Valencia', + 'Alicante', + 'Elche', + 'Castellón de la Plana', + ], + ] + ], + [ + 'country' => 'New Zealand', + 'shortcode' => 'nz', + 'states' => [ + 'Auckland' => [ + 'Auckland', + 'Manukau', + 'Waitakere', + 'North Shore', + ], + 'Wellington' => [ + 'Wellington', + 'Lower Hutt', + 'Upper Hutt', + 'Porirua', + ], + 'Canterbury' => [ + 'Christchurch', + 'Timaru', + 'Ashburton', + 'Rangiora', + ], + 'Otago' => [ + 'Dunedin', + 'Queenstown', + 'Wanaka', + 'Oamaru', + ], + ] + ], + [ + 'country' => 'South Korea', + 'shortcode' => 'kr', + 'states' => [ + 'Seoul' => [ + 'Seoul', + 'Gangnam-gu', + 'Jongno-gu', + 'Mapo-gu', + ], + 'Busan' => [ + 'Busan', + 'Haeundae-gu', + 'Suyeong-gu', + 'Dongnae-gu', + ], + 'Incheon' => [ + 'Incheon', + 'Yeonsu-gu', + 'Namdong-gu', + 'Bupyeong-gu', + ], + 'Daegu' => [ + 'Daegu', + 'Suseong-gu', + 'Dalseo-gu', + 'Buk-gu', + ], + ] + ], + [ + 'country' => 'Argentina', + 'shortcode' => 'ar', + 'states' => [ + 'Buenos Aires' => [ + 'Buenos Aires', + 'La Plata', + 'Mar del Plata', + 'Bahía Blanca', + ], + 'Córdoba' => [ + 'Córdoba', + 'Villa Carlos Paz', + 'Río Cuarto', + 'Alta Gracia', + ], + 'Santa Fe' => [ + 'Rosario', + 'Santa Fe', + 'Rafaela', + 'Venado Tuerto', + ], + 'Mendoza' => [ + 'Mendoza', + 'San Rafael', + 'Godoy Cruz', + 'Las Heras', + ], + ] + ], + ]; + + foreach ($countries as $countryData) + { + $country = Country::firstOrCreate([ + 'country' => $countryData['country'], + 'shortcode' => $countryData['shortcode'], + 'manual_verify' => 1, + ]); + + $countryId = $country->id; + + foreach ($countryData['states'] as $stateName => $cities) + { + $state = State::firstOrCreate([ + 'state' => $stateName, + 'country_id' => $countryId, + ]); + + $stateId = $state->id; + + foreach ($cities as $cityName) { + City::firstOrCreate([ + 'city' => $cityName, + 'state_id' => $stateId, + 'country_id' => $countryId, + ]); + } + } + } + } +} diff --git a/database/seeds/PhotosSeeder.php b/database/seeds/PhotosSeeder.php index 23355a70e..629b275b7 100644 --- a/database/seeds/PhotosSeeder.php +++ b/database/seeds/PhotosSeeder.php @@ -5,40 +5,64 @@ use Faker\Factory; use App\Models\Photo; use Illuminate\Database\Seeder; +use App\Models\Location\Country; +use App\Actions\Locations\UpdateLeaderboardsForLocationAction; +use Illuminate\Support\Facades\DB; class PhotosSeeder extends Seeder { - /** - * Run the database seeds. - * - * @return void - */ - public function run() + public function run(): void { $faker = Factory::create(); - for ($i = 0; $i < 10; $i++) { - Photo::create([ - 'user_id' => $faker->numberBetween(1, 3), - //'filename' => $faker->image(public_path('assets/bird-plastic.jpg'), 400, 300, null, false), - 'filename' => $faker->word . '-' . $faker->randomNumber() . '.jpg', - 'model' => $faker->word, - 'datetime' => $faker->dateTimeThisYear, - 'verified' => $faker->boolean, - 'verification' => $faker->randomFloat(2, 0, 100), - 'remaining' => $faker->boolean, - 'lat' => $faker->latitude, - 'lon' => $faker->longitude, - 'display_name' => $faker->address, - 'location' => $faker->word, - 'road' => $faker->streetName, - 'suburb' => $faker->citySuffix, - 'city' => $faker->city, - //'county' => $faker->county, - 'state_district' => $faker->state, - 'country' => $faker->country, - 'country_code' => $faker->countryCode, - ]); + $updateLeaderboardsAction = app(UpdateLeaderboardsForLocationAction::class); + + for ($i = 0; $i < 1000; $i++) + { + // 1. Upload the image - can be skipped for now + + // 2. Get one of the countries + $country = Country::where('id', $faker->numberBetween(1, 10))->first(); + + // 3. Create the Photo with a random userId + $userId = DB::table('users')->orderByRaw('RAND()')->first()->id; + $photo = $this->createPhoto($faker, $country, $userId); + + // 4. Award XP & Update Leaderboards + $updateLeaderboardsAction->run($photo, $userId); } } + + protected function createPhoto ($faker, Country $country, int $userId): Photo + { + $state = $country->states->random(); + $city = $state->cities->random(); + + $verified = $faker->randomElement([0, 1, 2]); + $verification = $verified === 2 ? 1 : $faker->randomElement([0, 1]); + + return Photo::create([ + 'user_id' => $userId, + 'filename' => 'images/butts.png', + 'model' => "iPhone 12", + 'datetime' => $faker->dateTimeThisYear, + 'verified' => $verified, + 'verification' => $verification, + 'remaining' => $faker->boolean, + 'lat' => $faker->latitude, + 'lon' => $faker->longitude, + 'display_name' => $faker->address, + 'location' => $faker->word, + 'road' => $faker->streetName, + 'suburb' => $faker->citySuffix, + + 'country_id' => $country->id, + 'state_id' => $state->id, + 'city_id' => $city->id, + 'country_code' => $country->shortcode, + 'country' => $country->country, + 'state_district' => $state->state, + 'city' => $city->city, + ]); + } } diff --git a/database/seeds/RoleSeeder.php b/database/seeds/RoleSeeder.php index 3e39ba628..109d2ca3d 100644 --- a/database/seeds/RoleSeeder.php +++ b/database/seeds/RoleSeeder.php @@ -15,7 +15,7 @@ class RoleSeeder extends Seeder public function run() { DB::table('roles')->insert([ - 'name' => 'superadmin', + 'name' => 'superadmin', 'guard_name' => 'web', 'created_at' => now(), 'updated_at' => now() diff --git a/database/seeds/Tags/CreateAllTagsSeeder.php b/database/seeds/Tags/CreateAllTagsSeeder.php new file mode 100644 index 000000000..f54c48898 --- /dev/null +++ b/database/seeds/Tags/CreateAllTagsSeeder.php @@ -0,0 +1,17 @@ +call([ + GenerateTagsSeeder::class, + GenerateBrandsSeeder::class, + AchievementsSeeder::class, + ]); + } +} diff --git a/database/seeds/Tags/GenerateBrandsSeeder.php b/database/seeds/Tags/GenerateBrandsSeeder.php new file mode 100644 index 000000000..9e9acd0b0 --- /dev/null +++ b/database/seeds/Tags/GenerateBrandsSeeder.php @@ -0,0 +1,51 @@ + $brand, +// 'is_custom' => false, // comment out for testing + ]); + } + + // Insert community created + $filePath = storage_path('app/seeders/brands.txt'); + + if (file_exists($filePath)) + { + $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + + $fileBrands = []; + foreach ($lines as $line) { + $line = trim($line); + // Use a regex to match any of the expected prefixes (e.g. "brand;", "Brand:", "brande:" or "Brands:") + // followed by any whitespace and then the brand name. + if (preg_match('/^(?:brand(?:s|e)?)[;:]\s*(.+)$/i', $line, $matches)) { + $brandName = trim($matches[1]); + if (!empty($brandName)) { + // Adjust the key 'name' if your table uses a different column name. + $fileBrands[] = ['key' => $brandName]; + } + } + } + + // Insert the brands in one batch insert if any valid brands were found. + if (!empty($fileBrands)) { + DB::table('brandslist')->insertOrIgnore($fileBrands); + } + } + } +} diff --git a/database/seeds/Tags/GenerateTagsSeeder.php b/database/seeds/Tags/GenerateTagsSeeder.php new file mode 100644 index 000000000..0abb46324 --- /dev/null +++ b/database/seeds/Tags/GenerateTagsSeeder.php @@ -0,0 +1,224 @@ +seedCategories(); + $this->seedCustomTags(); + $this->seedMaterials(); + $this->seedStates(); + $this->seedCategoryObjectRelationships(); + }); + } + + /** + * Seed categories from Photo model + */ + protected function seedCategories(): void + { + $categories = Photo::categories(); + + foreach ($categories as $category) { + Category::firstOrCreate(['key' => $category]); + } + } + + protected function seedCustomTags(): void + { + if (!Schema::hasTable('custom_tags')) { + return; + } + + $existing = CustomTagNew::count(); + if ($existing > 0) { + return; + } + + $tags = DB::table('custom_tags') + ->select('tag') + ->distinct() + ->pluck('tag') + ->filter() + ->unique(); + + foreach ($tags as $tag) { + CustomTagNew::firstOrCreate(['key' => trim($tag)]); + } + } + + /** + * Seed materials + */ + protected function seedMaterials(): void + { + // Get materials from the deprecated Material model + $materials = Material::types(); + + // Add any additional materials from configuration + $configMaterials = $this->extractMaterialsFromConfig(); + $allMaterials = array_unique(array_merge($materials, $configMaterials)); + + foreach ($allMaterials as $material) { + Materials::firstOrCreate(['key' => $material]); + } + } + + /** + * Seed states (degraded, etc.) + */ + protected function seedStates(): void + { + $states = $this->extractStatesFromConfig(); + + foreach ($states as $state) { + LitterState::firstOrCreate(['key' => $state]); + } + } + + /** + * Seed category-object relationships with materials and states + */ + protected function seedCategoryObjectRelationships(): void + { + $configuration = TagsConfig::get(); + + foreach ($configuration as $categoryKey => $objects) { + $category = Category::firstOrCreate(['key' => $categoryKey]); + + foreach ($objects as $objectKey => $attributes) { + // Create the litter object + $litterObject = LitterObject::firstOrCreate(['key' => $objectKey]); + + // Create the pivot relationship + $pivot = CategoryObject::firstOrCreate([ + 'category_id' => $category->id, + 'litter_object_id' => $litterObject->id, + ]); + + // Attach materials if present + if (!empty($attributes['materials'])) { + $this->attachMaterials($pivot, $attributes['materials']); + } + + // Attach states if present + if (!empty($attributes['states'])) { + $this->attachStates($pivot, $attributes['states']); + } + + // Handle sizes (stored as custom attributes or states) + if (!empty($attributes['sizes'])) { + $this->attachSizes($pivot, $attributes['sizes']); + } + } + } + } + + /** + * Attach materials to a category-object pivot + */ + protected function attachMaterials(CategoryObject $pivot, array $materialKeys): void + { + $materialIds = []; + + foreach ($materialKeys as $materialKey) { + $material = Materials::firstOrCreate(['key' => $materialKey]); + $materialIds[] = $material->id; + } + + if (!empty($materialIds)) { + $pivot->materials()->syncWithoutDetaching($materialIds); + } + } + + /** + * Attach states to a category-object pivot + */ + protected function attachStates(CategoryObject $pivot, array $stateKeys): void + { + // Since the current models don't have a states relationship, + // we'll need to implement this based on your requirements + // For now, we'll create the states and note them for future implementation + + foreach ($stateKeys as $stateKey) { + LitterState::firstOrCreate(['key' => $stateKey]); + // TODO: Implement state attachment when the relationship is added to CategoryObject + } + } + + /** + * Attach sizes as states or custom attributes + */ + protected function attachSizes(CategoryObject $pivot, array $sizes): void + { + // Sizes can be treated as states or custom attributes + // For now, creating them as states with a 'size_' prefix + + foreach ($sizes as $size) { + $sizeState = LitterState::firstOrCreate(['key' => 'size_' . $size]); + // TODO: Implement size attachment when the relationship is added + } + } + + /** + * Extract all unique materials from configuration + */ + protected function extractMaterialsFromConfig(): array + { + $materials = []; + $configuration = TagsConfig::get(); + + foreach ($configuration as $category => $objects) { + foreach ($objects as $object => $attributes) { + if (!empty($attributes['materials'])) { + $materials = array_merge($materials, $attributes['materials']); + } + } + } + + return array_unique($materials); + } + + /** + * Extract all unique states from configuration + */ + protected function extractStatesFromConfig(): array + { + $states = []; + $configuration = TagsConfig::get(); + + foreach ($configuration as $category => $objects) { + foreach ($objects as $object => $attributes) { + if (!empty($attributes['states'])) { + $states = array_merge($states, $attributes['states']); + } + if (!empty($attributes['sizes'])) { + foreach ($attributes['sizes'] as $size) { + $states[] = 'size_' . $size; + } + } + } + } + + return array_unique($states); + } +} diff --git a/database/seeds/Tests/LoadTagsSeeder.php b/database/seeds/Tests/LoadTagsSeeder.php new file mode 100644 index 000000000..27aace4ff --- /dev/null +++ b/database/seeds/Tests/LoadTagsSeeder.php @@ -0,0 +1,46 @@ + 'seeders/categories.json', + 'materials' => 'seeders/materials.json', + 'litter_objects' => 'seeders/litter_objects.json', + 'tag_types' => 'seeders/tag_types.json', + 'litter_models' => 'seeders/litter_models.json', + 'litter_model_materials' => 'seeders/litter_model_materials.json', + 'materialables' => 'seeders/materialables.json', + ]; + + foreach ($tables as $table => $path) + { + if (Storage::disk('local')->exists($path)) + { + $data = json_decode(Storage::disk('local')->get($path), true); + + if (!empty($data)) { + DB::table($table)->insert($data); + } + } + } + } +} diff --git a/database/seeds/UserSeeder.php b/database/seeds/UserSeeder.php index a6eb26d55..a145a136e 100644 --- a/database/seeds/UserSeeder.php +++ b/database/seeds/UserSeeder.php @@ -2,50 +2,101 @@ namespace Database\Seeders; +use App\Models\Users\User; use Illuminate\Database\Seeder; -use App\Models\User\User; class UserSeeder extends Seeder { - /** - * Run the database seeds. - * - * @return void - */ - public function run() + protected array $socials = [ + "social_reddit" => "https://reddit.com/r/openlittermap", + "social_twitter" => "https://twitter.com/openlittermap", + "social_facebook" => "https://facebook.com/openlittermap", + "social_linkedin" => "https://linkedin.com/company/openlittermap", + "social_personal" => "https://openlittermap.com", + "social_instagram" => "https://instagram.com/openlittermap" + ]; + + public function run (): void { - $user = User::create([ - 'email' => 'superadmin@example.com', - 'password' => 'password', - 'username' => 'superadmin', - 'name' => 'superadmin', - 'verified' => 1, - 'can_bbox'=> 1, - 'verification_required' => 0, - 'remaining_teams' => 10 - ]); - $user->assignRole('superadmin'); - - $user = User::create(['email' => 'admin@example.com', - 'password' => 'password', - 'username' => 'admin', - 'name' => 'admin', - 'verified' => 1, - 'can_bbox'=> 1, - 'verification_required' => 0, - 'remaining_teams' => 10 - ]); - $user->assignRole('admin'); - - $user = User::create(['email' => 'helper@example.com', - 'password' => 'password', - 'username' => 'helper', - 'name' => 'helper', - 'verified' => 1, - 'can_bbox'=> 1, - 'verification_required' => 0, - 'remaining_teams' => 1 + $this->createAdmins(); + + // Create one normal user with a known email address + if (!User::where('email', 'normal@example.com')->exists()) { + User::create([ + 'email' => 'normal@example.com', + 'password' => 'password', + 'username' => 'normal', + 'name' => 'normal', + 'verified' => 1, + 'can_bbox'=> 1, + 'verification_required' => 0, + 'remaining_teams' => 1, + 'settings' => $this->socials, + 'show_name' => 1, + 'show_username' => 1 + ]); + } + + // Create another 50 normal users + User::factory()->count(50)->create([ + 'settings' => $this->socials ]); - $user->assignRole('helper'); + } + + protected function createAdmins (): void + { + if (!User::where('email', 'superadmin@example.com')->exists()) + { + $superAdmin = User::create([ + 'email' => 'superadmin@example.com', + 'password' => 'password', + 'username' => 'superadmin', + 'name' => 'superadmin', + 'verified' => 1, + 'can_bbox'=> 1, + 'verification_required' => 0, + 'remaining_teams' => 10, + 'settings' => $this->socials, + 'show_name' => 1, + 'show_username' => 1 + ]); + $superAdmin->assignRole('superadmin'); + } + + if (!User::where('email', 'admin@example.com')->exists()) + { + $admin = User::create([ + 'email' => 'admin@example.com', + 'password' => 'password', + 'username' => 'admin', + 'name' => 'admin', + 'verified' => 1, + 'can_bbox' => 1, + 'verification_required' => 0, + 'remaining_teams' => 10, + 'settings' => $this->socials, + 'show_name' => 1, + 'show_username' => 1 + ]); + $admin->assignRole('admin'); + } + + if (!User::where('email', 'helper@example.com')->exists()) + { + $helper = User::create([ + 'email' => 'helper@example.com', + 'password' => 'password', + 'username' => 'helper', + 'name' => 'helper', + 'verified' => 1, + 'can_bbox'=> 1, + 'verification_required' => 0, + 'remaining_teams' => 1, + 'settings' => $this->socials, + 'show_name' => 1, + 'show_username' => 1 + ]); + $helper->assignRole('helper'); + } } } diff --git a/littercoin/init/init-tx.mjs b/littercoin/init/init-tx.mjs index fb4752140..3c9438323 100644 --- a/littercoin/init/init-tx.mjs +++ b/littercoin/init/init-tx.mjs @@ -1,16 +1,16 @@ import path from 'path'; import { promises as fs } from 'fs'; import { - Address, - Assets, - ConstrData, - Datum, - IntData, - ListData, + Address, + Assets, + ConstrData, + Datum, + IntData, + ListData, NetworkParams, - Program, + Program, PubKeyHash, - Value, + Value, textToBytes, TxOutput, Tx @@ -21,13 +21,13 @@ import { signTx } from "../run/sign-tx.mjs"; /** - * Main calling function via the command line + * Main calling function via the command line * Usage: node init-tx.mjs adaQty ownerAddress * @params {string} * @output {string} txId - * + * * Note: Requires 5000000 lovelace locked at address to be used for collateral - + ############################################################## # You must do these steps first before running this script ############################################################## @@ -36,7 +36,7 @@ import { signTx } from "../run/sign-tx.mjs"; # Step 2. update src/threadtoken.hl with admin UTXO that will be spent # Step 3. node ./init/deploy-init.mjs # Step 4. update src/mint.hl and src/rewardsToken.hl with thread token value - # Step 5. node ./init/deploy-mint.js + # Step 5. node ./init/deploy-mint.old_js # Step 6. update ./src/validator.hl with threadtoken, littercoin, rewards and merchant mph values # Step 7. node ./init/init-tx.mjs # Step 8. cp ./src/*.hl ../public/contracts @@ -111,7 +111,7 @@ const main = async () => { } console.log("utxo", utxo.txId.hex); - + // Set default datum values const datAda = new IntData(BigInt(2000000)); const datLC = new IntData(BigInt(2)); @@ -120,7 +120,7 @@ const main = async () => { // Network Parameters const networkParamsFile = await fs.readFile(contractDirectory + '/' + process.env.NETWORK_PARAMS_FILE, 'utf8'); const networkParams = new NetworkParams(JSON.parse(networkParamsFile.toString())); - + // Thread token minting script const threadTokenFile = await fs.readFile(contractDirectory + '/threadToken.hl', 'utf8'); const threadTokenScript = threadTokenFile.toString(); @@ -133,7 +133,7 @@ const main = async () => { const lcValFile = await fs.readFile(contractDirectory + '/' + lcValScriptName, 'utf8'); const lcValScript = lcValFile.toString(); const compiledValScript = Program.new(lcValScript).compile(optimize); - const lcValHash = compiledValScript.validatorHash; + const lcValHash = compiledValScript.validatorHash; const lcValAddr = Address.fromValidatorHash(lcValHash); // Start building the transaction @@ -206,4 +206,4 @@ const main = async () => { main(); - + diff --git a/littercoin/lib/helios.mjs b/littercoin/lib/helios.mjs index 2523d17a9..25829ccc1 100644 --- a/littercoin/lib/helios.mjs +++ b/littercoin/lib/helios.mjs @@ -24,175 +24,175 @@ // Dependencies: none // // -// Disclaimer: I made Helios available as FOSS so that the Cardano community can test it +// Disclaimer: I made Helios available as FOSS so that the Cardano community can test it // extensively. I don't guarantee the library is bug-free, nor do I guarantee // backward compatibility with future versions. // // // Example usage: -// > import * as helios from "helios.js"; +// > import * as helios from "helios.old_js"; // > console.log(helios.Program.new("spending my_validator ...").compile().serialize()); -// +// // // Documentation: https://www.hyperion-bt.org/Helios-Book // // -// Note: I recommend keeping the Helios library as a single unminified file for optimal +// Note: I recommend keeping the Helios library as a single unminified file for optimal // auditability. // -// +// // Overview of internals: // Section 1: Global constants VERSION, DEBUG, debug, STRICT_BABBAGE, TAB, IS_TESTNET // -// Section 2: Utilities assert, assertDefined, assertClass, assertNumber, eq, -// assertEq, idiv, ipow2, imask, imod8, bigIntToBytes, -// bytesToBigInt, padZeroes, byteToBitString, -// hexToBytes, bytesToHex, textToBytes, bytesToText, +// Section 2: Utilities assert, assertDefined, assertClass, assertNumber, eq, +// assertEq, idiv, ipow2, imask, imod8, bigIntToBytes, +// bytesToBigInt, padZeroes, byteToBitString, +// hexToBytes, bytesToHex, textToBytes, bytesToText, // replaceTabs, BitReader, BitWriter, Source, hl // -// Section 3: Tokens Site, RuntimeError, Token, Word, SymbolToken, Group, -// PrimitiveLiteral, IntLiteral, BoolLiteral, +// Section 3: Tokens Site, RuntimeError, Token, Word, SymbolToken, Group, +// PrimitiveLiteral, IntLiteral, BoolLiteral, // ByteArrayLiteral, StringLiteral // -// Section 4: Cryptography functions BLAKE2B_DIGEST_SIZE, setBlake2bDigestSize, -// DEFAULT_BASE32_ALPHABET, BECH32_BASE32_ALPHABET, +// Section 4: Cryptography functions BLAKE2B_DIGEST_SIZE, setBlake2bDigestSize, +// DEFAULT_BASE32_ALPHABET, BECH32_BASE32_ALPHABET, // imod32, irotr, posMod, UInt64, Crypto // // Section 5: Cbor encoder/decoder CborData // -// Section 6: Uplc data types UPLC_DATA_NODE_MEM_SIZE, UplcData, IntData, +// Section 6: Uplc data types UPLC_DATA_NODE_MEM_SIZE, UplcData, IntData, // ByteArrayData, ListData, MapData, ConstrData // -// Section 7: Helios data objects HeliosData, Int, Time, Duration, Bool, HeliosString, -// ByteArray, List, HeliosMap, Option, Hash, DatumHash, -// PubKeyHash, ScriptHash, MintingPolicyHash, -// StakeKeyHash, StakingValidatorHash, ValidatorHash, +// Section 7: Helios data objects HeliosData, Int, Time, Duration, Bool, HeliosString, +// ByteArray, List, HeliosMap, Option, Hash, DatumHash, +// PubKeyHash, ScriptHash, MintingPolicyHash, +// StakeKeyHash, StakingValidatorHash, ValidatorHash, // TxId, TxOutputId, Address, Assets, Value // -// Section 8: Uplc cost-models NetworkParams, CostModel, ConstCost, LinearCost, -// ArgSizeCost, Arg0SizeCost, Arg1SizeCost, -// Arg2SizeCost, MinArgSizeCost, MaxArgSizeCost, -// SumArgSizesCost, ArgSizeDiffCost, ArgSizeProdCost, +// Section 8: Uplc cost-models NetworkParams, CostModel, ConstCost, LinearCost, +// ArgSizeCost, Arg0SizeCost, Arg1SizeCost, +// Arg2SizeCost, MinArgSizeCost, MaxArgSizeCost, +// SumArgSizesCost, ArgSizeDiffCost, ArgSizeProdCost, // ArgSizeDiagCost // -// Section 9: Uplc built-in functions UPLC_BUILTINS, dumpCostModels, findUplcBuiltin, +// Section 9: Uplc built-in functions UPLC_BUILTINS, dumpCostModels, findUplcBuiltin, // isUplcBuiltin // -// Section 10: Uplc AST ScriptPurpose, getPurposeName, UplcValue, UplcType, -// DEFAULT_UPLC_RTE_CALLBACKS, UplcRte, UplcStack, -// UplcAnon, UplcDelayedValue, UplcInt, UplcByteArray, -// UplcString, UplcUnit, UplcBool, UplcPair, UplcList, -// UplcDataValue, UplcTerm, UplcVariable, UplcDelay, -// UplcLambda, UplcCall, UplcConst, UplcForce, +// Section 10: Uplc AST ScriptPurpose, getPurposeName, UplcValue, UplcType, +// DEFAULT_UPLC_RTE_CALLBACKS, UplcRte, UplcStack, +// UplcAnon, UplcDelayedValue, UplcInt, UplcByteArray, +// UplcString, UplcUnit, UplcBool, UplcPair, UplcList, +// UplcDataValue, UplcTerm, UplcVariable, UplcDelay, +// UplcLambda, UplcCall, UplcConst, UplcForce, // UplcError, UplcBuiltin // -// Section 11: Uplc program UPLC_VERSION_COMPONENTS, UPLC_VERSION, -// PLUTUS_SCRIPT_VERSION, deserializeUplcBytes, +// Section 11: Uplc program UPLC_VERSION_COMPONENTS, UPLC_VERSION, +// PLUTUS_SCRIPT_VERSION, deserializeUplcBytes, // deserializeUplc // // Section 12: Tokenization Tokenizer, tokenize, tokenizeIR // -// Section 13: Helios eval entities EvalEntity, Type, AnyType, DataType, AnyDataType, -// BuiltinType, BuiltinEnumMember, StatementType, -// StructStatementType, EnumStatementType, -// EnumMemberStatementType, FuncType, NotType, Instance, -// DataInstance, ConstStatementInstance, FuncInstance, -// FuncStatementInstance, MultiInstance, VoidInstance, -// ErrorInstance, BuiltinFuncInstance, PrintFunc, -// VoidType, ErrorType, IntType, BoolType, StringType, -// ByteArrayType, ParamType, ParamFuncValue, ListType, -// MapType, OptionType, OptionSomeType, OptionNoneType, -// HashType, PubKeyHashType, StakeKeyHashType, -// PubKeyType, ScriptHashType, ValidatorHashType, -// MintingPolicyHashType, StakingValidatorHashType, -// DatumHashType, ScriptContextType, ScriptPurposeType, -// MintingScriptPurposeType, SpendingScriptPurposeType, -// RewardingScriptPurposeType, -// CertifyingScriptPurposeType, StakingPurposeType, -// StakingRewardingPurposeType, -// StakingCertifyingPurposeType, DCertType, -// RegisterDCertType, DeregisterDCertType, -// DelegateDCertType, RegisterPoolDCertType, -// RetirePoolDCertType, TxType, TxIdType, TxInputType, -// TxOutputType, OutputDatumType, NoOutputDatumType, -// HashedOutputDatumType, InlineOutputDatumType, -// RawDataType, TxOutputIdType, AddressType, -// CredentialType, CredentialPubKeyType, -// CredentialValidatorType, StakingHashType, -// StakingHashStakeKeyType, StakingHashValidatorType, -// StakingCredentialType, StakingHashCredentialType, -// StakingPtrCredentialType, TimeType, DurationType, +// Section 13: Helios eval entities EvalEntity, Type, AnyType, DataType, AnyDataType, +// BuiltinType, BuiltinEnumMember, StatementType, +// StructStatementType, EnumStatementType, +// EnumMemberStatementType, FuncType, NotType, Instance, +// DataInstance, ConstStatementInstance, FuncInstance, +// FuncStatementInstance, MultiInstance, VoidInstance, +// ErrorInstance, BuiltinFuncInstance, PrintFunc, +// VoidType, ErrorType, IntType, BoolType, StringType, +// ByteArrayType, ParamType, ParamFuncValue, ListType, +// MapType, OptionType, OptionSomeType, OptionNoneType, +// HashType, PubKeyHashType, StakeKeyHashType, +// PubKeyType, ScriptHashType, ValidatorHashType, +// MintingPolicyHashType, StakingValidatorHashType, +// DatumHashType, ScriptContextType, ScriptPurposeType, +// MintingScriptPurposeType, SpendingScriptPurposeType, +// RewardingScriptPurposeType, +// CertifyingScriptPurposeType, StakingPurposeType, +// StakingRewardingPurposeType, +// StakingCertifyingPurposeType, DCertType, +// RegisterDCertType, DeregisterDCertType, +// DelegateDCertType, RegisterPoolDCertType, +// RetirePoolDCertType, TxType, TxIdType, TxInputType, +// TxOutputType, OutputDatumType, NoOutputDatumType, +// HashedOutputDatumType, InlineOutputDatumType, +// RawDataType, TxOutputIdType, AddressType, +// CredentialType, CredentialPubKeyType, +// CredentialValidatorType, StakingHashType, +// StakingHashStakeKeyType, StakingHashValidatorType, +// StakingCredentialType, StakingHashCredentialType, +// StakingPtrCredentialType, TimeType, DurationType, // TimeRangeType, AssetClassType, ValueType // -// Section 14: Scopes GlobalScope, Scope, TopScope, ModuleScope, +// Section 14: Scopes GlobalScope, Scope, TopScope, ModuleScope, // FuncStatementScope // -// Section 15: Helios AST expressions Expr, TypeExpr, TypeRefExpr, TypePathExpr, -// ListTypeExpr, MapTypeExpr, OptionTypeExpr, -// VoidTypeExpr, FuncTypeExpr, ValueExpr, AssignExpr, -// PrintExpr, VoidExpr, ChainExpr, PrimitiveLiteralExpr, -// LiteralDataExpr, StructLiteralField, -// StructLiteralExpr, ListLiteralExpr, MapLiteralExpr, -// NameTypePair, FuncArg, FuncLiteralExpr, ValueRefExpr, -// ValuePathExpr, UnaryExpr, BinaryExpr, ParensExpr, -// CallExpr, MemberExpr, IfElseExpr, SwitchCase, -// UnconstrDataSwitchCase, SwitchDefault, SwitchExpr, +// Section 15: Helios AST expressions Expr, TypeExpr, TypeRefExpr, TypePathExpr, +// ListTypeExpr, MapTypeExpr, OptionTypeExpr, +// VoidTypeExpr, FuncTypeExpr, ValueExpr, AssignExpr, +// PrintExpr, VoidExpr, ChainExpr, PrimitiveLiteralExpr, +// LiteralDataExpr, StructLiteralField, +// StructLiteralExpr, ListLiteralExpr, MapLiteralExpr, +// NameTypePair, FuncArg, FuncLiteralExpr, ValueRefExpr, +// ValuePathExpr, UnaryExpr, BinaryExpr, ParensExpr, +// CallExpr, MemberExpr, IfElseExpr, SwitchCase, +// UnconstrDataSwitchCase, SwitchDefault, SwitchExpr, // EnumSwitchExpr, DataSwitchExpr // // Section 16: Literal functions buildLiteralExprFromJson, buildLiteralExprFromValue // -// Section 17: Helios AST statements Statement, ImportStatement, ConstStatement, -// DataField, DataDefinition, StructStatement, -// FuncStatement, EnumMember, EnumStatement, +// Section 17: Helios AST statements Statement, ImportStatement, ConstStatement, +// DataField, DataDefinition, StructStatement, +// FuncStatement, EnumMember, EnumStatement, // ImplDefinition // -// Section 18: Helios AST building buildProgramStatements, buildScriptPurpose, -// extractScriptPurposeAndName, buildConstStatement, -// splitDataImpl, buildStructStatement, buildDataFields, -// buildFuncStatement, buildFuncLiteralExpr, -// buildFuncArgs, buildEnumStatement, -// buildImportStatements, buildEnumMember, -// buildImplDefinition, buildImplMembers, buildTypeExpr, -// buildListTypeExpr, buildMapTypeExpr, -// buildOptionTypeExpr, buildFuncTypeExpr, -// buildFuncRetTypeExprs, buildTypePathExpr, -// buildTypeRefExpr, buildValueExpr, -// buildMaybeAssignOrPrintExpr, buildAssignLhs, -// makeBinaryExprBuilder, makeUnaryExprBuilder, -// buildChainedValueExpr, buildChainStartValueExpr, -// buildParensExpr, buildCallArgs, buildIfElseExpr, -// buildSwitchExpr, buildSwitchCaseName, -// buildSwitchCase, buildSwitchCaseNameType, -// buildMultiArgSwitchCase, buildSingleArgSwitchCase, -// buildSwitchCaseBody, buildSwitchDefault, -// buildListLiteralExpr, buildMapLiteralExpr, -// buildStructLiteralExpr, buildStructLiteralField, +// Section 18: Helios AST building buildProgramStatements, buildScriptPurpose, +// extractScriptPurposeAndName, buildConstStatement, +// splitDataImpl, buildStructStatement, buildDataFields, +// buildFuncStatement, buildFuncLiteralExpr, +// buildFuncArgs, buildEnumStatement, +// buildImportStatements, buildEnumMember, +// buildImplDefinition, buildImplMembers, buildTypeExpr, +// buildListTypeExpr, buildMapTypeExpr, +// buildOptionTypeExpr, buildFuncTypeExpr, +// buildFuncRetTypeExprs, buildTypePathExpr, +// buildTypeRefExpr, buildValueExpr, +// buildMaybeAssignOrPrintExpr, buildAssignLhs, +// makeBinaryExprBuilder, makeUnaryExprBuilder, +// buildChainedValueExpr, buildChainStartValueExpr, +// buildParensExpr, buildCallArgs, buildIfElseExpr, +// buildSwitchExpr, buildSwitchCaseName, +// buildSwitchCase, buildSwitchCaseNameType, +// buildMultiArgSwitchCase, buildSingleArgSwitchCase, +// buildSwitchCaseBody, buildSwitchDefault, +// buildListLiteralExpr, buildMapLiteralExpr, +// buildStructLiteralExpr, buildStructLiteralField, // buildValuePathExpr // -// Section 19: IR definitions onNotifyRawUsage, setRawUsageNotifier, RawFunc, +// Section 19: IR definitions onNotifyRawUsage, setRawUsageNotifier, RawFunc, // makeRawFunctions, wrapWithRawFunctions // -// Section 20: IR Context objects IRScope, IRVariable, IRValue, IRFuncValue, +// Section 20: IR Context objects IRScope, IRVariable, IRValue, IRFuncValue, // IRLiteralValue, IRDeferredValue, IRCallStack // -// Section 21: IR AST objects IRNameExprRegistry, IRExprRegistry, IRExpr, -// IRNameExpr, IRLiteralExpr, IRConstExpr, IRFuncExpr, -// IRCallExpr, IRCoreCallExpr, IRUserCallExpr, -// IRAnonCallExpr, IRNestedAnonCallExpr, IRFuncDefExpr, +// Section 21: IR AST objects IRNameExprRegistry, IRExprRegistry, IRExpr, +// IRNameExpr, IRLiteralExpr, IRConstExpr, IRFuncExpr, +// IRCallExpr, IRCoreCallExpr, IRUserCallExpr, +// IRAnonCallExpr, IRNestedAnonCallExpr, IRFuncDefExpr, // IRErrorCallExpr // // Section 22: IR AST build functions buildIRExpr, buildIRFuncExpr // // Section 23: IR Program IRProgram, IRParametricProgram // -// Section 24: Helios program Module, MainModule, RedeemerProgram, -// DatumRedeemerProgram, TestingProgram, +// Section 24: Helios program Module, MainModule, RedeemerProgram, +// DatumRedeemerProgram, TestingProgram, // SpendingProgram, MintingProgram, StakingProgram // -// Section 25: Tx types Tx, TxBody, TxWitnesses, TxInput, UTxO, TxRefInput, -// TxOutput, DCert, StakeAddress, Signature, Redeemer, -// SpendingRedeemer, MintingRedeemer, Datum, -// HashedDatum, InlineDatum, encodeMetadata, +// Section 25: Tx types Tx, TxBody, TxWitnesses, TxInput, UTxO, TxRefInput, +// TxOutput, DCert, StakeAddress, Signature, Redeemer, +// SpendingRedeemer, MintingRedeemer, Datum, +// HashedDatum, InlineDatum, encodeMetadata, // decodeMetadata, TxMetadata // // Section 26: Highlighting function SyntaxCategory, highlight @@ -272,8 +272,8 @@ export var N_DUMMY_INPUTS = 2; /** * Throws an error if 'cond' is false. * @package - * @param {boolean} cond - * @param {string} msg + * @param {boolean} cond + * @param {string} msg */ function assert(cond, msg = "unexpected") { if (!cond) { @@ -285,8 +285,8 @@ function assert(cond, msg = "unexpected") { * Throws an error if 'obj' is undefined. Returns 'obj' itself (for chained application). * @package * @template T - * @param {T | undefined | null} obj - * @param {string} msg + * @param {T | undefined | null} obj + * @param {string} msg * @returns {T} */ function assertDefined(obj, msg = "unexpected undefined value") { @@ -314,8 +314,8 @@ function assertClass(obj, C, msg = "unexpected class") { /** * @package - * @param {any} obj - * @param {string} msg + * @param {any} obj + * @param {string} msg * @returns {number} */ function assertNumber(obj, msg = "expected a number") { @@ -332,8 +332,8 @@ function assertNumber(obj, msg = "expected a number") { * Compares two objects (deep recursive comparison) * @package * @template T - * @param {T} a - * @param {T} b + * @param {T} a + * @param {T} b * @returns {boolean} */ function eq(a, b) { @@ -387,7 +387,7 @@ function assertEq(a, b, msg) { * idiv(355, 113) => 3 * @package * @param {number} a - * @param {number} b + * @param {number} b */ function idiv(a, b) { return Math.floor(a / b); @@ -405,16 +405,16 @@ function ipow2(p) { } /** - * Masks bits of 'b' by setting bits outside the range ['i0', 'i1') to 0. + * Masks bits of 'b' by setting bits outside the range ['i0', 'i1') to 0. * 'b' is an 8 bit integer (i.e. number between 0 and 255). * The return value is also an 8 bit integer, shift right by 'i1'. - + * @example * imask(0b11111111, 1, 4) => 0b0111 // (i.e. 7) * @package - * @param {number} b - * @param {number} i0 - * @param {number} i1 + * @param {number} b + * @param {number} i0 + * @param {number} i1 * @returns {number} */ function imask(b, i0, i1) { @@ -495,7 +495,7 @@ function bytesToBigInt(b) { * padZeroes("1111", 8) => "00001111" * @package * @param {string} bits - * @param {number} n + * @param {number} n * @returns {string} */ function padZeroes(bits, n) { @@ -511,11 +511,11 @@ function padZeroes(bits, n) { /** * Converts a 8 bit integer number into a bit string with an optional "0b" prefix. - * The result is padded with leading zeroes to become 'n' chars long ('2 + n' chars long if you count the "0b" prefix). + * The result is padded with leading zeroes to become 'n' chars long ('2 + n' chars long if you count the "0b" prefix). * @example * byteToBitString(7) => "0b00000111" * @package - * @param {number} b + * @param {number} b * @param {number} n * @param {boolean} prefix * @returns {string} @@ -533,13 +533,13 @@ function byteToBitString(b, n = 8, prefix = true) { /** * Converts a hexadecimal representation of bytes into an actual list of uint8 bytes. * @example - * hexToBytes("00ff34") => [0, 255, 52] - * @param {string} hex + * hexToBytes("00ff34") => [0, 255, 52] + * @param {string} hex * @returns {number[]} */ export function hexToBytes(hex) { hex = hex.trim(); - + const bytes = []; for (let i = 0; i < hex.length; i += 2) { @@ -570,7 +570,7 @@ export function bytesToHex(bytes) { * Encodes a string into a list of uint8 bytes using UTF-8 encoding. * @example * textToBytes("hello world") => [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100] - * @param {string} str + * @param {string} str * @returns {number[]} */ export function textToBytes(str) { @@ -581,7 +581,7 @@ export function textToBytes(str) { * Decodes a list of uint8 bytes into a string using UTF-8 encoding. * @example * bytesToText([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]) => "hello world" - * @param {number[]} bytes + * @param {number[]} bytes * @returns {string} */ export function bytesToText(bytes) { @@ -590,11 +590,11 @@ export function bytesToText(bytes) { /** * Replaces the tab characters of a string with spaces. - * This is used to create a prettier IR (which is built-up from many template js strings in this file, which might contain tabs depending on the editor used) + * This is used to create a prettier IR (which is built-up from many template old_js strings in this file, which might contain tabs depending on the editor used) * @example * replaceTabs("\t\t\t") => [TAB, TAB, TAB].join("") * @package - * @param {string} str + * @param {string} str * @returns {string} */ function replaceTabs(str) { @@ -786,7 +786,7 @@ class BitWriter { * Add padding to the BitWriter in order to align with the byte boundary. * If 'force == true' then 8 bits are added if the BitWriter is already aligned. * @package - * @param {boolean} force + * @param {boolean} force */ padToByteBoundary(force = false) { let nPad = 0; @@ -844,7 +844,7 @@ class Source { #fileIndex; /** - * @param {string} raw + * @param {string} raw * @param {?number} fileIndex */ constructor(raw, fileIndex = null) { @@ -878,11 +878,11 @@ class Source { getChar(pos) { return this.#raw[pos]; } - + /** * Returns word under pos * @package - * @param {number} pos + * @param {number} pos * @returns {?string} */ getWord(pos) { @@ -890,7 +890,7 @@ class Source { const chars = []; /** - * @param {string | undefined} c + * @param {string | undefined} c * @returns {boolean} */ function isWordChar(c) { @@ -926,7 +926,7 @@ class Source { /** * Calculates the line number of the line where the given character is located (0-based). * @package - * @param {number} pos + * @param {number} pos * @returns {number} */ posToLine(pos) { @@ -989,8 +989,8 @@ class Source { * Is just a marker so IDE support can work on literal helios sources inside javascript/typescript files. * @example * hl`hello ${"world"}!` => "hello world!" - * @param {string[]} a - * @param {...any} b + * @param {string[]} a + * @param {...any} b * @returns {string} */ export function hl(a, ...b) { @@ -1023,8 +1023,8 @@ class Site { #codeMapSite; /** - * @param {Source} src - * @param {number} pos + * @param {Source} src + * @param {number} pos */ constructor(src, pos) { this.#src = src; @@ -1048,7 +1048,7 @@ class Site { get line() { return this.#src.posToLine(this.#pos); } - + get endSite() { return this.#endSite; } @@ -1072,14 +1072,14 @@ class Site { } /** - * @type {?Site} + * @type {?Site} */ get codeMapSite() { return this.#codeMapSite; } /** - * @param {Site} site + * @param {Site} site */ setCodeMapSite(site) { this.#codeMapSite = site; @@ -1087,7 +1087,7 @@ class Site { /** * Returns a SyntaxError - * @param {string} info + * @param {string} info * @returns {UserError} */ syntaxError(info = "") { @@ -1105,7 +1105,7 @@ class Site { /** * Returns a ReferenceError - * @param {string} info + * @param {string} info * @returns {UserError} */ referenceError(info = "") { @@ -1146,8 +1146,8 @@ class Site { /** * @param {string} msg - * @param {Source} src - * @param {number} pos + * @param {Source} src + * @param {number} pos */ constructor(msg, src, pos) { super(msg); @@ -1157,9 +1157,9 @@ class Site { /** * @param {string} type - * @param {Source} src - * @param {number} pos - * @param {string} info + * @param {Source} src + * @param {number} pos + * @param {string} info */ static new(type, src, pos, info = "") { let line = src.posToLine(pos); @@ -1181,9 +1181,9 @@ class Site { /** * Constructs a SyntaxError - * @param {Source} src - * @param {number} pos - * @param {string} info + * @param {Source} src + * @param {number} pos + * @param {string} info * @returns {UserError} */ static syntaxError(src, pos, info = "") { @@ -1192,9 +1192,9 @@ class Site { /** * Constructs a TypeError - * @param {Source} src - * @param {number} pos - * @param {string} info + * @param {Source} src + * @param {number} pos + * @param {string} info * @returns {UserError} */ static typeError(src, pos, info = "") { @@ -1202,7 +1202,7 @@ class Site { } /** - * @param {Error} e + * @param {Error} e * @returns {boolean} */ static isTypeError(e) { @@ -1211,9 +1211,9 @@ class Site { /** * Constructs a ReferenceError (i.e. name undefined, or name unused) - * @param {Source} src - * @param {number} pos - * @param {string} info + * @param {Source} src + * @param {number} pos + * @param {string} info * @returns {UserError} */ static referenceError(src, pos, info = "") { @@ -1221,7 +1221,7 @@ class Site { } /** - * @param {Error} e + * @param {Error} e * @returns {boolean} */ static isReferenceError(e) { @@ -1250,7 +1250,7 @@ class Site { /** * Dumps the error without throwing. * If 'verbose == true' the Source is also pretty printed with line-numbers. - * @param {boolean} verbose + * @param {boolean} verbose */ dump(verbose = false) { if (verbose) { @@ -1272,9 +1272,9 @@ class Site { * Catches any UserErrors thrown inside 'fn()`. * Dumps the error * @template T - * @param {() => T} fn - * @param {boolean} verbose - * @returns {T | undefined} + * @param {() => T} fn + * @param {boolean} verbose + * @returns {T | undefined} */ static catch(fn, verbose = false) { try { @@ -1296,10 +1296,10 @@ class RuntimeError extends UserError { #isIR; // last trace added /** - * @param {string} msg - * @param {Source} src - * @param {number} pos - * @param {boolean} isIR + * @param {string} msg + * @param {Source} src + * @param {number} pos + * @param {boolean} isIR */ constructor(msg, src, pos, isIR) { super(msg, src, pos); @@ -1307,8 +1307,8 @@ class RuntimeError extends UserError { } /** - * @param {Source} src - * @param {number} pos + * @param {Source} src + * @param {number} pos * @param {boolean} isIR * @param {string} info * @returns {RuntimeError} @@ -1325,10 +1325,10 @@ class RuntimeError extends UserError { } /** - * @param {Source} src - * @param {number} pos - * @param {boolean} isIR - * @param {string} info + * @param {Source} src + * @param {number} pos + * @param {boolean} isIR + * @param {string} info * @returns {RuntimeError} */ addTrace(src, pos, isIR, info = "") { @@ -1341,7 +1341,7 @@ class RuntimeError extends UserError { let msg = `Trace${info == "" ? ":" : ","} line ${line + 1}`; if (isIR) { msg += " of IR"; - } + } let word = src.getWord(pos); if (word !== null && word !== "print") { @@ -1352,15 +1352,15 @@ class RuntimeError extends UserError { msg += `: ${info}`; } - + msg += "\n" + this.message; return new RuntimeError(msg, this.src, this.pos, isIR); } - + /** - * @param {Site} site - * @param {string} info + * @param {Site} site + * @param {string} info * @returns {RuntimeError} */ addTraceSite(site, info = "") { @@ -1379,7 +1379,7 @@ export class Token { #site; /** - * @param {Site} site + * @param {Site} site */ constructor(site) { this.#site = assertDefined(site); // position in source of start of token @@ -1433,7 +1433,7 @@ export class Token { /** * Returns a SyntaxError at the current Site. - * @param {string} msg + * @param {string} msg * @returns {UserError} */ syntaxError(msg) { @@ -1460,7 +1460,7 @@ export class Token { /** * Throws a SyntaxError if 'this' isn't a Word. - * @param {?(string | string[])} value + * @param {?(string | string[])} value * @returns {Word} */ assertWord(value = null) { @@ -1473,7 +1473,7 @@ export class Token { /** * Throws a SyntaxError if 'this' isn't a Symbol. - * @param {?(string | string[])} value + * @param {?(string | string[])} value * @returns {SymbolToken} */ assertSymbol(value = null) { @@ -1486,7 +1486,7 @@ export class Token { /** * Throws a SyntaxError if 'this' isn't a Group. - * @param {?string} type + * @param {?string} type * @param {?number} nFields * @returns {Group} */ @@ -1507,8 +1507,8 @@ class Word extends Token { #value; /** - * @param {Site} site - * @param {string} value + * @param {Site} site + * @param {string} value */ constructor(site, value) { super(site); @@ -1516,7 +1516,7 @@ class Word extends Token { } /** - * @param {string} value + * @param {string} value * @returns {Word} */ static new(value) { @@ -1528,7 +1528,7 @@ class Word extends Token { } /** - * @param {?(string | string[])} value + * @param {?(string | string[])} value * @returns {boolean} */ isWord(value = null) { @@ -1544,7 +1544,7 @@ class Word extends Token { } /** - * @param {?(string | string[])} value + * @param {?(string | string[])} value * @returns {Word} */ assertWord(value = null) { @@ -1613,8 +1613,8 @@ class Word extends Token { /** * Finds the index of the first Word(value) in a list of tokens * Returns -1 if none found - * @param {Token[]} ts - * @param {string | string[]} value + * @param {Token[]} ts + * @param {string | string[]} value * @returns {number} */ static find(ts, value) { @@ -1643,7 +1643,7 @@ class SymbolToken extends Token { } /** - * @param {?(string | string[])} value + * @param {?(string | string[])} value * @returns {boolean} */ isSymbol(value = null) { @@ -1659,7 +1659,7 @@ class SymbolToken extends Token { } /** - * @param {?(string | string[])} value + * @param {?(string | string[])} value * @returns {SymbolToken} */ assertSymbol(value) { @@ -1691,8 +1691,8 @@ class SymbolToken extends Token { /** * Finds the index of the last Symbol(value) in a list of tokens. * Returns -1 if none found. - * @param {Token[]} ts - * @param {string | string[]} value + * @param {Token[]} ts + * @param {string | string[]} value * @returns {number} */ static findLast(ts, value) { @@ -1716,9 +1716,9 @@ class Group extends Token { #firstComma; /** - * @param {Site} site + * @param {Site} site * @param {string} type - "(", "[" or "{" - * @param {Token[][]} fields + * @param {Token[][]} fields * @param {?SymbolToken} firstComma */ constructor(site, type, fields, firstComma = null) { @@ -1735,7 +1735,7 @@ class Group extends Token { } /** - * @param {?string} type + * @param {?string} type * @returns {boolean} */ isGroup(type = null) { @@ -1747,8 +1747,8 @@ class Group extends Token { } /** - * @param {?string} type - * @param {?number} nFields + * @param {?string} type + * @param {?number} nFields * @returns {Group} */ assertGroup(type = null, nFields = null) { @@ -1782,7 +1782,7 @@ class Group extends Token { } /** - * @param {Token} t + * @param {Token} t * @returns {boolean} */ static isOpenSymbol(t) { @@ -1790,7 +1790,7 @@ class Group extends Token { } /** - * @param {Token} t + * @param {Token} t * @returns {boolean} */ static isCloseSymbol(t) { @@ -1830,8 +1830,8 @@ class Group extends Token { /** * Finds the index of first Group(type) in list of tokens * Returns -1 if none found. - * @param {Token[]} ts - * @param {string} type + * @param {Token[]} ts + * @param {string} type * @returns {number} */ static find(ts, type) { @@ -1845,7 +1845,7 @@ class Group extends Token { */ class PrimitiveLiteral extends Token { /** - * @param {Site} site + * @param {Site} site */ constructor(site) { super(site); @@ -1867,8 +1867,8 @@ class IntLiteral extends PrimitiveLiteral { #value; /** - * @param {Site} site - * @param {bigint} value + * @param {Site} site + * @param {bigint} value */ constructor(site, value) { super(site); @@ -1895,8 +1895,8 @@ class BoolLiteral extends PrimitiveLiteral { #value; /** - * @param {Site} site - * @param {boolean} value + * @param {Site} site + * @param {boolean} value */ constructor(site, value) { super(site); @@ -1923,8 +1923,8 @@ class ByteArrayLiteral extends PrimitiveLiteral { #bytes; /** - * @param {Site} site - * @param {number[]} bytes + * @param {Site} site + * @param {number[]} bytes */ constructor(site, bytes) { super(site); @@ -1948,8 +1948,8 @@ class StringLiteral extends PrimitiveLiteral { #value; /** - * @param {Site} site - * @param {string} value + * @param {Site} site + * @param {string} value */ constructor(site, value) { super(site); @@ -1985,8 +1985,8 @@ class StringLiteral extends PrimitiveLiteral { #site; /** - * @param {string | IR[]} content - * @param {?Site} site + * @param {string | IR[]} content + * @param {?Site} site */ constructor(content, site = null) { this.#content = content; @@ -2106,7 +2106,7 @@ class StringLiteral extends PrimitiveLiteral { /** * Wraps 'inner' IR source with some definitions (used for top-level statements and for builtins) * @package - * @param {IR} inner + * @param {IR} inner * @param {IRDefinitions} definitions - name -> definition * @returns {IR} */ @@ -2142,9 +2142,9 @@ class StringLiteral extends PrimitiveLiteral { var BLAKE2B_DIGEST_SIZE = 32; // bytes /** - * Changes the value of BLAKE2B_DIGEST_SIZE - * (because the nodejs crypto module only supports - * blake2b-512 and not blake2b-256, and we want to avoid non-standard dependencies in the + * Changes the value of BLAKE2B_DIGEST_SIZE + * (because the nodejs crypto module only supports + * blake2b-512 and not blake2b-256, and we want to avoid non-standard dependencies in the * test-suite) * @package * @param {number} s - 32 or 64 @@ -2166,7 +2166,7 @@ const DEFAULT_BASE32_ALPHABET = "abcdefghijklmnopqrstuvwxyz234567"; * @type {string} */ const BECH32_BASE32_ALPHABET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; - + /** * Make sure resulting number fits in uint32 * @package @@ -2189,8 +2189,8 @@ function irotr(x, n) { /** * @package - * @param {bigint} x - * @param {bigint} n + * @param {bigint} x + * @param {bigint} n * @returns {bigint} */ function posMod(x, n) { @@ -2215,7 +2215,7 @@ class UInt64 { * @param {number} high - uint32 number * @param {number} low - uint32 number */ - constructor(high, low) { + constructor(high, low) { this.#high = imod32(high); this.#low = imod32(low); } @@ -2254,7 +2254,7 @@ class UInt64 { /** * @package - * @param {string} str + * @param {string} str * @returns {UInt64} */ static fromString(str) { @@ -2299,15 +2299,15 @@ class UInt64 { ]; if (!littleEndian) { - res.reverse(); - } - + res.reverse(); + } + return res; } /** * @package - * @param {UInt64} other + * @param {UInt64} other * @returns {boolean} */ eq(other) { @@ -2316,7 +2316,7 @@ class UInt64 { /** * @package - * @returns {UInt64} + * @returns {UInt64} */ not() { return new UInt64(~this.#high, ~this.#low); @@ -2333,7 +2333,7 @@ class UInt64 { /** * @package - * @param {UInt64} other + * @param {UInt64} other * @returns {UInt64} */ xor(other) { @@ -2342,7 +2342,7 @@ class UInt64 { /** * @package - * @param {UInt64} other + * @param {UInt64} other * @returns {UInt64} */ add(other) { @@ -2359,7 +2359,7 @@ class UInt64 { /** * @package - * @param {number} n + * @param {number} n * @returns {UInt64} */ rotr(n) { @@ -2369,7 +2369,7 @@ class UInt64 { return (new UInt64(this.#low, this.#high)).rotr(n - 32); } else { return new UInt64( - imod32((this.#high >>> n) | (this.#low << (32 - n))), + imod32((this.#high >>> n) | (this.#low << (32 - n))), imod32((this.#low >>> n) | (this.#high << (32 - n))) ); } @@ -2386,7 +2386,7 @@ class UInt64 { } else { return new UInt64(this.#high >>> n, (this.#low >>> n) | (this.#high << (32 - n))); } - } + } } /** @@ -2425,7 +2425,7 @@ export class Crypto { static rand(seed) { return this.mulberry32(seed); } - + /** * Encode bytes in special base32. * @example @@ -2452,7 +2452,7 @@ export class Crypto { /** * Internal method * @package - * @param {number[]} bytes + * @param {number[]} bytes * @returns {number[]} - list of numbers between 0 and 32 */ static encodeBase32Bytes(bytes) { @@ -2541,7 +2541,7 @@ export class Crypto { * Used as part of the bech32 checksum. * Internal method. * @package - * @param {number[]} bytes + * @param {number[]} bytes * @returns {number} */ static calcBech32Polymod(bytes) { @@ -2566,7 +2566,7 @@ export class Crypto { * Generate the bech32 checksum * Internal method * @package - * @param {string} hrp + * @param {string} hrp * @param {number[]} data - numbers between 0 and 32 * @returns {number[]} - 6 numbers between 0 and 32 */ @@ -2590,7 +2590,7 @@ export class Crypto { * @example * Crypto.encodeBech32("addr_test", hexToBytes("70a9508f015cfbcffc3d88ac4c1c934b5b82d2bb281d464672f6c49539")) => "addr_test1wz54prcptnaullpa3zkyc8ynfddc954m9qw5v3nj7mzf2wggs2uld" * @package - * @param {string} hrp + * @param {string} hrp * @param {number[]} data - uint8 0 - 256 * @returns {string} */ @@ -2610,7 +2610,7 @@ export class Crypto { * @example * bytesToHex(Crypto.decodeBech32("addr_test1wz54prcptnaullpa3zkyc8ynfddc954m9qw5v3nj7mzf2wggs2uld")[1]) => "70a9508f015cfbcffc3d88ac4c1c934b5b82d2bb281d464672f6c49539" * @package - * @param {string} addr + * @param {string} addr * @returns {[string, number[]]} */ static decodeBech32(addr) { @@ -2655,7 +2655,7 @@ export class Crypto { const data =[]; const i = addr.indexOf("1"); - + if (i == -1 || i == 0) { return false; } @@ -2689,7 +2689,7 @@ export class Crypto { /** * Calculates sha2-256 (32bytes) hash of a list of uint8 numbers. * Result is also a list of uint8 number. - * @example + * @example * bytesToHex(Crypto.sha2_256([0x61, 0x62, 0x63])) => "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" * @example * Crypto.sha2_256(textToBytes("Hello, World!")) => [223, 253, 96, 33, 187, 43, 213, 176, 175, 103, 98, 144, 128, 158, 195, 165, 49, 145, 221, 129, 199, 247, 10, 75, 40, 104, 138, 54, 33, 130, 152, 111] @@ -2730,7 +2730,7 @@ export class Crypto { dst.push(imod8(nBits >> 16)); dst.push(imod8(nBits >> 8)); dst.push(imod8(nBits >> 0)); - + return dst; } @@ -2761,16 +2761,16 @@ export class Crypto { * @type {number[]} - 8 uint32 number */ const hash = [ - 0x6a09e667, - 0xbb67ae85, - 0x3c6ef372, - 0xa54ff53a, - 0x510e527f, - 0x9b05688c, - 0x1f83d9ab, + 0x6a09e667, + 0xbb67ae85, + 0x3c6ef372, + 0xa54ff53a, + 0x510e527f, + 0x9b05688c, + 0x1f83d9ab, 0x5be0cd19, ]; - + /** * @param {number} x * @returns {number} @@ -2858,16 +2858,16 @@ export class Crypto { result.push(imod8(item >> 8)); result.push(imod8(item >> 0)); } - + return result; } /** * Calculates sha2-512 (64bytes) hash of a list of uint8 numbers. * Result is also a list of uint8 number. - * @example + * @example * bytesToHex(Crypto.sha2_512([0x61, 0x62, 0x63])) => "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" - * @example + * @example * bytesToHex(Crypto.sha2_512([])) => "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" * @package * @param {number[]} bytes - list of uint8 numbers @@ -2906,7 +2906,7 @@ export class Crypto { dst.push(imod8(nBits >> 16)); dst.push(imod8(nBits >> 8)); dst.push(imod8(nBits >> 0)); - + return dst; } @@ -2914,45 +2914,45 @@ export class Crypto { * @type {UInt64[]} - 80 uint64 numbers */ const k = [ - new UInt64(0x428a2f98, 0xd728ae22), new UInt64(0x71374491, 0x23ef65cd), + new UInt64(0x428a2f98, 0xd728ae22), new UInt64(0x71374491, 0x23ef65cd), new UInt64(0xb5c0fbcf, 0xec4d3b2f), new UInt64(0xe9b5dba5, 0x8189dbbc), - new UInt64(0x3956c25b, 0xf348b538), new UInt64(0x59f111f1, 0xb605d019), + new UInt64(0x3956c25b, 0xf348b538), new UInt64(0x59f111f1, 0xb605d019), new UInt64(0x923f82a4, 0xaf194f9b), new UInt64(0xab1c5ed5, 0xda6d8118), - new UInt64(0xd807aa98, 0xa3030242), new UInt64(0x12835b01, 0x45706fbe), + new UInt64(0xd807aa98, 0xa3030242), new UInt64(0x12835b01, 0x45706fbe), new UInt64(0x243185be, 0x4ee4b28c), new UInt64(0x550c7dc3, 0xd5ffb4e2), - new UInt64(0x72be5d74, 0xf27b896f), new UInt64(0x80deb1fe, 0x3b1696b1), + new UInt64(0x72be5d74, 0xf27b896f), new UInt64(0x80deb1fe, 0x3b1696b1), new UInt64(0x9bdc06a7, 0x25c71235), new UInt64(0xc19bf174, 0xcf692694), - new UInt64(0xe49b69c1, 0x9ef14ad2), new UInt64(0xefbe4786, 0x384f25e3), + new UInt64(0xe49b69c1, 0x9ef14ad2), new UInt64(0xefbe4786, 0x384f25e3), new UInt64(0x0fc19dc6, 0x8b8cd5b5), new UInt64(0x240ca1cc, 0x77ac9c65), - new UInt64(0x2de92c6f, 0x592b0275), new UInt64(0x4a7484aa, 0x6ea6e483), + new UInt64(0x2de92c6f, 0x592b0275), new UInt64(0x4a7484aa, 0x6ea6e483), new UInt64(0x5cb0a9dc, 0xbd41fbd4), new UInt64(0x76f988da, 0x831153b5), - new UInt64(0x983e5152, 0xee66dfab), new UInt64(0xa831c66d, 0x2db43210), + new UInt64(0x983e5152, 0xee66dfab), new UInt64(0xa831c66d, 0x2db43210), new UInt64(0xb00327c8, 0x98fb213f), new UInt64(0xbf597fc7, 0xbeef0ee4), - new UInt64(0xc6e00bf3, 0x3da88fc2), new UInt64(0xd5a79147, 0x930aa725), + new UInt64(0xc6e00bf3, 0x3da88fc2), new UInt64(0xd5a79147, 0x930aa725), new UInt64(0x06ca6351, 0xe003826f), new UInt64(0x14292967, 0x0a0e6e70), - new UInt64(0x27b70a85, 0x46d22ffc), new UInt64(0x2e1b2138, 0x5c26c926), + new UInt64(0x27b70a85, 0x46d22ffc), new UInt64(0x2e1b2138, 0x5c26c926), new UInt64(0x4d2c6dfc, 0x5ac42aed), new UInt64(0x53380d13, 0x9d95b3df), - new UInt64(0x650a7354, 0x8baf63de), new UInt64(0x766a0abb, 0x3c77b2a8), + new UInt64(0x650a7354, 0x8baf63de), new UInt64(0x766a0abb, 0x3c77b2a8), new UInt64(0x81c2c92e, 0x47edaee6), new UInt64(0x92722c85, 0x1482353b), - new UInt64(0xa2bfe8a1, 0x4cf10364), new UInt64(0xa81a664b, 0xbc423001), + new UInt64(0xa2bfe8a1, 0x4cf10364), new UInt64(0xa81a664b, 0xbc423001), new UInt64(0xc24b8b70, 0xd0f89791), new UInt64(0xc76c51a3, 0x0654be30), - new UInt64(0xd192e819, 0xd6ef5218), new UInt64(0xd6990624, 0x5565a910), + new UInt64(0xd192e819, 0xd6ef5218), new UInt64(0xd6990624, 0x5565a910), new UInt64(0xf40e3585, 0x5771202a), new UInt64(0x106aa070, 0x32bbd1b8), - new UInt64(0x19a4c116, 0xb8d2d0c8), new UInt64(0x1e376c08, 0x5141ab53), + new UInt64(0x19a4c116, 0xb8d2d0c8), new UInt64(0x1e376c08, 0x5141ab53), new UInt64(0x2748774c, 0xdf8eeb99), new UInt64(0x34b0bcb5, 0xe19b48a8), - new UInt64(0x391c0cb3, 0xc5c95a63), new UInt64(0x4ed8aa4a, 0xe3418acb), + new UInt64(0x391c0cb3, 0xc5c95a63), new UInt64(0x4ed8aa4a, 0xe3418acb), new UInt64(0x5b9cca4f, 0x7763e373), new UInt64(0x682e6ff3, 0xd6b2b8a3), - new UInt64(0x748f82ee, 0x5defb2fc), new UInt64(0x78a5636f, 0x43172f60), + new UInt64(0x748f82ee, 0x5defb2fc), new UInt64(0x78a5636f, 0x43172f60), new UInt64(0x84c87814, 0xa1f0ab72), new UInt64(0x8cc70208, 0x1a6439ec), - new UInt64(0x90befffa, 0x23631e28), new UInt64(0xa4506ceb, 0xde82bde9), + new UInt64(0x90befffa, 0x23631e28), new UInt64(0xa4506ceb, 0xde82bde9), new UInt64(0xbef9a3f7, 0xb2c67915), new UInt64(0xc67178f2, 0xe372532b), - new UInt64(0xca273ece, 0xea26619c), new UInt64(0xd186b8c7, 0x21c0c207), + new UInt64(0xca273ece, 0xea26619c), new UInt64(0xd186b8c7, 0x21c0c207), new UInt64(0xeada7dd6, 0xcde0eb1e), new UInt64(0xf57d4f7f, 0xee6ed178), - new UInt64(0x06f067aa, 0x72176fba), new UInt64(0x0a637dc5, 0xa2c898a6), + new UInt64(0x06f067aa, 0x72176fba), new UInt64(0x0a637dc5, 0xa2c898a6), new UInt64(0x113f9804, 0xbef90dae), new UInt64(0x1b710b35, 0x131c471b), - new UInt64(0x28db77f5, 0x23047d84), new UInt64(0x32caab7b, 0x40c72493), + new UInt64(0x28db77f5, 0x23047d84), new UInt64(0x32caab7b, 0x40c72493), new UInt64(0x3c9ebe0a, 0x15c9bebc), new UInt64(0x431d67c4, 0x9c100d4c), - new UInt64(0x4cc5d4be, 0xcb3e42b6), new UInt64(0x597f299c, 0xfc657e2a), + new UInt64(0x4cc5d4be, 0xcb3e42b6), new UInt64(0x597f299c, 0xfc657e2a), new UInt64(0x5fcb6fab, 0x3ad6faec), new UInt64(0x6c44198c, 0x4a475817), ]; @@ -2970,10 +2970,10 @@ export class Crypto { new UInt64(0x1f83d9ab, 0xfb41bd6b), new UInt64(0x5be0cd19, 0x137e2179), ]; - + /** * @param {UInt64} x - * @returns {UInt64} + * @returns {UInt64} */ function sigma0(x) { return x.rotr(1).xor(x.rotr(8)).xor(x.shiftr(7)); @@ -3052,7 +3052,7 @@ export class Crypto { result = result.concat(item.toBytes(false)); } - + return result; } @@ -3118,7 +3118,7 @@ export class Crypto { } assert(dst.length%RATE == 0); - + return dst; } @@ -3136,11 +3136,11 @@ export class Crypto { /** * Round constants used in the sha3 permute function - * @type {UInt64[]} + * @type {UInt64[]} */ const RC = [ - new UInt64(0x00000000, 0x00000001) , - new UInt64(0x00000000, 0x00008082) , + new UInt64(0x00000000, 0x00000001) , + new UInt64(0x00000000, 0x00008082) , new UInt64(0x80000000, 0x0000808a) , new UInt64(0x80000000, 0x80008000) , new UInt64(0x00000000, 0x0000808b) , @@ -3164,21 +3164,21 @@ export class Crypto { new UInt64(0x00000000, 0x80000001) , new UInt64(0x80000000, 0x80008008) , ]; - + /** - * @param {UInt64[]} s + * @param {UInt64[]} s */ - function permute(s) { + function permute(s) { /** * @type {UInt64[]} - */ + */ const c = new Array(5); /** * @type {UInt64[]} */ const b = new Array(25); - + for (let round = 0; round < 24; round++) { for (let i = 0; i < 5; i++) { c[i] = s[i].xor(s[i+5]).xor(s[i+10]).xor(s[i+15]).xor(s[i+20]); @@ -3193,7 +3193,7 @@ export class Crypto { for (let j = 0; j < 5; j++) { s[i+5*j] = s[i+5*j].xor(tmp); } - } + } b[0] = s[0]; @@ -3256,12 +3256,12 @@ export class Crypto { * Calculates blake2-256 (32 bytes) hash of a list of uint8 numbers. * Result is also a list of uint8 number. * Blake2b is a 64bit algorithm, so we need to be careful when replicating 64-bit operations with 2 32-bit numbers (low-word overflow must spill into high-word, and shifts must go over low/high boundary) - * @example + * @example * bytesToHex(Crypto.blake2b([0, 1])) => "01cf79da4945c370c68b265ef70641aaa65eaa8f5953e3900d97724c2c5aa095" * @example * bytesToHex(Crypto.blake2b(textToBytes("abc"), 64)) => "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923" * @package - * @param {number[]} bytes + * @param {number[]} bytes * @param {number} digestSize - 32 or 64 * @returns {number[]} */ @@ -3276,14 +3276,14 @@ export class Crypto { * Initialization vector */ const IV = [ - new UInt64(0x6a09e667, 0xf3bcc908), + new UInt64(0x6a09e667, 0xf3bcc908), new UInt64(0xbb67ae85, 0x84caa73b), - new UInt64(0x3c6ef372, 0xfe94f82b), + new UInt64(0x3c6ef372, 0xfe94f82b), new UInt64(0xa54ff53a, 0x5f1d36f1), new UInt64(0x510e527f, 0xade682d1), new UInt64(0x9b05688c, 0x2b3e6c1f), - new UInt64(0x1f83d9ab, 0xfb41bd6b), - new UInt64(0x5be0cd19, 0x137e2179), + new UInt64(0x1f83d9ab, 0xfb41bd6b), + new UInt64(0x5be0cd19, 0x137e2179), ]; const SIGMA = [ @@ -3312,7 +3312,7 @@ export class Crypto { for (let i = 0; i < nZeroes; i++) { dst.push(0); } - + return dst; } @@ -3363,7 +3363,7 @@ export class Crypto { for (let i = 0; i < 4; i++) { mix(v, chunk, i, i+4, i+8, i+12, s[i*2], s[i*2+1]); } - + for (let i = 0; i < 4; i++) { mix(v, chunk, i, (i+1)%4 + 4, (i+2)%4 + 8, (i+3)%4 + 12, s[8+i*2], s[8 + i*2 + 1]); } @@ -3371,21 +3371,21 @@ export class Crypto { for (let i = 0; i < 8; i++) { h[i] = h[i].xor(v[i].xor(v[i+8])); - } + } } - + const nBytes = bytes.length; bytes = pad(bytes); // init hash vector const h = IV.slice(); - + // setup the param block const paramBlock = new Uint8Array(64); paramBlock[0] = digestSize; // n output bytes - paramBlock[1] = 0; // key-length (always zero in our case) + paramBlock[1] = 0; // key-length (always zero in our case) paramBlock[2] = 1; // fanout paramBlock[3] = 1; // depth @@ -3397,7 +3397,7 @@ export class Crypto { paramBlockView.getUint32(i*8, true), )); } - + // loop all chunks for (let chunkStart = 0; chunkStart < bytes.length; chunkStart += WIDTH) { const chunkEnd = chunkStart + WIDTH; // exclusive @@ -3407,7 +3407,7 @@ export class Crypto { for (let i = 0; i < WIDTH; i += 8) { chunk64[i/8] = UInt64.fromBytes(chunk.slice(i, i+8)); } - + if (chunkStart == bytes.length - WIDTH) { // last block compress(h, chunk64, nBytes, true); @@ -3432,9 +3432,9 @@ export class Crypto { * * Crypto.Ed25519.derivePublicKey(privateKey) * * Crypto.Ed25519.sign(message, privateKey) * * Crypto.Ed25519.verify(message, signature, publicKey) - * + * * This is implementation is slow (~0.5s per verification), but should be good enough for simple client-side usage - * + * * Ported from: https://ed25519.cr.yp.to/python/ed25519.py * @package */ @@ -3444,7 +3444,7 @@ export class Crypto { const CURVE_ORDER = 7237005577332262213973186563042994240857116359379907606001950938285454250989n; // ipow2(252n) + 27742317777372353535851937790883648493n; const D = -4513249062541557337682894930092624173785641285191125241628941591882900924598840740n; // -121665n * invert(121666n); const I = 19681161376707505956807079304988542015446066515923890162744021073123829784752n; // expMod(2n, (Q - 1n)/4n, Q); - + /** * @type {[bigint, bigint]} */ @@ -3454,9 +3454,9 @@ export class Crypto { ]; /** - * @param {bigint} b - * @param {bigint} e - * @param {bigint} m + * @param {bigint} b + * @param {bigint} e + * @param {bigint} m * @returns {bigint} */ function expMod(b, e, m) { @@ -3475,7 +3475,7 @@ export class Crypto { } /** - * @param {bigint} n + * @param {bigint} n * @returns {bigint} */ function invert(n) { @@ -3504,7 +3504,7 @@ export class Crypto { } /** - * @param {bigint} y + * @param {bigint} y * @returns {bigint} */ function recoverX(y) { @@ -3521,13 +3521,13 @@ export class Crypto { } return x; - } + } /** * Curve point 'addition' * Note: this is probably the bottleneck of this Ed25519 implementation - * @param {[bigint, bigint]} a - * @param {[bigint, bigint]} b + * @param {[bigint, bigint]} a + * @param {[bigint, bigint]} b * @returns {[bigint, bigint]} */ function edwards(a, b) { @@ -3542,8 +3542,8 @@ export class Crypto { } /** - * @param {[bigint, bigint]} point - * @param {bigint} n + * @param {[bigint, bigint]} point + * @param {bigint} n * @returns {[bigint, bigint]} */ function scalarMul(point, n) { @@ -3562,12 +3562,12 @@ export class Crypto { /** * Curve point 'multiplication' - * @param {bigint} y + * @param {bigint} y * @returns {number[]} */ function encodeInt(y) { const bytes = bigIntToBytes(y).reverse(); - + while (bytes.length < 32) { bytes.push(0); } @@ -3576,7 +3576,7 @@ export class Crypto { } /** - * @param {number[]} s + * @param {number[]} s * @returns {bigint} */ function decodeInt(s) { @@ -3600,7 +3600,7 @@ export class Crypto { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @param {number} i - bit index * @returns {number} - 0 or 1 */ @@ -3621,7 +3621,7 @@ export class Crypto { } /** - * @param {number[]} s + * @param {number[]} s */ function decodePoint(s) { assert(s.length == 32); @@ -3650,7 +3650,7 @@ export class Crypto { /** * Couldn't think of a proper name for this function - * @param {number[]} h + * @param {number[]} h * @returns {bigint} */ function calca(h) { @@ -3665,7 +3665,7 @@ export class Crypto { } /** - * @param {number[]} m + * @param {number[]} m * @returns {bigint} */ function ihash(m) { @@ -3676,7 +3676,7 @@ export class Crypto { return { /** - * @param {number[]} privateKey + * @param {number[]} privateKey * @returns {number[]} */ derivePublicKey: function(privateKey) { @@ -3688,8 +3688,8 @@ export class Crypto { }, /** - * @param {number[]} message - * @param {number[]} privateKey + * @param {number[]} message + * @param {number[]} privateKey * @returns {number[]} */ sign: function(message, privateKey) { @@ -3707,16 +3707,16 @@ export class Crypto { }, /** - * @param {number[]} signature - * @param {number[]} message - * @param {number[]} publicKey + * @param {number[]} signature + * @param {number[]} message + * @param {number[]} publicKey * @returns {boolean} */ verify: function(signature, message, publicKey) { if (signature.length != 64) { throw new Error(`unexpected signature length ${signature.length}`); } - + if (publicKey.length != 32) { throw new Error(`unexpected publickey length ${publicKey.length}`); } @@ -4655,7 +4655,7 @@ export class IntData extends UplcData { } /** - * Returns string, not js object, because of unbounded integers + * Returns string, not old_js object, because of unbounded integers * @returns {string} */ toSchemaJson() { @@ -4770,7 +4770,7 @@ export class ByteArrayData extends UplcData { /** * Bytearray comparison, which can be used for sorting bytearrays * @example - * ByteArrayData.comp(hexToBytes("0101010101010101010101010101010101010101010101010101010101010101"), hexToBytes("0202020202020202020202020202020202020202020202020202020202020202")) => -1 + * ByteArrayData.comp(hexToBytes("0101010101010101010101010101010101010101010101010101010101010101"), hexToBytes("0202020202020202020202020202020202020202020202020202020202020202")) => -1 * @param {number[]} a * @param {number[]} b * @returns {number} - 0 -> equals, 1 -> gt, -1 -> lt @@ -5111,8 +5111,8 @@ export class HeliosData extends CborData { * Helios Int type */ export class Int extends HeliosData { - /** - * @type {bigint} + /** + * @type {bigint} */ #value; @@ -5245,14 +5245,14 @@ export class Duration extends Int { * Helios Bool type */ export class Bool extends HeliosData { - /** - * @type {boolean} + /** + * @type {boolean} */ #value; /** * @package - * @param {boolean | string} rawValue + * @param {boolean | string} rawValue * @returns {boolean} */ static cleanConstructorArg(rawValue) { @@ -5272,7 +5272,7 @@ export class Bool extends HeliosData { } /** - * @param {boolean | string} rawValue + * @param {boolean | string} rawValue */ constructor(rawValue) { super(); @@ -5283,7 +5283,7 @@ export class Bool extends HeliosData { get bool() { return this.#value; } - + /** * @package * @returns {UplcData} @@ -5292,7 +5292,7 @@ export class Bool extends HeliosData { return new ConstrData(this.#value ? 1 : 0, []); } - /** + /** * @param {UplcData} data * @returns {Bool} */ @@ -5309,7 +5309,7 @@ export class Bool extends HeliosData { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {Bool} */ static fromUplcCbor(bytes) { @@ -5328,7 +5328,7 @@ export class HeliosString extends HeliosData { #value; /** - * @param {string} value + * @param {string} value */ constructor(value) { super(); @@ -5349,7 +5349,7 @@ export class HeliosString extends HeliosData { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {HeliosString} */ static fromUplcData(data) { @@ -5357,7 +5357,7 @@ export class HeliosString extends HeliosData { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {HeliosString} */ static fromUplcCbor(bytes) { @@ -5376,7 +5376,7 @@ export class ByteArray extends HeliosData { /** * @package - * @param {string | number[]} rawValue + * @param {string | number[]} rawValue */ static cleanConstructorArg(rawValue) { if (Array.isArray(rawValue)) { @@ -5393,7 +5393,7 @@ export class ByteArray extends HeliosData { } /** - * @param {string | number[]} rawValue + * @param {string | number[]} rawValue */ constructor(rawValue) { super(); @@ -5424,7 +5424,7 @@ export class ByteArray extends HeliosData { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {ByteArray} */ static fromUplcData(data) { @@ -5453,13 +5453,13 @@ export function List(ItemClass) { const typeName = `[]${ItemClass.name}`; class List_ extends HeliosData { - /** - * @type {T[]} + /** + * @type {T[]} */ #items; /** - * @param {any[]} rawList + * @param {any[]} rawList */ constructor(rawList) { super(); @@ -5484,7 +5484,7 @@ export function List(ItemClass) { /** * Overload 'instanceof' operator * @package - * @param {any} other + * @param {any} other * @returns {boolean} */ static [Symbol.hasInstance](other) { @@ -5507,7 +5507,7 @@ export function List(ItemClass) { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {List_} */ static fromUplcData(data) { @@ -5515,7 +5515,7 @@ export function List(ItemClass) { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {List_} */ static fromUplcCbor(bytes) { @@ -5534,7 +5534,7 @@ export function List(ItemClass) { /** * @template {HeliosData} TKey * @template {HeliosData} TValue - * @param {HeliosDataClass} KeyClass + * @param {HeliosDataClass} KeyClass * @param {HeliosDataClass} ValueClass * @returns {HeliosDataClass} */ @@ -5542,7 +5542,7 @@ export function HeliosMap(KeyClass, ValueClass) { assert(!new.target, "HeliosMap can't be called with new"); assert(KeyClass.prototype instanceof HeliosData); assert(ValueClass.prototype instanceof HeliosData); - + const typeName = `Map[${KeyClass.name}]${ValueClass.name}`; class HeliosMap_ extends HeliosData { @@ -5648,7 +5648,7 @@ export function HeliosMap(KeyClass, ValueClass) { /** * Overload 'instanceof' operator * @package - * @param {any} other + * @param {any} other * @returns {boolean} */ static [Symbol.hasInstance](other) { @@ -5671,7 +5671,7 @@ export function HeliosMap(KeyClass, ValueClass) { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {HeliosMap_} */ static fromUplcData(data) { @@ -5679,7 +5679,7 @@ export function HeliosMap(KeyClass, ValueClass) { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {HeliosMap_} */ static fromUplcCbor(bytes) { @@ -5714,7 +5714,7 @@ export function Option(SomeClass) { /** * @package - * @param {?any} rawValue + * @param {?any} rawValue * @returns {?T} */ static cleanConstructorArg(rawValue) { @@ -5727,7 +5727,7 @@ export function Option(SomeClass) { } } - /** + /** * @param {?any} rawValue */ constructor(rawValue = null) { @@ -5747,7 +5747,7 @@ export function Option(SomeClass) { /** * Overload 'instanceof' operator * @package - * @param {any} other + * @param {any} other * @returns {boolean} */ static [Symbol.hasInstance](other) { @@ -5770,7 +5770,7 @@ export function Option(SomeClass) { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {Option_} */ static fromUplcData(data) { @@ -5814,7 +5814,7 @@ class Hash extends HeliosData { #bytes; /** - * @param {string | number[]} rawValue + * @param {string | number[]} rawValue * @returns {number[]} */ static cleanConstructorArg(rawValue) { @@ -5826,7 +5826,7 @@ class Hash extends HeliosData { } /** - * @param {number[]} bytes + * @param {number[]} bytes */ constructor(bytes) { super(); @@ -5863,7 +5863,7 @@ class Hash extends HeliosData { /** * Used internally for metadataHash and scriptDataHash - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Hash} */ static fromCbor(bytes) { @@ -5872,7 +5872,7 @@ class Hash extends HeliosData { /** * Might be needed for internal use - * @param {string} str + * @param {string} str * @returns {Hash} */ static fromHex(str) { @@ -5894,8 +5894,8 @@ class Hash extends HeliosData { } /** - * @param {Hash} a - * @param {Hash} b + * @param {Hash} a + * @param {Hash} b * @returns {number} */ static compare(a, b) { @@ -5915,7 +5915,7 @@ export class DatumHash extends Hash { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {DatumHash} */ static fromCbor(bytes) { @@ -5923,15 +5923,15 @@ export class DatumHash extends Hash { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {DatumHash} */ static fromUplcData(data) { return new DatumHash(data.bytes); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {DatumHash} */ static fromUplcCbor(bytes) { @@ -5939,7 +5939,7 @@ export class DatumHash extends Hash { } /** - * @param {string} str + * @param {string} str * @returns {DatumHash} */ static fromHex(str) { @@ -5948,9 +5948,9 @@ export class DatumHash extends Hash { } export class PubKeyHash extends Hash { - + /** - * @param {string | number[]} rawValue + * @param {string | number[]} rawValue */ constructor(rawValue) { const bytes = Hash.cleanConstructorArg(rawValue); @@ -5960,7 +5960,7 @@ export class PubKeyHash extends Hash { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {PubKeyHash} */ static fromCbor(bytes) { @@ -5968,15 +5968,15 @@ export class PubKeyHash extends Hash { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {PubKeyHash} */ static fromUplcData(data) { return new PubKeyHash(data.bytes); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {PubKeyHash} */ static fromUplcCbor(bytes) { @@ -5984,7 +5984,7 @@ export class PubKeyHash extends Hash { } /** - * @param {string} str + * @param {string} str * @returns {PubKeyHash} */ static fromHex(str) { @@ -6006,7 +6006,7 @@ export class ScriptHash extends Hash { export class MintingPolicyHash extends ScriptHash { /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {MintingPolicyHash} */ static fromCbor(bytes) { @@ -6014,15 +6014,15 @@ export class MintingPolicyHash extends ScriptHash { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {MintingPolicyHash} */ static fromUplcData(data) { return new MintingPolicyHash(data.bytes); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {MintingPolicyHash} */ static fromUplcCbor(bytes) { @@ -6030,7 +6030,7 @@ export class MintingPolicyHash extends ScriptHash { } /** - * @param {string} str + * @param {string} str * @returns {MintingPolicyHash} */ static fromHex(str) { @@ -6052,13 +6052,13 @@ export class StakeKeyHash extends Hash { */ constructor(rawValue) { const bytes = Hash.cleanConstructorArg(rawValue); - + assert(bytes.length == 28, `expected 28 bytes for StakeKeyHash, got ${bytes.length}`); super(bytes); } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {StakeKeyHash} */ static fromCbor(bytes) { @@ -6066,15 +6066,15 @@ export class StakeKeyHash extends Hash { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {StakeKeyHash} */ static fromUplcData(data) { return new StakeKeyHash(data.bytes); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {StakeKeyHash} */ static fromUplcCbor(bytes) { @@ -6082,7 +6082,7 @@ export class StakeKeyHash extends Hash { } /** - * @param {string} str + * @param {string} str * @returns {StakeKeyHash} */ static fromHex(str) { @@ -6092,7 +6092,7 @@ export class StakeKeyHash extends Hash { export class StakingValidatorHash extends ScriptHash { /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {StakingValidatorHash} */ static fromCbor(bytes) { @@ -6100,15 +6100,15 @@ export class StakingValidatorHash extends ScriptHash { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {StakingValidatorHash} */ static fromUplcData(data) { return new StakingValidatorHash(data.bytes); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {StakingValidatorHash} */ static fromUplcCbor(bytes) { @@ -6116,7 +6116,7 @@ export class StakingValidatorHash extends ScriptHash { } /** - * @param {string} str + * @param {string} str * @returns {StakingValidatorHash} */ static fromHex(str) { @@ -6126,7 +6126,7 @@ export class StakingValidatorHash extends ScriptHash { export class ValidatorHash extends ScriptHash { /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {ValidatorHash} */ static fromCbor(bytes) { @@ -6134,15 +6134,15 @@ export class ValidatorHash extends ScriptHash { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {ValidatorHash} */ static fromUplcData(data) { return new ValidatorHash(data.bytes); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {ValidatorHash} */ static fromUplcCbor(bytes) { @@ -6150,7 +6150,7 @@ export class ValidatorHash extends ScriptHash { } /** - * @param {string} str + * @param {string} str * @returns {ValidatorHash} */ static fromHex(str) { @@ -6163,7 +6163,7 @@ export class ValidatorHash extends ScriptHash { */ export class TxId extends Hash { /** - * @param {string | number[]} rawValue + * @param {string | number[]} rawValue */ constructor(rawValue) { const bytes = Hash.cleanConstructorArg(rawValue); @@ -6180,7 +6180,7 @@ export class TxId extends Hash { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {TxId} */ static fromCbor(bytes) { @@ -6199,7 +6199,7 @@ export class TxId extends Hash { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {TxId} */ static fromUplcCbor(bytes) { @@ -6207,7 +6207,7 @@ export class TxId extends Hash { } /** - * @param {string} str + * @param {string} str * @returns {TxId} */ static fromHex(str) { @@ -6299,7 +6299,7 @@ export class TxOutputId extends HeliosData { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {TxOutputId} */ static fromUplcCbor(bytes) { @@ -6392,8 +6392,8 @@ export class Address extends HeliosData { } /** - * @param {PubKeyHash | ValidatorHash} hash - * @param {?(StakeKeyHash | StakingValidatorHash)} stakingHash + * @param {PubKeyHash | ValidatorHash} hash + * @param {?(StakeKeyHash | StakingValidatorHash)} stakingHash * @param {boolean} isTestnet * @returns {Address} */ @@ -6488,7 +6488,7 @@ export class Address extends HeliosData { } /** - * + * * @private * @returns {ConstrData} */ @@ -6552,14 +6552,14 @@ export class Address extends HeliosData { } /** - * @param {UplcData} data + * @param {UplcData} data * @param {boolean} isTestnet * @returns {Address} */ static fromUplcData(data, isTestnet = IS_TESTNET) { assert(data.index == 0); assert(data.fields.length == 2); - + const credData = data.fields[0]; const stakData = data.fields[1]; @@ -6608,7 +6608,7 @@ export class Address extends HeliosData { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @param {boolean} isTestnet * @returns {Address} */ @@ -6649,7 +6649,7 @@ export class Address extends HeliosData { let type = this.#bytes[0] >> 4; let bytes = this.#bytes.slice(29); - + if (type == 0 || type == 1) { assert(bytes.length == 28); @@ -6684,7 +6684,7 @@ export class Assets extends CborData { #assets; /** - * @param {[MintingPolicyHash | number[] | string, [number[] | string, bigint | number][]][]} assets + * @param {[MintingPolicyHash | number[] | string, [number[] | string, bigint | number][]][]} assets */ constructor(assets = []) { super(); @@ -6714,7 +6714,7 @@ export class Assets extends CborData { */ get nTokenTypes() { let count = 0; - + this.#assets.forEach(([mph, tokens]) => { tokens.forEach(([tokenName, _]) => { count += 1 @@ -6733,7 +6733,7 @@ export class Assets extends CborData { /** * @param {MintingPolicyHash} mph - * @param {number[]} tokenName + * @param {number[]} tokenName * @returns {boolean} */ has(mph, tokenName) { @@ -6748,7 +6748,7 @@ export class Assets extends CborData { /** * @param {MintingPolicyHash} mph - * @param {number[]} tokenName + * @param {number[]} tokenName * @returns {bigint} */ get(mph, tokenName) { @@ -6781,7 +6781,7 @@ export class Assets extends CborData { /** * Mutates 'this' * @param {MintingPolicyHash} mph - * @param {number[]} tokenName + * @param {number[]} tokenName * @param {bigint} quantity */ addComponent(mph, tokenName, quantity) { @@ -6807,8 +6807,8 @@ export class Assets extends CborData { } /** - * @param {Assets} other - * @param {(a: bigint, b: bigint) => bigint} op + * @param {Assets} other + * @param {(a: bigint, b: bigint) => bigint} op * @returns {Assets} */ applyBinOp(other, op) { @@ -6830,7 +6830,7 @@ export class Assets extends CborData { } /** - * @param {Assets} other + * @param {Assets} other * @returns {Assets} */ add(other) { @@ -6838,7 +6838,7 @@ export class Assets extends CborData { } /** - * @param {Assets} other + * @param {Assets} other * @returns {Assets} */ sub(other) { @@ -6878,7 +6878,7 @@ export class Assets extends CborData { } /** - * @param {Assets} other + * @param {Assets} other * @returns {boolean} */ eq(other) { @@ -6903,7 +6903,7 @@ export class Assets extends CborData { /** * Strict gt, if other contains assets this one doesn't contain => return false - * @param {Assets} other + * @param {Assets} other * @returns {boolean} */ gt(other) { @@ -6931,7 +6931,7 @@ export class Assets extends CborData { } /** - * @param {Assets} other + * @param {Assets} other * @returns {boolean} */ ge(other) { @@ -7015,7 +7015,7 @@ export class Assets extends CborData { * @type {[number[], bigint][]} */ let innerMap = []; - + CborData.decodeMap(pairBytes, innerPairBytes => { innerMap.push([ CborData.decodeBytes(innerPairBytes), @@ -7103,10 +7103,10 @@ export class Value extends HeliosData { /** @type {Assets} */ #assets; - + /** - * @param {bigint} lovelace - * @param {Assets} assets + * @param {bigint} lovelace + * @param {Assets} assets */ constructor(lovelace = 0n, assets = new Assets()) { super(); @@ -7115,9 +7115,9 @@ export class Value extends HeliosData { } /** - * @param {MintingPolicyHash} mph - * @param {number[]} tokenName - * @param {bigint} quantity + * @param {MintingPolicyHash} mph + * @param {number[]} tokenName + * @param {bigint} quantity * @returns {Value} */ static asset(mph, tokenName, quantity) { @@ -7166,7 +7166,7 @@ export class Value extends HeliosData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Value} */ static fromCbor(bytes) { @@ -7193,7 +7193,7 @@ export class Value extends HeliosData { } /** - * @param {Value[]} values + * @param {Value[]} values * @returns {Value} */ static sum(values) { @@ -7205,9 +7205,9 @@ export class Value extends HeliosData { return s; } - + /** - * @param {Value} other + * @param {Value} other * @returns {Value} */ add(other) { @@ -7215,7 +7215,7 @@ export class Value extends HeliosData { } /** - * @param {Value} other + * @param {Value} other * @returns {Value} */ sub(other) { @@ -7223,7 +7223,7 @@ export class Value extends HeliosData { } /** - * @param {Value} other + * @param {Value} other * @returns {boolean} */ eq(other) { @@ -7231,8 +7231,8 @@ export class Value extends HeliosData { } /** - * Strictly greater than. Returns false if any asset is missing - * @param {Value} other + * Strictly greater than. Returns false if any asset is missing + * @param {Value} other * @returns {boolean} */ gt(other) { @@ -7240,8 +7240,8 @@ export class Value extends HeliosData { } /** - * Strictly >= - * @param {Value} other + * Strictly >= + * @param {Value} other * @returns {boolean} */ ge(other) { @@ -7280,7 +7280,7 @@ export class Value extends HeliosData { let map = this.#assets._toUplcData(); if (this.#lovelace != 0n || isInScriptContext) { - let inner = map.map; + let inner = map.map; inner.unshift([ new ByteArrayData([]), @@ -7313,7 +7313,7 @@ export class Value extends HeliosData { if (mphBytes.length == 0) { //lovelace - assert(innerMap.length == 1 && innerMap[0][0].bytes.length == 0); + assert(innerMap.length == 1 && innerMap[0][0].bytes.length == 0); sum = sum.add(new Value(innerMap[0][1].int)); } else { // other assets @@ -7332,7 +7332,7 @@ export class Value extends HeliosData { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {Value} */ static fromUplcCbor(bytes) { @@ -7358,12 +7358,12 @@ export class NetworkParams { #raw; /** - * @param {Object} raw + * @param {Object} raw */ constructor(raw) { this.#raw = raw; } - + /** * @package * @type {Object} @@ -7374,7 +7374,7 @@ export class NetworkParams { /** * @package - * @param {string} key + * @param {string} key * @returns {number} */ getCostModelParameter(key) { @@ -7383,7 +7383,7 @@ export class NetworkParams { /** * @package - * @param {string} name + * @param {string} name * @returns {Cost} */ getTermCost(name) { @@ -7481,7 +7481,7 @@ export class NetworkParams { assertNumber(this.#raw?.latestParams?.executionUnitPrices?.priceSteps), ]; } - + /** * @package * @type {number[]} @@ -7604,7 +7604,7 @@ class CostModel { } /** - * @param {number[]} args + * @param {number[]} args * @returns {bigint} */ calc(args) { @@ -7635,7 +7635,7 @@ class ConstCost extends CostModel { } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {ConstCost} */ @@ -7681,7 +7681,7 @@ class LinearCost extends CostModel { } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {[bigint, bigint]} */ @@ -7742,15 +7742,15 @@ class ArgSizeCost extends LinearCost { */ class Arg0SizeCost extends ArgSizeCost { /** - * @param {bigint} a - * @param {bigint} b + * @param {bigint} a + * @param {bigint} b */ constructor(a, b) { super(a, b, 0); } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {Arg0SizeCost} */ @@ -7767,15 +7767,15 @@ class Arg0SizeCost extends ArgSizeCost { */ class Arg1SizeCost extends ArgSizeCost { /** - * @param {bigint} a - * @param {bigint} b + * @param {bigint} a + * @param {bigint} b */ constructor(a, b) { super(a, b, 1); } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {Arg1SizeCost} */ @@ -7792,15 +7792,15 @@ class Arg1SizeCost extends ArgSizeCost { */ class Arg2SizeCost extends ArgSizeCost { /** - * @param {bigint} a - * @param {bigint} b + * @param {bigint} a + * @param {bigint} b */ constructor(a, b) { super(a, b, 2); } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {Arg2SizeCost} */ @@ -7824,7 +7824,7 @@ class MinArgSizeCost extends LinearCost { super(a, b); } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {MaxArgSizeCost} */ @@ -7857,7 +7857,7 @@ class MaxArgSizeCost extends LinearCost { } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {MaxArgSizeCost} */ @@ -7890,7 +7890,7 @@ class SumArgSizesCost extends LinearCost { } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {MaxArgSizeCost} */ @@ -7917,7 +7917,7 @@ class SumArgSizesCost extends LinearCost { /** * cost = a + b*max(size(arg0)-size(arg1), min) - * (only for Uplc functions with two arguments) + * (only for Uplc functions with two arguments) * @package */ class ArgSizeDiffCost extends LinearCost { @@ -7933,7 +7933,7 @@ class ArgSizeDiffCost extends LinearCost { this.#min = min } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {ArgSizeDiffCost} */ @@ -7982,7 +7982,7 @@ class ArgSizeProdCost extends LinearCost { } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {MaxArgSizeCost} */ @@ -7999,7 +7999,7 @@ class ArgSizeProdCost extends LinearCost { */ calc(args) { assert(args.length == 2); - + const [x, y] = args; if (x > y) { @@ -8035,7 +8035,7 @@ class ArgSizeDiagCost extends LinearCost { this.#constant = constant; } /** - * @param {NetworkParams} params + * @param {NetworkParams} params * @param {string} baseName - eg. addInteger-cpu-arguments * @returns {ArgSizeDiagCost} */ @@ -8047,7 +8047,7 @@ class ArgSizeDiagCost extends LinearCost { } /** - * @param {number[]} args + * @param {number[]} args * @returns {bigint} */ calc(args) { @@ -8090,10 +8090,10 @@ class ArgSizeDiagCost extends LinearCost { #cpuCostModelClass; /** - * @param {string} name + * @param {string} name * @param {number} forceCount - number of type parameters of a Plutus-core builtin function (0, 1 or 2) - * @param {CostModelClass} memCostModelClass - * @param {CostModelClass} cpuCostModelClass + * @param {CostModelClass} memCostModelClass + * @param {CostModelClass} cpuCostModelClass */ constructor(name, forceCount, memCostModelClass, cpuCostModelClass) { this.#name = name; @@ -8150,10 +8150,10 @@ class ArgSizeDiagCost extends LinearCost { } } -/** +/** * A list of all PlutusScript builins, with associated costmodels (actual costmodel parameters are loaded from NetworkParams during runtime) * @package - * @type {UplcBuiltinConfig[]} + * @type {UplcBuiltinConfig[]} */ const UPLC_BUILTINS = ( /** @@ -8162,8 +8162,8 @@ const UPLC_BUILTINS = ( function () { /** * Constructs a builtinInfo object - * @param {string} name - * @param {number} forceCount + * @param {string} name + * @param {number} forceCount * @param {CostModelClass} memCostModel * @param {CostModelClass} cpuCostModel * @returns {UplcBuiltinConfig} @@ -8178,7 +8178,7 @@ const UPLC_BUILTINS = ( builtinConfig("subtractInteger", 0, MaxArgSizeCost, MaxArgSizeCost), builtinConfig("multiplyInteger", 0, SumArgSizesCost, SumArgSizesCost), builtinConfig("divideInteger", 0, ArgSizeDiffCost, ArgSizeProdCost), - builtinConfig("quotientInteger", 0, ArgSizeDiffCost, ArgSizeProdCost), + builtinConfig("quotientInteger", 0, ArgSizeDiffCost, ArgSizeProdCost), builtinConfig("remainderInteger", 0, ArgSizeDiffCost, ArgSizeProdCost), builtinConfig("modInteger", 0, ArgSizeDiffCost, ArgSizeProdCost), builtinConfig("equalsInteger", 0, ConstCost, MinArgSizeCost), @@ -8246,8 +8246,8 @@ function dumpCostModels(networkParams) { /** * Returns index of a named builtin * Throws an error if builtin doesn't exist - * @param {string} name - * @returns + * @param {string} name + * @returns */ export function findUplcBuiltin(name) { let i = UPLC_BUILTINS.findIndex(info => { return "__core__" + info.name == name }); @@ -8257,7 +8257,7 @@ export function findUplcBuiltin(name) { /** * Checks if a named builtin exists - * @param {string} name + * @param {string} name * @param {boolean} strict - if true then throws an error if builtin doesn't exist * @returns {boolean} */ @@ -8313,14 +8313,14 @@ function getPurposeName(id) { } -/** +/** * a UplcValue is passed around by Plutus-core expressions. */ export class UplcValue { #site; /** - * @param {Site} site + * @param {Site} site */ constructor(site) { assert(site != undefined && (site instanceof Site)); @@ -8330,7 +8330,7 @@ export class UplcValue { /** * Return a copy of the UplcValue at a different Site. * @package - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcValue} */ copy(newSite) { @@ -8365,8 +8365,8 @@ export class UplcValue { /** * Throws an error because most values can't be called (overridden by UplcAnon) * @package - * @param {UplcRte | UplcStack} rte - * @param {Site} site + * @param {UplcRte | UplcStack} rte + * @param {Site} site * @param {UplcValue} value * @returns {Promise} */ @@ -8376,7 +8376,7 @@ export class UplcValue { /** * @package - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -8403,7 +8403,7 @@ export class UplcValue { get string() { throw this.site.typeError(`expected a Plutus-core string, got '${this.toString()}'`); } - + /** * @type {boolean} */ @@ -8517,7 +8517,7 @@ export class UplcValue { */ toFlatValue(bitWriter) { bitWriter.write('1' + this.typeBits() + '0'); - + this.toFlatValueInternal(bitWriter); } } @@ -8526,7 +8526,7 @@ export class UplcType { #typeBits; /** - * @param {string} typeBits + * @param {string} typeBits */ constructor(typeBits) { this.#typeBits = typeBits; @@ -8540,7 +8540,7 @@ export class UplcType { } /** - * @param {UplcValue} value + * @param {UplcValue} value * @returns {boolean} */ isSameType(value) { @@ -8619,7 +8619,7 @@ class UplcRte { */ /** - * @param {UplcRTECallbacks} callbacks + * @param {UplcRTECallbacks} callbacks * @param {?NetworkParams} networkParams */ constructor(callbacks = DEFAULT_UPLC_RTE_CALLBACKS, networkParams = null) { @@ -8633,7 +8633,7 @@ class UplcRte { /** * @param {string} name - for breakdown * @param {boolean} isTerm - * @param {Cost} cost + * @param {Cost} cost */ incrCost(name, isTerm, cost) { if (cost.mem <= 0n || cost.cpu <= 0n) { @@ -8707,7 +8707,7 @@ class UplcRte { /** * Gets variable using Debruijn index. Throws error here because UplcRTE is the stack root and doesn't contain any values. - * @param {number} i + * @param {number} i * @returns {UplcValue} */ get(i) { @@ -8716,8 +8716,8 @@ class UplcRte { /** * Creates a child stack. - * @param {UplcValue} value - * @param {?string} valueName + * @param {UplcValue} value + * @param {?string} valueName * @returns {UplcStack} */ push(value, valueName = null) { @@ -8726,7 +8726,7 @@ class UplcRte { /** * Calls the print callback (or does nothing if print callback isn't defined) - * @param {string} msg + * @param {string} msg * @returns {Promise} */ async print(msg) { @@ -8737,8 +8737,8 @@ class UplcRte { /** * Calls the onStartCall callback. - * @param {Site} site - * @param {UplcRawStack} rawStack + * @param {Site} site + * @param {UplcRawStack} rawStack * @returns {Promise} */ async startCall(site, rawStack) { @@ -8754,9 +8754,9 @@ class UplcRte { /** * Calls the onEndCall callback if '#notifyCalls == true'. * '#notifyCalls' is set to true if 'rawStack == #marker'. - * @param {Site} site - * @param {UplcRawStack} rawStack - * @param {UplcValue} result + * @param {Site} site + * @param {UplcRawStack} rawStack + * @param {UplcValue} result * @returns {Promise} */ async endCall(site, rawStack, result) { @@ -8816,7 +8816,7 @@ class UplcStack { this.#parent.incrLambdaCost() } } - + incrDelayCost() { if (this.#parent !== null) { this.#parent.incrDelayCost(); @@ -8860,7 +8860,7 @@ class UplcStack { /** * Gets a value using the Debruijn index. If 'i == 1' then the current value is returned. * Otherwise 'i' is decrement and passed to the parent stack. - * @param {number} i + * @param {number} i * @returns {UplcValue} */ get(i) { @@ -8884,8 +8884,8 @@ class UplcStack { /** * Instantiates a child stack. - * @param {UplcValue} value - * @param {?string} valueName + * @param {UplcValue} value + * @param {?string} valueName * @returns {UplcStack} */ push(value, valueName = null) { @@ -8894,7 +8894,7 @@ class UplcStack { /** * Calls the onPrint callback in the RTE (root of stack). - * @param {string} msg + * @param {string} msg * @returns {Promise} */ async print(msg) { @@ -8905,8 +8905,8 @@ class UplcStack { /** * Calls the onStartCall callback in the RTE (root of stack). - * @param {Site} site - * @param {UplcRawStack} rawStack + * @param {Site} site + * @param {UplcRawStack} rawStack * @returns {Promise} */ async startCall(site, rawStack) { @@ -8915,7 +8915,7 @@ class UplcStack { } } - /** + /** * Calls the onEndCall callback in the RTE (root of stack). * @param {Site} site * @param {UplcRawStack} rawStack @@ -8928,7 +8928,7 @@ class UplcStack { } } - /** + /** * @returns {UplcRawStack} */ toList() { @@ -8967,13 +8967,13 @@ class UplcAnon extends UplcValue { #callSite; /** - * - * @param {Site} site - * @param {UplcRte | UplcStack} rte + * + * @param {Site} site + * @param {UplcRte | UplcStack} rte * @param {string[] | number} args - args can be list of argNames (for debugging), or the number of args - * @param {UplcAnonCallback} fn - * @param {number} argCount - * @param {?Site} callSite + * @param {UplcAnonCallback} fn + * @param {number} argCount + * @param {?Site} callSite */ constructor(site, rte, args, fn, argCount = 0, callSite = null) { super(site); @@ -9008,7 +9008,7 @@ class UplcAnon extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcAnon} */ copy(newSite) { @@ -9033,9 +9033,9 @@ class UplcAnon extends UplcValue { } /** - * @param {UplcRte | UplcStack} rte - * @param {Site} site - * @param {UplcValue} value + * @param {UplcRte | UplcStack} rte + * @param {Site} site + * @param {UplcValue} value * @returns {Promise} */ async call(rte, site, value) { @@ -9067,10 +9067,10 @@ class UplcAnon extends UplcValue { if (result instanceof Promise) { result = await result; } - + // the same rawStack object can be used as a marker for 'Step-Over' in the debugger await this.#rte.endCall(callSite, rawStack, result); - + return result.copy(callSite); } catch(e) { // TODO: better trace @@ -9136,7 +9136,7 @@ class UplcDelayedValue extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcValue} */ copy(newSite) { @@ -9201,7 +9201,7 @@ export class UplcInt extends UplcValue { /** * Constructs a UplcInt without requiring a Site * @param {bigint | number} value - * @returns {UplcInt} + * @returns {UplcInt} */ static new(value) { if (typeof value == 'number') { @@ -9218,9 +9218,9 @@ export class UplcInt extends UplcValue { /** * Creates a UplcInt wrapped in a UplcConst, so it can be used a term - * @param {Site} site - * @param {bigint} value - * @returns + * @param {Site} site + * @param {bigint} value + * @returns */ static newSignedTerm(site, value) { return new UplcConst(new UplcInt(site, value, true)); @@ -9234,7 +9234,7 @@ export class UplcInt extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcInt} */ copy(newSite) { @@ -9250,7 +9250,7 @@ export class UplcInt extends UplcValue { /** * Parses a single byte in the Plutus-core byte-list representation of an int - * @param {number} b + * @param {number} b * @returns {number} */ static parseRawByte(b) { @@ -9259,7 +9259,7 @@ export class UplcInt extends UplcValue { /** * Returns true if 'b' is the last byte in the Plutus-core byte-list representation of an int. - * @param {number} b + * @param {number} b * @returns {boolean} */ static rawByteIsLast(b) { @@ -9268,7 +9268,7 @@ export class UplcInt extends UplcValue { /** * Combines a list of Plutus-core bytes into a bigint (leading bit of each byte is ignored). - * Differs from bytesToBigInt in utils.js because only 7 bits are used from each byte. + * Differs from bytesToBigInt in utils.old_js because only 7 bits are used from each byte. * @param {number[]} bytes * @returns {bigint} */ @@ -9313,8 +9313,8 @@ export class UplcInt extends UplcValue { } } - /** - * Unapplies zigzag encoding + /** + * Unapplies zigzag encoding * @example * (new UplcInt(Site.dummy(), 1n, false)).toSigned().int => -1n * @returns {UplcInt} @@ -9368,7 +9368,7 @@ export class UplcInt extends UplcValue { * Encodes unsigned integer with plutus flat encoding. * Throws error if signed. * Used by encoding plutus core program version and debruijn indices. - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlatUnsigned(bitWriter) { assert(!this.#signed); @@ -9384,7 +9384,7 @@ export class UplcInt extends UplcValue { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlatValueInternal(bitWriter) { assert(this.#signed); @@ -9415,7 +9415,7 @@ export class UplcByteArray extends UplcValue { /** * Construct a UplcByteArray without requiring a Site - * @param {number[]} bytes + * @param {number[]} bytes * @returns {UplcByteArray} */ static new(bytes) { @@ -9424,9 +9424,9 @@ export class UplcByteArray extends UplcValue { /** * Creates new UplcByteArray wrapped in UplcConst so it can be used as a term. - * @param {Site} site - * @param {number[]} bytes - * @returns + * @param {Site} site + * @param {number[]} bytes + * @returns */ static newTerm(site, bytes) { return new UplcConst(new UplcByteArray(site, bytes)); @@ -9440,7 +9440,7 @@ export class UplcByteArray extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcByteArray} */ copy(newSite) { @@ -9480,8 +9480,8 @@ export class UplcByteArray extends UplcValue { * Write a list of bytes to the bitWriter using flat encoding. * Used by UplcString, UplcByteArray and UplcDataValue * Equivalent to E_B* function in Plutus-core docs - * @param {BitWriter} bitWriter - * @param {number[]} bytes + * @param {BitWriter} bitWriter + * @param {number[]} bytes */ static writeBytes(bitWriter, bytes) { bitWriter.padToByteBoundary(true); @@ -9520,8 +9520,8 @@ export class UplcString extends UplcValue { #value; /** - * @param {Site} site - * @param {string} value + * @param {Site} site + * @param {string} value */ constructor(site, value) { super(site); @@ -9530,7 +9530,7 @@ export class UplcString extends UplcValue { /** * Constructs a UplcStrin without requiring a Site - * @param {string} value + * @param {string} value * @returns {UplcString} */ static new(value) { @@ -9539,8 +9539,8 @@ export class UplcString extends UplcValue { /** * Creates a new UplcString wrapped with UplcConst so it can be used as a term. - * @param {Site} site - * @param {string} value + * @param {Site} site + * @param {string} value * @returns {UplcConst} */ static newTerm(site, value) { @@ -9555,7 +9555,7 @@ export class UplcString extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcString} */ copy(newSite) { @@ -9598,7 +9598,7 @@ export class UplcString extends UplcValue { */ export class UplcUnit extends UplcValue { /** - * @param {Site} site + * @param {Site} site */ constructor(site) { super(site); @@ -9614,7 +9614,7 @@ export class UplcUnit extends UplcValue { /** * Creates a new UplcUnit wrapped with UplcConst so it can be used as a term - * @param {Site} site + * @param {Site} site * @returns {UplcConst} */ static newTerm(site) { @@ -9629,7 +9629,7 @@ export class UplcUnit extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcUnit} */ copy(newSite) { @@ -9668,8 +9668,8 @@ export class UplcBool extends UplcValue { #value; /** - * @param {Site} site - * @param {boolean} value + * @param {Site} site + * @param {boolean} value */ constructor(site, value) { super(site); @@ -9678,7 +9678,7 @@ export class UplcBool extends UplcValue { /** * Constructs a UplcBool without requiring a Site - * @param {boolean} value + * @param {boolean} value * @returns {UplcBool} */ static new(value) { @@ -9687,8 +9687,8 @@ export class UplcBool extends UplcValue { /** * Creates a new UplcBool wrapped with UplcConst so it can be used as a term. - * @param {Site} site - * @param {boolean} value + * @param {Site} site + * @param {boolean} value * @returns {UplcConst} */ static newTerm(site, value) { @@ -9703,7 +9703,7 @@ export class UplcBool extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcBool} */ copy(newSite) { @@ -9771,8 +9771,8 @@ export class UplcPair extends UplcValue { /** * Constructs a UplcPair without requiring a Site - * @param {UplcValue} first - * @param {UplcValue} second + * @param {UplcValue} first + * @param {UplcValue} second * @returns {UplcPair} */ static new(first, second) { @@ -9781,7 +9781,7 @@ export class UplcPair extends UplcValue { /** * Creates a new UplcBool wrapped with UplcConst so it can be used as a term. - * @param {Site} site + * @param {Site} site * @param {UplcValue} first * @param {UplcValue} second * @returns {UplcConst} @@ -9798,7 +9798,7 @@ export class UplcPair extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcPair} */ copy(newSite) { @@ -9864,7 +9864,7 @@ export class UplcPair extends UplcValue { } } -/** +/** * Plutus-core list value class. * Only used during evaluation. */ @@ -9873,9 +9873,9 @@ export class UplcList extends UplcValue { #items; /** - * @param {Site} site - * @param {UplcType} itemType - * @param {UplcValue[]} items + * @param {Site} site + * @param {UplcType} itemType + * @param {UplcValue[]} items */ constructor(site, itemType, items) { super(site); @@ -9885,8 +9885,8 @@ export class UplcList extends UplcValue { /** * Constructs a UplcList without requiring a Site - * @param {UplcType} type - * @param {UplcValue[]} items + * @param {UplcType} type + * @param {UplcValue[]} items */ static new(type, items) { return new UplcList(Site.dummy(), type, items); @@ -9954,7 +9954,7 @@ export class UplcList extends UplcValue { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlatValueInternal(bitWriter) { for (let item of this.#items) { @@ -9974,8 +9974,8 @@ export class UplcDataValue extends UplcValue { #data; /** - * @param {Site} site - * @param {UplcData} data + * @param {Site} site + * @param {UplcData} data */ constructor(site, data) { super(site); @@ -9991,7 +9991,7 @@ export class UplcDataValue extends UplcValue { } /** - * @param {Site} newSite + * @param {Site} newSite * @returns {UplcDataValue} */ copy(newSite) { @@ -10034,7 +10034,7 @@ export class UplcDataValue extends UplcValue { } /** - * @param {UplcDataValue | UplcData} data + * @param {UplcDataValue | UplcData} data * @returns {UplcData} */ static unwrap(data) { @@ -10081,7 +10081,7 @@ class UplcTerm { /** * Calculates a value, and also increments the cost - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -10090,7 +10090,7 @@ class UplcTerm { /** * Writes bits of flat encoded Plutus-core terms to bitWriter. Doesn't return anything. - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { throw new Error("not yet implemented"); @@ -10105,8 +10105,8 @@ class UplcVariable extends UplcTerm { #index; /** - * @param {Site} site - * @param {UplcInt} index + * @param {Site} site + * @param {UplcInt} index */ constructor(site, index) { super(site, 0); @@ -10121,7 +10121,7 @@ class UplcVariable extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0000'); @@ -10148,8 +10148,8 @@ class UplcDelay extends UplcTerm { #expr; /** - * @param {Site} site - * @param {UplcTerm} expr + * @param {Site} site + * @param {UplcTerm} expr */ constructor(site, expr) { super(site, 1); @@ -10157,14 +10157,14 @@ class UplcDelay extends UplcTerm { } /** - * @returns {string} + * @returns {string} */ toString() { return `(delay ${this.#expr.toString()})`; } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0001'); @@ -10172,7 +10172,7 @@ class UplcDelay extends UplcTerm { } /** - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -10210,7 +10210,7 @@ class UplcLambda extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0010'); @@ -10218,7 +10218,7 @@ class UplcLambda extends UplcTerm { } /** - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -10257,7 +10257,7 @@ class UplcCall extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0011'); @@ -10266,8 +10266,8 @@ class UplcCall extends UplcTerm { } /** - * @param {UplcRte | UplcStack} rte - * @returns + * @param {UplcRte | UplcStack} rte + * @returns */ async eval(rte) { rte.incrCallCost(); @@ -10287,7 +10287,7 @@ class UplcConst extends UplcTerm { #value; /** - * @param {UplcValue} value + * @param {UplcValue} value */ constructor(value) { super(value.site, 4); @@ -10314,7 +10314,7 @@ class UplcConst extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0100'); @@ -10322,7 +10322,7 @@ class UplcConst extends UplcTerm { } /** - * @param {UplcStack | UplcRte} rte + * @param {UplcStack | UplcRte} rte * @returns {Promise} */ async eval(rte) { @@ -10356,7 +10356,7 @@ class UplcForce extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0101'); @@ -10364,7 +10364,7 @@ class UplcForce extends UplcTerm { } /** - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -10383,8 +10383,8 @@ class UplcError extends UplcTerm { #msg; /** - * @param {Site} site - * @param {string} msg + * @param {Site} site + * @param {string} msg */ constructor(site, msg = "") { super(site, 6); @@ -10399,7 +10399,7 @@ class UplcError extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0110'); @@ -10407,7 +10407,7 @@ class UplcError extends UplcTerm { /** * Throws a RuntimeError when evaluated. - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -10424,8 +10424,8 @@ class UplcBuiltin extends UplcTerm { #name; /** - * @param {Site} site - * @param {string | number} name + * @param {Site} site + * @param {string | number} name */ constructor(site, name) { super(site, 7); @@ -10451,7 +10451,7 @@ class UplcBuiltin extends UplcTerm { } /** - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { bitWriter.write('0111'); @@ -10696,7 +10696,7 @@ class UplcBuiltin extends UplcTerm { return new UplcAnon(this.site, rte, 1, (callSite, _, a) => { rte.calcAndIncrCost(this, a); - return new UplcByteArray(callSite, Crypto.blake2b(a.bytes)); + return new UplcByteArray(callSite, Crypto.blake2b(a.bytes)); }); case "verifyEd25519Signature": return new UplcAnon(this.site, rte, 3, (callSite, _, key, msg, signature) => { @@ -10708,7 +10708,7 @@ class UplcBuiltin extends UplcTerm { } let msgBytes = msg.bytes; - + let signatureBytes = signature.bytes; if (signatureBytes.length != 64) { throw callSite.runtimeError(`expected signature of length 64 for verifyEd25519Signature, got signature of length ${signatureBytes.length}`); @@ -10881,7 +10881,7 @@ class UplcBuiltin extends UplcTerm { case "iData": return new UplcAnon(this.site, rte, 1, (callSite, _, a) => { rte.calcAndIncrCost(this, a); - + return new UplcDataValue(callSite, new IntData(a.int)); }); case "bData": @@ -11018,7 +11018,7 @@ class UplcBuiltin extends UplcTerm { /** * Returns appropriate callback wrapped with UplcAnon depending on builtin name. * Emulates every Plutus-core that Helios exposes to the user. - * @param {UplcRte | UplcStack} rte + * @param {UplcRte | UplcStack} rte * @returns {Promise} */ async eval(rte) { @@ -11038,7 +11038,7 @@ class UplcBuiltin extends UplcTerm { v = new UplcDelayedValue(this.site, () => vPrev); } } - + return v; } } @@ -11090,7 +11090,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; #purpose; /** - * @param {UplcTerm} expr + * @param {UplcTerm} expr * @param {?number} purpose // TODO: enum type * @param {UplcInt[]} version */ @@ -11165,7 +11165,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * Flat encodes the entire Plutus-core program. * Note that final padding isn't added now but is handled by bitWriter upon finalization. - * @param {BitWriter} bitWriter + * @param {BitWriter} bitWriter */ toFlat(bitWriter) { for (let v of this.#version) { @@ -11176,7 +11176,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; } /** - * @param {UplcRte} rte + * @param {UplcRte} rte * @returns {Promise} */ async eval(rte) { @@ -11200,9 +11200,9 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; let fn = await this.eval(rte); - // program site is at pos 0, but now the call site is actually at the end + // program site is at pos 0, but now the call site is actually at the end let globalCallSite = new Site(this.site.src, this.site.src.length); - + /** @type {UplcValue} */ let result = fn; @@ -11238,7 +11238,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; if (arg instanceof UplcAnon) { throw new Error("UplcAnon cannot be applied to UplcProgram"); } - + expr = new UplcCall(arg.site, expr, new UplcConst(arg)); } else if (arg instanceof HeliosData) { expr = new UplcCall(Site.dummy(), expr, new UplcConst(new UplcDataValue(Site.dummy(), arg._toUplcData()))); @@ -11250,7 +11250,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * @param {?UplcValue[]} args - if null the top-level term is returned as a value - * @param {UplcRTECallbacks} callbacks + * @param {UplcRTECallbacks} callbacks * @param {?NetworkParams} networkParams * @returns {Promise} */ @@ -11289,7 +11289,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * @typedef {{ - * mem: bigint, + * mem: bigint, * cpu: bigint, * size: number, * builtins: {[name: string]: Cost}, @@ -11326,7 +11326,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; * @type {{[name: string]: Cost}} */ const terms = {}; - + /** * @type {(name: string, isTerm: boolean, cost: Cost) => void} */ @@ -11359,7 +11359,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; } } }; - + /** @type {string[]} */ let messages = []; @@ -11461,7 +11461,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {UplcProgram} */ static fromCbor(bytes) { @@ -11473,16 +11473,16 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; * Plutus-core deserializer creates a Plutus-core form an array of bytes */ class UplcDeserializer extends BitReader { - + /** - * @param {number[]} bytes + * @param {number[]} bytes */ constructor(bytes) { super(bytes); } /** - * @param {string} category + * @param {string} category * @returns {number} */ tagWidth(category) { @@ -11512,7 +11512,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * Reads a Plutus-core list with a specified size per element * Calls itself recursively until the end of the list is reached - * @param {number} elemSize + * @param {number} elemSize * @returns {number[]} */ readLinkedList(elemSize) { @@ -11559,7 +11559,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * Reads a single unbounded integer - * @param {boolean} signed + * @param {boolean} signed * @returns {UplcInt} */ readInteger(signed = false) { @@ -11628,7 +11628,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; } /** - * @param {() => UplcValue} typedReader + * @param {() => UplcValue} typedReader * @returns {UplcValue[]} */ readList(typedReader) { @@ -11697,7 +11697,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * Reads a single constant - * @param {number[]} typeList + * @param {number[]} typeList * @returns {UplcValue} */ readTypedValue(typeList) { @@ -11710,7 +11710,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; /** * Constructs a reader for a single construct recursively - * @param {number[]} typeList + * @param {number[]} typeList * NOTE: the implicit assumption is that this functions modifies the typeList * by removing all elements that it "consumed" to define a type * @returns {() => UplcValue} @@ -11799,7 +11799,7 @@ const PLUTUS_SCRIPT_VERSION = "PlutusScriptV2"; } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {UplcProgram} */ export function deserializeUplcBytes(bytes) { @@ -11826,7 +11826,7 @@ export function deserializeUplcBytes(bytes) { /** * Parses a plutus core program. Returns a UplcProgram object - * @param {string} jsonString + * @param {string} jsonString * @returns {UplcProgram} */ export function deserializeUplc(jsonString) { @@ -11862,15 +11862,15 @@ export class Tokenizer { /** * Tokens are accumulated in '#ts' - * @type {Token[]} + * @type {Token[]} */ #ts; #codeMap; #codeMapPos; /** - * @param {Source} src - * @param {?CodeMap} codeMap + * @param {Source} src + * @param {?CodeMap} codeMap */ constructor(src, codeMap = null) { assert(src instanceof Source); @@ -11896,7 +11896,7 @@ export class Tokenizer { } /** - * @param {Token} t + * @param {Token} t */ pushToken(t) { this.#ts.push(t); @@ -11939,8 +11939,8 @@ export class Tokenizer { /** * Start reading precisely one token - * @param {Site} site - * @param {string} c + * @param {Site} site + * @param {string} c */ readToken(site, c) { if (c == '_' || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { @@ -11984,7 +11984,7 @@ export class Tokenizer { return Tokenizer.nestGroups(this.#ts); } - /** + /** * Returns a generator * Use gen.next().value to access to the next Token * Doesn't perform any grouping @@ -12017,7 +12017,7 @@ export class Tokenizer { * Reads one word token. * Immediately turns "true" or "false" into a BoolLiteral instead of keeping it as Word * @param {Site} site - * @param {string} c0 - first character + * @param {string} c0 - first character */ readWord(site, c0) { let chars = []; @@ -12045,7 +12045,7 @@ export class Tokenizer { /** * Reads and discards a comment if current '/' char is followed by '/' or '*'. * Otherwise pushes Symbol('/') onto #ts - * @param {Site} site + * @param {Site} site */ // comments are discarded readMaybeComment(site) { @@ -12076,7 +12076,7 @@ export class Tokenizer { /** * Reads and discards a multi-line comment (from '/' '*' to '*' '/') - * @param {Site} site + * @param {Site} site */ readMultiLineComment(site) { let prev = ''; @@ -12096,7 +12096,7 @@ export class Tokenizer { /** * REads a literal integer - * @param {Site} site + * @param {Site} site */ readSpecialInteger(site) { let c = this.readChar(); @@ -12120,21 +12120,21 @@ export class Tokenizer { } /** - * @param {Site} site + * @param {Site} site */ readBinaryInteger(site) { this.readRadixInteger(site, "0b", c => (c == '0' || c == '1')); } /** - * @param {Site} site + * @param {Site} site */ readOctalInteger(site) { this.readRadixInteger(site, "0o", c => (c >= '0' && c <= '7')); } /** - * @param {Site} site + * @param {Site} site */ readHexInteger(site) { this.readRadixInteger(site, "0x", @@ -12142,7 +12142,7 @@ export class Tokenizer { } /** - * @param {Site} site + * @param {Site} site * @param {string} c0 - first character */ readDecimalInteger(site, c0) { @@ -12166,8 +12166,8 @@ export class Tokenizer { } /** - * @param {Site} site - * @param {string} prefix + * @param {Site} site + * @param {string} prefix * @param {(c: string) => boolean} valid - checks if character is valid as part of the radix */ readRadixInteger(site, prefix, valid) { @@ -12197,7 +12197,7 @@ export class Tokenizer { /** * Reads literal hexadecimal representation of ByteArray - * @param {Site} site + * @param {Site} site */ readByteArray(site) { let c = this.readChar(); @@ -12223,7 +12223,7 @@ export class Tokenizer { /** * Reads literal string delimited by double quotes. * Allows for three escape character: '\\', '\n' and '\t' - * @param {Site} site + * @param {Site} site */ readString(site) { let c = this.readChar(); @@ -12272,7 +12272,7 @@ export class Tokenizer { /** * Reads single or double character symbols - * @param {Site} site + * @param {Site} site * @param {string} c0 - first character */ readSymbol(site, c0) { @@ -12312,7 +12312,7 @@ export class Tokenizer { /** * Separates tokens in fields (separted by commas) - * @param {Token[]} ts + * @param {Token[]} ts * @returns {Group} */ static buildGroup(ts) { @@ -12396,7 +12396,7 @@ export class Tokenizer { /** * Match group open with group close symbols in order to form groups. * This is recursively applied to nested groups. - * @param {Token[]} ts + * @param {Token[]} ts * @returns {Token[]} */ static nestGroups(ts) { @@ -12424,7 +12424,7 @@ export class Tokenizer { /** * Tokenizes a string (wrapped in Source) * @package - * @param {Source} src + * @param {Source} src * @returns {Token[]} */ function tokenize(src) { @@ -12436,8 +12436,8 @@ function tokenize(src) { /** * Tokenizes an IR string with a codemap to the original source * @package - * @param {string} rawSrc - * @param {CodeMap} codeMap + * @param {string} rawSrc + * @param {CodeMap} codeMap * @returns {Token[]} */ function tokenizeIR(rawSrc, codeMap) { @@ -12598,8 +12598,8 @@ class EvalEntity { /** * Returns 'true' if 'this' is an instance of 'type'. Throws an error if 'this' isn't a Instance. * 'type' can be a class, or a class instance. - * @param {Site} site - * @param {Type | TypeClass} type + * @param {Site} site + * @param {Type | TypeClass} type * @returns {boolean} */ isInstanceOf(site, type) { @@ -12607,9 +12607,9 @@ class EvalEntity { } /** - * Returns the return type of a function (wrapped as a Instance) if the args have the correct types. + * Returns the return type of a function (wrapped as a Instance) if the args have the correct types. * Throws an error if 'this' isn't a function value, or if the args don't correspond. - * @param {Site} site + * @param {Site} site * @param {Instance[]} args * @returns {Instance} */ @@ -12671,7 +12671,7 @@ class EvalEntity { /** * Returns the constructor index so Plutus-core data can be created correctly. - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -12692,9 +12692,9 @@ class Type extends EvalEntity { * Compares two types. Throws an error if neither is a Type. * @example * Type.same(Site.dummy(), new IntType(), new IntType()) => true - * @param {Site} site - * @param {Type} a - * @param {Type} b + * @param {Site} site + * @param {Type} a + * @param {Type} b * @returns {boolean} */ static same(site, a, b) { @@ -12725,7 +12725,7 @@ class Type extends EvalEntity { /** * Returns the underlying Type. Throws an error in this case because a Type can't return another Type. - * @param {Site} site + * @param {Site} site * @returns {Type} */ getType(site) { @@ -12734,7 +12734,7 @@ class Type extends EvalEntity { /** * Throws an error because a Type can't be an instance of another Type. - * @param {Site} site + * @param {Site} site * @param {Type | TypeClass} type * @returns {boolean} */ @@ -12744,8 +12744,8 @@ class Type extends EvalEntity { /** * Throws an error because a Type isn't callable. - * @param {Site} site - * @param {Instance[]} args + * @param {Site} site + * @param {Instance[]} args * @returns {Instance} */ call(site, args) { @@ -12789,8 +12789,8 @@ class AnyType extends Type { } /** - * @param {Site} site - * @param {Type} other + * @param {Site} site + * @param {Type} other * @returns {boolean} */ isBaseOf(site, other) { @@ -12807,8 +12807,8 @@ class DataType extends Type { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -12874,7 +12874,7 @@ class BuiltinType extends DataType { /** * Returns one of default instance members, or throws an error. - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -12891,7 +12891,7 @@ class BuiltinType extends DataType { /** * Returns the number of data fields in a builtin type (not yet used) - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -12901,7 +12901,7 @@ class BuiltinType extends DataType { /** * Returns the constructor index of a builtin type (eg. 1 for Option::None). * By default non-enum builtin types that are encoded as Plutus-core data use the '0' constructor index. - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -12923,7 +12923,7 @@ class BuiltinEnumMember extends BuiltinType { #parentType; /** - * @param {BuiltinType} parentType + * @param {BuiltinType} parentType */ constructor(parentType) { super(); @@ -12935,7 +12935,7 @@ class BuiltinEnumMember extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -12946,9 +12946,9 @@ class BuiltinEnumMember extends BuiltinType { return super.getTypeMember(name); } } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -12971,7 +12971,7 @@ class StatementType extends DataType { #statement; /** - * @param {T} statement + * @param {T} statement */ constructor(statement) { super(); @@ -12993,8 +12993,8 @@ class StatementType extends DataType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -13016,7 +13016,7 @@ class StatementType extends DataType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -13024,7 +13024,7 @@ class StatementType extends DataType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -13033,7 +13033,7 @@ class StatementType extends DataType { /** * Returns the number of fields in a Struct or in an EnumMember. - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -13062,7 +13062,7 @@ class StatementType extends DataType { /** * Returns the constructor index so that __core__constrData can be called correctly. - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -13152,7 +13152,7 @@ class StructStatementType extends StatementType { /** * Overload 'instanceof' operator - * @param {any} other + * @param {any} other * @returns {boolean} */ static [Symbol.hasInstance](other) { @@ -13178,7 +13178,7 @@ class StructStatementType extends StatementType { } /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {Struct} */ static fromUplcCbor(bytes) { @@ -13186,7 +13186,7 @@ class StructStatementType extends StatementType { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {Struct} */ static fromUplcData(data) { @@ -13204,7 +13204,7 @@ class StructStatementType extends StatementType { } } - Object.defineProperty(Struct, "name", {value: this.name, writable: false}); + Object.defineProperty(Struct, "name", {value: this.name, writable: false}); return Struct; } @@ -13250,7 +13250,7 @@ class EnumStatementType extends StatementType { /** * Overload 'instanceof' operator - * @param {any} other + * @param {any} other * @returns {boolean} */ static [Symbol.hasInstance](other) { @@ -13273,7 +13273,7 @@ class EnumStatementType extends StatementType { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {HeliosData} */ static fromUplcData(data) { @@ -13357,13 +13357,13 @@ class EnumMemberStatementType extends StatementType { if (args.length != nFields) { throw new Error(`expected ${nFields} args, got ${args.length}`); } - + this.#fields = []; - + args.forEach((arg, i) => { const [fieldName, fieldType] = fields[i]; const FieldClass = fieldType.userType; - + const instance = arg instanceof FieldClass ? arg : new FieldClass(arg); this.#fields.push(instance); @@ -13371,16 +13371,16 @@ class EnumMemberStatementType extends StatementType { }); } - + /** * Overload 'instanceof' operator - * @param {any} other + * @param {any} other * @returns {boolean} */ static [Symbol.hasInstance](other) { return (other._enumVariantStatement === statement) && (other instanceof HeliosData); } - + /** * @type {EnumTypeStatement} */ @@ -13394,39 +13394,39 @@ class EnumMemberStatementType extends StatementType { get _enumVariantStatement() { return statement; } - + /** * @returns {UplcData} */ _toUplcData() { return new ConstrData(index, this.#fields.map(f => f._toUplcData())); } - + /** - * @param {string | number[]} bytes + * @param {string | number[]} bytes * @returns {EnumVariant} */ static fromUplcCbor(bytes) { return EnumVariant.fromUplcData(UplcData.fromCbor(bytes)); } - + /** - * @param {UplcData} data + * @param {UplcData} data * @returns {EnumVariant} */ static fromUplcData(data) { assert(data.index == index, "wrong index"); const dataItems = data.list; - + if (dataItems.length != nFields) { throw new Error("unexpected number of fields"); } - + const args = dataItems.map((item, i) => { return fields[i][1].userType.fromUplcData(item); }); - + return new EnumVariant(...args); } } @@ -13446,8 +13446,8 @@ class FuncType extends Type { #retTypes; /** - * @param {Type[]} argTypes - * @param {Type | Type[]} retTypes + * @param {Type[]} argTypes + * @param {Type | Type[]} retTypes */ constructor(argTypes, retTypes) { super(); @@ -13487,8 +13487,8 @@ class FuncType extends Type { * Checks if the type of the first arg is the same as 'type' * Also returns false if there are no args. * For a method to be a valid instance member its first argument must also be named 'self', but that is checked elsewhere - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isMaybeMethod(site, type) { @@ -13499,7 +13499,7 @@ class FuncType extends Type { } } - /** + /** * Checks if any of 'this' argTypes or retType is same as Type. * Only if this checks return true is the association allowed. * @param {Site} site @@ -13527,8 +13527,8 @@ class FuncType extends Type { * The number of args needs to be the same. * Each argType of the FuncType we are checking against needs to be the same or less specific (i.e. isBaseOf(this.#argTypes[i])) * The retType of 'this' needs to be the same or more specific - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -13564,12 +13564,12 @@ class FuncType extends Type { return false; } } - + /** * Checks if arg types are valid. - * Throws errors if not valid. Returns the return type if valid. - * @param {Site} site - * @param {Instance[]} args + * Throws errors if not valid. Returns the return type if valid. + * @param {Site} site + * @param {Instance[]} args * @returns {Type[]} */ checkCall(site, args) { @@ -13591,7 +13591,7 @@ class NotType extends EvalEntity { constructor() { super(); } - + /** * @returns {boolean} */ @@ -13601,8 +13601,8 @@ class NotType extends EvalEntity { /** * Throws an error because NotType can't be a base-Type of anything. - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -13628,7 +13628,7 @@ class Instance extends NotType { } /** - * @param {Type | Type[]} type + * @param {Type | Type[]} type * @returns {Instance} */ static new(type) { @@ -13681,7 +13681,7 @@ class DataInstance extends Instance { #type; /** - * @param {DataType} type + * @param {DataType} type */ constructor(type) { assert(!(type instanceof FuncType)); @@ -13699,7 +13699,7 @@ class DataInstance extends Instance { /** * Gets the underlying Type. - * @param {Site} site + * @param {Site} site * @returns {Type} */ getType(site) { @@ -13713,9 +13713,9 @@ class DataInstance extends Instance { /** * Checks if 'this' is instance of 'type'. * 'type' can be a class, or a class instance. - * @param {Site} site - * @param {Type | TypeClass} type - * @returns + * @param {Site} site + * @param {Type | TypeClass} type + * @returns */ isInstanceOf(site, type) { if (typeof type == 'function') { @@ -13727,7 +13727,7 @@ class DataInstance extends Instance { /** * Returns the number of fields of a struct, enum member, or builtin type. - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -13746,8 +13746,8 @@ class DataInstance extends Instance { /** * Returns the index of a named field - * @param {Site} site - * @param {string} name + * @param {Site} site + * @param {string} name * @returns {number} */ getFieldIndex(site, name) { @@ -13755,7 +13755,7 @@ class DataInstance extends Instance { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -13764,8 +13764,8 @@ class DataInstance extends Instance { /** * Throws an error bec - * @param {Site} site - * @param {Instance[]} args + * @param {Site} site + * @param {Instance[]} args * @returns {Instance} */ call(site, args) { @@ -13780,7 +13780,7 @@ class ConstStatementInstance extends DataInstance { #statement; /** - * @param {DataType} type + * @param {DataType} type * @param {ConstTypeStatement} statement - can't use ConstStatement because that would give circular dependency */ constructor(type, statement) { @@ -13804,7 +13804,7 @@ class FuncInstance extends Instance { #type; /** - * @param {FuncType} type + * @param {FuncType} type */ constructor(type) { assert(type instanceof FuncType); @@ -13852,9 +13852,9 @@ class FuncInstance extends Instance { /** * Checks if 'this' is an instance of 'type'. - * Type can be a class or a class instance. - * @param {Site} site - * @param {Type | TypeClass} type + * Type can be a class or a class instance. + * @param {Site} site + * @param {Type | TypeClass} type * @returns {boolean} */ isInstanceOf(site, type) { @@ -13866,8 +13866,8 @@ class FuncInstance extends Instance { } /** - * @param {Site} site - * @param {Instance[]} args + * @param {Site} site + * @param {Instance[]} args * @returns {Instance} */ call(site, args) { @@ -13876,7 +13876,7 @@ class FuncInstance extends Instance { /** * Throws an error because a function value doesn't have any fields. - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -13895,8 +13895,8 @@ class FuncInstance extends Instance { /** * Throws an error because a function value have any fields. - * @param {Site} site - * @param {string} name + * @param {Site} site + * @param {string} name * @returns {number} */ getFieldIndex(site, name) { @@ -13905,7 +13905,7 @@ class FuncInstance extends Instance { /** * Throws an error because a function value doesn't have members. - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -13921,7 +13921,7 @@ class FuncStatementInstance extends FuncInstance { #statement /** - * @param {FuncType} type + * @param {FuncType} type * @param {RecurseableStatement} statement - can't use FuncStatement because that would give circular dependency */ constructor(type, statement) { @@ -13957,7 +13957,7 @@ class MultiInstance extends Instance { #values; /** - * @param {Instance[]} values + * @param {Instance[]} values */ constructor(values) { super(); @@ -14014,8 +14014,8 @@ class VoidInstance extends Instance { } /** - * @param {Site} site - * @param {Type | TypeClass} type + * @param {Site} site + * @param {Type | TypeClass} type * @returns {boolean} */ isInstanceOf(site, type) { @@ -14023,7 +14023,7 @@ class VoidInstance extends Instance { } /** - * @param {Site} site + * @param {Site} site * @returns {Type} */ getType(site) { @@ -14031,7 +14031,7 @@ class VoidInstance extends Instance { } /** - * @param {Site} site + * @param {Site} site * @param {Instance[]} args * @returns {Instance} */ @@ -14074,7 +14074,7 @@ class VoidInstance extends Instance { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -14089,7 +14089,7 @@ class VoidInstance extends Instance { */ class ErrorInstance extends VoidInstance { /** - * @param {Site} site + * @param {Site} site * @returns {Type} */ getType(site) { @@ -14167,8 +14167,8 @@ class VoidType extends Type { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -14186,8 +14186,8 @@ class ErrorType extends VoidType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -14209,7 +14209,7 @@ class IntType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -14217,7 +14217,7 @@ class IntType extends BuiltinType { case "from_little_endian": return Instance.new(new FuncType([new ByteArrayType()], new IntType())); case "max": - case "min": + case "min": return Instance.new(new FuncType([new IntType(), new IntType()], new IntType())); case "parse": return Instance.new(new FuncType([new StringType()], new IntType())); @@ -14227,7 +14227,7 @@ class IntType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -14288,7 +14288,7 @@ class BoolType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -14303,7 +14303,7 @@ class BoolType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -14356,7 +14356,7 @@ class StringType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -14410,7 +14410,7 @@ class ByteArrayType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -14488,7 +14488,7 @@ class ParamType extends Type { /** * @param {Site} site - * @param {Type} type + * @param {Type} type */ setType(site, type) { if (this.#checkType !== null) { @@ -14499,7 +14499,7 @@ class ParamType extends Type { } /** - * @param {Type} type + * @param {Type} type * @param {?Type} expected * @returns {Type} */ @@ -14563,7 +14563,7 @@ class ParamType extends Type { /** * Returns the number of fields of a struct, enum member, or builtin type. - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -14603,7 +14603,7 @@ class ParamType extends Type { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -14613,7 +14613,7 @@ class ParamType extends Type { return this.#type.getInstanceMember(name); } } - + /** * Returns 'true' if 'this' is a base-type of 'type'. Throws an error if 'this' isn't a Type. * @param {Site} site @@ -14653,7 +14653,7 @@ class ParamFuncValue extends FuncInstance { /** * @param {ParamType[]} params - * @param {FuncType} fnType + * @param {FuncType} fnType * @param {?() => string} correctMemberName */ constructor(params, fnType, correctMemberName = null) { @@ -14679,7 +14679,7 @@ class ParamFuncValue extends FuncInstance { } /** - * @param {Site} site + * @param {Site} site * @returns {Type} */ getType(site) { @@ -14691,8 +14691,8 @@ class ParamFuncValue extends FuncInstance { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isInstanceOf(site, type) { @@ -14704,8 +14704,8 @@ class ParamFuncValue extends FuncInstance { } /** - * @param {Site} site - * @param {Instance[]} args + * @param {Site} site + * @param {Instance[]} args * @returns {Instance} */ call(site, args) { @@ -14721,7 +14721,7 @@ class ListType extends BuiltinType { #itemType; /** - * @param {Type} itemType + * @param {Type} itemType */ constructor(itemType) { super(); @@ -14742,8 +14742,8 @@ class ListType extends BuiltinType { /** * @package - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -14758,7 +14758,7 @@ class ListType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -14774,7 +14774,7 @@ class ListType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -14860,8 +14860,8 @@ class MapType extends BuiltinType { #valueType; /** - * @param {Type} keyType - * @param {Type} valueType + * @param {Type} keyType + * @param {Type} valueType */ constructor(keyType, valueType) { super(); @@ -14891,8 +14891,8 @@ class MapType extends BuiltinType { /** * @package - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -14907,7 +14907,7 @@ class MapType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15017,7 +15017,7 @@ class OptionType extends BuiltinType { #someType; /** - * @param {Type} someType + * @param {Type} someType */ constructor(someType) { super(); @@ -15030,7 +15030,7 @@ class OptionType extends BuiltinType { /** * @package - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -15039,8 +15039,8 @@ class OptionType extends BuiltinType { /** * @package - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -15049,14 +15049,14 @@ class OptionType extends BuiltinType { if (type instanceof OptionType) { return this.#someType.isBaseOf(site, type.#someType); } else { - return (new OptionSomeType(this.#someType)).isBaseOf(site, type) || + return (new OptionSomeType(this.#someType)).isBaseOf(site, type) || (new OptionNoneType(this.#someType)).isBaseOf(site, type); } } /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15072,7 +15072,7 @@ class OptionType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15123,7 +15123,7 @@ class OptionSomeType extends BuiltinEnumMember { #someType; /** - * @param {Type} someType + * @param {Type} someType */ constructor(someType) { super(new OptionType(someType)); @@ -15135,8 +15135,8 @@ class OptionSomeType extends BuiltinEnumMember { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -15178,7 +15178,7 @@ class OptionSomeType extends BuiltinEnumMember { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15191,7 +15191,7 @@ class OptionSomeType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -15211,7 +15211,7 @@ class OptionNoneType extends BuiltinEnumMember { #someType; /** - * @param {Type} someType + * @param {Type} someType */ constructor(someType) { super(new OptionType(someType)); @@ -15223,8 +15223,8 @@ class OptionNoneType extends BuiltinEnumMember { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { @@ -15238,7 +15238,7 @@ class OptionNoneType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -15269,7 +15269,7 @@ class HashType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15282,7 +15282,7 @@ class HashType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15351,7 +15351,7 @@ class PubKeyType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15415,7 +15415,7 @@ class ValidatorHashType extends HashType { #purpose; /** - * @param {number} purpose + * @param {number} purpose */ constructor(purpose = -1) { super(); @@ -15424,7 +15424,7 @@ class ValidatorHashType extends HashType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15467,7 +15467,7 @@ class MintingPolicyHashType extends HashType { #purpose; /** - * @param {number} purpose + * @param {number} purpose */ constructor(purpose = -1) { super(); @@ -15476,7 +15476,7 @@ class MintingPolicyHashType extends HashType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15519,7 +15519,7 @@ class StakingValidatorHashType extends HashType { #purpose; /** - * @param {number} purpose + * @param {number} purpose */ constructor(purpose = -1) { super(); @@ -15528,7 +15528,7 @@ class StakingValidatorHashType extends HashType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15589,7 +15589,7 @@ class ScriptContextType extends BuiltinType { #purpose; /** - * @param {number} purpose + * @param {number} purpose */ constructor(purpose) { super(); @@ -15601,7 +15601,7 @@ class ScriptContextType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15668,7 +15668,7 @@ class ScriptContextType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15733,22 +15733,22 @@ class ScriptPurposeType extends BuiltinType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new MintingScriptPurposeType()).isBaseOf(site, type) || - (new SpendingScriptPurposeType()).isBaseOf(site, type) || - (new RewardingScriptPurposeType()).isBaseOf(site, type) || - (new CertifyingScriptPurposeType()).isBaseOf(site, type); + (new MintingScriptPurposeType()).isBaseOf(site, type) || + (new SpendingScriptPurposeType()).isBaseOf(site, type) || + (new RewardingScriptPurposeType()).isBaseOf(site, type) || + (new CertifyingScriptPurposeType()).isBaseOf(site, type); return b; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15775,7 +15775,7 @@ class ScriptPurposeType extends BuiltinType { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -15800,7 +15800,7 @@ class MintingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15813,7 +15813,7 @@ class MintingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -15838,7 +15838,7 @@ class SpendingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15851,7 +15851,7 @@ class SpendingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -15868,7 +15868,7 @@ class SpendingScriptPurposeType extends BuiltinEnumMember { */ class RewardingScriptPurposeType extends BuiltinEnumMember { /** - * @param {?BuiltinType} parentType + * @param {?BuiltinType} parentType */ constructor(parentType = null) { super(parentType === null ? new ScriptPurposeType() : parentType); @@ -15879,7 +15879,7 @@ class RewardingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15892,7 +15892,7 @@ class RewardingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -15921,7 +15921,7 @@ class CertifyingScriptPurposeType extends BuiltinEnumMember { /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -15934,7 +15934,7 @@ class CertifyingScriptPurposeType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -15956,20 +15956,20 @@ class StakingPurposeType extends BuiltinType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new StakingRewardingPurposeType()).isBaseOf(site, type) || - (new StakingCertifyingPurposeType()).isBaseOf(site, type); + (new StakingRewardingPurposeType()).isBaseOf(site, type) || + (new StakingCertifyingPurposeType()).isBaseOf(site, type); return b; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -15984,7 +15984,7 @@ class StakingPurposeType extends BuiltinType { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -16041,23 +16041,23 @@ class DCertType extends BuiltinType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new RegisterDCertType()).isBaseOf(site, type) || - (new DeregisterDCertType()).isBaseOf(site, type) || - (new DelegateDCertType()).isBaseOf(site, type) || + (new RegisterDCertType()).isBaseOf(site, type) || + (new DeregisterDCertType()).isBaseOf(site, type) || + (new DelegateDCertType()).isBaseOf(site, type) || (new RegisterPoolDCertType()).isBaseOf(site, type) || - (new RetirePoolDCertType()).isBaseOf(site, type); + (new RetirePoolDCertType()).isBaseOf(site, type); return b; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16088,7 +16088,7 @@ class DCertType extends BuiltinType { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -16108,9 +16108,9 @@ class RegisterDCertType extends BuiltinEnumMember { toString() { return "DCert::Register"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16123,7 +16123,7 @@ class RegisterDCertType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16143,9 +16143,9 @@ class DeregisterDCertType extends BuiltinEnumMember { toString() { return "DCert::Deregister"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16158,7 +16158,7 @@ class DeregisterDCertType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16178,9 +16178,9 @@ class DelegateDCertType extends BuiltinEnumMember { toString() { return "DCert::Delegate"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16195,7 +16195,7 @@ class DelegateDCertType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16215,9 +16215,9 @@ class RegisterPoolDCertType extends BuiltinEnumMember { toString() { return "DCert::RegisterPool"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16232,7 +16232,7 @@ class RegisterPoolDCertType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16252,9 +16252,9 @@ class RetirePoolDCertType extends BuiltinEnumMember { toString() { return "DCert::RetirePool"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16269,7 +16269,7 @@ class RetirePoolDCertType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16295,7 +16295,7 @@ class TxType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16324,7 +16324,7 @@ class TxType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16396,7 +16396,7 @@ class TxIdType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16416,7 +16416,7 @@ class TxIdType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16460,7 +16460,7 @@ class TxInputType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16480,7 +16480,7 @@ class TxInputType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16509,7 +16509,7 @@ class TxOutputType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16530,7 +16530,7 @@ class TxOutputType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16562,21 +16562,21 @@ class OutputDatumType extends BuiltinType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new NoOutputDatumType()).isBaseOf(site, type) || - (new HashedOutputDatumType()).isBaseOf(site, type) || - (new InlineOutputDatumType()).isBaseOf(site, type);; + (new NoOutputDatumType()).isBaseOf(site, type) || + (new HashedOutputDatumType()).isBaseOf(site, type) || + (new InlineOutputDatumType()).isBaseOf(site, type);; return b; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16611,7 +16611,7 @@ class OutputDatumType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16624,7 +16624,7 @@ class OutputDatumType extends BuiltinType { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -16649,7 +16649,7 @@ class NoOutputDatumType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16672,9 +16672,9 @@ class HashedOutputDatumType extends BuiltinEnumMember { toString() { return "OutputDatum::Hash"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16687,7 +16687,7 @@ class HashedOutputDatumType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16710,9 +16710,9 @@ class InlineOutputDatumType extends BuiltinEnumMember { toString() { return "OutputDatum::Inline"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16725,7 +16725,7 @@ class InlineOutputDatumType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -16748,7 +16748,7 @@ class RawDataType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16761,7 +16761,7 @@ class RawDataType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16789,7 +16789,7 @@ class TxOutputIdType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16803,7 +16803,7 @@ class TxOutputIdType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16850,7 +16850,7 @@ class AddressType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16869,7 +16869,7 @@ class AddressType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16911,21 +16911,21 @@ class CredentialType extends BuiltinType { /** * @package - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new CredentialPubKeyType()).isBaseOf(site, type) || - (new CredentialValidatorType()).isBaseOf(site, type); + (new CredentialPubKeyType()).isBaseOf(site, type) || + (new CredentialValidatorType()).isBaseOf(site, type); return b; } /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -16945,7 +16945,7 @@ class CredentialType extends BuiltinType { /** * @package - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -16972,9 +16972,9 @@ class CredentialPubKeyType extends BuiltinEnumMember { toString() { return "Credential::PubKey"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -16987,7 +16987,7 @@ class CredentialPubKeyType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -17012,7 +17012,7 @@ class CredentialValidatorType extends BuiltinEnumMember { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17025,7 +17025,7 @@ class CredentialValidatorType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -17047,20 +17047,20 @@ class StakingHashType extends BuiltinType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new StakingHashStakeKeyType()).isBaseOf(site, type) || - (new StakingHashValidatorType()).isBaseOf(site, type); + (new StakingHashStakeKeyType()).isBaseOf(site, type) || + (new StakingHashValidatorType()).isBaseOf(site, type); return b; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17079,7 +17079,7 @@ class StakingHashType extends BuiltinType { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -17102,9 +17102,9 @@ class StakingHashStakeKeyType extends BuiltinEnumMember { toString() { return "StakingHash::StakeKey"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17117,7 +17117,7 @@ class StakingHashStakeKeyType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -17142,7 +17142,7 @@ class StakingHashValidatorType extends BuiltinEnumMember { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17155,7 +17155,7 @@ class StakingHashValidatorType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -17177,20 +17177,20 @@ class StakingCredentialType extends BuiltinType { } /** - * @param {Site} site - * @param {Type} type + * @param {Site} site + * @param {Type} type * @returns {boolean} */ isBaseOf(site, type) { let b = super.isBaseOf(site, type) || - (new StakingHashCredentialType()).isBaseOf(site, type) || - (new StakingPtrCredentialType()).isBaseOf(site, type); + (new StakingHashCredentialType()).isBaseOf(site, type) || + (new StakingPtrCredentialType()).isBaseOf(site, type); return b; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17209,7 +17209,7 @@ class StakingCredentialType extends BuiltinType { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -17232,9 +17232,9 @@ class StakingHashCredentialType extends BuiltinEnumMember { toString() { return "StakingCredential::Hash"; } - + /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17247,7 +17247,7 @@ class StakingHashCredentialType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -17272,7 +17272,7 @@ class StakingPtrCredentialType extends BuiltinEnumMember { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -17293,7 +17293,7 @@ export class TimeType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17306,7 +17306,7 @@ export class TimeType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17351,7 +17351,7 @@ class DurationType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17364,7 +17364,7 @@ class DurationType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17406,7 +17406,7 @@ class TimeRangeType extends BuiltinType { return "TimeRange"; } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17427,7 +17427,7 @@ class TimeRangeType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17459,7 +17459,7 @@ class AssetClassType extends BuiltinType { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17489,7 +17489,7 @@ class ValueType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -17509,7 +17509,7 @@ class ValueType extends BuiltinType { /** * @package - * @param {Word} name + * @param {Word} name * @returns {Instance} */ getInstanceMember(name) { @@ -17585,7 +17585,7 @@ class GlobalScope { /** * Checks if scope contains a name - * @param {Word} name + * @param {Word} name * @returns {boolean} */ has(name) { @@ -17614,7 +17614,7 @@ class GlobalScope { /** * Gets a named value from the scope. * Throws an error if not found. - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ get(name) { @@ -17692,7 +17692,7 @@ class GlobalScope { scope.set("assert", new AssertFunc()); scope.set("error", new ErrorFunc()); scope.set("print", new PrintFunc()); - + return scope; } @@ -17706,7 +17706,7 @@ class GlobalScope { } /** - * @param {(name: string, type: Type) => void} callback + * @param {(name: string, type: Type) => void} callback */ loopTypes(callback) { for (let [k, v] of this.#values) { @@ -17725,14 +17725,14 @@ class Scope { /** @type {GlobalScope | Scope} */ #parent; - /** + /** * TopScope can elverage the #values to store ModuleScopes - * @type {[Word, (EvalEntity | Scope)][]} + * @type {[Word, (EvalEntity | Scope)][]} */ #values; /** - * @param {GlobalScope | Scope} parent + * @param {GlobalScope | Scope} parent */ constructor(parent) { this.#parent = parent; @@ -17748,7 +17748,7 @@ class Scope { /** * Checks if scope contains a name - * @param {Word} name + * @param {Word} name * @returns {boolean} */ has(name) { @@ -17767,8 +17767,8 @@ class Scope { /** * Sets a named value. Throws an error if not unique - * @param {Word} name - * @param {EvalEntity | Scope} value + * @param {Word} name + * @param {EvalEntity | Scope} value */ set(name, value) { if (this.has(name)) { @@ -17780,7 +17780,7 @@ class Scope { /** * Gets a named value from the scope. Throws an error if not found - * @param {Word} name + * @param {Word} name * @returns {EvalEntity | Scope} */ get(name) { @@ -17838,7 +17838,7 @@ class Scope { } /** - * @param {Word} name + * @param {Word} name * @returns {boolean} */ isUsed(name) { @@ -17852,7 +17852,7 @@ class Scope { } /** - * @param {Site} site + * @param {Site} site * @returns {Type} */ assertType(site) { @@ -17860,7 +17860,7 @@ class Scope { } /** - * @param {Site} site + * @param {Site} site * @returns {Instance} */ assertValue(site) { @@ -17875,7 +17875,7 @@ class Scope { } /** - * @param {(name: string, type: Type) => void} callback + * @param {(name: string, type: Type) => void} callback */ loopTypes(callback) { this.#parent.loopTypes(callback); @@ -17896,7 +17896,7 @@ class TopScope extends Scope { #strict; /** - * @param {GlobalScope} parent + * @param {GlobalScope} parent * @param {boolean} strict */ constructor(parent, strict = true) { @@ -17905,15 +17905,15 @@ class TopScope extends Scope { } /** - * @param {Word} name - * @param {EvalEntity | Scope} value + * @param {Word} name + * @param {EvalEntity | Scope} value */ set(name, value) { super.set(name, value); } /** - * @param {boolean} s + * @param {boolean} s */ setStrict(s) { this.#strict = s; @@ -17927,7 +17927,7 @@ class TopScope extends Scope { } /** - * @param {Word} name + * @param {Word} name * @returns {ModuleScope} */ getModuleScope(name) { @@ -17964,7 +17964,7 @@ class FuncStatementScope extends Scope { } /** - * @param {RecurseableStatement} statement + * @param {RecurseableStatement} statement * @returns {boolean} */ isRecursive(statement) { @@ -17987,7 +17987,7 @@ class FuncStatementScope extends Scope { */ class Expr extends Token { /** - * @param {Site} site + * @param {Site} site */ constructor(site) { super(site); @@ -18007,7 +18007,7 @@ class TypeExpr extends Expr { #cache; /** - * @param {Site} site + * @param {Site} site * @param {?Type} cache */ constructor(site, cache = null) { @@ -18024,7 +18024,7 @@ class TypeExpr extends Expr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18032,7 +18032,7 @@ class TypeExpr extends Expr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ eval(scope) { @@ -18068,7 +18068,7 @@ class TypeRefExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18099,8 +18099,8 @@ class TypePathExpr extends TypeExpr { #memberName; /** - * @param {Site} site - * @param {TypeExpr} baseExpr + * @param {Site} site + * @param {TypeExpr} baseExpr * @param {Word} memberName */ constructor(site, baseExpr, memberName) { @@ -18114,7 +18114,7 @@ class TypePathExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18142,8 +18142,8 @@ class ListTypeExpr extends TypeExpr { #itemTypeExpr; /** - * @param {Site} site - * @param {TypeExpr} itemTypeExpr + * @param {Site} site + * @param {TypeExpr} itemTypeExpr */ constructor(site, itemTypeExpr) { super(site); @@ -18155,7 +18155,7 @@ class ListTypeExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18182,9 +18182,9 @@ class MapTypeExpr extends TypeExpr { #valueTypeExpr; /** - * @param {Site} site - * @param {TypeExpr} keyTypeExpr - * @param {TypeExpr} valueTypeExpr + * @param {Site} site + * @param {TypeExpr} keyTypeExpr + * @param {TypeExpr} valueTypeExpr */ constructor(site, keyTypeExpr, valueTypeExpr) { super(site); @@ -18197,7 +18197,7 @@ class MapTypeExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18232,8 +18232,8 @@ class OptionTypeExpr extends TypeExpr { #someTypeExpr; /** - * @param {Site} site - * @param {TypeExpr} someTypeExpr + * @param {Site} site + * @param {TypeExpr} someTypeExpr */ constructor(site, someTypeExpr) { super(site); @@ -18245,7 +18245,7 @@ class OptionTypeExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18277,13 +18277,13 @@ class VoidTypeExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { return new VoidType(); } - + use() { } } @@ -18297,9 +18297,9 @@ class FuncTypeExpr extends TypeExpr { #retTypeExprs; /** - * @param {Site} site - * @param {TypeExpr[]} argTypeExprs - * @param {TypeExpr[]} retTypeExprs + * @param {Site} site + * @param {TypeExpr[]} argTypeExprs + * @param {TypeExpr[]} retTypeExprs */ constructor(site, argTypeExprs, retTypeExprs) { super(site); @@ -18319,7 +18319,7 @@ class FuncTypeExpr extends TypeExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalInternal(scope) { @@ -18345,7 +18345,7 @@ class ValueExpr extends Expr { #cache; /** - * @param {Site} site + * @param {Site} site */ constructor(site) { super(site); @@ -18369,7 +18369,7 @@ class ValueExpr extends Expr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -18377,7 +18377,7 @@ class ValueExpr extends Expr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ eval(scope) { @@ -18391,7 +18391,7 @@ class ValueExpr extends Expr { /** * Returns Intermediate Representation of a value expression. * The IR should be indented to make debugging easier. - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -18409,10 +18409,10 @@ class AssignExpr extends ValueExpr { #downstreamExpr; /** - * @param {Site} site - * @param {NameTypePair[]} nameTypes - * @param {ValueExpr} upstreamExpr - * @param {ValueExpr} downstreamExpr + * @param {Site} site + * @param {NameTypePair[]} nameTypes + * @param {ValueExpr} upstreamExpr + * @param {ValueExpr} downstreamExpr */ constructor(site, nameTypes, upstreamExpr, downstreamExpr) { super(site); @@ -18437,7 +18437,7 @@ class AssignExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -18491,9 +18491,9 @@ class AssignExpr extends ValueExpr { } else if (this.#upstreamExpr.isLiteral()) { // enum variant type resulting from a constructor-like associated function must be cast back into its enum type if ((this.#upstreamExpr instanceof CallExpr && - this.#upstreamExpr.fnExpr instanceof ValuePathExpr) || - (this.#upstreamExpr instanceof ValuePathExpr && - !this.#upstreamExpr.isZeroFieldConstructor())) + this.#upstreamExpr.fnExpr instanceof ValuePathExpr) || + (this.#upstreamExpr instanceof ValuePathExpr && + !this.#upstreamExpr.isZeroFieldConstructor())) { let upstreamType = upstreamVal.getType(this.#upstreamExpr.site); @@ -18524,8 +18524,8 @@ class AssignExpr extends ValueExpr { } /** - * - * @param {string} indent + * + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -18559,9 +18559,9 @@ class PrintExpr extends ValueExpr { #downstreamExpr; /** - * @param {Site} site - * @param {ValueExpr} msgExpr - * @param {ValueExpr} downstreamExpr + * @param {Site} site + * @param {ValueExpr} msgExpr + * @param {ValueExpr} downstreamExpr */ constructor(site, msgExpr, downstreamExpr) { super(site); @@ -18579,7 +18579,7 @@ class PrintExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -18602,7 +18602,7 @@ class PrintExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -18633,7 +18633,7 @@ class VoidExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -18657,9 +18657,9 @@ class ChainExpr extends ValueExpr { #downstreamExpr; /** - * @param {Site} site - * @param {ValueExpr} upstreamExpr - * @param {ValueExpr} downstreamExpr + * @param {Site} site + * @param {ValueExpr} upstreamExpr + * @param {ValueExpr} downstreamExpr */ constructor(site, upstreamExpr, downstreamExpr) { super(site); @@ -18693,7 +18693,7 @@ class ChainExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -18715,7 +18715,7 @@ class PrimitiveLiteralExpr extends ValueExpr { #primitive; /** - * @param {PrimitiveLiteral} primitive + * @param {PrimitiveLiteral} primitive */ constructor(primitive) { super(primitive.site); @@ -18747,11 +18747,11 @@ class PrimitiveLiteralExpr extends ValueExpr { return new ByteArrayType(this.#primitive.bytes.length == 32 ? 32 : null); } else { throw new Error("unhandled primitive type"); - } + } } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -18792,7 +18792,7 @@ class LiteralDataExpr extends ValueExpr { #data; /** - * @param {Site} site + * @param {Site} site * @param {Type} type * @param {UplcData} data */ @@ -18822,7 +18822,7 @@ class LiteralDataExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -18846,8 +18846,8 @@ class StructLiteralField { #value; /** - * @param {?Word} name - * @param {ValueExpr} value + * @param {?Word} name + * @param {ValueExpr} value */ constructor(name, value) { this.#name = name; @@ -18886,7 +18886,7 @@ class StructLiteralField { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ eval(scope) { @@ -18898,7 +18898,7 @@ class StructLiteralField { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -18917,8 +18917,8 @@ class StructLiteralExpr extends ValueExpr { #constrIndex; /** - * @param {TypeExpr} typeExpr - * @param {StructLiteralField[]} fields + * @param {TypeExpr} typeExpr + * @param {StructLiteralField[]} fields */ constructor(typeExpr, fields) { super(typeExpr.site); @@ -18941,8 +18941,8 @@ class StructLiteralExpr extends ValueExpr { } /** - * @param {Scope} scope - * @returns + * @param {Scope} scope + * @returns */ evalInternal(scope) { let type = this.#typeExpr.eval(scope); @@ -18959,7 +18959,7 @@ class StructLiteralExpr extends ValueExpr { for (let i = 0; i < this.#fields.length; i++) { let f = this.#fields[i]; - + let fieldVal = f.eval(scope); if (f.isNamed()) { @@ -18972,7 +18972,7 @@ class StructLiteralExpr extends ValueExpr { } else { // check the positional type let memberType = instance.getFieldType(f.site, i); - + if (!fieldVal.isInstanceOf(f.site, memberType)) { throw f.site.typeError(`wrong field type for field ${i.toString()}, expected ${memberType.toString()}, got ${fieldVal.getType(Site.dummy()).toString()}`); } @@ -19023,7 +19023,7 @@ class StructLiteralExpr extends ValueExpr { ]); } - // in case of a struct with only one field, return that field directly + // in case of a struct with only one field, return that field directly if (fields.length == 1 && this.#typeExpr.type instanceof StructStatementType) { return fIR; } @@ -19045,7 +19045,7 @@ class StructLiteralExpr extends ValueExpr { // regular struct return new IR([ new IR("__core__listData", this.site), - new IR("("), + new IR("("), res, new IR(")") ]); @@ -19068,9 +19068,9 @@ class ListLiteralExpr extends ValueExpr { #itemExprs; /** - * @param {Site} site - * @param {TypeExpr} itemTypeExpr - * @param {ValueExpr[]} itemExprs + * @param {Site} site + * @param {TypeExpr} itemTypeExpr + * @param {ValueExpr[]} itemExprs */ constructor(site, itemTypeExpr, itemExprs) { super(site); @@ -19116,13 +19116,13 @@ class ListLiteralExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { let isBool = this.#itemTypeExpr.type instanceof BoolType; - // unsure if list literals in untyped Plutus-core accept arbitrary terms, so we will use the more verbose constructor functions + // unsure if list literals in untyped Plutus-core accept arbitrary terms, so we will use the more verbose constructor functions let res = new IR("__core__mkNilData(())"); // starting from last element, keeping prepending a data version of that item @@ -19161,10 +19161,10 @@ class MapLiteralExpr extends ValueExpr { #pairExprs; /** - * @param {Site} site - * @param {TypeExpr} keyTypeExpr + * @param {Site} site + * @param {TypeExpr} keyTypeExpr * @param {TypeExpr} valueTypeExpr - * @param {[ValueExpr, ValueExpr][]} pairExprs + * @param {[ValueExpr, ValueExpr][]} pairExprs */ constructor(site, keyTypeExpr, valueTypeExpr, pairExprs) { super(site); @@ -19219,13 +19219,13 @@ class MapLiteralExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { let isBoolValue = this.#valueTypeExpr.type instanceof BoolType; - // unsure if list literals in untyped Plutus-core accept arbitrary terms, so we will use the more verbose constructor functions + // unsure if list literals in untyped Plutus-core accept arbitrary terms, so we will use the more verbose constructor functions let res = new IR("__core__mkNilPairData(())"); // starting from last element, keeping prepending a data version of that item @@ -19261,7 +19261,7 @@ class MapLiteralExpr extends ValueExpr { } /** - * NameTypePair is base class of FuncArg and DataField (differs from StructLiteralField) + * NameTypePair is base class of FuncArg and DataField (differs from StructLiteralField) * @package */ class NameTypePair { @@ -19269,8 +19269,8 @@ class NameTypePair { #typeExpr; /** - * @param {Word} name - * @param {?TypeExpr} typeExpr + * @param {Word} name + * @param {?TypeExpr} typeExpr */ constructor(name, typeExpr) { this.#name = name; @@ -19337,7 +19337,7 @@ class NameTypePair { /** * Evaluates the type, used by FuncLiteralExpr and DataDefinition - * @param {Scope} scope + * @param {Scope} scope * @returns {Type} */ evalType(scope) { @@ -19367,8 +19367,8 @@ class NameTypePair { */ class FuncArg extends NameTypePair { /** - * @param {Word} name - * @param {?TypeExpr} typeExpr + * @param {Word} name + * @param {?TypeExpr} typeExpr */ constructor(name, typeExpr) { super(name, typeExpr); @@ -19385,10 +19385,10 @@ class FuncLiteralExpr extends ValueExpr { #bodyExpr; /** - * @param {Site} site - * @param {FuncArg[]} args - * @param {(?TypeExpr)[]} retTypeExprs - * @param {ValueExpr} bodyExpr + * @param {Site} site + * @param {FuncArg[]} args + * @param {(?TypeExpr)[]} retTypeExprs + * @param {ValueExpr} bodyExpr */ constructor(site, args, retTypeExprs, bodyExpr) { super(site); @@ -19448,8 +19448,8 @@ class FuncLiteralExpr extends ValueExpr { } /** - * @param {Scope} scope - * @returns + * @param {Scope} scope + * @returns */ evalType(scope) { let args = this.#args; @@ -19470,12 +19470,12 @@ class FuncLiteralExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {FuncInstance} */ evalInternal(scope) { let fnType = this.evalType(scope); - + // argTypes is calculated separately again here so it includes self let argTypes = this.#args.map(a => a.evalType(scope)); @@ -19559,8 +19559,8 @@ class FuncLiteralExpr extends ValueExpr { } /** - * @param {?string} recursiveName - * @param {string} indent + * @param {?string} recursiveName + * @param {string} indent * @returns {IR} */ toIRInternal(recursiveName, indent = "") { @@ -19608,8 +19608,8 @@ class FuncLiteralExpr extends ValueExpr { } /** - * @param {string} recursiveName - * @param {string} indent + * @param {string} recursiveName + * @param {string} indent * @returns {IR} */ toIRRecursive(recursiveName, indent = "") { @@ -19617,7 +19617,7 @@ class FuncLiteralExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -19634,7 +19634,7 @@ class ValueRefExpr extends ValueExpr { #isRecursiveFunc; /** - * @param {Word} name + * @param {Word} name */ constructor(name) { super(name.site); @@ -19647,7 +19647,7 @@ class ValueRefExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -19669,7 +19669,7 @@ class ValueRefExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -19691,7 +19691,7 @@ class ValueRefExpr extends ValueExpr { new IR(")") ]); } - + return ir; } } @@ -19706,8 +19706,8 @@ class ValuePathExpr extends ValueExpr { #isRecursiveFunc; /** - * @param {TypeExpr} baseTypeExpr - * @param {Word} memberName + * @param {TypeExpr} baseTypeExpr + * @param {Word} memberName */ constructor(baseTypeExpr, memberName) { super(memberName.site); @@ -19757,7 +19757,7 @@ class ValuePathExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -19824,8 +19824,8 @@ class UnaryExpr extends ValueExpr { #a; /** - * @param {SymbolToken} op - * @param {ValueExpr} a + * @param {SymbolToken} op + * @param {ValueExpr} a */ constructor(op, a) { super(op.site); @@ -19857,7 +19857,7 @@ class UnaryExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -19874,7 +19874,7 @@ class UnaryExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -19900,9 +19900,9 @@ class BinaryExpr extends ValueExpr { #alt; // use alt (each operator can have one overload) /** - * @param {SymbolToken} op - * @param {ValueExpr} a - * @param {ValueExpr} b + * @param {SymbolToken} op + * @param {ValueExpr} a + * @param {ValueExpr} b */ constructor(op, a, b) { super(op.site); @@ -19913,7 +19913,7 @@ class BinaryExpr extends ValueExpr { this.#alt = false; } - /** + /** * @type {ValueExpr} */ get first() { @@ -19921,7 +19921,7 @@ class BinaryExpr extends ValueExpr { } /** - * @type {ValueExpr} + * @type {ValueExpr} */ get second() { return this.#swap ? this.#a : this.#b; @@ -19984,7 +19984,7 @@ class BinaryExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20038,7 +20038,7 @@ class BinaryExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20074,7 +20074,7 @@ class ParensExpr extends ValueExpr { #exprs; /** - * @param {Site} site + * @param {Site} site * @param {ValueExpr[]} exprs */ constructor(site, exprs) { @@ -20087,7 +20087,7 @@ class ParensExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20103,7 +20103,7 @@ class ParensExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20128,9 +20128,9 @@ class CallExpr extends ValueExpr { #argExprs; /** - * @param {Site} site - * @param {ValueExpr} fnExpr - * @param {ValueExpr[]} argExprs + * @param {Site} site + * @param {ValueExpr} fnExpr + * @param {ValueExpr[]} argExprs */ constructor(site, fnExpr, argExprs) { super(site); @@ -20155,7 +20155,7 @@ class CallExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20177,7 +20177,7 @@ class CallExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20256,9 +20256,9 @@ class MemberExpr extends ValueExpr { #isRecursiveFunc; /** - * @param {Site} site - * @param {ValueExpr} objExpr - * @param {Word} memberName + * @param {Site} site + * @param {ValueExpr} objExpr + * @param {Word} memberName */ constructor(site, objExpr, memberName) { super(site); @@ -20272,7 +20272,7 @@ class MemberExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20298,7 +20298,7 @@ class MemberExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20336,7 +20336,7 @@ class MemberExpr extends ValueExpr { } /** - * if-then-else expression + * if-then-else expression * @package */ class IfElseExpr extends ValueExpr { @@ -20344,9 +20344,9 @@ class IfElseExpr extends ValueExpr { #branches; /** - * @param {Site} site - * @param {ValueExpr[]} conditions - * @param {ValueExpr[]} branches + * @param {Site} site + * @param {ValueExpr[]} conditions + * @param {ValueExpr[]} branches */ constructor(site, conditions, branches) { assert(branches.length == conditions.length + 1); @@ -20420,7 +20420,7 @@ class IfElseExpr extends ValueExpr { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20441,10 +20441,10 @@ class IfElseExpr extends ValueExpr { let branchVal = b.eval(scope); branchMultiType = IfElseExpr.reduceBranchMultiType( - b.site, - branchMultiType, - (branchVal instanceof MultiInstance) ? - branchVal.values.map(v => v.getType(b.site)) : + b.site, + branchMultiType, + (branchVal instanceof MultiInstance) ? + branchVal.values.map(v => v.getType(b.site)) : [branchVal.getType(b.site)] ); } @@ -20467,7 +20467,7 @@ class IfElseExpr extends ValueExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20510,10 +20510,10 @@ class SwitchCase extends Token { #constrIndex; /** - * @param {Site} site + * @param {Site} site * @param {?Word} varName - optional * @param {Word} memberName - not optional - * @param {ValueExpr} bodyExpr + * @param {ValueExpr} bodyExpr */ constructor(site, varName, memberName, bodyExpr) { super(site); @@ -20565,7 +20565,7 @@ class SwitchCase extends Token { /** * Evaluates the switch type and body value of a case. * Evaluated switch type is only used if #varName !== null - * @param {Scope} scope + * @param {Scope} scope * @param {Type} enumType * @returns {Instance} */ @@ -20648,7 +20648,7 @@ class SwitchCase extends Token { /** * Accept an arg because will be called with the result of the controlexpr - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20668,10 +20668,10 @@ class UnconstrDataSwitchCase extends SwitchCase { #lstVarName; /** - * @param {Site} site - * @param {?Word} intVarName - * @param {?Word} lstVarName - * @param {ValueExpr} bodyExpr + * @param {Site} site + * @param {?Word} intVarName + * @param {?Word} lstVarName + * @param {ValueExpr} bodyExpr */ constructor(site, intVarName, lstVarName, bodyExpr) { super(site, null, new Word(site, "(Int, []Data)"), bodyExpr); @@ -20689,7 +20689,7 @@ class UnconstrDataSwitchCase extends SwitchCase { } /** - * @param {Scope} scope + * @param {Scope} scope * @param {Type} enumType * @returns {Instance} */ @@ -20727,7 +20727,7 @@ class UnconstrDataSwitchCase extends SwitchCase { /** * Accepts two args - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20764,7 +20764,7 @@ class SwitchDefault extends Token { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ eval(scope) { @@ -20776,7 +20776,7 @@ class SwitchDefault extends Token { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20796,7 +20796,7 @@ class SwitchExpr extends ValueExpr { #cases; #defaultCase; - /** + /** * @param {Site} site * @param {ValueExpr} controlExpr - input value of the switch * @param {SwitchCase[]} cases @@ -20844,7 +20844,7 @@ class SwitchExpr extends ValueExpr { */ class EnumSwitchExpr extends SwitchExpr { /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20862,11 +20862,11 @@ class EnumSwitchExpr extends SwitchExpr { for (let c of this.cases) { let branchVal = c.evalEnumMember(scope, enumType); - + branchMultiType = IfElseExpr.reduceBranchMultiType( - c.site, - branchMultiType, - (branchVal instanceof MultiInstance) ? + c.site, + branchMultiType, + (branchVal instanceof MultiInstance) ? branchVal.values.map(v => v.getType(c.site)) : [branchVal.getType(c.site)] ); @@ -20877,7 +20877,7 @@ class EnumSwitchExpr extends SwitchExpr { branchMultiType = IfElseExpr.reduceBranchMultiType( this.defaultCase.site, - branchMultiType, + branchMultiType, (defaultVal instanceof MultiInstance) ? defaultVal.values.map(v => v.getType(assertDefined(this.defaultCase).site)) : [defaultVal.getType(this.defaultCase.site)] @@ -20892,7 +20892,7 @@ class EnumSwitchExpr extends SwitchExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -20936,7 +20936,7 @@ class EnumSwitchExpr extends SwitchExpr { */ class DataSwitchExpr extends SwitchExpr { /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -20960,8 +20960,8 @@ class DataSwitchExpr extends SwitchExpr { let branchVal = c.evalDataMember(scope); branchMultiType = IfElseExpr.reduceBranchMultiType( - c.site, - branchMultiType, + c.site, + branchMultiType, (branchVal instanceof MultiInstance) ? branchVal.values.map(v => v.getType(c.site)) : [branchVal.getType(c.site)] @@ -20972,8 +20972,8 @@ class DataSwitchExpr extends SwitchExpr { let defaultVal = this.defaultCase.eval(scope); branchMultiType = IfElseExpr.reduceBranchMultiType( - this.defaultCase.site, - branchMultiType, + this.defaultCase.site, + branchMultiType, (defaultVal instanceof MultiInstance) ? defaultVal.values.map(v => v.getType(assertDefined(this.defaultCase).site)) : [defaultVal.getType(this.defaultCase.site)] @@ -20988,7 +20988,7 @@ class DataSwitchExpr extends SwitchExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {IR} */ toIR(indent = "") { @@ -21165,8 +21165,8 @@ function buildLiteralExprFromJson(site, type, value, path) { } return new MapLiteralExpr( - site, - new TypeExpr(site, type.keyType), + site, + new TypeExpr(site, type.keyType), new TypeExpr(site, type.valueType), pairs ); @@ -21214,7 +21214,7 @@ function buildLiteralExprFromJson(site, type, value, path) { * @package * @param {Site} site * @param {Type} type - expected type - * @param {UplcValue} value + * @param {UplcValue} value * @param {string} path - context for debugging * @returns {ValueExpr} */ @@ -21273,8 +21273,8 @@ function buildLiteralExprFromValue(site, type, value, path) { } return new MapLiteralExpr( - site, - new TypeExpr(site, type.keyType), + site, + new TypeExpr(site, type.keyType), new TypeExpr(site, type.valueType), pairs ); @@ -21328,8 +21328,8 @@ class Statement extends Token { #basePath; // set by the parent Module /** - * @param {Site} site - * @param {Word} name + * @param {Site} site + * @param {Word} name */ constructor(site, name) { super(site); @@ -21339,7 +21339,7 @@ class Statement extends Token { } /** - * @param {string} basePath + * @param {string} basePath */ setBasePath(basePath) { this.#basePath = basePath; @@ -21364,7 +21364,7 @@ class Statement extends Token { } /** - * @param {ModuleScope} scope + * @param {ModuleScope} scope */ eval(scope) { throw new Error("not yet implemented"); @@ -21390,7 +21390,7 @@ class Statement extends Token { /** * Returns IR of statement. * No need to specify indent here, because all statements are top-level - * @param {IRDefinitions} map + * @param {IRDefinitions} map */ toIR(map) { throw new Error("not yet implemented"); @@ -21405,13 +21405,13 @@ class ImportStatement extends Statement { #origName; #moduleName; - /** - * @type {?Statement} + /** + * @type {?Statement} */ #origStatement; /** - * @param {Site} site + * @param {Site} site * @param {Word} name * @param {Word} origName * @param {Word} moduleName @@ -21462,7 +21462,7 @@ class ImportStatement extends Statement { } /** - * @param {ModuleScope} scope + * @param {ModuleScope} scope */ eval(scope) { let v = this.evalInternal(scope); @@ -21487,7 +21487,7 @@ class ImportStatement extends Statement { } /** - * @param {IRDefinitions} map + * @param {IRDefinitions} map */ toIR(map) { // import statements only have a scoping function and don't do anything to the IR @@ -21510,10 +21510,10 @@ class ConstStatement extends Statement { #valueExpr; /** - * @param {Site} site - * @param {Word} name + * @param {Site} site + * @param {Word} name * @param {?TypeExpr} typeExpr - can be null in case of type inference - * @param {ValueExpr} valueExpr + * @param {ValueExpr} valueExpr */ constructor(site, name, typeExpr, valueExpr) { super(site, name); @@ -21530,7 +21530,7 @@ class ConstStatement extends Statement { } /** - * @param {string | UplcValue} value + * @param {string | UplcValue} value */ changeValue(value) { let type = this.type; @@ -21566,7 +21566,7 @@ class ConstStatement extends Statement { } /** - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -21594,7 +21594,7 @@ class ConstStatement extends Statement { /** * Evaluates rhs and adds to scope - * @param {TopScope} scope + * @param {TopScope} scope */ eval(scope) { scope.set(this.name, this.evalInternal(scope)); @@ -21621,11 +21621,11 @@ class ConstStatement extends Statement { this.#valueExpr.toIR(), new IR(")") ]) - + } /** - * @param {IRDefinitions} map + * @param {IRDefinitions} map */ toIR(map) { map.set(this.path, this.toIRInternal()); @@ -21638,8 +21638,8 @@ class ConstStatement extends Statement { */ class DataField extends NameTypePair { /** - * @param {Word} name - * @param {TypeExpr} typeExpr + * @param {Word} name + * @param {TypeExpr} typeExpr */ constructor(name, typeExpr) { super(name, typeExpr); @@ -21654,9 +21654,9 @@ class DataDefinition extends Statement { #fields; /** - * @param {Site} site - * @param {Word} name - * @param {DataField[]} fields + * @param {Site} site + * @param {Word} name + * @param {DataField[]} fields */ constructor(site, name, fields) { super(site, name); @@ -21670,7 +21670,7 @@ class DataDefinition extends Statement { /** * Returns index of a field. * Returns -1 if not found. - * @param {Word} name + * @param {Word} name * @returns {number} */ findField(name) { @@ -21688,7 +21688,7 @@ class DataDefinition extends Statement { } /** - * @param {Word} name + * @param {Word} name * @returns {boolean} */ hasField(name) { @@ -21713,7 +21713,7 @@ class DataDefinition extends Statement { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -21721,8 +21721,8 @@ class DataDefinition extends Statement { } /** - * @param {Site} site - * @param {number} i + * @param {Site} site + * @param {number} i * @returns {Type} */ getFieldType(site, i) { @@ -21730,8 +21730,8 @@ class DataDefinition extends Statement { } /** - * @param {Site} site - * @param {string} name + * @param {Site} site + * @param {string} name * @returns {number} */ getFieldIndex(site, name) { @@ -21751,9 +21751,9 @@ class DataDefinition extends Statement { getFieldName(i) { return this.#fields[i].name.toString(); } - + /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -21761,7 +21761,7 @@ class DataDefinition extends Statement { } /** - * @param {Word} name + * @param {Word} name * @returns {EvalEntity} */ getTypeMember(name) { @@ -21775,8 +21775,8 @@ class DataDefinition extends Statement { /** * Gets insance member value. * If dryRun == true usage is triggered - * @param {Word} name - * @param {boolean} dryRun + * @param {Word} name + * @param {boolean} dryRun * @returns {Instance} */ getInstanceMember(name, dryRun = false) { @@ -21792,7 +21792,7 @@ class DataDefinition extends Statement { use() { if (!this.used) { super.use(); - + for (let f of this.#fields) { f.use(); } @@ -21866,9 +21866,9 @@ class StructStatement extends DataDefinition { #impl; /** - * @param {Site} site - * @param {Word} name - * @param {DataField[]} fields + * @param {Site} site + * @param {Word} name + * @param {DataField[]} fields * @param {ImplDefinition} impl */ constructor(site, name, fields, impl) { @@ -21887,7 +21887,7 @@ class StructStatement extends DataDefinition { /** * Returns -1, which means -> don't use ConstrData, but use []Data directly - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -21896,7 +21896,7 @@ class StructStatement extends DataDefinition { /** * Evaluates own type and adds to scope - * @param {TopScope} scope + * @param {TopScope} scope */ eval(scope) { if (scope.isStrict() && this.fields.length == 0) { @@ -21913,8 +21913,8 @@ class StructStatement extends DataDefinition { } /** - * @param {Word} name - * @param {boolean} dryRun + * @param {Word} name + * @param {boolean} dryRun * @returns {Instance} */ getInstanceMember(name, dryRun = false) { @@ -21976,9 +21976,9 @@ class FuncStatement extends Statement { #recursive; /** - * @param {Site} site - * @param {Word} name - * @param {FuncLiteralExpr} funcExpr + * @param {Site} site + * @param {Word} name + * @param {FuncLiteralExpr} funcExpr */ constructor(site, name, funcExpr) { super(site, name); @@ -22013,7 +22013,7 @@ class FuncStatement extends Statement { /** * Evaluates a function and returns a func value - * @param {Scope} scope + * @param {Scope} scope * @returns {Instance} */ evalInternal(scope) { @@ -22023,7 +22023,7 @@ class FuncStatement extends Statement { /** * Evaluates type of a funtion. * Separate from evalInternal so we can use this function recursively inside evalInternal - * @param {Scope} scope + * @param {Scope} scope * @returns {FuncType} */ evalType(scope) { @@ -22050,7 +22050,7 @@ class FuncStatement extends Statement { } /** - * @param {Scope} scope + * @param {Scope} scope */ eval(scope) { // add to scope before evaluating, to allow recursive calls @@ -22078,14 +22078,14 @@ class FuncStatement extends Statement { } /** - * @param {IRDefinitions} map + * @param {IRDefinitions} map */ toIR(map) { map.set(this.path, this.toIRInternal()); } /** - * @param {Statement} s + * @param {Statement} s * @returns {boolean} */ static isMethod(s) { @@ -22118,7 +22118,7 @@ class EnumMember extends DataDefinition { this.#constrIndex = null; } - /** + /** * @param {EnumStatement} parent * @param {number} i */ @@ -22126,7 +22126,7 @@ class EnumMember extends DataDefinition { this.#parent = parent; this.#constrIndex = i; } - + /** * @type {EnumStatement} */ @@ -22143,7 +22143,7 @@ class EnumMember extends DataDefinition { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -22155,7 +22155,7 @@ class EnumMember extends DataDefinition { } /** - * @param {Scope} scope + * @param {Scope} scope */ eval(scope) { if (this.#parent === null) { @@ -22166,8 +22166,8 @@ class EnumMember extends DataDefinition { } /** - * @param {Word} name - * @param {boolean} dryRun + * @param {Word} name + * @param {boolean} dryRun * @returns {Instance} */ getInstanceMember(name, dryRun = false) { @@ -22196,16 +22196,16 @@ class EnumStatement extends Statement { #impl; /** - * @param {Site} site - * @param {Word} name - * @param {EnumMember[]} members + * @param {Site} site + * @param {Word} name + * @param {EnumMember[]} members * @param {ImplDefinition} impl */ constructor(site, name, members, impl) { super(site, name); this.#members = members; this.#impl = impl; - + for (let i = 0; i < this.#members.length; i++) { this.#members[i].registerParent(this, i); } @@ -22218,7 +22218,7 @@ class EnumStatement extends Statement { /** * Returns index of enum member. * Returns -1 if not found - * @param {Word} name + * @param {Word} name * @returns {number} */ // returns an index @@ -22237,7 +22237,7 @@ class EnumStatement extends Statement { } /** - * @param {Site} site + * @param {Site} site * @param {number} i * @returns {EnumMember} */ @@ -22258,7 +22258,7 @@ class EnumStatement extends Statement { } /** - * @param {Scope} scope + * @param {Scope} scope */ eval(scope) { scope.set(this.name, this.type); @@ -22281,7 +22281,7 @@ class EnumStatement extends Statement { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nFields(site) { @@ -22298,8 +22298,8 @@ class EnumStatement extends Statement { } /**f - * @param {Site} site - * @param {string} name + * @param {Site} site + * @param {string} name * @returns {number} */ getFieldIndex(site, name) { @@ -22307,24 +22307,24 @@ class EnumStatement extends Statement { } /** - * @param {number} i + * @param {number} i * @returns {string} */ getFieldName(i) { throw Site.dummy().typeError("enum doesn't have fields"); } - + /** - * @param {Word} name + * @param {Word} name * @returns {boolean} */ hasField(name) { throw name.site.typeError("enum doesn't have fields"); } - /** - * @param {Word} name - * @param {boolean} dryRun + /** + * @param {Word} name + * @param {boolean} dryRun * @returns {Instance} */ getInstanceMember(name, dryRun = false) { @@ -22336,7 +22336,7 @@ class EnumStatement extends Statement { } /** - * @param {Word} name + * @param {Word} name * @param {boolean} dryRun * @returns {EvalEntity} */ @@ -22350,7 +22350,7 @@ class EnumStatement extends Statement { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ getConstrIndex(site) { @@ -22358,7 +22358,7 @@ class EnumStatement extends Statement { } /** - * @param {Site} site + * @param {Site} site * @returns {number} */ nEnumMembers(site) { @@ -22375,7 +22375,7 @@ class EnumStatement extends Statement { } /** - * @param {IRDefinitions} map + * @param {IRDefinitions} map */ toIR(map) { for (let member of this.#members) { @@ -22402,7 +22402,7 @@ class ImplDefinition { /** * @param {TypeRefExpr} selfTypeExpr; - * @param {(FuncStatement | ConstStatement)[]} statements + * @param {(FuncStatement | ConstStatement)[]} statements */ constructor(selfTypeExpr, statements) { this.#selfTypeExpr = selfTypeExpr; @@ -22416,7 +22416,7 @@ class ImplDefinition { } /** - * @param {Scope} scope + * @param {Scope} scope */ eval(scope) { let selfType = this.#selfTypeExpr.eval(scope); @@ -22476,10 +22476,10 @@ class ImplDefinition { throw name.referenceError(`'${this.#selfTypeExpr.toString()}.${name.toString()}' undefined`); } } - + /** - * @param {Word} name - * @param {boolean} dryRun + * @param {Word} name + * @param {boolean} dryRun * @returns {EvalEntity} */ getTypeMember(name, dryRun = false) { @@ -22527,7 +22527,7 @@ class ImplDefinition { /** * Returns IR of all impl members - * @param {IRDefinitions} map + * @param {IRDefinitions} map */ toIR(map) { let path = this.#selfTypeExpr.path; @@ -22600,7 +22600,7 @@ function buildProgramStatements(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {[number, Word]} - [purpose, name] (ScriptPurpose is an integer) * @package */ @@ -22637,7 +22637,7 @@ function buildScriptPurpose(ts) { /** * Parses Helios quickly to extract the script purpose header. * Returns null if header is missing or incorrectly formed (instead of throwing an error) - * @param {string} rawSrc + * @param {string} rawSrc * @returns {?[string, string]} - [purpose, name] */ export function extractScriptPurposeAndName(rawSrc) { @@ -22673,8 +22673,8 @@ export function extractScriptPurposeAndName(rawSrc) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @returns {ConstStatement} */ function buildConstStatement(site, ts) { @@ -22730,8 +22730,8 @@ function splitDataImpl(ts) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @returns {StructStatement} */ function buildStructStatement(site, ts) { @@ -22765,7 +22765,7 @@ function buildStructStatement(site, ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {DataField[]} */ function buildDataFields(ts) { @@ -22827,8 +22827,8 @@ function buildDataFields(ts) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @param {?TypeExpr} methodOf - methodOf !== null then first arg can be named 'self' * @returns {FuncStatement} */ @@ -22846,7 +22846,7 @@ function buildFuncStatement(site, ts, methodOf = null) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @param {?TypeExpr} methodOf - methodOf !== null then first arg can be named 'self' * @param {boolean} allowInferredRetType * @returns {FuncLiteralExpr} @@ -22874,7 +22874,7 @@ function buildFuncLiteralExpr(ts, methodOf = null, allowInferredRetType = false) /** * @package - * @param {Group} parens + * @param {Group} parens * @param {?TypeExpr} methodOf - methodOf !== nul then first arg can be named 'self' * @returns {FuncArg[]} */ @@ -22953,8 +22953,8 @@ function buildFuncArgs(parens, methodOf = null) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @returns {EnumStatement} */ function buildEnumStatement(site, ts) { @@ -22997,8 +22997,8 @@ function buildEnumStatement(site, ts) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @returns {ImportStatement[]} */ function buildImportStatements(site, ts) { @@ -23069,7 +23069,7 @@ function buildImportStatements(site, ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {EnumMember} */ function buildEnumMember(ts) { @@ -23086,9 +23086,9 @@ function buildEnumMember(ts) { } } -/** +/** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @param {TypeRefExpr} selfTypeExpr - reference to parent type * @param {Word[]} fieldNames - to check if impl statements have a unique name * @param {?Site} endSite @@ -23096,7 +23096,7 @@ function buildEnumMember(ts) { */ function buildImplDefinition(ts, selfTypeExpr, fieldNames, endSite) { /** - * @param {Word} name + * @param {Word} name */ function assertNonAuto(name) { if (name.toString() == "serialize" || name.toString() == "__eq" || name.toString() == "__neq" || name.toString() == "from_data") { @@ -23110,8 +23110,8 @@ function buildImplDefinition(ts, selfTypeExpr, fieldNames, endSite) { const statements = buildImplMembers(ts, selfTypeExpr); - /** - * @param {number} i + /** + * @param {number} i */ function assertUnique(i) { let s = statements[i]; @@ -23146,7 +23146,7 @@ function buildImplDefinition(ts, selfTypeExpr, fieldNames, endSite) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @param {TypeExpr} methodOf * @returns {(ConstStatement | FuncStatement)[]} */ @@ -23176,7 +23176,7 @@ function buildImplMembers(ts, methodOf) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {TypeExpr} */ function buildTypeExpr(ts) { @@ -23201,7 +23201,7 @@ function buildTypeExpr(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {ListTypeExpr} */ function buildListTypeExpr(ts) { @@ -23214,7 +23214,7 @@ function buildListTypeExpr(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {MapTypeExpr} */ function buildMapTypeExpr(ts) { @@ -23244,7 +23244,7 @@ function buildMapTypeExpr(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {TypeExpr} */ function buildOptionTypeExpr(ts) { @@ -23270,7 +23270,7 @@ function buildOptionTypeExpr(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {FuncTypeExpr} */ function buildFuncTypeExpr(ts) { @@ -23287,8 +23287,8 @@ function buildFuncTypeExpr(ts) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @param {boolean} allowInferredRetType * @returns {(?TypeExpr)[]} */ @@ -23322,7 +23322,7 @@ function buildFuncRetTypeExprs(site, ts, allowInferredRetType = false) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {TypePathExpr} */ function buildTypePathExpr(ts) { @@ -23341,7 +23341,7 @@ function buildTypePathExpr(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {TypeRefExpr} */ function buildTypeRefExpr(ts) { @@ -23356,8 +23356,8 @@ function buildTypeRefExpr(ts) { /** * @package - * @param {Token[]} ts - * @param {number} prec + * @param {Token[]} ts + * @param {number} prec * @returns {ValueExpr} */ function buildValueExpr(ts, prec = 0) { @@ -23368,9 +23368,9 @@ function buildValueExpr(ts, prec = 0) { const exprBuilders = [ /** * 0: lowest precedence is assignment - * @param {Token[]} ts_ - * @param {number} prec_ - * @returns + * @param {Token[]} ts_ + * @param {number} prec_ + * @returns */ function (ts_, prec_) { return buildMaybeAssignOrPrintExpr(ts_, prec_); @@ -23384,9 +23384,9 @@ function buildValueExpr(ts, prec = 0) { makeUnaryExprBuilder(['!', '+', '-']), // 7: logical not, negate /** * 8: variables or literal values chained with: (enum)member access, indexing and calling - * @param {Token[]} ts_ - * @param {number} prec_ - * @returns + * @param {Token[]} ts_ + * @param {number} prec_ + * @returns */ function (ts_, prec_) { return buildChainedValueExpr(ts_, prec_); @@ -23437,7 +23437,7 @@ function buildMaybeAssignOrPrintExpr(ts, prec) { const lts = ts.splice(0, equalsPos); const lhs = buildAssignLhs(equalsSite, lts); - + assertDefined(ts.shift()).assertSymbol("="); semicolonPos = SymbolToken.find(ts, ";"); @@ -23495,8 +23495,8 @@ function buildMaybeAssignOrPrintExpr(ts, prec) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @returns {NameTypePair[]} */ function buildAssignLhs(site, ts) { @@ -23554,11 +23554,11 @@ function buildAssignLhs(site, ts) { name.assertNotKeyword(); const maybeColon = fts.shift(); - + if (maybeColon === undefined) { throw name.syntaxError(`expected ':' after '${name.toString()}'`); } - + const colon = maybeColon.assertSymbol(":"); if (fts.length === 0) { @@ -23591,7 +23591,7 @@ function buildAssignLhs(site, ts) { /** * @package - * @param {string | string[]} symbol + * @param {string | string[]} symbol * @returns {(ts: Token[], prec: number) => ValueExpr} */ function makeBinaryExprBuilder(symbol) { @@ -23615,7 +23615,7 @@ function makeBinaryExprBuilder(symbol) { /** * @package - * @param {string | string[]} symbol + * @param {string | string[]} symbol * @returns {(ts: Token[], prec: number) => ValueExpr} */ function makeUnaryExprBuilder(symbol) { @@ -23633,8 +23633,8 @@ function makeUnaryExprBuilder(symbol) { /** * @package - * @param {Token[]} ts - * @param {number} prec + * @param {Token[]} ts + * @param {number} prec * @returns {ValueExpr} */ function buildChainedValueExpr(ts, prec) { @@ -23669,7 +23669,7 @@ function buildChainedValueExpr(ts, prec) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {ValueExpr} */ function buildChainStartValueExpr(ts) { @@ -23687,7 +23687,7 @@ function buildChainStartValueExpr(ts) { if (ts[0].isGroup("[")) { return buildListLiteralExpr(ts); } else if (ts[0].isWord("Map") && ts[1].isGroup("[")) { - return buildMapLiteralExpr(ts); + return buildMapLiteralExpr(ts); } else { // could be switch or literal struct construction const iBraces = Group.find(ts, "{"); @@ -23734,7 +23734,7 @@ function buildParensExpr(ts) { /** * @package - * @param {Group} parens + * @param {Group} parens * @returns {ValueExpr[]} */ function buildCallArgs(parens) { @@ -23743,7 +23743,7 @@ function buildCallArgs(parens) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {IfElseExpr} */ function buildIfElseExpr(ts) { @@ -23803,7 +23803,7 @@ function buildIfElseExpr(ts) { /** * @package * @param {ValueExpr} controlExpr - * @param {Token[]} ts + * @param {Token[]} ts * @returns {ValueExpr} - EnumSwitchExpr or DataSwitchExpr */ function buildSwitchExpr(controlExpr, ts) { @@ -23876,7 +23876,7 @@ function buildSwitchExpr(controlExpr, ts) { * @param {Site} site * @param {Token[]} ts * @param {boolean} isAfterColon - * @returns {Word} + * @returns {Word} */ function buildSwitchCaseName(site, ts, isAfterColon) { const first = ts.shift(); @@ -23888,7 +23888,7 @@ function buildSwitchCaseName(site, ts, isAfterColon) { throw site.syntaxError("invalid switch case syntax"); } } - + if (first.isWord("Map")) { const second = ts.shift(); @@ -23930,7 +23930,7 @@ function buildSwitchCaseName(site, ts, isAfterColon) { return first.assertWord().assertNotKeyword(); } else if (first.isGroup("[")) { - // list + // list first.assertGroup("[", 0); const second = ts.shift(); @@ -23951,7 +23951,7 @@ function buildSwitchCaseName(site, ts, isAfterColon) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {SwitchCase} */ function buildSwitchCase(ts) { @@ -23974,7 +23974,7 @@ function buildSwitchCase(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {[?Word, Word]} - varName is optional */ function buildSwitchCaseNameType(ts) { @@ -23988,7 +23988,7 @@ function buildSwitchCaseNameType(ts) { if (colonPos != -1) { varName = assertDefined(ts.shift()).assertWord().assertNotKeyword(); - + const maybeColon = ts.shift(); if (maybeColon === undefined) { throw varName.syntaxError("invalid switch case syntax, expected '(: )', got '()'"); @@ -24046,14 +24046,14 @@ function buildMultiArgSwitchCase(tsLeft, ts) { /** * @package - * @param {Token[]} tsLeft - * @param {Token[]} ts + * @param {Token[]} tsLeft + * @param {Token[]} ts * @returns {SwitchCase} */ function buildSingleArgSwitchCase(tsLeft, ts) { /** @type {[?Word, Word]} */ const [varName, memberName] = buildSwitchCaseNameType(tsLeft); - + const maybeArrow = ts.shift(); if (maybeArrow === undefined) { @@ -24069,8 +24069,8 @@ function buildSingleArgSwitchCase(tsLeft, ts) { /** * @package - * @param {Site} site - * @param {Token[]} ts + * @param {Site} site + * @param {Token[]} ts * @returns {ValueExpr} */ function buildSwitchCaseBody(site, ts) { @@ -24099,7 +24099,7 @@ function buildSwitchCaseBody(site, ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {SwitchDefault} */ function buildSwitchDefault(ts) { @@ -24135,7 +24135,7 @@ function buildSwitchDefault(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {ListLiteralExpr} */ function buildListLiteralExpr(ts) { @@ -24211,7 +24211,7 @@ function buildMapLiteralExpr(ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {StructLiteralExpr} */ function buildStructLiteralExpr(ts) { @@ -24270,7 +24270,7 @@ function buildStructLiteralField(bracesSite, ts) { /** * @package - * @param {Token[]} ts + * @param {Token[]} ts * @returns {ValueExpr} */ function buildValuePathExpr(ts) { @@ -24283,7 +24283,7 @@ function buildValuePathExpr(ts) { assertDefined(ts.shift()).assertSymbol("::"); const memberName = assertDefined(ts.shift()).assertWord().assertNotKeyword(); - + return new ValuePathExpr(typeExpr, memberName); } @@ -24300,7 +24300,7 @@ var onNotifyRawUsage = null; /** * Set the statistics collector (used by the test-suite) - * @param {(name: string, count: number) => void} callback + * @param {(name: string, count: number) => void} callback */ function setRawUsageNotifier(callback) { onNotifyRawUsage = callback; @@ -24318,8 +24318,8 @@ class RawFunc { /** * Construct a RawFunc, and immediately scan the definition for dependencies - * @param {string} name - * @param {string} definition + * @param {string} name + * @param {string} definition */ constructor(name, definition) { this.#name = name; @@ -24344,8 +24344,8 @@ class RawFunc { /** * Loads 'this.#dependecies' (if not already loaded), then load 'this' - * @param {Map} db - * @param {Map} dst + * @param {Map} db + * @param {Map} dst * @returns {void} */ load(db, dst) { @@ -24381,7 +24381,7 @@ function makeRawFunctions() { // local utility functions /** - * @param {RawFunc} fn + * @param {RawFunc} fn */ function add(fn) { if (db.has(fn.name)) { @@ -24392,7 +24392,7 @@ function makeRawFunctions() { /** * Adds basic auto members to a fully named type - * @param {string} ns + * @param {string} ns */ function addDataFuncs(ns) { add(new RawFunc(`${ns}____eq`, "__helios__common____eq")); @@ -24403,7 +24403,7 @@ function makeRawFunctions() { /** * Adds basic auto members to a fully named enum type - * @param {string} ns + * @param {string} ns */ function addEnumDataFuncs(ns) { add(new RawFunc(`${ns}____eq`, "__helios__common____eq")); @@ -24414,9 +24414,9 @@ function makeRawFunctions() { /** * Generates the IR needed to unwrap a Plutus-core constrData * @param {string} dataExpr - * @param {number} iConstr - * @param {number} iField - * @param {string} errorExpr + * @param {number} iConstr + * @param {number} iField + * @param {string} errorExpr * @returns {string} */ function unData(dataExpr, iConstr, iField, errorExpr = "error(\"unexpected constructor index\")") { @@ -24449,9 +24449,9 @@ function makeRawFunctions() { /** * Generates IR for constructing a list. * By default the result is kept as list, and not converted to data - * @param {string[]} args - * @param {boolean} toData - * @returns + * @param {string[]} args + * @param {boolean} toData + * @returns */ function makeList(args, toData = false) { let n = args.length; @@ -24519,12 +24519,12 @@ function makeRawFunctions() { }( (recurse, self, fn) -> { __core__ifThenElse( - __core__nullList(self), - () -> {false}, + __core__nullList(self), + () -> {false}, () -> { __core__ifThenElse( fn(__core__headList(self)), - () -> {true}, + () -> {true}, () -> {recurse(recurse, __core__tailList(self), fn)} )() } @@ -24532,7 +24532,7 @@ function makeRawFunctions() { } ) }`)); - add(new RawFunc("__helios__common__all", + add(new RawFunc("__helios__common__all", `(self, fn) -> { (recurse) -> { recurse(recurse, self, fn) @@ -24563,7 +24563,7 @@ function makeRawFunctions() { () -> {lst}, () -> { __core__mkCons( - fn(__core__headList(rem)), + fn(__core__headList(rem)), recurse(recurse, __core__tailList(rem), lst) ) } @@ -24571,19 +24571,19 @@ function makeRawFunctions() { } ) }`)); - add(new RawFunc("__helios__common__filter", + add(new RawFunc("__helios__common__filter", `(self, fn, nil) -> { (recurse) -> { recurse(recurse, self, fn) }( (recurse, self, fn) -> { __core__ifThenElse( - __core__nullList(self), - () -> {nil}, + __core__nullList(self), + () -> {nil}, () -> { __core__ifThenElse( fn(__core__headList(self)), - () -> {__core__mkCons(__core__headList(self), recurse(recurse, __core__tailList(self), fn))}, + () -> {__core__mkCons(__core__headList(self), recurse(recurse, __core__tailList(self), fn))}, () -> {recurse(recurse, __core__tailList(self), fn)} )() } @@ -24591,7 +24591,7 @@ function makeRawFunctions() { } ) }`)); - add(new RawFunc("__helios__common__filter_list", + add(new RawFunc("__helios__common__filter_list", `(self, fn) -> { __helios__common__filter(self, fn, __helios__common__list_0) }`)); @@ -24606,12 +24606,12 @@ function makeRawFunctions() { }( (recurse, self, fn) -> { __core__ifThenElse( - __core__nullList(self), - () -> {error("not found")}, + __core__nullList(self), + () -> {error("not found")}, () -> { __core__ifThenElse( - fn(__core__headList(self)), - () -> {callback(__core__headList(self))}, + fn(__core__headList(self)), + () -> {callback(__core__headList(self))}, () -> {recurse(recurse, __core__tailList(self), fn)} )() } @@ -24626,12 +24626,12 @@ function makeRawFunctions() { }( (recurse, self, fn) -> { __core__ifThenElse( - __core__nullList(self), - () -> {__core__constrData(1, __helios__common__list_0)}, + __core__nullList(self), + () -> {__core__constrData(1, __helios__common__list_0)}, () -> { __core__ifThenElse( - fn(__core__headList(self)), - () -> {__core__constrData(0, __helios__common__list_1(callback(__core__headList(self))))}, + fn(__core__headList(self)), + () -> {__core__constrData(0, __helios__common__list_1(callback(__core__headList(self))))}, () -> {recurse(recurse, __core__tailList(self), fn)} )() } @@ -24646,8 +24646,8 @@ function makeRawFunctions() { }( (recurse, self, fn, z) -> { __core__ifThenElse( - __core__nullList(self), - () -> {z}, + __core__nullList(self), + () -> {z}, () -> {recurse(recurse, __core__tailList(self), fn, fn(z, __core__headList(self)))} )() } @@ -24660,8 +24660,8 @@ function makeRawFunctions() { }( (recurse, self, fn, z) -> { __core__ifThenElse( - __core__nullList(self), - () -> {z}, + __core__nullList(self), + () -> {z}, () -> {fn(__core__headList(self), () -> {recurse(recurse, __core__tailList(self), fn, z)})} )() } @@ -24689,7 +24689,7 @@ function makeRawFunctions() { } ) }`)); - add(new RawFunc("__helios__common__sort", + add(new RawFunc("__helios__common__sort", `(lst, comp) -> { (recurse) -> { recurse(recurse, lst) @@ -24715,12 +24715,12 @@ function makeRawFunctions() { }( (recurse, self, key) -> { __core__ifThenElse( - __core__nullList(self), - fnNotFound, + __core__nullList(self), + fnNotFound, () -> { __core__ifThenElse( - __core__equalsData(key, __core__fstPair(__core__headList(self))), - () -> {fnFound(__core__sndPair(__core__headList(self)))}, + __core__equalsData(key, __core__fstPair(__core__headList(self))), + () -> {fnFound(__core__sndPair(__core__headList(self)))}, () -> {recurse(recurse, __core__tailList(self), key)} )() } @@ -24736,8 +24736,8 @@ function makeRawFunctions() { add(new RawFunc("__helios__common__unBoolData", `(d) -> { __core__ifThenElse( - __core__equalsInteger(__core__fstPair(__core__unConstrData(d)), 0), - false, + __core__equalsInteger(__core__fstPair(__core__unConstrData(d)), 0), + false, true ) }`)); @@ -24753,15 +24753,15 @@ function makeRawFunctions() { `(s) -> { __core__bData(__core__encodeUtf8(s)) }`)); - add(new RawFunc("__helios__common__length", + add(new RawFunc("__helios__common__length", `(lst) -> { (recurse) -> { __core__iData(recurse(recurse, lst)) }( (recurse, lst) -> { __core__ifThenElse( - __core__nullList(lst), - () -> {0}, + __core__nullList(lst), + () -> {0}, () -> {__core__addInteger(recurse(recurse, __core__tailList(lst)), 1)} )() } @@ -24775,7 +24775,7 @@ function makeRawFunctions() { a ) }`)); - add(new RawFunc("__helios__common__min", + add(new RawFunc("__helios__common__min", `(a, b) -> { __core__ifThenElse( __core__lessThanEqualsInteger(a, b), @@ -24783,7 +24783,7 @@ function makeRawFunctions() { b ) }`)); - add(new RawFunc("__helios__common__concat", + add(new RawFunc("__helios__common__concat", `(a, b) -> { (recurse) -> { recurse(recurse, b, a) @@ -24835,7 +24835,7 @@ function makeRawFunctions() { }(__core__unBData(self)) } }`)); - add(new RawFunc("__helios__common__starts_with", + add(new RawFunc("__helios__common__starts_with", `(self, selfLengthFn) -> { (self) -> { (prefix) -> { @@ -24871,11 +24871,11 @@ function makeRawFunctions() { } }(__core__unBData(self)) }`)); - add(new RawFunc("__helios__common__fields", + add(new RawFunc("__helios__common__fields", `(self) -> { __core__sndPair(__core__unConstrData(self)) }`)); - add(new RawFunc("__helios__common__field_0", + add(new RawFunc("__helios__common__field_0", `(self) -> { __core__headList(__helios__common__fields(self)) }`)); @@ -24897,7 +24897,7 @@ function makeRawFunctions() { `(self) -> { __core__headList(__core__unListData(self)) }`)); - add(new RawFunc("__helios__common__tuple_fields_after_0", + add(new RawFunc("__helios__common__tuple_fields_after_0", `(self) -> { __core__tailList(__core__unListData(self)) }`)); @@ -24912,7 +24912,7 @@ function makeRawFunctions() { }`)); } add(new RawFunc("__helios__common__list_0", "__core__mkNilData(())")); - add(new RawFunc("__helios__common__list_1", + add(new RawFunc("__helios__common__list_1", `(a) -> { __core__mkCons(a, __helios__common__list_0) }`)); @@ -24934,21 +24934,21 @@ function makeRawFunctions() { __core__mkCons(${first}, __helios__common__list_${(i-1).toString()}(${woFirst.join(", ")})) }`)); } - add(new RawFunc("__helios__common__hash_datum_data", + add(new RawFunc("__helios__common__hash_datum_data", `(data) -> { __core__bData(__core__blake2b_256(__core__serialiseData(data))) }`)); // Global builtin functions - add(new RawFunc("__helios__print", + add(new RawFunc("__helios__print", `(msg) -> { __core__trace(__helios__common__unStringData(msg), ()) }`)); add(new RawFunc("__helios__error", `(msg) -> { __core__trace( - __helios__common__unStringData(msg), + __helios__common__unStringData(msg), () -> { error("error thrown by user-code") } @@ -25122,10 +25122,10 @@ function makeRawFunctions() { }( __core__consByteString( __core__ifThenElse( - __core__lessThanInteger(partial, 10), - __core__addInteger(partial, 48), + __core__lessThanInteger(partial, 10), + __core__addInteger(partial, 48), __core__addInteger(partial, 87) - ), + ), # ) ) @@ -25235,7 +25235,7 @@ function makeRawFunctions() { recurse(recurse, new_acc, __core__addInteger(i, 1)) }( __core__addInteger( - __core__multiplyInteger(acc, 10), + __core__multiplyInteger(acc, 10), __helios__int__parse_digit(__core__indexByteString(bytes, i)) ) ) @@ -25247,7 +25247,7 @@ function makeRawFunctions() { ) }(__core__unBData(string)) }`)); - add(new RawFunc("__helios__int__from_little_endian", + add(new RawFunc("__helios__int__from_little_endian", `(bytes) -> { (bytes) -> { __core__iData( @@ -25281,7 +25281,7 @@ function makeRawFunctions() { // Bool builtins - add(new RawFunc(`__helios__bool____eq`, + add(new RawFunc(`__helios__bool____eq`, `(a) -> { (b) -> { __core__ifThenElse(a, b, __helios__common__not(b)) @@ -25293,7 +25293,7 @@ function makeRawFunctions() { __core__ifThenElse(a, __helios__common__not(b), b) } }`)); - add(new RawFunc(`__helios__bool__serialize`, + add(new RawFunc(`__helios__bool__serialize`, `(self) -> { __helios__common__serialize(__helios__common__boolData(self)) }`)); @@ -25304,15 +25304,15 @@ function makeRawFunctions() { add(new RawFunc("__helios__bool__and", `(a, b) -> { __core__ifThenElse( - a(), - () -> {b()}, + a(), + () -> {b()}, () -> {false} )() }`)); add(new RawFunc("__helios__bool__or", `(a, b) -> { __core__ifThenElse( - a(), + a(), () -> {true}, () -> {b()} )() @@ -25343,7 +25343,7 @@ function makeRawFunctions() { __helios__string____add(prefix)( __helios__bool__show(self)() ) - ), + ), self ) } @@ -25422,7 +25422,7 @@ function makeRawFunctions() { `(self) -> { __helios__common__slice_bytearray(self, __core__lengthOfByteString) }`)); - add(new RawFunc("__helios__bytearray__starts_with", + add(new RawFunc("__helios__bytearray__starts_with", `(self) -> { __helios__common__starts_with(self, __core__lengthOfByteString) }`)); @@ -25481,7 +25481,7 @@ function makeRawFunctions() { __core__consByteString(48, hexBytes), hexBytes ) - }(__core__unBData(__helios__int__to_hex(__core__iData(__core__indexByteString(self, 0)))()))), + }(__core__unBData(__helios__int__to_hex(__core__iData(__core__indexByteString(self, 0)))()))), recurse(recurse, __core__sliceByteString(1, n, self)) ) }, @@ -25500,15 +25500,15 @@ function makeRawFunctions() { add(new RawFunc("__helios__bytearray32__serialize", "__helios__bytearray__serialize")); add(new RawFunc("__helios__bytearray32____add", "__helios__bytearray____add")); add(new RawFunc("__helios__bytearray32__length", "(_) -> {__core__iData(32)}")); - add(new RawFunc("__helios__bytearray32__slice", + add(new RawFunc("__helios__bytearray32__slice", `(self) -> { __helios__common__slice_bytearray(self, (self) -> {32}) }`)); - add(new RawFunc("__helios__bytearray32__starts_with", + add(new RawFunc("__helios__bytearray32__starts_with", `(self) -> { __helios__common__starts_with(self, (self) -> {32}) }`)); - add(new RawFunc("__helios__bytearray32__ends_with", + add(new RawFunc("__helios__bytearray32__ends_with", `(self) -> { __helios__common__ends_with(self, (self) -> {32}) }`)); @@ -25580,15 +25580,15 @@ function makeRawFunctions() { }( (recurse, self, index) -> { __core__ifThenElse( - __core__nullList(self), - () -> {error("index out of range")}, + __core__nullList(self), + () -> {error("index out of range")}, () -> {__core__ifThenElse( - __core__lessThanInteger(index, 0), - () -> {error("index out of range")}, + __core__lessThanInteger(index, 0), + () -> {error("index out of range")}, () -> { __core__ifThenElse( - __core__equalsInteger(index, 0), - () -> {__core__headList(self)}, + __core__equalsInteger(index, 0), + () -> {__core__headList(self)}, () -> {recurse(recurse, __core__tailList(self), __core__subtractInteger(index, 1))} )() } @@ -25714,16 +25714,16 @@ function makeRawFunctions() { } }(__core__unListData(self)) }`)); - add(new RawFunc("__helios__boollist__new", + add(new RawFunc("__helios__boollist__new", `(n, fn) -> { __helios__list__new( - n, + n, (i) -> { __helios__common__boolData(fn(i)) } ) }`)); - add(new RawFunc("__helios__boollist__new_const", + add(new RawFunc("__helios__boollist__new_const", `(n, item) -> { __helios__list__new_const(n, __helios__common__boolData(item)) }`)); @@ -25733,19 +25733,19 @@ function makeRawFunctions() { add(new RawFunc("__helios__boollist__from_data", "__helios__list__from_data")); add(new RawFunc("__helios__boollist____add", "__helios__list____add")); add(new RawFunc("__helios__boollist__length", "__helios__list__length")); - add(new RawFunc("__helios__boollist__head", + add(new RawFunc("__helios__boollist__head", `(self) -> { __helios__common__unBoolData(__helios__list__head(self)) }`)); add(new RawFunc("__helios__boollist__tail", "__helios__list__tail")); add(new RawFunc("__helios__boollist__is_empty", "__helios__list__is_empty")); - add(new RawFunc("__helios__boollist__get", + add(new RawFunc("__helios__boollist__get", `(self) -> { (index) -> { __helios__common__unBoolData(__helios__list__get(self)(index)) } }`)); - add(new RawFunc("__helios__boollist__any", + add(new RawFunc("__helios__boollist__any", `(self) -> { (fn) -> { __helios__list__any(self)( @@ -25935,11 +25935,11 @@ function makeRawFunctions() { `(self) -> { (key) -> { __helios__common__map_get( - self, - key, + self, + key, (x) -> { __core__constrData(0, __helios__common__list_1(x)) - }, + }, () -> { __core__constrData(1, __helios__common__list_0) } @@ -26023,17 +26023,17 @@ function makeRawFunctions() { }( (recurse, self, fn) -> { __core__ifThenElse( - __core__nullList(self), - () -> {error("not found")}, + __core__nullList(self), + () -> {error("not found")}, () -> { (head) -> { __core__ifThenElse( - fn(__core__fstPair(head), __core__sndPair(head)), + fn(__core__fstPair(head), __core__sndPair(head)), () -> { (callback) -> { callback(__core__fstPair(head), __core__sndPair(head)) } - }, + }, () -> {recurse(recurse, __core__tailList(self), fn)} )() }(__core__headList(self)) @@ -26053,16 +26053,16 @@ function makeRawFunctions() { }( (recurse, self, fn) -> { __core__ifThenElse( - __core__nullList(self), + __core__nullList(self), () -> { (callback) -> { callback(() -> {error("not found")}, false) } - }, + }, () -> { (head) -> { __core__ifThenElse( - fn(__core__fstPair(head), __core__sndPair(head)), + fn(__core__fstPair(head), __core__sndPair(head)), () -> { (callback) -> { callback( @@ -26074,7 +26074,7 @@ function makeRawFunctions() { true ) } - }, + }, () -> {recurse(recurse, __core__tailList(self), fn)} )() }(__core__headList(self)) @@ -26091,7 +26091,7 @@ function makeRawFunctions() { (fn) -> { (fn) -> { __helios__common__find( - self, + self, fn, __core__fstPair ) @@ -26127,7 +26127,7 @@ function makeRawFunctions() { (fn) -> { (fn) -> { __helios__common__find( - self, + self, fn, __core__sndPair ) @@ -26208,7 +26208,7 @@ function makeRawFunctions() { fn(z, __core__fstPair(pair), __core__sndPair(pair)) } ) - + } }(__core__unMapData(self)) }`)); @@ -26223,7 +26223,7 @@ function makeRawFunctions() { fn(__core__fstPair(pair), __core__sndPair(pair), next) } ) - + } }(__core__unMapData(self)) }`)); @@ -26254,7 +26254,7 @@ function makeRawFunctions() { } }(__core__unMapData(self)) }`)); - add(new RawFunc("__helios__map__set", + add(new RawFunc("__helios__map__set", `(self) -> { (self) -> { (key, value) -> { @@ -26336,7 +26336,7 @@ function makeRawFunctions() { add(new RawFunc("__helios__boolmap__length", "__helios__map__length")); add(new RawFunc("__helios__boolmap__tail", "__helios__map__tail")); add(new RawFunc("__helios__boolmap__is_empty", "__helios__map__is_empty")); - add(new RawFunc("__helios__boolmap__get", + add(new RawFunc("__helios__boolmap__get", `(self) -> { (key) -> { __helios__common__unBoolData(__helios__map__get(self)(key)) @@ -26407,7 +26407,7 @@ function makeRawFunctions() { } ) } - }, + }, ok ) }) @@ -26428,11 +26428,11 @@ function makeRawFunctions() { (fn) -> { (fn) -> { __helios__common__find( - self, + self, fn, (result) -> { __helios__common__unBoolData(__core__sndPair(result)) - } + } ) }( (pair) -> { @@ -26448,11 +26448,11 @@ function makeRawFunctions() { (fn) -> { (fn) -> { __helios__common__find_safe( - self, + self, fn, (result) -> { __core__sndPair(result) - } + } ) }( (pair) -> { @@ -26534,7 +26534,7 @@ function makeRawFunctions() { ) } }`)); - add(new RawFunc("__helios__boolmap__set", + add(new RawFunc("__helios__boolmap__set", `(self) -> { (key, value) -> { __helios__map__set(self)(key, __helios__common__boolData(value)) @@ -26556,7 +26556,7 @@ function makeRawFunctions() { // Option[T] builtins addDataFuncs("__helios__option"); - add(new RawFunc("__helios__option__map", + add(new RawFunc("__helios__option__map", `(self) -> { (fn) -> { (pair) -> { @@ -26584,7 +26584,7 @@ function makeRawFunctions() { ) } }`)); - add(new RawFunc("__helios__option__unwrap", + add(new RawFunc("__helios__option__unwrap", `(self) -> { () -> { __helios__common__field_0(self) @@ -26603,7 +26603,7 @@ function makeRawFunctions() { __helios__common__assert_constr_index(data, 0) }`)); add(new RawFunc("__helios__option__some__some", "__helios__common__field_0")); - + // Option[T]::None addEnumDataFuncs("__helios__option__none"); @@ -26653,22 +26653,22 @@ function makeRawFunctions() { } }`)); - + // Option[Bool]::Some add(new RawFunc("__helios__booloption__some____eq", "__helios__option__some____eq")); add(new RawFunc("__helios__booloption__some____neq", "__helios__option__some____neq")); add(new RawFunc("__helios__booloption__some__serialize", "__helios__option__some__serialize")); - add(new RawFunc("__helios__booloption__some__new", + add(new RawFunc("__helios__booloption__some__new", `(b) -> { __helios__option__some__new(__helios__common__boolData(b)) }`)); add(new RawFunc("__helios__booloption__some__cast", "__helios__option__some__cast")); - add(new RawFunc("__helios__booloption__some__some", + add(new RawFunc("__helios__booloption__some__some", `(self) -> { __helios__common__unBoolData(__helios__option__some__some(self)) }`)); - + // Option[Bool]::None add(new RawFunc("__helios__booloption__none____eq", "__helios__option__none____eq")); add(new RawFunc("__helios__booloption__none____neq", "__helios__option__none____neq")); @@ -26676,7 +26676,7 @@ function makeRawFunctions() { add(new RawFunc("__helios__booloption__none__new", "__helios__option__none__new")); add(new RawFunc("__helios__booloption__none__cast", "__helios__option__none__cast")); - + // Hash builtins addDataFuncs("__helios__hash"); add(new RawFunc("__helios__hash____lt", "__helios__bytearray____lt")); @@ -26688,7 +26688,7 @@ function makeRawFunctions() { add(new RawFunc("__helios__hash__CURRENT", "__core__bData(#0000000000000000000000000000000000000000000000000000000000000000)")); add(new RawFunc("__helios__hash__from_script_hash", "__helios__common__identity")); - + // ScriptHash builtin addDataFuncs("__helios__scripthash"); @@ -26697,7 +26697,7 @@ function makeRawFunctions() { addDataFuncs("__helios__pubkey"); add(new RawFunc("__helios__pubkey__new", "__helios__common__identity")); add(new RawFunc("__helios__pubkey__show", "__helios__bytearray__show")); - add(new RawFunc("__helios__pubkey__verify", + add(new RawFunc("__helios__pubkey__verify", `(self) -> { (message, signature) -> { __core__verifyEd25519Signature(__core__unBData(self), __core__unBData(message), __core__unBData(signature)) @@ -26798,13 +26798,13 @@ function makeRawFunctions() { } }`)); add(new RawFunc("__helios__scriptcontext__get_current_minting_policy_hash", "__helios__scriptcontext__get_spending_purpose_output_id")); - add(new RawFunc("__helios__scriptcontext__get_staking_purpose", + add(new RawFunc("__helios__scriptcontext__get_staking_purpose", `(self) -> { () -> { __helios__scriptcontext__purpose(self) } }`)); - add(new RawFunc("__helios__scriptcontext__get_script_purpose", + add(new RawFunc("__helios__scriptcontext__get_script_purpose", `(self) -> { () -> { __helios__scriptcontext__purpose(self) @@ -26820,7 +26820,7 @@ function makeRawFunctions() { addEnumDataFuncs("__helios__stakingpurpose__rewarding"); add(new RawFunc("__helios__stakingpurpose__rewarding__credential", "__helios__common__field_0")); - + // StakingPurpose::Certifying builtins addEnumDataFuncs("__helios__stakingpurpose__certifying"); add(new RawFunc("__helios__stakingpurpose__certifying__dcert", "__helios__common__field_0")); @@ -26850,17 +26850,17 @@ function makeRawFunctions() { addEnumDataFuncs("__helios__scriptpurpose__minting"); add(new RawFunc("__helios__scriptpurpose__minting__policy_hash", "__helios__common__field_0")); - + // ScriptPurpose::Spending builtins addEnumDataFuncs("__helios__scriptpurpose__spending"); add(new RawFunc("__helios__scriptpurpose__spending__output_id", "__helios__common__field_0")); - + // ScriptPurpose::Rewarding builtins addEnumDataFuncs("__helios__scriptpurpose__rewarding"); add(new RawFunc("__helios__scriptpurpose__rewarding__credential", "__helios__common__field_0")); - + // ScriptPurpose::Certifying builtins addEnumDataFuncs("__helios__scriptpurpose__certifying"); add(new RawFunc("__helios__scriptpurpose__certifying__dcert", "__helios__common__field_0")); @@ -26989,7 +26989,7 @@ function makeRawFunctions() { `(self, fn) -> { __core__listData( __helios__common__filter_list( - __core__unListData(__helios__tx__outputs(self)), + __core__unListData(__helios__tx__outputs(self)), fn ) ) @@ -27020,7 +27020,7 @@ function makeRawFunctions() { `(self, pubKeyHash, datum) -> { (datumHash) -> { __helios__tx__filter_outputs( - self, + self, (output) -> { __helios__bool__and( () -> { @@ -27037,7 +27037,7 @@ function makeRawFunctions() { add(new RawFunc("__helios__tx__outputs_sent_to_inline_datum", `(self, pubKeyHash, datum) -> { __helios__tx__filter_outputs( - self, + self, (output) -> { __helios__bool__and( () -> { @@ -27076,7 +27076,7 @@ function makeRawFunctions() { `(self, validatorHash, datum) -> { (datumHash) -> { __helios__tx__filter_outputs( - self, + self, (output) -> { __helios__bool__and( () -> { @@ -27093,7 +27093,7 @@ function makeRawFunctions() { add(new RawFunc("__helios__tx__outputs_locked_by_inline_datum", `(self, validatorHash, datum) -> { __helios__tx__filter_outputs( - self, + self, (output) -> { __helios__bool__and( () -> { @@ -27149,25 +27149,25 @@ function makeRawFunctions() { `(self) -> { __core__headList(__core__sndPair(__core__unConstrData(self))) }`)); - add(new RawFunc("__helios__txid____lt", + add(new RawFunc("__helios__txid____lt", `(self) -> { (other) -> { __helios__bytearray____lt(__helios__txid__bytes(self))(__helios__txid__bytes(other)) } }`)); - add(new RawFunc("__helios__txid____leq", + add(new RawFunc("__helios__txid____leq", `(self) -> { (other) -> { __helios__bytearray____leq(__helios__txid__bytes(self))(__helios__txid__bytes(other)) } }`)); - add(new RawFunc("__helios__txid____gt", + add(new RawFunc("__helios__txid____gt", `(self) -> { (other) -> { __helios__bytearray____gt(__helios__txid__bytes(self))(__helios__txid__bytes(other)) } }`)); - add(new RawFunc("__helios__txid____geq", + add(new RawFunc("__helios__txid____geq", `(self) -> { (other) -> { __helios__bytearray____geq(__helios__txid__bytes(self))(__helios__txid__bytes(other)) @@ -27175,7 +27175,7 @@ function makeRawFunctions() { }`)); add(new RawFunc("__helios__txid__new", `(bytes) -> { - __core__constrData(0, __helios__common__list_1(bytes)) + __core__constrData(0, __helios__common__list_1(bytes)) }`)); add(new RawFunc("__helios__txid__CURRENT", "__helios__txid__new(__core__bData(#0000000000000000000000000000000000000000000000000000000000000000))")); add(new RawFunc("__helios__txid__show", @@ -27192,11 +27192,11 @@ function makeRawFunctions() { }`)); add(new RawFunc("__helios__txinput__output_id", "__helios__common__field_0")); add(new RawFunc("__helios__txinput__output", "__helios__common__field_1")); - + // TxOutput builtins addDataFuncs("__helios__txoutput"); - add(new RawFunc("__helios__txoutput__new", + add(new RawFunc("__helios__txoutput__new", `(address, value, datum) -> { __core__constrData(0, __helios__common__list_4(address, value, datum, __helios__option__none__new())) }`)); @@ -27238,7 +27238,7 @@ function makeRawFunctions() { __helios__credential__is_validator(credential), () -> { __core__equalsData( - hash, + hash, __helios__credential__validator__hash( __helios__credential__validator__cast(credential) ) @@ -27257,7 +27257,7 @@ function makeRawFunctions() { __helios__credential__is_pubkey(credential), () -> { __core__equalsData( - pkh, + pkh, __helios__credential__pubkey__hash( __helios__credential__pubkey__cast(credential) ) @@ -27273,9 +27273,9 @@ function makeRawFunctions() { __helios__list__fold(outputs)( (prev, txOutput) -> { __helios__value____add(prev)(__helios__txoutput__value(txOutput)) - }, + }, __helios__value__ZERO - ) + ) }`)); @@ -27313,7 +27313,7 @@ function makeRawFunctions() { // OutputDatum::None addEnumDataFuncs("__helios__outputdatum__none"); - + // OutputDatum::Hash addEnumDataFuncs("__helios__outputdatum__hash"); @@ -27327,7 +27327,7 @@ function makeRawFunctions() { // RawData addDataFuncs("__helios__data"); - add(new RawFunc("__helios__data__tag", + add(new RawFunc("__helios__data__tag", `(self) -> { __core__iData(__core__fstPair(__core__unConstrData(self))) }`)); @@ -27337,7 +27337,7 @@ function makeRawFunctions() { addDataFuncs("__helios__txoutputid"); add(new RawFunc("__helios__txoutputid__tx_id", "__helios__common__field_0")); add(new RawFunc("__helios__txoutputid__index", "__helios__common__field_1")); - add(new RawFunc("__helios__txoutputid__comp", + add(new RawFunc("__helios__txoutputid__comp", `(self, other, comp_txid, comp_index) -> { (a_txid, a_index) -> { (b_txid, b_index) -> { @@ -27361,25 +27361,25 @@ function makeRawFunctions() { }(__helios__txoutputid__tx_id(other), __helios__txoutputid__index(other)) }(__helios__txoutputid__tx_id(self), __helios__txoutputid__index(self)) }`)); - add(new RawFunc("__helios__txoutputid____lt", + add(new RawFunc("__helios__txoutputid____lt", `(self) -> { (other) -> { __helios__txoutputid__comp(self, other, __helios__txid____lt, __helios__int____lt) } }`)); - add(new RawFunc("__helios__txoutputid____leq", + add(new RawFunc("__helios__txoutputid____leq", `(self) -> { (other) -> { __helios__txoutputid__comp(self, other, __helios__txid____leq, __helios__int____leq) } }`)); - add(new RawFunc("__helios__txoutputid____gt", + add(new RawFunc("__helios__txoutputid____gt", `(self) -> { (other) -> { __helios__txoutputid__comp(self, other, __helios__txid____gt, __helios__int____gt) } }`)); - add(new RawFunc("__helios__txoutputid____geq", + add(new RawFunc("__helios__txoutputid____geq", `(self) -> { (other) -> { __helios__txoutputid__comp(self, other, __helios__txid____geq, __helios__int____geq) @@ -27393,7 +27393,7 @@ function makeRawFunctions() { // Address addDataFuncs("__helios__address"); - add(new RawFunc("__helios__address__new", + add(new RawFunc("__helios__address__new", `(cred, staking_cred) -> { __core__constrData(0, __helios__common__list_2(cred, staking_cred)) }`)); @@ -27471,16 +27471,16 @@ function makeRawFunctions() { // StakingCredential builtins addDataFuncs("__helios__stakingcredential"); - add(new RawFunc("__helios__stakingcredential__new_hash", + add(new RawFunc("__helios__stakingcredential__new_hash", `(cred) -> { __core__constrData(0, __helios__common__list_1(cred)) }`)); - add(new RawFunc("__helios__stakingcredential__new_ptr", + add(new RawFunc("__helios__stakingcredential__new_ptr", `(i, j, k) -> { __core__constrData(1, __helios__common__list_3(i, j, k)) }`)); - + // StakingCredential::Hash builtins addEnumDataFuncs("__helios__stakingcredential__hash"); add(new RawFunc("__helios__stakingcredential__hash__hash", "__helios__common__field_0")); @@ -27581,7 +27581,7 @@ function makeRawFunctions() { )) )) }`)); - add(new RawFunc("__helios__timerange__is_before", + add(new RawFunc("__helios__timerange__is_before", `(self) -> { (t) -> { (upper) -> { @@ -27736,14 +27736,14 @@ function makeRawFunctions() { __core__mapData( __core__mkCons( __core__mkPairData( - mintingPolicyHash, + mintingPolicyHash, __core__mapData( __core__mkCons( - __core__mkPairData(tokenName, i), + __core__mkPairData(tokenName, i), __core__mkNilPairData(()) ) ) - ), + ), __core__mkNilPairData(()) ) ) @@ -27752,7 +27752,7 @@ function makeRawFunctions() { )() }`)); add(new RawFunc("__helios__value__from_map", "__helios__common__identity")); - add(new RawFunc("__helios__value__to_map", + add(new RawFunc("__helios__value__to_map", `(self) -> { () -> { self @@ -27765,8 +27765,8 @@ function makeRawFunctions() { }( (recurse, map) -> { __core__ifThenElse( - __core__nullList(map), - () -> {__helios__common__list_0}, + __core__nullList(map), + () -> {__helios__common__list_0}, () -> {__core__mkCons(__core__fstPair(__core__headList(map)), recurse(recurse, __core__tailList(map)))} )() } @@ -27782,12 +27782,12 @@ function makeRawFunctions() { }( (recurse, keys, map) -> { __core__ifThenElse( - __core__nullList(map), - () -> {__helios__common__list_0}, + __core__nullList(map), + () -> {__helios__common__list_0}, () -> { (key) -> { __core__ifThenElse( - __helios__common__is_in_bytearray_list(aKeys, key), + __helios__common__is_in_bytearray_list(aKeys, key), () -> {recurse(recurse, keys, __core__tailList(map))}, () -> {__core__mkCons(key, recurse(recurse, keys, __core__tailList(map)))} )() @@ -27806,11 +27806,11 @@ function makeRawFunctions() { }( (recurse, map) -> { __core__ifThenElse( - __core__nullList(map), + __core__nullList(map), () -> {__core__mkNilPairData(())}, () -> { __core__ifThenElse( - __core__equalsData(__core__fstPair(__core__headList(map)), mph), + __core__equalsData(__core__fstPair(__core__headList(map)), mph), () -> {__core__unMapData(__core__sndPair(__core__headList(map)))}, () -> {recurse(recurse, __core__tailList(map))} )() @@ -27826,12 +27826,12 @@ function makeRawFunctions() { }( (recurse, map, key) -> { __core__ifThenElse( - __core__nullList(map), - () -> {0}, + __core__nullList(map), + () -> {0}, () -> { __core__ifThenElse( - __core__equalsData(__core__fstPair(__core__headList(map)), key), - () -> {__core__unIData(__core__sndPair(__core__headList(map)))}, + __core__equalsData(__core__fstPair(__core__headList(map)), key), + () -> {__core__unIData(__core__sndPair(__core__headList(map)))}, () -> {recurse(recurse, __core__tailList(map), key)} )() } @@ -27847,14 +27847,14 @@ function makeRawFunctions() { }( (recurse, keys, result) -> { __core__ifThenElse( - __core__nullList(keys), - () -> {result}, + __core__nullList(keys), + () -> {result}, () -> { (key, tail) -> { (sum) -> { __core__ifThenElse( - __core__equalsInteger(sum, 0), - () -> {tail}, + __core__equalsInteger(sum, 0), + () -> {tail}, () -> {__core__mkCons(__core__mkPairData(key, __core__iData(sum)), tail)} )() }(op(__helios__value__get_inner_map_int(a, key), __helios__value__get_inner_map_int(b, key))) @@ -27873,14 +27873,14 @@ function makeRawFunctions() { }( (recurse, keys, result) -> { __core__ifThenElse( - __core__nullList(keys), - () -> {result}, + __core__nullList(keys), + () -> {result}, () -> { (key, tail) -> { (item) -> { __core__ifThenElse( - __core__nullList(item), - () -> {tail}, + __core__nullList(item), + () -> {tail}, () -> {__core__mkCons(__core__mkPairData(key, __core__mapData(item)), tail)} )() }(__helios__value__add_or_subtract_inner(op)(__helios__value__get_inner_map(a, key), __helios__value__get_inner_map(b, key))) @@ -27906,9 +27906,9 @@ function makeRawFunctions() { (head) -> { __core__mkCons( __core__mkPairData( - __core__fstPair(head), + __core__fstPair(head), __core__mapData(recurseInner(recurseInner, __core__unMapData(__core__sndPair(head)))) - ), + ), recurseOuter(recurseOuter, __core__tailList(outer)) ) }(__core__headList(outer)) @@ -27944,13 +27944,13 @@ function makeRawFunctions() { }( (recurse, keys) -> { __core__ifThenElse( - __core__nullList(keys), - () -> {true}, + __core__nullList(keys), + () -> {true}, () -> { (key) -> { __core__ifThenElse( - __helios__common__not(comp(__helios__value__get_inner_map_int(a, key), __helios__value__get_inner_map_int(b, key))), - () -> {false}, + __helios__common__not(comp(__helios__value__get_inner_map_int(a, key), __helios__value__get_inner_map_int(b, key))), + () -> {false}, () -> {recurse(recurse, __core__tailList(keys))} )() }(__core__headList(keys)) @@ -27967,19 +27967,19 @@ function makeRawFunctions() { }( (recurse, keys) -> { __core__ifThenElse( - __core__nullList(keys), - () -> {true}, + __core__nullList(keys), + () -> {true}, () -> { (key) -> { __core__ifThenElse( __helios__common__not( __helios__value__compare_inner( - comp, - __helios__value__get_inner_map(a, key), + comp, + __helios__value__get_inner_map(a, key), __helios__value__get_inner_map(b, key) ) - ), - () -> {false}, + ), + () -> {false}, () -> {recurse(recurse, __core__tailList(keys))} )() }(__core__headList(keys)) @@ -28050,8 +28050,8 @@ function makeRawFunctions() { __helios__value__compare( (a, b) -> { __helios__common__not(__core__lessThanEqualsInteger(a, b)) - }, - self, + }, + self, other ) } @@ -28078,8 +28078,8 @@ function makeRawFunctions() { __helios__value__compare( (a, b) -> { __core__lessThanInteger(a, b) - }, - self, + }, + self, other ) } @@ -28101,20 +28101,20 @@ function makeRawFunctions() { }( (outer, inner, map) -> { __core__ifThenElse( - __core__nullList(map), - () -> {error("policy not found")}, + __core__nullList(map), + () -> {error("policy not found")}, () -> { __core__ifThenElse( - __core__equalsData(__core__fstPair(__core__headList(map)), mintingPolicyHash), - () -> {inner(inner, __core__unMapData(__core__sndPair(__core__headList(map))))}, + __core__equalsData(__core__fstPair(__core__headList(map)), mintingPolicyHash), + () -> {inner(inner, __core__unMapData(__core__sndPair(__core__headList(map))))}, () -> {outer(outer, inner, __core__tailList(map))} )() } )() }, (inner, map) -> { __core__ifThenElse( - __core__nullList(map), - () -> {error("tokenName not found")}, + __core__nullList(map), + () -> {error("tokenName not found")}, () -> { __core__ifThenElse( __core__equalsData(__core__fstPair(__core__headList(map)), tokenName), @@ -28137,20 +28137,20 @@ function makeRawFunctions() { }( (outer, inner, map) -> { __core__ifThenElse( - __core__nullList(map), - () -> {__core__iData(0)}, + __core__nullList(map), + () -> {__core__iData(0)}, () -> { __core__ifThenElse( - __core__equalsData(__core__fstPair(__core__headList(map)), mintingPolicyHash), - () -> {inner(inner, __core__unMapData(__core__sndPair(__core__headList(map))))}, + __core__equalsData(__core__fstPair(__core__headList(map)), mintingPolicyHash), + () -> {inner(inner, __core__unMapData(__core__sndPair(__core__headList(map))))}, () -> {outer(outer, inner, __core__tailList(map))} )() } )() }, (inner, map) -> { __core__ifThenElse( - __core__nullList(map), - () -> {__core__iData(0)}, + __core__nullList(map), + () -> {__core__iData(0)}, () -> { __core__ifThenElse( __core__equalsData(__core__fstPair(__core__headList(map)), tokenName), @@ -28180,7 +28180,7 @@ function makeRawFunctions() { ) } }`)); - add(new RawFunc("__helios__value__get_policy", + add(new RawFunc("__helios__value__get_policy", `(self) -> { (mph) -> { (map) -> { @@ -28202,7 +28202,7 @@ function makeRawFunctions() { } ) }(__core__unMapData(self)) - } + } }`)); add(new RawFunc("__helios__value__contains_policy", `(self) -> { @@ -28233,7 +28233,7 @@ function makeRawFunctions() { } /** - * @param {IR} ir + * @param {IR} ir * @returns {IR} * @package */ @@ -28291,7 +28291,7 @@ class IRScope { #variable; /** - * @param {?IRScope} parent + * @param {?IRScope} parent * @param {?IRVariable} variable */ constructor(parent, variable) { @@ -28301,8 +28301,8 @@ class IRScope { /** * Calculates the Debruijn index of a named value. Internal method - * @param {Word | IRVariable} name - * @param {number} index + * @param {Word | IRVariable} name + * @param {number} index * @returns {[number, IRVariable]} */ getInternal(name, index) { @@ -28317,7 +28317,7 @@ class IRScope { /** * Calculates the Debruijn index. - * @param {Word | IRVariable} name + * @param {Word | IRVariable} name * @returns {[number, IRVariable]} */ get(name) { @@ -28327,7 +28327,7 @@ class IRScope { /** * Checks if a named builtin exists - * @param {string} name + * @param {string} name * @param {boolean} strict - if true then throws an error if builtin doesn't exist * @returns {boolean} */ @@ -28345,8 +28345,8 @@ class IRScope { /** * Returns index of a named builtin * Throws an error if builtin doesn't exist - * @param {string} name - * @returns + * @param {string} name + * @returns */ static findBuiltin(name) { let i = UPLC_BUILTINS.findIndex(info => { return "__core__" + info.name == name }); @@ -28390,7 +28390,7 @@ class IRValue { } /** - * @param {IRValue[]} args + * @param {IRValue[]} args * @returns {?IRValue} */ call(args) { @@ -28420,7 +28420,7 @@ class IRFuncValue extends IRValue { } /** - * @param {IRValue[]} args + * @param {IRValue[]} args * @returns {?IRValue} */ call(args) { @@ -28435,7 +28435,7 @@ class IRLiteralValue extends IRValue { #value; /** - * @param {UplcValue} value + * @param {UplcValue} value */ constructor(value) { super(); @@ -28470,14 +28470,14 @@ class IRDeferredValue extends IRValue { this.#cache = undefined; } /** - * @param {IRValue[]} args + * @param {IRValue[]} args * @returns {?IRValue} */ call(args) { if (this.#cache === undefined) { this.#cache = this.#deferred(); } - + if (this.#cache != null) { return this.#cache.call(args); } else { @@ -28492,7 +28492,7 @@ class IRDeferredValue extends IRValue { if (this.#cache === undefined) { this.#cache = this.#deferred(); } - + if (this.#cache != null) { return this.#cache.value; } else { @@ -28513,9 +28513,9 @@ class IRCallStack { /** * @param {boolean} throwRTErrors - * @param {?IRCallStack} parent - * @param {?IRVariable} variable - * @param {?IRValue} value + * @param {?IRCallStack} parent + * @param {?IRVariable} variable + * @param {?IRValue} value */ constructor(throwRTErrors, parent = null, variable = null, value = null) { this.#throwRTErrors = throwRTErrors; @@ -28529,7 +28529,7 @@ class IRCallStack { } /** - * @param {IRVariable} variable + * @param {IRVariable} variable * @returns {?IRValue} */ get(variable) { @@ -28543,8 +28543,8 @@ class IRCallStack { } /** - * @param {IRVariable} variable - * @param {IRValue} value + * @param {IRVariable} variable + * @param {IRValue} value * @returns {IRCallStack} */ set(variable, value) { @@ -28588,7 +28588,7 @@ export class IRNameExprRegistry { } /** - * @param {IRNameExpr} nameExpr + * @param {IRNameExpr} nameExpr */ register(nameExpr) { if (!nameExpr.isCore()) { @@ -28616,7 +28616,7 @@ export class IRNameExprRegistry { } /** - * @param {IRVariable} variable + * @param {IRVariable} variable * @returns {number} */ countReferences(variable) { @@ -28630,7 +28630,7 @@ export class IRNameExprRegistry { } /** - * @param {IRVariable} variable + * @param {IRVariable} variable * @returns {boolean} */ maybeInsideLoop(variable) { @@ -28655,7 +28655,7 @@ export class IRExprRegistry { #inline; /** - * @param {IRNameExprRegistry} nameExprs + * @param {IRNameExprRegistry} nameExprs */ constructor(nameExprs) { this.#nameExprs = nameExprs; @@ -28663,7 +28663,7 @@ export class IRExprRegistry { } /** - * @param {IRVariable} variable + * @param {IRVariable} variable * @returns {number} */ countReferences(variable) { @@ -28671,7 +28671,7 @@ export class IRExprRegistry { } /** - * @param {IRVariable} variable + * @param {IRVariable} variable * @returns {boolean} */ maybeInsideLoop(variable) { @@ -28695,8 +28695,8 @@ export class IRExprRegistry { } /** - * @param {IRVariable} variable - * @param {IRExpr} expr + * @param {IRVariable} variable + * @param {IRExpr} expr */ addInlineable(variable, expr) { this.#inline.set(variable, expr); @@ -28709,7 +28709,7 @@ export class IRExprRegistry { */ class IRExpr extends Token { /** - * @param {Site} site + * @param {Site} site */ constructor(site) { super(site); @@ -28717,7 +28717,7 @@ class IRExpr extends Token { /** * For pretty printing the IR - * @param {string} indent + * @param {string} indent * @returns {string} */ toString(indent = "") { @@ -28726,7 +28726,7 @@ class IRExpr extends Token { /** * Link IRNameExprs to variables - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { throw new Error("not yet implemented"); @@ -28734,7 +28734,7 @@ class IRExpr extends Token { /** * Turns all IRConstExpr istances into IRLiteralExpr instances - * @param {IRCallStack} stack + * @param {IRCallStack} stack * @returns {IRExpr} */ evalConstants(stack) { @@ -28778,7 +28778,7 @@ class IRExpr extends Token { } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { @@ -28801,7 +28801,7 @@ class IRNameExpr extends IRExpr { #name; /** - * @type {?number} - cached debruijn index + * @type {?number} - cached debruijn index */ #index; @@ -28811,7 +28811,7 @@ class IRNameExpr extends IRExpr { #variable; /** - * @param {Word} name + * @param {Word} name * @param {?IRVariable} variable */ constructor(name, variable = null) { @@ -28853,7 +28853,7 @@ class IRNameExpr extends IRExpr { } /** - * @param {IRVariable} ref + * @param {IRVariable} ref * @returns {boolean} */ isVariable(ref) { @@ -28865,7 +28865,7 @@ class IRNameExpr extends IRExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {string} */ toString(indent = "") { @@ -28886,7 +28886,7 @@ class IRNameExpr extends IRExpr { } /** - * @param {IRCallStack} stack + * @param {IRCallStack} stack * @returns {IRExpr} */ evalConstants(stack) { @@ -28933,7 +28933,7 @@ class IRNameExpr extends IRExpr { } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { @@ -28976,7 +28976,7 @@ class IRLiteralExpr extends IRExpr { #value; /** - * @param {UplcValue} value + * @param {UplcValue} value */ constructor(value) { super(value.site); @@ -28992,7 +28992,7 @@ class IRLiteralExpr extends IRExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {string} */ toString(indent = "") { @@ -29001,7 +29001,7 @@ class IRLiteralExpr extends IRExpr { /** * Linking doesn't do anything for literals - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { } @@ -29040,7 +29040,7 @@ class IRLiteralExpr extends IRExpr { } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { @@ -29063,8 +29063,8 @@ class IRConstExpr extends IRExpr { #expr; /** - * @param {Site} site - * @param {IRExpr} expr + * @param {Site} site + * @param {IRExpr} expr */ constructor(site, expr) { super(site); @@ -29076,7 +29076,7 @@ class IRConstExpr extends IRExpr { } /** - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { this.#expr.resolveNames(scope); @@ -29097,7 +29097,7 @@ class IRConstExpr extends IRExpr { } /** - * @param {IRCallStack} stack + * @param {IRCallStack} stack * @returns {?IRValue} */ eval(stack) { @@ -29114,9 +29114,9 @@ class IRFuncExpr extends IRExpr { #body; /** - * @param {Site} site - * @param {IRVariable[]} args - * @param {IRExpr} body + * @param {Site} site + * @param {IRVariable[]} args + * @param {IRExpr} body */ constructor(site, args, body) { super(site); @@ -29133,7 +29133,7 @@ class IRFuncExpr extends IRExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {string} */ toString(indent = "") { @@ -29147,7 +29147,7 @@ class IRFuncExpr extends IRExpr { } /** - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { // in the zero-arg case no Debruijn indices need to be added because we use Delay/Force @@ -29160,7 +29160,7 @@ class IRFuncExpr extends IRExpr { } /** - * @param {IRCallStack} stack + * @param {IRCallStack} stack */ evalConstants(stack) { return new IRFuncExpr(this.site, this.args, this.#body.evalConstants(stack)); @@ -29185,13 +29185,13 @@ class IRFuncExpr extends IRExpr { } /** - * @param {IRLiteralRegistry} literals + * @param {IRLiteralRegistry} literals * @returns {IRExpr} */ simplifyLiterals(literals) { return new IRFuncExpr(this.site, this.args, this.#body.simplifyLiterals(literals)); } - + /** * @param {IRNameExprRegistry} nameExprs */ @@ -29208,14 +29208,14 @@ class IRFuncExpr extends IRExpr { } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { return new IRFuncExpr(this.site, this.args, this.#body.simplifyTopology(registry)); } - /** + /** * @returns {UplcTerm} */ toUplc() { @@ -29244,14 +29244,14 @@ class IRCallExpr extends IRExpr { /** * @param {Site} site - * @param {IRExpr[]} argExprs - * @param {Site} parensSite + * @param {IRExpr[]} argExprs + * @param {Site} parensSite */ constructor(site, argExprs, parensSite) { super(site); this.#argExprs = argExprs; this.#parensSite = parensSite; - + } get argExprs() { @@ -29263,7 +29263,7 @@ class IRCallExpr extends IRExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {string} */ argsToString(indent = "") { @@ -29271,7 +29271,7 @@ class IRCallExpr extends IRExpr { } /** - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNamesInArgs(scope) { for (let argExpr of this.#argExprs) { @@ -29280,16 +29280,16 @@ class IRCallExpr extends IRExpr { } /** - * @param {IRCallStack} stack + * @param {IRCallStack} stack * @returns {IRExpr[]} */ evalConstantsInArgs(stack) { return this.#argExprs.map(a => a.evalConstants(stack)); } - /** + /** * @param {IRCallStack} stack - * @returns {?IRValue[]} + * @returns {?IRValue[]} */ evalArgs(stack) { /** @@ -29318,14 +29318,14 @@ class IRCallExpr extends IRExpr { } /** - * @param {IRNameExprRegistry} nameExprs + * @param {IRNameExprRegistry} nameExprs */ registerNameExprsInArgs(nameExprs) { this.#argExprs.forEach(a => a.registerNameExprs(nameExprs)); } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr[]} */ simplifyTopologyInArgs(registry) { @@ -29358,9 +29358,9 @@ class IRCoreCallExpr extends IRCallExpr { #name; /** - * @param {Word} name - * @param {IRExpr[]} argExprs - * @param {Site} parensSite + * @param {Word} name + * @param {IRExpr[]} argExprs + * @param {Site} parensSite */ constructor(name, argExprs, parensSite) { super(name.site, argExprs, parensSite); @@ -29396,7 +29396,7 @@ class IRCoreCallExpr extends IRCallExpr { } /** - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { this.resolveNamesInArgs(scope); @@ -29406,7 +29406,7 @@ class IRCoreCallExpr extends IRCallExpr { * @param {Site} site * @param {boolean} throwRTErrors * @param {string} builtinName - * @param {IRValue[]} args + * @param {IRValue[]} args * @returns {?IRValue} */ static evalValues(site, throwRTErrors, builtinName, args) { @@ -29457,13 +29457,13 @@ class IRCoreCallExpr extends IRCallExpr { } /** - * @param {IRCallStack} stack + * @param {IRCallStack} stack * @returns {IRExpr} */ evalConstants(stack) { return new IRCoreCallExpr(this.#name, this.evalConstantsInArgs(stack), this.parensSite); } - + /** * @param {IRCallStack} stack * @returns {?IRValue} @@ -29474,7 +29474,7 @@ class IRCoreCallExpr extends IRCallExpr { if (args !== null) { return IRCoreCallExpr.evalValues(this.site, stack.throwRTErrors, this.builtinName, args); } - + return null; } @@ -29543,14 +29543,14 @@ class IRCoreCallExpr extends IRCallExpr { if (a.value.bool && !b.value.bool) { return cond; } else if ( - !a.value.bool && - b.value.bool && - cond instanceof IRUserCallExpr && - cond.fnExpr instanceof IRNameExpr && + !a.value.bool && + b.value.bool && + cond instanceof IRUserCallExpr && + cond.fnExpr instanceof IRNameExpr && cond.fnExpr.name === "__helios__common__not" ) { return cond.argExprs[0]; - } + } } } break; @@ -29614,7 +29614,7 @@ class IRCoreCallExpr extends IRCallExpr { } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { @@ -29631,15 +29631,15 @@ class IRCoreCallExpr extends IRCallExpr { return arg.argExprs[0]; } } - break; + break; case "equalsData": { const [a, b] = args; if (a instanceof IRCoreCallExpr && b instanceof IRCoreCallExpr) { if (a.builtinName === "iData" && b.builtinName === "iData") { - return new IRCoreCallExpr(new Word(this.site, "__core__equalsInteger"), [a.argExprs[0], b.argExprs[0]], this.parensSite); + return new IRCoreCallExpr(new Word(this.site, "__core__equalsInteger"), [a.argExprs[0], b.argExprs[0]], this.parensSite); } else if (a.builtinName === "bData" && b.builtinName === "bData") { - return new IRCoreCallExpr(new Word(this.site, "__core__equalsByteString"), [a.argExprs[0], b.argExprs[0]], this.parensSite); + return new IRCoreCallExpr(new Word(this.site, "__core__equalsByteString"), [a.argExprs[0], b.argExprs[0]], this.parensSite); } else if (a.builtinName === "decodeUtf8" && b.builtinName === "decodeUtf8") { return new IRCoreCallExpr(new Word(this.site, "__core__equalsString"), [a.argExprs[0], b.argExprs[0]], this.parensSite); } @@ -29733,11 +29733,11 @@ class IRCoreCallExpr extends IRCallExpr { let term = new UplcBuiltin(site, builtinName); let nForce = UPLC_BUILTINS[IRScope.findBuiltin(name)].forceCount; - + for (let i = 0; i < nForce; i++) { term = new UplcForce(site, term); } - + return term; } @@ -29759,9 +29759,9 @@ class IRUserCallExpr extends IRCallExpr { #fnExpr; /** - * @param {IRExpr} fnExpr - * @param {IRExpr[]} argExprs - * @param {Site} parensSite + * @param {IRExpr} fnExpr + * @param {IRExpr[]} argExprs + * @param {Site} parensSite */ constructor(fnExpr, argExprs, parensSite) { super(fnExpr.site, argExprs, parensSite); @@ -29770,9 +29770,9 @@ class IRUserCallExpr extends IRCallExpr { } /** - * @param {IRExpr} fnExpr - * @param {IRExpr[]} argExprs - * @param {Site} parensSite + * @param {IRExpr} fnExpr + * @param {IRExpr[]} argExprs + * @param {Site} parensSite * @returns {IRUserCallExpr} */ static new(fnExpr, argExprs, parensSite) { @@ -29808,7 +29808,7 @@ class IRUserCallExpr extends IRCallExpr { } /** - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { this.#fnExpr.resolveNames(scope); @@ -29829,7 +29829,7 @@ class IRUserCallExpr extends IRCallExpr { } /** - * @param {IRCallStack} stack + * @param {IRCallStack} stack * @returns {?IRValue} */ eval(stack) { @@ -29869,17 +29869,17 @@ class IRUserCallExpr extends IRCallExpr { return IRUserCallExpr.new( this.#fnExpr.simplifyLiterals(literals), - args, + args, this.parensSite ); } /** - * @param {IRNameExprRegistry} nameExprs + * @param {IRNameExprRegistry} nameExprs */ registerNameExprs(nameExprs) { this.registerNameExprsInArgs(nameExprs); - + this.#fnExpr.registerNameExprs(nameExprs); } @@ -29888,7 +29888,7 @@ class IRUserCallExpr extends IRCallExpr { } /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { @@ -29957,9 +29957,9 @@ export class IRAnonCallExpr extends IRUserCallExpr { #anon; /** - * @param {IRFuncExpr} fnExpr - * @param {IRExpr[]} argExprs - * @param {Site} parensSite + * @param {IRFuncExpr} fnExpr + * @param {IRExpr[]} argExprs + * @param {Site} parensSite */ constructor(fnExpr, argExprs, parensSite) { super(fnExpr, argExprs, parensSite) @@ -30044,7 +30044,7 @@ export class IRAnonCallExpr extends IRUserCallExpr { } /** - * @param {IRNameExprRegistry} nameExprs + * @param {IRNameExprRegistry} nameExprs */ registerNameExprs(nameExprs) { this.registerNameExprsInArgs(nameExprs); @@ -30053,9 +30053,9 @@ export class IRAnonCallExpr extends IRUserCallExpr { this.#anon.body.registerNameExprs(nameExprs); } - + /** - * @param {IRExprRegistry} registry + * @param {IRExprRegistry} registry * @returns {IRExpr} */ simplifyTopology(registry) { @@ -30152,8 +30152,8 @@ export class IRFuncDefExpr extends IRAnonCallExpr { #def; /** - * @param {IRFuncExpr} fnExpr - * @param {IRFuncExpr} defExpr + * @param {IRFuncExpr} fnExpr + * @param {IRFuncExpr} defExpr * @param {Site} parensSite */ constructor(fnExpr, defExpr, parensSite) { @@ -30171,8 +30171,8 @@ class IRErrorCallExpr extends IRExpr { #msg; /** - * @param {Site} site - * @param {string} msg + * @param {Site} site + * @param {string} msg */ constructor(site, msg = "") { super(site); @@ -30180,7 +30180,7 @@ class IRErrorCallExpr extends IRExpr { } /** - * @param {string} indent + * @param {string} indent * @returns {string} */ toString(indent = "") { @@ -30188,7 +30188,7 @@ class IRErrorCallExpr extends IRExpr { } /** - * @param {IRScope} scope + * @param {IRScope} scope */ resolveNames(scope) { } @@ -30214,7 +30214,7 @@ class IRErrorCallExpr extends IRExpr { } /** - * @param {IRLiteralRegistry} literals + * @param {IRLiteralRegistry} literals * @returns {IRExpr} */ simplifyLiterals(literals) { @@ -30254,7 +30254,7 @@ class IRErrorCallExpr extends IRExpr { /** * Build an Intermediate Representation expression - * @param {Token[]} ts + * @param {Token[]} ts * @returns {IRExpr} * @package */ @@ -30382,7 +30382,7 @@ function buildIRExpr(ts) { /** * Build an IR function expression - * @param {Token[]} ts + * @param {Token[]} ts * @returns {IRFuncExpr} */ function buildIRFuncExpr(ts) { @@ -30441,7 +30441,7 @@ class IRProgram { } /** - * @param {IRExpr} expr + * @param {IRExpr} expr * @returns {IRFuncExpr | IRCallExpr | IRLiteralExpr} */ static assertValidRoot(expr) { @@ -30454,7 +30454,7 @@ class IRProgram { /** * @package - * @param {IR} ir + * @param {IR} ir * @param {?number} purpose * @param {boolean} simplify * @param {boolean} throwSimplifyRTErrors - if true -> throw RuntimErrors caught during evaluation steps @@ -30467,7 +30467,7 @@ class IRProgram { let irTokens = tokenizeIR(irSrc, codeMap); let expr = buildIRExpr(irTokens); - + expr.resolveNames(scope); expr = expr.evalConstants(new IRCallStack(throwSimplifyRTErrors)); @@ -30486,7 +30486,7 @@ class IRProgram { } /** - * @param {IRExpr} expr + * @param {IRExpr} expr * @returns {IRExpr} */ static simplify(expr) { @@ -30586,7 +30586,7 @@ export class IRParametricProgram { /** * @package - * @param {IR} ir + * @param {IR} ir * @param {?number} purpose * @param {string[]} parameters * @param {boolean} simplify @@ -30634,7 +30634,7 @@ class Module { #statements; /** - * @param {Word} name + * @param {Word} name * @param {Statement[]} statements */ constructor(name, statements) { @@ -30690,7 +30690,7 @@ class Module { } /** - * @param {ModuleScope} scope + * @param {ModuleScope} scope */ evalTypes(scope) { for (let s of this.statements) { @@ -30756,7 +30756,7 @@ class Module { /** * This module can depend on other modules * TODO: detect circular dependencies - * @param {Module[]} modules + * @param {Module[]} modules * @param {Module[]} stack * @returns {Module[]} */ @@ -30805,8 +30805,8 @@ class Module { */ class MainModule extends Module { /** - * @param {Word} name - * @param {Statement[]} statements + * @param {Word} name + * @param {Statement[]} statements */ constructor(name, statements) { super(name, statements); @@ -30818,7 +30818,7 @@ class MainModule extends Module { get mainFunc() { for (let s of this.statements) { if (s.name.value == "main") { - if (!(s instanceof FuncStatement)) { + if (!(s instanceof FuncStatement)) { throw s.typeError("'main' isn't a function statement"); } else { return s; @@ -30849,7 +30849,7 @@ class MainModule extends Module { * @type {Object.} */ #parameters; - + /** * @param {number} purpose * @param {Module[]} modules @@ -30862,7 +30862,7 @@ class MainModule extends Module { } /** - * @param {string} rawSrc + * @param {string} rawSrc * @returns {[purpose, Module[]]} */ static parseMain(rawSrc) { @@ -30901,8 +30901,8 @@ class MainModule extends Module { } /** - * - * @param {string} mainName + * + * @param {string} mainName * @param {string[]} moduleSrcs * @returns {Module[]} */ @@ -30929,7 +30929,7 @@ class MainModule extends Module { /** * Creates a new program. - * @param {string} mainSrc + * @param {string} mainSrc * @param {string[]} moduleSrcs - optional sources of modules, which can be used for imports * @returns {Program} */ @@ -30939,7 +30939,7 @@ class MainModule extends Module { let site = modules[0].name.site; let imports = Program.parseImports(modules[0].name.value, moduleSrcs); - + let mainImports = modules[0].filterDependencies(imports); /** @type {Module[]} */ @@ -30951,7 +30951,7 @@ class MainModule extends Module { // create the final order of all the modules (this is the order in which statements will be added to the IR) modules = mainImports.concat([modules[0]]).concat(postImports).concat(modules.slice(1)); - + /** * @type {Program} */ @@ -30983,8 +30983,8 @@ class MainModule extends Module { return program; } - /** - * @type {Module[]} + /** + * @type {Module[]} */ get mainImportedModules() { /** @type {Module[]} */ @@ -31131,7 +31131,7 @@ class MainModule extends Module { } this.mainFunc.use(); - + return topScope; } @@ -31188,9 +31188,9 @@ class MainModule extends Module { } /** - * Change the literal value of a const statements - * @param {string} name - * @param {string | UplcValue} value + * Change the literal value of a const statements + * @param {string} name + * @param {string | UplcValue} value * @returns {Program} - returns 'this' so that changeParam calls can be chained */ changeParam(name, value) { @@ -31208,9 +31208,9 @@ class MainModule extends Module { } /** - * Change the literal value of a const statements + * Change the literal value of a const statements * @package - * @param {string} name + * @param {string} name * @param {UplcData} data */ changeParamSafe(name, data) { @@ -31229,7 +31229,7 @@ class MainModule extends Module { /** * Doesn't use wrapEntryPoint - * @param {string} name + * @param {string} name * @returns {UplcValue} */ evalParam(name) { @@ -31272,7 +31272,7 @@ class MainModule extends Module { return new UplcDataValue(irProgram.site, irProgram.data); } } - + /** * Alternative way to get the parameters as HeliosData instances * @returns {Object.} @@ -31286,20 +31286,20 @@ class MainModule extends Module { const handler = { /** * Return from this.#parameters if available, or calculate - * @param {Object.} target + * @param {Object.} target * @param {string} name - * @returns + * @returns */ get(target, name) { if (name in target) { return target[name]; } else { const type = assertDefined(types[name], `invalid param name '${name}'`); - + const uplcValue = that.evalParam(name); const value = (uplcValue instanceof UplcBool) ? new Bool(uplcValue.bool) : type.userType.fromUplcData(uplcValue.data); - + target[name] = value; return value; @@ -31364,7 +31364,7 @@ class MainModule extends Module { throw new Error(`parameter ${p} not found (hint: must come before main)`); } }); - } + } /** * @type {Map} @@ -31386,7 +31386,7 @@ class MainModule extends Module { ]); } - map.set(statement.path, ir); + map.set(statement.path, ir); continue; } @@ -31398,7 +31398,7 @@ class MainModule extends Module { break; } } - + // builtin functions are added when the IR program is built // also replace all tabs with four spaces return wrapWithRawFunctions(IR.wrapWithDefinitions(ir, map)); @@ -31425,14 +31425,14 @@ class MainModule extends Module { } /** - * @param {boolean} simplify + * @param {boolean} simplify * @returns {UplcProgram} */ compile(simplify = false) { const ir = this.toIR([]); const irProgram = IRProgram.new(ir, this.#purpose, simplify); - + //console.log(new Source(irProgram.toString()).pretty()); return irProgram.toUplc(); } @@ -31458,7 +31458,7 @@ class MainModule extends Module { class RedeemerProgram extends Program { /** * @param {number} purpose - * @param {Module[]} modules + * @param {Module[]} modules */ constructor(purpose, modules) { super(purpose, modules); @@ -31516,7 +31516,7 @@ class RedeemerProgram extends Program { /** * @package * @param {string[]} parameters - * @returns {IR} + * @returns {IR} */ toIR(parameters = []) { /** @type {IR[]} */ @@ -31569,7 +31569,7 @@ class DatumRedeemerProgram extends Program { /** * @package - * @param {GlobalScope} scope + * @param {GlobalScope} scope * @returns {TopScope} */ evalTypesInternal(scope) { @@ -31680,7 +31680,7 @@ class DatumRedeemerProgram extends Program { class TestingProgram extends Program { /** - * @param {Module[]} modules + * @param {Module[]} modules */ constructor(modules) { super(ScriptPurpose.Testing, modules); @@ -31702,7 +31702,7 @@ class TestingProgram extends Program { const topScope = this.evalTypesInternal(scope); - // main can have any arg types, and any return type + // main can have any arg types, and any return type if (this.mainFunc.retTypes.length > 1) { throw this.mainFunc.typeError("program entry-point can only return one value"); @@ -31754,13 +31754,13 @@ class SpendingProgram extends DatumRedeemerProgram { evalTypes() { const scope = GlobalScope.new(ScriptPurpose.Spending); - return this.evalTypesInternal(scope); + return this.evalTypesInternal(scope); } } class MintingProgram extends RedeemerProgram { /** - * @param {Module[]} modules + * @param {Module[]} modules */ constructor(modules) { super(ScriptPurpose.Minting, modules); @@ -31780,13 +31780,13 @@ class MintingProgram extends RedeemerProgram { evalTypes() { const scope = GlobalScope.new(ScriptPurpose.Minting); - return this.evalTypesInternal(scope); + return this.evalTypesInternal(scope); } } class StakingProgram extends RedeemerProgram { /** - * @param {Module[]} modules + * @param {Module[]} modules */ constructor(modules) { super(ScriptPurpose.Staking, modules); @@ -31803,7 +31803,7 @@ class StakingProgram extends RedeemerProgram { evalTypes() { const scope = GlobalScope.new(ScriptPurpose.Staking); - return this.evalTypesInternal(scope); + return this.evalTypesInternal(scope); } } @@ -31828,21 +31828,21 @@ export class Tx extends CborData { */ #valid; - /** - * @type {?TxMetadata} + /** + * @type {?TxMetadata} */ #metadata; // the following field(s) aren't used by the serialization (only for building) /** * Upon finalization the slot is calculated and stored in the body - * @type {?Date} + * @type {?Date} */ #validTo; /** - * Upon finalization the slot is calculated and stored in the body - * @type {?Date} + * Upon finalization the slot is calculated and stored in the body + * @type {?Date} */ #validFrom; @@ -31890,7 +31890,7 @@ export class Tx extends CborData { } } - /** + /** * @returns {number[]} */ toCbor() { @@ -31903,7 +31903,7 @@ export class Tx extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Tx} */ static fromCbor(bytes) { @@ -31980,7 +31980,7 @@ export class Tx extends CborData { /** * Throws error if assets of given mph are already being minted in this transaction - * @param {MintingPolicyHash} mph + * @param {MintingPolicyHash} mph * @param {[number[] | string, bigint][]} tokens - list of pairs of [tokenName, quantity], tokenName can be list of bytes or hex-string * @param {UplcDataValue | UplcData} redeemer * @returns {Tx} @@ -32084,20 +32084,20 @@ export class Tx extends CborData { } /** - * @param {TxOutput} output + * @param {TxOutput} output * @returns {Tx} */ addOutput(output) { assert(!this.#valid); - - // min lovelace is checked during build, because + + // min lovelace is checked during build, because this.#body.addOutput(output); return this; } /** - * @param {TxOutput[]} outputs + * @param {TxOutput[]} outputs * @returns {Tx} */ addOutputs(outputs) { @@ -32137,7 +32137,7 @@ export class Tx extends CborData { /** * Usually adding only one collateral input is enough * Must be less than the limit in networkParams (eg. 3), or else an error is thrown during finalization - * @param {UTxO} input + * @param {UTxO} input * @returns {Tx} */ addCollateral(input) { @@ -32160,7 +32160,7 @@ export class Tx extends CborData { if (!this.#valid) { // add dummy signatures let nUniquePubKeyHashes = this.#body.countUniqueSigners(); - + this.#witnesses.addDummySignatures(nUniquePubKeyHashes); } @@ -32223,7 +32223,7 @@ export class Tx extends CborData { } /** - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @param {Address} changeAddress * @returns {Promise} */ @@ -32232,7 +32232,7 @@ export class Tx extends CborData { } /** - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @returns {Promise} */ async checkExecutionBudgets(networkParams) { @@ -32240,7 +32240,7 @@ export class Tx extends CborData { } /** - * @param {Address} changeAddress + * @param {Address} changeAddress */ balanceAssets(changeAddress) { const inputAssets = this.#body.sumInputAndMintedAssets(); @@ -32261,14 +32261,14 @@ export class Tx extends CborData { } /** - * Calculate the base fee which will be multiplied by the required min collateral percentage - * @param {NetworkParams} networkParams - * @param {Address} changeAddress - * @param {UTxO[]} spareUtxos + * Calculate the base fee which will be multiplied by the required min collateral percentage + * @param {NetworkParams} networkParams + * @param {Address} changeAddress + * @param {UTxO[]} spareUtxos */ estimateCollateralBaseFee(networkParams, changeAddress, spareUtxos) { assert(N_DUMMY_INPUTS == 1 || N_DUMMY_INPUTS == 2, "expected N_DUMMY_INPUTs == 1 or N_DUMMY_INPUTS == 2"); - + // create the collateral return output (might not actually be added if there isn't enough lovelace) const dummyOutput = new TxOutput(changeAddress, new Value(0n)); dummyOutput.correctLovelace(networkParams); @@ -32296,7 +32296,7 @@ export class Tx extends CborData { return baseFee; } - + /** * @param {NetworkParams} networkParams * @param {Address} changeAddress @@ -32319,7 +32319,7 @@ export class Tx extends CborData { const collateralInputs = []; /** - * @param {TxInput[]} inputs + * @param {TxInput[]} inputs */ function addCollateralInputs(inputs) { // first try using the UTxOs that already form the inputs @@ -32333,12 +32333,12 @@ export class Tx extends CborData { while (collateralInputs.length >= networkParams.maxCollateralInputs) { collateralInputs.shift(); } - + collateralInputs.push(input); collateral += input.value.lovelace; } } - + addCollateralInputs(this.#body.inputs.slice()); addCollateralInputs(spareUtxos.map(utxo => utxo.asTxInput)); @@ -32375,7 +32375,7 @@ export class Tx extends CborData { * Iteratively increments the fee because the fee increase the tx size which in turn increases the fee (always converges within two steps though). * Throws error if transaction can't be balanced. * Shouldn't be used directly - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @param {Address} changeAddress * @param {UTxO[]} spareUtxos - used when there are yet enough inputs to cover everything (eg. due to min output lovelace requirements, or fees) */ @@ -32389,11 +32389,11 @@ export class Tx extends CborData { changeOutput.correctLovelace(networkParams); this.#body.addOutput(changeOutput); - + const minLovelace = changeOutput.value.lovelace; let fee = this.setFee(networkParams, this.estimateFee(networkParams)); - + let inputValue = this.#body.sumInputAndMintedValue(); let feeValue = new Value(fee); @@ -32401,7 +32401,7 @@ export class Tx extends CborData { nonChangeOutputValue = feeValue.add(nonChangeOutputValue); spareUtxos = spareUtxos.filter(utxo => utxo.value.assets.isZero()); - + // use some spareUtxos if the inputValue doesn't cover the outputs and fees while (!inputValue.ge(nonChangeOutputValue.add(changeOutput.value))) { @@ -32484,13 +32484,13 @@ export class Tx extends CborData { * Throws an error if there isn't enough collateral * Also throws an error if the script doesn't require collateral, but collateral was actually included * Shouldn't be used directly - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams */ checkCollateral(networkParams) { if (this.isSmart()) { let minCollateralPct = networkParams.minCollateralPct; - // only use the exBudget + // only use the exBudget const fee = this.#body.fee; @@ -32503,7 +32503,7 @@ export class Tx extends CborData { /** * Throws error if tx is too big * Shouldn't be used directly - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams */ checkSize(networkParams) { let size = this.toCbor().length; @@ -32515,7 +32515,7 @@ export class Tx extends CborData { /** * Final check that fee is big enough - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams */ checkFee(networkParams) { assert(this.estimateFee(networkParams) <= this.#body.fee, "fee too small"); @@ -32561,7 +32561,7 @@ export class Tx extends CborData { // balance the non-ada assets this.balanceAssets(changeAddress) - // make sure that each output contains the necessary minimum amount of lovelace + // make sure that each output contains the necessary minimum amount of lovelace this.#body.correctOutputs(networkParams); // the scripts executed at this point will not see the correct txHash nor the correct fee @@ -32598,9 +32598,9 @@ export class Tx extends CborData { } /** - * Throws an error if verify==true and signature is invalid + * Throws an error if verify==true and signature is invalid * Adding many signatures might be a bit slow - * @param {Signature} signature + * @param {Signature} signature * @param {boolean} verify * @returns {Tx} */ @@ -32619,8 +32619,8 @@ export class Tx extends CborData { /** * Throws an error if verify==true and any of the signatures is invalid * Adding many signatures might be a bit slow - * @param {Signature[]} signatures - * @param {boolean} verify + * @param {Signature[]} signatures + * @param {boolean} verify * @returns {Tx} */ addSignatures(signatures, verify = true) { @@ -32662,7 +32662,7 @@ class TxBody extends CborData { /** * Inputs must be sorted before submitting (first by TxId, then by utxoIndex) * Spending redeemers must point to the sorted inputs - * @type {TxInput[]} + * @type {TxInput[]} */ #inputs; @@ -32681,7 +32681,7 @@ class TxBody extends CborData { /** * Withdrawals must be sorted by address * Stake rewarding redeemers must point to the sorted withdrawals - * @type {Map} + * @type {Map} */ #withdrawals; @@ -32691,7 +32691,7 @@ class TxBody extends CborData { /** * Internally the assets must be sorted by mintingpolicyhash * Minting redeemers must point to the sorted minted assets - * @type {Assets} + * @type {Assets} */ #minted; @@ -32787,7 +32787,7 @@ class TxBody extends CborData { object.set(0, CborData.encodeDefList(this.#inputs)); object.set(1, CborData.encodeDefList(this.#outputs)); object.set(2, CborData.encodeInteger(this.#fee)); - + if (this.#lastValidSlot !== null) { object.set(3, CborData.encodeInteger(this.#lastValidSlot)); } @@ -32968,7 +32968,7 @@ class TxBody extends CborData { /** * @param {NetworkParams} networkParams * @param {Redeemer[]} redeemers - * @param {ListData} datums + * @param {ListData} datums * @param {TxId} txId * @returns {ConstrData} */ @@ -32979,14 +32979,14 @@ class TxBody extends CborData { new ListData(this.#outputs.map(output => output.toData())), (new Value(this.#fee))._toUplcData(), // NOTE: all other Value instances in ScriptContext contain some lovelace, but #minted can never contain any lovelace, yet cardano-node always prepends 0 lovelace to the #minted MapData - (new Value(0n, this.#minted))._toUplcData(true), + (new Value(0n, this.#minted))._toUplcData(true), new ListData(this.#certs.map(cert => cert.toData())), new MapData(Array.from(this.#withdrawals.entries()).map(w => [w[0].toStakingData(), new IntData(w[1])])), this.toValidTimeRangeData(networkParams), new ListData(this.#signers.map(rs => new ByteArrayData(rs.bytes))), new MapData(redeemers.map(r => [r.toScriptPurposeData(this), r.data])), new MapData(datums.list.map(d => [ - new ByteArrayData(Crypto.blake2b(d.toCbor())), + new ByteArrayData(Crypto.blake2b(d.toCbor())), d ])), // DEBUG extra data to see if it influences the ex budget @@ -32995,13 +32995,13 @@ class TxBody extends CborData { } /** - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @param {Redeemer[]} redeemers * @param {ListData} datums * @param {number} redeemerIdx * @returns {UplcData} */ - toScriptContextData(networkParams, redeemers, datums, redeemerIdx) { + toScriptContextData(networkParams, redeemers, datums, redeemerIdx) { return new ConstrData(0, [ // tx (we can't know the txId right now, because we don't know the execution costs yet, but a dummy txId should be fine) this.toTxData(networkParams, redeemers, datums, TxId.dummy()), @@ -33083,7 +33083,7 @@ class TxBody extends CborData { } /** - * @param {TxInput} input + * @param {TxInput} input * @param {boolean} checkUniqueness */ addInput(input, checkUniqueness = true) { @@ -33129,7 +33129,7 @@ class TxBody extends CborData { } /** - * @param {TxInput} input + * @param {TxInput} input */ addRefInput(input) { this.#refInputs.push(input); @@ -33148,7 +33148,7 @@ class TxBody extends CborData { * Dummy outputs are needed to be able to correctly estimate fees * Throws an error if the output doesn't exist in list of outputs * Internal use only! - * @param {TxOutput} output + * @param {TxOutput} output */ removeOutput(output) { let idx = -1; @@ -33169,21 +33169,21 @@ class TxBody extends CborData { assert(this.#outputs.length == n - 1, "output not removed"); } - + /** - * @param {PubKeyHash} hash + * @param {PubKeyHash} hash */ addSigner(hash) { this.#signers.push(hash); } /** - * @param {TxInput} input + * @param {TxInput} input */ addCollateral(input) { this.#collateral.push(input); } - + /** * @param {Hash} scriptDataHash */ @@ -33199,7 +33199,7 @@ class TxBody extends CborData { } /** - * @param {TxOutput | null} output + * @param {TxOutput | null} output */ setCollateralReturn(output) { this.#collateralReturn = output; @@ -33277,10 +33277,10 @@ class TxBody extends CborData { assert(minLovelace <= output.value.lovelace, `not enough lovelace in output (expected at least ${minLovelace.toString()}, got ${output.value.lovelace})`); } } - + /** * @param {NetworkParams} networkParams - * @param {?bigint} minCollateral + * @param {?bigint} minCollateral */ checkCollateral(networkParams, minCollateral) { assert(this.#collateral.length <= networkParams.maxCollateralInputs); @@ -33325,7 +33325,7 @@ class TxBody extends CborData { assert(TxInput.comp(prev, input) <= -1, "inputs not sorted"); } }); - + // TODO: also add withdrawals in sorted manner this.#withdrawals = new Map(Array.from(this.#withdrawals.entries()).sort((a, b) => { return Address.compStakingHashes(a[0], b[0]); @@ -33430,7 +33430,7 @@ export class TxWitnesses extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {TxWitnesses} */ static fromCbor(bytes) { @@ -33470,7 +33470,7 @@ export class TxWitnesses extends CborData { /** * Throws error if signatures are incorrect - * @param {number[]} bodyBytes + * @param {number[]} bodyBytes */ verifySignatures(bodyBytes) { for (let signature of this.#signatures) { @@ -33506,7 +33506,7 @@ export class TxWitnesses extends CborData { } /** - * @param {Signature} signature + * @param {Signature} signature */ addSignature(signature) { this.#signatures.push(signature); @@ -33528,7 +33528,7 @@ export class TxWitnesses extends CborData { /** * Index is calculated later * @param {TxInput} input - * @param {UplcData} redeemerData + * @param {UplcData} redeemerData */ addSpendingRedeemer(input, redeemerData) { this.#redeemers.push(new SpendingRedeemer(input, -1, redeemerData)); // actual input index is determined later @@ -33543,7 +33543,7 @@ export class TxWitnesses extends CborData { } /** - * @param {UplcData} data + * @param {UplcData} data */ addDatumData(data) { // check that it hasn't already been included @@ -33561,7 +33561,7 @@ export class TxWitnesses extends CborData { /** * Throws error if script was already added before - * @param {UplcProgram} program + * @param {UplcProgram} program * @param {boolean} isRef */ attachScript(program, isRef = false) { @@ -33596,7 +33596,7 @@ export class TxWitnesses extends CborData { } /** - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @returns {?Hash} - returns null if there are no redeemers */ calcScriptDataHash(networkParams) { @@ -33611,7 +33611,7 @@ export class TxWitnesses extends CborData { let sortedCostParams = networkParams.sortedCostParams; bytes = bytes.concat(CborData.encodeMap([[ - CborData.encodeInteger(1n), + CborData.encodeInteger(1n), CborData.encodeDefList(sortedCostParams.map(cp => CborData.encodeInteger(BigInt(cp)))), ]])); @@ -33622,12 +33622,12 @@ export class TxWitnesses extends CborData { } /** - * - * @param {NetworkParams} networkParams + * + * @param {NetworkParams} networkParams * @param {TxBody} body - * @param {Redeemer} redeemer + * @param {Redeemer} redeemer * @param {UplcData} scriptContext - * @returns {Promise} + * @returns {Promise} */ async executeRedeemer(networkParams, body, redeemer, scriptContext) { if (redeemer instanceof SpendingRedeemer) { @@ -33648,8 +33648,8 @@ export class TxWitnesses extends CborData { const script = this.getScript(validatorHash); const args = [ - new UplcDataValue(Site.dummy(), datumData), - new UplcDataValue(Site.dummy(), redeemer.data), + new UplcDataValue(Site.dummy(), datumData), + new UplcDataValue(Site.dummy(), redeemer.data), new UplcDataValue(Site.dummy(), scriptContext), ]; @@ -33657,7 +33657,7 @@ export class TxWitnesses extends CborData { profile.messages.forEach(m => console.log(m)); - if (profile.result instanceof UserError) { + if (profile.result instanceof UserError) { throw profile.result; } else { return {mem: profile.mem, cpu: profile.cpu}; @@ -33678,7 +33678,7 @@ export class TxWitnesses extends CborData { profile.messages.forEach(m => console.log(m)); - if (profile.result instanceof UserError) { + if (profile.result instanceof UserError) { throw profile.result; } else { return {mem: profile.mem, cpu: profile.cpu}; @@ -33690,7 +33690,7 @@ export class TxWitnesses extends CborData { /** * Executes the redeemers in order to calculate the necessary ex units - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @param {TxBody} body - needed in order to create correct ScriptContexts * @param {Address} changeAddress - needed for dummy input and dummy output * @returns {Promise} @@ -33760,8 +33760,8 @@ export class TxWitnesses extends CborData { /** * Reruns all the redeemers to make sure the ex budgets are still correct (can change due to outputs added during rebalancing) - * @param {NetworkParams} networkParams - * @param {TxBody} body + * @param {NetworkParams} networkParams + * @param {TxBody} body */ async checkExecutionBudgets(networkParams, body) { for (let i = 0; i < this.#redeemers.length; i++) { @@ -33818,8 +33818,8 @@ class TxInput extends CborData { #origOutput; /** - * @param {TxId} txId - * @param {bigint} utxoIdx + * @param {TxId} txId + * @param {bigint} utxoIdx * @param {?TxOutput} origOutput - used during building, not part of serialization */ constructor(txId, utxoIdx, origOutput = null) { @@ -33828,7 +33828,7 @@ class TxInput extends CborData { this.#utxoIdx = utxoIdx; this.#origOutput = origOutput; } - + /** * @type {TxId} */ @@ -33905,7 +33905,7 @@ class TxInput extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {TxInput} */ static fromCbor(bytes) { @@ -33936,8 +33936,8 @@ class TxInput extends CborData { } /** - * Tx inputs must be ordered. - * The following function can be used directly by a js array sort + * Tx inputs must be ordered. + * The following function can be used directly by a old_js array sort * @param {TxInput} a * @param {TxInput} b * @returns {number} @@ -33950,7 +33950,7 @@ class TxInput extends CborData { } else { return res; } - } + } /** * @returns {Object} @@ -33971,8 +33971,8 @@ export class UTxO { #input; /** - * @param {TxId} txId - * @param {bigint} utxoIdx + * @param {TxId} txId + * @param {bigint} utxoIdx * @param {TxOutput} origOutput */ constructor(txId, utxoIdx, origOutput) { @@ -34042,7 +34042,7 @@ export class UTxO { if (maybeTxInput !== null && origOutput !== null) { /** @type {TxInput} */ const txInput = maybeTxInput; - + return new UTxO(txInput.txId, txInput.utxoIdx, origOutput); } else { throw new Error("unexpected"); @@ -34076,7 +34076,7 @@ export class UTxO { export class TxRefInput extends TxInput { /** - * @param {TxId} txId + * @param {TxId} txId * @param {bigint} utxoId * @param {TxOutput} origOutput */ @@ -34099,10 +34099,10 @@ export class TxOutput extends CborData { #refScript; /** - * @param {Address} address - * @param {Value} value - * @param {?Datum} datum - * @param {?UplcProgram} refScript + * @param {Address} address + * @param {Value} value + * @param {?Datum} datum + * @param {?UplcProgram} refScript */ constructor(address, value, datum = null, refScript = null) { assert(datum === null || datum instanceof Datum); // check this explicitely because caller might be using this constructor without proper type-checking @@ -34142,8 +34142,8 @@ export class TxOutput extends CborData { } /** - * Mutation is handy when correctin the quantity of lovelace in a utxo - * @param {Datum} datum + * Mutation is handy when correctin the quantity of lovelace in a utxo + * @param {Datum} datum */ setDatum(datum) { this.#datum = datum; @@ -34212,7 +34212,7 @@ export class TxOutput extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {TxOutput} */ static fromCbor(bytes) { @@ -34230,7 +34230,7 @@ export class TxOutput extends CborData { if (CborData.isObject(bytes)) { CborData.decodeObject(bytes, (i, fieldBytes) => { - switch(i) { + switch(i) { case 0: address = Address.fromCbor(fieldBytes); break; @@ -34268,7 +34268,7 @@ export class TxOutput extends CborData { } else if (CborData.isTuple(bytes)) { // this is the pre-vasil format, which is still sometimes returned by wallet connector functions CborData.decodeTuple(bytes, (i, fieldBytes) => { - switch(i) { + switch(i) { case 0: address = Address.fromCbor(fieldBytes); break; @@ -34338,7 +34338,7 @@ export class TxOutput extends CborData { /** * Mutates. Makes sure the output contains at least the minimum quantity of lovelace. * Other parts of the output can optionally also be mutated - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @param {?((output: TxOutput) => void)} updater */ correctLovelace(networkParams, updater = null) { @@ -34363,7 +34363,7 @@ class DCert extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {DCert} */ static fromCbor(bytes) { @@ -34385,7 +34385,7 @@ export class StakeAddress { #bytes; /** - * @param {number[]} bytes + * @param {number[]} bytes */ constructor(bytes) { assert(bytes.length == 29); @@ -34411,7 +34411,7 @@ export class StakeAddress { /** * Convert regular Address into StakeAddress. * Throws an error if the given Address doesn't have a staking part. - * @param {Address} addr + * @param {Address} addr * @returns {StakeAddress} */ static fromAddress(addr) { @@ -34541,8 +34541,8 @@ export class Signature extends CborData { #signature; /** - * @param {number[]} pubKey - * @param {number[]} signature + * @param {number[]} pubKey + * @param {number[]} signature */ constructor(pubKey, signature) { super(); @@ -34572,7 +34572,7 @@ export class Signature extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Signature} */ static fromCbor(bytes) { @@ -34642,8 +34642,8 @@ class Redeemer extends CborData { #exUnits; /** - * @param {UplcData} data - * @param {Cost} exUnits + * @param {UplcData} data + * @param {Cost} exUnits */ constructor(data, exUnits = {mem: 0n, cpu: 0n}) { super(); @@ -34675,11 +34675,11 @@ class Redeemer extends CborData { /** * type: * 0 -> spending - * 1 -> minting + * 1 -> minting * 2 -> certifying * 3 -> rewarding - * @param {number} type - * @param {number} index + * @param {number} type + * @param {number} index * @returns {number[]} */ toCborInternal(type, index) { @@ -34695,7 +34695,7 @@ class Redeemer extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Redeemer} */ static fromCbor(bytes) { @@ -34722,7 +34722,7 @@ class Redeemer extends CborData { case 2: data = UplcData.fromCbor(fieldBytes); break; - case 3: + case 3: /** @type {?bigint} */ let mem = null; @@ -34767,7 +34767,7 @@ class Redeemer extends CborData { case 1: return new MintingRedeemer(null, index, data, cost); default: - throw new Error("unhandled redeemer type (Todo)"); + throw new Error("unhandled redeemer type (Todo)"); } } } @@ -34793,7 +34793,7 @@ class Redeemer extends CborData { } /** - * @param {TxBody} body + * @param {TxBody} body * @returns {ConstrData} */ toScriptPurposeData(body) { @@ -34801,26 +34801,26 @@ class Redeemer extends CborData { } /** - * @param {TxBody} body + * @param {TxBody} body */ updateIndex(body) { throw new Error("not yet implemented"); } /** - * @param {Cost} cost + * @param {Cost} cost */ setCost(cost) { this.#exUnits = cost; } /** - * @param {NetworkParams} networkParams + * @param {NetworkParams} networkParams * @returns {bigint} */ estimateFee(networkParams) { // this.#exUnits.mem and this.#exUnits can be 0 if we are estimating the fee for an initial balance - + let [memFee, cpuFee] = networkParams.exFeeParams; return BigInt(Math.ceil(Number(this.#exUnits.mem)*memFee + Number(this.#exUnits.cpu)*cpuFee)); @@ -34834,8 +34834,8 @@ class SpendingRedeemer extends Redeemer { /** * @param {?TxInput} input * @param {number} inputIndex - * @param {UplcData} data - * @param {Cost} exUnits + * @param {UplcData} data + * @param {Cost} exUnits */ constructor(input, inputIndex, data, exUnits = {mem: 0n, cpu: 0n}) { super(data, exUnits); @@ -34872,7 +34872,7 @@ class SpendingRedeemer extends Redeemer { } /** - * @param {TxBody} body + * @param {TxBody} body * @returns {ConstrData} */ toScriptPurposeData(body) { @@ -34928,7 +34928,7 @@ class MintingRedeemer extends Redeemer { return this.toCborInternal(1, this.#mphIndex); } - /** + /** * @returns {Object} */ dump() { @@ -34942,7 +34942,7 @@ class MintingRedeemer extends Redeemer { } /** - * @param {TxBody} body + * @param {TxBody} body * @returns {ConstrData} */ toScriptPurposeData(body) { @@ -34954,7 +34954,7 @@ class MintingRedeemer extends Redeemer { } /** - * @param {TxBody} body + * @param {TxBody} body */ updateIndex(body) { if (this.#mph === null) { @@ -34977,7 +34977,7 @@ export class Datum extends CborData { } /** - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Datum} */ static fromCbor(bytes) { @@ -35097,7 +35097,7 @@ export class HashedDatum extends Datum { #origData; /** - * @param {DatumHash} hash + * @param {DatumHash} hash * @param {?UplcData} origData */ constructor(hash, origData = null) { @@ -35157,7 +35157,7 @@ export class HashedDatum extends Datum { } /** - * @param {UplcData} data + * @param {UplcData} data * @returns {HashedDatum} */ static fromData(data) { @@ -35256,7 +35256,7 @@ class InlineDatum extends Datum { */ /** - * @param {Metadata} metadata + * @param {Metadata} metadata * @returns {number[]} */ function encodeMetadata(metadata) { @@ -35279,7 +35279,7 @@ function encodeMetadata(metadata) { encodeMetadata(pair[1]) ]; } else { - throw new Error("invalid metadata schema"); + throw new Error("invalid metadata schema"); } })); } else { @@ -35292,7 +35292,7 @@ function encodeMetadata(metadata) { /** * Shifts bytes to next Cbor element - * @param {number[]} bytes + * @param {number[]} bytes * @returns {Metadata} */ function decodeMetadata(bytes) { @@ -35330,7 +35330,7 @@ function decodeMetadata(bytes) { class TxMetadata { /** - * @type {Object.} + * @type {Object.} */ #metadata; @@ -35378,7 +35378,7 @@ class TxMetadata { CborData.encodeInteger(BigInt(key)), encodeMetadata(this.#metadata[key]) ]); - + return CborData.encodeMap(pairs); } @@ -35392,7 +35392,7 @@ class TxMetadata { CborData.decodeMap(data, (pairBytes) => { txMetadata.add( - Number(CborData.decodeInteger(pairBytes)), + Number(CborData.decodeInteger(pairBytes)), decodeMetadata(pairBytes) ); }); @@ -35451,7 +35451,7 @@ export function highlight(src) { /** @type {SymbolToken[]} */ let groupStack = []; - + for (let i = 0; i < n; i++) { let c = src[i]; let isLast = i == n - 1; @@ -35463,7 +35463,7 @@ export function highlight(src) { if (!isLast && src[i+1] == "/") { data[j++] = SyntaxCategory.Comment; data[j++] = SyntaxCategory.Comment; - + i++; state = SyntaxState.SLComment; } else if (!isLast && src[i+1] == "*") { @@ -35718,7 +35718,7 @@ export function highlight(src) { break; default: throw new Error("unhandled SyntaxState"); - } + } } for (let s of groupStack) { @@ -35796,7 +35796,7 @@ export class FuzzyTest { * @param {number} max * @returns {ValueGenerator} */ - int(min = -10000000, max = 10000000) { + int(min = -10000000, max = 10000000) { let rand = this.rawInt(min, max); return function() { @@ -35823,12 +35823,12 @@ export class FuzzyTest { for (let i = 0; i < n; i++) { chars.push(String.fromCodePoint(Math.round(rand()*1112064))); } - + return new UplcDataValue(Site.dummy(), ByteArrayData.fromString(chars.join(""))); } } - /** + /** * Returns a generator for strings with ascii characters from 32 (space) to 126 (tilde) * @param {number} minLength * @param {number} maxLength @@ -35847,7 +35847,7 @@ export class FuzzyTest { for (let i = 0; i < n; i++) { chars.push(String.fromCharCode(Math.round(rand()*94 + 32))); } - + return new UplcDataValue(Site.dummy(), ByteArrayData.fromString(chars.join(""))); } } @@ -35911,7 +35911,7 @@ export class FuzzyTest { } /** - * Returns a generator for bytearrays + * Returns a generator for bytearrays * @param {number} minLength * @param {number} maxLength * @returns {ValueGenerator} @@ -36071,7 +36071,7 @@ export class FuzzyTest { const fields = fieldGenerators.map(g => g().data); const finalTag = (typeof tag == "number") ? tag : Math.round(tag()*100); - + return new UplcDataValue(Site.dummy(), new ConstrData(finalTag, fields)); } } @@ -36099,7 +36099,7 @@ export class FuzzyTest { for (let it = 0; it < nRuns; it++) { let args = argGens.map(gen => gen()); - + let result = await program.run(args); let obj = propTest(args, result); @@ -36152,7 +36152,7 @@ export class FuzzyTest { } let args = paramArgs.map(paramArg => program.evalParam(paramArg)); - + let coreProgram = Program.new(src).compile(simplify); let result = await coreProgram.run(args); @@ -36194,8 +36194,8 @@ export class FuzzyTest { */ export class CoinSelection { /** - * @param {UTxO[]} utxos - * @param {Value} amount + * @param {UTxO[]} utxos + * @param {Value} amount * @param {boolean} largestFirst * @returns {[UTxO[], UTxO[]]} - [picked, not picked that can be used as spares] */ @@ -36303,8 +36303,8 @@ export class CoinSelection { } /** - * @param {UTxO[]} utxos - * @param {Value} amount + * @param {UTxO[]} utxos + * @param {Value} amount * @returns {[UTxO[], UTxO[]]} - [selected, not selected] */ static selectSmallestFirst(utxos, amount) { @@ -36312,8 +36312,8 @@ export class CoinSelection { } /** - * @param {UTxO[]} utxos - * @param {Value} amount + * @param {UTxO[]} utxos + * @param {Value} amount * @returns {[UTxO[], UTxO[]]} - [selected, not selected] */ static selectLargestFirst(utxos, amount) { @@ -36356,7 +36356,7 @@ export class Cip30Wallet { #handle; /** - * @param {Cip30Handle} handle + * @param {Cip30Handle} handle */ constructor(handle) { this.#handle = handle; @@ -36391,17 +36391,17 @@ export class Cip30Wallet { } /** - * @param {Tx} tx + * @param {Tx} tx * @returns {Promise} */ async signTx(tx) { const res = await this.#handle.signTx(bytesToHex(tx.toCbor()), true); - + return TxWitnesses.fromCbor(hexToBytes(res)).signatures; } /** - * @param {Tx} tx + * @param {Tx} tx * @returns {Promise} */ async submitTx(tx) { @@ -36415,7 +36415,7 @@ export class WalletHelper { #wallet; /** - * @param {Wallet} wallet + * @param {Wallet} wallet */ constructor(wallet) { this.#wallet = wallet; @@ -36484,10 +36484,10 @@ export class WalletHelper { } /** - * @param {Value} amount + * @param {Value} amount * @param {(allUtxos: UTxO[], anount: Value) => [UTxO[], UTxO[]]} algorithm * @returns {Promise<[UTxO[], UTxO[]]>} - [picked, not picked that can be used as spares] - */ + */ async pickUtxos(amount, algorithm = CoinSelection.selectSmallestFirst) { return algorithm(await this.#wallet.utxos, amount); } @@ -36579,12 +36579,12 @@ export class BlockfrostV0 { /** * Determine the network which the wallet is connected to. - * @param {Wallet} wallet + * @param {Wallet} wallet * @param {{ * preview?: string, * preprod?: string, * mainnet?: string - * }} projectIds + * }} projectIds * @returns {Promise} */ static async resolve(wallet, projectIds) { @@ -36607,8 +36607,8 @@ export class BlockfrostV0 { if (await preprodNetwork.hasUtxo(refUtxo)) { return preprodNetwork; } - } - + } + if (previewProjectId !== undefined) { const previewNetwork = new BlockfrostV0("preview", previewProjectId); @@ -36629,8 +36629,8 @@ export class BlockfrostV0 { } /** - * @param {any} obj - * @returns + * @param {any} obj + * @returns */ static parseValue(obj) { let value = new Value(); @@ -36680,7 +36680,7 @@ export class BlockfrostV0 { /** * Returns oldest UTxOs first, newest last. * TODO: pagination - * @param {Address} address + * @param {Address} address * @returns {Promise} */ async getUtxos(address) { @@ -36692,13 +36692,13 @@ export class BlockfrostV0 { } }); - /** - * @type {any} + /** + * @type {any} */ let all = await response.json(); if (all?.status_code >= 300) { - all = []; + all = []; } return all.map(obj => { @@ -36712,10 +36712,10 @@ export class BlockfrostV0 { ) ); }); - } + } - /** - * @param {Tx} tx + /** + * @param {Tx} tx * @returns {Promise} */ async submitTx(tx) { @@ -36739,9 +36739,9 @@ export class BlockfrostV0 { if (response.status != 200) { throw new Error(responseText); } else { - return new TxId(JSON.parse(responseText)); + return new TxId(JSON.parse(responseText)); } - } + } } @@ -36757,7 +36757,7 @@ export class WalletEmulator { #privateKey; #publicKey; - /** + /** * @param {Network} network * @param {NumberGenerator} random - used to generate the private key */ @@ -36771,7 +36771,7 @@ export class WalletEmulator { /** * Generate a private key from a random number generator (not cryptographically secure!) - * @param {NumberGenerator} random + * @param {NumberGenerator} random * @returns {number[]} - Ed25519 private key is 32 bytes long */ static genPrivateKey(random) { @@ -36833,7 +36833,7 @@ export class WalletEmulator { } /** - * @param {Tx} tx + * @param {Tx} tx * @returns {Promise} */ async submitTx(tx) { @@ -36861,9 +36861,9 @@ class GenesisTx { /** * @param {number} id - * @param {Address} address + * @param {Address} address * @param {bigint} lovelace - * @param {Assets} assets + * @param {Assets} assets */ constructor(id, address, lovelace, assets) { this.#id = id; @@ -36888,9 +36888,9 @@ class GenesisTx { } /** - * @param {TxId} txId - * @param {bigint} utxoIdx - * @returns + * @param {TxId} txId + * @param {bigint} utxoIdx + * @returns */ consumes(txId, utxoIdx) { return false; @@ -36928,7 +36928,7 @@ class RegularTx { #tx; /** - * @param {Tx} tx + * @param {Tx} tx */ constructor(tx) { this.#tx = tx; @@ -36955,8 +36955,8 @@ class RegularTx { } /** - * @param {Address} address - * @param {UTxO[]} utxos + * @param {Address} address + * @param {UTxO[]} utxos * @returns {UTxO[]} */ collectUtxos(address, utxos) { @@ -37008,7 +37008,7 @@ export class NetworkEmulator { #blocks; /** - * @param {number} seed + * @param {number} seed */ constructor(seed = 0) { this.#slot = 0n; @@ -37034,9 +37034,9 @@ export class NetworkEmulator { /** * Creates a UTxO using a GenesisTx. - * @param {WalletEmulator} wallet - * @param {bigint} lovelace - * @param {Assets} assets + * @param {WalletEmulator} wallet + * @param {bigint} lovelace + * @param {Assets} assets */ createUtxo(wallet, lovelace, assets = new Assets([])) { if (lovelace != 0n || !assets.isZero()) { @@ -37054,7 +37054,7 @@ export class NetworkEmulator { /** * Mint a block with the current mempool, and advance the slot. - * @param {bigint} nSlots + * @param {bigint} nSlots */ tick(nSlots) { if (this.#mempool.length > 0) { @@ -37086,8 +37086,8 @@ export class NetworkEmulator { } /** - * @param {TxId} txId - * @param {bigint} utxoIdx + * @param {TxId} txId + * @param {bigint} utxoIdx * @returns {boolean} */ isConsumed(txId, utxoIdx) { @@ -37101,7 +37101,7 @@ export class NetworkEmulator { } /** - * @param {Tx} tx + * @param {Tx} tx * @returns {Promise} */ async submitTx(tx) { @@ -37117,7 +37117,7 @@ export class NetworkEmulator { } /** - * The following functions are used in ./test-suite.js and ./test-script-addr.js and aren't (yet) + * The following functions are used in ./test-suite.old_js and ./test-script-addr.old_js and aren't (yet) * intended to be used by regular users of this library. */ export const exportedForTesting = { @@ -37153,4 +37153,4 @@ export const exportedForTesting = { Tx: Tx, TxInput: TxInput, TxBody: TxBody -}; \ No newline at end of file +}; diff --git a/littercoin/run/build-merch-mint-tx.mjs b/littercoin/run/build-merch-mint-tx.mjs index aed3da6af..80f768ea0 100644 --- a/littercoin/run/build-merch-mint-tx.mjs +++ b/littercoin/run/build-merch-mint-tx.mjs @@ -1,18 +1,18 @@ import { - Address, - Assets, - bytesToHex, + Address, + Assets, + bytesToHex, CoinSelection, - ConstrData, - hexToBytes, + ConstrData, + hexToBytes, NetworkParams, - Program, + Program, PubKeyHash, - Value, + Value, textToBytes, TxOutput, - Tx, - UTxO + Tx, + UTxO } from "../lib/helios.mjs"; import { getLittercoinContractDetails } from "./lc-info.mjs"; @@ -20,8 +20,8 @@ import { signTx } from "./sign-tx.mjs"; /** - * Main calling function via the command line - * Usage: node build-merch-mint-tx.js destAddr cBorChangeAddr [cborUtxo1,cborUtxo2,...] + * Main calling function via the command line + * Usage: node build-merch-mint-tx.old_js destAddr cBorChangeAddr [cborUtxo1,cborUtxo2,...] * @params {string, string, string[]} * @output {string} cborTx */ @@ -43,7 +43,7 @@ const main = async () => { // Add 1 year expiry date for merchant token name const today = Date.now().toString(); const merchTokenName = process.env.MERCH_TOKEN_NAME + " | " + today.toString(); - + // Get the change address from the wallet const changeAddr = Address.fromHex(hexChangeAddr); @@ -53,7 +53,7 @@ const main = async () => { // Get littercoin smart contract and related script details const lcDetails = await getLittercoinContractDetails(); - + // Start building the transaction const tx = new Tx(); @@ -69,7 +69,7 @@ const main = async () => { // a plutus script transaction even if we don't actually use it. const merchRedeemer = new ConstrData(0, []); const merchToken = [[textToBytes(merchTokenName), BigInt(1)]]; - + // Add the mint to the tx tx.mintTokens( merchTokenMPH, @@ -88,7 +88,7 @@ const main = async () => { // Network Params const networkParams = new NetworkParams(JSON.parse(lcDetails.netParams)); - + // Send any change back to the buyer await tx.finalize(networkParams, changeAddr, utxos[1]); @@ -117,4 +117,4 @@ const main = async () => { main(); - + diff --git a/package-lock.json b/package-lock.json index ec3075630..0490a3689 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6345 +1,6333 @@ { - "name": "openlittermap-web", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@stricahq/bip32ed25519": "^1.0.4", - "@turf/hex-grid": "^7.0.0", - "@turf/turf": "^7.0.0", - "@vitejs/plugin-vue2": "^2.3.1", - "animate.css": "^4.1.1", - "animated-number-vue": "^1.0.0", - "bip39": "^3.1.0", - "blakejs": "^1.2.1", - "buefy": "^0.9.29", - "bulma": "^1.0.1", - "chart.js": "^2.9.4", - "fs": "0.0.1-security", - "laravel-echo": "^1.16.1", - "laravel-permission-to-vuejs": "2.0.5", - "leaflet": "^1.9.4", - "leaflet-timedimension": "^1.1.1", - "leaflet-webgl-heatmap": "github:xlcrr/leaflet-webgl-heatmap", - "leaflet.glify": "^3.3.0", - "lodash.sortby": "^4.7.0", - "mapbox-gl": "^3.4.0", - "moment": "^2.30.1", - "pusher-js": "^8.4.0-rc2", - "supercluster": "^8.0.1", - "v-img": "^0.2.0", - "v-mask": "^2.2.3", - "vue": "^2.7.16", - "vue-chartjs": "^3.5.1", - "vue-click-outside": "^1.1.0", - "vue-drag-resize": "^1.4.2", - "vue-draggable-resizable": "^2.3.0", - "vue-echo-laravel": "^1.0.0", - "vue-fullscreen": "^2.6.1", - "vue-functional-calendar": "^2.9.99", - "vue-i18n": "^8.21.0", - "vue-loading-overlay": "^3.3.3", - "vue-localstorage": "^0.6.2", - "vue-number-animation": "^1.0.5", - "vue-paginate": "^3.6.0", - "vue-recaptcha": "^1.3.0", - "vue-router": "^3.4.3", - "vue-select": "^3.10.8", - "vue-simple-suggest": "^1.10.3", - "vue-slider-component": "^3.2.5", - "vue-stripe-checkout": "^3.5.7", - "vue-stripe-elements-plus": "^0.3.2", - "vue-sweetalert2": "^3.0.6", - "vue-toastify": "^1.8.0", - "vue-typed-js": "^0.1.2", - "vue2-dropzone": "^3.6.0", - "vuedraggable": "^2.24.3", - "vuex": "^3.5.1", - "vuex-persistedstate": "^3.1.0" - }, - "devDependencies": { - "axios": "^1.7.7", - "cross-env": "^7.0.3", - "laravel-vite-plugin": "^1.0.4", - "lodash": "^4.17.21", - "resolve-url-loader": "^5.0.0", - "sass": "^1.77.6", - "sass-loader": "^14.2.1", - "vite": "^5.4.8", - "vue-eslint-parser": "^9.4.3", - "vue-template-compiler": "^2.7.16" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "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, - "peer": true, - "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", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.0.tgz", - "integrity": "sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint/object-schema": "^2.1.4", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.6.0.tgz", - "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==", - "dev": true, - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", - "dev": true, - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "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, - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", - "dev": true, - "peer": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@mapbox/mapbox-gl-supported": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-3.0.0.tgz", - "integrity": "sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==" - }, - "node_modules/@mapbox/point-geometry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" - }, - "node_modules/@mapbox/tiny-sdf": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", - "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" - }, - "node_modules/@mapbox/unitbezier": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" - }, - "node_modules/@mapbox/vector-tile": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", - "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", - "dependencies": { - "@mapbox/point-geometry": "~0.1.0" - } - }, - "node_modules/@mapbox/whoots-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", - "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "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==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 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==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 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==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", - "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", - "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", - "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", - "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", - "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", - "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", - "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", - "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", - "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", - "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", - "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", - "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", - "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", - "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", - "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@stricahq/bip32ed25519": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stricahq/bip32ed25519/-/bip32ed25519-1.0.4.tgz", - "integrity": "sha512-b+4+aTRF9QY19auN4oBmZxv/7lJIBPBfAIU9wOTzc9Wxb0ifWpVcM4qt+qZuRNlMQofSlSa6lUet6CwaNyDEuA==", - "dependencies": { - "blakejs": "^1.1.1", - "bn.js": "^5.2.0", - "buffer": "^6.0.3", - "chai": "^4.3.4", - "elliptic": "6.5.4", - "hash.js": "^1.1.7", - "pbkdf2": "^3.1.2" - } - }, - "node_modules/@turf/along": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/along/-/along-7.0.0.tgz", - "integrity": "sha512-OyZcvwYwsLxlqC6ksFMNAkZ1fF/0Xfg38v4jx6D9OsaQcIDgvzXnlkuUnS3w11imfulokijkLEFnvJXFZKAzRw==", - "dependencies": { - "@turf/bearing": "^7.0.0", - "@turf/destination": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/angle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-7.0.0.tgz", - "integrity": "sha512-3+Lp/fyJdtoS+zMu4ZGgV1PhXub7fiowvwId6w5fNtUHWaQ2e0fUgWMAv8opVSC9gRnUtOq2QuJZdIGQAL+fkQ==", - "dependencies": { - "@turf/bearing": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/rhumb-bearing": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/area": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.0.0.tgz", - "integrity": "sha512-Q/P6OGV8dJJs1BiraKFNBjtsMbz7B52mLCtgKh3syzujSREMx52RlsiOBQp8GujFMMiau+Mt25XKbVwtjHVi8Q==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.0.0.tgz", - "integrity": "sha512-IyXG5HAsn6IZLdAtQo7aWYccjU5WsV+uzIzhGaXrh/qTVylSYmRiWgLdiekHZVED9nv9r7D/EJUMOT4zyA6POA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox-clip": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-7.0.0.tgz", - "integrity": "sha512-ZSReB14sSQpP5TE6g5SijVFijxMp8pyrM0PgEN1LR9Bm+nj7BmmGzHafV3lyteml2bmlFdQxkbTqcbvlVXS98g==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox-polygon": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-7.0.0.tgz", - "integrity": "sha512-RMBADOr0zOhVhTidKXCAx1TLTzgBvZwQKI6KJ1FgoCPH7GMZZnMXGMvOtdQLdsplS4Zs6+NoVtaK2x0+EXdYJQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bearing": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-7.0.0.tgz", - "integrity": "sha512-r6eBNqqiC8OtW+xIzu0ZyciAUfM85l2LVN2qpTeEyhnaNmnPw7hDsnqwZcbqoBFSLB66MO+BLH40X5OdaoRmmA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bezier-spline": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-7.0.0.tgz", - "integrity": "sha512-1FFVLc+oa5t9S7XWsYImfOVNLWESAJo3ztC4GRlGeAFQBi5z8kSptBaGRLkTn387lZLZ1VQXYRgAfR2mP69/VA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-clockwise": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-7.0.0.tgz", - "integrity": "sha512-Tn+ShgMcgIll+TeIAUHW0diPpxCN1PfQ6uZrwUJXzQXfoxlns16NvJByTBWCl+E9UCA+m1QRjHpVOzyf8pSOOQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-concave": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-concave/-/boolean-concave-7.0.0.tgz", - "integrity": "sha512-ybKMUriBFzqvjJMOM+YPID2h0a7ye1ur95NkXzV+GRDG16W0KOtTcSXz3LFfHIBEXtG1dqRIxPSV2uwTTKwDTQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-contains": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-7.0.0.tgz", - "integrity": "sha512-1NILJdO5OO1YrD7hYPlpahROkzd1DFA7Lcp7SxL+hTtKTp/a2iZx+K6u2qKMLUlPO1p2zhSbMfvjl1T6s/H8XQ==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/boolean-point-on-line": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-crosses": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-7.0.0.tgz", - "integrity": "sha512-T8/U3fXvEaaf7NbRf42s7hnOYUarK7K1ztXOan0hESnWVzMRFwzIv9QeSW4mARAPU/oV1oOMhSITfbF/Et6W1A==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "@turf/polygon-to-line": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-disjoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-7.0.0.tgz", - "integrity": "sha512-MAHKqMtdktgxFnz9XFrzyN+VTtmNSd+PgRyo/CT9ucsZ18hd3PV9Y3obGw/k0T6AglMivhBadlHiSMnTfed4Qg==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/polygon-to-line": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-equal": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-7.0.0.tgz", - "integrity": "sha512-9C7xkxOyqN0/8Ze4TrysKWWYZxWB0s6zSBaADuVhaIsFzfwvC5wbEpwOL8pRop++7YRRlJ92QM8Bq53DU8+7LQ==", - "dependencies": { - "@turf/clean-coords": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-intersects": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-7.0.0.tgz", - "integrity": "sha512-+jNZw/ziZ2xyeDoasuwubVu3arRS71i6tSxvnPQmsWISki6rLJF7OQEkc9LNIllYlADCZUkUTJ1OktznrEUDkA==", - "dependencies": { - "@turf/boolean-disjoint": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-overlap": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-7.0.0.tgz", - "integrity": "sha512-mnZxjGSs8OuH/+QUuP5FGkut2bLr1FGZ63ThJ97aUuJP+lZQnYnkPdT1hQIdcyhtTQgF1yOM7EH+O//DkoROpA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "@turf/line-overlap": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-parallel": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-7.0.0.tgz", - "integrity": "sha512-OTL9XLjzRulLPQ12il3my9fLhemHsoyYe/owxNYz+kYtUyDHQ6lRz6vEaI3W7MKY9fnqwuIdJQpckOL5TH2cPQ==", - "dependencies": { - "@turf/clean-coords": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/line-segment": "^7.0.0", - "@turf/rhumb-bearing": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-in-polygon": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.0.0.tgz", - "integrity": "sha512-Z9swETfICqUJ8iVLZimvIOh8r4Wrlu9/X/c/5vIEeVvG4Lu78Ztmgu1KaobZJFC93/ntOAjMBavc9aNgw7TXgQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "point-in-polygon-hao": "^1.1.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-on-line": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-7.0.0.tgz", - "integrity": "sha512-9/1hj2MxcUU4fZu+MQC6rdMsdvAYNTtfxssLrZ1dGXo+NcAoWFbZSrfk62pSJBflveyKY5kXPYY+xQfLT0NeDQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-touches": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-touches/-/boolean-touches-7.0.0.tgz", - "integrity": "sha512-eZE2uvylkQLAePHTGRjnVlr+QKnwU9gPAarz2q4YF7hi2QRDQd8kc+Ai/450C3xL9iPYO6wrbAQ7qpmB1Jsq4g==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/boolean-point-on-line": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-valid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-valid/-/boolean-valid-7.0.0.tgz", - "integrity": "sha512-TM2UBVFu59u8fAZVHsVnnnCv6486J2uCFmhsVsSCgTgTET1+Lm0TK0XTj5cyPSYR35qR/BjcU1gO3l45bdap9A==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/boolean-crosses": "^7.0.0", - "@turf/boolean-disjoint": "^7.0.0", - "@turf/boolean-overlap": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/boolean-point-on-line": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "geojson-polygon-self-intersections": "^1.2.1", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-within": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-7.0.0.tgz", - "integrity": "sha512-QmOX34T7z9wzuzUVsXx3KMCMsxLi71/SOcrgkcHhcWsThx+VPPmyIUtTa8XnBt1BBlx7IIrR2pAeORkUi0CdEg==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/boolean-point-on-line": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/buffer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-7.0.0.tgz", - "integrity": "sha512-viw3XjTtYVtkq5DkRDBQjXoi5QeEMhe4JHWXIfHMHs4o5F9B+lZ8+TtXWo18X5aAXknv6ib1z2syoaQdBpb5Xw==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/center": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/jsts": "^2.7.1", - "@turf/meta": "^7.0.0", - "@turf/projection": "^7.0.0", - "d3-geo": "1.7.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/center/-/center-7.0.0.tgz", - "integrity": "sha512-5RZia9uuWxz2oCyd1vsNkBeraBNdwCsIo4UGRQdyswBeLFVbRwIUa7M7+2z2D7B1YIgovuLIRVfk6FeWUQXDtQ==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-mean": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-7.0.0.tgz", - "integrity": "sha512-pneYkH6/4a6gDDvhVL2by9OCJ4yTIANoHQ4JpYVjvB1VlQWrVI5qQd80+q3bMKCDWaACEq8UWa/5NmvKlSRT3A==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-median": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-7.0.0.tgz", - "integrity": "sha512-ppCVjwwNe3Rz86TQp+zt9uFI9ZlFwu2miQtpFVcv2ej9IN2D5PUIRnehWgVeQ+yZ+ocMjMNLMcackUnqeKR4FA==", - "dependencies": { - "@turf/center-mean": "^7.0.0", - "@turf/centroid": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-of-mass": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-7.0.0.tgz", - "integrity": "sha512-vnD43bX4jl1ViDjY+nxISeQd8vfPqvLw+0N1MxpweCh5S85DNqUg6J8GXC1kbZlfOBS3mS9p2CW1Rfg4ggiGHw==", - "dependencies": { - "@turf/centroid": "^7.0.0", - "@turf/convex": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/centroid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.0.0.tgz", - "integrity": "sha512-TMKp5yadglNVRxX3xuk1qQDEy5JFHmlYVBamzXuD8DL8rYdVog2x4gQHrwn7xrUyAlKJ4fUZZPkYBWfW6TDWbw==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/circle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-7.0.0.tgz", - "integrity": "sha512-rRMthTL5+mhiFXQwlk4jUuf0pkqDAhry/El03VNYNyDGOx4N6p0XMmgbIdJmG6ZooinHpHfMU4N8ZQ9Xo6vVPA==", - "dependencies": { - "@turf/destination": "^7.0.0", - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clean-coords": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-7.0.0.tgz", - "integrity": "sha512-kaKR4/NnhZpgC+hWY3MfPqV2KwzG4Vr66WH59GbT5B2tvAOJqAYUmq+rgyMsG6xA3fTBL3neDW0bY1DHFVcvHQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clone": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.0.0.tgz", - "integrity": "sha512-bQBx/wbQoGNtZzuHetLt44NMqOCnjSXcvTWm+LJ7YTmwrqZVAjISDhFxgawY/L+G3p+ya5WoxQwZWak80uYg3A==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-7.0.0.tgz", - "integrity": "sha512-s96uAedbT+9JX6Cg11TsjyZRZIOYABBplA7vKlFgfEKitscCRFUP+pVgiRXy8wBgyKsXqG28DJr96kXQaJKSeg==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters-dbscan": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-7.0.0.tgz", - "integrity": "sha512-q8P7MjD0jGhNOzE+I6Cj8UiVaqkuDV27nGA8fLZWNxLW27+X2QJzU+NFLkx0suV9ApmCWRiaIyWUHWG9uZntxA==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "rbush": "^3.0.1", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters-kmeans": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-7.0.0.tgz", - "integrity": "sha512-ZwN4sLcTgeD7meryarJZunLXISHM7ZLc0S7Lgwv64fYsYU2ea64BMst5mRFCZsrrlFdYmrwUo4DlihL8k9XLKw==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "skmeans": "0.9.7", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/collect": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-7.0.0.tgz", - "integrity": "sha512-zgKPVVmNr/5OJiHLnQAzDCMv1xDxwuNw8PfCPYkek8s2dvr9LFlEMfPxnp9hY+/oHJx8+1mC01c9qgb7hF8yPQ==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/helpers": "^7.0.0", - "rbush": "^3.0.1", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/combine": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-7.0.0.tgz", - "integrity": "sha512-xNg6XGAwEWmpjYImJ3+vie+ASKQ7dzUrwUDJ5DOOS8XonLkVAIGus+qDoXdIzAcb9jqSaSFC4sGmQFdTM1Sj1w==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/concave": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-7.0.0.tgz", - "integrity": "sha512-iwrLBgCUgsquvLSCnzppPVDWGLoCjVDV9xgg7jncbi9aURuGPfhHd5eaC9fyxtIlSbcfrSDXSHJLoeC6bpmlOw==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/tin": "^7.0.0", - "topojson-client": "3.x", - "topojson-server": "3.x", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/convex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-7.0.0.tgz", - "integrity": "sha512-iAAwC1FPB4aiA7djUU/pk7lMgWjACbQOB2oX6cH39P5M7W6GXhrTEvYAx+thBtNq+M6BPk/gk3bU1BjZFrQ4+g==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "concaveman": "^1.2.1", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/destination": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-7.0.0.tgz", - "integrity": "sha512-wXfLd37ul7xuFvv4L7dtNQOZnmYepnrsMZrxbmxvy2SCnF+Rzf1C7D1NQ6+Nx5SInB/SbTfi6SCDgyfB8MOawQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/difference": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-7.0.0.tgz", - "integrity": "sha512-JCPRuGcOkT+Hq5PJcEUhkCheTyJcwB5dS1SIJGhDDNOJp8m8REHFJCmvxA3K40demovbyDLk85AojYpJ3jlALQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "polygon-clipping": "^0.15.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/dissolve": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-7.0.0.tgz", - "integrity": "sha512-WUapSrl4nTpKGQ9uacfefPNI8mEl0PYrCN6vDTs2W4k6UT9NdeJYNPaR6275nAoOUEL9t9K+adPgdMltm/EG3g==", - "dependencies": { - "@turf/flatten": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "polygon-clipping": "^0.15.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/distance": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-7.0.0.tgz", - "integrity": "sha512-DBPKhHABpPZ0KRduRpEaoi8MB6r1DVuyyps68VFH2Qi5H0ZnFtJFj7nQxBPZR3bVpbUq4zzu7I+MiNAd3ujFWQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/distance-weight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-7.0.0.tgz", - "integrity": "sha512-BFftfC1QdtcJNMx4TOYxkHX/xsy4FjiG4tdEgdx99DBZ4L1RS/qqgC1O943WuqbfvJTn15E6ka0Rkep2/90IMA==", - "dependencies": { - "@turf/centroid": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/ellipse": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-7.0.0.tgz", - "integrity": "sha512-bdHzKPfxIWVz3p7jlsyi89BAxvjIhxCgLzDXKYp4tSf2LYGpkfWpSJA2bRnj7TuEq5zYQR8L5LJhn7jg0hehlg==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/rhumb-destination": "^7.0.0", - "@turf/transform-rotate": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/envelope": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-7.0.0.tgz", - "integrity": "sha512-110YN+9PmhRYE7co+4ewB/IY3SL9q90mw5FoXrv97VRYVlf8jQCa2mwSalMiuAGnhvfG+Yq1k+ibjjLJcS3gWA==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/bbox-polygon": "^7.0.0", - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/explode": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-7.0.0.tgz", - "integrity": "sha512-q7KZ/PxY9zHN4UGXaADUpsHGkj8lbexVZxdBnp0nEfTHm/ziLTAfpI15CdAknoz4Ee8k8tx7ldosVjjg7YJ3/g==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/flatten": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-7.0.0.tgz", - "integrity": "sha512-QVTPgE9PdulQiQPglQ+mXpThBfp3v5RhCSupBCAoqOkqo/KfnliHqJXmVTaZotUZnMgc3wbAMJtSJvDRhTnFFA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/flip": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-7.0.0.tgz", - "integrity": "sha512-8yqhjXhqKF9fqN4ZfLgVNKCX0AVDaOY9KzD3AGQ+UiRHgmnY/F/T8Np9hSgEVQl1E9N6GXWF/7d8fOTVKCFCbQ==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/geojson-rbush": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/geojson-rbush/-/geojson-rbush-7.0.0.tgz", - "integrity": "sha512-h0fJPWHkpGEHkVvQ/tv4FwYkWuEbhbSF0rrQEUyXwvZtlZPRBYJ7WQ5qRsvE7QdQK81B7jWxZiM/qWeayALu1g==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "@types/geojson": "7946.0.8", - "rbush": "^3.0.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/great-circle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-7.0.0.tgz", - "integrity": "sha512-onZYQ4ZiN2sIff8j648k+eaeavC+W2wG9L+7wSZjWgeaM4t40r3ZhcJLwqmMUSHxccACNlnINukQodulsflFDg==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/helpers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.0.0.tgz", - "integrity": "sha512-vwZvxRuyjGpGXvhXSbT9mX6FK92dBMLWbMbDJ/MXQUPx17ReVPFc+6N6IcxAzZfkiCnqy7vpuq0c+/TTrQxIiA==", - "dependencies": { - "deep-equal": "^2.2.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/hex-grid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-7.0.0.tgz", - "integrity": "sha512-6vWO/eVyCvk9mUOj7wxCRUSFpZ0Rlqo4fLvAWX+WsNlOn7xnYs8TFXyiVuWcJdWiMX/LzjOF2OTI6HXF3BhEAQ==", - "dependencies": { - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/intersect": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/interpolate": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-7.0.0.tgz", - "integrity": "sha512-ERorrpqItp/qrVtkCkFhB0i4fgjb27cCObTucWdSVUMEitH2ieEQzysmghtyq2F6zq1DW3tC33Jjr79IDj+X6A==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/centroid": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/hex-grid": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/point-grid": "^7.0.0", - "@turf/square-grid": "^7.0.0", - "@turf/triangle-grid": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/intersect": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-7.0.0.tgz", - "integrity": "sha512-2GL9yAPwmzkec5UiuPbVdLpPVsJIRVl8obPu4oMzhOMKVqw3UGsFGCjWNOY2cKg2cN8E7ijfAEoFNztLyNPY+g==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "polygon-clipping": "^0.15.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/invariant": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.0.0.tgz", - "integrity": "sha512-Kayszfz3W8yJ1/cIA3/aNSzAuw7QgSp+IwsSmhLAfp4DbjV0o6sjxRZXRY2gRstZHqkNHSSEeir8V/icdO8sjA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/isobands": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-7.0.0.tgz", - "integrity": "sha512-2l+FIbywYPCsus8+H6eSyyf3Xsrbe+Zi0NbgpVDScvR9TVu55ta0KMvQdS4aMEtg9ADlQa/C81hZhmYsBtvLug==", - "dependencies": { - "@turf/area": "^7.0.0", - "@turf/bbox": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/explode": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "marchingsquares": "^1.3.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/isolines": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-7.0.0.tgz", - "integrity": "sha512-3LqwbzHnZ19gca5VC08XnHK36iRw2tEKjVtrI87iq6QEN9rR4FYcZOCmkPznYKwMKr44KkZKOlfNq/s72s1t3w==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "marchingsquares": "^1.3.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/jsts": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@turf/jsts/-/jsts-2.7.1.tgz", - "integrity": "sha512-+nwOKme/aUprsxnLSfr2LylV6eL6T1Tuln+4Hl92uwZ8FrmjDRCH5Bi1LJNVfWCiYgk8+5K+t2zDphWNTsIFDA==", - "dependencies": { - "jsts": "2.7.1" - } - }, - "node_modules/@turf/kinks": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-7.0.0.tgz", - "integrity": "sha512-rUzx2G4NSb7f+SMjuBZBakrK4BrS3pfb67vYH8XQA28C9NBRQcZqJBCjXqA079q16GXiDpjCLianQMewtd6ksw==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "sweepline-intersections": "^1.5.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/length": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/length/-/length-7.0.0.tgz", - "integrity": "sha512-B+ABesWLtQc8W310LJ8kmUn//NfpUUhsm4Gwt9ZHNYxBVV+FNolY965F7DYm/tvLMZP9bGMomTlczFWV7O4YIA==", - "dependencies": { - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-arc": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-7.0.0.tgz", - "integrity": "sha512-kxZJlbQHR5F7toJ7QR+qF4eWX74RydGavCr2/IPOjcFK1mcSkTfyiSli3pciavD4eH3tHx0flTqH2poqTQxtyg==", - "dependencies": { - "@turf/circle": "^7.0.0", - "@turf/destination": "^7.0.0", - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-chunk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-7.0.0.tgz", - "integrity": "sha512-oA4GuUSxof3o0JOhNyS+CdzpqJ0VFro8RlGkTtymMhEMly4T7xjbMdffIrJ9o8hpnNKdwkJs4bcB98UD8sSPeA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/length": "^7.0.0", - "@turf/line-slice-along": "^7.0.0", - "@turf/meta": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-intersect": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-7.0.0.tgz", - "integrity": "sha512-vxCwzxCbTyKXO3GsEFQ8hyH1nLQShBhvFobRM2bLrbBlP2fWY9LDGixBcmWuOwV/G/wpQJxAjBJ6IYHjKIJqyA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "sweepline-intersections": "^1.5.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-offset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-7.0.0.tgz", - "integrity": "sha512-ZQHAuR2y0ktG8uYAbaxGsJh931oCBwrxzOjiRtOcMifc/Hty37WFVaE9rCDrYrMLut7Ye9JQ36c6DMOljOLkMA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-overlap": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-7.0.0.tgz", - "integrity": "sha512-yYjT0Qe2WIvf3InuSzobmEkD4XguoimdzXt23eHFF/RKNubAwwdFDeLbmyA7fNZFGrMLNEl/zYvgBVXiQ7tihg==", - "dependencies": { - "@turf/boolean-point-on-line": "^7.0.0", - "@turf/geojson-rbush": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-segment": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/nearest-point-on-line": "^7.0.0", - "deep-equal": "^2.2.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-segment": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-7.0.0.tgz", - "integrity": "sha512-Fn8IPEMGQyDAJjjrEOrF0VUCdRosjdvd9x38gq73Qg5oSsZ4p9DdMdgydK27XL74/ivM4+CtDqQkHcj5Aec/yw==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-slice": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-7.0.0.tgz", - "integrity": "sha512-De+j4QTdoHguYu4S3UqOdU8GEg7VrVqQ67SkGzgFWL/SFh3V98+KDhxFIMA1OmzOc5/ox3yUQ8a/BOYslAV4DA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/nearest-point-on-line": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-slice-along": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-7.0.0.tgz", - "integrity": "sha512-+HNcI8ilm7ma/oKm23f2ca+xaNe4IjDYAjtl2Peap3b39Y9UAgw6lXhIh/L+m/XQXKkdWOfmqf4J2ar0bgG9DQ==", - "dependencies": { - "@turf/bearing": "^7.0.0", - "@turf/destination": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-split": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-7.0.0.tgz", - "integrity": "sha512-LuJuO1bY++PJEQ7gqbkzdL8RP1pZRQdgoqaZTsMy5AhxfjMCSL4Bx3o8SYAtsQt6CTx17dMCqBcjmjZwqNJJ6w==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/geojson-rbush": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "@turf/line-segment": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/nearest-point-on-line": "^7.0.0", - "@turf/square": "^7.0.0", - "@turf/truncate": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-to-polygon": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-7.0.0.tgz", - "integrity": "sha512-NmrY1jFj4oW30TW2LNoL00/uNmF1bGeTU8W1EtCunoCUUOVD9XSCj0kdSuq+MJLBH06PzOL+2f1jKTFf0X7Kqg==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/mask": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-7.0.0.tgz", - "integrity": "sha512-5vSNpN4rCRhEsS69d9u8USlFGdlf5rySCD701gzALNGpvTN4ViXoUUH9ysdqOdvp/IdC8thRP72Hget9fJKcfQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/meta": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.0.0.tgz", - "integrity": "sha512-cEXr13uFwhXq5mFBy0IK1U/QepE5qgk3zXpBYsla3lYV7cB83Vh+NNUR+r0/w/QoJqest1TG4H20F9tGYWPi/g==", - "dependencies": { - "@turf/helpers": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/midpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-7.0.0.tgz", - "integrity": "sha512-Zt0OgtByf5rTKT86WssAzNN2D7eqjay9ZlRb2rutynMyJDdLgbGPurTZIOXOP7ztGaS/WIMYlvPEveIp8ao1zQ==", - "dependencies": { - "@turf/bearing": "^7.0.0", - "@turf/destination": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/moran-index": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-7.0.0.tgz", - "integrity": "sha512-Vl3PD8wn8aBYZpQ7Kq+dWosiQP2HTeZmzEyQh7WGAUK7OunODFPIdObj6jLwKYj9ZW2XVxaGmogjVEmQ2/2FQQ==", - "dependencies": { - "@turf/distance-weight": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-neighbor-analysis": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-neighbor-analysis/-/nearest-neighbor-analysis-7.0.0.tgz", - "integrity": "sha512-wz+2U271niT7l18SIctAo5Muh5kqyZl4bqFUWTQhhhzXkcP2hCYT9gYWkrZN0gfyp9sCWUe7mgoU6/wGDsiENQ==", - "dependencies": { - "@turf/area": "^7.0.0", - "@turf/bbox": "^7.0.0", - "@turf/bbox-polygon": "^7.0.0", - "@turf/centroid": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/nearest-point": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-7.0.0.tgz", - "integrity": "sha512-h3uLUoeo6JWTirpI499SRooqEoDxia2C/kDqAwAeXFqwxzGqGprtNA/C0bMgHfxE1M2rxORGzvgywKirpLu1dA==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-on-line": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-7.0.0.tgz", - "integrity": "sha512-ADf+oytqY3EVT/9JApoRr5H0f8wzkzeXhJUfTDEcWZoJqT/8lOX2HCo87b6+oEb1QIavlSogoku1+M5xMIcJLw==", - "dependencies": { - "@turf/bearing": "^7.0.0", - "@turf/destination": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-to-line": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-7.0.0.tgz", - "integrity": "sha512-DmbQ88nChkVD6pe9dbFZEBVtmcgrRFKSv1n3Y1Kka+BeDFzCfie2VJuhsrqrecRmLMIEf1tdVJL/MdpinnZZTQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/point-to-line-distance": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/planepoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-7.0.0.tgz", - "integrity": "sha512-+/Sqk1I8QwlKsd0rfjwOac3BAdIBeyjN8Irgk2vYbxUADn6QWcxyYLro8DHUVrTu9jZfllc8QNpy9/6iUykm0A==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-grid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-7.0.0.tgz", - "integrity": "sha512-vXtFeWFC0i9T71AVX5VdlqD2mlKhk649OF/pEJB9wtCGDHYax9kkObNDSz4mFAz4UqQ67P5Lipg8YYaawgmDZg==", - "dependencies": { - "@turf/boolean-within": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-on-feature": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-7.0.0.tgz", - "integrity": "sha512-KTvYrQJEw62GLivd5LfCRt9z/4ZFdz29+3HxW9/RHhb8nrjLU8M8j7fJTQ+/Q+pPunWPK0Fvjv8LZAh0c30/oA==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/center": "^7.0.0", - "@turf/explode": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/nearest-point": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-to-line-distance": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-7.0.0.tgz", - "integrity": "sha512-BMNy/vbvm9NjrgJq6MA3xhruy+cp/Wj+ff3fiu8Rdl5QX/dMwCeyCZuuvzCftup6GTPUhRbpe0YRFUBInGzx/g==", - "dependencies": { - "@turf/bearing": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/projection": "^7.0.0", - "@turf/rhumb-bearing": "^7.0.0", - "@turf/rhumb-distance": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/points-within-polygon": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-7.0.0.tgz", - "integrity": "sha512-Nz4kLSitsfZH0jwgCA5PCVcCocMWNM5+0LZo13j2JoXP980zTwL5t6jiwS2qFoofNE0Q6RfjrfQ3kVm5/g1/bQ==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-smooth": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-7.0.0.tgz", - "integrity": "sha512-1pY81xZivsToG8zFGvX/1NjrYCNOWm+fdtciWyF+tt0rGE/xvMwE4yiX1chDrKiV2X8W+Ip/ZLry3MIBcSUx0Q==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-tangents": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-7.0.0.tgz", - "integrity": "sha512-BNSKWqOTiCvVSj5CuLmkcHkagFsBSbUuSSffEGxC3cFY2tb0vP71nFE9qM+h9FpApkR6F/bWxRu5AxQ4oVHySQ==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/boolean-within": "^7.0.0", - "@turf/explode": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/nearest-point": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-to-line": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-7.0.0.tgz", - "integrity": "sha512-FkbxgABNzULN//WiSWiBqkbePbQANMmYKFgD6tUnVGldTFa1RuUjt/bgbvPjVHZfUdJieyxBszzl1dP0z8czDQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygonize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-7.0.0.tgz", - "integrity": "sha512-aTVANRcWHVFZIgUwH5H5BMn9OoGk8KI+mGe4H8cXQWUvarKUz86t8BkdkbWnsAfdOTrEwK4WFWtxfmeWwJUH7Q==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/envelope": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/projection": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-7.0.0.tgz", - "integrity": "sha512-EoPbZPZSDv0AJMfYhqnS455CVMYwPU78kHyQHeOnMR1Tc5z+TiImvyq55umhfecgpETzuDsjFkmeQ2phDKTmbA==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/quadrat-analysis": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/quadrat-analysis/-/quadrat-analysis-7.0.0.tgz", - "integrity": "sha512-JaCARFLS7mFIGORpRFcqrrCWVgTi+Vw5prSgQdaMVMcXo5+wsPh0fJUno4PGHt++R6AE3ZgxtDq2gS/1RZfhOA==", - "dependencies": { - "@turf/area": "^7.0.0", - "@turf/bbox": "^7.0.0", - "@turf/bbox-polygon": "^7.0.0", - "@turf/centroid": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/point-grid": "^7.0.0", - "@turf/random": "^7.0.0", - "@turf/square-grid": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/random": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/random/-/random-7.0.0.tgz", - "integrity": "sha512-l3+FW0pk6MUQx2lyMvzps2YQS7ovP6YoV0tVvuNaQq0UICB1P4EHJIKLMTe5pXk73Z3p0wTgnEPk0Z2lqWaeGQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rectangle-grid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-7.0.0.tgz", - "integrity": "sha512-iLMRfaWs9+BlGaDP5ka7J9bTGFPGim1Tl38uNTPagIVxk6bNfB8156S9up+/7scpjuQGxY0ky3tlR9aVYlWNdw==", - "dependencies": { - "@turf/boolean-intersects": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rewind": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-7.0.0.tgz", - "integrity": "sha512-kZwqJ4enmTZPDrI0rCf+zE9HChCuKKvD0kqZJo50XvfypfKVz5CI751Dgs/cslMIENyKFiHHHM4OMgouJ/lR1Q==", - "dependencies": { - "@turf/boolean-clockwise": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-bearing": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-7.0.0.tgz", - "integrity": "sha512-4qDggFDNBbWdD+o3H+vna5eiKCAsmqAueP3T5rSEB1ier77wVgjg7cs7eTrEBbpuCbPAho7NDNdyAjgItydgLQ==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-destination": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-7.0.0.tgz", - "integrity": "sha512-uYgqP8BGo8DBs6ZgjBo9SNCXc6BY+iA6OG7yPYSe4Lur2vu+LkbBXV6P3IodkeHyPex+X5ATea8QHutYQX6HUg==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-distance": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-7.0.0.tgz", - "integrity": "sha512-VAZnZcHbHHUU/Li0sj50/T6bBGRWvJ6eOZmw2aZFxxnC+AkHv4LTKDf0wNsxR03ZwGEh4uJM8OuirNugLIhAyA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/sample": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-7.0.0.tgz", - "integrity": "sha512-yCeITDVT3vWMaK/X1JF6jxEipgBCi2Foj87lVO7rcVg5pp/6c2S8BnFB5NoI0+HKXEpulG4eH57khUVND9VCGA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/sector": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-7.0.0.tgz", - "integrity": "sha512-HXT8vbCYoIbomcyT0D/0Ap4p3bSmb3EFC7C5BBv3Gr9oWiMf5cFgwwA/inbGorU5fcRap7/Yt4hWWTGLO5MDTw==", - "dependencies": { - "@turf/circle": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/line-arc": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/shortest-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-7.0.0.tgz", - "integrity": "sha512-nEtL6qA3Po6uXZsLnfbFCD+Nng3GIRBX2Okyva3PYCJvuD27qYJFvXk423Z0qA+09zZHhi2Ct1IGuXBBYmdkaw==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/bbox-polygon": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/clean-coords": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/transform-scale": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/simplify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-7.0.0.tgz", - "integrity": "sha512-EizgFBv7LiLTfqk0BlzuKXmGj7owHksI7Q0mur+yOFGFhEmP5pWm+jYxq+pYfUZA3eki4J7kyN4Mhg5c+jhLTw==", - "dependencies": { - "@turf/clean-coords": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/square": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/square/-/square-7.0.0.tgz", - "integrity": "sha512-HnY2fESbGGzMeb19qZ0HKpsGRZv4f4e8oHH+gdCr6cs03z/TO6JslJdRA65zHNkdReSVEOQWIMF5IB+Cq20jCg==", - "dependencies": { - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/square-grid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-7.0.0.tgz", - "integrity": "sha512-Dz7GyFRbcf0aek5nm7gW5gVYq/dJdn+JkVFgSIimysRl1tBtQiE0LvjZRdS97JvPs6m6hcZT+sDEXW1fLDPYFA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/rectangle-grid": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/standard-deviational-ellipse": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-7.0.0.tgz", - "integrity": "sha512-rr4T48aAfu2E/V6fStE8Jq1VD2a/zztS1LGu1PSK3pbk7Eq9HTEE9jzjBIONhDI6ljoLBYy4Qib+L3DaNCfmUQ==", - "dependencies": { - "@turf/center-mean": "^7.0.0", - "@turf/ellipse": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/points-within-polygon": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tag": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-7.0.0.tgz", - "integrity": "sha512-/QVKwYq9C7BkHrVtwLXwKSrEZcZT+/JQeNpGsOFhCBnDgXUMtLpj2obkMt+v7wXXtUgTsFAnSh7ClNgS6eB2Sg==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tesselate": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-7.0.0.tgz", - "integrity": "sha512-AWdFrBuLh4RFEBLWVaY9Z3/8jrXFv9WDvO3SyVUCQYFFcQP9aVieHyEEwebRaKb578il/o3rNHyRBuL6xSOcAA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "earcut": "^2.2.4" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-7.0.0.tgz", - "integrity": "sha512-KuzXnoetCqu5RC6wcUWOvotxZMcgZptqz3gJZAuhqa1CF3DKUKFEJ851+f/9KzZ+woalUB8anFr9dMKJjcM6RA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-rotate": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-7.0.0.tgz", - "integrity": "sha512-zU6ypVOdVtXaJvy2LEVjx4o7y/vR9kIL6Iu/VkzXIvGCYICDdHnrpeEVJOFZPqdq4GI4C1xAQ4ARPTwtGrpPBg==", - "dependencies": { - "@turf/centroid": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/rhumb-bearing": "^7.0.0", - "@turf/rhumb-destination": "^7.0.0", - "@turf/rhumb-distance": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-scale": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-7.0.0.tgz", - "integrity": "sha512-G94nxT5TyP8TSNRDkoevFoGlUw0H2Az5IG1JKFTT5nRqpbML17IQblV33gaA1Hm197rekQo3CDVWEbgpOV0jAw==", - "dependencies": { - "@turf/bbox": "^7.0.0", - "@turf/center": "^7.0.0", - "@turf/centroid": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/rhumb-bearing": "^7.0.0", - "@turf/rhumb-destination": "^7.0.0", - "@turf/rhumb-distance": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-translate": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-7.0.0.tgz", - "integrity": "sha512-sdZl29CqHoBo/Mxwos6Hvb6LXtHJYYTIjlWqphnu1kislbJwWUJpYjwD8yqTljfW4QHgDzGpnRLGzjDVZ7KHQQ==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/rhumb-destination": "^7.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/triangle-grid": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-7.0.0.tgz", - "integrity": "sha512-LKBMgkGGfZxZclRzalIYHGG50eMBOHNihBZLagK/f8RAMrvG2rS/S4n/CQbqU9OXenDgYErSm3SCVXC1dTXVPA==", - "dependencies": { - "@turf/distance": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/intersect": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/truncate": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-7.0.0.tgz", - "integrity": "sha512-G0cKlvONexzRIHRMkzhIA9UsOHiHbVW+iFBlAyDxXKK9Cr9USp/JjETAo8zqCnTQna40xdjt4bcHtsZxqyRQZw==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/turf": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-7.0.0.tgz", - "integrity": "sha512-oKtvIoP9nCBT7HCUn0/QP62QwTj8eDxfS810ZGJO0aDPDg2x94tSqwbvmu5WcvcxOBB/6L6rF55UJjL+OjcHxw==", - "dependencies": { - "@turf/along": "^7.0.0", - "@turf/angle": "^7.0.0", - "@turf/area": "^7.0.0", - "@turf/bbox": "^7.0.0", - "@turf/bbox-clip": "^7.0.0", - "@turf/bbox-polygon": "^7.0.0", - "@turf/bearing": "^7.0.0", - "@turf/bezier-spline": "^7.0.0", - "@turf/boolean-clockwise": "^7.0.0", - "@turf/boolean-concave": "^7.0.0", - "@turf/boolean-contains": "^7.0.0", - "@turf/boolean-crosses": "^7.0.0", - "@turf/boolean-disjoint": "^7.0.0", - "@turf/boolean-equal": "^7.0.0", - "@turf/boolean-intersects": "^7.0.0", - "@turf/boolean-overlap": "^7.0.0", - "@turf/boolean-parallel": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/boolean-point-on-line": "^7.0.0", - "@turf/boolean-touches": "^7.0.0", - "@turf/boolean-valid": "^7.0.0", - "@turf/boolean-within": "^7.0.0", - "@turf/buffer": "^7.0.0", - "@turf/center": "^7.0.0", - "@turf/center-mean": "^7.0.0", - "@turf/center-median": "^7.0.0", - "@turf/center-of-mass": "^7.0.0", - "@turf/centroid": "^7.0.0", - "@turf/circle": "^7.0.0", - "@turf/clean-coords": "^7.0.0", - "@turf/clone": "^7.0.0", - "@turf/clusters": "^7.0.0", - "@turf/clusters-dbscan": "^7.0.0", - "@turf/clusters-kmeans": "^7.0.0", - "@turf/collect": "^7.0.0", - "@turf/combine": "^7.0.0", - "@turf/concave": "^7.0.0", - "@turf/convex": "^7.0.0", - "@turf/destination": "^7.0.0", - "@turf/difference": "^7.0.0", - "@turf/dissolve": "^7.0.0", - "@turf/distance": "^7.0.0", - "@turf/distance-weight": "^7.0.0", - "@turf/ellipse": "^7.0.0", - "@turf/envelope": "^7.0.0", - "@turf/explode": "^7.0.0", - "@turf/flatten": "^7.0.0", - "@turf/flip": "^7.0.0", - "@turf/geojson-rbush": "^7.0.0", - "@turf/great-circle": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/hex-grid": "^7.0.0", - "@turf/interpolate": "^7.0.0", - "@turf/intersect": "^7.0.0", - "@turf/invariant": "^7.0.0", - "@turf/isobands": "^7.0.0", - "@turf/isolines": "^7.0.0", - "@turf/kinks": "^7.0.0", - "@turf/length": "^7.0.0", - "@turf/line-arc": "^7.0.0", - "@turf/line-chunk": "^7.0.0", - "@turf/line-intersect": "^7.0.0", - "@turf/line-offset": "^7.0.0", - "@turf/line-overlap": "^7.0.0", - "@turf/line-segment": "^7.0.0", - "@turf/line-slice": "^7.0.0", - "@turf/line-slice-along": "^7.0.0", - "@turf/line-split": "^7.0.0", - "@turf/line-to-polygon": "^7.0.0", - "@turf/mask": "^7.0.0", - "@turf/meta": "^7.0.0", - "@turf/midpoint": "^7.0.0", - "@turf/moran-index": "^7.0.0", - "@turf/nearest-neighbor-analysis": "^7.0.0", - "@turf/nearest-point": "^7.0.0", - "@turf/nearest-point-on-line": "^7.0.0", - "@turf/nearest-point-to-line": "^7.0.0", - "@turf/planepoint": "^7.0.0", - "@turf/point-grid": "^7.0.0", - "@turf/point-on-feature": "^7.0.0", - "@turf/point-to-line-distance": "^7.0.0", - "@turf/points-within-polygon": "^7.0.0", - "@turf/polygon-smooth": "^7.0.0", - "@turf/polygon-tangents": "^7.0.0", - "@turf/polygon-to-line": "^7.0.0", - "@turf/polygonize": "^7.0.0", - "@turf/projection": "^7.0.0", - "@turf/quadrat-analysis": "^7.0.0", - "@turf/random": "^7.0.0", - "@turf/rectangle-grid": "^7.0.0", - "@turf/rewind": "^7.0.0", - "@turf/rhumb-bearing": "^7.0.0", - "@turf/rhumb-destination": "^7.0.0", - "@turf/rhumb-distance": "^7.0.0", - "@turf/sample": "^7.0.0", - "@turf/sector": "^7.0.0", - "@turf/shortest-path": "^7.0.0", - "@turf/simplify": "^7.0.0", - "@turf/square": "^7.0.0", - "@turf/square-grid": "^7.0.0", - "@turf/standard-deviational-ellipse": "^7.0.0", - "@turf/tag": "^7.0.0", - "@turf/tesselate": "^7.0.0", - "@turf/tin": "^7.0.0", - "@turf/transform-rotate": "^7.0.0", - "@turf/transform-scale": "^7.0.0", - "@turf/transform-translate": "^7.0.0", - "@turf/triangle-grid": "^7.0.0", - "@turf/truncate": "^7.0.0", - "@turf/union": "^7.0.0", - "@turf/unkink-polygon": "^7.0.0", - "@turf/voronoi": "^7.0.0", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/union": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-7.0.0.tgz", - "integrity": "sha512-NRnP0GJ3guzVh6D2KNZvqNLMkbZtPQ6X1U4czK9ETicLROzqq6wM/S8gHZJVoh0KxxK1RYDsKu0RGFVobVT2vA==", - "dependencies": { - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "polygon-clipping": "^0.15.3", - "tslib": "^2.6.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/unkink-polygon": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-7.0.0.tgz", - "integrity": "sha512-mkwC7+KgINIAkRYSx0iRp8BjGtw8bijvtzC9Da5CRTSg13WH2IrvksFtasTo58xMdqyt6oO2NdMEDX3JUwRCeg==", - "dependencies": { - "@turf/area": "^7.0.0", - "@turf/boolean-point-in-polygon": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/meta": "^7.0.0", - "rbush": "^3.0.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/voronoi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-7.0.0.tgz", - "integrity": "sha512-AJMrtd9eV+nVA+su1GIp96E5ENzKUepPFr9wWHqqWedj92W2KbdAwfwJVMyl0vBmiMYeTSnfzC7HenIMXePfhA==", - "dependencies": { - "@turf/clone": "^7.0.0", - "@turf/helpers": "^7.0.0", - "@turf/invariant": "^7.0.0", - "d3-voronoi": "1.1.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@types/chart.js": { - "version": "2.9.41", - "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.41.tgz", - "integrity": "sha512-3dvkDvueckY83UyUXtJMalYoH6faOLkWQoaTlJgB4Djde3oORmNP0Jw85HtzTuXyliUHcdp704s0mZFQKio/KQ==", - "dependencies": { - "moment": "^2.10.2" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "license": "MIT" - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/geojson": { - "version": "7946.0.8", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", - "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" - }, - "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@vitejs/plugin-vue2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.1.tgz", - "integrity": "sha512-/ksaaz2SRLN11JQhLdEUhDzOn909WEk99q9t9w+N12GjQCljzv7GyvAbD/p20aBUjHkvpGOoQ+FCOkG+mjDF4A==", - "engines": { - "node": "^14.18.0 || >= 16.0.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0", - "vue": "^2.7.0-0" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", - "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", - "dependencies": { - "@babel/parser": "^7.23.5", - "postcss": "^8.4.14", - "source-map": "^0.6.1" - }, - "optionalDependencies": { - "prettier": "^1.18.2 || ^2.0.0" - } - }, - "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/animate.css": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", - "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" - }, - "node_modules/animated-number-vue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/animated-number-vue/-/animated-number-vue-1.0.0.tgz", - "integrity": "sha512-dlwtF3g9bls5IGH+2Xxtey+kZLQZcLKu/lBp3FZVrnq0FRoIGNGs1AcFegBgLuW6aEdLx8PxaHB++hxuEfT+Tg==", - "dependencies": { - "animejs": "^2.2.0", - "vue": "^2.5.13" - } - }, - "node_modules/animejs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/animejs/-/animejs-2.2.0.tgz", - "integrity": "sha512-suPqfRapTDhrfwxg1El8LlGz6qVGwoandR2uRQLQBxXavxkpIr9Uv2kNGrJIF7oa001jSxS5rRIXPHryKIshJg==" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=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==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "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==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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==", - "devOptional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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, - "peer": true - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "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==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "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==", - "dev": true, - "peer": true - }, - "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", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "devOptional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dependencies": { - "@noble/hashes": "^1.2.0" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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==", - "devOptional": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/buefy": { - "version": "0.9.29", - "resolved": "https://registry.npmjs.org/buefy/-/buefy-0.9.29.tgz", - "integrity": "sha512-iJutB/ezTQcxqcKvKz129DzomMjNRGdy23lJBtoFQBG//2NveTcPkN/VRUF70z2WH3JB/5nmVeoxr8QOPcs42w==", - "dependencies": { - "bulma": "0.9.4" - }, - "engines": { - "node": ">= 4.0.0", - "npm": ">= 3.0.0" - }, - "peerDependencies": { - "vue": "^2.6.11" - } - }, - "node_modules/buefy/node_modules/bulma": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", - "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/bulma": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-1.0.1.tgz", - "integrity": "sha512-+xv/BIAEQakHkR0QVz+s+RjNqfC53Mx9ZYexyaFNFo9wx5i76HXArNdwW7bccyJxa5mgV/T5DcVGqsAB19nBJQ==" - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chart.js": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", - "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", - "dependencies": { - "chartjs-color": "^2.1.0", - "moment": "^2.10.2" - } - }, - "node_modules/chartjs-color": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", - "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", - "dependencies": { - "chartjs-color-string": "^0.6.0", - "color-convert": "^1.9.3" - } - }, - "node_modules/chartjs-color-string": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", - "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", - "dependencies": { - "color-name": "^1.0.0" - } - }, - "node_modules/cheap-ruler": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-3.0.2.tgz", - "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg==" - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "devOptional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/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==", - "devOptional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-convert/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==" - }, - "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==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "peer": true - }, - "node_modules/concaveman": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz", - "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==", - "dependencies": { - "point-in-polygon": "^1.1.0", - "rbush": "^3.0.1", - "robust-predicates": "^2.0.4", - "tinyqueue": "^2.0.3" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "node_modules/d3-geo": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", - "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/d3-voronoi": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", - "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "peer": true - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dropzone": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.9.3.tgz", - "integrity": "sha512-Azk8kD/2/nJIuVPK+zQ9sjKMRIpRvNyqn9XwbBHNq+iNuSccbJS6hwm1Woy0pMST0erSo0u4j+KJaodndDk4vA==" - }, - "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "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==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/config-array": "^0.17.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.6.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.0", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "dev": true, - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", - "dev": true, - "peer": true, - "dependencies": { - "acorn": "^8.12.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "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, - "engines": { - "node": ">=4.0" - } - }, - "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, - "peer": true, - "engines": { - "node": ">=0.10.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==", - "dev": true, - "peer": true - }, - "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, - "peer": true - }, - "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, - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "peer": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "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==", - "devOptional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "peer": true - }, - "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==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "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==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" - }, - "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, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/geojson-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/geojson-flatten/-/geojson-flatten-1.1.1.tgz", - "integrity": "sha512-k/6BCd0qAt7vdqdM1LkLfAy72EsLDy0laNwX0x2h49vfYCiQkRc4PSra8DNEdJ10EKRpwEvDXMb0dBknTJuWpQ==" - }, - "node_modules/geojson-polygon-self-intersections": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/geojson-polygon-self-intersections/-/geojson-polygon-self-intersections-1.2.1.tgz", - "integrity": "sha512-/QM1b5u2d172qQVO//9CGRa49jEmclKEsYOQmWP9ooEjj63tBM51m2805xsbxkzlEELQ2REgTf700gUhhlegxA==", - "dependencies": { - "rbush": "^2.0.1" - } - }, - "node_modules/geojson-polygon-self-intersections/node_modules/quickselect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", - "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" - }, - "node_modules/geojson-polygon-self-intersections/node_modules/rbush": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", - "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "dependencies": { - "quickselect": "^1.0.1" - } - }, - "node_modules/geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, - "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, - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/grid-index": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", - "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" - }, - "node_modules/gsap": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.5.tgz", - "integrity": "sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "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==", - "dev": true, - "peer": true, - "engines": { - "node": ">=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==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", - "devOptional": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "peer": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "devOptional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "devOptional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/iso8601-js-period": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/iso8601-js-period/-/iso8601-js-period-0.2.1.tgz", - "integrity": "sha512-iDyz2TQFBd5WhCZjruOwHj01JkQGu7YbVLCVdpA7lCGEcBzE3ffCPAhLh/M8TAp//kCixPpYN4XU54WHCxvD2Q==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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, - "peer": true - }, - "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, - "peer": true - }, - "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, - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsts": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/jsts/-/jsts-2.7.1.tgz", - "integrity": "sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/kdbush": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" - }, - "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, - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/laravel-echo": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.16.1.tgz", - "integrity": "sha512-++Ylb6M3ariC9Rk5WE5gZjj6wcEV5kvLF8b+geJ5/rRIfdoOA+eG6b9qJPrarMD9rY28Apx+l3eelIrCc2skVg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/laravel-permission-to-vuejs": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/laravel-permission-to-vuejs/-/laravel-permission-to-vuejs-2.0.5.tgz", - "integrity": "sha512-6jDC/uHM/Thq+O1rTPfBVj0IYyWGoO4lBf0DjZbtoiwC3mdGbelCV1beJpkTrmA9UW/TODqwjYDSgRdJq4D4SA==" - }, - "node_modules/laravel-vite-plugin": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.4.tgz", - "integrity": "sha512-dEj8Q/Fsn0kKbOQ55bl/NmyJL+dD6OxnVaM/nNByw5XV4b00ky6FzXKVuHLDr4BvSJKH1y6oaOcEG5wKpCZ5+A==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "vite-plugin-full-reload": "^1.1.0" - }, - "bin": { - "clean-orphaned-assets": "bin/clean.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0" - } - }, - "node_modules/leaflet": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", - "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" - }, - "node_modules/leaflet-timedimension": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/leaflet-timedimension/-/leaflet-timedimension-1.1.1.tgz", - "integrity": "sha512-ejXldN94veRsWka1vpC+4rbH+2+3d3ztn2xYx4jcXtjYDrKC/sNnoqCmyH2UEYIy51PI2851aI2k8uGdOEbhlw==", - "dependencies": { - "iso8601-js-period": "^0.2.1", - "leaflet": "~0.7.4 || ~1" - } - }, - "node_modules/leaflet-webgl-heatmap": { - "version": "0.3.0", - "resolved": "git+ssh://git@github.com/xlcrr/leaflet-webgl-heatmap.git#242a0ce2d083617454e0be5b0059c1df015ca4ec" - }, - "node_modules/leaflet.glify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/leaflet.glify/-/leaflet.glify-3.3.0.tgz", - "integrity": "sha512-5vj+7ytJcppTtFLOYhW+yoo4bWvOngy59zJmpJjr/Gmk8pxpJ3Y2olNKrIIj/SdvvndJhhu3fQ4/zyjCGOF2qQ==", - "dependencies": { - "earcut": "^2.2.4", - "geojson-flatten": "^1.1.1", - "point-in-polygon": "^1.1.0", - "polygon-lookup": "^2.6.0", - "rbush": "^3.0.1" - }, - "peerDependencies": { - "leaflet": "1.9.4" - } - }, - "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, - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, - "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, - "peer": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/mapbox-gl": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-3.4.0.tgz", - "integrity": "sha512-QWgL28zg/zuIOHeF8DXPvHy1UHTgO5p4Oy6ifCAHwI9/hoI9/Fruya0yI4HkDtX1OgzTLO6SHO13A781BGJvyw==", - "dependencies": { - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^3.0.0", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.6", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "cheap-ruler": "^3.0.1", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.4", - "fflate": "^0.8.1", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.4.3", - "grid-index": "^1.1.0", - "kdbush": "^4.0.1", - "lodash.clonedeep": "^4.5.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^2.0.0", - "quickselect": "^2.0.0", - "rw": "^1.3.3", - "serialize-to-js": "^3.1.2", - "supercluster": "^8.0.0", - "tiny-lru": "^11.2.6", - "tinyqueue": "^2.0.3", - "tweakpane": "^4.0.3", - "vt-pbf": "^3.1.3" - } - }, - "node_modules/marchingsquares": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/marchingsquares/-/marchingsquares-1.3.3.tgz", - "integrity": "sha512-gz6nNQoVK7Lkh2pZulrT4qd4347S/toG9RXH2pyzhLgkL5mLkBoqgv4EvAGXcV0ikDW72n/OQb3Xe8bGagQZCg==" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/murmurhash-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "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, - "peer": true - }, - "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==", - "dev": true - }, - "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==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "peer": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "dev": true, - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "peer": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "peer": true, - "engines": { - "node": ">=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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" - } - }, - "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/point-in-polygon": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", - "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" - }, - "node_modules/point-in-polygon-hao": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/point-in-polygon-hao/-/point-in-polygon-hao-1.1.0.tgz", - "integrity": "sha512-3hTIM2j/v9Lio+wOyur3kckD4NxruZhpowUbEgmyikW+a2Kppjtu1eN+AhnMQtoHW46zld88JiYWv6fxpsDrTQ==" - }, - "node_modules/polygon-clipping": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.7.tgz", - "integrity": "sha512-nhfdr83ECBg6xtqOAJab1tbksbBAOMUltN60bU+llHVOL0e5Onm1WpAXXWXVB39L8AJFssoIhEVuy/S90MmotA==", - "dependencies": { - "robust-predicates": "^3.0.2", - "splaytree": "^3.1.0" - } - }, - "node_modules/polygon-clipping/node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/polygon-lookup": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/polygon-lookup/-/polygon-lookup-2.6.0.tgz", - "integrity": "sha512-Y76ioJomg19RGMYbeUmfgcX7An+0vHK/89nEUmt+1pgVY6WgtW12/jnSlw8D4907kWEi3rhQC11aXUc1qZDN4g==", - "dependencies": { - "lodash": "^4.14.2", - "point-in-polygon": "1.0.1", - "rbush": "^2.0.2" - }, - "engines": { - "elasticsearch": ">=1.1.1", - "node": ">=10.0.0", - "npm": ">=1.4.3" - } - }, - "node_modules/polygon-lookup/node_modules/point-in-polygon": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.0.1.tgz", - "integrity": "sha512-7xblajMJtE9xOfDXkZrq98kjnoazmNPfNXqu9XCKk0uhtjImNdTRjkckIWKirtlyUocWU9XyzTyE2y5/E45v5A==" - }, - "node_modules/polygon-lookup/node_modules/quickselect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", - "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" - }, - "node_modules/polygon-lookup/node_modules/rbush": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", - "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "dependencies": { - "quickselect": "^1.0.1" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/potpack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", - "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" - }, - "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, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "optional": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "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, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pusher-js": { - "version": "8.4.0-rc2", - "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-8.4.0-rc2.tgz", - "integrity": "sha512-d87GjOEEl9QgO5BWmViSqW0LOzPvybvX6WA9zLUstNdB57jVJuR27zHkRnrav2a3+zAMlHbP2Og8wug+rG8T+g==", - "dependencies": { - "tweetnacl": "^1.0.3" - } - }, - "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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "dependencies": { - "quickselect": "^2.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "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, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/robust-predicates": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" - }, - "node_modules/rollup": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", - "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", - "fsevents": "~2.3.2" - } - }, - "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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", - "devOptional": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", - "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", - "dev": true, - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/screenfull": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", - "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-to-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.2.tgz", - "integrity": "sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w==", - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shvl": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz", - "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw==", - "deprecated": "older versions vulnerable to prototype pollution" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/skmeans": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz", - "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==" - }, - "node_modules/sortablejs": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", - "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/splaytree": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.2.tgz", - "integrity": "sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A==" - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=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, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supercluster": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", - "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", - "dependencies": { - "kdbush": "^4.0.2" - } - }, - "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==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sweepline-intersections": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sweepline-intersections/-/sweepline-intersections-1.5.0.tgz", - "integrity": "sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==", - "dependencies": { - "tinyqueue": "^2.0.0" - } - }, - "node_modules/sweetalert2": { - "version": "9.17.4", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-9.17.4.tgz", - "integrity": "sha512-T6Js/kjtGmpekE1tPT+drdgsedEnaet03mMadKUMvtBlFzVLcYy8kvIuchaQJ09rhG5bdmRRMQ2sEK0ZnHi1vg==", - "funding": { - "url": "https://sweetalert2.github.io/#donations" - } - }, - "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, - "peer": true - }, - "node_modules/tiny-lru": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.2.6.tgz", - "integrity": "sha512-0PU3c9PjMnltZaFo2sGYv/nnJsMjG0Cxx8X6FXHPPGjFyoo1SJDxvUXW1207rdiSxYizf31roo+GrkIByQeZoA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" - }, - "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==", - "devOptional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "dependencies": { - "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" - } - }, - "node_modules/topojson-server": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz", - "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==", - "dependencies": { - "commander": "2" - }, - "bin": { - "geo2topo": "bin/geo2topo" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/tweakpane": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-4.0.4.tgz", - "integrity": "sha512-RkWD54zDlEbnN01wQPk0ANHGbdCvlJx/E8A1QxhTfCbX+ROWos1Ws2MnhOm39aUGMOh+36TjUwpDmLfmwTr1Fg==", - "funding": { - "url": "https://github.com/sponsors/cocopon" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "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, - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/typed.js": { - "version": "2.1.0", - "resolved": "git+ssh://git@github.com/mattboldt/typed.js.git#f0759c1dc054a2d6743862d5331f03e49f9845d7" - }, - "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==" - }, - "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, - "peer": true, - "dependencies": { - "punycode": "^2.1.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==" - }, - "node_modules/v-img": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/v-img/-/v-img-0.2.0.tgz", - "integrity": "sha512-NQbodouhyhDGRZ6t+uKH2OQvUIN2NWAMrh4B/9c8RmD4BsD2ekMwW3e6ulFwBSbjGhZ2PH5x+/9LPCDW/baEFg==" - }, - "node_modules/v-mask": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v-mask/-/v-mask-2.3.0.tgz", - "integrity": "sha512-ap7pTtCTvj25CqX4VYXqudCBd0+XvYyhiiLbzWQQR7AMQosJ2+DPu0a94P9stk0EGmGcmYxJaPkFkfjD8hquWQ==" - }, - "node_modules/vite": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", - "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-plugin-full-reload": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", - "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "picomatch": "^2.3.1" - } - }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", - "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" - } - }, - "node_modules/vue": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", - "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", - "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", - "dependencies": { - "@vue/compiler-sfc": "2.7.16", - "csstype": "^3.1.0" - } - }, - "node_modules/vue-chartjs": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-3.5.1.tgz", - "integrity": "sha512-foocQbJ7FtveICxb4EV5QuVpo6d8CmZFmAopBppDIGKY+esJV8IJgwmEW0RexQhxqXaL/E1xNURsgFFYyKzS/g==", - "dependencies": { - "@types/chart.js": "^2.7.55" - }, - "engines": { - "node": ">=6.9.0", - "npm": ">= 3.0.0" - }, - "peerDependencies": { - "chart.js": ">= 2.5" - } - }, - "node_modules/vue-class-component": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", - "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", - "peerDependencies": { - "vue": "^2.0.0" - } - }, - "node_modules/vue-click-outside": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vue-click-outside/-/vue-click-outside-1.1.0.tgz", - "integrity": "sha512-pNyvAA9mRXJwPHlHJyjMb4IONSc7khS5lxGcMyE2EIKgNMAO279PWM9Hyq0d5J4FkiSRdmFLwnbjDd5UtPizHQ==" - }, - "node_modules/vue-drag-resize": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/vue-drag-resize/-/vue-drag-resize-1.5.4.tgz", - "integrity": "sha512-SR3U7n6TAZEBgP7zw7bR9mjtAlYBjqIoaWTDPz5HXN/nYhOxKSA31aD7p71fmq1jtyt9reAnCx62valNL9ZAcg==", - "dependencies": { - "vue-drag-resize": "^1.5.0-rc3" - }, - "engines": { - "node": ">= 4.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/vue-draggable-resizable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vue-draggable-resizable/-/vue-draggable-resizable-2.3.0.tgz", - "integrity": "sha512-77CLRj1TPwB30pwsjOf3pkd1UzYanCdKXbqhILJ0Oo5QQl50lvBfyQCXxMFzwWwTc3sbBbQH3FfWSV+BkoSElA==", - "engines": { - "node": ">= 4.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/vue-echo-laravel": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vue-echo-laravel/-/vue-echo-laravel-1.0.0.tgz", - "integrity": "sha512-U6r+js0lmIkrsw/z+pRtK56RzlRfmO81ULDhkNG5M8W+f3X/vhiubGxoSgNQIBB1YFjs2NqbjxkPNlPeXEIgOA==", - "dependencies": { - "laravel-echo": "^1.11.4", - "pusher-js": "^7.0.6" - } - }, - "node_modules/vue-echo-laravel/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" - }, - "node_modules/vue-echo-laravel/node_modules/pusher-js": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-7.6.0.tgz", - "integrity": "sha512-5CJ7YN5ZdC24E0ETraCU5VYFv0IY5ziXhrS0gS5+9Qrro1E4M1lcZhtr9H1H+6jNSLj1LKKAgcLeE1EH9GxMlw==", - "dependencies": { - "@types/express-serve-static-core": "4.17.28", - "@types/node": "^14.14.31", - "tweetnacl": "^1.0.3" - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/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, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/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, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/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, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-fullscreen": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/vue-fullscreen/-/vue-fullscreen-2.6.1.tgz", - "integrity": "sha512-bbMJDKj2ZhsAwLcsvh8oV8WJeqAr2zxTHysvf7H8wSqaJTn5CnHXMSMbP9Tz4L/54I7jNQIdyA7VZ+EKAG+svg==", - "dependencies": { - "screenfull": "^5.1.0" - }, - "engines": { - "node": ">=4", - "npm": ">=3" - } - }, - "node_modules/vue-functional-calendar": { - "version": "2.9.99", - "resolved": "https://registry.npmjs.org/vue-functional-calendar/-/vue-functional-calendar-2.9.99.tgz", - "integrity": "sha512-2e8AU4mYxX/+oRiOwbFznEGkPveb9ArnudGRJLVh96Mb/oEp8dnZRRcvBa34eo+uJjJ6unQjzOj/2w2//PvzzQ==", - "dependencies": { - "core-js": "^2.6.5", - "vue": "^2.5.21" - } - }, - "node_modules/vue-i18n": { - "version": "8.28.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.28.2.tgz", - "integrity": "sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==" - }, - "node_modules/vue-loading-overlay": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/vue-loading-overlay/-/vue-loading-overlay-3.4.3.tgz", - "integrity": "sha512-Q4+RNnI6+szylJ98Abnp9CUDagKphZMt7okznGu1m7tidZX5b9u+a+De6uktWa5WULu/as+IsrWVR8lpmbDDOA==", - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "vue": "^2.7.0" - } - }, - "node_modules/vue-localstorage": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/vue-localstorage/-/vue-localstorage-0.6.2.tgz", - "integrity": "sha512-29YQVVkIdoS6BZBCJAyu9d0OR0eKSm5gk5OjsLssV1+NM4zJnf9cxhN1AVeXkUHJLqOonECweuaR8PZ2x307dw==" - }, - "node_modules/vue-number-animation": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vue-number-animation/-/vue-number-animation-1.1.2.tgz", - "integrity": "sha512-3tPgGl8OSWpEVOcoUSl/sikhx8AufYQL+oFAy/xzfQap7o7PeppD3W9WLOn9RvhMi9cXrja5aSeFnfdLS8iFww==", - "dependencies": { - "gsap": "^3.6.0" - } - }, - "node_modules/vue-paginate": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/vue-paginate/-/vue-paginate-3.6.0.tgz", - "integrity": "sha512-WEAI7K0JgGYF2svHnBEz7pzOBNtHRJTIdgD2iHb0AJDHztpgGJZEsqgjSmxd4cqXyyGXkXGRdLsnGN/pZImkiQ==", - "dependencies": { - "vue": "2.3.3" - } - }, - "node_modules/vue-paginate/node_modules/vue": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.3.3.tgz", - "integrity": "sha512-+TOd8egZAMNxeUsPw4RuYRk/oXmLCgJX07+KUF/RRUgPyVd4vNpeHLVnQ77EIrLj6vgJBYupPjk0rWxAOkLaqQ==", - "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details." - }, - "node_modules/vue-property-decorator": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", - "integrity": "sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q==", - "dependencies": { - "vue-class-component": "^7.1.0" - }, - "peerDependencies": { - "vue": "*" - } - }, - "node_modules/vue-recaptcha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/vue-recaptcha/-/vue-recaptcha-1.3.0.tgz", - "integrity": "sha512-9Qf1niyHq4QbEUhsvdUkS8BoOyhYwpp8v+imUSj67ffDo9RQ6h8Ekq8EGnw/GKViXCwWalp7EEY/n/fOtU0FyA==", - "peerDependencies": { - "vue": "^2.0.0" - } - }, - "node_modules/vue-router": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz", - "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" - }, - "node_modules/vue-select": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-3.20.3.tgz", - "integrity": "sha512-aDaq4rPBrDavh7NDLgAP8e0G8UNElh6vO3itGWjhf1y9KaGRWtFw21cUkSRHGgj0V5FlCG4EaRb1xdE/C9J+eg==", - "peerDependencies": { - "vue": "2.x" - } - }, - "node_modules/vue-simple-suggest": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/vue-simple-suggest/-/vue-simple-suggest-1.11.2.tgz", - "integrity": "sha512-mduUGE/ZdFjgxoBTz8nv5/IBHwYV8h780z1p282MQBDTvIII+qCSJHim1VxYJ4NbOQhVoB+93tqlwduV41YTcg==", - "peerDependencies": { - "vue": "^2.5.0" - } - }, - "node_modules/vue-slider-component": { - "version": "3.2.24", - "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-3.2.24.tgz", - "integrity": "sha512-28hfotAL/CPXPwqHgVFyUwUEV0zweoc2wW0bgraGkoIcRZGlFjk8caYJLE8+Luug5t3b9tJm/NyDXpyIdmcYZg==", - "dependencies": { - "core-js": "^3.6.5", - "vue-property-decorator": "^8.0.0" - } - }, - "node_modules/vue-slider-component/node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/vue-stripe-checkout": { - "version": "3.5.15", - "resolved": "https://registry.npmjs.org/vue-stripe-checkout/-/vue-stripe-checkout-3.5.15.tgz", - "integrity": "sha512-hmFNuAn2gD7LjyqCbSvhuziAcYPN6xyy/FvUNn1ExHfvJvaTeInczF8aLkGTuVKXCIV6mG8IU6T6VrtmqL8s1g==", - "deprecated": "A new and better vue stripe checkout can be found at https://vuestripe.com" - }, - "node_modules/vue-stripe-elements-plus": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/vue-stripe-elements-plus/-/vue-stripe-elements-plus-0.3.2.tgz", - "integrity": "sha512-Cuo+guUye1bHrwgQyU4Yb9mIEH+IKiz/QKNW7I70z1BWSIU0OjCgDHWcdBUDIgzLGip4/8FQqSa8IICKT+Lzmg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "lodash": "^4.17.11" - } - }, - "node_modules/vue-sweetalert2": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vue-sweetalert2/-/vue-sweetalert2-3.0.8.tgz", - "integrity": "sha512-5Nti/g9znA9otC7IO9YIrJMZrlRq3BkfjjTK6e2p54PyK7RumvvFr4iQ1GdCjz0QTupRbblEQABN3vf+KQRWSQ==", - "dependencies": { - "sweetalert2": "9.x" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", - "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/vue-toastify": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/vue-toastify/-/vue-toastify-1.9.0.tgz", - "integrity": "sha512-wp40sKnRSSD60urRP/zxBSAiO1hVvkxPAc9LlAlBhR27GLhpgjZ5dfTjg2y0BdN1dqDmcmCw3bzGjtkKclQY0w==", - "dependencies": { - "vue": "^2.6.12" - } - }, - "node_modules/vue-typed-js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/vue-typed-js/-/vue-typed-js-0.1.2.tgz", - "integrity": "sha512-9kDGuz17uYJghe/1hepRWiWYssgUFtrKnMGPHlWjVRxdvs/d9xYYWMkgzztjhx1R1B33hXkN8ctmkzCYHQ+caA==", - "dependencies": { - "typed.js": "git+https://github.com/mattboldt/typed.js.git" - } - }, - "node_modules/vue2-dropzone": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/vue2-dropzone/-/vue2-dropzone-3.6.0.tgz", - "integrity": "sha512-YXC1nCWIZvfa98e/i6h+EshZCkFSxFEh0Sxr9ODfThAPPDVhAzLLlz/4XIx0NGO1QeSy6htwSstte47R7vVhLQ==", - "dependencies": { - "dropzone": "^5.5.1" - } - }, - "node_modules/vuedraggable": { - "version": "2.24.3", - "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", - "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", - "dependencies": { - "sortablejs": "1.10.2" - } - }, - "node_modules/vuex": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", - "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", - "peerDependencies": { - "vue": "^2.0.0" - } - }, - "node_modules/vuex-persistedstate": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-3.2.1.tgz", - "integrity": "sha512-0OnHKGsCHJcvbEraaGZvuvX4aybM2oQWYRuZmIQB7zUjVM6tP+Hg+oXLrq9r6elT4she9SGtEbGE1L2+XdFgUw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "deepmerge": "^4.2.2", - "shvl": "^2.0.3" - }, - "peerDependencies": { - "vue": "^2.0.0", - "vuex": "^2.0.0 || ^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "name": "openlittermap-web", + "version": "5.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "openlittermap-web", + "version": "5.0.0", + "license": "GPL v3", + "dependencies": { + "@headlessui/tailwindcss": "^0.2.1", + "@headlessui/vue": "^1.7.23", + "@heroicons/vue": "^2.2.0", + "autoprefixer": "^10.4.20", + "axios": "^1.7.9", + "chart.js": "^4.4.8", + "filepond": "^4.32.6", + "filepond-plugin-file-validate-size": "^2.2.8", + "filepond-plugin-file-validate-type": "^1.2.9", + "filepond-plugin-image-exif-orientation": "^1.0.11", + "filepond-plugin-image-preview": "^4.6.12", + "filepond-plugin-image-resize": "^2.0.10", + "floating-vue": "^5.2.2", + "laravel-echo": "^1.17.1", + "leaflet": "^1.9.4", + "leaflet.glify": "^3.3.1", + "moment": "^2.30.1", + "pinia": "^2.3.0", + "pinia-plugin-persistedstate": "^4.2.0", + "postcss": "^8.4.49", + "pusher-js": "^8.4.0-rc2", + "tailwindcss": "^3.4.17", + "uuid": "^11.0.3", + "vue": "^3.5.13", + "vue-3-slider-component": "^1.0.2", + "vue-chartjs": "^5.3.2", + "vue-filepond": "^7.0.4", + "vue-i18n": "^11.0.0-rc.1", + "vue-loading-overlay": "^6.0.6", + "vue-number-animation": "^2.0.2", + "vue-router": "^4.5.0", + "vue-toastification": "^2.0.0-rc.5", + "vue-virtual-scroller": "^2.0.0-beta.8", + "vue3-recaptcha-v2": "^2.1.0" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/eslint-config-prettier": "^10.1.0", + "laravel-vite-plugin": "^1.1.1", + "postcss-nesting": "^13.0.1", + "prettier": "^3.4.2", + "sass-embedded": "^1.83.0", + "vite": "^6.0.5" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "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.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/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/@babel/compat-data": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "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" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-compilation-targets/node_modules/semver": { + "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" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/standalone": { + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.26.4.tgz", + "integrity": "sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.3.tgz", + "integrity": "sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.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", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "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", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.1.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@headlessui/tailwindcss": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@headlessui/tailwindcss/-/tailwindcss-0.2.1.tgz", + "integrity": "sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "tailwindcss": "^3.0" + } + }, + "node_modules/@headlessui/vue": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz", + "integrity": "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==", + "license": "MIT", + "dependencies": { + "@tanstack/vue-virtual": "^3.0.0-beta.60" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@heroicons/vue": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-2.2.0.tgz", + "integrity": "sha512-G3dbSxoeEKqbi/DFalhRxJU4mTXJn7GwZ7ae8NuEQzd1bqdd0jAbdaBZlHPcvPD2xI1iGzNVB4k20Un2AguYPw==", + "license": "MIT", + "peerDependencies": { + "vue": ">= 3" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@intlify/core-base": { + "version": "11.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz", + "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "11.0.0-rc.1", + "@intlify/shared": "11.0.0-rc.1" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz", + "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.0.0-rc.1", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.0.0-rc.1.tgz", + "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, + "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", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 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" + } + }, + "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", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.14.1592", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.14.1592.tgz", + "integrity": "sha512-r9r8bISBBisvfcNgNL3dSIQHSBe0v5YkX5zwNblIC2T0CIEgxEVoM5rq9O5wqgb5OEydsHTtT2hL57vdv6VT2w==", + "license": "MIT", + "dependencies": { + "@nuxt/schema": "3.14.1592", + "c12": "^2.0.1", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "globby": "^14.0.2", + "hash-sum": "^2.0.0", + "ignore": "^6.0.2", + "jiti": "^2.4.0", + "klona": "^2.0.6", + "knitwork": "^1.1.0", + "mlly": "^1.7.3", + "pathe": "^1.1.2", + "pkg-types": "^1.2.1", + "scule": "^1.3.0", + "semver": "^7.6.3", + "ufo": "^1.5.4", + "unctx": "^2.3.1", + "unimport": "^3.13.2", + "untyped": "^1.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/kit/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@nuxt/schema": { + "version": "3.14.1592", + "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.14.1592.tgz", + "integrity": "sha512-A1d/08ueX8stTXNkvGqnr1eEXZgvKn+vj6s7jXhZNWApUSqMgItU4VK28vrrdpKbjIPwq2SwhnGOHUYvN9HwCQ==", + "license": "MIT", + "dependencies": { + "c12": "^2.0.1", + "compatx": "^0.1.8", + "consola": "^3.2.3", + "defu": "^6.1.4", + "hookable": "^5.5.3", + "pathe": "^1.1.2", + "pkg-types": "^1.2.1", + "scule": "^1.3.0", + "std-env": "^3.8.0", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unimport": "^3.13.2", + "untyped": "^1.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", + "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", + "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", + "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", + "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", + "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", + "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", + "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", + "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", + "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", + "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", + "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", + "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", + "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", + "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", + "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", + "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", + "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", + "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", + "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz", + "integrity": "sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz", + "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz", + "integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.2.tgz", + "integrity": "sha512-y0b1p1FTlzxcSt/ZdGWY1AZ52ddwSU69pvFRYAELUSdLLxV8QOPe9dyT/KATO43UCb3DAwiyzi96h2IoYstBOQ==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.11.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "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", + "peer": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.1.0.tgz", + "integrity": "sha512-J6wV91y2pXc0Phha01k0WOHBTPsoSTf4xlmMjoKaeSxBpAdsgTppGF5RZRdOHM7OA74zAXD+VLANrtYXpiPKkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1" + }, + "peerDependencies": { + "eslint": ">= 8.21.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "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", + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/animejs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/animejs/-/animejs-3.2.2.tgz", + "integrity": "sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "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", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "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", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true, + "license": "MIT/X11" + }, + "node_modules/c12": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz", + "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.1", + "confbox": "^0.1.7", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.3", + "jiti": "^2.3.0", + "mlly": "^1.7.1", + "ohash": "^1.1.4", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/c12/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/c12/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001733", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", + "integrity": "sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chart.js": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz", + "integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "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-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/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compatx": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.1.8.tgz", + "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.0.tgz", + "integrity": "sha512-kxltocVQCwQNFvw40dlVRYeAkAvtYjMFZYNlOcsF5wExPpGwPxMwgx4IfDJvBRPtBpnQwItd5WkTaR0ZwT/TmQ==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "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", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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", + "peer": true + }, + "node_modules/deep-pick-omit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz", + "integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==", + "license": "MIT" + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.75", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz", + "integrity": "sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" + } + }, + "node_modules/escalade": { + "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" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "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", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "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", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "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", + "peer": true + }, + "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", + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filepond": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.32.6.tgz", + "integrity": "sha512-9EM6Vvny3K5s7guxegedByQx8n6ycUFaoF+Wo20+t1DYNt+vQaOtkGy2jnY8/2roAlskUnwJI1rAnAhzBPXwiw==", + "license": "MIT" + }, + "node_modules/filepond-plugin-file-validate-size": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/filepond-plugin-file-validate-size/-/filepond-plugin-file-validate-size-2.2.8.tgz", + "integrity": "sha512-yzb8scATmkWqPTP7oKQz6L8WwJm6Xmgc/fuq6DFGRaLz0I7372BUvBsxagBk/hypMIjvieNzhggm33Y60x3rcw==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=3.1.2 <5.x" + } + }, + "node_modules/filepond-plugin-file-validate-type": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/filepond-plugin-file-validate-type/-/filepond-plugin-file-validate-type-1.2.9.tgz", + "integrity": "sha512-Tzv07aNdZvjUXDRA3XL16QMEvh6llDrXlcZ6W0eTHQ+taHaVg/JKJTFs/AViO+6ZcpPCcQStbhYEL2HoS+vldw==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=1.x <5.x" + } + }, + "node_modules/filepond-plugin-image-exif-orientation": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/filepond-plugin-image-exif-orientation/-/filepond-plugin-image-exif-orientation-1.0.11.tgz", + "integrity": "sha512-hLBc12Fk6Zkj3L8mSAn+elugHOqT5rLUbgVXQQIQjMe0FsGjtpoxqeVR6jt4IWHGat2L9sFAgU2TGmd1mqosCg==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=3.x <5.x" + } + }, + "node_modules/filepond-plugin-image-preview": { + "version": "4.6.12", + "resolved": "https://registry.npmjs.org/filepond-plugin-image-preview/-/filepond-plugin-image-preview-4.6.12.tgz", + "integrity": "sha512-Y8ETX5QVV0mbPB0586UH8AUmG9tZg8PuN5bdEAIlZVJFTct5ebViJ7+Am94/VhTPjLqZjBf1zmDq5JU6XRsZKw==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=4.x <5.x" + } + }, + "node_modules/filepond-plugin-image-resize": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/filepond-plugin-image-resize/-/filepond-plugin-image-resize-2.0.10.tgz", + "integrity": "sha512-irX+J275u8Ph1KcciCeSQmxeFjbu0+co5XVCkiwdSNnz6KiqrCKN7RXTvEbdgSdDzyi5omr2oP1rKWps5L1RsQ==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=3.x <5.x" + } + }, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "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", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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/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" + } + }, + "node_modules/geojson-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/geojson-flatten/-/geojson-flatten-1.1.1.tgz", + "integrity": "sha512-k/6BCd0qAt7vdqdM1LkLfAy72EsLDy0laNwX0x2h49vfYCiQkRc4PSra8DNEdJ10EKRpwEvDXMb0dBknTJuWpQ==", + "license": "BSD-2-Clause" + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "tar": "^6.2.0" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "license": "MIT" + }, + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/ignore": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", + "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-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/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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "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": ">=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", + "peer": true + }, + "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", + "peer": true + }, + "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", + "peer": true + }, + "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" + }, + "engines": { + "node": ">=6" + } + }, + "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", + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.2.0.tgz", + "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==", + "license": "MIT" + }, + "node_modules/laravel-echo": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.17.1.tgz", + "integrity": "sha512-ORWc4vDfnBj/Oe5ThZ5kYyGItRjLDqAQUyhD/7UhehUOqc+s5x9HEBjtMVludNMP6VuXw6t7Uxt8bp63kaTofg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.1.1.tgz", + "integrity": "sha512-HMZXpoSs1OR+7Lw1+g4Iy/s3HF3Ldl8KxxYT2Ot8pEB4XB/QRuZeWgDYJdu552UN03YRSRNK84CLC9NzYRtncA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, + "node_modules/leaflet.glify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/leaflet.glify/-/leaflet.glify-3.3.1.tgz", + "integrity": "sha512-O2dOecip2M1ncHYfS/3mrVaCR7kC9DZl3yyNik9D/sYzpMiyG4E/JakBSdiPgPjohtCqt2Vi/SM/uJJWIKAAfw==", + "license": "MIT", + "dependencies": { + "earcut": "^2.2.4", + "geojson-flatten": "^1.1.1", + "point-in-polygon": "^1.1.0", + "polygon-lookup": "^2.6.0", + "rbush": "^3.0.1" + }, + "peerDependencies": { + "leaflet": "1.9.4" + } + }, + "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", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "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/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "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/micromatch": { + "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", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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" + } + }, + "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" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mitt": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", + "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==", + "license": "MIT" + }, + "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/mlly": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz", + "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^1.1.2", + "pkg-types": "^1.2.1", + "ufo": "^1.5.4" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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", + "peer": true + }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "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" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nypm": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.12.tgz", + "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "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-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", + "license": "MIT" + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "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", + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=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" + } + }, + "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-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinia": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz", + "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.2.0.tgz", + "integrity": "sha512-3buhA7ac+ssbOIx3VRCC8oHkoFwhDM9oHRCjo7nj+O8WUqnW+jRqh7eYT5eS/DNa3H28zp3dYf/nd/Vc8zj8eQ==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.14.1592", + "deep-pick-omit": "^1.2.1", + "defu": "^6.1.4", + "destr": "^2.0.3" + }, + "peerDependencies": { + "@pinia/nuxt": ">=0.9.0", + "pinia": ">=2.3.0" + }, + "peerDependenciesMeta": { + "@pinia/nuxt": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.2", + "pathe": "^1.1.2" + } + }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", + "license": "MIT" + }, + "node_modules/polygon-lookup": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/polygon-lookup/-/polygon-lookup-2.6.0.tgz", + "integrity": "sha512-Y76ioJomg19RGMYbeUmfgcX7An+0vHK/89nEUmt+1pgVY6WgtW12/jnSlw8D4907kWEi3rhQC11aXUc1qZDN4g==", + "license": "MIT", + "dependencies": { + "lodash": "^4.14.2", + "point-in-polygon": "1.0.1", + "rbush": "^2.0.2" + }, + "engines": { + "elasticsearch": ">=1.1.1", + "node": ">=10.0.0", + "npm": ">=1.4.3" + } + }, + "node_modules/polygon-lookup/node_modules/point-in-polygon": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.0.1.tgz", + "integrity": "sha512-7xblajMJtE9xOfDXkZrq98kjnoazmNPfNXqu9XCKk0uhtjImNdTRjkckIWKirtlyUocWU9XyzTyE2y5/E45v5A==", + "license": "MIT" + }, + "node_modules/polygon-lookup/node_modules/quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==", + "license": "ISC" + }, + "node_modules/polygon-lookup/node_modules/rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "license": "MIT", + "dependencies": { + "quickselect": "^1.0.1" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "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", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/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", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pusher-js": { + "version": "8.4.0-rc2", + "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-8.4.0-rc2.tgz", + "integrity": "sha512-d87GjOEEl9QgO5BWmViSqW0LOzPvybvX6WA9zLUstNdB57jVJuR27zHkRnrav2a3+zAMlHbP2Og8wug+rG8T+g==", + "license": "MIT", + "dependencies": { + "tweetnacl": "^1.0.3" + } + }, + "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", + "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/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "license": "MIT", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "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-from": { + "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", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", + "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.1", + "@rollup/rollup-android-arm64": "4.28.1", + "@rollup/rollup-darwin-arm64": "4.28.1", + "@rollup/rollup-darwin-x64": "4.28.1", + "@rollup/rollup-freebsd-arm64": "4.28.1", + "@rollup/rollup-freebsd-x64": "4.28.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", + "@rollup/rollup-linux-arm-musleabihf": "4.28.1", + "@rollup/rollup-linux-arm64-gnu": "4.28.1", + "@rollup/rollup-linux-arm64-musl": "4.28.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", + "@rollup/rollup-linux-riscv64-gnu": "4.28.1", + "@rollup/rollup-linux-s390x-gnu": "4.28.1", + "@rollup/rollup-linux-x64-gnu": "4.28.1", + "@rollup/rollup-linux-x64-musl": "4.28.1", + "@rollup/rollup-win32-arm64-msvc": "4.28.1", + "@rollup/rollup-win32-ia32-msvc": "4.28.1", + "@rollup/rollup-win32-x64-msvc": "4.28.1", + "fsevents": "~2.3.2" + } + }, + "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", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass-embedded": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.83.0.tgz", + "integrity": "sha512-/8cYZeL39evUqe0o//193na51Q1VWZ61qhxioQvLJwOtWIrX+PgNhCyD8RSuTtmzc4+6+waFZf899bfp/MCUwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.83.0", + "sass-embedded-android-arm64": "1.83.0", + "sass-embedded-android-ia32": "1.83.0", + "sass-embedded-android-riscv64": "1.83.0", + "sass-embedded-android-x64": "1.83.0", + "sass-embedded-darwin-arm64": "1.83.0", + "sass-embedded-darwin-x64": "1.83.0", + "sass-embedded-linux-arm": "1.83.0", + "sass-embedded-linux-arm64": "1.83.0", + "sass-embedded-linux-ia32": "1.83.0", + "sass-embedded-linux-musl-arm": "1.83.0", + "sass-embedded-linux-musl-arm64": "1.83.0", + "sass-embedded-linux-musl-ia32": "1.83.0", + "sass-embedded-linux-musl-riscv64": "1.83.0", + "sass-embedded-linux-musl-x64": "1.83.0", + "sass-embedded-linux-riscv64": "1.83.0", + "sass-embedded-linux-x64": "1.83.0", + "sass-embedded-win32-arm64": "1.83.0", + "sass-embedded-win32-ia32": "1.83.0", + "sass-embedded-win32-x64": "1.83.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.0.tgz", + "integrity": "sha512-uwFSXzJlfbd4Px189xE5l+cxN8+TQpXdQgJec7TIrb4HEY7imabtpYufpVdqUVwT1/uiis5V4+qIEC4Vl5XObQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.0.tgz", + "integrity": "sha512-GBiCvM4a2rkWBLdYDxI6XYnprfk5U5c81g69RC2X6kqPuzxzx8qTArQ9M6keFK4+iDQ5N9QTwFCr0KbZTn+ZNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.0.tgz", + "integrity": "sha512-5ATPdGo2SICqAhiJl/Z8KQ23zH4sGgobGgux0TnrNtt83uHZ+r+To/ubVJ7xTkZxed+KJZnIpolGD8dQyQqoTg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.0.tgz", + "integrity": "sha512-aveknUOB8GZewOzVn2Uwk+DKcncTR50Q6vtzslNMGbYnxtgQNHzy8A1qVEviNUruex+pHofppeMK4iMPFAbiEQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.0.tgz", + "integrity": "sha512-WqIay/72ncyf9Ph4vS742J3a73wZihWmzFUwpn1OD6lme1Aj4eWzWIve5IVnlTEJgcZcDHu6ECID9IZgehJKoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.0.tgz", + "integrity": "sha512-XQl9QqgxFFIPm/CzHhmppse5o9ocxrbaAdC2/DAnlAqvYWBBtgFqPjGoYlej13h9SzfvNoogx+y9r+Ap+e+hYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.0.tgz", + "integrity": "sha512-ERQ7Tvp1kFOW3ux4VDFIxb7tkYXHYc+zJpcrbs0hzcIO5ilIRU2tIOK1OrNwrFO6Qxyf7AUuBwYKLAtIU/Nz7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.0.tgz", + "integrity": "sha512-baG9RYBJxUFmqwDNC9h9ZFElgJoyO3jgHGjzEZ1wHhIS9anpG+zZQvO8bHx3dBpKEImX+DBeLX+CxsFR9n81gQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.0.tgz", + "integrity": "sha512-syEAVTJt4qhaMLxrSwOWa46zdqHJdnqJkLUK+t9aCr8xqBZLPxSUeIGji76uOehQZ1C+KGFj6n9xstHN6wzOJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.0.tgz", + "integrity": "sha512-RRBxQxMpoxu5+XcSSc6QR/o9asEwUzR8AbCS83RaXcdTIHTa/CccQsiAoDDoPlRsMTLqnzs0LKL4CfOsf7zBbA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.0.tgz", + "integrity": "sha512-Yc7u2TelCfBab+PRob9/MNJFh3EooMiz4urvhejXkihTiKSHGCv5YqDdtWzvyb9tY2Jb7YtYREVuHwfdVn3dTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.0.tgz", + "integrity": "sha512-Y7juhPHClUO2H5O+u+StRy6SEAcwZ+hTEk5WJdEmo1Bb1gDtfHvJaWB/iFZJ2tW0W1e865AZeUrC4OcOFjyAQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.0.tgz", + "integrity": "sha512-arQeYwGmwXV8byx5G1PtSzZWW1jbkfR5qrIHMEbTFSAvAxpqjgSvCvrHMOFd73FcMxVaYh4BX9LQNbKinkbEdg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.0.tgz", + "integrity": "sha512-E6uzlIWz59rut+Z3XR6mLG915zNzv07ISvj3GUNZENdHM7dF8GQ//ANoIpl5PljMQKp89GnYdvo6kj2gnaBf/g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.0.tgz", + "integrity": "sha512-eAMK6tyGqvqr21r9g8BnR3fQc1rYFj85RGduSQ3xkITZ6jOAnOhuU94N5fwRS852Hpws0lXhET+7JHXgg3U18w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.0.tgz", + "integrity": "sha512-Ojpi78pTv02sy2fUYirRGXHLY3fPnV/bvwuC2i5LwPQw2LpCcFyFTtN0c5h4LJDk9P6wr+/ZB/JXU8tHIOlK+Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.0.tgz", + "integrity": "sha512-3iLjlXdoPfgZRtX4odhRvka1BQs5mAXqfCtDIQBgh/o0JnGPzJIWWl9bYLpHxK8qb+uyVBxXYgXpI0sCzArBOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.0.tgz", + "integrity": "sha512-iOHw/8/t2dlTW3lOFwG5eUbiwhEyGWawivlKWJ8lkXH7fjMpVx2VO9zCFAm8RvY9xOHJ9sf1L7g5bx3EnNP9BQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.0.tgz", + "integrity": "sha512-2PxNXJ8Pad4geVcTXY4rkyTr5AwbF8nfrCTDv0ulbTvPhzX2mMKEGcBZUXWn5BeHZTBc6whNMfS7d5fQXR9dDQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.0.tgz", + "integrity": "sha512-muBXkFngM6eLTNqOV0FQi7Dv9s+YRQ42Yem26mosdan/GmJQc81deto6uDTgrYn+bzFNmiXcOdfm+0MkTWK3OQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "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", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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" + } + }, + "node_modules/string-width-cjs/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/string-width-cjs/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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/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" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, + "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", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.4.1.tgz", + "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17", + "unplugin": "^2.1.0" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.5.tgz", + "integrity": "sha512-tn890SwFFZxqaJSKQPPd+yygfKSATbM8BZWW1aCR2TJBTs1SDrmLamBueaFtYsGjHtQaRgqEbQflOjN2iW12gA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.14.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.1", + "magic-string": "^0.30.14", + "mlly": "^1.7.3", + "pathe": "^1.1.2", + "picomatch": "^4.0.2", + "pkg-types": "^1.2.1", + "scule": "^1.3.0", + "strip-literal": "^2.1.1", + "unplugin": "^1.16.0" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unimport/node_modules/unplugin": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.0.tgz", + "integrity": "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.0.tgz", + "integrity": "sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/untyped": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.5.2.tgz", + "integrity": "sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/standalone": "^7.26.4", + "@babel/types": "^7.26.3", + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.1", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/untyped/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "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", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.5.tgz", + "integrity": "sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-3-slider-component": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vue-3-slider-component/-/vue-3-slider-component-1.0.2.tgz", + "integrity": "sha512-W2rRH/0Tye+As8IrJqjtbQQo+SY/4+Lm8OOiiKRyaU/LAqHcEwjLFicvcGf08Kgt+f9994DEqkecK2k0HSF2RQ==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-chartjs": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-5.3.2.tgz", + "integrity": "sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==", + "license": "MIT", + "peerDependencies": { + "chart.js": "^4.1.1", + "vue": "^3.0.0-0 || ^2.7.0" + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-filepond": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/vue-filepond/-/vue-filepond-7.0.4.tgz", + "integrity": "sha512-HvWlCG8qjvyykrpPTDjJ+JqsHTXt5/0zWMX9vu7kU3JXCUODPUkGi9prZcauOnIZ4MqyeSZ9M0sDVwdMATyt1g==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=4.7.4 < 5.x", + "vue": ">=3 < 4" + } + }, + "node_modules/vue-i18n": { + "version": "11.0.0-rc.1", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz", + "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.0.0-rc.1", + "@intlify/shared": "11.0.0-rc.1", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-loading-overlay": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/vue-loading-overlay/-/vue-loading-overlay-6.0.6.tgz", + "integrity": "sha512-ZPrWawjCoNKGbCG9z4nePgbs/K9KXPa1j1oAJXP6T8FQho3NO+/chhjx4MLYFzfpwr+xkiQ8SNrV1kUG1bZPAw==", + "license": "MIT", + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-number-animation": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vue-number-animation/-/vue-number-animation-2.0.2.tgz", + "integrity": "sha512-1YQ1f6SHqQGdrf9/EKykvCa9FlAcUoh7o3c4Fe5Qc0TDbj415brB1lTpuIw6rpkTApLR7APerlZHXjNOWYOA3Q==", + "license": "MIT", + "dependencies": { + "animejs": "^3.2.2", + "vue-demi": "^0.11.4" + }, + "peerDependencies": { + "@vue/composition-api": "^1.3.6", + "vue": "^2.0.0 || >=3.0.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-number-animation/node_modules/vue-demi": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.11.4.tgz", + "integrity": "sha512-/3xFwzSykLW2HiiLie43a+FFgNOcokbBJ+fzvFXd0r2T8MYohqvphUyDQ8lbAwzQ3Dlcrb1c9ykifGkhSIAk6A==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true } + } + }, + "node_modules/vue-observe-visibility": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz", + "integrity": "sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/vue-virtual-scroller": { + "version": "2.0.0-beta.8", + "resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz", + "integrity": "sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==", + "license": "MIT", + "dependencies": { + "mitt": "^2.1.0", + "vue-observe-visibility": "^2.0.0-alpha.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue3-recaptcha-v2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vue3-recaptcha-v2/-/vue3-recaptcha-v2-2.1.0.tgz", + "integrity": "sha512-dy1qieyWkRHR0yfuHaiI4aPKAsDJ/9Gwl58bl7gU9UtDMOfFAAmimMbyuYTRdxNU90dapJ5LLf2u+2h+gfOiSg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "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" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 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", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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" + } + }, + "node_modules/wrap-ansi-cjs/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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } + } } diff --git a/package.json b/package.json index 0d7940fe4..06cd4f4f3 100644 --- a/package.json +++ b/package.json @@ -1,74 +1,69 @@ { - "private": true, - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build" - }, - "devDependencies": { - "axios": "^1.7.7", - "cross-env": "^7.0.3", - "laravel-vite-plugin": "^1.0.4", - "lodash": "^4.17.21", - "resolve-url-loader": "^5.0.0", - "sass": "^1.77.6", - "sass-loader": "^14.2.1", - "vite": "^5.4.8", - "vue-eslint-parser": "^9.4.3", - "vue-template-compiler": "^2.7.16" - }, - "dependencies": { - "@stricahq/bip32ed25519": "^1.0.4", - "@turf/hex-grid": "^7.0.0", - "@turf/turf": "^7.0.0", - "@vitejs/plugin-vue2": "^2.3.1", - "animate.css": "^4.1.1", - "animated-number-vue": "^1.0.0", - "bip39": "^3.1.0", - "blakejs": "^1.2.1", - "buefy": "^0.9.29", - "bulma": "^1.0.1", - "chart.js": "^2.9.4", - "fs": "0.0.1-security", - "laravel-echo": "^1.16.1", - "laravel-permission-to-vuejs": "2.0.5", - "leaflet": "^1.9.4", - "leaflet-timedimension": "^1.1.1", - "leaflet-webgl-heatmap": "github:xlcrr/leaflet-webgl-heatmap", - "leaflet.glify": "^3.3.0", - "lodash.sortby": "^4.7.0", - "mapbox-gl": "^3.4.0", - "moment": "^2.30.1", - "pusher-js": "^8.4.0-rc2", - "supercluster": "^8.0.1", - "v-img": "^0.2.0", - "v-mask": "^2.2.3", - "vue": "^2.7.16", - "vue-chartjs": "^3.5.1", - "vue-click-outside": "^1.1.0", - "vue-drag-resize": "^1.4.2", - "vue-draggable-resizable": "^2.3.0", - "vue-echo-laravel": "^1.0.0", - "vue-fullscreen": "^2.6.1", - "vue-functional-calendar": "^2.9.99", - "vue-i18n": "^8.21.0", - "vue-loading-overlay": "^3.3.3", - "vue-localstorage": "^0.6.2", - "vue-number-animation": "^1.0.5", - "vue-paginate": "^3.6.0", - "vue-recaptcha": "^1.3.0", - "vue-router": "^3.4.3", - "vue-select": "^3.10.8", - "vue-simple-suggest": "^1.10.3", - "vue-slider-component": "^3.2.5", - "vue-stripe-checkout": "^3.5.7", - "vue-stripe-elements-plus": "^0.3.2", - "vue-sweetalert2": "^3.0.6", - "vue-toastify": "^1.8.0", - "vue-typed-js": "^0.1.2", - "vue2-dropzone": "^3.6.0", - "vuedraggable": "^2.24.3", - "vuex": "^3.5.1", - "vuex-persistedstate": "^3.1.0" - } + "name": "openlittermap-web", + "version": "5.0.0", + "type": "module", + "author": "Seán Lynch", + "license": "GPL v3", + "description": "OpenLitterMap Web App", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/OpenLitterMap/openlittermap-web.git" + }, + "keywords": [ + "litter", + "citizen science", + "openlittermap", + "plastic pollution" + ], + "dependencies": { + "@headlessui/tailwindcss": "^0.2.1", + "@headlessui/vue": "^1.7.23", + "@heroicons/vue": "^2.2.0", + "autoprefixer": "^10.4.20", + "axios": "^1.7.9", + "chart.js": "^4.4.8", + "filepond": "^4.32.6", + "filepond-plugin-file-validate-size": "^2.2.8", + "filepond-plugin-file-validate-type": "^1.2.9", + "filepond-plugin-image-exif-orientation": "^1.0.11", + "filepond-plugin-image-preview": "^4.6.12", + "filepond-plugin-image-resize": "^2.0.10", + "floating-vue": "^5.2.2", + "laravel-echo": "^1.17.1", + "leaflet": "^1.9.4", + "leaflet.glify": "^3.3.1", + "moment": "^2.30.1", + "pinia": "^2.3.0", + "pinia-plugin-persistedstate": "^4.2.0", + "postcss": "^8.4.49", + "pusher-js": "^8.4.0-rc2", + "tailwindcss": "^3.4.17", + "uuid": "^11.0.3", + "vue": "^3.5.13", + "vue-3-slider-component": "^1.0.2", + "vue-chartjs": "^5.3.2", + "vue-filepond": "^7.0.4", + "vue-i18n": "^11.0.0-rc.1", + "vue-loading-overlay": "^6.0.6", + "vue-number-animation": "^2.0.2", + "vue-router": "^4.5.0", + "vue-toastification": "^2.0.0-rc.5", + "vue-virtual-scroller": "^2.0.0-beta.8", + "vue3-recaptcha-v2": "^2.1.0" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/eslint-config-prettier": "^10.1.0", + "laravel-vite-plugin": "^1.1.1", + "postcss-nesting": "^13.0.1", + "prettier": "^3.4.2", + "sass-embedded": "^1.83.0", + "vite": "^6.0.5" + } } diff --git a/phpunit.xml b/phpunit.xml index 86a833843..289de2ead 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -5,12 +5,12 @@ colors="true" > - - ./tests/Unit - ./tests/Feature + + ./tests/Unit + @@ -21,8 +21,8 @@ - - - + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 000000000..9fab08848 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +export default { + plugins: { + 'tailwindcss/nesting': 'postcss-nesting', + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/build/assets/History-B_SY1GJM.css b/prettier.config.js similarity index 100% rename from public/build/assets/History-B_SY1GJM.css rename to prettier.config.js diff --git a/public/.DS_Store b/public/.DS_Store index c058f74cf..5125498ef 100644 Binary files a/public/.DS_Store and b/public/.DS_Store differ diff --git a/public/assets/.DS_Store b/public/assets/.DS_Store index 898916d99..c22045306 100644 Binary files a/public/assets/.DS_Store and b/public/assets/.DS_Store differ diff --git a/public/assets/favicon/about.txt b/public/assets/favicon/about.txt new file mode 100644 index 000000000..4602a41a8 --- /dev/null +++ b/public/assets/favicon/about.txt @@ -0,0 +1,6 @@ +This favicon was generated using the following graphics from Twitter Twemoji: + +- Graphics Title: 1f30d.svg +- Graphics Author: Copyright 2020 Twitter, Inc and other contributors (https://github.com/twitter/twemoji) +- Graphics Source: https://github.com/twitter/twemoji/blob/master/assets/svg/1f30d.svg +- Graphics License: CC-BY 4.0 (https://creativecommons.org/licenses/by/4.0/) diff --git a/public/assets/favicon/android-chrome-192x192.png b/public/assets/favicon/android-chrome-192x192.png new file mode 100644 index 000000000..ea42be4d3 Binary files /dev/null and b/public/assets/favicon/android-chrome-192x192.png differ diff --git a/public/assets/favicon/android-chrome-512x512.png b/public/assets/favicon/android-chrome-512x512.png new file mode 100644 index 000000000..fec6a8db0 Binary files /dev/null and b/public/assets/favicon/android-chrome-512x512.png differ diff --git a/public/assets/favicon/apple-touch-icon.png b/public/assets/favicon/apple-touch-icon.png new file mode 100644 index 000000000..409055a4c Binary files /dev/null and b/public/assets/favicon/apple-touch-icon.png differ diff --git a/public/assets/favicon/favicon-16x16.png b/public/assets/favicon/favicon-16x16.png new file mode 100644 index 000000000..79d4141b6 Binary files /dev/null and b/public/assets/favicon/favicon-16x16.png differ diff --git a/public/assets/favicon/favicon-32x32.png b/public/assets/favicon/favicon-32x32.png new file mode 100644 index 000000000..1fe72b520 Binary files /dev/null and b/public/assets/favicon/favicon-32x32.png differ diff --git a/public/assets/favicon/favicon.ico b/public/assets/favicon/favicon.ico new file mode 100644 index 000000000..e71a5af74 Binary files /dev/null and b/public/assets/favicon/favicon.ico differ diff --git a/public/assets/favicon/site.webmanifest b/public/assets/favicon/site.webmanifest new file mode 100644 index 000000000..45dc8a206 --- /dev/null +++ b/public/assets/favicon/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/public/build/assets/About-CJvJIjVD.css b/public/build/assets/About-CJvJIjVD.css deleted file mode 100644 index 1ffd783e1..000000000 --- a/public/build/assets/About-CJvJIjVD.css +++ /dev/null @@ -1 +0,0 @@ -.butts-img[data-v-ced4cfc5]{text-align:center;padding-right:5em}.cig-2[data-v-ced4cfc5]{align-items:center;display:flex;padding:5em}@media screen and (max-width: 768px){.butts-img[data-v-ced4cfc5]{padding-right:0}.cig-2[data-v-ced4cfc5]{padding:1em}} diff --git a/public/build/assets/BoundingBox-ZChBJfEI.css b/public/build/assets/BoundingBox-ZChBJfEI.css deleted file mode 100644 index 6b3056491..000000000 --- a/public/build/assets/BoundingBox-ZChBJfEI.css +++ /dev/null @@ -1 +0,0 @@ -.fit-content[data-v-420638e6]{max-width:fit-content}.is-brand-card[data-v-420638e6]{border:1px solid #ccc;padding:1em;border-radius:6px;cursor:grab;width:fit-content;margin-bottom:1em}.is-brand-card.selected[data-v-420638e6]{border:1px solid green}.is-brand-card[data-v-420638e6]:active{cursor:grabbing}.is-box[data-v-754c37be]{border:1px solid #ccc;padding:1em;margin-bottom:1em;max-width:20em;position:relative}.is-box.is-active[data-v-754c37be]{border:1px solid green}.box-label[data-v-754c37be]{margin-bottom:.25em}.box-categories[data-v-754c37be]{display:grid}.duplicate-box[data-v-754c37be]{position:absolute;right:1em}.toggle-box[data-v-754c37be]{position:absolute;top:7em;right:1em}.rotate-box[data-v-754c37be]{position:absolute;top:10em;right:1em}#image-wrapper{height:500px;width:500px;background-repeat:no-repeat;position:relative;background-size:500px 500px;margin:0 auto 1em}.vdr{border:1px solid red}.vdr.active:before{outline:0}.box-tag{background-color:red;position:absolute;top:-1.5em;right:0;padding:0 5px;margin-right:-3px}.display-inline-grid{display:inline-grid}.filler{width:100%;height:100%;position:absolute}.littercoin-pos{position:fixed;background:#fff;bottom:0;left:1em;margin-bottom:1em} diff --git a/public/build/assets/BulkTag-D2tf3_38.css b/public/build/assets/BulkTag-D2tf3_38.css deleted file mode 100644 index 13ee55532..000000000 --- a/public/build/assets/BulkTag-D2tf3_38.css +++ /dev/null @@ -1 +0,0 @@ -.select-all-photos[data-v-a15747e1]{min-width:9em}.filter-my-photos[data-v-a15747e1]{flex-direction:column;gap:8px}@media (min-width: 1027px){.filter-my-photos[data-v-a15747e1]{flex-direction:row;gap:16px}}.top-row[data-v-c3ddc111]{display:flex;justify-content:center}.close-popup[data-v-c3ddc111]{position:absolute;top:5px;right:5px;cursor:pointer;width:20px;font-size:16px}.close-popup[data-v-c3ddc111]:hover{transform:scale(1.05)}.photo-tags-container[data-v-c3ddc111]{margin-top:16px}.tags-list[data-v-c3ddc111]{display:flex;max-width:50em;margin:auto;flex-wrap:wrap;overflow:auto;justify-content:center}.litter-tag[data-v-c3ddc111]{position:relative;cursor:pointer;padding:4px;border-radius:4px;background-color:#3298dc;margin:4px}.litter-tag .close[data-v-c3ddc111]{display:none;position:absolute;top:-5px;right:-5px;width:20px;height:20px;border-radius:50%;color:#fff;font-size:12px;background-color:#000000b3}.litter-tag .close[data-v-c3ddc111]:hover{background-color:#000}.litter-tag:hover .close[data-v-c3ddc111]{display:flex;justify-content:center;align-items:center}.list-enter-active[data-v-c3ddc111],.list-leave-active[data-v-c3ddc111],.categories-enter-active[data-v-c3ddc111],.categories-leave-active[data-v-c3ddc111]{transition:all .5s}.list-enter[data-v-c3ddc111],.list-leave-to[data-v-c3ddc111]{opacity:0;transform:translate(30px)}.categories-enter[data-v-c3ddc111],.categories-leave-to[data-v-c3ddc111]{opacity:0;transform:translateY(50px)}.categories-move[data-v-c3ddc111]{transition:transform .5s}.bulk-tag[data-v-b14971f8]{padding:3rem}.my-photos-grid-container[data-v-b14971f8]{display:grid;grid-template-rows:repeat(5,1fr);grid-template-columns:repeat(6,1fr);grid-row-gap:.5em;grid-column-gap:.5em}.my-grid-photo[data-v-b14971f8]{max-height:10em;max-width:10em;position:relative}.my-grid-photo .litter[data-v-b14971f8]{width:100%;height:100%;object-fit:cover;border-radius:5px}.grid-checkmark[data-v-b14971f8]{position:absolute;height:32px;bottom:8px;right:0;color:#0ca3e0;font-size:1rem;padding:5px}.grid-checkmark .tag-icon[data-v-b14971f8]{position:relative;height:30px;width:30px;border-radius:50%;background-color:#000}.grid-checkmark .tag-icon i[data-v-b14971f8]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.grid-tagged[data-v-b14971f8]{position:absolute;height:32px;top:0;right:0;color:#00d1b2;font-size:1rem;padding:5px;cursor:pointer}.grid-tagged .tag-icon[data-v-b14971f8]{position:relative;height:30px;width:30px;border-radius:50%;background-color:#000}.grid-tagged .tag-icon i[data-v-b14971f8]{position:absolute;top:52%;left:52%;transform:translate(-50%,-50%)}.grid-tagged .tooltip-text[data-v-b14971f8]{min-width:max-content;transform:translate(-50%,-5px)}.grid-tagged[data-v-b14971f8]:hover{transform:scale(1.05)}.photo-tags[data-v-b14971f8]{position:absolute;top:105%;right:50%;width:250px;padding:10px;background:#f8f8ff;box-shadow:2px 2px 2px 1px #0003;border-radius:5px;transform:translate(50%);z-index:10}.photos-info[data-v-b14971f8]{display:flex;gap:8px;align-items:center}.photos-info .info-icon[data-v-b14971f8]{display:flex;justify-content:center;align-items:center;color:#fff;background-color:#00d1b2;width:24px;height:24px;border-radius:50%}.photos-info .info-icon i[data-v-b14971f8]{margin-top:2px}.bottom-actions[data-v-b14971f8]{display:flex;flex-direction:column;justify-content:space-between;align-items:center;margin-top:16px;gap:8px}.bottom-actions .bottom-navigation[data-v-b14971f8]{display:flex;flex-direction:row}.bottom-actions .bottom-right-actions[data-v-b14971f8]{display:flex;flex-direction:column;align-items:center;gap:8px}@media (min-width: 1027px){.my-photos-grid-container[data-v-b14971f8]{grid-template-rows:repeat(3,1fr);grid-template-columns:repeat(10,1fr);grid-row-gap:1em;grid-column-gap:1em}.bottom-actions[data-v-b14971f8]{flex-direction:row;gap:0}.bottom-actions .bottom-right-actions[data-v-b14971f8]{flex-direction:row}}.fade-enter-active[data-v-b14971f8],.fade-leave-active[data-v-b14971f8]{transition:opacity .3s}.fade-enter[data-v-b14971f8],.fade-leave-to[data-v-b14971f8]{opacity:0} diff --git a/public/build/assets/CityMapContainer-DB28sbhK.css b/public/build/assets/CityMapContainer-DB28sbhK.css deleted file mode 100644 index 09d0b1d4c..000000000 --- a/public/build/assets/CityMapContainer-DB28sbhK.css +++ /dev/null @@ -1 +0,0 @@ -#hexmap[data-v-86894abe]{height:100%;margin:0;position:relative;z-index:0}.cmc[data-v-a4ca41ed]{height:calc(100vh - 82px)} diff --git a/public/build/assets/Cleanups-Dq-PfgLP.css b/public/build/assets/Cleanups-Dq-PfgLP.css deleted file mode 100644 index 0ed365570..000000000 --- a/public/build/assets/Cleanups-Dq-PfgLP.css +++ /dev/null @@ -1 +0,0 @@ -.cleanup-container[data-v-4ce4c465]{text-align:left;padding:0 1em}.cleanup-buttons[data-v-4ce4c465]{display:flex;flex-direction:column;justify-content:center}@media screen and (max-width: 768px){.cleanup-map[data-v-7732288b]{flex:0!important}.cleanup-sidebar[data-v-7732288b]{flex:1!important}}.cleanups-container[data-v-7732288b]{height:calc(100% - 72px);display:flex}.cleanup-map[data-v-7732288b]{flex:.7;z-index:1}.cleanup-sidebar[data-v-7732288b]{background-color:#fff;height:100%;flex:.3;text-align:center;padding-left:1em;padding-right:1em} diff --git a/public/build/assets/ContactUs-Dc_Ms9n1.css b/public/build/assets/ContactUs-Dc_Ms9n1.css deleted file mode 100644 index 1c9c99511..000000000 --- a/public/build/assets/ContactUs-Dc_Ms9n1.css +++ /dev/null @@ -1 +0,0 @@ -.centered[data-v-156071c9]{width:100%;margin:6rem auto}@media (max-width: 768px){.centered[data-v-156071c9]{margin:2rem auto}}.with-x-spacing[data-v-156071c9]{padding-right:24px;padding-left:24px}.recaptcha[data-v-156071c9]{display:flex;flex-direction:column;align-items:center} diff --git a/public/build/assets/Countries-DfoyNAPX.css b/public/build/assets/Countries-DfoyNAPX.css deleted file mode 100644 index 1815fe39f..000000000 --- a/public/build/assets/Countries-DfoyNAPX.css +++ /dev/null @@ -1 +0,0 @@ -.stats[data-v-c7421a37]{display:flex;flex-direction:column;justify-content:space-between;max-width:800px;margin:auto;padding-bottom:2em}.stat[data-v-c7421a37]{padding:12px;flex:1}@media screen and (min-width: 768px){.stats[data-v-c7421a37]{flex-direction:row}}.progress-bar[data-v-fdd75015]{max-width:600px}.wrapper[data-v-bd523968]{padding:1rem .5rem}.typed-container[data-v-bd523968]{display:flex;justify-content:center}.worldcup-title[data-v-bd523968]{font-size:75px;margin-bottom:15px;text-align:center;font-weight:800}.leaderboard-heading[data-v-bd523968]{display:flex;justify-content:center;align-items:center;gap:1rem;margin-bottom:2rem;cursor:pointer}.leaderboard-heading:hover .title[data-v-bd523968]{text-decoration:underline}.leaderboard-heading:hover i[data-v-bd523968]{transform:translate(1rem)}.leaderboard-heading .title[data-v-bd523968]{color:#fff;margin-bottom:0}.leaderboard-heading i[data-v-bd523968]{color:#fff;font-size:20px;transition:all .3s}@media screen and (min-width: 768px){.wrapper[data-v-bd523968]{padding:3rem 1.5rem}}@media screen and (max-width: 768px){.typed-container[data-v-bd523968]{min-height:130px}.worldcup-title[data-v-bd523968]{font-size:40px!important;min-height:120px}.typed-element[data-v-bd523968]{min-height:120px}.leaderboard-heading h3[data-v-bd523968]{font-size:30px}} diff --git a/public/build/assets/Donate-Di7tAK4-.css b/public/build/assets/Donate-Di7tAK4-.css deleted file mode 100644 index 5358e2125..000000000 --- a/public/build/assets/Donate-Di7tAK4-.css +++ /dev/null @@ -1 +0,0 @@ -.grid-container[data-v-9c0de48a]{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;grid-column-gap:1em;grid-row-gap:1em;padding-bottom:2em}@media screen and (max-width: 1000px){.grid-container[data-v-9c0de48a]{grid-template-columns:1fr 1fr;grid-row-gap:2em!important}}@media screen and (max-width: 600px){.grid-container[data-v-9c0de48a]{grid-template-columns:1fr;grid-row-gap:2em!important}} diff --git a/public/build/assets/Email-Dc7BjTI2.css b/public/build/assets/Email-Dc7BjTI2.css deleted file mode 100644 index 96025e873..000000000 --- a/public/build/assets/Email-Dc7BjTI2.css +++ /dev/null @@ -1 +0,0 @@ -.centered[data-v-4ded61d5]{width:100%;margin:12rem auto}.with-x-spacing[data-v-4ded61d5]{padding-right:24px;padding-left:24px} diff --git a/public/build/assets/FAQ-DbW4-k28.css b/public/build/assets/FAQ-DbW4-k28.css deleted file mode 100644 index 0edba9db6..000000000 --- a/public/build/assets/FAQ-DbW4-k28.css +++ /dev/null @@ -1 +0,0 @@ -.section-faq[data-v-a00c8460]{background-color:#111827;min-height:100%;padding-bottom:100px}.section-faq .hero-body[data-v-a00c8460]{margin:0 auto}.section-faq .faq[data-v-a00c8460]{max-width:1000px}.section-faq .faq a[data-v-a00c8460]{color:#f5f5f5;text-decoration:underline}.section-faq .faq a[data-v-a00c8460]:hover{color:#ee6c4d}.section-faq .faq .transition[data-v-a00c8460],.section-faq .faq ul li i[data-v-a00c8460]:before,.section-faq .faq ul li i[data-v-a00c8460]:after,.section-faq .faq p[data-v-a00c8460]{transition:all .25s ease-in-out}.section-faq .faq .flipIn[data-v-a00c8460],.section-faq .faq ul li[data-v-a00c8460],.section-faq .faq h1[data-v-a00c8460]{animation:flipdown-a00c8460 .5s ease both}.section-faq .faq .no-select[data-v-a00c8460],.section-faq .faq h2[data-v-a00c8460]{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.section-faq .faq h2[data-v-a00c8460]{color:#ff6873}.section-faq .faq h2[data-v-a00c8460]{font-size:26px;line-height:34px;font-weight:300;letter-spacing:1px;display:block;margin:0 0 14px;cursor:pointer}.section-faq .faq p[data-v-a00c8460]{color:#f5f5f5;position:relative;overflow:hidden;max-height:800px;opacity:1;transform:translate(0);z-index:2}.section-faq .faq ul[data-v-a00c8460]{list-style:none;perspective:900;padding:0;margin:0}.section-faq .faq ul li[data-v-a00c8460]{position:relative;margin:0;padding:16px 0;border-top:1px solid #dce7eb}.section-faq .faq ul li[data-v-a00c8460]{animation-delay:.3s}.section-faq .faq ul li[data-v-a00c8460]:last-of-type{padding-bottom:0}.section-faq .faq ul li i[data-v-a00c8460]{position:absolute;transform:translate(-6px);margin-top:16px;right:0}.section-faq .faq ul li i[data-v-a00c8460]:before,.section-faq .faq ul li i[data-v-a00c8460]:after{content:"";position:absolute;background-color:#ff6873;width:3px;height:9px}.section-faq .faq ul li i[data-v-a00c8460]:before{transform:translate(-2px) rotate(45deg)}.section-faq .faq ul li i[data-v-a00c8460]:after{transform:translate(2px) rotate(-45deg)}.section-faq .faq ul li input[type=checkbox][data-v-a00c8460]{position:absolute;cursor:pointer;width:100%;height:100%;z-index:1;opacity:0}.section-faq .faq ul li input[type=checkbox]:checked~p[data-v-a00c8460]{margin-top:0;max-height:0;opacity:0;transform:translateY(50%)}.section-faq .faq ul li input[type=checkbox]:checked~i[data-v-a00c8460]:before{transform:translate(2px) rotate(45deg)}.section-faq .faq ul li input[type=checkbox]:checked~i[data-v-a00c8460]:after{transform:translate(-2px) rotate(-45deg)}@keyframes flipdown-a00c8460{0%{opacity:0;transform-origin:top center;transform:rotateX(-90deg)}5%{opacity:1}80%{transform:rotateX(8deg)}83%{transform:rotateX(6deg)}92%{transform:rotateX(-3deg)}to{transform-origin:top center;transform:rotateX(0)}} diff --git a/public/build/assets/FunctionalCalendar-CIfXugP3.css b/public/build/assets/FunctionalCalendar-CIfXugP3.css deleted file mode 100644 index 919dade94..000000000 --- a/public/build/assets/FunctionalCalendar-CIfXugP3.css +++ /dev/null @@ -1 +0,0 @@ -.vfc-time-picker-container[data-v-10658a87]{min-width:250px}.vfc-time-picker-container .vfc-modal-time-line>span>span[data-v-10658a87]:not(:nth-child(2)):not(.vfc-active):hover{cursor:pointer}.vfc-time-picker-container .titles[data-v-10658a87]{display:flex;padding:10px 0}.vfc-time-picker-container .titles>div[data-v-10658a87]{flex:1;text-align:center;color:#66b3cc;word-break:break-all;font-size:25px}.vfc-time-picker-container .vfc-time-picker[data-v-10658a87]{padding-bottom:20px}.vfc-day[data-v-2af096af]{position:relative}.vfc-day .times[data-v-2af096af]{position:absolute;top:-5px;background-color:red;color:#fff;border-radius:50%;width:15px;z-index:20;height:15px;line-height:15px}.vfc-day .times[data-v-2af096af]:hover{cursor:pointer;background-color:#c70000}.vfc-day .number[data-v-2af096af]{position:absolute;top:-5px;right:calc(50% + 7px);background-color:green;color:#fff;font-size:10px;border-radius:50%;width:15px;z-index:30;height:15px;line-height:15px}.vfc-day .number[data-v-2af096af]:hover{background-color:#005e00}.vfc-day .toolTip[data-v-2af096af]{position:absolute;top:-20px;left:0;padding:5px;max-width:108px;word-wrap:break-word;border-radius:5px;z-index:200;background-color:#005e00}.footerCon[data-v-40e6eac8]{display:flex;justify-content:space-between;margin:0 20px 20px}.vfc-popover-container:focus{outline:none}.vfc-single-input,.vfc-multiple-input input{font-size:inherit;transition:width .2s;padding:7px;width:143px;color:#aaa;border:1px solid #efefef;text-align:center;outline:none}.vfc-single-input{border-radius:10px}.vfc-multiple-input input:first-child{border-radius:10px 0 0 10px}.vfc-multiple-input input:last-child{border-radius:0 10px 10px 0}.vfc-tags-input{display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:-o-flex;display:flex;flex-wrap:wrap;align-items:center}.vfc-tags-input input{flex:1;background:transparent;border:none}.vfc-tags-input input[type=text]{color:#495057}.vfc-tags-input input:focus{outline:none}.vfc-tags-input span{margin-right:.3em;margin-bottom:.3em;padding-right:.75em;padding-left:.6em;border-radius:10em}.vfc-tags-input-wrapper-default{width:295px;padding:.5em .25em;min-height:15px;background:#fff;border:1px solid #dbdbdb;border-radius:10px}.vfc-tags-input-badge{width:85px;background-color:#f0f1f2;position:relative;display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em;overflow:hidden;text-overflow:ellipsis}.vfc-tags-input-remove{cursor:pointer;position:absolute;display:inline-block;right:.3em;top:.3em;padding:.5em;overflow:hidden}.vfc-tags-input-remove:before,.vfc-tags-input-remove:after{content:"";position:absolute;width:75%;left:.15em;background:#ff8498;height:2px;margin-top:-1px;transform:rotate(45deg)}.vfc-tags-input-remove:after{transform:rotate(-45deg)}.vfc-dark.vfc-multiple-input input,.vfc-dark .vfc-single-input{border-color:#28456c;background-color:#1a202c}.vfc-dark.vfc-tags-input-root .vfc-tags-input-wrapper-default{background-color:#1a202c;border-color:#28456c}.vfc-dark.vfc-tags-input-root .vfc-tags-input-wrapper-default.vfc-tags-input .vfc-tags-input-badge{background-color:#fff}.vfc-main-container{position:relative;border-radius:.28571429rem;box-shadow:0 2px 15px #00000040;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,serif;background-color:#fff;-webkit-user-select:none;user-select:none;box-sizing:border-box}.vfc-main-container.vfc-modal{position:absolute;width:inherit;z-index:1000}.vfc-main-container>*{box-sizing:border-box}.vfc-main-container.vfc-dark{background-color:#1a202c}.vfc-main-container.vfc-dark .vfc-navigation-buttons div .vfc-arrow-right,.vfc-main-container.vfc-dark .vfc-navigation-buttons div .vfc-arrow-left,.vfc-main-container.vfc-dark .vfc-separately-navigation-buttons div .vfc-arrow-right,.vfc-main-container.vfc-dark .vfc-separately-navigation-buttons div .vfc-arrow-left{border-color:#fff}.vfc-main-container.vfc-dark .vfc-navigation-buttons div .vfc-arrow-left:active,.vfc-main-container.vfc-dark .vfc-navigation-buttons div .vfc-arrow-right:active,.vfc-main-container.vfc-dark .vfc-separately-navigation-buttons div .vfc-arrow-left:active,.vfc-main-container.vfc-dark .vfc-separately-navigation-buttons div .vfc-arrow-right:active{border-color:#d9d9d9}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content{background-color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-navigation-buttons div .vfc-arrow-left,.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-navigation-buttons div .vfc-arrow-right{border-color:#000}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date{color:#000}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date .vfc-popover-caret{background-color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date.vfc-underline{text-decoration:underline dotted #66b3cc}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-months div.vfc-item{color:#000}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-months div.vfc-item:hover{background-color:#7171714d}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar .vfc-months-container .vfc-content .vfc-months div.vfc-item.vfc-selected{background-color:#4299e1;color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-top-date span{color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-top-date span.vfc-underline{text-decoration:underline #4299e1}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-top-date span.vfc-underline.vfc-underline-active{text-decoration-color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-dayNames span{color:#bfbfbf}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week .vfc-week-number{border-color:#38b2ac}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day .vfc-base-start,.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day .vfc-base-end{background-color:#28456c}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day{color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-today{background-color:#38b2ac;color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked{background-color:#4299e1}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked.vfc-borderd,.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked.vfc-start-marked,.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked.vfc-end-marked{color:#fff}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked:not(.vfc-start-marked):not(.vfc-end-marked):before{background-color:#28456c}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked:after{color:#000}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-marked.vfc-hide{color:#bfbfbf}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-hide{color:#464646}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-disabled{color:#85858533}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day:after{color:#000}.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-hover:hover,.vfc-main-container.vfc-dark .vfc-calendars .vfc-calendar div.vfc-content .vfc-week div.vfc-day span.vfc-span-day.vfc-hovered{z-index:1;background-color:#4682b4}.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-time-picker__list .vfc-time-picker__item{color:#fff}.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-time-picker__list .vfc-time-picker__item--selected{color:#4299e1}.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-time-picker__list::-webkit-scrollbar-track{background:#28456c}.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-time-picker__list::-webkit-scrollbar-thumb{background:#4299e1}.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-close:before,.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-close:after{background-color:#fff}.vfc-main-container.vfc-dark .vfc-time-picker-container .vfc-modal-time-mechanic .vfc-modal-time-line{background-color:#4299e1;color:#fff}.vfc-time-picker:after{content:"";display:table;clear:both}.vfc-time-picker-container{display:flex;flex-direction:column;justify-content:center}.vfc-time-picker__list{float:left;width:50%;height:200px;overflow-y:scroll}.vfc-time-picker__list::-webkit-scrollbar{width:3px}.vfc-time-picker__list::-webkit-scrollbar-track{background:#efefef}.vfc-time-picker__list::-webkit-scrollbar-thumb{background:#ccc}.vfc-time-picker__with-suffix .vfc-time-picker__list{width:33.333333%}.vfc-time-picker__item{padding:10px 0;font-size:20px;text-align:center;cursor:pointer;transition:font-size .3s}.vfc-time-picker__item:hover{font-size:32px}.vfc-time-picker__item--selected{color:#66b3cc;font-size:32px}.vfc-time-picker__item--disabled{opacity:.4;cursor:default;font-size:20px!important}.vfc-close{position:absolute;right:12px;top:16px;width:32px;height:32px;opacity:.3;z-index:100}.vfc-close:hover{opacity:1}.vfc-close:before,.vfc-close:after{position:absolute;left:15px;content:" ";height:26px;width:2px;background-color:#fff;transform:rotate(45deg)}.vfc-close:after{transform:rotate(-45deg)}.vfc-modal-time-mechanic{position:relative;margin:0 auto;width:100%}.vfc-modal-time-line{width:100%;background-color:#66b3cc;text-align:left;color:#fff;font-size:16px;padding-top:15px;padding-bottom:15px;border-radius:.28571429rem .28571429rem 0 0}.vfc-modal-time-line span{margin-left:15px}.vfc-modal-time-line span span.vfc-active{text-decoration:underline}.vfc-modal-append{color:#7d7d7d;font-weight:400;display:flex;justify-content:space-between}.vfc-modal-midle{display:inline-block}.vfc-modal-midle-dig{display:inline-block;text-align:center}.vfc-modal-digits{display:flex;justify-content:space-between;font-size:50px}.vfc-modal-digits select{margin:5px 0;width:100%;text-align:center;text-align-last:center}.vfc-arrow{opacity:.3;transition:.2s}.vfc-arrow:hover{opacity:1}.vfc-arrow-up{width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-bottom:20px solid #333333}.vfc-arrow-down{width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #333333}.vfc-separately-navigation-buttons{margin-bottom:-80px}.vfc-navigation-buttons{width:100%;position:absolute}.vfc-navigation-buttons,.vfc-separately-navigation-buttons{flex:0 1 15%;margin-top:-10px;display:flex;align-items:center}.vfc-navigation-buttons.vfc-left,.vfc-separately-navigation-buttons.vfc-left{justify-content:flex-start}.vfc-navigation-buttons.vfc-right,.vfc-separately-navigation-buttons.vfc-right{justify-content:flex-end}.vfc-navigation-buttons.vfc-space-between,.vfc-separately-navigation-buttons.vfc-space-between{justify-content:space-between}.vfc-navigation-buttons div,.vfc-separately-navigation-buttons div{z-index:200;display:flex;color:#000;font-size:18px;margin:20px 10px}.vfc-navigation-buttons div.vfc-cursor-pointer,.vfc-separately-navigation-buttons div.vfc-cursor-pointer{cursor:pointer}.vfc-navigation-buttons div .vfc-arrow-left,.vfc-separately-navigation-buttons div .vfc-arrow-left{width:12px;height:12px;border-top:2px solid;border-left:2px solid;border-color:#0a0c19;transform:rotate(-45deg)}.vfc-navigation-buttons div .vfc-arrow-left:active,.vfc-navigation-buttons div .vfc-arrow-right:active,.vfc-separately-navigation-buttons div .vfc-arrow-left:active,.vfc-separately-navigation-buttons div .vfc-arrow-right:active,.vfc-navigation-buttons div .vfc-arrow-left.vfc-disabled,.vfc-navigation-buttons div .vfc-arrow-right.vfc-disabled,.vfc-separately-navigation-buttons div .vfc-arrow-left.vfc-disabled,.vfc-separately-navigation-buttons div .vfc-arrow-right.vfc-disabled{border-color:#ddd}.vfc-navigation-buttons div .vfc-arrow-right,.vfc-separately-navigation-buttons div .vfc-arrow-right{width:12px;height:12px;border-top:2px solid;border-right:2px solid;border-color:#0a0c19;transform:rotate(45deg)}.vfc-calendar{position:relative;flex:1;height:auto;display:flex;flex-flow:column nowrap;align-items:stretch}.vfc-calendar .vfc-content{margin-bottom:20px}.vfc-calendars{flex:1 1 75%;display:flex;flex-wrap:wrap}.vfc-calendars-container{display:flex;flex-direction:column;height:100%;position:relative;overflow:hidden}.vfc-calendar-fade-enter-active,.vfc-calendar-fade-leave-active,.vfc-calendar-slide-down-enter-active,.vfc-calendar-slide-down-leave-active,.vfc-calendar-slide-left-enter-active,.vfc-calendar-slide-left-leave-active,.vfc-calendar-slide-right-enter-active,.vfc-calendar-slide-right-leave-active,.vfc-calendar-slide-up-enter-active,.vfc-calendar-slide-up-leave-active{transition:all .25s ease-in-out}.vfc-calendar-fade-leave-active,.vfc-calendar-none-leave-active,.vfc-calendar-slide-down-leave-active,.vfc-calendar-slide-left-leave-active,.vfc-calendar-slide-right-leave-active,.vfc-calendar-slide-up-leave-active{position:absolute}.vfc-calendar-none-enter-active,.vfc-calendar-none-leave-active{transition-duration:0s}.vfc-calendar-slide-left-enter,.vfc-calendar-slide-right-leave-to{opacity:0;-webkit-transform:translateX(25px);transform:translate(25px)}.vfc-calendar-slide-left-leave-to,.vfc-calendar-slide-right-enter{opacity:0;-webkit-transform:translateX(-25px);transform:translate(-25px)}.vfc-calendar-slide-down-leave-to,.vfc-calendar-slide-up-enter{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}.vfc-calendar-slide-down-enter,.vfc-calendar-slide-up-leave-to{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}.vfc-months{flex:1 1 75%;padding:0;display:flex;flex-wrap:wrap;justify-content:space-between}.vfc-months .vfc-item{flex:1;flex-basis:30%;margin:3px;display:flex;justify-content:center;flex-direction:column;text-align:center;outline-style:none;border-radius:5px}.vfc-months .vfc-item:hover{background-color:#7171714d;transition:background-color .2s ease-in-out;cursor:pointer}.vfc-months .vfc-item.vfc-selected{background-color:#4299e1;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.vfc-months-container{display:flex;flex-direction:row;margin-left:-20px}.vfc-months-container.vfc-left{justify-content:flex-start;margin-left:0}.vfc-months-container.vfc-left .vfc-content .vfc-navigation-buttons .vfc-top-date .vfc-popover-caret{left:45px}.vfc-months-container.vfc-center{justify-content:center}.vfc-months-container.vfc-right{justify-content:flex-end}.vfc-months-container.vfc-right .vfc-content .vfc-navigation-buttons .vfc-top-date .vfc-popover-caret{left:calc(100% - 90px)}.vfc-months-container .vfc-content{width:45%;min-width:133px;position:absolute;z-index:1000;background-color:#2d3748;border:1px solid;border-radius:5px;top:55px;color:#fff;padding:5px 0}.vfc-months-container .vfc-content .vfc-navigation-buttons{position:unset;display:flex;justify-content:space-between}.vfc-months-container .vfc-content .vfc-navigation-buttons div{margin:10px}.vfc-months-container .vfc-content .vfc-navigation-buttons div:hover{cursor:pointer}.vfc-months-container .vfc-content .vfc-navigation-buttons div:hover .vfc-arrow-left,.vfc-months-container .vfc-content .vfc-navigation-buttons div:hover .vfc-arrow-right{border-color:#4299e1}.vfc-months-container .vfc-content .vfc-navigation-buttons div .vfc-arrow-left,.vfc-months-container .vfc-content .vfc-navigation-buttons div .vfc-arrow-right{border-color:#fff;width:8px;height:8px}.vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date{font-size:18px;font-weight:700;margin:0;display:flex;flex-direction:row;justify-content:center}.vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date-has-delta:hover{cursor:pointer}.vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date .vfc-popover-caret{content:"";position:absolute;display:block;width:12px;height:12px;border-top:inherit;border-left:inherit;background:inherit;z-index:-1;background-color:#2d3748;transform:translateY(-40%) rotate(45deg);top:0;left:50%}.vfc-months-container .vfc-content .vfc-navigation-buttons .vfc-top-date.vfc-underline{cursor:pointer;text-decoration:underline dotted #66b3cc}.vfc-months-container .vfc-content .vfc-months{flex:1 1 75%;padding:0;display:flex;flex-wrap:wrap;justify-content:space-between}.vfc-months-container .vfc-content .vfc-months div.vfc-item{flex:1;flex-basis:30%;margin:3px;display:flex;justify-content:center;flex-direction:column;text-align:center;outline-style:none;border-radius:5px}.vfc-months-container .vfc-content .vfc-months div.vfc-item:hover{background-color:#7171714d;transition:background-color .2s ease-in-out;cursor:pointer}.vfc-months-container .vfc-content .vfc-months div.vfc-item.vfc-selected{background-color:#4299e1;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.vfc-content{margin:0 20px;z-index:100}.vfc-top-date{margin:25px;font-size:18px;font-weight:400}.vfc-top-date.vfc-left{text-align:left}.vfc-top-date.vfc-right{text-align:right}.vfc-top-date.vfc-center{text-align:center}.vfc-top-date span{cursor:default;text-decoration:unset;margin:0 2px;color:#000}.vfc-top-date span.vfc-cursor-pointer{cursor:pointer}.vfc-top-date span.vfc-underline{cursor:pointer;text-decoration:underline #66b3cc}.vfc-top-date span.vfc-underline.vfc-underline-active{text-decoration-color:#000}.vfc-dayNames,.vfc-week{display:flex}.vfc-dayNames{flex:30px 0 0;margin-bottom:10px}.vfc-dayNames span{width:100%;margin-right:5px;color:#333;text-align:center}.vfc-dayNames span:last-child{margin-right:0}.vfc-week-number{border-right:1px solid #ff8498}.vfc-week .vfc-day{position:relative;width:100%;display:flex;flex-direction:column;margin-top:3px}.vfc-week .vfc-day .vfc-base-start,.vfc-week .vfc-day .vfc-base-end{position:absolute;background:#8fd8ec;width:50%!important;border-radius:0!important;border-right-width:0!important;height:100%}.vfc-week .vfc-day .vfc-base-start{right:0}.vfc-week .vfc-day .vfc-base-end{left:0}.vfc-week .vfc-day span.vfc-span-day{display:inline-block;text-align:center;width:30px;line-height:30px;border-radius:50%;margin:0 auto;vertical-align:middle}.vfc-week .vfc-day span.vfc-span-day.vfc-today{background-color:#ff8498;color:#fff}.vfc-week .vfc-day span.vfc-span-day.vfc-cursor-not-allowed{cursor:not-allowed}.vfc-week .vfc-day span.vfc-span-day.vfc-marked{margin:auto;background-color:#66b3cc;border-radius:50%;opacity:1;z-index:1}.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-borderd,.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-start-marked,.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-end-marked{color:#fff}.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-borderd:before,.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-start-marked:before,.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-end-marked:before{background:transparent}.vfc-week .vfc-day span.vfc-span-day.vfc-marked:before{top:0;left:0;content:"";position:absolute;background-color:#8fd8ec;width:100%;height:100%;z-index:-1}.vfc-week .vfc-day span.vfc-span-day.vfc-marked:after{color:#000}.vfc-week .vfc-day span.vfc-span-day.vfc-marked.vfc-hide{color:#d9d9d9}.vfc-week .vfc-day span.vfc-span-day.vfc-hide{color:#bfbfbf}.vfc-week .vfc-day span.vfc-span-day.vfc-disabled{margin:auto;color:#0003;border-radius:50%;opacity:1;z-index:2}.vfc-week .vfc-day span.vfc-span-day:after{z-index:2;position:absolute;top:0;left:0;bottom:0;right:0;content:attr(data-date);color:#000;display:flex;justify-content:center;align-items:center}.vfc-week .vfc-day span.vfc-span-day.vfc-hover:hover,.vfc-week .vfc-day span.vfc-span-day.vfc-hovered{background-color:#dadada;z-index:100}.vfc-week .vfc-day:last-child{color:#000}.rangeCleaner{padding:5px 0 10px;display:flex;justify-content:center;align-items:center}.rangeCleaner span{color:#fff;border-radius:5px;border:none;padding:5px}.rangeCleaner span.active{background-color:#66b3cc}.rangeCleaner span.active:hover{background-color:#4f8a9e;cursor:pointer}.rangeCleaner span.disabled{background-color:#949494} diff --git a/public/build/assets/GlobalFlag-ChcN8WT1.css b/public/build/assets/GlobalFlag-ChcN8WT1.css deleted file mode 100644 index b7b460252..000000000 --- a/public/build/assets/GlobalFlag-ChcN8WT1.css +++ /dev/null @@ -1 +0,0 @@ -.green{color:#2ecc71}.strong{font-weight:600}.width-50{width:50%} diff --git a/public/build/assets/GlobalMapContainer-DB_sJ7_e.css b/public/build/assets/GlobalMapContainer-DB_sJ7_e.css deleted file mode 100644 index 34b8b19aa..000000000 --- a/public/build/assets/GlobalMapContainer-DB_sJ7_e.css +++ /dev/null @@ -1 +0,0 @@ -.global-map-container[data-v-8375a653]{height:calc(100% - 72px);margin:0;position:relative;z-index:1} diff --git a/public/build/assets/IMG_0554-BicQT55Q.jpg b/public/build/assets/IMG_0554-BicQT55Q.jpg deleted file mode 100644 index 3ccf3e525..000000000 Binary files a/public/build/assets/IMG_0554-BicQT55Q.jpg and /dev/null differ diff --git a/public/build/assets/IMG_0556-0A1kBpHu.js b/public/build/assets/IMG_0556-0A1kBpHu.js deleted file mode 100644 index 09461b23d..000000000 --- a/public/build/assets/IMG_0556-0A1kBpHu.js +++ /dev/null @@ -1 +0,0 @@ -const _="/build/assets/IMG_0556-C-oeC_VO.jpg";export{_}; diff --git a/public/build/assets/IMG_0556-C-oeC_VO.jpg b/public/build/assets/IMG_0556-C-oeC_VO.jpg deleted file mode 100644 index e17b8c5f8..000000000 Binary files a/public/build/assets/IMG_0556-C-oeC_VO.jpg and /dev/null differ diff --git a/public/build/assets/Index-xHBi0eWU.css b/public/build/assets/Index-xHBi0eWU.css deleted file mode 100644 index 4f0523307..000000000 --- a/public/build/assets/Index-xHBi0eWU.css +++ /dev/null @@ -1 +0,0 @@ -.section-social[data-v-42339a2b]{background-color:#094c54}.section-social .social-links[data-v-42339a2b]{display:grid;grid-gap:3rem;grid-template-columns:repeat(auto-fit,minmax(75px,2fr))}.section-social .social-card[data-v-42339a2b]{background-color:transparent}.section-social .social-card[data-v-42339a2b]:hover{transform:scale(1.05)}.discord-link[data-v-42339a2b]{color:#fff;width:max-content}@media screen and (min-width: 1280px){.section-social .social-links[data-v-42339a2b]{width:100%;max-width:1000px;margin:auto;justify-content:center}}.community[data-v-ee714f81]{background:#000 no-repeat fixed top right;background-size:cover;position:relative}.copyright[data-v-ee714f81]{position:absolute;right:5px;bottom:5px;color:gray;font-size:10px}.copyright a[data-v-ee714f81],.copyright a[data-v-ee714f81]:hover{color:gray;text-decoration:none}@media screen and (min-width: 1280px){.community-hero[data-v-ee714f81]{padding-left:0!important;padding-right:0!important}}.hero-body[data-v-e5c6f815]{flex-direction:column}.section-stats[data-v-e5c6f815]{background-color:#111827}.section-stats .stats[data-v-e5c6f815]{width:100%;display:grid;grid-gap:3rem;grid-template-columns:repeat(auto-fit,minmax(250px,2fr))}.section-stats .stats .stat[data-v-e5c6f815]{background-color:transparent}.section-stats .stats .stat .total[data-v-e5c6f815]{font-size:5rem}.section-stats .stats .stat[data-v-e5c6f815]:hover{transform:scale(1.05)}.section-stats .charts[data-v-e5c6f815]{width:100%;background-color:#111827;border-radius:1rem;overflow:hidden}.section-stats .charts .chart[data-v-e5c6f815]{padding:.25rem}@media screen and (min-width: 1280px){.section-stats .stats[data-v-e5c6f815],.section-stats .charts[data-v-e5c6f815]{max-width:1000px;margin:auto;justify-content:center}.section-stats .charts .chart[data-v-e5c6f815]{padding:1rem}}.section-zoom[data-v-90fd2548]{background-color:teal}.section-zoom .hero-body[data-v-90fd2548]{margin:0 auto}.section-zoom a[data-v-90fd2548]{color:#f5f5f5;text-decoration:underline}.section-zoom a[data-v-90fd2548]:hover{color:#094c54}.section-zoom .zoom[data-v-90fd2548]{max-width:1000px;display:flex;flex-direction:column;justify-content:center;align-items:center}.section-zoom .zoom img[data-v-90fd2548]{width:4rem;height:4rem;margin:0 auto 1rem}.section-zoom .clock-wrapper[data-v-90fd2548]{max-width:min-content;margin:2rem auto}.section-zoom .clock[data-v-90fd2548]{position:relative;display:flex;justify-content:center;align-items:center;color:#06f1f6;text-shadow:1px 1px 7px;background-color:#111827;border-radius:.5rem;border:2px solid;padding:.5rem 1rem;box-shadow:inset 0 0 .5em #06f1f6,0 0 .5em #06f1f6}.section-zoom .clock .timeframe[data-v-90fd2548]{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:.5rem 1rem}.section-zoom .clock .timeframe p[data-v-90fd2548]{font-size:2rem}.section-zoom .clock .timeframe p a[data-v-90fd2548]{color:#06f1f6;text-decoration:none}.section-zoom .clock .timeframe p a[data-v-90fd2548]:hover{text-decoration:underline}.section-zoom .clock small[data-v-90fd2548]{color:#f5f5f5}.section-zoom .clock .live[data-v-90fd2548]{white-space:nowrap}@media screen and (min-width: 1024px){.section-zoom .zoom[data-v-90fd2548]{flex-direction:row}.section-zoom .zoom .image-wrapper[data-v-90fd2548]{flex-shrink:0;margin-right:1rem}.section-zoom .clock[data-v-90fd2548]{border-radius:1rem;padding:1rem 2rem}.section-zoom .clock .timeframe[data-v-90fd2548]{padding:1rem 2rem}.section-zoom .clock .timeframe p[data-v-90fd2548]{font-size:4rem}}.section-slack[data-v-00871730]{background-color:#4a154b}.section-slack .hero-body[data-v-00871730]{margin:0 auto}.section-slack a[data-v-00871730]{color:#f5f5f5;text-decoration:underline}.section-slack .slack[data-v-00871730]{max-width:1000px;display:flex;flex-direction:column;justify-content:center;align-items:center}.section-slack .slack .image-wrapper img[data-v-00871730]{width:4rem;height:4rem;margin:0 auto 1rem}.section-slack .slack a[data-v-00871730]:hover{color:#06f1f6}.section-slack .screenshot[data-v-00871730]{position:relative;margin:1rem auto;overflow:hidden;max-width:700px}.section-slack .screenshot img[data-v-00871730]{border-radius:.5rem}.section-slack .screenshot a[data-v-00871730]{display:flex;justify-content:center;align-items:center;text-decoration:none;font-size:.5rem}.section-slack .screenshot a i[data-v-00871730]:hover{color:#f5f5f5;transform:scale(1.05)}@media screen and (min-width: 1024px){.section-slack .slack[data-v-00871730]{flex-direction:row}.section-slack .slack .image-wrapper[data-v-00871730]{flex-shrink:0;margin-right:1rem}.section-slack .slack .image-wrapper img[data-v-00871730]{margin:0 auto}.section-slack .screenshot[data-v-00871730]{margin:2rem auto;overflow:hidden;max-width:700px}.section-slack .screenshot img[data-v-00871730]{border-radius:.5rem}.section-slack .screenshot a[data-v-00871730]{font-size:1rem}}.section-fundraiser[data-v-3c46e96e]{background-color:#111827}.section-fundraiser .hero-body[data-v-3c46e96e]{margin:0 auto}.section-fundraiser a[data-v-3c46e96e]{color:#f5f5f5;text-decoration:underline}.section-fundraiser .fundraiser[data-v-3c46e96e]{max-width:1000px;display:flex;flex-direction:column;justify-content:center;align-items:center}.section-fundraiser .fundraiser img[data-v-3c46e96e]{width:4rem;height:4rem;margin:0 auto 1rem}.section-fundraiser .fundraiser a[data-v-3c46e96e]:hover{color:#4a154b}.section-fundraiser .youtube-video[data-v-3c46e96e]{display:flex;justify-content:center;align-items:center;margin:1rem auto}.section-fundraiser .youtube-video iframe[data-v-3c46e96e]{max-width:100%!important;width:auto!important;height:auto!important;border:none}@media screen and (min-width: 1024px){.section-fundraiser .fundraiser[data-v-3c46e96e]{flex-direction:row}.section-fundraiser .fundraiser .image-wrapper[data-v-3c46e96e]{flex-shrink:0;margin-right:1rem}.section-fundraiser .fundraiser img[data-v-3c46e96e]{margin:0 auto}.section-fundraiser .youtube-video[data-v-3c46e96e]{margin:2rem auto}}@media screen and (min-width: 600px){.section-fundraiser .youtube-video iframe[data-v-3c46e96e]{width:560px!important;height:315px!important}} diff --git a/public/build/assets/Leaderboard-C00NtHs0.css b/public/build/assets/Leaderboard-C00NtHs0.css deleted file mode 100644 index b5b649276..000000000 --- a/public/build/assets/Leaderboard-C00NtHs0.css +++ /dev/null @@ -1 +0,0 @@ -.wrapper[data-v-2d78ff5e]{padding:1rem .5rem}.leaderboard-heading[data-v-2d78ff5e]{display:flex;justify-content:center;align-items:center;gap:1rem;margin-bottom:2rem;cursor:pointer}.leaderboard-heading:hover .title[data-v-2d78ff5e]{text-decoration:underline}.leaderboard-heading:hover i[data-v-2d78ff5e]{transform:translate(-1rem)}.leaderboard-heading .title[data-v-2d78ff5e]{margin-bottom:0}.leaderboard-heading i[data-v-2d78ff5e]{font-size:20px;transition:all .3s}@media screen and (min-width: 768px){.wrapper[data-v-2d78ff5e]{padding:3rem 1.5rem}} diff --git a/public/build/assets/LeaderboardList-D5tOaIXl.css b/public/build/assets/LeaderboardList-D5tOaIXl.css deleted file mode 100644 index 87512ac84..000000000 --- a/public/build/assets/LeaderboardList-D5tOaIXl.css +++ /dev/null @@ -1 +0,0 @@ -.leaderboard-filters-container[data-v-4aab6639]{display:flex;justify-content:space-evenly;max-width:800px;margin:auto;padding-bottom:1em}.leaderboard-option[data-v-4aab6639]{border:1px solid black;padding:10px;border-radius:6px;background-color:#fff;color:#000;cursor:pointer}.leaderboard-option.is-selected[data-v-4aab6639]{background-color:#48c774}@media screen and (min-width: 687px){.mobile-filters-container[data-v-4aab6639]{display:none}}@media screen and (max-width: 687px){.leaderboard-filters-container[data-v-4aab6639]{display:none}}.empty-leaderboard-title[data-v-5ae5a51c]{color:#fff;font-weight:600;font-size:2rem;text-align:center;margin-top:1em}.global-leaders[data-v-5ae5a51c]{max-width:800px;margin:0 auto;padding:0 1em}.global-leaders .social-container[data-v-5ae5a51c]{display:none;transition:opacity .3s;flex-direction:row;gap:.3rem;justify-content:flex-end;flex-wrap:wrap;min-width:140px;color:#3273dc}.global-leaders .social-container a[data-v-5ae5a51c]{width:20px}.global-leaders .social-container a[data-v-5ae5a51c]:hover{transform:scale(1.1);color:#3273dc}.global-leaders .leader[data-v-5ae5a51c]{position:relative;background-color:#fff;border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:5px 4px;margin-bottom:5px;color:#011638;display:flex;align-items:flex-start;font-size:14px;transition:all .1s}.global-leaders .leader[data-v-5ae5a51c]:hover{transform:scale(1.05)}.global-leaders .leader .medal[data-v-5ae5a51c]{position:absolute;top:-12px;left:-12px;width:32px;z-index:10}.global-leaders .leader .rank[data-v-5ae5a51c]{width:48px;display:flex;flex-direction:column;text-align:center;align-items:center}.global-leaders .leader .rank .flag[data-v-5ae5a51c]{display:flex;justify-content:center;align-items:center;width:48px}.global-leaders .leader .rank .flag img[data-v-5ae5a51c]{border-radius:50%;width:32px;height:32px;object-fit:fill}.global-leaders .leader .details[data-v-5ae5a51c]{flex:1}.global-leaders .leader .details .name[data-v-5ae5a51c]{font-weight:500}.global-leaders .leader .details .team[data-v-5ae5a51c]{font-size:12px}.global-leaders .leader .details .social-container[data-v-5ae5a51c]{display:flex;justify-content:flex-start}.global-leaders .leader .xp[data-v-5ae5a51c]{display:flex;flex-direction:column;padding-right:4px}.global-leaders .leader .xp .value[data-v-5ae5a51c]{font-weight:500}.global-leaders .leader .xp .text[data-v-5ae5a51c]{text-align:center}@media screen and (min-width: 768px){.global-leaders .social-container[data-v-5ae5a51c]{display:flex;gap:.5rem;margin:auto 16px}.global-leaders .social-container a[data-v-5ae5a51c]{width:24px}.global-leaders .leader[data-v-5ae5a51c]{border-radius:8px;padding:10px 8px;margin-bottom:10px;font-size:16px;align-items:center}.global-leaders .leader .rank[data-v-5ae5a51c]{flex-direction:row;gap:0;width:96px}.global-leaders .leader .rank span[data-v-5ae5a51c],.global-leaders .leader .rank .flag[data-v-5ae5a51c]{width:48px}.global-leaders .leader .details .team[data-v-5ae5a51c]{font-size:14px}.global-leaders .leader .details .social-container[data-v-5ae5a51c]{display:none}.global-leaders .leader .xp[data-v-5ae5a51c]{padding-right:0;width:100px;flex-direction:row;justify-content:space-evenly}} diff --git a/public/build/assets/LitterTable-BXAohLoO.css b/public/build/assets/LitterTable-BXAohLoO.css deleted file mode 100644 index d381d07da..000000000 --- a/public/build/assets/LitterTable-BXAohLoO.css +++ /dev/null @@ -1 +0,0 @@ -.filters[data-v-03a1a97e]{display:flex;gap:20px;margin-bottom:1em;align-items:center}.filter-item[data-v-03a1a97e]{display:flex;flex-direction:column}.uploads-container[data-v-03a1a97e]{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:1em;background:#fff;border-radius:12px;max-height:100vh;overflow:hidden;margin:0 auto}.uploads-title[data-v-03a1a97e]{text-align:center;color:#333;font-size:24px;margin-top:30px;margin-bottom:30px}.table-wrapper[data-v-03a1a97e]{overflow-y:auto;width:100%;max-height:75vh}.uploads-table[data-v-03a1a97e]{width:100%;border-collapse:collapse}.uploads-table th[data-v-03a1a97e],.uploads-table td[data-v-03a1a97e]{border:1px solid #ddd;padding:8px}.uploads-table tr[data-v-03a1a97e]:nth-child(2n){background-color:#f2f2f2}.uploads-table tr[data-v-03a1a97e]:hover{background-color:#ddd}.uploads-table th[data-v-03a1a97e]{padding-top:12px;padding-bottom:12px;text-align:left;background-color:#007bff;color:#fff}.pagination[data-v-03a1a97e]{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:20px}.pagination button[data-v-03a1a97e]:disabled{opacity:.5;cursor:not-allowed}.pagination button.active[data-v-03a1a97e]{background-color:#0056b3;font-weight:700}.pagination button[data-v-03a1a97e]{padding:5px 10px;border:1px solid #007bff;background-color:#007bff;color:#fff;border-radius:5px;cursor:pointer;transition:background-color .3s,transform .2s}.pagination button[data-v-03a1a97e]:hover:not(:disabled){background-color:#0056b3;transform:scale(1.05)}.pagination span[data-v-03a1a97e]{color:#333}.centre-table-buttons[data-v-03a1a97e]{text-align:center;vertical-align:middle}@media (max-width: 768px){.uploads-container[data-v-03a1a97e]{max-width:95%;margin:20px auto;padding:15px}.uploads-title[data-v-03a1a97e]{font-size:20px}} diff --git a/public/build/assets/Merchants-Cz_XwIx8.css b/public/build/assets/Merchants-Cz_XwIx8.css deleted file mode 100644 index 9d1ef844e..000000000 --- a/public/build/assets/Merchants-Cz_XwIx8.css +++ /dev/null @@ -1 +0,0 @@ -.container[data-v-7797c8ba]{max-width:500px;margin:0 auto}.form-group[data-v-7797c8ba]{margin-bottom:20px}label[data-v-7797c8ba]{display:block;margin-bottom:5px;font-weight:700}input[type=text][data-v-7797c8ba],input[type=email][data-v-7797c8ba],input[type=tel][data-v-7797c8ba],input[type=url][data-v-7797c8ba],textarea[data-v-7797c8ba]{width:100%;padding:10px;border-radius:5px;border:1px solid #ccc;font-size:16px;box-sizing:border-box}button[type=submit][data-v-7797c8ba]{display:block;margin-top:20px;padding:10px;border-radius:5px;border:none;background-color:#4caf50;color:#fff;font-size:16px;cursor:pointer}.fade-enter-active[data-v-7797c8ba],.fade-leave-active[data-v-7797c8ba]{transition:opacity .5s}.fade-enter[data-v-7797c8ba],.fade-leave-to[data-v-7797c8ba]{opacity:0} diff --git a/public/build/assets/Merchants-k4_xx9Zm.css b/public/build/assets/Merchants-k4_xx9Zm.css deleted file mode 100644 index 894177607..000000000 --- a/public/build/assets/Merchants-k4_xx9Zm.css +++ /dev/null @@ -1 +0,0 @@ -.merchant-label[data-v-3385c883]{margin-bottom:5px}.merchant-input[data-v-3385c883]{margin-bottom:10px}#dropzone[data-v-3385c883]{min-height:150px;border:2px solid rgba(0,0,0,.3);background:#fff;padding:20px;max-width:22em}#dropzone .dz-preview.dz-error .dz-error-message[data-v-3385c883]{opacity:1;pointer-events:auto} diff --git a/public/build/assets/Privacy-CPrCLl9N.css b/public/build/assets/Privacy-CPrCLl9N.css deleted file mode 100644 index 7dfbe0795..000000000 --- a/public/build/assets/Privacy-CPrCLl9N.css +++ /dev/null @@ -1 +0,0 @@ -input[type=checkbox]{margin-right:.5rem} diff --git a/public/build/assets/Profile-Be5VDVRm.css b/public/build/assets/Profile-Be5VDVRm.css deleted file mode 100644 index c4803c76f..000000000 --- a/public/build/assets/Profile-Be5VDVRm.css +++ /dev/null @@ -1 +0,0 @@ -.profile-percent[data-v-97e77d3c]{font-size:3em;font-weight:600;margin-right:.5em}.profile-stat-card[data-v-97e77d3c]{flex:1;display:flex;text-align:center}.profile-stat-card img[data-v-97e77d3c]{height:3em;margin:auto 1em auto 0}.profile-stat[data-v-97e77d3c]{font-size:1.5em;font-weight:600}.profile-text[data-v-97e77d3c]{color:#1dd3b0!important}.is-purp[data-v-68e020ba]{color:#8e7fd6}.is-white[data-v-68e020ba]{color:#fff!important}.is-secondary[data-v-68e020ba]{color:#1dd3b0}#hexmap{height:100%;margin:0;position:relative}.btn-map-fullscreen{position:absolute;top:1em;right:1em;z-index:1234}.profile-map-container{height:100%;position:relative}.profile-dl-title[data-v-324f02ec]{color:#1dd3b0;margin-bottom:1em;font-weight:600}.profile-dl-subtitle[data-v-324f02ec]{color:#1dd3b0;margin-bottom:1em}.inputs-wrapper[data-v-324f02ec]{display:flex;gap:1rem;align-items:center}.profile-container{min-height:calc(100vh - 82px);background-color:#272e4aed;display:grid;grid-template-columns:1fr 2fr 1fr;grid-template-rows:.5fr 1fr 1fr;column-gap:1em;row-gap:1em;padding:3em}.profile-card{background-color:#292f45;border-radius:6px;box-shadow:0 .5em 1em -.125em #0a0a0a1a,0 0 0 1px #0a0a0a05;color:#4a4a4a;display:block;padding:1.25rem}.profile-card p{color:#fff} diff --git a/public/build/assets/RecentTags-Bs1oOZGS.css b/public/build/assets/RecentTags-Bs1oOZGS.css deleted file mode 100644 index 08fc1fcf3..000000000 --- a/public/build/assets/RecentTags-Bs1oOZGS.css +++ /dev/null @@ -1 +0,0 @@ -.tags-container[data-v-8cffa47b]{max-height:650px;overflow-y:auto}.recent-tags[data-v-8cffa47b]{display:flex;max-width:50em;margin:auto;flex-wrap:wrap;overflow:auto;justify-content:center}.recent-tags-title[data-v-8cffa47b]{max-width:100px}.clear-tags-button[data-v-8cffa47b]{position:absolute;top:20px;right:20px}.litter-tag[data-v-8cffa47b]{position:relative;cursor:pointer;padding:5px;border-radius:5px;background-color:#3298dc;margin:5px}.litter-tag .close[data-v-8cffa47b]{display:none;position:absolute;top:-5px;right:-5px;width:20px;height:20px;border-radius:50%;color:#fff;font-size:12px;background-color:#000000b3}.litter-tag .close[data-v-8cffa47b]:hover{background-color:#000}.litter-tag:hover .close[data-v-8cffa47b]{display:flex;justify-content:center;align-items:center}@media screen and (min-width: 1280px){.recent-tags-title[data-v-8cffa47b]{max-width:none}}.list-enter-active[data-v-8cffa47b],.list-leave-active[data-v-8cffa47b],.categories-enter-active[data-v-8cffa47b],.categories-leave-active[data-v-8cffa47b]{transition:all .5s}.list-enter[data-v-8cffa47b],.list-leave-to[data-v-8cffa47b]{opacity:0;transform:translate(30px)}.categories-enter[data-v-8cffa47b],.categories-leave-to[data-v-8cffa47b]{opacity:0;transform:translateY(50px)}.categories-move[data-v-8cffa47b]{transition:transform .5s} diff --git a/public/build/assets/Reset-PQ6Ild1M.css b/public/build/assets/Reset-PQ6Ild1M.css deleted file mode 100644 index 771412b56..000000000 --- a/public/build/assets/Reset-PQ6Ild1M.css +++ /dev/null @@ -1 +0,0 @@ -.centered[data-v-9f4d8a55]{width:100%;margin:12rem auto}.with-x-spacing[data-v-9f4d8a55]{padding-right:24px;padding-left:24px}.cursor-pointer[data-v-9f4d8a55]{cursor:pointer}.cursor-pointer[data-v-9f4d8a55]:hover{color:#000} diff --git a/public/build/assets/SignUp-6Tszk4Ry.css b/public/build/assets/SignUp-6Tszk4Ry.css deleted file mode 100644 index 8ae3f170f..000000000 --- a/public/build/assets/SignUp-6Tszk4Ry.css +++ /dev/null @@ -1 +0,0 @@ -.box[data-v-895a84a0]{min-height:100%} diff --git a/public/build/assets/SortLocations-CKk3rIhl.css b/public/build/assets/SortLocations-CKk3rIhl.css deleted file mode 100644 index 9113445c3..000000000 --- a/public/build/assets/SortLocations-CKk3rIhl.css +++ /dev/null @@ -1 +0,0 @@ -.locations-control[data-v-d74a7dec]{text-align:right}@media screen and (max-width: 768px){.locations-control[data-v-d74a7dec]{text-align:center}}.green[data-v-f276ecc3]{color:green!important}.panel-block[data-v-f276ecc3],.panel-block-without-flex[data-v-f276ecc3]{color:#000;background-color:#fff}.location-title[data-v-f276ecc3]:hover{color:green!important;border-bottom:1px solid green}.total-photos-percentage[data-v-f276ecc3]{color:green;font-weight:700}.img-flag[data-v-f276ecc3]{padding-right:1.5em;border-radius:1px;flex:.1}.inner-locations-container[data-v-ca009954]{flex:1;background-color:#48c774;background-image:linear-gradient(to right bottom,#7ed56fcc,#28b485cc)}.l-tab.is-active[data-v-ca009954]{border-bottom:2px solid white!important}.location-tab[data-v-ca009954]{background-color:#fff;border-radius:6px;padding:.5em 1.5em;cursor:pointer}.location-tab.location-tab-is-active[data-v-ca009954]{background-color:#3273dc;color:#fff}.h65pc[data-v-ca009954]{height:65%}.world-cup-title[data-v-ca009954]{color:#34495e} diff --git a/public/build/assets/Subscribe-qGW6QDXl.css b/public/build/assets/Subscribe-qGW6QDXl.css deleted file mode 100644 index 3b4878327..000000000 --- a/public/build/assets/Subscribe-qGW6QDXl.css +++ /dev/null @@ -1 +0,0 @@ -.captcha{display:flex;align-items:center;flex-direction:column}.call-container{padding-top:5em;margin-bottom:2em;margin-left:auto;margin-right:auto;max-width:50em}.field{padding-top:.5em}.input-group{padding-bottom:1em}.signup-container{margin:auto;width:35em}@media only screen and (max-width: 600px){.call-container{padding:2em 1em;margin-bottom:0!important}.signup-container{width:20em}} diff --git a/public/build/assets/Supercluster-pk8N7rfa.css b/public/build/assets/Supercluster-pk8N7rfa.css deleted file mode 100644 index 2c8e6c061..000000000 --- a/public/build/assets/Supercluster-pk8N7rfa.css +++ /dev/null @@ -1 +0,0 @@ -.event[data-v-e06e593a]{border-radius:8px;margin-bottom:10px;padding-right:16px;display:flex;cursor:pointer}.event-green[data-v-e06e593a]{background-color:#88d267}.event-blue[data-v-e06e593a]{background-color:#4bb0e0}.event-yellow[data-v-e06e593a]{background-color:#f1c40f}.event-colourful[data-v-e06e593a]{background:linear-gradient(-45deg,#ee7752,#e73c7e,#23a6d5,#23d5ab);background-size:400% 400%;animation:gradient-e06e593a 15s ease infinite}.event-littercoin[data-v-e06e593a]{background:linear-gradient(-45deg,#2ecc71,#f1c40f,#f68739);background-size:400% 400%;animation:gradient-e06e593a 5s ease infinite}@keyframes gradient-e06e593a{0%{background-position:0 50%}50%{background-position:100% 50%}to{background-position:0 50%}}.event-image[data-v-e06e593a]{padding:16px;margin:auto 0}.event-content[data-v-e06e593a]{padding-top:10px;padding-bottom:10px}@media (max-width: 1024px){.event[data-v-e06e593a]{padding-right:12px}.event-image[data-v-e06e593a]{padding:12px;margin:auto 0}.event-content[data-v-e06e593a]{padding-top:8px;padding-bottom:8px}}.event[data-v-a5896d9f]{position:relative;border-radius:8px;margin-bottom:10px;padding:8px;background-color:#88d267;cursor:pointer}.event .event-source[data-v-a5896d9f]{position:absolute;top:8px;right:8px}.event .event-source .large-icon[data-v-a5896d9f]{font-size:16px}.event .event-bold[data-v-a5896d9f]{font-weight:700}.event .event-team[data-v-a5896d9f]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.event .top-heading[data-v-a5896d9f]{display:flex;align-items:center;gap:8px}.event .top-heading .event-location[data-v-a5896d9f]{font-size:8px}.event .top-heading img[data-v-a5896d9f]{object-fit:fill;border-radius:50%;height:16px;width:16px}.city-name[data-v-a5896d9f]{display:none}@media (min-width: 768px){.city-name[data-v-a5896d9f]{display:inline}.event .top-heading .event-location[data-v-a5896d9f]{font-size:10px}}@media (min-width: 1024px){.event[data-v-a5896d9f]{padding:10px}.event .event-source[data-v-a5896d9f]{top:10px;right:10px}.event .event-source .large-icon[data-v-a5896d9f]{font-size:24px;margin-right:4px}.event .top-heading[data-v-a5896d9f]{gap:10px}.event .top-heading .event-location[data-v-a5896d9f]{font-size:12px}.event .top-heading img[data-v-a5896d9f]{height:24px;width:24px}}.flex[data-v-6648b6f2]{display:flex}.items-center[data-v-6648b6f2]{align-items:center}.h-full[data-v-6648b6f2]{height:100%}.ltr-icon[data-v-6648b6f2]{max-width:32px}.ltr-strong[data-v-6648b6f2]{font-weight:600}.-mt-2[data-v-538454b0],.-mt-2[data-v-ee01ceee],.-mt-2[data-v-03289d8a],.-mt-2[data-v-a390effa]{margin-top:-2px}.flex[data-v-fd609b30]{display:flex}.items-center[data-v-fd609b30]{align-items:center}.h-full[data-v-fd609b30]{height:100%}.-mt-2[data-v-fd609b30]{margin-top:-2px}.list-enter-active{transition:all 1s ease}.list-leave-active{transition:all .3s ease}.list-move{transition:transform 1s ease-in-out}.list-enter,.list-leave-to{transform:translate(100px);opacity:0}.list-item{display:grid}.sidebar-menu{position:absolute;top:70px;right:10px;width:20rem;max-height:80vh;overflow-y:scroll;z-index:999;font-size:.8rem}.sidebar-menu .event{width:20rem}.grid-img{padding:16px}.grid-main{padding-top:10px;padding-bottom:10px}@media (max-width: 1024px){.sidebar-menu{width:16rem;font-size:.7rem}.sidebar-menu .event{width:16rem}.grid-img{padding:12px}.grid-main{padding-top:8px;padding-bottom:8px}}@media (max-width: 768px){.sidebar-menu,.sidebar-menu .event{width:12rem}}@media (max-width: 640px){.sidebar-menu{width:10rem;max-height:74vh;font-size:.6rem}.sidebar-menu .event{width:10rem}}.sidebar-title{padding:20px;text-align:center;font-size:24px;font-weight:700}.outer-container[data-v-539139af]{position:absolute;width:30em;top:1em;left:4em;border-radius:10px;z-index:9999}.tags-container[data-v-539139af]{background-color:#fff;max-height:20em;overflow-y:auto}.tag-selection[data-v-539139af]{padding:5px 10px;cursor:pointer;display:flex;align-items:center}.tag-selection[data-v-539139af]:hover{background-color:#e7e7e7}@media screen and (max-width: 687px){#search-custom-tags[data-v-539139af]{width:max-content!important}.tags-container[data-v-539139af]{width:12.5em!important}}.leaflet-control-select .leaflet-control-button{cursor:pointer;font-size:20px}.leaflet-control-select .leaflet-control-select-menu{width:auto}.leaflet-control-select .leaflet-control-select-menu:nth-of-type(1){position:absolute;top:-3px;left:-2px}.leaflet-control-select .leaflet-control-select-menu:nth-of-type(n+2){margin-top:-7px;position:absolute;left:100%;margin-left:5px}.leaflet-control-select .leaflet-control-select-menu{background-color:#fff;color:#000}.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line{padding:7px 20px 7px 10px;margin:0;cursor:pointer;white-space:nowrap;display:-webkit-box;width:auto}.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line.group.group-opened{background-color:gray;color:#fff}.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line .leaflet-control-select-menu-line-content{width:100%}.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line .leaflet-control-select-menu-line-content .icon{position:absolute;right:6px;margin-top:1px;width:10px;text-align:center}.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line .leaflet-control-select-menu-line-content .icon,.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line .leaflet-control-select-menu-line-content .text,.leaflet-control-select .leaflet-control-select-menu .leaflet-control-select-menu-line span{display:inline}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(/build/assets/layers-BWBAp2CZ.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(/build/assets/layers-2x-Bpkbi35X.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(/build/assets/marker-icon-hN30_KVU.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}#openlittermap{height:100%;margin:0;position:relative}.leaflet-marker-icon{border-radius:20px}.mi{height:100%;margin:auto;display:flex;justify-content:center;border-radius:20px}.leaflet-control{pointer-events:visiblePainted!important}.leaflet-cleanup-container{padding:1em 2em}.leaflet-cleanup-container p{margin:10px 0!important}.updated-by-admin{margin-top:5px!important;margin-bottom:0!important;margin-right:2em;font-size:13px!important;font-style:italic!important} diff --git a/public/build/assets/Tag-BiBKbM5u.css b/public/build/assets/Tag-BiBKbM5u.css deleted file mode 100644 index 262155771..000000000 --- a/public/build/assets/Tag-BiBKbM5u.css +++ /dev/null @@ -1 +0,0 @@ -.list-group-item[data-v-9b9cefd4]{margin:5px 0}.img[data-v-9b9cefd4]{max-height:30em;border-radius:5px}.tag-container[data-v-9b9cefd4]{padding:0 3em}.image-wrapper[data-v-9b9cefd4]{text-align:center}.image-wrapper .image-content[data-v-9b9cefd4]{position:relative;display:inline-block}.image-wrapper .image-content .delete-img[data-v-9b9cefd4]{position:absolute;top:-19px;right:-17px;font-size:40px}.image-metadata-box[data-v-9b9cefd4]{display:flex;flex-direction:row;justify-content:space-between}@media screen and (max-width: 768px){.img[data-v-9b9cefd4]{max-height:15em}.tag-container[data-v-9b9cefd4]{padding:0 1em}}@media screen and (max-width: 1536px){.image-metadata-box[data-v-9b9cefd4]{flex-direction:column}.image-metadata-box .bulk-tag-btn[data-v-9b9cefd4]{margin-top:1rem}} diff --git a/public/build/assets/TagsViewer-TCwMeN5z.css b/public/build/assets/TagsViewer-TCwMeN5z.css deleted file mode 100644 index ef03c3e65..000000000 --- a/public/build/assets/TagsViewer-TCwMeN5z.css +++ /dev/null @@ -1 +0,0 @@ -.map-container{height:calc(100% - 72px);margin:0;position:relative;z-index:1}#map{height:100%;margin:0;position:relative} diff --git a/public/build/assets/Teams-trJyc3eO.css b/public/build/assets/Teams-trJyc3eO.css deleted file mode 100644 index c9d1399ad..000000000 --- a/public/build/assets/Teams-trJyc3eO.css +++ /dev/null @@ -1 +0,0 @@ -#map[data-v-ae8e3771]{height:100%;margin:0;position:relative}.leaflet-marker-icon[data-v-ae8e3771]{border-radius:20px}.mi[data-v-ae8e3771]{height:100%;margin:auto;display:flex;justify-content:center;border-radius:20px}.leaflet-control[data-v-ae8e3771]{pointer-events:visiblePainted!important}.btn-map-fullscreen[data-v-fb1186a6]{position:absolute;top:80px;left:12px;z-index:1234}.team-map-container[data-v-fb1186a6]{height:750px;margin:0;position:relative;padding-top:1em}@media (max-width: 991.98px){.team-map-container[data-v-fb1186a6]{height:500px}}@media (max-width: 575.98px){.team-map-container[data-v-fb1186a6]{margin-left:-3em;margin-right:-3em}}.dash-time[data-v-96580220]{width:25%}.mobile-teams-select[data-v-96580220]{display:flex;justify-content:center}.tdc[data-v-96580220]{padding-left:2em;padding-right:2em}.teams-card[data-v-96580220]{background:#fff;text-align:center;margin:1em;padding:5em}.teams-dashboard-subtitle[data-v-96580220]{margin-bottom:1em}@media screen and (max-width: 768px){.dash-time[data-v-96580220]{width:100%;margin-bottom:1em}.mobile-teams-select[data-v-96580220]{display:block;justify-content:center}.teams-card[data-v-96580220]{padding:3em}.teams-dashboard-subtitle[data-v-96580220]{margin-bottom:2em}}.ctc[data-v-8767c0cc]{margin-top:1em;margin-left:5em}@media screen and (max-width: 768px){.ctc[data-v-8767c0cc]{margin-top:0;margin-left:0}}.jtc[data-v-c7229e4a]{margin-top:1em;margin-left:5em}.team-error[data-v-c7229e4a]{color:red;font-weight:600;margin-bottom:1em}@media screen and (max-width: 768px){.jtc[data-v-c7229e4a]{margin-top:0;margin-left:0}}.medal-container[data-v-8042d205]{display:flex;justify-content:center;align-items:center;position:relative}.medal[data-v-8042d205]{height:1em;position:absolute;left:2em}.my-teams-container[data-v-8042d205]{padding:0 1em}.team-active[data-v-8042d205]{background-color:#2ecc71;padding:.5em 1em;border-radius:10px}.team-inactive[data-v-8042d205]{background-color:#e67e22;padding:.5em 1em;border-radius:10px}.team-action[data-v-8042d205]{border-radius:5px}.is-primary-row[data-v-8042d205]{background-color:#00c4a730}.disable-teams-tooltip[data-v-8042d205]{width:250px;white-space:initial}.active-team-indicator[data-v-8042d205]{display:flex;flex-direction:row;justify-content:space-between}@media (max-width: 640px){.active-team-indicator[data-v-8042d205]{flex-direction:column}.active-team-indicator .button[data-v-8042d205]{max-width:min-content;margin-bottom:2em}.my-teams-container[data-v-8042d205]{padding:0}}.tsc[data-v-1189eacc]{margin-top:1em;margin-left:5em}@media screen and (max-width: 768px){.tsc[data-v-1189eacc]{margin-top:0;margin-left:0}}.medal-container[data-v-f92a40f4]{display:flex;justify-content:center;align-items:center;position:relative}.medal[data-v-f92a40f4]{height:1em;position:absolute;left:2em}.fa-users[data-v-e7bd35ae]{font-size:1.75rem!important}.team-flex[data-v-e7bd35ae]{display:flex;margin-bottom:1em;cursor:pointer}.teams-left-col[data-v-e7bd35ae]{background-color:#232d3f;min-height:calc(100vh - 70px);padding-left:2em;color:#d3d8e0}.teams-icon[data-v-e7bd35ae]{margin:auto 1em auto 0;font-size:2em}.teams-title[data-v-e7bd35ae]{font-size:1.75rem;font-family:sans-serif;margin-top:1em;margin-bottom:1em}@media (max-width: 575.98px){.columns[data-v-e7bd35ae]{margin-right:0}.teams-left-col[data-v-e7bd35ae]{background-color:#232d3f;height:auto;min-height:auto;padding-left:2em;color:#d3d8e0}.mobile-teams-padding[data-v-e7bd35ae]{padding-left:1.5em;padding-bottom:5em}} diff --git a/public/build/assets/Upload-C-sNntu_.css b/public/build/assets/Upload-C-sNntu_.css deleted file mode 100644 index 2ff92b57b..000000000 --- a/public/build/assets/Upload-C-sNntu_.css +++ /dev/null @@ -1 +0,0 @@ -.drop-title[data-v-fcf00e23]{text-align:center}.upload-section[data-v-fcf00e23]{padding:5rem}.upload-section .fa-arrow-right[data-v-fcf00e23]{margin-left:10px}#customdropzone[data-v-fcf00e23]{border:2px #80d8f2 dashed;border-radius:10px;margin-bottom:1rem}@media (min-width: 992px){#customdropzone[data-v-fcf00e23]{margin-left:4rem;margin-right:4rem}}@media (max-width: 575.98px){.drop-title[data-v-fcf00e23]{font-size:2.5rem}.upload-section[data-v-fcf00e23]{padding:2rem}}.upload-icon[data-v-fcf00e23]{font-size:60px}.upload-icon[data-v-fcf00e23]:hover{transform:translateY(-5px);transition-duration:.3s}.wrapper[data-v-fcf00e23]{margin:0 4rem 2rem}.progress-bar[data-v-fcf00e23]{width:100%;background-color:#fff;border-radius:2px}.progress-bar-fill[data-v-fcf00e23]{display:block;height:4px;border-radius:2px;transition:width .5s ease-in-out} diff --git a/public/build/assets/VerifyPhotos-CIXNLNYw.css b/public/build/assets/VerifyPhotos-CIXNLNYw.css deleted file mode 100644 index 6e63e0c0b..000000000 --- a/public/build/assets/VerifyPhotos-CIXNLNYw.css +++ /dev/null @@ -1 +0,0 @@ -.verify-image[data-v-4a9be0c7]{max-height:230px}.strong[data-v-4a9be0c7]{font-weight:600}.admin-filters[data-v-4a9be0c7]{display:flex;flex-direction:row;justify-content:center;align-items:center}.recent-tags[data-v-4a9be0c7]{border-radius:8px} diff --git a/public/build/assets/Welcome-BhecgTSq.css b/public/build/assets/Welcome-BhecgTSq.css deleted file mode 100644 index 87602da4f..000000000 --- a/public/build/assets/Welcome-BhecgTSq.css +++ /dev/null @@ -1 +0,0 @@ -.foot[data-v-7bc6f3a6]{padding:5em;background-image:radial-gradient(circle at 1% 1%,#328bf2,#1644ad);height:42em;position:relative}.footer-bottom[data-v-7bc6f3a6]{position:absolute;bottom:0;left:25%;border-top:1px solid #3c6fcd;padding:1em 0}.foot-container-left[data-v-7bc6f3a6]{padding-right:10em}.footer-icon[data-v-7bc6f3a6]{max-height:2em;margin-right:1em;cursor:pointer}.footer-success[data-v-7bc6f3a6]{font-size:1.5em;color:#fff}.footer-text[data-v-7bc6f3a6]{color:#94afe3}.footer-link[data-v-7bc6f3a6]{color:#94afe3;cursor:pointer}.footer-link[data-v-7bc6f3a6]:hover{color:#fff}.f-input[data-v-7bc6f3a6]{height:3em;border-radius:1em;margin-bottom:1.5em;width:50%;border:none}.inner-footer-container[data-v-7bc6f3a6]{padding-left:10em;padding-right:10em}.olm-title[data-v-7bc6f3a6]{font-size:2em;font-weight:700;color:#fff;margin-bottom:1em}.olm-subtitle[data-v-7bc6f3a6]{font-size:1.5em;font-weight:700;color:#fff;margin-bottom:1em}.top-footer-title[data-v-7bc6f3a6]{color:#fff;font-size:2.5em;margin-bottom:1.25em}@media (max-width: 768px){.foot[data-v-7bc6f3a6]{padding:2em;background-image:radial-gradient(circle at 1% 1%,#328bf2,#1644ad);height:220vh;position:relative}.f-input[data-v-7bc6f3a6]{width:80%}.footer-bottom[data-v-7bc6f3a6]{left:10%;right:10%}.foot-container-left[data-v-7bc6f3a6]{padding-right:0}.inner-footer-container[data-v-7bc6f3a6]{padding-left:0;padding-right:0}}.partners-list[data-v-65eba873]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:32px 32px}.partner[data-v-65eba873]{max-width:200px;margin:auto}.partner[data-v-65eba873],.partner img[data-v-65eba873]{width:100%}@media (max-width: 1024px){.partners-list[data-v-65eba873]{grid-gap:16px 16px;grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 576px){.partners-list[data-v-65eba873]{grid-template-columns:repeat(1,minmax(0,1fr))}}.about-icon[data-v-e98c7fd5]{height:10em;text-align:center}.c-1[data-v-e98c7fd5]{margin-bottom:3em}.home-container[data-v-e98c7fd5]{padding-top:5em}.home-img-padding[data-v-e98c7fd5]{padding-right:2em}.main-title[data-v-e98c7fd5]{font-size:4rem;font-weight:800;color:#363636;line-height:1.125;margin-bottom:1em}.icon-center[data-v-e98c7fd5]{margin:auto}.welcome-mb[data-v-e98c7fd5]{margin-bottom:5em}.main-subtitle[data-v-e98c7fd5]{font-size:2rem;color:#4a4a4a;font-weight:700;line-height:1.5;margin-bottom:.5em}.welcome-subtitle[data-v-e98c7fd5]{color:#4a4a4a;font-size:2rem;font-weight:400;line-height:1.5}.partners-container[data-v-e98c7fd5]{padding-left:72px;padding-right:72px;margin-bottom:36px}.partners-action[data-v-e98c7fd5]{margin-top:36px}@media (max-width: 1024px){.home-container[data-v-e98c7fd5]{padding-left:2em;padding-right:2em}}@media (max-width: 768px){.home-container[data-v-e98c7fd5]{padding-top:3em!important}.home-img-padding[data-v-e98c7fd5]{padding:0}.main-title[data-v-e98c7fd5]{font-size:3rem}.icon-center[data-v-e98c7fd5]{text-align:center;margin-bottom:2em}.welcome-mb[data-v-e98c7fd5]{margin-bottom:1em}.why-container[data-v-e98c7fd5]{margin-bottom:5em}.top-image[data-v-e98c7fd5]{height:400px}.partners-container[data-v-e98c7fd5]{padding-left:0;padding-right:0}}@media (max-width: 576px){.variable-height[data-v-e98c7fd5]{min-height:100px}.top-image[data-v-e98c7fd5]{height:260px}}@media (max-width: 430px){.variable-height[data-v-e98c7fd5]{min-height:175px}}.slide-fade-left-enter-active[data-v-e98c7fd5]{transition:all .5s ease}.slide-fade-left-leave-active[data-v-e98c7fd5]{transition:all .3s ease-out}.slide-fade-left-enter[data-v-e98c7fd5],.slide-fade-left-leave-to[data-v-e98c7fd5]{transform:translate(-100px);opacity:0}.slide-fade-right-enter-active[data-v-e98c7fd5]{transition:all .5s ease}.slide-fade-right-leave-active[data-v-e98c7fd5]{transition:all .3s ease-out}.slide-fade-right-enter[data-v-e98c7fd5],.slide-fade-right-leave-to[data-v-e98c7fd5]{transform:translate(100px);opacity:0} diff --git a/public/build/assets/android-BlaF6v8Z.js b/public/build/assets/android-BlaF6v8Z.js deleted file mode 100644 index 708b43919..000000000 --- a/public/build/assets/android-BlaF6v8Z.js +++ /dev/null @@ -1 +0,0 @@ -const _="/build/assets/ios-UA4m0iiG.png",s="/build/assets/android-DTN6kLtv.png";export{_,s as a}; diff --git a/public/build/assets/app-DgER1unv.css b/public/build/assets/app-DgER1unv.css deleted file mode 100644 index 3ee6ca908..000000000 --- a/public/build/assets/app-DgER1unv.css +++ /dev/null @@ -1 +0,0 @@ -#app .wow{visibility:hidden}html{height:100vh}.scrollbar-hidden::-webkit-scrollbar{display:none}.scrollbar-hidden{-ms-overflow-style:none;scrollbar-width:none;overflow-y:scroll}.info{padding:6px 8px;font:14px/16px Arial,Helvetica,sans-serif;background:#fff;background:#fffc;box-shadow:0 0 15px #0003;border-radius:5px}.info h4{margin:0 0 5px;color:#777}.legend{text-align:left;line-height:18px;color:#555}.legend i{width:18px;height:18px;float:left;margin-right:8px;opacity:.7}.leaflet-pane .leaflet-shadow-pane{display:none}.leaflet-popup-content-wrapper{padding:0!important}.leaflet-popup-content{margin:0!important;overflow-y:auto;border-top-left-radius:6px;border-top-right-radius:6px}.leaflet-popup-content div:last-of-type{margin-bottom:0!important}.leaflet-popup-content div:first-of-type{margin-top:0!important}.leaflet-litter-img-container{position:relative;padding:1.2em}.leaflet-litter-img-container div{color:#000!important;font-size:12px;word-break:break-word;max-width:220px;margin:4px 0}.leaflet-litter-img-container .team{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.leaflet-litter-img-container .link{position:absolute;bottom:10px;right:16px;font-size:1.2rem}.leaflet-litter-img-container .social-container{display:flex;flex-direction:row;gap:.5rem;transform:translateY(5px)}.leaflet-litter-img-container .social-container a{width:1.5rem;font-size:1.2rem;margin-top:.25rem}.leaflet-litter-img-container .link:hover,.leaflet-litter-img-container .social-container a:hover{transform:scale(1.1)}.leaflet-litter-img{border-top-left-radius:6px;border-top-right-radius:6px;object-fit:cover;cursor:pointer}@media (min-width: 768px){.leaflet-litter-img-container div{font-size:14px;max-width:300px;margin:10px 0}.leaflet-litter-img-container .team{max-width:280px}}.locations-container{display:flex;flex-direction:column;height:calc(100% - 72px)}.app-icon{cursor:pointer;max-height:10em;margin-top:-2em;margin-bottom:-2em}.country-back{font-size:.3em;margin:auto 0;padding-right:1em}.error{color:#e74c3c;font-weight:600}.flex{display:flex}.flex-1{flex:1}.font-800{font-weight:800!important}.fullheight{min-height:calc(100vh - 82px)}.h100{height:100%}.hov{transition-duration:.3s}.hov:hover{box-shadow:0 20px 30px -11px #1f23415e;transform:translateY(-5px)}.is-black{color:#000!important}.is-green{color:green}.is-red{color:red}.jc{justify-content:center}.leaflet-popup-close-button{display:none!important}.ma{margin:auto}.mb0{margin-bottom:0!important}.mb-05{margin-bottom:.5em}.mb1{margin-bottom:1em!important}.mb1-5{margin-bottom:1.5em!important}.mb1em{margin-bottom:1em!important}.mb2{margin-bottom:2em!important}.mb2r{margin-bottom:2rem!important}.mb3{margin-bottom:3em!important}.mb5{margin-bottom:5em}.mb5em{margin-bottom:5em!important}.ml1{margin-left:1em}.mr1{margin-right:1em}.mt1{margin-top:1em}.mt2{margin-top:2em}.mt3{margin-top:3em}.mt4{margin-top:4em}.mt5{margin-top:5em}.mt5em{margin-top:5em!important}.mtba{margin:auto 0}.mtb1{margin-top:1em;margin-bottom:1em}.p2{padding:2em!important}.pb1,.pb1em{padding-bottom:1em}.pb2{padding-bottom:2em!important}.pb3{padding-bottom:3em!important}.pointer{cursor:pointer}.pl3{padding-left:3em}.pr1em{padding-right:1em}.pr2em{padding-right:2em}.pt0{padding-top:0!important}.pt1{padding-top:1em}.pt2{padding-top:2em}.pt3{padding-top:3em}.pt5{padding-top:5em}.pt7{padding-top:7em}.search-fixed-height{max-height:18em;overflow-y:auto}.show-mobile{display:none}.success-privacy-text{color:green;font-weight:600;font-family:BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,Helvetica,Arial,sans-serif}.failed-privacy-text{color:red;font-weight:600;font-family:BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,Helvetica,Arial,sans-serif}.suggest-item{color:#363636!important}.vfc-main-container{width:21em!important}.vh100{height:100vh}.vh65{height:65vh}.vue-simple-suggest.designed .input-wrapper input{color:#363636!important}.w10{width:10em}.w50{width:50%}.w100{width:100%}.tooltip{position:relative}.tooltip .tooltip-text{visibility:hidden;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:4px 8px;position:absolute;z-index:30;bottom:115%;opacity:0;transition:opacity .3s}.tooltip:hover .tooltip-text{visibility:visible;opacity:.8}.tooltip .tooltip-text:after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:black transparent transparent transparent}.switch-container{display:flex}.switch-container .switch{position:relative;display:inline-block;width:50px;height:25px}.switch-container .switch input{opacity:0;width:0;height:0}.switch-container .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f14668;-webkit-transition:.4s;transition:.4s;border-radius:34px}.switch-container .slider:before{position:absolute;content:"";border-radius:50%;height:18px;width:18px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.switch-container input:checked+.slider{background-color:#00d1b2}.switch-container input:focus+.slider{box-shadow:0 0 1px #00d1b2}.switch-container input:checked+.slider:before{-webkit-transform:translateX(24px);-ms-transform:translateX(24px);transform:translate(24px)}@media (min-width: 1024px){.navbar-item{color:#fff}}@media (max-width: 1024px){.navbar-item{color:#000}}@media (max-width: 768px){.app-icon{max-height:9em!important}.pagination{display:flex}.page-item{flex:1}#image-metadata,#image-counts{display:none}.expand-mobile{flex:1}.mobile-litter-box{width:50%;margin-left:25%}#photo-id{display:none}.show-mobile{display:block}@media screen and (max-width: 480px){.p-10-mob{padding:10px}}}.vld-icon{text-align:center} diff --git a/public/build/assets/app-DnQChr6M.css b/public/build/assets/app-DnQChr6M.css deleted file mode 100644 index 95e0307b5..000000000 --- a/public/build/assets/app-DnQChr6M.css +++ /dev/null @@ -1 +0,0 @@ -.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;padding:0;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto!important;width:auto;height:auto;margin:0 .3125em}.swal2-popup.swal2-toast .swal2-styled{margin:0 .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #32649666}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:#0006}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none!important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(#0000001a,#0000001a)}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(#0003,#0003)}.swal2-actions.swal2-loading .swal2-styled.swal2-confirm{box-sizing:border-box;width:2.5em;height:2.5em;margin:.46875em;padding:0;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent!important;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm:after{content:"";display:inline-block;width:15px;height:15px;margin-left:5px;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff}.swal2-styled{margin:.3125em;padding:.625em 2em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 3px #32649666}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:.3125em;border-bottom-left-radius:.3125em}.swal2-timer-progress-bar{width:100%;height:.25em;background:#0003}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:0;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px #0000000f;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::-ms-input-placeholder,.swal2-input::-ms-input-placeholder,.swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{margin:0 .4em}.swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message:before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:.25em solid transparent;border-radius:50%;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{align-items:center;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#3085d6}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;width:2.5em;height:.4em;margin:0 -1px;background:#3085d6}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotate(2deg)}33%{transform:translateY(0) rotate(-2deg)}66%{transform:translateY(.3125em) rotate(2deg)}to{transform:translateY(0) rotate(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotate(2deg)}33%{transform:translateY(0) rotate(-2deg)}66%{transform:translateY(.3125em) rotate(2deg)}to{transform:translateY(0) rotate(0)}}@-webkit-keyframes swal2-toast-hide{to{transform:rotate(1deg);opacity:0}}@keyframes swal2-toast-hide{to{transform:rotate(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}to{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}to{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}to{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}to{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}to{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}to{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}to{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}to{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}to{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}to{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}to{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}to{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}to{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}to{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}to{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}to{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}to{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}to{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - 1.25em);background-color:transparent!important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px #0006}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translate(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-left,body.swal2-no-backdrop .swal2-container.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-left,body.swal2-no-backdrop .swal2-container.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translate(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-left,body.swal2-no-backdrop .swal2-container.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translate(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translate(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}.typed-element{display:flex;align-items:center}.typed-element .typed-cursor{opacity:1;animation:typedjsBlink .7s infinite}@keyframes typedjsBlink{50%{opacity:0}}.flex{display:flex}.hoverable{cursor:pointer}.hoverable:hover{background-color:#f5f5f5}.p1em{padding:1em}.lang-flag{max-height:1.25em!important;margin-right:1em}.lang-flag-small{max-height:1em!important;margin-right:.5em}.nav-container[data-v-11d18383]{display:flex;width:100%;justify-content:space-evenly}.burger[data-v-11d18383]{align-self:center}.drop-item[data-v-11d18383]{color:#000;font-weight:500}.flex-not-mobile[data-v-11d18383]{display:flex}.main-nav[data-v-11d18383]{background-color:#000;padding-top:10px;padding-bottom:10px}.nav-title[data-v-11d18383]{color:#fff;font-size:2.5rem;font-weight:600;line-height:1.125}.is-white[data-v-11d18383]{color:#fff}@media (max-width: 768px){.flex-not-mobile[data-v-11d18383]{display:block}.nav-title[data-v-11d18383]{font-size:2rem;padding-left:.25em}}.fs125{font-size:1.25em}.card-list[data-v-640bd32f]{margin-bottom:-130px}@media screen and (max-width: 480px){.card-list[data-v-640bd32f]{margin-bottom:-120px}}.card-item__cvv-amex[data-v-640bd32f]{color:#fff;margin-top:-6%;font-size:27px;font-weight:500;position:absolute;left:78%}.slide-fade-up-enter-active[data-v-640bd32f]{transition:all .25s ease-in-out;transition-delay:.1s;position:relative}.slide-fade-up-leave-active[data-v-640bd32f]{transition:all .25s ease-in-out;position:absolute}.slide-fade-up-enter[data-v-640bd32f]{opacity:0;transform:translateY(15px);pointer-events:none}.slide-fade-up-leave-to[data-v-640bd32f]{opacity:0;transform:translateY(-15px);pointer-events:none}.slide-fade-right-enter-active[data-v-640bd32f]{transition:all .25s ease-in-out;transition-delay:.1s;position:relative}.slide-fade-right-leave-active[data-v-640bd32f]{transition:all .25s ease-in-out;position:absolute}.slide-fade-right-enter[data-v-640bd32f]{opacity:0;transform:translate(10px) rotate(45deg);pointer-events:none}.slide-fade-right-leave-to[data-v-640bd32f]{opacity:0;transform:translate(-10px) rotate(45deg);pointer-events:none}.card-item[data-v-640bd32f]{max-width:430px;height:270px;margin-left:auto;margin-right:auto;position:relative;z-index:2;width:100%}@media screen and (max-width: 480px){.card-item[data-v-640bd32f]{max-width:310px;height:220px;width:90%}}@media screen and (max-width: 360px){.card-item[data-v-640bd32f]{height:180px}}.card-item.-active .card-item__side.-front[data-v-640bd32f]{transform:perspective(1000px) rotateY(180deg) rotateX(0) rotate(0)}.card-item.-active .card-item__side.-back[data-v-640bd32f]{transform:perspective(1000px) rotateY(0) rotateX(0) rotate(0)}.card-item__focus[data-v-640bd32f]{position:absolute;z-index:3;border-radius:5px;left:0;top:0;width:100%;height:100%;transition:all .35s cubic-bezier(.71,.03,.56,.85);opacity:0;pointer-events:none;overflow:hidden;border:2px solid rgba(255,255,255,.65)}.card-item__focus[data-v-640bd32f]:after{content:"";position:absolute;top:0;left:0;width:100%;background:#08142f;height:100%;border-radius:5px;filter:blur(25px);opacity:.5}.card-item__focus.-active[data-v-640bd32f]{opacity:1}.card-item__side[data-v-640bd32f]{border-radius:15px;overflow:hidden;transform:perspective(2000px) rotateY(0) rotateX(0) rotate(0);transform-style:preserve-3d;transition:all .8s cubic-bezier(.71,.03,.56,.85);backface-visibility:hidden;height:100%}.card-item__side.-back[data-v-640bd32f]{position:absolute;top:0;left:0;width:100%;transform:perspective(2000px) rotateY(-180deg) rotateX(0) rotate(0);z-index:2;padding:0;background-color:#2364d2;background-image:linear-gradient(43deg,#4158d0,#8555c7 46%,#2364d2);height:100%}.card-item__side.-back .card-item__cover[data-v-640bd32f]{transform:rotateY(-180deg)}.card-item__bg[data-v-640bd32f]{max-width:100%;display:block;max-height:100%;height:100%;width:100%;object-fit:cover}.card-item__cover[data-v-640bd32f]{position:absolute;height:100%;background-color:#1c1d27;left:0;top:0;width:100%;border-radius:15px;overflow:hidden}.card-item__cover[data-v-640bd32f]:after{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:#06021d73}.card-item__top[data-v-640bd32f]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:40px;padding:0 10px}@media screen and (max-width: 480px){.card-item__top[data-v-640bd32f]{margin-bottom:25px}}@media screen and (max-width: 360px){.card-item__top[data-v-640bd32f]{margin-bottom:15px}}.card-item__chip[data-v-640bd32f]{width:60px}@media screen and (max-width: 480px){.card-item__chip[data-v-640bd32f]{width:50px}}@media screen and (max-width: 360px){.card-item__chip[data-v-640bd32f]{width:40px}}.card-item__type[data-v-640bd32f]{height:45px;position:relative;display:flex;justify-content:flex-end;max-width:100px;margin-left:auto;width:100%}@media screen and (max-width: 480px){.card-item__type[data-v-640bd32f]{height:40px;max-width:90px}}@media screen and (max-width: 360px){.card-item__type[data-v-640bd32f]{height:30px}}.card-item__typeImg[data-v-640bd32f]{max-width:100%;object-fit:contain;max-height:100%;object-position:top right}.card-item__info[data-v-640bd32f]{color:#fff;width:100%;max-width:calc(100% - 85px);padding:10px 15px;font-weight:500;display:block;cursor:pointer}@media screen and (max-width: 480px){.card-item__info[data-v-640bd32f]{padding:10px}}.card-item__holder[data-v-640bd32f]{opacity:.7;font-size:13px;margin-bottom:6px;text-align:left}@media screen and (max-width: 480px){.card-item__holder[data-v-640bd32f]{font-size:12px;margin-bottom:5px}}.card-item__wrapper[data-v-640bd32f]{font-family:Source Code Pro,monospace;padding:25px 15px;position:relative;z-index:4;height:100%;text-shadow:7px 6px 10px rgba(14,42,90,.8);-webkit-user-select:none;user-select:none}@media screen and (max-width: 480px){.card-item__wrapper[data-v-640bd32f]{padding:20px 10px}}.card-item__name[data-v-640bd32f]{font-size:18px;line-height:1;white-space:nowrap;max-width:100%;overflow:hidden;text-align:left;text-overflow:ellipsis;text-transform:uppercase}@media screen and (max-width: 480px){.card-item__name[data-v-640bd32f]{font-size:16px}}.card-item__nameItem[data-v-640bd32f]{display:inline-block;min-width:8px;position:relative}.card-item__number[data-v-640bd32f]{font-weight:500;line-height:1;color:#fff;font-size:27px;margin-bottom:35px;display:inline-block;padding:10px 15px;cursor:pointer}@media screen and (max-width: 480px){.card-item__number[data-v-640bd32f]{font-size:21px;margin-bottom:15px;padding:10px}}@media screen and (max-width: 360px){.card-item__number[data-v-640bd32f]{font-size:19px;margin-bottom:10px;padding:10px}}.card-item__numberItem[data-v-640bd32f]{width:16px;display:inline-block}.card-item__numberItem.-active[data-v-640bd32f]{width:30px}@media screen and (max-width: 480px){.card-item__numberItem[data-v-640bd32f]{width:13px}.card-item__numberItem.-active[data-v-640bd32f]{width:16px}}@media screen and (max-width: 360px){.card-item__numberItem[data-v-640bd32f]{width:12px}.card-item__numberItem.-active[data-v-640bd32f]{width:8px}}.card-item__content[data-v-640bd32f]{color:#fff;display:flex;align-items:flex-start}.card-item__date[data-v-640bd32f]{flex-wrap:wrap;font-size:18px;margin-left:auto;padding:10px;display:inline-flex;width:80px;white-space:nowrap;flex-shrink:0;cursor:pointer}@media screen and (max-width: 480px){.card-item__date[data-v-640bd32f]{font-size:16px}}.card-item__dateItem[data-v-640bd32f]{position:relative}.card-item__dateItem span[data-v-640bd32f]{width:22px;display:inline-block}.card-item__dateTitle[data-v-640bd32f]{opacity:.7;font-size:13px;padding-bottom:6px;width:100%}@media screen and (max-width: 480px){.card-item__dateTitle[data-v-640bd32f]{font-size:12px;padding-bottom:5px}}.card-item__band[data-v-640bd32f]{background:#000013cc;width:100%;height:50px;margin-top:30px;position:relative;z-index:2}@media screen and (max-width: 480px){.card-item__band[data-v-640bd32f]{margin-top:20px}}@media screen and (max-width: 360px){.card-item__band[data-v-640bd32f]{height:40px;margin-top:10px}}.card-item__cvv[data-v-640bd32f]{text-align:right;position:relative;z-index:2;padding:15px}.card-item__cvv .card-item__type[data-v-640bd32f]{opacity:.7}@media screen and (max-width: 360px){.card-item__cvv[data-v-640bd32f]{padding:10px 15px}}.card-item__cvvTitle[data-v-640bd32f]{padding-right:10px;font-size:15px;font-weight:500;color:#fff;margin-bottom:5px}.card-item__cvvBand[data-v-640bd32f]{height:45px;background:#fff;margin-bottom:30px;text-align:right;display:flex;align-items:center;justify-content:flex-end;padding-right:10px;color:#1a3b5d;font-size:18px;border-radius:4px}@media screen and (max-width: 480px){.card-item__cvvBand[data-v-640bd32f]{height:40px;margin-bottom:20px}}@media screen and (max-width: 360px){.card-item__cvvBand[data-v-640bd32f]{margin-bottom:15px}}.cc-wrapper[data-v-2018af42]{display:flex;padding:50px 15px}@media screen and (max-width: 700px),(max-height: 500px){.cc-wrapper[data-v-2018af42]{flex-wrap:wrap;flex-direction:column}}.border-danger[data-v-2018af42]{border-color:red!important}.label-danger[data-v-2018af42]{color:red!important}.error-message[data-v-2018af42]{text-align:left;color:red;font-size:14px;margin-top:4px}.error-month[data-v-2018af42]{position:absolute;bottom:-2em;left:1em}.error-year[data-v-2018af42]{position:absolute;bottom:-2em;left:11em}.error-cvc[data-v-2018af42]{position:absolute;bottom:-2em;left:1em}.card-form[data-v-2018af42]{max-width:570px;margin:auto;width:100%}@media screen and (max-width: 576px){.card-form[data-v-2018af42]{margin:0 auto}}.card-form__inner[data-v-2018af42]{background:#fff;box-shadow:0 30px 60px #5a749466;border-radius:10px;padding:180px 35px 35px}@media screen and (max-width: 480px){.card-form__inner[data-v-2018af42]{padding:165px 25px 25px}}@media screen and (max-width: 360px){.card-form__inner[data-v-2018af42]{padding:165px 15px 15px}}.card-form__row[data-v-2018af42]{display:flex;align-items:flex-start}@media screen and (max-width: 480px){.card-form__row[data-v-2018af42]{flex-wrap:wrap}}.card-form__col[data-v-2018af42]{flex:auto;margin-right:35px}.card-form__col[data-v-2018af42]:last-child{margin-right:0}@media screen and (max-width: 480px){.card-form__col[data-v-2018af42]{margin-right:0;flex:unset;width:100%;margin-bottom:20px}.card-form__col[data-v-2018af42]:last-child{margin-bottom:0}}.card-form__col.-cvv[data-v-2018af42]{max-width:150px;position:relative}@media screen and (max-width: 480px){.card-form__col.-cvv[data-v-2018af42]{max-width:initial}}.card-form__group[data-v-2018af42]{display:flex;align-items:flex-start;flex-wrap:wrap;position:relative}.card-form__group .card-input__input[data-v-2018af42]{flex:1;margin-right:15px}.card-form__group .card-input__input[data-v-2018af42]:last-child{margin-right:0}.card-form__button[data-v-2018af42]{width:100%;height:55px;background:#7957d5;border:none;border-radius:5px;font-size:22px;font-weight:500;font-family:Source Sans Pro,sans-serif;color:#fff;margin-top:20px;cursor:pointer}@media screen and (max-width: 480px){.card-form__button[data-v-2018af42]{margin-top:10px}}.card-input[data-v-2018af42]{margin-bottom:20px}.card-input__label[data-v-2018af42]{font-size:14px;margin-bottom:5px;font-weight:500;color:#1a3b5d;width:100%;display:block;-webkit-user-select:none;user-select:none}.card-input__input[data-v-2018af42]{width:100%;height:50px;border-radius:5px;border:1px solid #ced6e0;transition:all .3s ease-in-out;font-size:18px;padding:5px 15px;background:none;color:#1a3b5d;font-family:Source Sans Pro,sans-serif}.card-input__input[data-v-2018af42]:hover,.card-input__input[data-v-2018af42]:focus{border-color:#3d9cff}.card-input__input[data-v-2018af42]:focus{box-shadow:0 10px 20px -13px #20387559}.card-input__input.-select[data-v-2018af42]{-webkit-appearance:none;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAeCAYAAABuUU38AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNrM1sEJwkAQBdCsngXPHsQO9O5FS7AAMVYgdqAd2IGCDWgFnryLFQiCZ8EGnJUNimiyM/tnk4HNEAg/8y6ZmMRVqz9eUJvRaSbvutCZ347bXVJy/ZnvTmdJ862Me+hAbZCTs6GHpyUi1tTSvPnqTpoWZPUa7W7ncT3vK4h4zVejy8QzM3WhVUO8ykI6jOxoGA4ig3BLHcNFSCGqGAkig2yqgpEiMsjSfY9LxYQg7L6r0X6wS29YJiYQYecemY+wHrXD1+bklGhpAhBDeu/JfIVGxaAQ9sb8CI+CQSJ+QmJg0Ii/EE2MBiIXooHRQhRCkBhNhBcEhLkwf05ZCG8ICCOpk0MULmvDSY2M8UawIRExLIQIEgHDRoghihgRIgiigBEjgiFATBACAgFgghEwSAAGgoBCBBgYAg5hYKAIFYgHBo6w9RRgAFfy160QuV8NAAAAAElFTkSuQmCC);background-size:12px;background-position:90% center;background-repeat:no-repeat;padding-right:30px}.github-btn[data-v-2018af42]{position:absolute;right:40px;bottom:50px;text-decoration:none;padding:15px 25px;border-radius:4px;box-shadow:0 4px 30px -6px #243446a6;background:#24292e;color:#fff;font-weight:700;letter-spacing:1px;font-size:16px;text-align:center;transition:all .3s ease-in-out}@media screen and (min-width: 500px){.github-btn[data-v-2018af42]:hover{transform:scale(1.1);box-shadow:0 17px 20px -6px #2434465c}}@media screen and (max-width: 700px){.github-btn[data-v-2018af42]{position:relative;bottom:auto;right:auto;margin-top:20px}.github-btn[data-v-2018af42]:active{transform:scale(1.1);box-shadow:0 17px 20px -6px #2434465c}}@media only screen and (max-width: 600px){.margin-mobile[data-v-2018af42]{margin-top:1em}}@media only screen and (max-width: 900px){.container[data-v-d78c7a68]{display:flex;overflow-x:auto}.admin-item[data-v-d78c7a68]{padding:10px}}.category[data-v-d78c7a68]{font-size:1.25em;display:flex;justify-content:center;margin-bottom:.5em}.litter-tag[data-v-d78c7a68]{cursor:pointer;margin-bottom:10px;width:100%}.categories-enter-active[data-v-d78c7a68],.categories-leave-active[data-v-d78c7a68]{transition:all .5s}.categories-enter[data-v-d78c7a68],.categories-leave-to[data-v-d78c7a68]{opacity:0;transform:translateY(50px)}.categories-move[data-v-d78c7a68]{transition:transform .5s}.vue-simple-suggest>ul{list-style:none;margin:0;padding:0}.vue-simple-suggest.designed{position:relative}.vue-simple-suggest.designed,.vue-simple-suggest.designed *{box-sizing:border-box}.vue-simple-suggest.designed .input-wrapper input{display:block;width:100%;padding:10px;border:1px solid #cde;border-radius:3px;color:#000;background:#fff;outline:none;transition:all .1s;transition-delay:.05s}.vue-simple-suggest.designed.focus .input-wrapper input{border:1px solid #aaa}.vue-simple-suggest.designed .suggestions{position:absolute;left:0;right:0;top:100%;top:calc(100% + 5px);border-radius:3px;border:1px solid #aaa;background-color:#fff;opacity:1;z-index:1000}.vue-simple-suggest.designed .suggestions .suggest-item{cursor:pointer;-webkit-user-select:none;user-select:none}.vue-simple-suggest.designed .suggestions .suggest-item,.vue-simple-suggest.designed .suggestions .misc-item{padding:5px 10px}.vue-simple-suggest.designed .suggestions .suggest-item.hover{background-color:#2874d5!important;color:#fff!important}.vue-simple-suggest.designed .suggestions .suggest-item.selected{background-color:#2832d5;color:#fff}.hide-br[data-v-d5ff48df]{display:none}.is-flex-grow-3[data-v-d5ff48df]{flex-grow:3}.is-flex-grow-1[data-v-d5ff48df]{flex-grow:1}.search-container[data-v-d5ff48df]{margin-right:4px}.custom-buttons[data-v-d5ff48df]{display:flex;gap:1rem;justify-content:space-between;align-items:center;flex-direction:row}@media (max-width: 500px){.hide-br[data-v-d5ff48df]{display:block}.v-select[data-v-d5ff48df]{margin-top:10px}.flex-column-mobile[data-v-d5ff48df]{flex-direction:column}.search-container[data-v-d5ff48df]{margin-right:0;margin-bottom:4px}.custom-buttons[data-v-d5ff48df]{flex-direction:column}}@media (min-width: 768px){.show-mobile[data-v-d5ff48df]{display:none!important}}button[data-v-d5ff48df]:focus{outline:2px solid lightskyblue;outline-offset:2px}.bulk-tag-picked-up[data-v-e3ec85e0]{display:flex;justify-content:center;margin-bottom:16px}.close-login[data-v-bb03de92]{padding:.5em;cursor:pointer}.my-class[data-v-bb03de92]{background-color:red;font-size:20px;border:2px solid black}.modal-enter[data-v-bb03de92],.modal-leave-active[data-v-bb03de92]{opacity:0}.modal-enter .modal-container[data-v-bb03de92],.modal-leave-active .modal-container[data-v-bb03de92]{-webkit-transform:scale(1.1);transform:scale(1.1)}.inner-modal-container[data-v-bb03de92]{padding:1em 2em}.inner-login-container[data-v-bb03de92]{padding-top:1em}.modal-container[data-v-bb03de92]{background-color:#fff;border-radius:10px;box-shadow:0 2px 8px #00000054;display:inline-block;font-family:Helvetica,Arial,sans-serif;position:relative;margin:30px auto;transition:all .3s ease;width:585px}@media (max-width: 700px){.modal-container[data-v-bb03de92]{width:80%}}.modal-flex[data-v-bb03de92]{display:flex;flex-direction:column;justify-content:center}.modal-header[data-v-bb03de92]{margin-bottom:1em;position:relative;text-align:center}.modal-mask[data-v-bb03de92]{background-color:#00000080;position:fixed;top:0;left:0;width:100%;height:100%;overflow-y:scroll;overflow-x:hidden;transition:opacity .3s ease;text-align:center;z-index:1555}.top-left[data-v-bb03de92]{position:absolute;left:2em}.top-right[data-v-bb03de92]{position:absolute;top:0;right:1em;padding:.3em;cursor:pointer;z-index:9999}.transparent-container[data-v-bb03de92]{background-color:transparent;border-radius:10px;box-shadow:none;display:inline-block;font-family:Helvetica,Arial,sans-serif;padding:2.5em 0;position:relative;margin:30px auto;transition:all .3s ease;width:585px}@media (max-width: 700px){.transparent-container[data-v-bb03de92]{width:80%}}.info-title[data-v-bb03de92]{color:#459ef5;cursor:pointer;margin-top:1.75em}@media only screen and (max-width: 600px){.mobile-only[data-v-bb03de92]{padding-bottom:0}.inner-modal-container[data-v-bb03de92]{padding:1em}.transparent-container[data-v-bb03de92]{padding:15em 0 0;width:100%}}#emaildiv[data-v-b31e861e]{display:flex;justify-content:center;margin-bottom:-20px;z-index:999;text-align:center}.welcome-msg[data-v-b31e861e]{margin-right:10px}#emaildiv[data-v-526d932a]{display:flex;justify-content:center;margin-bottom:-20px;z-index:999;text-align:center}.welcome-msg[data-v-526d932a]{margin-right:10px}.root-container[data-v-47da7a0e]{height:calc(100vh - 10px)} diff --git a/public/build/assets/camera-CVAaxWTW.png b/public/build/assets/camera-CVAaxWTW.png deleted file mode 100644 index 3b52e1ee7..000000000 Binary files a/public/build/assets/camera-CVAaxWTW.png and /dev/null differ diff --git a/public/build/assets/cigbutts-CVuuOzE4.jpg b/public/build/assets/cigbutts-CVuuOzE4.jpg deleted file mode 100644 index 7cd5d8c55..000000000 Binary files a/public/build/assets/cigbutts-CVuuOzE4.jpg and /dev/null differ diff --git a/public/build/assets/cigbutts_jar-BL7Z4hk3.jpg b/public/build/assets/cigbutts_jar-BL7Z4hk3.jpg deleted file mode 100644 index f96565d9e..000000000 Binary files a/public/build/assets/cigbutts_jar-BL7Z4hk3.jpg and /dev/null differ diff --git a/public/build/assets/eternl-CDqNp3Eg.png b/public/build/assets/eternl-CDqNp3Eg.png deleted file mode 100644 index 7875f780f..000000000 Binary files a/public/build/assets/eternl-CDqNp3Eg.png and /dev/null differ diff --git a/public/build/assets/gofundme-brand-logo-Owg_sqpa.png b/public/build/assets/gofundme-brand-logo-Owg_sqpa.png deleted file mode 100644 index 08421651e..000000000 Binary files a/public/build/assets/gofundme-brand-logo-Owg_sqpa.png and /dev/null differ diff --git a/public/build/assets/index-Dxbj43yt.js b/public/build/assets/index-Dxbj43yt.js deleted file mode 100644 index 25d2c3b5f..000000000 --- a/public/build/assets/index-Dxbj43yt.js +++ /dev/null @@ -1 +0,0 @@ -const s=19,E=2,M=17,O=3,_=100,a=1e3;export{M as C,a as L,E as M,O as Z,s as a,_ as b}; diff --git a/public/build/assets/layers-2x-Bpkbi35X.png b/public/build/assets/layers-2x-Bpkbi35X.png deleted file mode 100644 index 200c333dc..000000000 Binary files a/public/build/assets/layers-2x-Bpkbi35X.png and /dev/null differ diff --git a/public/build/assets/layers-BWBAp2CZ.png b/public/build/assets/layers-BWBAp2CZ.png deleted file mode 100644 index 1a72e5784..000000000 Binary files a/public/build/assets/layers-BWBAp2CZ.png and /dev/null differ diff --git a/public/build/assets/leaflet.timedimension-DuQPkTRa.css b/public/build/assets/leaflet.timedimension-DuQPkTRa.css deleted file mode 100644 index f32a6aa3d..000000000 --- a/public/build/assets/leaflet.timedimension-DuQPkTRa.css +++ /dev/null @@ -1 +0,0 @@ -.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(/build/assets/layers-BWBAp2CZ.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(/build/assets/layers-2x-Bpkbi35X.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(/build/assets/marker-icon-hN30_KVU.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}@font-face{font-family:Glyphicons Halflings;src:url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/fonts/glyphicons-halflings-regular.eot);src:url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/fonts/glyphicons-halflings-regular.woff) format("woff"),url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular) format("svg")}.leaflet-bar-timecontrol{background-color:#fff;color:#000}.leaflet-bar-timecontrol *{box-sizing:border-box}.leaflet-bar-timecontrol .leaflet-control-timecontrol{float:left;height:26px;line-height:26px;border:solid #a5a5a5;background-color:#fff;border-width:0 1px 0 0}.leaflet-bar-timecontrol .leaflet-control-timecontrol:first-child{border-radius:4px 0 0 4px}.leaflet-bar-timecontrol .leaflet-control-timecontrol:last-child{border-radius:0 4px 4px 0}.leaflet-bar-timecontrol .leaflet-control-timecontrol:before{font-family:Glyphicons Halflings;display:block}.leaflet-bar-timecontrol .timecontrol-slider{position:relative;width:auto;cursor:auto}.leaflet-bar-timecontrol a.timecontrol-date,.leaflet-bar-timecontrol a.timecontrol-date:hover{position:relative;min-width:150px;width:auto;padding:0 10px 0 20px;white-space:nowrap}.leaflet-bar-timecontrol a.timecontrol-date.utc,.leaflet-bar-timecontrol a.timecontrol-date.utc:hover{min-width:185px}.leaflet-bar-timecontrol a.timecontrol-date.loading,.leaflet-bar-timecontrol a.timecontrol-date.loading:hover{background-color:#ffefa4}.leaflet-bar-timecontrol .timecontrol-dateslider .slider{width:200px}.leaflet-bar-timecontrol .timecontrol-speed{white-space:nowrap;cursor:auto}.leaflet-bar-timecontrol .timecontrol-speed .slider{width:55px;display:inline-block}.leaflet-bar-timecontrol .timecontrol-speed .speed{width:55px;display:inline-block;float:left;text-align:right}.leaflet-bar-timecontrol .timecontrol-play,.leaflet-bar-timecontrol .timecontrol-play:hover{position:relative}.leaflet-bar-timecontrol .timecontrol-play span{font-size:10px}.leaflet-bar-timecontrol a.timecontrol-play.loading{background-color:#ffefa4}.timecontrol-slider .slider{position:relative;height:12px;margin:6px;border:1px solid #a5a5a5;cursor:pointer}.timecontrol-slider .slider.has-limits{margin-left:15px;margin-right:15px;background-color:#ddd}.timecontrol-slider .slider.has-limits .range{position:absolute;height:10px;background-color:#fff}.timecontrol-slider .knob{position:absolute;width:8px;height:22px;background-color:#ddd;border-radius:2px;border:1px solid #a5a5a5;margin-top:-6px;margin-left:-4px;cursor:ew-resize;cursor:-webkit-grab;cursor:-moz-grab}.timecontrol-slider .knob:after{content:" ";display:block;position:absolute;width:20px;top:-5px;height:32px;left:-7px}.timecontrol-slider .knob.upper,.timecontrol-slider .knob.lower{width:11px;height:20px;border:none;background-color:transparent}.timecontrol-slider .knob.upper{margin-top:-5px;margin-left:-1px}.timecontrol-slider .knob.lower{margin-top:-5px;margin-left:-10px}.timecontrol-slider .knob.lower:after{right:0;left:initial}.timecontrol-slider .knob.upper:after{left:0}.timecontrol-slider .knob.upper:before,.timecontrol-slider .knob.lower:before{display:block;content:"";position:relative;top:2px;width:0;height:0;border-style:solid}.timecontrol-slider .knob.upper:before{border-width:16px 0 0 10px;border-color:transparent transparent transparent #a5a5a5}.timecontrol-slider .knob.lower:before{border-width:0 0 16px 10px;border-color:transparent transparent #a5a5a5}.timecontrol-slider .slider.dragging,.timecontrol-slider .dragging .knob,.timecontrol-slider .knob.leaflet-drag-target{cursor:ew-resize;cursor:grabbing;cursor:-webkit-grabbing;cursor:-moz-grabbing}@-webkit-keyframes icon-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.timecontrol-loop.looped,.timecontrol-loop.looped:hover{background-color:#ddd;color:#094f8e}.timecontrol-backward:before,.timecontrol-forward:before,.timecontrol-stop:before,.timecontrol-play:before,.timecontrol-loop:before{width:100%;text-align:center}.timecontrol-play:before{position:absolute;content:""}.timecontrol-play.reverse:before{content:"";-ms-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.timecontrol-play.pause:before{content:""}.timecontrol-play.reverse.pause:before{-ms-transform:none;-webkit-transform:none;transform:none}a.timecontrol-play.loading:before{content:"";opacity:.2;-webkit-animation:icon-rotation 6s infinite linear;animation:icon-rotation 6s infinite linear}.timecontrol-date.loading:before{content:"";left:5px;position:absolute;-webkit-animation:icon-rotation 6s infinite linear;animation:icon-rotation 6s infinite linear}.timecontrol-speed:before{content:"";position:absolute;left:7px}.timecontrol-stop:before{content:""}.timecontrol-forward:before{content:""}.timecontrol-backward:before{content:""}.timecontrol-loop:before{content:""}@media (max-width: 767px){.leaflet-bar-timecontrol .timecontrol-date,.leaflet-bar-timecontrol .timecontrol-slider{clear:both;float:none;border-right:none}}.leaflet-touch .leaflet-bar-timecontrol .leaflet-control-timecontrol{height:30px;line-height:30px}.leaflet-touch .timecontrol-slider .slider{margin-top:10px} diff --git a/public/build/assets/marinelitter-CVAxhBMz.jpg b/public/build/assets/marinelitter-CVAxhBMz.jpg deleted file mode 100644 index 8efee1818..000000000 Binary files a/public/build/assets/marinelitter-CVAxhBMz.jpg and /dev/null differ diff --git a/public/build/assets/marker-icon-2x-_ZA0WGCc.png b/public/build/assets/marker-icon-2x-_ZA0WGCc.png deleted file mode 100644 index 88f9e5018..000000000 Binary files a/public/build/assets/marker-icon-2x-_ZA0WGCc.png and /dev/null differ diff --git a/public/build/assets/marker-icon-hN30_KVU.png b/public/build/assets/marker-icon-hN30_KVU.png deleted file mode 100644 index 950edf246..000000000 Binary files a/public/build/assets/marker-icon-hN30_KVU.png and /dev/null differ diff --git a/public/build/assets/marker-shadow-f7SaPCxT.png b/public/build/assets/marker-shadow-f7SaPCxT.png deleted file mode 100644 index 9fd297953..000000000 Binary files a/public/build/assets/marker-shadow-f7SaPCxT.png and /dev/null differ diff --git a/public/build/assets/microscope-BxV7iasq.png b/public/build/assets/microscope-BxV7iasq.png deleted file mode 100644 index 80907e4bd..000000000 Binary files a/public/build/assets/microscope-BxV7iasq.png and /dev/null differ diff --git a/public/build/assets/mining-Cq36pFOM.png b/public/build/assets/mining-Cq36pFOM.png deleted file mode 100644 index 10c0fd3b6..000000000 Binary files a/public/build/assets/mining-Cq36pFOM.png and /dev/null differ diff --git a/public/build/assets/moment-zH0z38ay.js b/public/build/assets/moment-zH0z38ay.js deleted file mode 100644 index b0748e945..000000000 --- a/public/build/assets/moment-zH0z38ay.js +++ /dev/null @@ -1,10 +0,0 @@ -//! moment.js -//! version : 2.30.1 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -var Nt;function l(){return Nt.apply(null,arguments)}function Ss(e){Nt=e}function R(e){return e instanceof Array||Object.prototype.toString.call(e)==="[object Array]"}function se(e){return e!=null&&Object.prototype.toString.call(e)==="[object Object]"}function w(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function st(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(w(e,t))return!1;return!0}function T(e){return e===void 0}function $(e){return typeof e=="number"||Object.prototype.toString.call(e)==="[object Number]"}function Me(e){return e instanceof Date||Object.prototype.toString.call(e)==="[object Date]"}function Wt(e,t){var s=[],r,a=e.length;for(r=0;r>>0,r;for(r=0;r0)for(s=0;s=0;return(n?s?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}var it=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Ye=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ze={},oe={};function h(e,t,s,r){var a=r;typeof r=="string"&&(a=function(){return this[r]()}),e&&(oe[e]=a),t&&(oe[t[0]]=function(){return U(a.apply(this,arguments),t[1],t[2])}),s&&(oe[s]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function Os(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function Ts(e){var t=e.match(it),s,r;for(s=0,r=t.length;s=0&&Ye.test(e);)e=e.replace(Ye,r),Ye.lastIndex=0,s-=1;return e}var bs={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function xs(e){var t=this._longDateFormat[e],s=this._longDateFormat[e.toUpperCase()];return t||!s?t:(this._longDateFormat[e]=s.match(it).map(function(r){return r==="MMMM"||r==="MM"||r==="DD"||r==="dddd"?r.slice(1):r}).join(""),this._longDateFormat[e])}var Ns="Invalid date";function Ws(){return this._invalidDate}var Ps="%d",Rs=/\d{1,2}/;function Fs(e){return this._ordinal.replace("%d",e)}var Cs={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Ls(e,t,s,r){var a=this._relativeTime[s];return H(a)?a(e,t,s,r):a.replace(/%d/i,e)}function Us(e,t){var s=this._relativeTime[e>0?"future":"past"];return H(s)?s(t):s.replace(/%s/i,t)}var Ot={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function W(e){return typeof e=="string"?Ot[e]||Ot[e.toLowerCase()]:void 0}function ot(e){var t={},s,r;for(r in e)w(e,r)&&(s=W(r),s&&(t[s]=e[r]));return t}var Is={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Hs(e){var t=[],s;for(s in e)w(e,s)&&t.push({unit:s,priority:Is[s]});return t.sort(function(r,a){return r.priority-a.priority}),t}var Ct=/\d/,b=/\d\d/,Lt=/\d{3}/,lt=/\d{4}/,Ce=/[+-]?\d{6}/,S=/\d\d?/,Ut=/\d\d\d\d?/,It=/\d\d\d\d\d\d?/,Le=/\d{1,3}/,ut=/\d{1,4}/,Ue=/[+-]?\d{1,6}/,de=/\d+/,Ie=/[+-]?\d+/,Es=/Z|[+-]\d\d:?\d\d/gi,He=/Z|[+-]\d\d(?::?\d\d)?/gi,As=/[+-]?\d+(\.\d{1,3})?/,De=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,he=/^[1-9]\d?/,dt=/^([1-9]\d|\d)/,xe;xe={};function d(e,t,s){xe[e]=H(t)?t:function(r,a){return r&&s?s:t}}function Vs(e,t){return w(xe,e)?xe[e](t._strict,t._locale):new RegExp(Gs(e))}function Gs(e){return z(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,s,r,a,n){return s||r||a||n}))}function z(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function x(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function m(e){var t=+e,s=0;return t!==0&&isFinite(t)&&(s=x(t)),s}var Xe={};function g(e,t){var s,r=t,a;for(typeof e=="string"&&(e=[e]),$(t)&&(r=function(n,i){i[t]=m(n)}),a=e.length,s=0;s68?1900:2e3)};var Ht=fe("FullYear",!0);function $s(){return Ee(this.year())}function fe(e,t){return function(s){return s!=null?(Et(this,e,s),l.updateOffset(this,t),this):ye(this,e)}}function ye(e,t){if(!e.isValid())return NaN;var s=e._d,r=e._isUTC;switch(t){case"Milliseconds":return r?s.getUTCMilliseconds():s.getMilliseconds();case"Seconds":return r?s.getUTCSeconds():s.getSeconds();case"Minutes":return r?s.getUTCMinutes():s.getMinutes();case"Hours":return r?s.getUTCHours():s.getHours();case"Date":return r?s.getUTCDate():s.getDate();case"Day":return r?s.getUTCDay():s.getDay();case"Month":return r?s.getUTCMonth():s.getMonth();case"FullYear":return r?s.getUTCFullYear():s.getFullYear();default:return NaN}}function Et(e,t,s){var r,a,n,i,u;if(!(!e.isValid()||isNaN(s))){switch(r=e._d,a=e._isUTC,t){case"Milliseconds":return void(a?r.setUTCMilliseconds(s):r.setMilliseconds(s));case"Seconds":return void(a?r.setUTCSeconds(s):r.setSeconds(s));case"Minutes":return void(a?r.setUTCMinutes(s):r.setMinutes(s));case"Hours":return void(a?r.setUTCHours(s):r.setHours(s));case"Date":return void(a?r.setUTCDate(s):r.setDate(s));case"FullYear":break;default:return}n=s,i=e.month(),u=e.date(),u=u===29&&i===1&&!Ee(n)?28:u,a?r.setUTCFullYear(n,i,u):r.setFullYear(n,i,u)}}function qs(e){return e=W(e),H(this[e])?this[e]():this}function Bs(e,t){if(typeof e=="object"){e=ot(e);var s=Hs(e),r,a=s.length;for(r=0;r=0?(u=new Date(e+400,t,s,r,a,n,i),isFinite(u.getFullYear())&&u.setFullYear(e)):u=new Date(e,t,s,r,a,n,i),u}function we(e){var t,s;return e<100&&e>=0?(s=Array.prototype.slice.call(arguments),s[0]=e+400,t=new Date(Date.UTC.apply(null,s)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Ne(e,t,s){var r=7+t-s,a=(7+we(e,0,r).getUTCDay()-t)%7;return-a+r-1}function Zt(e,t,s,r,a){var n=(7+s-r)%7,i=Ne(e,r,a),u=1+7*(t-1)+n+i,f,_;return u<=0?(f=e-1,_=_e(f)+u):u>_e(e)?(f=e+1,_=u-_e(e)):(f=e,_=u),{year:f,dayOfYear:_}}function ke(e,t,s){var r=Ne(e.year(),t,s),a=Math.floor((e.dayOfYear()-r-1)/7)+1,n,i;return a<1?(i=e.year()-1,n=a+Z(i,t,s)):a>Z(e.year(),t,s)?(n=a-Z(e.year(),t,s),i=e.year()+1):(i=e.year(),n=a),{week:n,year:i}}function Z(e,t,s){var r=Ne(e,t,s),a=Ne(e+1,t,s);return(_e(e)-r+a)/7}h("w",["ww",2],"wo","week");h("W",["WW",2],"Wo","isoWeek");d("w",S,he);d("ww",S,b);d("W",S,he);d("WW",S,b);ve(["w","ww","W","WW"],function(e,t,s,r){t[r.substr(0,1)]=m(e)});function lr(e){return ke(e,this._week.dow,this._week.doy).week}var ur={dow:0,doy:6};function dr(){return this._week.dow}function hr(){return this._week.doy}function fr(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function cr(e){var t=ke(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}h("d",0,"do","day");h("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)});h("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)});h("dddd",0,0,function(e){return this.localeData().weekdays(this,e)});h("e",0,0,"weekday");h("E",0,0,"isoWeekday");d("d",S);d("e",S);d("E",S);d("dd",function(e,t){return t.weekdaysMinRegex(e)});d("ddd",function(e,t){return t.weekdaysShortRegex(e)});d("dddd",function(e,t){return t.weekdaysRegex(e)});ve(["dd","ddd","dddd"],function(e,t,s,r){var a=s._locale.weekdaysParse(e,r,s._strict);a!=null?t.d=a:c(s).invalidWeekday=e});ve(["d","e","E"],function(e,t,s,r){t[r]=m(e)});function mr(e,t){return typeof e!="string"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e=="number"?e:null):parseInt(e,10)}function _r(e,t){return typeof e=="string"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function ft(e,t){return e.slice(t,7).concat(e.slice(0,t))}var yr="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),$t="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wr="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),kr=De,gr=De,Mr=De;function Sr(e,t){var s=R(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===!0?ft(s,this._week.dow):e?s[e.day()]:s}function Dr(e){return e===!0?ft(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function vr(e){return e===!0?ft(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Yr(e,t,s){var r,a,n,i=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)n=I([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(n,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(n,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(n,"").toLocaleLowerCase();return s?t==="dddd"?(a=v.call(this._weekdaysParse,i),a!==-1?a:null):t==="ddd"?(a=v.call(this._shortWeekdaysParse,i),a!==-1?a:null):(a=v.call(this._minWeekdaysParse,i),a!==-1?a:null):t==="dddd"?(a=v.call(this._weekdaysParse,i),a!==-1||(a=v.call(this._shortWeekdaysParse,i),a!==-1)?a:(a=v.call(this._minWeekdaysParse,i),a!==-1?a:null)):t==="ddd"?(a=v.call(this._shortWeekdaysParse,i),a!==-1||(a=v.call(this._weekdaysParse,i),a!==-1)?a:(a=v.call(this._minWeekdaysParse,i),a!==-1?a:null)):(a=v.call(this._minWeekdaysParse,i),a!==-1||(a=v.call(this._weekdaysParse,i),a!==-1)?a:(a=v.call(this._shortWeekdaysParse,i),a!==-1?a:null))}function pr(e,t,s){var r,a,n;if(this._weekdaysParseExact)return Yr.call(this,e,t,s);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=I([2e3,1]).day(r),s&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(n="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(n.replace(".",""),"i")),s&&t==="dddd"&&this._fullWeekdaysParse[r].test(e))return r;if(s&&t==="ddd"&&this._shortWeekdaysParse[r].test(e))return r;if(s&&t==="dd"&&this._minWeekdaysParse[r].test(e))return r;if(!s&&this._weekdaysParse[r].test(e))return r}}function Or(e){if(!this.isValid())return e!=null?this:NaN;var t=ye(this,"Day");return e!=null?(e=mr(e,this.localeData()),this.add(e-t,"d")):t}function Tr(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function br(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=_r(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function xr(e){return this._weekdaysParseExact?(w(this,"_weekdaysRegex")||ct.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(w(this,"_weekdaysRegex")||(this._weekdaysRegex=kr),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Nr(e){return this._weekdaysParseExact?(w(this,"_weekdaysRegex")||ct.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(w(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=gr),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wr(e){return this._weekdaysParseExact?(w(this,"_weekdaysRegex")||ct.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(w(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Mr),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function ct(){function e(O,E){return E.length-O.length}var t=[],s=[],r=[],a=[],n,i,u,f,_;for(n=0;n<7;n++)i=I([2e3,1]).day(n),u=z(this.weekdaysMin(i,"")),f=z(this.weekdaysShort(i,"")),_=z(this.weekdays(i,"")),t.push(u),s.push(f),r.push(_),a.push(u),a.push(f),a.push(_);t.sort(e),s.sort(e),r.sort(e),a.sort(e),this._weekdaysRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function mt(){return this.hours()%12||12}function Pr(){return this.hours()||24}h("H",["HH",2],0,"hour");h("h",["hh",2],0,mt);h("k",["kk",2],0,Pr);h("hmm",0,0,function(){return""+mt.apply(this)+U(this.minutes(),2)});h("hmmss",0,0,function(){return""+mt.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)});h("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)});h("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)});function qt(e,t){h(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}qt("a",!0);qt("A",!1);function Bt(e,t){return t._meridiemParse}d("a",Bt);d("A",Bt);d("H",S,dt);d("h",S,he);d("k",S,he);d("HH",S,b);d("hh",S,b);d("kk",S,b);d("hmm",Ut);d("hmmss",It);d("Hmm",Ut);d("Hmmss",It);g(["H","HH"],Y);g(["k","kk"],function(e,t,s){var r=m(e);t[Y]=r===24?0:r});g(["a","A"],function(e,t,s){s._isPm=s._locale.isPM(e),s._meridiem=e});g(["h","hh"],function(e,t,s){t[Y]=m(e),c(s).bigHour=!0});g("hmm",function(e,t,s){var r=e.length-2;t[Y]=m(e.substr(0,r)),t[P]=m(e.substr(r)),c(s).bigHour=!0});g("hmmss",function(e,t,s){var r=e.length-4,a=e.length-2;t[Y]=m(e.substr(0,r)),t[P]=m(e.substr(r,2)),t[j]=m(e.substr(a)),c(s).bigHour=!0});g("Hmm",function(e,t,s){var r=e.length-2;t[Y]=m(e.substr(0,r)),t[P]=m(e.substr(r))});g("Hmmss",function(e,t,s){var r=e.length-4,a=e.length-2;t[Y]=m(e.substr(0,r)),t[P]=m(e.substr(r,2)),t[j]=m(e.substr(a))});function Rr(e){return(e+"").toLowerCase().charAt(0)==="p"}var Fr=/[ap]\.?m?\.?/i,Cr=fe("Hours",!0);function Lr(e,t,s){return e>11?s?"pm":"PM":s?"am":"AM"}var Jt={calendar:Ys,longDateFormat:bs,invalidDate:Ns,ordinal:Ps,dayOfMonthOrdinalParse:Rs,relativeTime:Cs,months:Qs,monthsShort:At,week:ur,weekdays:yr,weekdaysMin:wr,weekdaysShort:$t,meridiemParse:Fr},D={},ce={},ge;function Ur(e,t){var s,r=Math.min(e.length,t.length);for(s=0;s0;){if(a=Ae(n.slice(0,s).join("-")),a)return a;if(r&&r.length>=s&&Ur(n,r)>=s-1)break;s--}t++}return ge}function Hr(e){return!!(e&&e.match("^[^/\\\\]*$"))}function Ae(e){var t=null,s;if(D[e]===void 0&&typeof module<"u"&&module&&module.exports&&Hr(e))try{t=ge._abbr,s=require,s("./locale/"+e),K(t)}catch{D[e]=null}return D[e]}function K(e,t){var s;return e&&(T(t)?s=q(e):s=_t(e,t),s?ge=s:typeof console<"u"&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ge._abbr}function _t(e,t){if(t!==null){var s,r=Jt;if(t.abbr=e,D[e]!=null)Rt("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=D[e]._config;else if(t.parentLocale!=null)if(D[t.parentLocale]!=null)r=D[t.parentLocale]._config;else if(s=Ae(t.parentLocale),s!=null)r=s._config;else return ce[t.parentLocale]||(ce[t.parentLocale]=[]),ce[t.parentLocale].push({name:e,config:t}),null;return D[e]=new nt(Je(r,t)),ce[e]&&ce[e].forEach(function(a){_t(a.name,a.config)}),K(e),D[e]}else return delete D[e],null}function Er(e,t){if(t!=null){var s,r,a=Jt;D[e]!=null&&D[e].parentLocale!=null?D[e].set(Je(D[e]._config,t)):(r=Ae(e),r!=null&&(a=r._config),t=Je(a,t),r==null&&(t.abbr=e),s=new nt(t),s.parentLocale=D[e],D[e]=s),K(e)}else D[e]!=null&&(D[e].parentLocale!=null?(D[e]=D[e].parentLocale,e===K()&&K(e)):D[e]!=null&&delete D[e]);return D[e]}function q(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ge;if(!R(e)){if(t=Ae(e),t)return t;e=[e]}return Ir(e)}function Ar(){return Qe(D)}function yt(e){var t,s=e._a;return s&&c(e).overflow===-2&&(t=s[G]<0||s[G]>11?G:s[L]<1||s[L]>ht(s[p],s[G])?L:s[Y]<0||s[Y]>24||s[Y]===24&&(s[P]!==0||s[j]!==0||s[te]!==0)?Y:s[P]<0||s[P]>59?P:s[j]<0||s[j]>59?j:s[te]<0||s[te]>999?te:-1,c(e)._overflowDayOfYear&&(tL)&&(t=L),c(e)._overflowWeeks&&t===-1&&(t=zs),c(e)._overflowWeekday&&t===-1&&(t=Zs),c(e).overflow=t),e}var Vr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Gr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jr=/Z|[+-]\d\d(?::?\d\d)?/,pe=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],$e=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],zr=/^\/?Date\((-?\d+)/i,Zr=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,$r={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Qt(e){var t,s,r=e._i,a=Vr.exec(r)||Gr.exec(r),n,i,u,f,_=pe.length,O=$e.length;if(a){for(c(e).iso=!0,t=0,s=_;t_e(i)||e._dayOfYear===0)&&(c(e)._overflowDayOfYear=!0),s=we(i,0,e._dayOfYear),e._a[G]=s.getUTCMonth(),e._a[L]=s.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=r[t]=a[t];for(;t<7;t++)e._a[t]=r[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[Y]===24&&e._a[P]===0&&e._a[j]===0&&e._a[te]===0&&(e._nextDay=!0,e._a[Y]=0),e._d=(e._useUTC?we:or).apply(null,r),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Y]=24),e._w&&typeof e._w.d<"u"&&e._w.d!==n&&(c(e).weekdayMismatch=!0)}}function ta(e){var t,s,r,a,n,i,u,f,_;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(n=1,i=4,s=ne(t.GG,e._a[p],ke(M(),1,4).year),r=ne(t.W,1),a=ne(t.E,1),(a<1||a>7)&&(f=!0)):(n=e._locale._week.dow,i=e._locale._week.doy,_=ke(M(),n,i),s=ne(t.gg,e._a[p],_.year),r=ne(t.w,_.week),t.d!=null?(a=t.d,(a<0||a>6)&&(f=!0)):t.e!=null?(a=t.e+n,(t.e<0||t.e>6)&&(f=!0)):a=n),r<1||r>Z(s,n,i)?c(e)._overflowWeeks=!0:f!=null?c(e)._overflowWeekday=!0:(u=Zt(s,r,a,n,i),e._a[p]=u.year,e._dayOfYear=u.dayOfYear)}l.ISO_8601=function(){};l.RFC_2822=function(){};function kt(e){if(e._f===l.ISO_8601){Qt(e);return}if(e._f===l.RFC_2822){Xt(e);return}e._a=[],c(e).empty=!0;var t=""+e._i,s,r,a,n,i,u=t.length,f=0,_,O;for(a=Ft(e._f,e._locale).match(it)||[],O=a.length,s=0;s0&&c(e).unusedInput.push(i),t=t.slice(t.indexOf(r)+r.length),f+=r.length),oe[n]?(r?c(e).empty=!1:c(e).unusedTokens.push(n),js(n,r,e)):e._strict&&!r&&c(e).unusedTokens.push(n);c(e).charsLeftOver=u-f,t.length>0&&c(e).unusedInput.push(t),e._a[Y]<=12&&c(e).bigHour===!0&&e._a[Y]>0&&(c(e).bigHour=void 0),c(e).parsedDateParts=e._a.slice(0),c(e).meridiem=e._meridiem,e._a[Y]=sa(e._locale,e._a[Y],e._meridiem),_=c(e).era,_!==null&&(e._a[p]=e._locale.erasConvertYear(_,e._a[p])),wt(e),yt(e)}function sa(e,t,s){var r;return s==null?t:e.meridiemHour!=null?e.meridiemHour(t,s):(e.isPM!=null&&(r=e.isPM(s),r&&t<12&&(t+=12),!r&&t===12&&(t=0)),t)}function ra(e){var t,s,r,a,n,i,u=!1,f=e._f.length;if(f===0){c(e).invalidFormat=!0,e._d=new Date(NaN);return}for(a=0;athis?this:e:Fe()});function ts(e,t){var s,r;if(t.length===1&&R(t[0])&&(t=t[0]),!t.length)return M();for(s=t[0],r=1;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ya(){if(!T(this._isDSTShifted))return this._isDSTShifted;var e={},t;return at(e,this),e=Kt(e),e._a?(t=e._isUTC?I(e._a):M(e._a),this._isDSTShifted=this.isValid()&&_a(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function pa(){return this.isValid()?!this._isUTC:!1}function Oa(){return this.isValid()?this._isUTC:!1}function rs(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Ta=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,ba=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function C(e,t){var s=e,r=null,a,n,i;return Te(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:$(e)||!isNaN(+e)?(s={},t?s[t]=+e:s.milliseconds=+e):(r=Ta.exec(e))?(a=r[1]==="-"?-1:1,s={y:0,d:m(r[L])*a,h:m(r[Y])*a,m:m(r[P])*a,s:m(r[j])*a,ms:m(Ke(r[te]*1e3))*a}):(r=ba.exec(e))?(a=r[1]==="-"?-1:1,s={y:ee(r[2],a),M:ee(r[3],a),w:ee(r[4],a),d:ee(r[5],a),h:ee(r[6],a),m:ee(r[7],a),s:ee(r[8],a)}):s==null?s={}:typeof s=="object"&&("from"in s||"to"in s)&&(i=xa(M(s.from),M(s.to)),s={},s.ms=i.milliseconds,s.M=i.months),n=new Ve(s),Te(e)&&w(e,"_locale")&&(n._locale=e._locale),Te(e)&&w(e,"_isValid")&&(n._isValid=e._isValid),n}C.fn=Ve.prototype;C.invalid=ma;function ee(e,t){var s=e&&parseFloat(e.replace(",","."));return(isNaN(s)?0:s)*t}function bt(e,t){var s={};return s.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(s.months,"M").isAfter(t)&&--s.months,s.milliseconds=+t-+e.clone().add(s.months,"M"),s}function xa(e,t){var s;return e.isValid()&&t.isValid()?(t=Mt(t,e),e.isBefore(t)?s=bt(e,t):(s=bt(t,e),s.milliseconds=-s.milliseconds,s.months=-s.months),s):{milliseconds:0,months:0}}function as(e,t){return function(s,r){var a,n;return r!==null&&!isNaN(+r)&&(Rt(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=s,s=r,r=n),a=C(s,r),ns(this,a,e),this}}function ns(e,t,s,r){var a=t._milliseconds,n=Ke(t._days),i=Ke(t._months);e.isValid()&&(r=r??!0,i&&Gt(e,ye(e,"Month")+i*s),n&&Et(e,"Date",ye(e,"Date")+n*s),a&&e._d.setTime(e._d.valueOf()+a*s),r&&l.updateOffset(e,n||i))}var Na=as(1,"add"),Wa=as(-1,"subtract");function is(e){return typeof e=="string"||e instanceof String}function Pa(e){return F(e)||Me(e)||is(e)||$(e)||Fa(e)||Ra(e)||e===null||e===void 0}function Ra(e){var t=se(e)&&!st(e),s=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a,n,i=r.length;for(a=0;as.valueOf():s.valueOf()9999?Oe(s,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):H(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Oe(s,"Z")):Oe(s,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function qa(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="",s,r,a,n;return this.isLocal()||(e=this.utcOffset()===0?"moment.utc":"moment.parseZone",t="Z"),s="["+e+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a="-MM-DD[T]HH:mm:ss.SSS",n=t+'[")]',this.format(s+r+a+n)}function Ba(e){e||(e=this.isUtc()?l.defaultFormatUtc:l.defaultFormat);var t=Oe(this,e);return this.localeData().postformat(t)}function Ja(e,t){return this.isValid()&&(F(e)&&e.isValid()||M(e).isValid())?C({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Qa(e){return this.from(M(),e)}function Xa(e,t){return this.isValid()&&(F(e)&&e.isValid()||M(e).isValid())?C({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Ka(e){return this.to(M(),e)}function os(e){var t;return e===void 0?this._locale._abbr:(t=q(e),t!=null&&(this._locale=t),this)}var ls=N("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return e===void 0?this.localeData():this.locale(e)});function us(){return this._locale}var We=1e3,le=60*We,Pe=60*le,ds=(365*400+97)*24*Pe;function ue(e,t){return(e%t+t)%t}function hs(e,t,s){return e<100&&e>=0?new Date(e+400,t,s)-ds:new Date(e,t,s).valueOf()}function fs(e,t,s){return e<100&&e>=0?Date.UTC(e+400,t,s)-ds:Date.UTC(e,t,s)}function en(e){var t,s;if(e=W(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(s=this._isUTC?fs:hs,e){case"year":t=s(this.year(),0,1);break;case"quarter":t=s(this.year(),this.month()-this.month()%3,1);break;case"month":t=s(this.year(),this.month(),1);break;case"week":t=s(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=s(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=s(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=ue(t+(this._isUTC?0:this.utcOffset()*le),Pe);break;case"minute":t=this._d.valueOf(),t-=ue(t,le);break;case"second":t=this._d.valueOf(),t-=ue(t,We);break}return this._d.setTime(t),l.updateOffset(this,!0),this}function tn(e){var t,s;if(e=W(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(s=this._isUTC?fs:hs,e){case"year":t=s(this.year()+1,0,1)-1;break;case"quarter":t=s(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=s(this.year(),this.month()+1,1)-1;break;case"week":t=s(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=s(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=s(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=Pe-ue(t+(this._isUTC?0:this.utcOffset()*le),Pe)-1;break;case"minute":t=this._d.valueOf(),t+=le-ue(t,le)-1;break;case"second":t=this._d.valueOf(),t+=We-ue(t,We)-1;break}return this._d.setTime(t),l.updateOffset(this,!0),this}function sn(){return this._d.valueOf()-(this._offset||0)*6e4}function rn(){return Math.floor(this.valueOf()/1e3)}function an(){return new Date(this.valueOf())}function nn(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function on(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function ln(){return this.isValid()?this.toISOString():null}function un(){return rt(this)}function dn(){return Q({},c(this))}function hn(){return c(this).overflow}function fn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}h("N",0,0,"eraAbbr");h("NN",0,0,"eraAbbr");h("NNN",0,0,"eraAbbr");h("NNNN",0,0,"eraName");h("NNNNN",0,0,"eraNarrow");h("y",["y",1],"yo","eraYear");h("y",["yy",2],0,"eraYear");h("y",["yyy",3],0,"eraYear");h("y",["yyyy",4],0,"eraYear");d("N",St);d("NN",St);d("NNN",St);d("NNNN",vn);d("NNNNN",Yn);g(["N","NN","NNN","NNNN","NNNNN"],function(e,t,s,r){var a=s._locale.erasParse(e,r,s._strict);a?c(s).era=a:c(s).invalidEra=e});d("y",de);d("yy",de);d("yyy",de);d("yyyy",de);d("yo",pn);g(["y","yy","yyy","yyyy"],p);g(["yo"],function(e,t,s,r){var a;s._locale._eraYearOrdinalRegex&&(a=e.match(s._locale._eraYearOrdinalRegex)),s._locale.eraYearOrdinalParse?t[p]=s._locale.eraYearOrdinalParse(e,a):t[p]=parseInt(e,10)});function cn(e,t){var s,r,a,n=this._eras||q("en")._eras;for(s=0,r=n.length;s=0)return n[r]}function _n(e,t){var s=e.since<=e.until?1:-1;return t===void 0?l(e.since).year():l(e.since).year()+(t-e.offset)*s}function yn(){var e,t,s,r=this.localeData().eras();for(e=0,t=r.length;en&&(t=n),Pn.call(this,e,t,s,r,a))}function Pn(e,t,s,r,a){var n=Zt(e,t,s,r,a),i=we(n.year,0,n.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}h("Q",0,"Qo","quarter");d("Q",Ct);g("Q",function(e,t){t[G]=(m(e)-1)*3});function Rn(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}h("D",["DD",2],"Do","date");d("D",S,he);d("DD",S,b);d("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});g(["D","DD"],L);g("Do",function(e,t){t[L]=m(e.match(S)[0])});var ms=fe("Date",!0);h("DDD",["DDDD",3],"DDDo","dayOfYear");d("DDD",Le);d("DDDD",Lt);g(["DDD","DDDD"],function(e,t,s){s._dayOfYear=m(e)});function Fn(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}h("m",["mm",2],0,"minute");d("m",S,dt);d("mm",S,b);g(["m","mm"],P);var Cn=fe("Minutes",!1);h("s",["ss",2],0,"second");d("s",S,dt);d("ss",S,b);g(["s","ss"],j);var Ln=fe("Seconds",!1);h("S",0,0,function(){return~~(this.millisecond()/100)});h(0,["SS",2],0,function(){return~~(this.millisecond()/10)});h(0,["SSS",3],0,"millisecond");h(0,["SSSS",4],0,function(){return this.millisecond()*10});h(0,["SSSSS",5],0,function(){return this.millisecond()*100});h(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});h(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});h(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});h(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});d("S",Le,Ct);d("SS",Le,b);d("SSS",Le,Lt);var X,_s;for(X="SSSS";X.length<=9;X+="S")d(X,de);function Un(e,t){t[te]=m(("0."+e)*1e3)}for(X="S";X.length<=9;X+="S")g(X,Un);_s=fe("Milliseconds",!1);h("z",0,0,"zoneAbbr");h("zz",0,0,"zoneName");function In(){return this._isUTC?"UTC":""}function Hn(){return this._isUTC?"Coordinated Universal Time":""}var o=Se.prototype;o.add=Na;o.calendar=Ua;o.clone=Ia;o.diff=za;o.endOf=tn;o.format=Ba;o.from=Ja;o.fromNow=Qa;o.to=Xa;o.toNow=Ka;o.get=qs;o.invalidAt=hn;o.isAfter=Ha;o.isBefore=Ea;o.isBetween=Aa;o.isSame=Va;o.isSameOrAfter=Ga;o.isSameOrBefore=ja;o.isValid=un;o.lang=ls;o.locale=os;o.localeData=us;o.max=la;o.min=oa;o.parsingFlags=dn;o.set=Bs;o.startOf=en;o.subtract=Wa;o.toArray=nn;o.toObject=on;o.toDate=an;o.toISOString=$a;o.inspect=qa;typeof Symbol<"u"&&Symbol.for!=null&&(o[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});o.toJSON=ln;o.toString=Za;o.unix=rn;o.valueOf=sn;o.creationData=fn;o.eraName=yn;o.eraNarrow=wn;o.eraAbbr=kn;o.eraYear=gn;o.year=Ht;o.isLeapYear=$s;o.weekYear=On;o.isoWeekYear=Tn;o.quarter=o.quarters=Rn;o.month=jt;o.daysInMonth=ar;o.week=o.weeks=fr;o.isoWeek=o.isoWeeks=cr;o.weeksInYear=Nn;o.weeksInWeekYear=Wn;o.isoWeeksInYear=bn;o.isoWeeksInISOWeekYear=xn;o.date=ms;o.day=o.days=Or;o.weekday=Tr;o.isoWeekday=br;o.dayOfYear=Fn;o.hour=o.hours=Cr;o.minute=o.minutes=Cn;o.second=o.seconds=Ln;o.millisecond=o.milliseconds=_s;o.utcOffset=wa;o.utc=ga;o.local=Ma;o.parseZone=Sa;o.hasAlignedHourOffset=Da;o.isDST=va;o.isLocal=pa;o.isUtcOffset=Oa;o.isUtc=rs;o.isUTC=rs;o.zoneAbbr=In;o.zoneName=Hn;o.dates=N("dates accessor is deprecated. Use date instead.",ms);o.months=N("months accessor is deprecated. Use month instead",jt);o.years=N("years accessor is deprecated. Use year instead",Ht);o.zone=N("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",ka);o.isDSTShifted=N("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ya);function En(e){return M(e*1e3)}function An(){return M.apply(null,arguments).parseZone()}function ys(e){return e}var k=nt.prototype;k.calendar=ps;k.longDateFormat=xs;k.invalidDate=Ws;k.ordinal=Fs;k.preparse=ys;k.postformat=ys;k.relativeTime=Ls;k.pastFuture=Us;k.set=vs;k.eras=cn;k.erasParse=mn;k.erasConvertYear=_n;k.erasAbbrRegex=Sn;k.erasNameRegex=Mn;k.erasNarrowRegex=Dn;k.months=er;k.monthsShort=tr;k.monthsParse=rr;k.monthsRegex=ir;k.monthsShortRegex=nr;k.week=lr;k.firstDayOfYear=hr;k.firstDayOfWeek=dr;k.weekdays=Sr;k.weekdaysMin=vr;k.weekdaysShort=Dr;k.weekdaysParse=pr;k.weekdaysRegex=xr;k.weekdaysShortRegex=Nr;k.weekdaysMinRegex=Wr;k.isPM=Rr;k.meridiem=Lr;function Re(e,t,s,r){var a=q(),n=I().set(r,t);return a[s](n,e)}function ws(e,t,s){if($(e)&&(t=e,e=void 0),e=e||"",t!=null)return Re(e,t,s,"month");var r,a=[];for(r=0;r<12;r++)a[r]=Re(e,r,s,"month");return a}function vt(e,t,s,r){typeof e=="boolean"?($(t)&&(s=t,t=void 0),t=t||""):(t=e,s=t,e=!1,$(t)&&(s=t,t=void 0),t=t||"");var a=q(),n=e?a._week.dow:0,i,u=[];if(s!=null)return Re(t,(s+n)%7,r,"day");for(i=0;i<7;i++)u[i]=Re(t,(i+n)%7,r,"day");return u}function Vn(e,t){return ws(e,t,"months")}function Gn(e,t){return ws(e,t,"monthsShort")}function jn(e,t,s){return vt(e,t,s,"weekdays")}function zn(e,t,s){return vt(e,t,s,"weekdaysShort")}function Zn(e,t,s){return vt(e,t,s,"weekdaysMin")}K("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,s=m(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+s}});l.lang=N("moment.lang is deprecated. Use moment.locale instead.",K);l.langData=N("moment.langData is deprecated. Use moment.localeData instead.",q);var A=Math.abs;function $n(){var e=this._data;return this._milliseconds=A(this._milliseconds),this._days=A(this._days),this._months=A(this._months),e.milliseconds=A(e.milliseconds),e.seconds=A(e.seconds),e.minutes=A(e.minutes),e.hours=A(e.hours),e.months=A(e.months),e.years=A(e.years),this}function ks(e,t,s,r){var a=C(t,s);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function qn(e,t){return ks(this,e,t,1)}function Bn(e,t){return ks(this,e,t,-1)}function xt(e){return e<0?Math.floor(e):Math.ceil(e)}function Jn(){var e=this._milliseconds,t=this._days,s=this._months,r=this._data,a,n,i,u,f;return e>=0&&t>=0&&s>=0||e<=0&&t<=0&&s<=0||(e+=xt(tt(s)+t)*864e5,t=0,s=0),r.milliseconds=e%1e3,a=x(e/1e3),r.seconds=a%60,n=x(a/60),r.minutes=n%60,i=x(n/60),r.hours=i%24,t+=x(i/24),f=x(gs(t)),s+=f,t-=xt(tt(f)),u=x(s/12),s%=12,r.days=t,r.months=s,r.years=u,this}function gs(e){return e*4800/146097}function tt(e){return e*146097/4800}function Qn(e){if(!this.isValid())return NaN;var t,s,r=this._milliseconds;if(e=W(e),e==="month"||e==="quarter"||e==="year")switch(t=this._days+r/864e5,s=this._months+gs(t),e){case"month":return s;case"quarter":return s/3;case"year":return s/12}else switch(t=this._days+Math.round(tt(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return t*24+r/36e5;case"minute":return t*1440+r/6e4;case"second":return t*86400+r/1e3;case"millisecond":return Math.floor(t*864e5)+r;default:throw new Error("Unknown unit "+e)}}function B(e){return function(){return this.as(e)}}var Ms=B("ms"),Xn=B("s"),Kn=B("m"),ei=B("h"),ti=B("d"),si=B("w"),ri=B("M"),ai=B("Q"),ni=B("y"),ii=Ms;function oi(){return C(this)}function li(e){return e=W(e),this.isValid()?this[e+"s"]():NaN}function re(e){return function(){return this.isValid()?this._data[e]:NaN}}var ui=re("milliseconds"),di=re("seconds"),hi=re("minutes"),fi=re("hours"),ci=re("days"),mi=re("months"),_i=re("years");function yi(){return x(this.days()/7)}var V=Math.round,ie={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function wi(e,t,s,r,a){return a.relativeTime(t||1,!!s,e,r)}function ki(e,t,s,r){var a=C(e).abs(),n=V(a.as("s")),i=V(a.as("m")),u=V(a.as("h")),f=V(a.as("d")),_=V(a.as("M")),O=V(a.as("w")),E=V(a.as("y")),J=n<=s.ss&&["s",n]||n0,J[4]=r,wi.apply(null,J)}function gi(e){return e===void 0?V:typeof e=="function"?(V=e,!0):!1}function Mi(e,t){return ie[e]===void 0?!1:t===void 0?ie[e]:(ie[e]=t,e==="s"&&(ie.ss=t-1),!0)}function Si(e,t){if(!this.isValid())return this.localeData().invalidDate();var s=!1,r=ie,a,n;return typeof e=="object"&&(t=e,e=!1),typeof e=="boolean"&&(s=e),typeof t=="object"&&(r=Object.assign({},ie,t),t.s!=null&&t.ss==null&&(r.ss=t.s-1)),a=this.localeData(),n=ki(this,!s,r,a),s&&(n=a.pastFuture(+this,n)),a.postformat(n)}var qe=Math.abs;function ae(e){return(e>0)-(e<0)||+e}function je(){if(!this.isValid())return this.localeData().invalidDate();var e=qe(this._milliseconds)/1e3,t=qe(this._days),s=qe(this._months),r,a,n,i,u=this.asSeconds(),f,_,O,E;return u?(r=x(e/60),a=x(r/60),e%=60,r%=60,n=x(s/12),s%=12,i=e?e.toFixed(3).replace(/\.?0+$/,""):"",f=u<0?"-":"",_=ae(this._months)!==ae(u)?"-":"",O=ae(this._days)!==ae(u)?"-":"",E=ae(this._milliseconds)!==ae(u)?"-":"",f+"P"+(n?_+n+"Y":"")+(s?_+s+"M":"")+(t?O+t+"D":"")+(a||r||e?"T":"")+(a?E+a+"H":"")+(r?E+r+"M":"")+(e?E+i+"S":"")):"P0D"}var y=Ve.prototype;y.isValid=ca;y.abs=$n;y.add=qn;y.subtract=Bn;y.as=Qn;y.asMilliseconds=Ms;y.asSeconds=Xn;y.asMinutes=Kn;y.asHours=ei;y.asDays=ti;y.asWeeks=si;y.asMonths=ri;y.asQuarters=ai;y.asYears=ni;y.valueOf=ii;y._bubble=Jn;y.clone=oi;y.get=li;y.milliseconds=ui;y.seconds=di;y.minutes=hi;y.hours=fi;y.days=ci;y.weeks=yi;y.months=mi;y.years=_i;y.humanize=Si;y.toISOString=je;y.toString=je;y.toJSON=je;y.locale=os;y.localeData=us;y.toIsoString=N("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",je);y.lang=ls;h("X",0,0,"unix");h("x",0,0,"valueOf");d("x",Ie);d("X",As);g("X",function(e,t,s){s._d=new Date(parseFloat(e)*1e3)});g("x",function(e,t,s){s._d=new Date(m(e))});//! moment.js -l.version="2.30.1";Ss(M);l.fn=o;l.min=ua;l.max=da;l.now=ha;l.utc=I;l.unix=En;l.months=Vn;l.isDate=Me;l.locale=K;l.invalid=Fe;l.duration=C;l.isMoment=F;l.weekdays=jn;l.parseZone=An;l.localeData=q;l.isDuration=Te;l.monthsShort=Gn;l.weekdaysMin=Zn;l.defineLocale=_t;l.updateLocale=Er;l.locales=Ar;l.weekdaysShort=zn;l.normalizeUnits=W;l.relativeTimeRounding=gi;l.relativeTimeThreshold=Mi;l.calendarFormat=La;l.prototype=o;l.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const Di=Object.freeze(Object.defineProperty({__proto__:null,default:l},Symbol.toStringTag,{value:"Module"}));export{l as h,Di as m}; diff --git a/public/build/assets/nami-BuYycVV_.png b/public/build/assets/nami-BuYycVV_.png deleted file mode 100644 index 13533939d..000000000 Binary files a/public/build/assets/nami-BuYycVV_.png and /dev/null differ diff --git a/public/build/assets/nlbrands-DL1esRqV.png b/public/build/assets/nlbrands-DL1esRqV.png deleted file mode 100644 index 7380832e2..000000000 Binary files a/public/build/assets/nlbrands-DL1esRqV.png and /dev/null differ diff --git a/public/build/assets/phone-BJLJ6yGn.png b/public/build/assets/phone-BJLJ6yGn.png deleted file mode 100644 index 1d871d962..000000000 Binary files a/public/build/assets/phone-BJLJ6yGn.png and /dev/null differ diff --git a/public/build/assets/phone-lg_u1nSM.js b/public/build/assets/phone-lg_u1nSM.js deleted file mode 100644 index e40c3a0e5..000000000 --- a/public/build/assets/phone-lg_u1nSM.js +++ /dev/null @@ -1 +0,0 @@ -const _="/build/assets/camera-CVAaxWTW.png",a="/build/assets/phone-BJLJ6yGn.png";export{_,a}; diff --git a/public/build/assets/plastic_bottles-DUxEtUtl.jpg b/public/build/assets/plastic_bottles-DUxEtUtl.jpg deleted file mode 100644 index 9c616c58d..000000000 Binary files a/public/build/assets/plastic_bottles-DUxEtUtl.jpg and /dev/null differ diff --git a/public/build/assets/science-foundation-ireland-Cs5Mx-ee.png b/public/build/assets/science-foundation-ireland-Cs5Mx-ee.png deleted file mode 100644 index 5e520659c..000000000 Binary files a/public/build/assets/science-foundation-ireland-Cs5Mx-ee.png and /dev/null differ diff --git a/public/build/assets/slack-brand-logo-BtMHv9ZB.png b/public/build/assets/slack-brand-logo-BtMHv9ZB.png deleted file mode 100644 index 0ad21bdcf..000000000 Binary files a/public/build/assets/slack-brand-logo-BtMHv9ZB.png and /dev/null differ diff --git a/public/build/assets/slack-screenshot-Cdmb1k2Q.png b/public/build/assets/slack-screenshot-Cdmb1k2Q.png deleted file mode 100644 index c62287fcc..000000000 Binary files a/public/build/assets/slack-screenshot-Cdmb1k2Q.png and /dev/null differ diff --git a/public/build/assets/tree-BQ8u605e.png b/public/build/assets/tree-BQ8u605e.png deleted file mode 100644 index 6be486330..000000000 Binary files a/public/build/assets/tree-BQ8u605e.png and /dev/null differ diff --git a/public/build/assets/twitter2-fyDWX9iQ.png b/public/build/assets/twitter2-fyDWX9iQ.png deleted file mode 100644 index 18eefb0e6..000000000 Binary files a/public/build/assets/twitter2-fyDWX9iQ.png and /dev/null differ diff --git a/public/build/assets/urban-D96wAs5R.jpg b/public/build/assets/urban-D96wAs5R.jpg deleted file mode 100644 index 56074f9be..000000000 Binary files a/public/build/assets/urban-D96wAs5R.jpg and /dev/null differ diff --git a/public/build/assets/vue-loading-Bx4XiriG.css b/public/build/assets/vue-loading-Bx4XiriG.css deleted file mode 100644 index f13e5f573..000000000 --- a/public/build/assets/vue-loading-Bx4XiriG.css +++ /dev/null @@ -1 +0,0 @@ -.vld-shown{overflow:hidden}.vld-overlay{bottom:0;left:0;position:absolute;right:0;top:0;align-items:center;display:none;justify-content:center;overflow:hidden;z-index:9999}.vld-overlay.is-active{display:flex}.vld-overlay.is-full-page{z-index:9999;position:fixed}.vld-overlay .vld-background{bottom:0;left:0;position:absolute;right:0;top:0;background:#fff;opacity:.5}.vld-overlay .vld-icon,.vld-parent{position:relative} diff --git a/public/build/assets/vue-recaptcha.es-KbLMYh7d.js b/public/build/assets/vue-recaptcha.es-KbLMYh7d.js deleted file mode 100644 index 3a7b4a4d8..000000000 --- a/public/build/assets/vue-recaptcha.es-KbLMYh7d.js +++ /dev/null @@ -1 +0,0 @@ -function d(){return d=Object.assign||function(r){for(var e=1;e"u"||(this.assertLoaded(),this.wait().then(function(){return window.grecaptcha.reset(t)}))},execute:function(t){typeof t>"u"||(this.assertLoaded(),this.wait().then(function(){return window.grecaptcha.execute(t)}))},checkRecaptchaLoad:function(){u.call(window,"grecaptcha")&&u.call(window.grecaptcha,"render")&&this.notify()},assertLoaded:function(){if(!r.resolved())throw new Error("ReCAPTCHA has not been loaded")}}}var a=l();typeof window<"u"&&(window.vueRecaptchaApiLoaded=a.notify);var m={name:"VueRecaptcha",props:{sitekey:{type:String,required:!0},theme:{type:String},badge:{type:String},type:{type:String},size:{type:String},tabindex:{type:String},loadRecaptchaScript:{type:Boolean,default:!1},recaptchaScriptId:{type:String,default:"__RECAPTCHA_SCRIPT"},recaptchaHost:{type:String,default:"www.google.com"},language:{type:String,default:""}},beforeMount:function(){if(this.loadRecaptchaScript&&!document.getElementById(this.recaptchaScriptId)){var e=document.createElement("script");e.id=this.recaptchaScriptId,e.src="https://"+this.recaptchaHost+"/recaptcha/api.js?onload=vueRecaptchaApiLoaded&render=explicit&hl="+this.language,e.async=!0,e.defer=!0,document.head.appendChild(e)}},mounted:function(){var e=this;a.checkRecaptchaLoad();var t=d({},this.$props,{callback:this.emitVerify,"expired-callback":this.emitExpired,"error-callback":this.emitError}),n=this.$slots.default?this.$el.children[0]:this.$el;a.render(n,t,function(i){e.$widgetId=i,e.$emit("render",i)})},methods:{reset:function(){a.reset(this.$widgetId)},execute:function(){a.execute(this.$widgetId)},emitVerify:function(e){this.$emit("verify",e)},emitExpired:function(){this.$emit("expired")},emitError:function(){this.$emit("error")}},render:function(e){return e("div",{},this.$slots.default)}};export{m as V}; diff --git a/public/build/assets/world-BpJiS2Th.png b/public/build/assets/world-BpJiS2Th.png deleted file mode 100644 index 8d791b004..000000000 Binary files a/public/build/assets/world-BpJiS2Th.png and /dev/null differ diff --git a/public/build/assets/zoom-brand-logo-DPOquhA7.png b/public/build/assets/zoom-brand-logo-DPOquhA7.png deleted file mode 100644 index 8520193b0..000000000 Binary files a/public/build/assets/zoom-brand-logo-DPOquhA7.png and /dev/null differ diff --git a/public/css/MarkerCluster.Default.css b/public/css/MarkerCluster.Default.css deleted file mode 100755 index bbc8c9fb0..000000000 --- a/public/css/MarkerCluster.Default.css +++ /dev/null @@ -1,60 +0,0 @@ -.marker-cluster-small { - background-color: rgba(181, 226, 140, 0.6); - } -.marker-cluster-small div { - background-color: rgba(110, 204, 57, 0.6); - } - -.marker-cluster-medium { - background-color: rgba(241, 211, 87, 0.6); - } -.marker-cluster-medium div { - background-color: rgba(240, 194, 12, 0.6); - } - -.marker-cluster-large { - background-color: rgba(253, 156, 115, 0.6); - } -.marker-cluster-large div { - background-color: rgba(241, 128, 23, 0.6); - } - - /* IE 6-8 fallback colors */ -.leaflet-oldie .marker-cluster-small { - background-color: rgb(181, 226, 140); - } -.leaflet-oldie .marker-cluster-small div { - background-color: rgb(110, 204, 57); - } - -.leaflet-oldie .marker-cluster-medium { - background-color: rgb(241, 211, 87); - } -.leaflet-oldie .marker-cluster-medium div { - background-color: rgb(240, 194, 12); - } - -.leaflet-oldie .marker-cluster-large { - background-color: rgb(253, 156, 115); - } -.leaflet-oldie .marker-cluster-large div { - background-color: rgb(241, 128, 23); -} - -.marker-cluster { - background-clip: padding-box; - border-radius: 20px; - } -.marker-cluster div { - width: 30px; - height: 30px; - margin-left: 5px; - margin-top: 5px; - - text-align: center; - border-radius: 15px; - font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; - } -.marker-cluster span { - line-height: 30px; - } \ No newline at end of file diff --git a/public/css/app.css b/public/css/app.css deleted file mode 100644 index da1aea715..000000000 --- a/public/css/app.css +++ /dev/null @@ -1,575 +0,0 @@ -#app .wow { - visibility: hidden; -} - -html { - height: 100vh; -} - -/* Hide scrollbar for Chrome, Safari and Opera */ - -.scrollbar-hidden::-webkit-scrollbar { - display: none; -} - -/* Hide scrollbar for IE, Edge add Firefox */ - -.scrollbar-hidden { - -ms-overflow-style: none; - /* for Internet Explorer, Edge */ - scrollbar-width: none; - /* for Firefox */ - overflow-y: scroll; -} - -/* Extra leaflet styles */ - -.info { - padding: 6px 8px; - font: 14px/16px Arial, Helvetica, sans-serif; - background: white; - background: rgba(255, 255, 255, 0.8); - box-shadow: 0 0 15px rgba(0, 0, 0, 0.2); - border-radius: 5px; -} - -.info h4 { - margin: 0 0 5px; - color: #777; -} - -.legend { - text-align: left; - line-height: 18px; - color: #555; -} - -.legend i { - width: 18px; - height: 18px; - float: left; - margin-right: 8px; - opacity: 0.7; -} - -.leaflet-pane .leaflet-shadow-pane { - display: none; -} - -.leaflet-popup-content-wrapper { - padding: 0 !important; -} - -.leaflet-popup-content { - margin: 0 !important; - overflow-y: auto; - border-top-left-radius: 6px; - border-top-right-radius: 6px; -} - -.leaflet-popup-content div:last-of-type { - margin-bottom: 0 !important; -} - -.leaflet-popup-content div:first-of-type { - margin-top: 0 !important; -} - -.leaflet-litter-img-container { - position: relative; - padding: 1.2em; -} - -.leaflet-litter-img-container div { - color: black !important; - font-size: 12px; - word-break: break-word; - max-width: 220px; - margin: 4px 0; -} - -.leaflet-litter-img-container .team { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 180px; -} - -.leaflet-litter-img-container .link { - position: absolute; - bottom: 10px; - right: 16px; - font-size: 1.2rem; -} - -.leaflet-litter-img-container .social-container { - display: flex; - flex-direction: row; - gap: 0.5rem; - transform: translate(0, 5px); -} - -.leaflet-litter-img-container .social-container a { - width: 1.5rem; - font-size: 1.2rem; - margin-top: 0.25rem; -} - -.leaflet-litter-img-container .link:hover, -.leaflet-litter-img-container .social-container a:hover { - transform: scale(1.1); -} - -.leaflet-litter-img { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - -o-object-fit: cover; - object-fit: cover; - cursor: pointer; -} - -/* Tablet and above */ - -@media (min-width: 768px) { - .leaflet-litter-img-container div { - font-size: 14px; - max-width: 300px; - margin: 10px 0; - } - - .leaflet-litter-img-container .team { - max-width: 280px; - } -} - -/* End extra leaflet styles */ - -.locations-container { - display: flex; - flex-direction: column; - height: calc(100% - 72px); -} - -.app-icon { - cursor: pointer; - max-height: 10em; - margin-top: -2em; - margin-bottom: -2em; -} - -.country-back { - font-size: 0.3em; - margin: auto 0; - padding-right: 1em; -} - -.error { - color: #e74c3c; - font-weight: 600; -} - -.flex { - display: flex; -} - -.flex-1 { - flex: 1; -} - -.font-800 { - font-weight: 800 !important; -} - -.fullheight { - min-height: calc(100vh - 82px); -} - -.h100 { - height: 100%; -} - -.hov { - transition-duration: 0.3s; -} - -.hov:hover { - box-shadow: 0 20px 30px -11px rgba(31, 35, 65, 0.37); - transform: translate(0px, -5px); -} - -.is-black { - color: black !important; -} - -.is-green { - color: green; -} - -.is-red { - color: red; -} - -.jc { - justify-content: center; -} - -.leaflet-popup-close-button { - display: none !important; -} - -.ma { - margin: auto; -} - -.mb0 { - margin-bottom: 0 !important; -} - -.mb-05 { - margin-bottom: 0.5em; -} - -.mb1 { - margin-bottom: 1em !important; -} - -.mb1-5 { - margin-bottom: 1.5em !important; -} - -.mb1em { - margin-bottom: 1em !important; -} - -.mb2 { - margin-bottom: 2em !important; -} - -.mb2r { - margin-bottom: 2rem !important; -} - -.mb3 { - margin-bottom: 3em !important; -} - -.mb5 { - margin-bottom: 5em; -} - -.mb5em { - margin-bottom: 5em !important; -} - -.ml1 { - margin-left: 1em; -} - -.mr1 { - margin-right: 1em; -} - -.mt1 { - margin-top: 1em; -} - -.mt2 { - margin-top: 2em; -} - -.mt3 { - margin-top: 3em; -} - -.mt4 { - margin-top: 4em; -} - -.mt5 { - margin-top: 5em; -} - -.mt5em { - margin-top: 5em !important; -} - -.mtba { - margin: auto 0; -} - -.mtb1 { - margin-top: 1em; - margin-bottom: 1em; -} - -.p2 { - padding: 2em !important; -} - -.pb1 { - padding-bottom: 1em; -} - -.pb1em { - padding-bottom: 1em; -} - -.pb2 { - padding-bottom: 2em !important; -} - -.pb3 { - padding-bottom: 3em !important; -} - -.pointer { - cursor: pointer; -} - -.pl3 { - padding-left: 3em; -} - -.pr1em { - padding-right: 1em; -} - -.pr2em { - padding-right: 2em; -} - -.pt0 { - padding-top: 0 !important; -} - -.pt1 { - padding-top: 1em; -} - -.pt2 { - padding-top: 2em; -} - -.pt3 { - padding-top: 3em; -} - -.pt5 { - padding-top: 5em; -} - -.pt7 { - padding-top: 7em; -} - -.search-fixed-height { - max-height: 18em; - overflow-y: auto; -} - -.show-mobile { - display: none; -} - -.success-privacy-text { - color: green; - font-weight: 600; - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; -} - -.failed-privacy-text { - color: red; - font-weight: 600; - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; -} - -.suggest-item { - color: #363636 !important; -} - -.vfc-main-container { - width: 21em !important; -} - -.vh100 { - height: 100vh; -} - -.vh65 { - height: 65vh; -} - -.vue-simple-suggest.designed .input-wrapper input { - color: #363636 !important; -} - -.w10 { - width: 10em; -} - -.w50 { - width: 50%; -} - -.w100 { - width: 100%; -} - -/** -* Tooltip Styles -*/ - -.tooltip { - position: relative; -} - -.tooltip .tooltip-text { - visibility: hidden; - background-color: black; - color: #fff; - text-align: center; - border-radius: 6px; - padding: 4px 8px; - position: absolute; - z-index: 30; - bottom: 115%; - opacity: 0; - transition: opacity 0.3s; -} - -.tooltip:hover .tooltip-text { - visibility: visible; - opacity: 0.8; -} - -.tooltip .tooltip-text::after { - content: " "; - position: absolute; - top: 100%; - /* At the bottom of the tooltip */ - left: 50%; - margin-left: -5px; - border-width: 5px; - border-style: solid; - border-color: black transparent transparent transparent; -} - -/* Switch checkbox */ - -.switch-container { - display: flex; -} - -.switch-container .switch { - position: relative; - display: inline-block; - width: 50px; - height: 25px; -} - -.switch-container .switch input { - opacity: 0; - width: 0; - height: 0; -} - -.switch-container .slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #f14668; - transition: 0.4s; - border-radius: 34px; -} - -.switch-container .slider:before { - position: absolute; - content: ""; - border-radius: 50%; - height: 18px; - width: 18px; - left: 4px; - bottom: 4px; - background-color: white; - transition: 0.4s; -} - -.switch-container input:checked + .slider { - background-color: #00d1b2; -} - -.switch-container input:focus + .slider { - box-shadow: 0 0 1px #00d1b2; -} - -.switch-container input:checked + .slider:before { - transform: translateX(24px); -} - -/* End Switch checkbox */ - -/* Desktop view */ - -@media (min-width: 1024px) { - .navbar-item { - color: white; - } -} - -/* Mobile view */ - -@media (max-width: 1024px) { - .navbar-item { - color: black; - } -} - -/* Mobile view */ - -@media (max-width: 768px) { - .app-icon { - max-height: 9em !important; - } - - /* Profile - LitterPicker */ - - .pagination { - display: flex; - } - - .page-item { - flex: 1; - } - - #image-metadata, - #image-counts { - display: none; - } - - .expand-mobile { - flex: 1; - } - - .mobile-litter-box { - width: 50%; - margin-left: 25%; - } - - #photo-id { - display: none; - } - - .show-mobile { - display: block; - } -} - -@media screen and (max-width: 768px) and (max-width: 480px) { - .p-10-mob { - padding: 10px; - /* Padding for screens smaller than 480px */ - } -} diff --git a/public/css/bulma.css b/public/css/bulma.css deleted file mode 100644 index ecb8eeb9c..000000000 --- a/public/css/bulma.css +++ /dev/null @@ -1,11339 +0,0 @@ -/*! bulma.io v0.9.0 | MIT License | github.com/jgthms/bulma */ -@-webkit-keyframes spinAround { - from { - transform: rotate(0deg); - } - to { - transform: rotate(359deg); - } -} -@keyframes spinAround { - from { - transform: rotate(0deg); - } - to { - transform: rotate(359deg); - } -} - -.delete, .modal-close, .button, .file, .breadcrumb, .pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis, .tabs, .is-unselectable { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { - border: 3px solid transparent; - border-radius: 2px; - border-right: 0; - border-top: 0; - content: " "; - display: block; - height: 0.625em; - margin-top: -0.4375em; - pointer-events: none; - position: absolute; - top: 50%; - transform: rotate(-45deg); - transform-origin: center; - width: 0.625em; -} - -.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), -.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) { - margin-bottom: 1.5rem; -} - -.delete, .modal-close { - -moz-appearance: none; - -webkit-appearance: none; - background-color: rgba(10, 10, 10, 0.2); - border: none; - border-radius: 290486px; - cursor: pointer; - pointer-events: auto; - display: inline-block; - flex-grow: 0; - flex-shrink: 0; - font-size: 0; - height: 20px; - max-height: 20px; - max-width: 20px; - min-height: 20px; - min-width: 20px; - outline: none; - position: relative; - vertical-align: top; - width: 20px; -} - -.delete::before, .modal-close::before, .delete::after, .modal-close::after { - background-color: white; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; -} - -.delete::before, .modal-close::before { - height: 2px; - width: 50%; -} - -.delete::after, .modal-close::after { - height: 50%; - width: 2px; -} - -.delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { - background-color: rgba(10, 10, 10, 0.3); -} - -.delete:active, .modal-close:active { - background-color: rgba(10, 10, 10, 0.4); -} - -.is-small.delete, .is-small.modal-close { - height: 16px; - max-height: 16px; - max-width: 16px; - min-height: 16px; - min-width: 16px; - width: 16px; -} - -.is-medium.delete, .is-medium.modal-close { - height: 24px; - max-height: 24px; - max-width: 24px; - min-height: 24px; - min-width: 24px; - width: 24px; -} - -.is-large.delete, .is-large.modal-close { - height: 32px; - max-height: 32px; - max-width: 32px; - min-height: 32px; - min-width: 32px; - width: 32px; -} - -.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { - -webkit-animation: spinAround 500ms infinite linear; - animation: spinAround 500ms infinite linear; - border: 2px solid #dbdbdb; - border-radius: 290486px; - border-right-color: transparent; - border-top-color: transparent; - content: ""; - display: block; - height: 1em; - position: relative; - width: 1em; -} - -.image.is-square img, -.image.is-square .has-ratio, .image.is-1by1 img, -.image.is-1by1 .has-ratio, .image.is-5by4 img, -.image.is-5by4 .has-ratio, .image.is-4by3 img, -.image.is-4by3 .has-ratio, .image.is-3by2 img, -.image.is-3by2 .has-ratio, .image.is-5by3 img, -.image.is-5by3 .has-ratio, .image.is-16by9 img, -.image.is-16by9 .has-ratio, .image.is-2by1 img, -.image.is-2by1 .has-ratio, .image.is-3by1 img, -.image.is-3by1 .has-ratio, .image.is-4by5 img, -.image.is-4by5 .has-ratio, .image.is-3by4 img, -.image.is-3by4 .has-ratio, .image.is-2by3 img, -.image.is-2by3 .has-ratio, .image.is-3by5 img, -.image.is-3by5 .has-ratio, .image.is-9by16 img, -.image.is-9by16 .has-ratio, .image.is-1by2 img, -.image.is-1by2 .has-ratio, .image.is-1by3 img, -.image.is-1by3 .has-ratio, .modal, .modal-background, .is-overlay, .hero-video { - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; -} - -.button, .input, .textarea, .select select, .file-cta, -.file-name, .pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis { - -moz-appearance: none; - -webkit-appearance: none; - align-items: center; - border: 1px solid transparent; - border-radius: 4px; - box-shadow: none; - display: inline-flex; - font-size: 1rem; - height: 2.5em; - justify-content: flex-start; - line-height: 1.5; - padding-bottom: calc(0.5em - 1px); - padding-left: calc(0.75em - 1px); - padding-right: calc(0.75em - 1px); - padding-top: calc(0.5em - 1px); - position: relative; - vertical-align: top; -} - -.button:focus, .input:focus, .textarea:focus, .select select:focus, .file-cta:focus, -.file-name:focus, .pagination-previous:focus, -.pagination-next:focus, -.pagination-link:focus, -.pagination-ellipsis:focus, .is-focused.button, .is-focused.input, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, -.is-focused.file-name, .is-focused.pagination-previous, -.is-focused.pagination-next, -.is-focused.pagination-link, -.is-focused.pagination-ellipsis, .button:active, .input:active, .textarea:active, .select select:active, .file-cta:active, -.file-name:active, .pagination-previous:active, -.pagination-next:active, -.pagination-link:active, -.pagination-ellipsis:active, .is-active.button, .is-active.input, .is-active.textarea, .select select.is-active, .is-active.file-cta, -.is-active.file-name, .is-active.pagination-previous, -.is-active.pagination-next, -.is-active.pagination-link, -.is-active.pagination-ellipsis { - outline: none; -} - -.button[disabled], .input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], -.file-name[disabled], .pagination-previous[disabled], -.pagination-next[disabled], -.pagination-link[disabled], -.pagination-ellipsis[disabled], -fieldset[disabled] .button, -fieldset[disabled] .input, -fieldset[disabled] .textarea, -fieldset[disabled] .select select, -.select fieldset[disabled] select, -fieldset[disabled] .file-cta, -fieldset[disabled] .file-name, -fieldset[disabled] .pagination-previous, -fieldset[disabled] .pagination-next, -fieldset[disabled] .pagination-link, -fieldset[disabled] .pagination-ellipsis { - cursor: not-allowed; -} - -/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */ -html, -body, -p, -ol, -ul, -li, -dl, -dt, -dd, -blockquote, -figure, -fieldset, -legend, -textarea, -pre, -iframe, -hr, -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - padding: 0; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 100%; - font-weight: normal; -} - -ul { - list-style: none; -} - -button, -input, -select, -textarea { - margin: 0; -} - -html { - box-sizing: border-box; -} - -*, *::before, *::after { - box-sizing: inherit; -} - -img, -video { - height: auto; - max-width: 100%; -} - -iframe { - border: 0; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} - -td:not([align]), -th:not([align]) { - text-align: inherit; -} - -html { - background-color: white; - font-size: 16px; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - min-width: 300px; - overflow-x: hidden; - overflow-y: scroll; - text-rendering: optimizeLegibility; - -webkit-text-size-adjust: 100%; - -moz-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - text-size-adjust: 100%; -} - -article, -aside, -figure, -footer, -header, -hgroup, -section { - display: block; -} - -body, -button, -input, -select, -textarea { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; -} - -code, -pre { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: auto; - font-family: monospace; -} - -body { - color: #4a4a4a; - font-size: 1em; - font-weight: 400; - line-height: 1.5; -} - -a { - color: #3273dc; - cursor: pointer; - text-decoration: none; -} - -a strong { - color: currentColor; -} - -a:hover { - color: #363636; -} - -code { - background-color: whitesmoke; - color: #f14668; - font-size: 0.875em; - font-weight: normal; - padding: 0.25em 0.5em 0.25em; -} - -hr { - background-color: whitesmoke; - border: none; - display: block; - height: 2px; - margin: 1.5rem 0; -} - -img { - height: auto; - max-width: 100%; -} - -input[type="checkbox"], -input[type="radio"] { - vertical-align: baseline; -} - -small { - font-size: 0.875em; -} - -span { - font-style: inherit; - font-weight: inherit; -} - -strong { - color: #363636; - font-weight: 700; -} - -fieldset { - border: none; -} - -pre { - -webkit-overflow-scrolling: touch; - background-color: whitesmoke; - color: #4a4a4a; - font-size: 0.875em; - overflow-x: auto; - padding: 1.25rem 1.5rem; - white-space: pre; - word-wrap: normal; -} - -pre code { - background-color: transparent; - color: currentColor; - font-size: 1em; - padding: 0; -} - -table td, -table th { - vertical-align: top; -} - -table td:not([align]), -table th:not([align]) { - text-align: inherit; -} - -table th { - color: #363636; -} - -.box { - background-color: white; - border-radius: 6px; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - color: #4a4a4a; - display: block; - padding: 1.25rem; -} - -a.box:hover, a.box:focus { - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc; -} - -a.box:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc; -} - -.button { - background-color: white; - border-color: #dbdbdb; - border-width: 1px; - color: #363636; - cursor: pointer; - justify-content: center; - padding-bottom: calc(0.5em - 1px); - padding-left: 1em; - padding-right: 1em; - padding-top: calc(0.5em - 1px); - text-align: center; - white-space: nowrap; -} - -.button strong { - color: inherit; -} - -.button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large { - height: 1.5em; - width: 1.5em; -} - -.button .icon:first-child:not(:last-child) { - margin-left: calc(-0.5em - 1px); - margin-right: 0.25em; -} - -.button .icon:last-child:not(:first-child) { - margin-left: 0.25em; - margin-right: calc(-0.5em - 1px); -} - -.button .icon:first-child:last-child { - margin-left: calc(-0.5em - 1px); - margin-right: calc(-0.5em - 1px); -} - -.button:hover, .button.is-hovered { - border-color: #b5b5b5; - color: #363636; -} - -.button:focus, .button.is-focused { - border-color: #3273dc; - color: #363636; -} - -.button:focus:not(:active), .button.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); -} - -.button:active, .button.is-active { - border-color: #4a4a4a; - color: #363636; -} - -.button.is-text { - background-color: transparent; - border-color: transparent; - color: #4a4a4a; - text-decoration: underline; -} - -.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { - background-color: whitesmoke; - color: #363636; -} - -.button.is-text:active, .button.is-text.is-active { - background-color: #e8e8e8; - color: #363636; -} - -.button.is-text[disabled], -fieldset[disabled] .button.is-text { - background-color: transparent; - border-color: transparent; - box-shadow: none; -} - -.button.is-white { - background-color: white; - border-color: transparent; - color: #0a0a0a; -} - -.button.is-white:hover, .button.is-white.is-hovered { - background-color: #f9f9f9; - border-color: transparent; - color: #0a0a0a; -} - -.button.is-white:focus, .button.is-white.is-focused { - border-color: transparent; - color: #0a0a0a; -} - -.button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); -} - -.button.is-white:active, .button.is-white.is-active { - background-color: #f2f2f2; - border-color: transparent; - color: #0a0a0a; -} - -.button.is-white[disabled], -fieldset[disabled] .button.is-white { - background-color: white; - border-color: transparent; - box-shadow: none; -} - -.button.is-white.is-inverted { - background-color: #0a0a0a; - color: white; -} - -.button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { - background-color: black; -} - -.button.is-white.is-inverted[disabled], -fieldset[disabled] .button.is-white.is-inverted { - background-color: #0a0a0a; - border-color: transparent; - box-shadow: none; - color: white; -} - -.button.is-white.is-loading::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; -} - -.button.is-white.is-outlined { - background-color: transparent; - border-color: white; - color: white; -} - -.button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { - background-color: white; - border-color: white; - color: #0a0a0a; -} - -.button.is-white.is-outlined.is-loading::after { - border-color: transparent transparent white white !important; -} - -.button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; -} - -.button.is-white.is-outlined[disabled], -fieldset[disabled] .button.is-white.is-outlined { - background-color: transparent; - border-color: white; - box-shadow: none; - color: white; -} - -.button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - color: #0a0a0a; -} - -.button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { - background-color: #0a0a0a; - color: white; -} - -.button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent white white !important; -} - -.button.is-white.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - box-shadow: none; - color: #0a0a0a; -} - -.button.is-black { - background-color: #0a0a0a; - border-color: transparent; - color: white; -} - -.button.is-black:hover, .button.is-black.is-hovered { - background-color: #040404; - border-color: transparent; - color: white; -} - -.button.is-black:focus, .button.is-black.is-focused { - border-color: transparent; - color: white; -} - -.button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); -} - -.button.is-black:active, .button.is-black.is-active { - background-color: black; - border-color: transparent; - color: white; -} - -.button.is-black[disabled], -fieldset[disabled] .button.is-black { - background-color: #0a0a0a; - border-color: transparent; - box-shadow: none; -} - -.button.is-black.is-inverted { - background-color: white; - color: #0a0a0a; -} - -.button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-black.is-inverted[disabled], -fieldset[disabled] .button.is-black.is-inverted { - background-color: white; - border-color: transparent; - box-shadow: none; - color: #0a0a0a; -} - -.button.is-black.is-loading::after { - border-color: transparent transparent white white !important; -} - -.button.is-black.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - color: #0a0a0a; -} - -.button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; -} - -.button.is-black.is-outlined.is-loading::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; -} - -.button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent white white !important; -} - -.button.is-black.is-outlined[disabled], -fieldset[disabled] .button.is-black.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - box-shadow: none; - color: #0a0a0a; -} - -.button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: white; - color: white; -} - -.button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { - background-color: white; - color: #0a0a0a; -} - -.button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; -} - -.button.is-black.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: white; - box-shadow: none; - color: white; -} - -.button.is-light { - background-color: whitesmoke; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-light:hover, .button.is-light.is-hovered { - background-color: #eeeeee; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-light:focus, .button.is-light.is-focused { - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); -} - -.button.is-light:active, .button.is-light.is-active { - background-color: #e8e8e8; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-light[disabled], -fieldset[disabled] .button.is-light { - background-color: whitesmoke; - border-color: transparent; - box-shadow: none; -} - -.button.is-light.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - color: whitesmoke; -} - -.button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { - background-color: rgba(0, 0, 0, 0.7); -} - -.button.is-light.is-inverted[disabled], -fieldset[disabled] .button.is-light.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - border-color: transparent; - box-shadow: none; - color: whitesmoke; -} - -.button.is-light.is-loading::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} - -.button.is-light.is-outlined { - background-color: transparent; - border-color: whitesmoke; - color: whitesmoke; -} - -.button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { - background-color: whitesmoke; - border-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-light.is-outlined.is-loading::after { - border-color: transparent transparent whitesmoke whitesmoke !important; -} - -.button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} - -.button.is-light.is-outlined[disabled], -fieldset[disabled] .button.is-light.is-outlined { - background-color: transparent; - border-color: whitesmoke; - box-shadow: none; - color: whitesmoke; -} - -.button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - color: rgba(0, 0, 0, 0.7); -} - -.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { - background-color: rgba(0, 0, 0, 0.7); - color: whitesmoke; -} - -.button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent whitesmoke whitesmoke !important; -} - -.button.is-light.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - box-shadow: none; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-dark { - background-color: #363636; - border-color: transparent; - color: #fff; -} - -.button.is-dark:hover, .button.is-dark.is-hovered { - background-color: #2f2f2f; - border-color: transparent; - color: #fff; -} - -.button.is-dark:focus, .button.is-dark.is-focused { - border-color: transparent; - color: #fff; -} - -.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); -} - -.button.is-dark:active, .button.is-dark.is-active { - background-color: #292929; - border-color: transparent; - color: #fff; -} - -.button.is-dark[disabled], -fieldset[disabled] .button.is-dark { - background-color: #363636; - border-color: transparent; - box-shadow: none; -} - -.button.is-dark.is-inverted { - background-color: #fff; - color: #363636; -} - -.button.is-dark.is-inverted:hover, .button.is-dark.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-dark.is-inverted[disabled], -fieldset[disabled] .button.is-dark.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #363636; -} - -.button.is-dark.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-dark.is-outlined { - background-color: transparent; - border-color: #363636; - color: #363636; -} - -.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .button.is-dark.is-outlined.is-focused { - background-color: #363636; - border-color: #363636; - color: #fff; -} - -.button.is-dark.is-outlined.is-loading::after { - border-color: transparent transparent #363636 #363636 !important; -} - -.button.is-dark.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-dark.is-outlined[disabled], -fieldset[disabled] .button.is-dark.is-outlined { - background-color: transparent; - border-color: #363636; - box-shadow: none; - color: #363636; -} - -.button.is-dark.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} - -.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #363636; -} - -.button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #363636 #363636 !important; -} - -.button.is-dark.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-dark.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} - -.button.is-primary { - background-color: #00d1b2; - border-color: transparent; - color: #fff; -} - -.button.is-primary:hover, .button.is-primary.is-hovered { - background-color: #00c4a7; - border-color: transparent; - color: #fff; -} - -.button.is-primary:focus, .button.is-primary.is-focused { - border-color: transparent; - color: #fff; -} - -.button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); -} - -.button.is-primary:active, .button.is-primary.is-active { - background-color: #00b89c; - border-color: transparent; - color: #fff; -} - -.button.is-primary[disabled], -fieldset[disabled] .button.is-primary { - background-color: #00d1b2; - border-color: transparent; - box-shadow: none; -} - -.button.is-primary.is-inverted { - background-color: #fff; - color: #00d1b2; -} - -.button.is-primary.is-inverted:hover, .button.is-primary.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-primary.is-inverted[disabled], -fieldset[disabled] .button.is-primary.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #00d1b2; -} - -.button.is-primary.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-primary.is-outlined { - background-color: transparent; - border-color: #00d1b2; - color: #00d1b2; -} - -.button.is-primary.is-outlined:hover, .button.is-primary.is-outlined.is-hovered, .button.is-primary.is-outlined:focus, .button.is-primary.is-outlined.is-focused { - background-color: #00d1b2; - border-color: #00d1b2; - color: #fff; -} - -.button.is-primary.is-outlined.is-loading::after { - border-color: transparent transparent #00d1b2 #00d1b2 !important; -} - -.button.is-primary.is-outlined.is-loading:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-outlined.is-loading:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-primary.is-outlined[disabled], -fieldset[disabled] .button.is-primary.is-outlined { - background-color: transparent; - border-color: #00d1b2; - box-shadow: none; - color: #00d1b2; -} - -.button.is-primary.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} - -.button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .button.is-primary.is-inverted.is-outlined:focus, .button.is-primary.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #00d1b2; -} - -.button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #00d1b2 #00d1b2 !important; -} - -.button.is-primary.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-primary.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} - -.button.is-primary.is-light { - background-color: #ebfffc; - color: #00947e; -} - -.button.is-primary.is-light:hover, .button.is-primary.is-light.is-hovered { - background-color: #defffa; - border-color: transparent; - color: #00947e; -} - -.button.is-primary.is-light:active, .button.is-primary.is-light.is-active { - background-color: #d1fff8; - border-color: transparent; - color: #00947e; -} - -.button.is-link { - background-color: #3273dc; - border-color: transparent; - color: #fff; -} - -.button.is-link:hover, .button.is-link.is-hovered { - background-color: #276cda; - border-color: transparent; - color: #fff; -} - -.button.is-link:focus, .button.is-link.is-focused { - border-color: transparent; - color: #fff; -} - -.button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); -} - -.button.is-link:active, .button.is-link.is-active { - background-color: #2366d1; - border-color: transparent; - color: #fff; -} - -.button.is-link[disabled], -fieldset[disabled] .button.is-link { - background-color: #3273dc; - border-color: transparent; - box-shadow: none; -} - -.button.is-link.is-inverted { - background-color: #fff; - color: #3273dc; -} - -.button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-link.is-inverted[disabled], -fieldset[disabled] .button.is-link.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #3273dc; -} - -.button.is-link.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-link.is-outlined { - background-color: transparent; - border-color: #3273dc; - color: #3273dc; -} - -.button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { - background-color: #3273dc; - border-color: #3273dc; - color: #fff; -} - -.button.is-link.is-outlined.is-loading::after { - border-color: transparent transparent #3273dc #3273dc !important; -} - -.button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-link.is-outlined[disabled], -fieldset[disabled] .button.is-link.is-outlined { - background-color: transparent; - border-color: #3273dc; - box-shadow: none; - color: #3273dc; -} - -.button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} - -.button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #3273dc; -} - -.button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #3273dc #3273dc !important; -} - -.button.is-link.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} - -.button.is-link.is-light { - background-color: #eef3fc; - color: #2160c4; -} - -.button.is-link.is-light:hover, .button.is-link.is-light.is-hovered { - background-color: #e3ecfa; - border-color: transparent; - color: #2160c4; -} - -.button.is-link.is-light:active, .button.is-link.is-light.is-active { - background-color: #d8e4f8; - border-color: transparent; - color: #2160c4; -} - -.button.is-info { - background-color: #3298dc; - border-color: transparent; - color: #fff; -} - -.button.is-info:hover, .button.is-info.is-hovered { - background-color: #2793da; - border-color: transparent; - color: #fff; -} - -.button.is-info:focus, .button.is-info.is-focused { - border-color: transparent; - color: #fff; -} - -.button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25); -} - -.button.is-info:active, .button.is-info.is-active { - background-color: #238cd1; - border-color: transparent; - color: #fff; -} - -.button.is-info[disabled], -fieldset[disabled] .button.is-info { - background-color: #3298dc; - border-color: transparent; - box-shadow: none; -} - -.button.is-info.is-inverted { - background-color: #fff; - color: #3298dc; -} - -.button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-info.is-inverted[disabled], -fieldset[disabled] .button.is-info.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #3298dc; -} - -.button.is-info.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-info.is-outlined { - background-color: transparent; - border-color: #3298dc; - color: #3298dc; -} - -.button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { - background-color: #3298dc; - border-color: #3298dc; - color: #fff; -} - -.button.is-info.is-outlined.is-loading::after { - border-color: transparent transparent #3298dc #3298dc !important; -} - -.button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-info.is-outlined[disabled], -fieldset[disabled] .button.is-info.is-outlined { - background-color: transparent; - border-color: #3298dc; - box-shadow: none; - color: #3298dc; -} - -.button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} - -.button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #3298dc; -} - -.button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #3298dc #3298dc !important; -} - -.button.is-info.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} - -.button.is-info.is-light { - background-color: #eef6fc; - color: #1d72aa; -} - -.button.is-info.is-light:hover, .button.is-info.is-light.is-hovered { - background-color: #e3f1fa; - border-color: transparent; - color: #1d72aa; -} - -.button.is-info.is-light:active, .button.is-info.is-light.is-active { - background-color: #d8ebf8; - border-color: transparent; - color: #1d72aa; -} - -.button.is-success { - background-color: #48c774; - border-color: transparent; - color: #fff; -} - -.button.is-success:hover, .button.is-success.is-hovered { - background-color: #3ec46d; - border-color: transparent; - color: #fff; -} - -.button.is-success:focus, .button.is-success.is-focused { - border-color: transparent; - color: #fff; -} - -.button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25); -} - -.button.is-success:active, .button.is-success.is-active { - background-color: #3abb67; - border-color: transparent; - color: #fff; -} - -.button.is-success[disabled], -fieldset[disabled] .button.is-success { - background-color: #48c774; - border-color: transparent; - box-shadow: none; -} - -.button.is-success.is-inverted { - background-color: #fff; - color: #48c774; -} - -.button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-success.is-inverted[disabled], -fieldset[disabled] .button.is-success.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #48c774; -} - -.button.is-success.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-success.is-outlined { - background-color: transparent; - border-color: #48c774; - color: #48c774; -} - -.button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { - background-color: #48c774; - border-color: #48c774; - color: #fff; -} - -.button.is-success.is-outlined.is-loading::after { - border-color: transparent transparent #48c774 #48c774 !important; -} - -.button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-success.is-outlined[disabled], -fieldset[disabled] .button.is-success.is-outlined { - background-color: transparent; - border-color: #48c774; - box-shadow: none; - color: #48c774; -} - -.button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} - -.button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #48c774; -} - -.button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #48c774 #48c774 !important; -} - -.button.is-success.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} - -.button.is-success.is-light { - background-color: #effaf3; - color: #257942; -} - -.button.is-success.is-light:hover, .button.is-success.is-light.is-hovered { - background-color: #e6f7ec; - border-color: transparent; - color: #257942; -} - -.button.is-success.is-light:active, .button.is-success.is-light.is-active { - background-color: #dcf4e4; - border-color: transparent; - color: #257942; -} - -.button.is-warning { - background-color: #ffdd57; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning:hover, .button.is-warning.is-hovered { - background-color: #ffdb4a; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning:focus, .button.is-warning.is-focused { - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); -} - -.button.is-warning:active, .button.is-warning.is-active { - background-color: #ffd83d; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning[disabled], -fieldset[disabled] .button.is-warning { - background-color: #ffdd57; - border-color: transparent; - box-shadow: none; -} - -.button.is-warning.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - color: #ffdd57; -} - -.button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { - background-color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning.is-inverted[disabled], -fieldset[disabled] .button.is-warning.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - border-color: transparent; - box-shadow: none; - color: #ffdd57; -} - -.button.is-warning.is-loading::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} - -.button.is-warning.is-outlined { - background-color: transparent; - border-color: #ffdd57; - color: #ffdd57; -} - -.button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { - background-color: #ffdd57; - border-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning.is-outlined.is-loading::after { - border-color: transparent transparent #ffdd57 #ffdd57 !important; -} - -.button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} - -.button.is-warning.is-outlined[disabled], -fieldset[disabled] .button.is-warning.is-outlined { - background-color: transparent; - border-color: #ffdd57; - box-shadow: none; - color: #ffdd57; -} - -.button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { - background-color: rgba(0, 0, 0, 0.7); - color: #ffdd57; -} - -.button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #ffdd57 #ffdd57 !important; -} - -.button.is-warning.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - box-shadow: none; - color: rgba(0, 0, 0, 0.7); -} - -.button.is-warning.is-light { - background-color: #fffbeb; - color: #947600; -} - -.button.is-warning.is-light:hover, .button.is-warning.is-light.is-hovered { - background-color: #fff8de; - border-color: transparent; - color: #947600; -} - -.button.is-warning.is-light:active, .button.is-warning.is-light.is-active { - background-color: #fff6d1; - border-color: transparent; - color: #947600; -} - -.button.is-danger { - background-color: #f14668; - border-color: transparent; - color: #fff; -} - -.button.is-danger:hover, .button.is-danger.is-hovered { - background-color: #f03a5f; - border-color: transparent; - color: #fff; -} - -.button.is-danger:focus, .button.is-danger.is-focused { - border-color: transparent; - color: #fff; -} - -.button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25); -} - -.button.is-danger:active, .button.is-danger.is-active { - background-color: #ef2e55; - border-color: transparent; - color: #fff; -} - -.button.is-danger[disabled], -fieldset[disabled] .button.is-danger { - background-color: #f14668; - border-color: transparent; - box-shadow: none; -} - -.button.is-danger.is-inverted { - background-color: #fff; - color: #f14668; -} - -.button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { - background-color: #f2f2f2; -} - -.button.is-danger.is-inverted[disabled], -fieldset[disabled] .button.is-danger.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #f14668; -} - -.button.is-danger.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-danger.is-outlined { - background-color: transparent; - border-color: #f14668; - color: #f14668; -} - -.button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { - background-color: #f14668; - border-color: #f14668; - color: #fff; -} - -.button.is-danger.is-outlined.is-loading::after { - border-color: transparent transparent #f14668 #f14668 !important; -} - -.button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} - -.button.is-danger.is-outlined[disabled], -fieldset[disabled] .button.is-danger.is-outlined { - background-color: transparent; - border-color: #f14668; - box-shadow: none; - color: #f14668; -} - -.button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} - -.button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #f14668; -} - -.button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #f14668 #f14668 !important; -} - -.button.is-danger.is-inverted.is-outlined[disabled], -fieldset[disabled] .button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} - -.button.is-danger.is-light { - background-color: #feecf0; - color: #cc0f35; -} - -.button.is-danger.is-light:hover, .button.is-danger.is-light.is-hovered { - background-color: #fde0e6; - border-color: transparent; - color: #cc0f35; -} - -.button.is-danger.is-light:active, .button.is-danger.is-light.is-active { - background-color: #fcd4dc; - border-color: transparent; - color: #cc0f35; -} - -.button.is-small { - border-radius: 2px; - font-size: 0.75rem; -} - -.button.is-normal { - font-size: 1rem; -} - -.button.is-medium { - font-size: 1.25rem; -} - -.button.is-large { - font-size: 1.5rem; -} - -.button[disabled], -fieldset[disabled] .button { - background-color: white; - border-color: #dbdbdb; - box-shadow: none; - opacity: 0.5; -} - -.button.is-fullwidth { - display: flex; - width: 100%; -} - -.button.is-loading { - color: transparent !important; - pointer-events: none; -} - -.button.is-loading::after { - position: absolute; - left: calc(50% - (1em / 2)); - top: calc(50% - (1em / 2)); - position: absolute !important; -} - -.button.is-static { - background-color: whitesmoke; - border-color: #dbdbdb; - color: #7a7a7a; - box-shadow: none; - pointer-events: none; -} - -.button.is-rounded { - border-radius: 290486px; - padding-left: calc(1em + 0.25em); - padding-right: calc(1em + 0.25em); -} - -.buttons { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} - -.buttons .button { - margin-bottom: 0.5rem; -} - -.buttons .button:not(:last-child):not(.is-fullwidth) { - margin-right: 0.5rem; -} - -.buttons:last-child { - margin-bottom: -0.5rem; -} - -.buttons:not(:last-child) { - margin-bottom: 1rem; -} - -.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { - border-radius: 2px; - font-size: 0.75rem; -} - -.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { - font-size: 1.25rem; -} - -.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { - font-size: 1.5rem; -} - -.buttons.has-addons .button:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.buttons.has-addons .button:not(:last-child) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - margin-right: -1px; -} - -.buttons.has-addons .button:last-child { - margin-right: 0; -} - -.buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { - z-index: 2; -} - -.buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { - z-index: 3; -} - -.buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { - z-index: 4; -} - -.buttons.has-addons .button.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} - -.buttons.is-centered { - justify-content: center; -} - -.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; -} - -.buttons.is-right { - justify-content: flex-end; -} - -.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; -} - -.container { - flex-grow: 1; - margin: 0 auto; - position: relative; - width: auto; -} - -.container.is-fluid { - max-width: none; - padding-left: 32px; - padding-right: 32px; - width: 100%; -} - -@media screen and (min-width: 1024px) { - .container { - max-width: 960px; - } -} - -@media screen and (max-width: 1215px) { - .container.is-widescreen { - max-width: 1152px; - } -} - -@media screen and (max-width: 1407px) { - .container.is-fullhd { - max-width: 1344px; - } -} - -@media screen and (min-width: 1216px) { - .container { - max-width: 1152px; - } -} - -@media screen and (min-width: 1408px) { - .container { - max-width: 1344px; - } -} - -.content li + li { - margin-top: 0.25em; -} - -.content p:not(:last-child), -.content dl:not(:last-child), -.content ol:not(:last-child), -.content ul:not(:last-child), -.content blockquote:not(:last-child), -.content pre:not(:last-child), -.content table:not(:last-child) { - margin-bottom: 1em; -} - -.content h1, -.content h2, -.content h3, -.content h4, -.content h5, -.content h6 { - color: #363636; - font-weight: 600; - line-height: 1.125; -} - -.content h1 { - font-size: 2em; - margin-bottom: 0.5em; -} - -.content h1:not(:first-child) { - margin-top: 1em; -} - -.content h2 { - font-size: 1.75em; - margin-bottom: 0.5714em; -} - -.content h2:not(:first-child) { - margin-top: 1.1428em; -} - -.content h3 { - font-size: 1.5em; - margin-bottom: 0.6666em; -} - -.content h3:not(:first-child) { - margin-top: 1.3333em; -} - -.content h4 { - font-size: 1.25em; - margin-bottom: 0.8em; -} - -.content h5 { - font-size: 1.125em; - margin-bottom: 0.8888em; -} - -.content h6 { - font-size: 1em; - margin-bottom: 1em; -} - -.content blockquote { - background-color: whitesmoke; - border-left: 5px solid #dbdbdb; - padding: 1.25em 1.5em; -} - -.content ol { - list-style-position: outside; - margin-left: 2em; - margin-top: 1em; -} - -.content ol:not([type]) { - list-style-type: decimal; -} - -.content ol:not([type]).is-lower-alpha { - list-style-type: lower-alpha; -} - -.content ol:not([type]).is-lower-roman { - list-style-type: lower-roman; -} - -.content ol:not([type]).is-upper-alpha { - list-style-type: upper-alpha; -} - -.content ol:not([type]).is-upper-roman { - list-style-type: upper-roman; -} - -.content ul { - list-style: disc outside; - margin-left: 2em; - margin-top: 1em; -} - -.content ul ul { - list-style-type: circle; - margin-top: 0.5em; -} - -.content ul ul ul { - list-style-type: square; -} - -.content dd { - margin-left: 2em; -} - -.content figure { - margin-left: 2em; - margin-right: 2em; - text-align: center; -} - -.content figure:not(:first-child) { - margin-top: 2em; -} - -.content figure:not(:last-child) { - margin-bottom: 2em; -} - -.content figure img { - display: inline-block; -} - -.content figure figcaption { - font-style: italic; -} - -.content pre { - -webkit-overflow-scrolling: touch; - overflow-x: auto; - padding: 1.25em 1.5em; - white-space: pre; - word-wrap: normal; -} - -.content sup, -.content sub { - font-size: 75%; -} - -.content table { - width: 100%; -} - -.content table td, -.content table th { - border: 1px solid #dbdbdb; - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; -} - -.content table th { - color: #363636; -} - -.content table th:not([align]) { - text-align: inherit; -} - -.content table thead td, -.content table thead th { - border-width: 0 0 2px; - color: #363636; -} - -.content table tfoot td, -.content table tfoot th { - border-width: 2px 0 0; - color: #363636; -} - -.content table tbody tr:last-child td, -.content table tbody tr:last-child th { - border-bottom-width: 0; -} - -.content .tabs li + li { - margin-top: 0; -} - -.content.is-small { - font-size: 0.75rem; -} - -.content.is-medium { - font-size: 1.25rem; -} - -.content.is-large { - font-size: 1.5rem; -} - -.icon { - align-items: center; - display: inline-flex; - justify-content: center; - height: 1.5rem; - width: 1.5rem; -} - -.icon.is-small { - height: 1rem; - width: 1rem; -} - -.icon.is-medium { - height: 2rem; - width: 2rem; -} - -.icon.is-large { - height: 3rem; - width: 3rem; -} - -.image { - display: block; - position: relative; -} - -.image img { - display: block; - height: auto; - width: 100%; -} - -.image img.is-rounded { - border-radius: 290486px; -} - -.image.is-fullwidth { - width: 100%; -} - -.image.is-square img, -.image.is-square .has-ratio, .image.is-1by1 img, -.image.is-1by1 .has-ratio, .image.is-5by4 img, -.image.is-5by4 .has-ratio, .image.is-4by3 img, -.image.is-4by3 .has-ratio, .image.is-3by2 img, -.image.is-3by2 .has-ratio, .image.is-5by3 img, -.image.is-5by3 .has-ratio, .image.is-16by9 img, -.image.is-16by9 .has-ratio, .image.is-2by1 img, -.image.is-2by1 .has-ratio, .image.is-3by1 img, -.image.is-3by1 .has-ratio, .image.is-4by5 img, -.image.is-4by5 .has-ratio, .image.is-3by4 img, -.image.is-3by4 .has-ratio, .image.is-2by3 img, -.image.is-2by3 .has-ratio, .image.is-3by5 img, -.image.is-3by5 .has-ratio, .image.is-9by16 img, -.image.is-9by16 .has-ratio, .image.is-1by2 img, -.image.is-1by2 .has-ratio, .image.is-1by3 img, -.image.is-1by3 .has-ratio { - height: 100%; - width: 100%; -} - -.image.is-square, .image.is-1by1 { - padding-top: 100%; -} - -.image.is-5by4 { - padding-top: 80%; -} - -.image.is-4by3 { - padding-top: 75%; -} - -.image.is-3by2 { - padding-top: 66.6666%; -} - -.image.is-5by3 { - padding-top: 60%; -} - -.image.is-16by9 { - padding-top: 56.25%; -} - -.image.is-2by1 { - padding-top: 50%; -} - -.image.is-3by1 { - padding-top: 33.3333%; -} - -.image.is-4by5 { - padding-top: 125%; -} - -.image.is-3by4 { - padding-top: 133.3333%; -} - -.image.is-2by3 { - padding-top: 150%; -} - -.image.is-3by5 { - padding-top: 166.6666%; -} - -.image.is-9by16 { - padding-top: 177.7777%; -} - -.image.is-1by2 { - padding-top: 200%; -} - -.image.is-1by3 { - padding-top: 300%; -} - -.image.is-16x16 { - height: 16px; - width: 16px; -} - -.image.is-24x24 { - height: 24px; - width: 24px; -} - -.image.is-32x32 { - height: 32px; - width: 32px; -} - -.image.is-48x48 { - height: 48px; - width: 48px; -} - -.image.is-64x64 { - height: 64px; - width: 64px; -} - -.image.is-96x96 { - height: 96px; - width: 96px; -} - -.image.is-128x128 { - height: 128px; - width: 128px; -} - -.notification { - background-color: whitesmoke; - border-radius: 4px; - position: relative; - padding: 1.25rem 2.5rem 1.25rem 1.5rem; -} - -.notification a:not(.button):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; -} - -.notification strong { - color: currentColor; -} - -.notification code, -.notification pre { - background: white; -} - -.notification pre code { - background: transparent; -} - -.notification > .delete { - right: 0.5rem; - position: absolute; - top: 0.5rem; -} - -.notification .title, -.notification .subtitle, -.notification .content { - color: currentColor; -} - -.notification.is-white { - background-color: white; - color: #0a0a0a; -} - -.notification.is-black { - background-color: #0a0a0a; - color: white; -} - -.notification.is-light { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.notification.is-dark { - background-color: #363636; - color: #fff; -} - -.notification.is-primary { - background-color: #00d1b2; - color: #fff; -} - -.notification.is-primary.is-light { - background-color: #ebfffc; - color: #00947e; -} - -.notification.is-link { - background-color: #3273dc; - color: #fff; -} - -.notification.is-link.is-light { - background-color: #eef3fc; - color: #2160c4; -} - -.notification.is-info { - background-color: #3298dc; - color: #fff; -} - -.notification.is-info.is-light { - background-color: #eef6fc; - color: #1d72aa; -} - -.notification.is-success { - background-color: #48c774; - color: #fff; -} - -.notification.is-success.is-light { - background-color: #effaf3; - color: #257942; -} - -.notification.is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.notification.is-warning.is-light { - background-color: #fffbeb; - color: #947600; -} - -.notification.is-danger { - background-color: #f14668; - color: #fff; -} - -.notification.is-danger.is-light { - background-color: #feecf0; - color: #cc0f35; -} - -.progress { - -moz-appearance: none; - -webkit-appearance: none; - border: none; - border-radius: 290486px; - display: block; - height: 1rem; - overflow: hidden; - padding: 0; - width: 100%; -} - -.progress::-webkit-progress-bar { - background-color: #ededed; -} - -.progress::-webkit-progress-value { - background-color: #4a4a4a; -} - -.progress::-moz-progress-bar { - background-color: #4a4a4a; -} - -.progress::-ms-fill { - background-color: #4a4a4a; - border: none; -} - -.progress.is-white::-webkit-progress-value { - background-color: white; -} - -.progress.is-white::-moz-progress-bar { - background-color: white; -} - -.progress.is-white::-ms-fill { - background-color: white; -} - -.progress.is-white:indeterminate { - background-image: linear-gradient(to right, white 30%, #ededed 30%); -} - -.progress.is-black::-webkit-progress-value { - background-color: #0a0a0a; -} - -.progress.is-black::-moz-progress-bar { - background-color: #0a0a0a; -} - -.progress.is-black::-ms-fill { - background-color: #0a0a0a; -} - -.progress.is-black:indeterminate { - background-image: linear-gradient(to right, #0a0a0a 30%, #ededed 30%); -} - -.progress.is-light::-webkit-progress-value { - background-color: whitesmoke; -} - -.progress.is-light::-moz-progress-bar { - background-color: whitesmoke; -} - -.progress.is-light::-ms-fill { - background-color: whitesmoke; -} - -.progress.is-light:indeterminate { - background-image: linear-gradient(to right, whitesmoke 30%, #ededed 30%); -} - -.progress.is-dark::-webkit-progress-value { - background-color: #363636; -} - -.progress.is-dark::-moz-progress-bar { - background-color: #363636; -} - -.progress.is-dark::-ms-fill { - background-color: #363636; -} - -.progress.is-dark:indeterminate { - background-image: linear-gradient(to right, #363636 30%, #ededed 30%); -} - -.progress.is-primary::-webkit-progress-value { - background-color: #00d1b2; -} - -.progress.is-primary::-moz-progress-bar { - background-color: #00d1b2; -} - -.progress.is-primary::-ms-fill { - background-color: #00d1b2; -} - -.progress.is-primary:indeterminate { - background-image: linear-gradient(to right, #00d1b2 30%, #ededed 30%); -} - -.progress.is-link::-webkit-progress-value { - background-color: #3273dc; -} - -.progress.is-link::-moz-progress-bar { - background-color: #3273dc; -} - -.progress.is-link::-ms-fill { - background-color: #3273dc; -} - -.progress.is-link:indeterminate { - background-image: linear-gradient(to right, #3273dc 30%, #ededed 30%); -} - -.progress.is-info::-webkit-progress-value { - background-color: #3298dc; -} - -.progress.is-info::-moz-progress-bar { - background-color: #3298dc; -} - -.progress.is-info::-ms-fill { - background-color: #3298dc; -} - -.progress.is-info:indeterminate { - background-image: linear-gradient(to right, #3298dc 30%, #ededed 30%); -} - -.progress.is-success::-webkit-progress-value { - background-color: #48c774; -} - -.progress.is-success::-moz-progress-bar { - background-color: #48c774; -} - -.progress.is-success::-ms-fill { - background-color: #48c774; -} - -.progress.is-success:indeterminate { - background-image: linear-gradient(to right, #48c774 30%, #ededed 30%); -} - -.progress.is-warning::-webkit-progress-value { - background-color: #ffdd57; -} - -.progress.is-warning::-moz-progress-bar { - background-color: #ffdd57; -} - -.progress.is-warning::-ms-fill { - background-color: #ffdd57; -} - -.progress.is-warning:indeterminate { - background-image: linear-gradient(to right, #ffdd57 30%, #ededed 30%); -} - -.progress.is-danger::-webkit-progress-value { - background-color: #f14668; -} - -.progress.is-danger::-moz-progress-bar { - background-color: #f14668; -} - -.progress.is-danger::-ms-fill { - background-color: #f14668; -} - -.progress.is-danger:indeterminate { - background-image: linear-gradient(to right, #f14668 30%, #ededed 30%); -} - -.progress:indeterminate { - -webkit-animation-duration: 1.5s; - animation-duration: 1.5s; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-name: moveIndeterminate; - animation-name: moveIndeterminate; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - background-color: #ededed; - background-image: linear-gradient(to right, #4a4a4a 30%, #ededed 30%); - background-position: top left; - background-repeat: no-repeat; - background-size: 150% 150%; -} - -.progress:indeterminate::-webkit-progress-bar { - background-color: transparent; -} - -.progress:indeterminate::-moz-progress-bar { - background-color: transparent; -} - -.progress.is-small { - height: 0.75rem; -} - -.progress.is-medium { - height: 1.25rem; -} - -.progress.is-large { - height: 1.5rem; -} - -@-webkit-keyframes moveIndeterminate { - from { - background-position: 200% 0; - } - to { - background-position: -200% 0; - } -} - -@keyframes moveIndeterminate { - from { - background-position: 200% 0; - } - to { - background-position: -200% 0; - } -} - -.table { - background-color: white; - color: #363636; -} - -.table td, -.table th { - border: 1px solid #dbdbdb; - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; -} - -.table td.is-white, -.table th.is-white { - background-color: white; - border-color: white; - color: #0a0a0a; -} - -.table td.is-black, -.table th.is-black { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; -} - -.table td.is-light, -.table th.is-light { - background-color: whitesmoke; - border-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.table td.is-dark, -.table th.is-dark { - background-color: #363636; - border-color: #363636; - color: #fff; -} - -.table td.is-primary, -.table th.is-primary { - background-color: #00d1b2; - border-color: #00d1b2; - color: #fff; -} - -.table td.is-link, -.table th.is-link { - background-color: #3273dc; - border-color: #3273dc; - color: #fff; -} - -.table td.is-info, -.table th.is-info { - background-color: #3298dc; - border-color: #3298dc; - color: #fff; -} - -.table td.is-success, -.table th.is-success { - background-color: #48c774; - border-color: #48c774; - color: #fff; -} - -.table td.is-warning, -.table th.is-warning { - background-color: #ffdd57; - border-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.table td.is-danger, -.table th.is-danger { - background-color: #f14668; - border-color: #f14668; - color: #fff; -} - -.table td.is-narrow, -.table th.is-narrow { - white-space: nowrap; - width: 1%; -} - -.table td.is-selected, -.table th.is-selected { - background-color: #00d1b2; - color: #fff; -} - -.table td.is-selected a, -.table td.is-selected strong, -.table th.is-selected a, -.table th.is-selected strong { - color: currentColor; -} - -.table td.is-vcentered, -.table th.is-vcentered { - vertical-align: middle; -} - -.table th { - color: #363636; -} - -.table th:not([align]) { - text-align: inherit; -} - -.table tr.is-selected { - background-color: #00d1b2; - color: #fff; -} - -.table tr.is-selected a, -.table tr.is-selected strong { - color: currentColor; -} - -.table tr.is-selected td, -.table tr.is-selected th { - border-color: #fff; - color: currentColor; -} - -.table thead { - background-color: transparent; -} - -.table thead td, -.table thead th { - border-width: 0 0 2px; - color: #363636; -} - -.table tfoot { - background-color: transparent; -} - -.table tfoot td, -.table tfoot th { - border-width: 2px 0 0; - color: #363636; -} - -.table tbody { - background-color: transparent; -} - -.table tbody tr:last-child td, -.table tbody tr:last-child th { - border-bottom-width: 0; -} - -.table.is-bordered td, -.table.is-bordered th { - border-width: 1px; -} - -.table.is-bordered tr:last-child td, -.table.is-bordered tr:last-child th { - border-bottom-width: 1px; -} - -.table.is-fullwidth { - width: 100%; -} - -.table.is-hoverable tbody tr:not(.is-selected):hover { - background-color: #fafafa; -} - -.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { - background-color: #fafafa; -} - -.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { - background-color: whitesmoke; -} - -.table.is-narrow td, -.table.is-narrow th { - padding: 0.25em 0.5em; -} - -.table.is-striped tbody tr:not(.is-selected):nth-child(even) { - background-color: #fafafa; -} - -.table-container { - -webkit-overflow-scrolling: touch; - overflow: auto; - overflow-y: hidden; - max-width: 100%; -} - -.tags { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} - -.tags .tag { - margin-bottom: 0.5rem; -} - -.tags .tag:not(:last-child) { - margin-right: 0.5rem; -} - -.tags:last-child { - margin-bottom: -0.5rem; -} - -.tags:not(:last-child) { - margin-bottom: 1rem; -} - -.tags.are-medium .tag:not(.is-normal):not(.is-large) { - font-size: 1rem; -} - -.tags.are-large .tag:not(.is-normal):not(.is-medium) { - font-size: 1.25rem; -} - -.tags.is-centered { - justify-content: center; -} - -.tags.is-centered .tag { - margin-right: 0.25rem; - margin-left: 0.25rem; -} - -.tags.is-right { - justify-content: flex-end; -} - -.tags.is-right .tag:not(:first-child) { - margin-left: 0.5rem; -} - -.tags.is-right .tag:not(:last-child) { - margin-right: 0; -} - -.tags.has-addons .tag { - margin-right: 0; -} - -.tags.has-addons .tag:not(:first-child) { - margin-left: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.tags.has-addons .tag:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.tag:not(body) { - align-items: center; - background-color: whitesmoke; - border-radius: 4px; - color: #4a4a4a; - display: inline-flex; - font-size: 0.75rem; - height: 2em; - justify-content: center; - line-height: 1.5; - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; -} - -.tag:not(body) .delete { - margin-left: 0.25rem; - margin-right: -0.375rem; -} - -.tag:not(body).is-white { - background-color: white; - color: #0a0a0a; -} - -.tag:not(body).is-black { - background-color: #0a0a0a; - color: white; -} - -.tag:not(body).is-light { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.tag:not(body).is-dark { - background-color: #363636; - color: #fff; -} - -.tag:not(body).is-primary { - background-color: #00d1b2; - color: #fff; -} - -.tag:not(body).is-primary.is-light { - background-color: #ebfffc; - color: #00947e; -} - -.tag:not(body).is-link { - background-color: #3273dc; - color: #fff; -} - -.tag:not(body).is-link.is-light { - background-color: #eef3fc; - color: #2160c4; -} - -.tag:not(body).is-info { - background-color: #3298dc; - color: #fff; -} - -.tag:not(body).is-info.is-light { - background-color: #eef6fc; - color: #1d72aa; -} - -.tag:not(body).is-success { - background-color: #48c774; - color: #fff; -} - -.tag:not(body).is-success.is-light { - background-color: #effaf3; - color: #257942; -} - -.tag:not(body).is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.tag:not(body).is-warning.is-light { - background-color: #fffbeb; - color: #947600; -} - -.tag:not(body).is-danger { - background-color: #f14668; - color: #fff; -} - -.tag:not(body).is-danger.is-light { - background-color: #feecf0; - color: #cc0f35; -} - -.tag:not(body).is-normal { - font-size: 0.75rem; -} - -.tag:not(body).is-medium { - font-size: 1rem; -} - -.tag:not(body).is-large { - font-size: 1.25rem; -} - -.tag:not(body) .icon:first-child:not(:last-child) { - margin-left: -0.375em; - margin-right: 0.1875em; -} - -.tag:not(body) .icon:last-child:not(:first-child) { - margin-left: 0.1875em; - margin-right: -0.375em; -} - -.tag:not(body) .icon:first-child:last-child { - margin-left: -0.375em; - margin-right: -0.375em; -} - -.tag:not(body).is-delete { - margin-left: 1px; - padding: 0; - position: relative; - width: 2em; -} - -.tag:not(body).is-delete::before, .tag:not(body).is-delete::after { - background-color: currentColor; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; -} - -.tag:not(body).is-delete::before { - height: 1px; - width: 50%; -} - -.tag:not(body).is-delete::after { - height: 50%; - width: 1px; -} - -.tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus { - background-color: #e8e8e8; -} - -.tag:not(body).is-delete:active { - background-color: #dbdbdb; -} - -.tag:not(body).is-rounded { - border-radius: 290486px; -} - -a.tag:hover { - text-decoration: underline; -} - -.title, -.subtitle { - word-break: break-word; -} - -.title em, -.title span, -.subtitle em, -.subtitle span { - font-weight: inherit; -} - -.title sub, -.subtitle sub { - font-size: 0.75em; -} - -.title sup, -.subtitle sup { - font-size: 0.75em; -} - -.title .tag, -.subtitle .tag { - vertical-align: middle; -} - -.title { - color: #363636; - font-size: 2rem; - font-weight: 600; - line-height: 1.125; -} - -.title strong { - color: inherit; - font-weight: inherit; -} - -.title + .highlight { - margin-top: -0.75rem; -} - -.title:not(.is-spaced) + .subtitle { - margin-top: -1.25rem; -} - -.title.is-1 { - font-size: 3rem; -} - -.title.is-2 { - font-size: 2.5rem; -} - -.title.is-3 { - font-size: 2rem; -} - -.title.is-4 { - font-size: 1.5rem; -} - -.title.is-5 { - font-size: 1.25rem; -} - -.title.is-6 { - font-size: 1rem; -} - -.title.is-7 { - font-size: 0.75rem; -} - -.subtitle { - color: #4a4a4a; - font-size: 1.25rem; - font-weight: 400; - line-height: 1.25; -} - -.subtitle strong { - color: #363636; - font-weight: 600; -} - -.subtitle:not(.is-spaced) + .title { - margin-top: -1.25rem; -} - -.subtitle.is-1 { - font-size: 3rem; -} - -.subtitle.is-2 { - font-size: 2.5rem; -} - -.subtitle.is-3 { - font-size: 2rem; -} - -.subtitle.is-4 { - font-size: 1.5rem; -} - -.subtitle.is-5 { - font-size: 1.25rem; -} - -.subtitle.is-6 { - font-size: 1rem; -} - -.subtitle.is-7 { - font-size: 0.75rem; -} - -.heading { - display: block; - font-size: 11px; - letter-spacing: 1px; - margin-bottom: 5px; - text-transform: uppercase; -} - -.highlight { - font-weight: 400; - max-width: 100%; - overflow: hidden; - padding: 0; -} - -.highlight pre { - overflow: auto; - max-width: 100%; -} - -.number { - align-items: center; - background-color: whitesmoke; - border-radius: 290486px; - display: inline-flex; - font-size: 1.25rem; - height: 2em; - justify-content: center; - margin-right: 1.5rem; - min-width: 2.5em; - padding: 0.25rem 0.5rem; - text-align: center; - vertical-align: top; -} - -.input, .textarea, .select select { - background-color: white; - border-color: #dbdbdb; - border-radius: 4px; - color: #363636; -} - -.input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { - color: rgba(54, 54, 54, 0.3); -} - -.input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { - color: rgba(54, 54, 54, 0.3); -} - -.input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { - color: rgba(54, 54, 54, 0.3); -} - -.input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { - color: rgba(54, 54, 54, 0.3); -} - -.input:hover, .textarea:hover, .select select:hover, .is-hovered.input, .is-hovered.textarea, .select select.is-hovered { - border-color: #b5b5b5; -} - -.input:focus, .textarea:focus, .select select:focus, .is-focused.input, .is-focused.textarea, .select select.is-focused, .input:active, .textarea:active, .select select:active, .is-active.input, .is-active.textarea, .select select.is-active { - border-color: #3273dc; - /*box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);*/ - border: 1.5px solid #3273dc; -} - -.input[disabled], .textarea[disabled], .select select[disabled], -fieldset[disabled] .input, -fieldset[disabled] .textarea, -fieldset[disabled] .select select, -.select fieldset[disabled] select { - background-color: whitesmoke; - border-color: whitesmoke; - box-shadow: none; - color: #7a7a7a; -} - -.input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, -fieldset[disabled] .input::-moz-placeholder, -fieldset[disabled] .textarea::-moz-placeholder, -fieldset[disabled] .select select::-moz-placeholder, -.select fieldset[disabled] select::-moz-placeholder { - color: rgba(122, 122, 122, 0.3); -} - -.input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, -fieldset[disabled] .input::-webkit-input-placeholder, -fieldset[disabled] .textarea::-webkit-input-placeholder, -fieldset[disabled] .select select::-webkit-input-placeholder, -.select fieldset[disabled] select::-webkit-input-placeholder { - color: rgba(122, 122, 122, 0.3); -} - -.input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, -fieldset[disabled] .input:-moz-placeholder, -fieldset[disabled] .textarea:-moz-placeholder, -fieldset[disabled] .select select:-moz-placeholder, -.select fieldset[disabled] select:-moz-placeholder { - color: rgba(122, 122, 122, 0.3); -} - -.input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, -fieldset[disabled] .input:-ms-input-placeholder, -fieldset[disabled] .textarea:-ms-input-placeholder, -fieldset[disabled] .select select:-ms-input-placeholder, -.select fieldset[disabled] select:-ms-input-placeholder { - color: rgba(122, 122, 122, 0.3); -} - -.input, .textarea { - box-shadow: inset 0 0.0625em 0.125em rgba(10, 10, 10, 0.05); - max-width: 100%; - width: 100%; -} - -.input[readonly], .textarea[readonly] { - box-shadow: none; -} - -.is-white.input, .is-white.textarea { - border-color: white; -} - -.is-white.input:focus, .is-white.textarea:focus, .is-white.is-focused.input, .is-white.is-focused.textarea, .is-white.input:active, .is-white.textarea:active, .is-white.is-active.input, .is-white.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); -} - -.is-black.input, .is-black.textarea { - border-color: #0a0a0a; -} - -.is-black.input:focus, .is-black.textarea:focus, .is-black.is-focused.input, .is-black.is-focused.textarea, .is-black.input:active, .is-black.textarea:active, .is-black.is-active.input, .is-black.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); -} - -.is-light.input, .is-light.textarea { - border-color: whitesmoke; -} - -.is-light.input:focus, .is-light.textarea:focus, .is-light.is-focused.input, .is-light.is-focused.textarea, .is-light.input:active, .is-light.textarea:active, .is-light.is-active.input, .is-light.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); -} - -.is-dark.input, .is-dark.textarea { - border-color: #363636; -} - -.is-dark.input:focus, .is-dark.textarea:focus, .is-dark.is-focused.input, .is-dark.is-focused.textarea, .is-dark.input:active, .is-dark.textarea:active, .is-dark.is-active.input, .is-dark.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); -} - -.is-primary.input, .is-primary.textarea { - border-color: #00d1b2; -} - -.is-primary.input:focus, .is-primary.textarea:focus, .is-primary.is-focused.input, .is-primary.is-focused.textarea, .is-primary.input:active, .is-primary.textarea:active, .is-primary.is-active.input, .is-primary.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); -} - -.is-link.input, .is-link.textarea { - border-color: #3273dc; -} - -.is-link.input:focus, .is-link.textarea:focus, .is-link.is-focused.input, .is-link.is-focused.textarea, .is-link.input:active, .is-link.textarea:active, .is-link.is-active.input, .is-link.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); -} - -.is-info.input, .is-info.textarea { - border-color: #3298dc; -} - -.is-info.input:focus, .is-info.textarea:focus, .is-info.is-focused.input, .is-info.is-focused.textarea, .is-info.input:active, .is-info.textarea:active, .is-info.is-active.input, .is-info.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25); -} - -.is-success.input, .is-success.textarea { - border-color: #48c774; -} - -.is-success.input:focus, .is-success.textarea:focus, .is-success.is-focused.input, .is-success.is-focused.textarea, .is-success.input:active, .is-success.textarea:active, .is-success.is-active.input, .is-success.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25); -} - -.is-warning.input, .is-warning.textarea { - border-color: #ffdd57; -} - -.is-warning.input:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, .is-warning.is-focused.textarea, .is-warning.input:active, .is-warning.textarea:active, .is-warning.is-active.input, .is-warning.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); -} - -.is-danger.input, .is-danger.textarea { - border-color: #f14668; -} - -.is-danger.input:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, .is-danger.is-focused.textarea, .is-danger.input:active, .is-danger.textarea:active, .is-danger.is-active.input, .is-danger.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25); -} - -.is-small.input, .is-small.textarea { - border-radius: 2px; - font-size: 0.75rem; -} - -.is-medium.input, .is-medium.textarea { - font-size: 1.25rem; -} - -.is-large.input, .is-large.textarea { - font-size: 1.5rem; -} - -.is-fullwidth.input, .is-fullwidth.textarea { - display: block; - width: 100%; -} - -.is-inline.input, .is-inline.textarea { - display: inline; - width: auto; -} - -.input.is-rounded { - border-radius: 290486px; - padding-left: calc(calc(0.75em - 1px) + 0.375em); - padding-right: calc(calc(0.75em - 1px) + 0.375em); -} - -.input.is-static { - background-color: transparent; - border-color: transparent; - box-shadow: none; - padding-left: 0; - padding-right: 0; -} - -.textarea { - display: block; - max-width: 100%; - min-width: 100%; - padding: calc(0.75em - 1px); - resize: vertical; -} - -.textarea:not([rows]) { - max-height: 40em; - min-height: 8em; -} - -.textarea[rows] { - height: initial; -} - -.textarea.has-fixed-size { - resize: none; -} - -.checkbox, .radio { - cursor: pointer; - display: inline-block; - line-height: 1.25; - position: relative; -} - -.checkbox input, .radio input { - cursor: pointer; -} - -.checkbox:hover, .radio:hover { - color: #363636; -} - -.checkbox[disabled], .radio[disabled], -fieldset[disabled] .checkbox, -fieldset[disabled] .radio { - color: #7a7a7a; - cursor: not-allowed; -} - -.radio + .radio { - margin-left: 0.5em; -} - -.select { - display: inline-block; - max-width: 100%; - position: relative; - vertical-align: top; -} - -.select:not(.is-multiple) { - height: 2.5em; -} - -.select:not(.is-multiple):not(.is-loading)::after { - border-color: #3273dc; - right: 1.125em; - z-index: 4; -} - -.select.is-rounded select { - border-radius: 290486px; - padding-left: 1em; -} - -.select select { - cursor: pointer; - display: block; - font-size: 1em; - max-width: 100%; - outline: none; -} - -.select select::-ms-expand { - display: none; -} - -.select select[disabled]:hover, -fieldset[disabled] .select select:hover { - border-color: whitesmoke; -} - -.select select:not([multiple]) { - padding-right: 2.5em; -} - -.select select[multiple] { - height: auto; - padding: 0; -} - -.select select[multiple] option { - padding: 0.5em 1em; -} - -.select:not(.is-multiple):not(.is-loading):hover::after { - border-color: #363636; -} - -.select.is-white:not(:hover)::after { - border-color: white; -} - -.select.is-white select { - border-color: white; -} - -.select.is-white select:hover, .select.is-white select.is-hovered { - border-color: #f2f2f2; -} - -.select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); -} - -.select.is-black:not(:hover)::after { - border-color: #0a0a0a; -} - -.select.is-black select { - border-color: #0a0a0a; -} - -.select.is-black select:hover, .select.is-black select.is-hovered { - border-color: black; -} - -.select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); -} - -.select.is-light:not(:hover)::after { - border-color: whitesmoke; -} - -.select.is-light select { - border-color: whitesmoke; -} - -.select.is-light select:hover, .select.is-light select.is-hovered { - border-color: #e8e8e8; -} - -.select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); -} - -.select.is-dark:not(:hover)::after { - border-color: #363636; -} - -.select.is-dark select { - border-color: #363636; -} - -.select.is-dark select:hover, .select.is-dark select.is-hovered { - border-color: #292929; -} - -.select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); -} - -.select.is-primary:not(:hover)::after { - border-color: #00d1b2; -} - -.select.is-primary select { - border-color: #00d1b2; -} - -.select.is-primary select:hover, .select.is-primary select.is-hovered { - border-color: #00b89c; -} - -.select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active { - box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); -} - -.select.is-link:not(:hover)::after { - border-color: #3273dc; -} - -.select.is-link select { - border-color: #3273dc; -} - -.select.is-link select:hover, .select.is-link select.is-hovered { - border-color: #2366d1; -} - -.select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { - box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); -} - -.select.is-info:not(:hover)::after { - border-color: #3298dc; -} - -.select.is-info select { - border-color: #3298dc; -} - -.select.is-info select:hover, .select.is-info select.is-hovered { - border-color: #238cd1; -} - -.select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { - box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25); -} - -.select.is-success:not(:hover)::after { - border-color: #48c774; -} - -.select.is-success select { - border-color: #48c774; -} - -.select.is-success select:hover, .select.is-success select.is-hovered { - border-color: #3abb67; -} - -.select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { - box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25); -} - -.select.is-warning:not(:hover)::after { - border-color: #ffdd57; -} - -.select.is-warning select { - border-color: #ffdd57; -} - -.select.is-warning select:hover, .select.is-warning select.is-hovered { - border-color: #ffd83d; -} - -.select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); -} - -.select.is-danger:not(:hover)::after { - border-color: #f14668; -} - -.select.is-danger select { - border-color: #f14668; -} - -.select.is-danger select:hover, .select.is-danger select.is-hovered { - border-color: #ef2e55; -} - -.select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { - box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25); -} - -.select.is-small { - border-radius: 2px; - font-size: 0.75rem; -} - -.select.is-medium { - font-size: 1.25rem; -} - -.select.is-large { - font-size: 1.5rem; -} - -.select.is-disabled::after { - border-color: #7a7a7a; -} - -.select.is-fullwidth { - width: 100%; -} - -.select.is-fullwidth select { - width: 100%; -} - -.select.is-loading::after { - margin-top: 0; - position: absolute; - right: 0.625em; - top: 0.625em; - transform: none; -} - -.select.is-loading.is-small:after { - font-size: 0.75rem; -} - -.select.is-loading.is-medium:after { - font-size: 1.25rem; -} - -.select.is-loading.is-large:after { - font-size: 1.5rem; -} - -.file { - align-items: stretch; - display: flex; - justify-content: flex-start; - position: relative; -} - -.file.is-white .file-cta { - background-color: white; - border-color: transparent; - color: #0a0a0a; -} - -.file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { - background-color: #f9f9f9; - border-color: transparent; - color: #0a0a0a; -} - -.file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); - color: #0a0a0a; -} - -.file.is-white:active .file-cta, .file.is-white.is-active .file-cta { - background-color: #f2f2f2; - border-color: transparent; - color: #0a0a0a; -} - -.file.is-black .file-cta { - background-color: #0a0a0a; - border-color: transparent; - color: white; -} - -.file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { - background-color: #040404; - border-color: transparent; - color: white; -} - -.file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); - color: white; -} - -.file.is-black:active .file-cta, .file.is-black.is-active .file-cta { - background-color: black; - border-color: transparent; - color: white; -} - -.file.is-light .file-cta { - background-color: whitesmoke; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { - background-color: #eeeeee; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); - color: rgba(0, 0, 0, 0.7); -} - -.file.is-light:active .file-cta, .file.is-light.is-active .file-cta { - background-color: #e8e8e8; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.file.is-dark .file-cta { - background-color: #363636; - border-color: transparent; - color: #fff; -} - -.file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta { - background-color: #2f2f2f; - border-color: transparent; - color: #fff; -} - -.file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); - color: #fff; -} - -.file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta { - background-color: #292929; - border-color: transparent; - color: #fff; -} - -.file.is-primary .file-cta { - background-color: #00d1b2; - border-color: transparent; - color: #fff; -} - -.file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta { - background-color: #00c4a7; - border-color: transparent; - color: #fff; -} - -.file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25); - color: #fff; -} - -.file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta { - background-color: #00b89c; - border-color: transparent; - color: #fff; -} - -.file.is-link .file-cta { - background-color: #3273dc; - border-color: transparent; - color: #fff; -} - -.file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { - background-color: #276cda; - border-color: transparent; - color: #fff; -} - -.file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25); - color: #fff; -} - -.file.is-link:active .file-cta, .file.is-link.is-active .file-cta { - background-color: #2366d1; - border-color: transparent; - color: #fff; -} - -.file.is-info .file-cta { - background-color: #3298dc; - border-color: transparent; - color: #fff; -} - -.file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { - background-color: #2793da; - border-color: transparent; - color: #fff; -} - -.file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(50, 152, 220, 0.25); - color: #fff; -} - -.file.is-info:active .file-cta, .file.is-info.is-active .file-cta { - background-color: #238cd1; - border-color: transparent; - color: #fff; -} - -.file.is-success .file-cta { - background-color: #48c774; - border-color: transparent; - color: #fff; -} - -.file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { - background-color: #3ec46d; - border-color: transparent; - color: #fff; -} - -.file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(72, 199, 116, 0.25); - color: #fff; -} - -.file.is-success:active .file-cta, .file.is-success.is-active .file-cta { - background-color: #3abb67; - border-color: transparent; - color: #fff; -} - -.file.is-warning .file-cta { - background-color: #ffdd57; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { - background-color: #ffdb4a; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); - color: rgba(0, 0, 0, 0.7); -} - -.file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { - background-color: #ffd83d; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} - -.file.is-danger .file-cta { - background-color: #f14668; - border-color: transparent; - color: #fff; -} - -.file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { - background-color: #f03a5f; - border-color: transparent; - color: #fff; -} - -.file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(241, 70, 104, 0.25); - color: #fff; -} - -.file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { - background-color: #ef2e55; - border-color: transparent; - color: #fff; -} - -.file.is-small { - font-size: 0.75rem; -} - -.file.is-medium { - font-size: 1.25rem; -} - -.file.is-medium .file-icon .fa { - font-size: 21px; -} - -.file.is-large { - font-size: 1.5rem; -} - -.file.is-large .file-icon .fa { - font-size: 28px; -} - -.file.has-name .file-cta { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} - -.file.has-name .file-name { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.file.has-name.is-empty .file-cta { - border-radius: 4px; -} - -.file.has-name.is-empty .file-name { - display: none; -} - -.file.is-boxed .file-label { - flex-direction: column; -} - -.file.is-boxed .file-cta { - flex-direction: column; - height: auto; - padding: 1em 3em; -} - -.file.is-boxed .file-name { - border-width: 0 1px 1px; -} - -.file.is-boxed .file-icon { - height: 1.5em; - width: 1.5em; -} - -.file.is-boxed .file-icon .fa { - font-size: 21px; -} - -.file.is-boxed.is-small .file-icon .fa { - font-size: 14px; -} - -.file.is-boxed.is-medium .file-icon .fa { - font-size: 28px; -} - -.file.is-boxed.is-large .file-icon .fa { - font-size: 35px; -} - -.file.is-boxed.has-name .file-cta { - border-radius: 4px 4px 0 0; -} - -.file.is-boxed.has-name .file-name { - border-radius: 0 0 4px 4px; - border-width: 0 1px 1px; -} - -.file.is-centered { - justify-content: center; -} - -.file.is-fullwidth .file-label { - width: 100%; -} - -.file.is-fullwidth .file-name { - flex-grow: 1; - max-width: none; -} - -.file.is-right { - justify-content: flex-end; -} - -.file.is-right .file-cta { - border-radius: 0 4px 4px 0; -} - -.file.is-right .file-name { - border-radius: 4px 0 0 4px; - border-width: 1px 0 1px 1px; - order: -1; -} - -.file-label { - align-items: stretch; - display: flex; - cursor: pointer; - justify-content: flex-start; - overflow: hidden; - position: relative; -} - -.file-label:hover .file-cta { - background-color: #eeeeee; - color: #363636; -} - -.file-label:hover .file-name { - border-color: #d5d5d5; -} - -.file-label:active .file-cta { - background-color: #e8e8e8; - color: #363636; -} - -.file-label:active .file-name { - border-color: #cfcfcf; -} - -.file-input { - height: 100%; - left: 0; - opacity: 0; - outline: none; - position: absolute; - top: 0; - width: 100%; -} - -.file-cta, -.file-name { - border-color: #dbdbdb; - border-radius: 4px; - font-size: 1em; - padding-left: 1em; - padding-right: 1em; - white-space: nowrap; -} - -.file-cta { - background-color: whitesmoke; - color: #4a4a4a; -} - -.file-name { - border-color: #dbdbdb; - border-style: solid; - border-width: 1px 1px 1px 0; - display: block; - max-width: 16em; - overflow: hidden; - text-align: inherit; - text-overflow: ellipsis; -} - -.file-icon { - align-items: center; - display: flex; - height: 1em; - justify-content: center; - margin-right: 0.5em; - width: 1em; -} - -.file-icon .fa { - font-size: 14px; -} - -.label { - color: #363636; - display: block; - font-size: 1rem; - font-weight: 700; -} - -.label:not(:last-child) { - margin-bottom: 0.5em; -} - -.label.is-small { - font-size: 0.75rem; -} - -.label.is-medium { - font-size: 1.25rem; -} - -.label.is-large { - font-size: 1.5rem; -} - -.help { - display: block; - font-size: 0.75rem; - margin-top: 0.25rem; -} - -.help.is-white { - color: white; -} - -.help.is-black { - color: #0a0a0a; -} - -.help.is-light { - color: whitesmoke; -} - -.help.is-dark { - color: #363636; -} - -.help.is-primary { - color: #00d1b2; -} - -.help.is-link { - color: #3273dc; -} - -.help.is-info { - color: #3298dc; -} - -.help.is-success { - color: #48c774; -} - -.help.is-warning { - color: #ffdd57; -} - -.help.is-danger { - color: #f14668; -} - -.field:not(:last-child) { - margin-bottom: 0.75rem; -} - -.field.has-addons { - display: flex; - justify-content: flex-start; -} - -.field.has-addons .control:not(:last-child) { - margin-right: -1px; -} - -.field.has-addons .control:not(:first-child):not(:last-child) .button, -.field.has-addons .control:not(:first-child):not(:last-child) .input, -.field.has-addons .control:not(:first-child):not(:last-child) .select select { - border-radius: 0; -} - -.field.has-addons .control:first-child:not(:only-child) .button, -.field.has-addons .control:first-child:not(:only-child) .input, -.field.has-addons .control:first-child:not(:only-child) .select select { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} - -.field.has-addons .control:last-child:not(:only-child) .button, -.field.has-addons .control:last-child:not(:only-child) .input, -.field.has-addons .control:last-child:not(:only-child) .select select { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, -.field.has-addons .control .input:not([disabled]):hover, -.field.has-addons .control .input:not([disabled]).is-hovered, -.field.has-addons .control .select select:not([disabled]):hover, -.field.has-addons .control .select select:not([disabled]).is-hovered { - z-index: 2; -} - -.field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, -.field.has-addons .control .input:not([disabled]):focus, -.field.has-addons .control .input:not([disabled]).is-focused, -.field.has-addons .control .input:not([disabled]):active, -.field.has-addons .control .input:not([disabled]).is-active, -.field.has-addons .control .select select:not([disabled]):focus, -.field.has-addons .control .select select:not([disabled]).is-focused, -.field.has-addons .control .select select:not([disabled]):active, -.field.has-addons .control .select select:not([disabled]).is-active { - z-index: 3; -} - -.field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, -.field.has-addons .control .input:not([disabled]):focus:hover, -.field.has-addons .control .input:not([disabled]).is-focused:hover, -.field.has-addons .control .input:not([disabled]):active:hover, -.field.has-addons .control .input:not([disabled]).is-active:hover, -.field.has-addons .control .select select:not([disabled]):focus:hover, -.field.has-addons .control .select select:not([disabled]).is-focused:hover, -.field.has-addons .control .select select:not([disabled]):active:hover, -.field.has-addons .control .select select:not([disabled]).is-active:hover { - z-index: 4; -} - -.field.has-addons .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} - -.field.has-addons.has-addons-centered { - justify-content: center; -} - -.field.has-addons.has-addons-right { - justify-content: flex-end; -} - -.field.has-addons.has-addons-fullwidth .control { - flex-grow: 1; - flex-shrink: 0; -} - -.field.is-grouped { - display: flex; - justify-content: flex-start; -} - -.field.is-grouped > .control { - flex-shrink: 0; -} - -.field.is-grouped > .control:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; -} - -.field.is-grouped > .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} - -.field.is-grouped.is-grouped-centered { - justify-content: center; -} - -.field.is-grouped.is-grouped-right { - justify-content: flex-end; -} - -.field.is-grouped.is-grouped-multiline { - flex-wrap: wrap; -} - -.field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { - margin-bottom: 0.75rem; -} - -.field.is-grouped.is-grouped-multiline:last-child { - margin-bottom: -0.75rem; -} - -.field.is-grouped.is-grouped-multiline:not(:last-child) { - margin-bottom: 0; -} - -@media screen and (min-width: 769px), print { - .field.is-horizontal { - display: flex; - } -} - -.field-label .label { - font-size: inherit; -} - -@media screen and (max-width: 768px) { - .field-label { - margin-bottom: 0.5rem; - } -} - -@media screen and (min-width: 769px), print { - .field-label { - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - margin-right: 1.5rem; - text-align: right; - } - .field-label.is-small { - font-size: 0.75rem; - padding-top: 0.375em; - } - .field-label.is-normal { - padding-top: 0.375em; - } - .field-label.is-medium { - font-size: 1.25rem; - padding-top: 0.375em; - } - .field-label.is-large { - font-size: 1.5rem; - padding-top: 0.375em; - } -} - -.field-body .field .field { - margin-bottom: 0; -} - -@media screen and (min-width: 769px), print { - .field-body { - display: flex; - flex-basis: 0; - flex-grow: 5; - flex-shrink: 1; - } - .field-body .field { - margin-bottom: 0; - } - .field-body > .field { - flex-shrink: 1; - } - .field-body > .field:not(.is-narrow) { - flex-grow: 1; - } - .field-body > .field:not(:last-child) { - margin-right: 0.75rem; - } -} - -.control { - box-sizing: border-box; - clear: both; - font-size: 1rem; - position: relative; - text-align: inherit; -} - -.control.has-icons-left .input:focus ~ .icon, -.control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, -.control.has-icons-right .select:focus ~ .icon { - color: #4a4a4a; -} - -.control.has-icons-left .input.is-small ~ .icon, -.control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, -.control.has-icons-right .select.is-small ~ .icon { - font-size: 0.75rem; -} - -.control.has-icons-left .input.is-medium ~ .icon, -.control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, -.control.has-icons-right .select.is-medium ~ .icon { - font-size: 1.25rem; -} - -.control.has-icons-left .input.is-large ~ .icon, -.control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, -.control.has-icons-right .select.is-large ~ .icon { - font-size: 1.5rem; -} - -.control.has-icons-left .icon, .control.has-icons-right .icon { - color: #dbdbdb; - height: 2.5em; - pointer-events: none; - position: absolute; - top: 0; - width: 2.5em; - z-index: 4; -} - -.control.has-icons-left .input, -.control.has-icons-left .select select { - padding-left: 2.5em; -} - -.control.has-icons-left .icon.is-left { - left: 0; -} - -.control.has-icons-right .input, -.control.has-icons-right .select select { - padding-right: 2.5em; -} - -.control.has-icons-right .icon.is-right { - right: 0; -} - -.control.is-loading::after { - position: absolute !important; - right: 0.625em; - top: 0.625em; - z-index: 4; -} - -.control.is-loading.is-small:after { - font-size: 0.75rem; -} - -.control.is-loading.is-medium:after { - font-size: 1.25rem; -} - -.control.is-loading.is-large:after { - font-size: 1.5rem; -} - -.breadcrumb { - font-size: 1rem; - white-space: nowrap; -} - -.breadcrumb a { - align-items: center; - color: #3273dc; - display: flex; - justify-content: center; - padding: 0 0.75em; -} - -.breadcrumb a:hover { - color: #363636; -} - -.breadcrumb li { - align-items: center; - display: flex; -} - -.breadcrumb li:first-child a { - padding-left: 0; -} - -.breadcrumb li.is-active a { - color: #363636; - cursor: default; - pointer-events: none; -} - -.breadcrumb li + li::before { - color: #b5b5b5; - content: "\0002f"; -} - -.breadcrumb ul, -.breadcrumb ol { - align-items: flex-start; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} - -.breadcrumb .icon:first-child { - margin-right: 0.5em; -} - -.breadcrumb .icon:last-child { - margin-left: 0.5em; -} - -.breadcrumb.is-centered ol, -.breadcrumb.is-centered ul { - justify-content: center; -} - -.breadcrumb.is-right ol, -.breadcrumb.is-right ul { - justify-content: flex-end; -} - -.breadcrumb.is-small { - font-size: 0.75rem; -} - -.breadcrumb.is-medium { - font-size: 1.25rem; -} - -.breadcrumb.is-large { - font-size: 1.5rem; -} - -.breadcrumb.has-arrow-separator li + li::before { - content: "\02192"; -} - -.breadcrumb.has-bullet-separator li + li::before { - content: "\02022"; -} - -.breadcrumb.has-dot-separator li + li::before { - content: "\000b7"; -} - -.breadcrumb.has-succeeds-separator li + li::before { - content: "\0227B"; -} - -.card { - background-color: white; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - color: #4a4a4a; - max-width: 100%; - position: relative; -} - -.card-header { - background-color: transparent; - align-items: stretch; - box-shadow: 0 0.125em 0.25em rgba(10, 10, 10, 0.1); - display: flex; -} - -.card-header-title { - align-items: center; - color: #363636; - display: flex; - flex-grow: 1; - font-weight: 700; - padding: 0.75rem 1rem; -} - -.card-header-title.is-centered { - justify-content: center; -} - -.card-header-icon { - align-items: center; - cursor: pointer; - display: flex; - justify-content: center; - padding: 0.75rem 1rem; -} - -.card-image { - display: block; - position: relative; -} - -.card-content { - background-color: transparent; - padding: 1.5rem; -} - -.card-footer { - background-color: transparent; - border-top: 1px solid #ededed; - align-items: stretch; - display: flex; -} - -.card-footer-item { - align-items: center; - display: flex; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - justify-content: center; - padding: 0.75rem; -} - -.card-footer-item:not(:last-child) { - border-right: 1px solid #ededed; -} - -.card .media:not(:last-child) { - margin-bottom: 1.5rem; -} - -.dropdown { - display: inline-flex; - position: relative; - vertical-align: top; -} - -.dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { - display: block; -} - -.dropdown.is-right .dropdown-menu { - left: auto; - right: 0; -} - -.dropdown.is-up .dropdown-menu { - bottom: 100%; - padding-bottom: 4px; - padding-top: initial; - top: auto; -} - -.dropdown-menu { - display: none; - left: 0; - min-width: 12rem; - padding-top: 4px; - position: absolute; - top: 100%; - z-index: 20; -} - -.dropdown-content { - background-color: white; - border-radius: 4px; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - padding-bottom: 0.5rem; - padding-top: 0.5rem; -} - -.dropdown-item { - color: #4a4a4a; - display: block; - font-size: 0.875rem; - line-height: 1.5; - padding: 0.375rem 1rem; - position: relative; -} - -a.dropdown-item, -button.dropdown-item { - padding-right: 3rem; - text-align: inherit; - white-space: nowrap; - width: 100%; -} - -a.dropdown-item:hover, -button.dropdown-item:hover { - background-color: whitesmoke; - color: #0a0a0a; -} - -a.dropdown-item.is-active, -button.dropdown-item.is-active { - background-color: #3273dc; - color: #fff; -} - -.dropdown-divider { - background-color: #ededed; - border: none; - display: block; - height: 1px; - margin: 0.5rem 0; -} - -.level { - align-items: center; - justify-content: space-between; -} - -.level code { - border-radius: 4px; -} - -.level img { - display: inline-block; - vertical-align: top; -} - -.level.is-mobile { - display: flex; -} - -.level.is-mobile .level-left, -.level.is-mobile .level-right { - display: flex; -} - -.level.is-mobile .level-left + .level-right { - margin-top: 0; -} - -.level.is-mobile .level-item:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; -} - -.level.is-mobile .level-item:not(.is-narrow) { - flex-grow: 1; -} - -@media screen and (min-width: 769px), print { - .level { - display: flex; - } - .level > .level-item:not(.is-narrow) { - flex-grow: 1; - } -} - -.level-item { - align-items: center; - display: flex; - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; - justify-content: center; -} - -.level-item .title, -.level-item .subtitle { - margin-bottom: 0; -} - -@media screen and (max-width: 768px) { - .level-item:not(:last-child) { - margin-bottom: 0.75rem; - } -} - -.level-left, -.level-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; -} - -.level-left .level-item.is-flexible, -.level-right .level-item.is-flexible { - flex-grow: 1; -} - -@media screen and (min-width: 769px), print { - .level-left .level-item:not(:last-child), - .level-right .level-item:not(:last-child) { - margin-right: 0.75rem; - } -} - -.level-left { - align-items: center; - justify-content: flex-start; -} - -@media screen and (max-width: 768px) { - .level-left + .level-right { - margin-top: 1.5rem; - } -} - -@media screen and (min-width: 769px), print { - .level-left { - display: flex; - } -} - -.level-right { - align-items: center; - justify-content: flex-end; -} - -@media screen and (min-width: 769px), print { - .level-right { - display: flex; - } -} - -.media { - align-items: flex-start; - display: flex; - text-align: inherit; -} - -.media .content:not(:last-child) { - margin-bottom: 0.75rem; -} - -.media .media { - border-top: 1px solid rgba(219, 219, 219, 0.5); - display: flex; - padding-top: 0.75rem; -} - -.media .media .content:not(:last-child), -.media .media .control:not(:last-child) { - margin-bottom: 0.5rem; -} - -.media .media .media { - padding-top: 0.5rem; -} - -.media .media .media + .media { - margin-top: 0.5rem; -} - -.media + .media { - border-top: 1px solid rgba(219, 219, 219, 0.5); - margin-top: 1rem; - padding-top: 1rem; -} - -.media.is-large + .media { - margin-top: 1.5rem; - padding-top: 1.5rem; -} - -.media-left, -.media-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; -} - -.media-left { - margin-right: 1rem; -} - -.media-right { - margin-left: 1rem; -} - -.media-content { - flex-basis: auto; - flex-grow: 1; - flex-shrink: 1; - text-align: inherit; -} - -@media screen and (max-width: 768px) { - .media-content { - overflow-x: auto; - } -} - -.menu { - font-size: 1rem; -} - -.menu.is-small { - font-size: 0.75rem; -} - -.menu.is-medium { - font-size: 1.25rem; -} - -.menu.is-large { - font-size: 1.5rem; -} - -.menu-list { - line-height: 1.25; -} - -.menu-list a { - border-radius: 2px; - color: #4a4a4a; - display: block; - padding: 0.5em 0.75em; -} - -.menu-list a:hover { - background-color: whitesmoke; - color: #363636; -} - -.menu-list a.is-active { - background-color: #3273dc; - color: #fff; -} - -.menu-list li ul { - border-left: 1px solid #dbdbdb; - margin: 0.75em; - padding-left: 0.75em; -} - -.menu-label { - color: #7a7a7a; - font-size: 0.75em; - letter-spacing: 0.1em; - text-transform: uppercase; -} - -.menu-label:not(:first-child) { - margin-top: 1em; -} - -.menu-label:not(:last-child) { - margin-bottom: 1em; -} - -.message { - background-color: whitesmoke; - border-radius: 4px; - font-size: 1rem; -} - -.message strong { - color: currentColor; -} - -.message a:not(.button):not(.tag):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; -} - -.message.is-small { - font-size: 0.75rem; -} - -.message.is-medium { - font-size: 1.25rem; -} - -.message.is-large { - font-size: 1.5rem; -} - -.message.is-white { - background-color: white; -} - -.message.is-white .message-header { - background-color: white; - color: #0a0a0a; -} - -.message.is-white .message-body { - border-color: white; -} - -.message.is-black { - background-color: #fafafa; -} - -.message.is-black .message-header { - background-color: #0a0a0a; - color: white; -} - -.message.is-black .message-body { - border-color: #0a0a0a; -} - -.message.is-light { - background-color: #fafafa; -} - -.message.is-light .message-header { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.message.is-light .message-body { - border-color: whitesmoke; -} - -.message.is-dark { - background-color: #fafafa; -} - -.message.is-dark .message-header { - background-color: #363636; - color: #fff; -} - -.message.is-dark .message-body { - border-color: #363636; -} - -.message.is-primary { - background-color: #ebfffc; -} - -.message.is-primary .message-header { - background-color: #00d1b2; - color: #fff; -} - -.message.is-primary .message-body { - border-color: #00d1b2; - color: #00947e; -} - -.message.is-link { - background-color: #eef3fc; -} - -.message.is-link .message-header { - background-color: #3273dc; - color: #fff; -} - -.message.is-link .message-body { - border-color: #3273dc; - color: #2160c4; -} - -.message.is-info { - background-color: #eef6fc; -} - -.message.is-info .message-header { - background-color: #3298dc; - color: #fff; -} - -.message.is-info .message-body { - border-color: #3298dc; - color: #1d72aa; -} - -.message.is-success { - background-color: #effaf3; -} - -.message.is-success .message-header { - background-color: #48c774; - color: #fff; -} - -.message.is-success .message-body { - border-color: #48c774; - color: #257942; -} - -.message.is-warning { - background-color: #fffbeb; -} - -.message.is-warning .message-header { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.message.is-warning .message-body { - border-color: #ffdd57; - color: #947600; -} - -.message.is-danger { - background-color: #feecf0; -} - -.message.is-danger .message-header { - background-color: #f14668; - color: #fff; -} - -.message.is-danger .message-body { - border-color: #f14668; - color: #cc0f35; -} - -.message-header { - align-items: center; - background-color: #4a4a4a; - border-radius: 4px 4px 0 0; - color: #fff; - display: flex; - font-weight: 700; - justify-content: space-between; - line-height: 1.25; - padding: 0.75em 1em; - position: relative; -} - -.message-header .delete { - flex-grow: 0; - flex-shrink: 0; - margin-left: 0.75em; -} - -.message-header + .message-body { - border-width: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.message-body { - border-color: #dbdbdb; - border-radius: 4px; - border-style: solid; - border-width: 0 0 0 4px; - color: #4a4a4a; - padding: 1.25em 1.5em; -} - -.message-body code, -.message-body pre { - background-color: white; -} - -.message-body pre code { - background-color: transparent; -} - -.modal { - align-items: center; - display: none; - flex-direction: column; - justify-content: center; - overflow: hidden; - position: fixed; - z-index: 40; -} - -.modal.is-active { - display: flex; -} - -.modal-background { - background-color: rgba(10, 10, 10, 0.86); -} - -.modal-content, -.modal-card { - margin: 0 20px; - max-height: calc(100vh - 160px); - overflow: auto; - position: relative; - width: 100%; -} - -@media screen and (min-width: 769px), print { - .modal-content, - .modal-card { - margin: 0 auto; - max-height: calc(100vh - 40px); - width: 640px; - } -} - -.modal-close { - background: none; - height: 40px; - position: fixed; - right: 20px; - top: 20px; - width: 40px; -} - -.modal-card { - display: flex; - flex-direction: column; - max-height: calc(100vh - 40px); - overflow: hidden; - -ms-overflow-y: visible; -} - -.modal-card-head, -.modal-card-foot { - align-items: center; - background-color: whitesmoke; - display: flex; - flex-shrink: 0; - justify-content: flex-start; - padding: 20px; - position: relative; -} - -.modal-card-head { - border-bottom: 1px solid #dbdbdb; - border-top-left-radius: 6px; - border-top-right-radius: 6px; -} - -.modal-card-title { - color: #363636; - flex-grow: 1; - flex-shrink: 0; - font-size: 1.5rem; - line-height: 1; -} - -.modal-card-foot { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - border-top: 1px solid #dbdbdb; -} - -.modal-card-foot .button:not(:last-child) { - margin-right: 0.5em; -} - -.modal-card-body { - -webkit-overflow-scrolling: touch; - background-color: white; - flex-grow: 1; - flex-shrink: 1; - overflow: auto; - padding: 20px; -} - -.navbar { - background-color: white; - min-height: 3.25rem; - position: relative; - z-index: 30; -} - -.navbar.is-white { - background-color: white; - color: #0a0a0a; -} - -.navbar.is-white .navbar-brand > .navbar-item, -.navbar.is-white .navbar-brand .navbar-link { - color: #0a0a0a; -} - -.navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, -.navbar.is-white .navbar-brand .navbar-link:focus, -.navbar.is-white .navbar-brand .navbar-link:hover, -.navbar.is-white .navbar-brand .navbar-link.is-active { - /* background-color: #f2f2f2;*/ - color: #f1c40f; -} - -.navbar.is-white .navbar-brand .navbar-link::after { - border-color: #0a0a0a; -} - -.navbar.is-white .navbar-burger { - color: #0a0a0a; -} - -@media screen and (min-width: 1024px) { - .navbar.is-white .navbar-start > .navbar-item, - .navbar.is-white .navbar-start .navbar-link, - .navbar.is-white .navbar-end > .navbar-item, - .navbar.is-white .navbar-end .navbar-link { - color: #0a0a0a; - } - .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, - .navbar.is-white .navbar-start .navbar-link:focus, - .navbar.is-white .navbar-start .navbar-link:hover, - .navbar.is-white .navbar-start .navbar-link.is-active, - .navbar.is-white .navbar-end > a.navbar-item:focus, - .navbar.is-white .navbar-end > a.navbar-item:hover, - .navbar.is-white .navbar-end > a.navbar-item.is-active, - .navbar.is-white .navbar-end .navbar-link:focus, - .navbar.is-white .navbar-end .navbar-link:hover, - .navbar.is-white .navbar-end .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; - } - .navbar.is-white .navbar-start .navbar-link::after, - .navbar.is-white .navbar-end .navbar-link::after { - border-color: #0a0a0a; - } - .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #f2f2f2; - color: #0a0a0a; - } - .navbar.is-white .navbar-dropdown a.navbar-item.is-active { - background-color: white; - color: #0a0a0a; - } -} - -.navbar.is-black { - background-color: #0a0a0a; - color: white; -} - -.navbar.is-black .navbar-brand > .navbar-item, -.navbar.is-black .navbar-brand .navbar-link { - color: white; -} - -.navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, -.navbar.is-black .navbar-brand .navbar-link:focus, -.navbar.is-black .navbar-brand .navbar-link:hover, -.navbar.is-black .navbar-brand .navbar-link.is-active { - background-color: black; - color: white; -} - -.navbar.is-black .navbar-brand .navbar-link::after { - border-color: white; -} - -.navbar.is-black .navbar-burger { - color: white; -} - -@media screen and (min-width: 1024px) { - .navbar.is-black .navbar-start > .navbar-item, - .navbar.is-black .navbar-start .navbar-link, - .navbar.is-black .navbar-end > .navbar-item, - .navbar.is-black .navbar-end .navbar-link { - color: white; - } - .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, - .navbar.is-black .navbar-start .navbar-link:focus, - .navbar.is-black .navbar-start .navbar-link:hover, - .navbar.is-black .navbar-start .navbar-link.is-active, - .navbar.is-black .navbar-end > a.navbar-item:focus, - .navbar.is-black .navbar-end > a.navbar-item:hover, - .navbar.is-black .navbar-end > a.navbar-item.is-active, - .navbar.is-black .navbar-end .navbar-link:focus, - .navbar.is-black .navbar-end .navbar-link:hover, - .navbar.is-black .navbar-end .navbar-link.is-active { - background-color: black; - color: white; - } - .navbar.is-black .navbar-start .navbar-link::after, - .navbar.is-black .navbar-end .navbar-link::after { - border-color: white; - } - .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { - background-color: black; - color: white; - } - .navbar.is-black .navbar-dropdown a.navbar-item.is-active { - background-color: #0a0a0a; - color: white; - } -} - -.navbar.is-light { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-light .navbar-brand > .navbar-item, -.navbar.is-light .navbar-brand .navbar-link { - color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, -.navbar.is-light .navbar-brand .navbar-link:focus, -.navbar.is-light .navbar-brand .navbar-link:hover, -.navbar.is-light .navbar-brand .navbar-link.is-active { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-light .navbar-brand .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-light .navbar-burger { - color: rgba(0, 0, 0, 0.7); -} - -@media screen and (min-width: 1024px) { - .navbar.is-light .navbar-start > .navbar-item, - .navbar.is-light .navbar-start .navbar-link, - .navbar.is-light .navbar-end > .navbar-item, - .navbar.is-light .navbar-end .navbar-link { - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, - .navbar.is-light .navbar-start .navbar-link:focus, - .navbar.is-light .navbar-start .navbar-link:hover, - .navbar.is-light .navbar-start .navbar-link.is-active, - .navbar.is-light .navbar-end > a.navbar-item:focus, - .navbar.is-light .navbar-end > a.navbar-item:hover, - .navbar.is-light .navbar-end > a.navbar-item.is-active, - .navbar.is-light .navbar-end .navbar-link:focus, - .navbar.is-light .navbar-end .navbar-link:hover, - .navbar.is-light .navbar-end .navbar-link.is-active { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-start .navbar-link::after, - .navbar.is-light .navbar-end .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-dropdown a.navbar-item.is-active { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); - } -} - -.navbar.is-dark { - background-color: #363636; - color: #fff; -} - -.navbar.is-dark .navbar-brand > .navbar-item, -.navbar.is-dark .navbar-brand .navbar-link { - color: #fff; -} - -.navbar.is-dark .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, -.navbar.is-dark .navbar-brand .navbar-link:focus, -.navbar.is-dark .navbar-brand .navbar-link:hover, -.navbar.is-dark .navbar-brand .navbar-link.is-active { - background-color: #292929; - color: #fff; -} - -.navbar.is-dark .navbar-brand .navbar-link::after { - border-color: #fff; -} - -.navbar.is-dark .navbar-burger { - color: #fff; -} - -@media screen and (min-width: 1024px) { - .navbar.is-dark .navbar-start > .navbar-item, - .navbar.is-dark .navbar-start .navbar-link, - .navbar.is-dark .navbar-end > .navbar-item, - .navbar.is-dark .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-dark .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, - .navbar.is-dark .navbar-start .navbar-link:focus, - .navbar.is-dark .navbar-start .navbar-link:hover, - .navbar.is-dark .navbar-start .navbar-link.is-active, - .navbar.is-dark .navbar-end > a.navbar-item:focus, - .navbar.is-dark .navbar-end > a.navbar-item:hover, - .navbar.is-dark .navbar-end > a.navbar-item.is-active, - .navbar.is-dark .navbar-end .navbar-link:focus, - .navbar.is-dark .navbar-end .navbar-link:hover, - .navbar.is-dark .navbar-end .navbar-link.is-active { - background-color: #292929; - color: #fff; - } - .navbar.is-dark .navbar-start .navbar-link::after, - .navbar.is-dark .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #292929; - color: #fff; - } - .navbar.is-dark .navbar-dropdown a.navbar-item.is-active { - background-color: #363636; - color: #fff; - } -} - -.navbar.is-primary { - background-color: #00d1b2; - color: #fff; -} - -.navbar.is-primary .navbar-brand > .navbar-item, -.navbar.is-primary .navbar-brand .navbar-link { - color: #fff; -} - -.navbar.is-primary .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, -.navbar.is-primary .navbar-brand .navbar-link:focus, -.navbar.is-primary .navbar-brand .navbar-link:hover, -.navbar.is-primary .navbar-brand .navbar-link.is-active { - background-color: #00b89c; - color: #fff; -} - -.navbar.is-primary .navbar-brand .navbar-link::after { - border-color: #fff; -} - -.navbar.is-primary .navbar-burger { - color: #fff; -} - -@media screen and (min-width: 1024px) { - .navbar.is-primary .navbar-start > .navbar-item, - .navbar.is-primary .navbar-start .navbar-link, - .navbar.is-primary .navbar-end > .navbar-item, - .navbar.is-primary .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-primary .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, - .navbar.is-primary .navbar-start .navbar-link:focus, - .navbar.is-primary .navbar-start .navbar-link:hover, - .navbar.is-primary .navbar-start .navbar-link.is-active, - .navbar.is-primary .navbar-end > a.navbar-item:focus, - .navbar.is-primary .navbar-end > a.navbar-item:hover, - .navbar.is-primary .navbar-end > a.navbar-item.is-active, - .navbar.is-primary .navbar-end .navbar-link:focus, - .navbar.is-primary .navbar-end .navbar-link:hover, - .navbar.is-primary .navbar-end .navbar-link.is-active { - background-color: #00b89c; - color: #fff; - } - .navbar.is-primary .navbar-start .navbar-link::after, - .navbar.is-primary .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #00b89c; - color: #fff; - } - .navbar.is-primary .navbar-dropdown a.navbar-item.is-active { - background-color: #00d1b2; - color: #fff; - } -} - -.navbar.is-link { - background-color: #3273dc; - color: #fff; -} - -.navbar.is-link .navbar-brand > .navbar-item, -.navbar.is-link .navbar-brand .navbar-link { - color: #fff; -} - -.navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, -.navbar.is-link .navbar-brand .navbar-link:focus, -.navbar.is-link .navbar-brand .navbar-link:hover, -.navbar.is-link .navbar-brand .navbar-link.is-active { - background-color: #2366d1; - color: #fff; -} - -.navbar.is-link .navbar-brand .navbar-link::after { - border-color: #fff; -} - -.navbar.is-link .navbar-burger { - color: #fff; -} - -@media screen and (min-width: 1024px) { - .navbar.is-link .navbar-start > .navbar-item, - .navbar.is-link .navbar-start .navbar-link, - .navbar.is-link .navbar-end > .navbar-item, - .navbar.is-link .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, - .navbar.is-link .navbar-start .navbar-link:focus, - .navbar.is-link .navbar-start .navbar-link:hover, - .navbar.is-link .navbar-start .navbar-link.is-active, - .navbar.is-link .navbar-end > a.navbar-item:focus, - .navbar.is-link .navbar-end > a.navbar-item:hover, - .navbar.is-link .navbar-end > a.navbar-item.is-active, - .navbar.is-link .navbar-end .navbar-link:focus, - .navbar.is-link .navbar-end .navbar-link:hover, - .navbar.is-link .navbar-end .navbar-link.is-active { - background-color: #2366d1; - color: #fff; - } - .navbar.is-link .navbar-start .navbar-link::after, - .navbar.is-link .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #2366d1; - color: #fff; - } - .navbar.is-link .navbar-dropdown a.navbar-item.is-active { - background-color: #3273dc; - color: #fff; - } -} - -.navbar.is-info { - background-color: #3298dc; - color: #fff; -} - -.navbar.is-info .navbar-brand > .navbar-item, -.navbar.is-info .navbar-brand .navbar-link { - color: #fff; -} - -.navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, -.navbar.is-info .navbar-brand .navbar-link:focus, -.navbar.is-info .navbar-brand .navbar-link:hover, -.navbar.is-info .navbar-brand .navbar-link.is-active { - background-color: #238cd1; - color: #fff; -} - -.navbar.is-info .navbar-brand .navbar-link::after { - border-color: #fff; -} - -.navbar.is-info .navbar-burger { - color: #fff; -} - -@media screen and (min-width: 1024px) { - .navbar.is-info .navbar-start > .navbar-item, - .navbar.is-info .navbar-start .navbar-link, - .navbar.is-info .navbar-end > .navbar-item, - .navbar.is-info .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, - .navbar.is-info .navbar-start .navbar-link:focus, - .navbar.is-info .navbar-start .navbar-link:hover, - .navbar.is-info .navbar-start .navbar-link.is-active, - .navbar.is-info .navbar-end > a.navbar-item:focus, - .navbar.is-info .navbar-end > a.navbar-item:hover, - .navbar.is-info .navbar-end > a.navbar-item.is-active, - .navbar.is-info .navbar-end .navbar-link:focus, - .navbar.is-info .navbar-end .navbar-link:hover, - .navbar.is-info .navbar-end .navbar-link.is-active { - background-color: #238cd1; - color: #fff; - } - .navbar.is-info .navbar-start .navbar-link::after, - .navbar.is-info .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #238cd1; - color: #fff; - } - .navbar.is-info .navbar-dropdown a.navbar-item.is-active { - background-color: #3298dc; - color: #fff; - } -} - -.navbar.is-success { - background-color: #48c774; - color: #fff; -} - -.navbar.is-success .navbar-brand > .navbar-item, -.navbar.is-success .navbar-brand .navbar-link { - color: #fff; -} - -.navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, -.navbar.is-success .navbar-brand .navbar-link:focus, -.navbar.is-success .navbar-brand .navbar-link:hover, -.navbar.is-success .navbar-brand .navbar-link.is-active { - background-color: #3abb67; - color: #fff; -} - -.navbar.is-success .navbar-brand .navbar-link::after { - border-color: #fff; -} - -.navbar.is-success .navbar-burger { - color: #fff; -} - -@media screen and (min-width: 1024px) { - .navbar.is-success .navbar-start > .navbar-item, - .navbar.is-success .navbar-start .navbar-link, - .navbar.is-success .navbar-end > .navbar-item, - .navbar.is-success .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, - .navbar.is-success .navbar-start .navbar-link:focus, - .navbar.is-success .navbar-start .navbar-link:hover, - .navbar.is-success .navbar-start .navbar-link.is-active, - .navbar.is-success .navbar-end > a.navbar-item:focus, - .navbar.is-success .navbar-end > a.navbar-item:hover, - .navbar.is-success .navbar-end > a.navbar-item.is-active, - .navbar.is-success .navbar-end .navbar-link:focus, - .navbar.is-success .navbar-end .navbar-link:hover, - .navbar.is-success .navbar-end .navbar-link.is-active { - background-color: #3abb67; - color: #fff; - } - .navbar.is-success .navbar-start .navbar-link::after, - .navbar.is-success .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #3abb67; - color: #fff; - } - .navbar.is-success .navbar-dropdown a.navbar-item.is-active { - background-color: #48c774; - color: #fff; - } -} - -.navbar.is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-warning .navbar-brand > .navbar-item, -.navbar.is-warning .navbar-brand .navbar-link { - color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, -.navbar.is-warning .navbar-brand .navbar-link:focus, -.navbar.is-warning .navbar-brand .navbar-link:hover, -.navbar.is-warning .navbar-brand .navbar-link.is-active { - background-color: #ffd83d; - color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-warning .navbar-brand .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); -} - -.navbar.is-warning .navbar-burger { - color: rgba(0, 0, 0, 0.7); -} - -@media screen and (min-width: 1024px) { - .navbar.is-warning .navbar-start > .navbar-item, - .navbar.is-warning .navbar-start .navbar-link, - .navbar.is-warning .navbar-end > .navbar-item, - .navbar.is-warning .navbar-end .navbar-link { - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, - .navbar.is-warning .navbar-start .navbar-link:focus, - .navbar.is-warning .navbar-start .navbar-link:hover, - .navbar.is-warning .navbar-start .navbar-link.is-active, - .navbar.is-warning .navbar-end > a.navbar-item:focus, - .navbar.is-warning .navbar-end > a.navbar-item:hover, - .navbar.is-warning .navbar-end > a.navbar-item.is-active, - .navbar.is-warning .navbar-end .navbar-link:focus, - .navbar.is-warning .navbar-end .navbar-link:hover, - .navbar.is-warning .navbar-end .navbar-link.is-active { - background-color: #ffd83d; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-start .navbar-link::after, - .navbar.is-warning .navbar-end .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #ffd83d; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); - } -} - -.navbar.is-danger { - background-color: #f14668; - color: #fff; -} - -.navbar.is-danger .navbar-brand > .navbar-item, -.navbar.is-danger .navbar-brand .navbar-link { - color: #fff; -} - -.navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, -.navbar.is-danger .navbar-brand .navbar-link:focus, -.navbar.is-danger .navbar-brand .navbar-link:hover, -.navbar.is-danger .navbar-brand .navbar-link.is-active { - background-color: #ef2e55; - color: #fff; -} - -.navbar.is-danger .navbar-brand .navbar-link::after { - border-color: #fff; -} - -.navbar.is-danger .navbar-burger { - color: #fff; -} - -@media screen and (min-width: 1024px) { - .navbar.is-danger .navbar-start > .navbar-item, - .navbar.is-danger .navbar-start .navbar-link, - .navbar.is-danger .navbar-end > .navbar-item, - .navbar.is-danger .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, - .navbar.is-danger .navbar-start .navbar-link:focus, - .navbar.is-danger .navbar-start .navbar-link:hover, - .navbar.is-danger .navbar-start .navbar-link.is-active, - .navbar.is-danger .navbar-end > a.navbar-item:focus, - .navbar.is-danger .navbar-end > a.navbar-item:hover, - .navbar.is-danger .navbar-end > a.navbar-item.is-active, - .navbar.is-danger .navbar-end .navbar-link:focus, - .navbar.is-danger .navbar-end .navbar-link:hover, - .navbar.is-danger .navbar-end .navbar-link.is-active { - background-color: #ef2e55; - color: #fff; - } - .navbar.is-danger .navbar-start .navbar-link::after, - .navbar.is-danger .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #ef2e55; - color: #fff; - } - .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { - background-color: #f14668; - color: #fff; - } -} - -.navbar > .container { - align-items: stretch; - display: flex; - min-height: 3.25rem; - width: 100%; -} - -.navbar.has-shadow { - box-shadow: 0 2px 0 0 whitesmoke; -} - -.navbar.is-fixed-bottom, .navbar.is-fixed-top { - left: 0; - position: fixed; - right: 0; - z-index: 30; -} - -.navbar.is-fixed-bottom { - bottom: 0; -} - -.navbar.is-fixed-bottom.has-shadow { - box-shadow: 0 -2px 0 0 whitesmoke; -} - -.navbar.is-fixed-top { - top: 0; -} - -html.has-navbar-fixed-top, -body.has-navbar-fixed-top { - padding-top: 3.25rem; -} - -html.has-navbar-fixed-bottom, -body.has-navbar-fixed-bottom { - padding-bottom: 3.25rem; -} - -.navbar-brand, -.navbar-tabs { - align-items: stretch; - display: flex; - flex-shrink: 0; - min-height: 3.25rem; -} - -.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { - background-color: transparent; -} - -.navbar-tabs { - -webkit-overflow-scrolling: touch; - max-width: 100vw; - overflow-x: auto; - overflow-y: hidden; -} - -.navbar-burger { - color: #4a4a4a; - cursor: pointer; - display: block; - height: 3.25rem; - position: relative; - width: 3.25rem; - /*margin-left: auto;*/ -} - -.navbar-burger span { - background-color: currentColor; - display: block; - height: 1px; - left: calc(50% - 8px); - position: absolute; - transform-origin: center; - transition-duration: 86ms; - transition-property: background-color, opacity, transform; - transition-timing-function: ease-out; - width: 16px; -} - -.navbar-burger span:nth-child(1) { - top: calc(50% - 6px); -} - -.navbar-burger span:nth-child(2) { - top: calc(50% - 1px); -} - -.navbar-burger span:nth-child(3) { - top: calc(50% + 4px); -} - -.navbar-burger:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.navbar-burger.is-active span:nth-child(1) { - transform: translateY(5px) rotate(45deg); -} - -.navbar-burger.is-active span:nth-child(2) { - opacity: 0; -} - -.navbar-burger.is-active span:nth-child(3) { - transform: translateY(-5px) rotate(-45deg); -} - -.navbar-menu { - display: none; -} - -.navbar-item, -.navbar-link { - color: #4a4a4a; - display: block; - line-height: 1.5; - padding: 0.5rem 0.75rem; - position: relative; -} - -.navbar-item .icon:only-child, -.navbar-link .icon:only-child { - margin-left: -0.25rem; - margin-right: -0.25rem; -} - -a.navbar-item, -.navbar-link { - cursor: pointer; -} - -a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, -.navbar-link:focus, -.navbar-link:focus-within, -.navbar-link:hover, -.navbar-link.is-active { - /*background-color: #fafafa;*/ - color: #f1c40f; -} - -.navbar-item { - flex-grow: 0; - flex-shrink: 0; -} - -.navbar-item img { - max-height: 1.75rem; -} - -.navbar-item.has-dropdown { - padding: 0; -} - -.navbar-item.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} - -.navbar-item.is-tab { - border-bottom: 1px solid transparent; - min-height: 3.25rem; - padding-bottom: calc(0.5rem - 1px); -} - -.navbar-item.is-tab:focus, .navbar-item.is-tab:hover { - background-color: transparent; - border-bottom-color: #3273dc; -} - -.navbar-item.is-tab.is-active { - background-color: transparent; - border-bottom-color: #3273dc; - border-bottom-style: solid; - border-bottom-width: 3px; - color: #3273dc; - padding-bottom: calc(0.5rem - 3px); -} - -.navbar-content { - flex-grow: 1; - flex-shrink: 1; -} - -.navbar-link:not(.is-arrowless) { - padding-right: 2.5em; -} - -.navbar-link:not(.is-arrowless)::after { - border-color: #3273dc; - margin-top: -0.375em; - right: 1.125em; -} - -.navbar-dropdown { - font-size: 0.875rem; - padding-bottom: 0.5rem; - padding-top: 0.5rem; -} - -.navbar-dropdown .navbar-item { - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -.navbar-divider { - background-color: whitesmoke; - border: none; - display: none; - height: 2px; - margin: 0.5rem 0; -} - -@media screen and (max-width: 1023px) { - .navbar > .container { - display: block; - } - .navbar-brand .navbar-item, - .navbar-tabs .navbar-item { - align-items: center; - display: flex; - } - .navbar-link::after { - display: none; - } - .navbar-menu { - background-color: white; - box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); - padding: 0.5rem 0; - } - .navbar-menu.is-active { - display: block; - } - .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { - left: 0; - position: fixed; - right: 0; - z-index: 30; - } - .navbar.is-fixed-bottom-touch { - bottom: 0; - } - .navbar.is-fixed-bottom-touch.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); - } - .navbar.is-fixed-top-touch { - top: 0; - } - .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { - -webkit-overflow-scrolling: touch; - max-height: calc(100vh - 3.25rem); - overflow: auto; - } - html.has-navbar-fixed-top-touch, - body.has-navbar-fixed-top-touch { - padding-top: 3.25rem; - } - html.has-navbar-fixed-bottom-touch, - body.has-navbar-fixed-bottom-touch { - padding-bottom: 3.25rem; - } -} - -@media screen and (min-width: 1024px) { - .navbar, - .navbar-menu, - .navbar-start, - .navbar-end { - align-items: stretch; - display: flex; - } - .navbar { - min-height: 3.25rem; - } - .navbar.is-spaced { - padding: 1rem 2rem; - } - .navbar.is-spaced .navbar-start, - .navbar.is-spaced .navbar-end { - align-items: center; - } - .navbar.is-spaced a.navbar-item, - .navbar.is-spaced .navbar-link { - border-radius: 4px; - } - .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, - .navbar.is-transparent .navbar-link:focus, - .navbar.is-transparent .navbar-link:hover, - .navbar.is-transparent .navbar-link.is-active { - background-color: transparent !important; - } - .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { - background-color: transparent !important; - } - .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { - background-color: whitesmoke; - color: #0a0a0a; - } - .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { - background-color: whitesmoke; - color: #3273dc; - } - .navbar-burger { - display: none; - } - .navbar-item, - .navbar-link { - align-items: center; - display: flex; - } - .navbar-item.has-dropdown { - align-items: stretch; - } - .navbar-item.has-dropdown-up .navbar-link::after { - transform: rotate(135deg) translate(0.25em, -0.25em); - } - .navbar-item.has-dropdown-up .navbar-dropdown { - border-bottom: 2px solid #dbdbdb; - border-radius: 6px 6px 0 0; - border-top: none; - bottom: 100%; - box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); - top: auto; - } - .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { - display: block; - } - .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { - opacity: 1; - pointer-events: auto; - transform: translateY(0); - } - .navbar-menu { - /*flex-grow: 1;*/ - flex-shrink: 0; - } - .navbar-start { - justify-content: flex-start; - margin-right: auto; - } - .navbar-end { - justify-content: flex-end; - margin-left: auto; - } - .navbar-dropdown { - background-color: white; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - border-top: 2px solid #dbdbdb; - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); - display: none; - font-size: 0.875rem; - left: -5em; - min-width: 100%; - position: absolute; - top: 100%; - z-index: 20; - } - .navbar-dropdown .navbar-item { - padding: 0.375rem 1rem; - white-space: nowrap; - } - .navbar-dropdown a.navbar-item { - padding-right: 3rem; - } - .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { - background-color: whitesmoke; - color: #0a0a0a; - } - .navbar-dropdown a.navbar-item.is-active { - background-color: whitesmoke; - color: #3273dc; - } - .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { - border-radius: 6px; - border-top: none; - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - display: block; - opacity: 0; - pointer-events: none; - top: calc(100% + (-4px)); - transform: translateY(-5px); - transition-duration: 86ms; - transition-property: opacity, transform; - } - .navbar-dropdown.is-right { - left: auto; - right: 0; - } - .navbar-divider { - display: block; - } - .navbar > .container .navbar-brand, - .container > .navbar .navbar-brand { - margin-left: -0.75rem; - } - .navbar > .container .navbar-menu, - .container > .navbar .navbar-menu { - margin-right: -0.75rem; - } - .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { - left: 0; - position: fixed; - right: 0; - z-index: 30; - } - .navbar.is-fixed-bottom-desktop { - bottom: 0; - } - .navbar.is-fixed-bottom-desktop.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); - } - .navbar.is-fixed-top-desktop { - top: 0; - } - html.has-navbar-fixed-top-desktop, - body.has-navbar-fixed-top-desktop { - padding-top: 3.25rem; - } - html.has-navbar-fixed-bottom-desktop, - body.has-navbar-fixed-bottom-desktop { - padding-bottom: 3.25rem; - } - html.has-spaced-navbar-fixed-top, - body.has-spaced-navbar-fixed-top { - padding-top: 5.25rem; - } - html.has-spaced-navbar-fixed-bottom, - body.has-spaced-navbar-fixed-bottom { - padding-bottom: 5.25rem; - } - a.navbar-item.is-active, - .navbar-link.is-active { - /*color: #0a0a0a;*/ - } - a.navbar-item.is-active:not(:focus):not(:hover), - .navbar-link.is-active:not(:focus):not(:hover) { - background-color: transparent; - } - .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #fafafa; - } -} - -.hero.is-fullheight-with-navbar { - min-height: calc(100vh - 3.25rem); -} - -.pagination { - font-size: 1rem; - margin: -0.25rem; -} - -.pagination.is-small { - font-size: 0.75rem; -} - -.pagination.is-medium { - font-size: 1.25rem; -} - -.pagination.is-large { - font-size: 1.5rem; -} - -.pagination.is-rounded .pagination-previous, -.pagination.is-rounded .pagination-next { - padding-left: 1em; - padding-right: 1em; - border-radius: 290486px; -} - -.pagination.is-rounded .pagination-link { - border-radius: 290486px; -} - -.pagination, -.pagination-list { - align-items: center; - display: flex; - justify-content: center; - text-align: center; -} - -.pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis { - font-size: 1em; - justify-content: center; - margin: 0.25rem; - padding-left: 0.5em; - padding-right: 0.5em; - text-align: center; -} - -.pagination-previous, -.pagination-next, -.pagination-link { - border-color: #dbdbdb; - color: #363636; - min-width: 2.5em; -} - -.pagination-previous:hover, -.pagination-next:hover, -.pagination-link:hover { - border-color: #b5b5b5; - color: #363636; -} - -.pagination-previous:focus, -.pagination-next:focus, -.pagination-link:focus { - border-color: #3273dc; -} - -.pagination-previous:active, -.pagination-next:active, -.pagination-link:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); -} - -.pagination-previous[disabled], -.pagination-next[disabled], -.pagination-link[disabled] { - background-color: #dbdbdb; - border-color: #dbdbdb; - box-shadow: none; - color: #7a7a7a; - opacity: 0.5; -} - -.pagination-previous, -.pagination-next { - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; -} - -.pagination-link.is-current { - background-color: #3273dc; - border-color: #3273dc; - color: #fff; -} - -.pagination-ellipsis { - color: #b5b5b5; - pointer-events: none; -} - -.pagination-list { - flex-wrap: wrap; -} - -@media screen and (max-width: 768px) { - .pagination { - flex-wrap: wrap; - } - .pagination-previous, - .pagination-next { - flex-grow: 1; - flex-shrink: 1; - } - .pagination-list li { - flex-grow: 1; - flex-shrink: 1; - } -} - -@media screen and (min-width: 769px), print { - .pagination-list { - flex-grow: 1; - flex-shrink: 1; - justify-content: flex-start; - order: 1; - } - .pagination-previous { - order: 2; - } - .pagination-next { - order: 3; - } - .pagination { - justify-content: space-between; - } - .pagination.is-centered .pagination-previous { - order: 1; - } - .pagination.is-centered .pagination-list { - justify-content: center; - order: 2; - } - .pagination.is-centered .pagination-next { - order: 3; - } - .pagination.is-right .pagination-previous { - order: 1; - } - .pagination.is-right .pagination-next { - order: 2; - } - .pagination.is-right .pagination-list { - justify-content: flex-end; - order: 3; - } -} - -.panel { - border-radius: 6px; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - font-size: 1rem; -} - -.panel:not(:last-child) { - margin-bottom: 1.5rem; -} - -.panel.is-white .panel-heading { - background-color: white; - color: #0a0a0a; -} - -.panel.is-white .panel-tabs a.is-active { - border-bottom-color: white; -} - -.panel.is-white .panel-block.is-active .panel-icon { - color: white; -} - -.panel.is-black .panel-heading { - background-color: #0a0a0a; - color: white; -} - -.panel.is-black .panel-tabs a.is-active { - border-bottom-color: #0a0a0a; -} - -.panel.is-black .panel-block.is-active .panel-icon { - color: #0a0a0a; -} - -.panel.is-light .panel-heading { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.panel.is-light .panel-tabs a.is-active { - border-bottom-color: whitesmoke; -} - -.panel.is-light .panel-block.is-active .panel-icon { - color: whitesmoke; -} - -.panel.is-dark .panel-heading { - background-color: #363636; - color: #fff; -} - -.panel.is-dark .panel-tabs a.is-active { - border-bottom-color: #363636; -} - -.panel.is-dark .panel-block.is-active .panel-icon { - color: #363636; -} - -.panel.is-primary .panel-heading { - background-color: #00d1b2; - color: #fff; -} - -.panel.is-primary .panel-tabs a.is-active { - border-bottom-color: #00d1b2; -} - -.panel.is-primary .panel-block.is-active .panel-icon { - color: #00d1b2; -} - -.panel.is-link .panel-heading { - background-color: #3273dc; - color: #fff; -} - -.panel.is-link .panel-tabs a.is-active { - border-bottom-color: #3273dc; -} - -.panel.is-link .panel-block.is-active .panel-icon { - color: #3273dc; -} - -.panel.is-info .panel-heading { - background-color: #3298dc; - color: #fff; -} - -.panel.is-info .panel-tabs a.is-active { - border-bottom-color: #3298dc; -} - -.panel.is-info .panel-block.is-active .panel-icon { - color: #3298dc; -} - -.panel.is-success .panel-heading { - background-color: #48c774; - color: #fff; -} - -.panel.is-success .panel-tabs a.is-active { - border-bottom-color: #48c774; -} - -.panel.is-success .panel-block.is-active .panel-icon { - color: #48c774; -} - -.panel.is-warning .panel-heading { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.panel.is-warning .panel-tabs a.is-active { - border-bottom-color: #ffdd57; -} - -.panel.is-warning .panel-block.is-active .panel-icon { - color: #ffdd57; -} - -.panel.is-danger .panel-heading { - background-color: #f14668; - color: #fff; -} - -.panel.is-danger .panel-tabs a.is-active { - border-bottom-color: #f14668; -} - -.panel.is-danger .panel-block.is-active .panel-icon { - color: #f14668; -} - -.panel-tabs:not(:last-child), -.panel-block:not(:last-child) { - border-bottom: 1px solid #ededed; -} - -.panel-heading { - background-color: #ededed; - border-radius: 6px 6px 0 0; - color: #363636; - font-size: 1.25em; - font-weight: 700; - line-height: 1.25; - padding: 0.75em 1em; -} - -.panel-tabs { - align-items: flex-end; - display: flex; - font-size: 0.875em; - justify-content: center; -} - -.panel-tabs a { - border-bottom: 1px solid #dbdbdb; - margin-bottom: -1px; - padding: 0.5em; -} - -.panel-tabs a.is-active { - border-bottom-color: #4a4a4a; - color: #363636; -} - -.panel-list a { - color: #4a4a4a; -} - -.panel-list a:hover { - color: #3273dc; -} - -.panel-block { - align-items: center; - color: #363636; - display: flex; - justify-content: flex-start; - padding: 0.5em 0.75em; -} - -.panel-block-without-flex { - align-items: center; - color: #363636; - justify-content: flex-start; - padding: 0.5em 0.75em; -} - -.panel-block input[type="checkbox"] { - margin-right: 0.75em; -} - -.panel-block > .control { - flex-grow: 1; - flex-shrink: 1; - width: 100%; -} - -.panel-block.is-wrapped { - flex-wrap: wrap; -} - -.panel-block.is-active { - border-left-color: #3273dc; - color: #363636; -} - -.panel-block.is-active .panel-icon { - color: #3273dc; -} - -.panel-block:last-child { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; -} - -a.panel-block, -label.panel-block { - cursor: pointer; -} - -a.panel-block:hover, -label.panel-block:hover { - background-color: whitesmoke; -} - -.panel-icon { - display: inline-block; - font-size: 14px; - height: 1em; - line-height: 1em; - text-align: center; - vertical-align: top; - width: 1em; - color: #7a7a7a; - margin-right: 0.75em; -} - -.panel-icon .fa { - font-size: inherit; - line-height: inherit; -} - -.tabs { - -webkit-overflow-scrolling: touch; - align-items: stretch; - display: flex; - font-size: 1rem; - justify-content: space-between; - overflow: hidden; - overflow-x: auto; - white-space: nowrap; -} - -.tabs a { - align-items: center; - border-bottom-color: #dbdbdb; - border-bottom-style: solid; - border-bottom-width: 1px; - color: #4a4a4a; - display: flex; - justify-content: center; - margin-bottom: -1px; - padding: 0.5em 1em; - vertical-align: top; -} - -.tabs a:hover { - border-bottom-color: #363636; - color: #363636; -} - -.tabs li { - display: block; -} - -.tabs li.is-active a { - border-bottom-color: #3273dc; - color: #3273dc; -} - -.tabs ul { - align-items: center; - border-bottom-color: #dbdbdb; - border-bottom-style: solid; - border-bottom-width: 1px; - display: flex; - flex-grow: 1; - flex-shrink: 0; - justify-content: flex-start; -} - -.tabs ul.is-left { - padding-right: 0.75em; -} - -.tabs ul.is-center { - flex: none; - justify-content: center; - padding-left: 0.75em; - padding-right: 0.75em; -} - -.tabs ul.is-right { - justify-content: flex-end; - padding-left: 0.75em; -} - -.tabs .icon:first-child { - margin-right: 0.5em; -} - -.tabs .icon:last-child { - margin-left: 0.5em; -} - -.tabs.is-centered ul { - justify-content: center; -} - -.tabs.is-right ul { - justify-content: flex-end; -} - -.tabs.is-boxed a { - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} - -.tabs.is-boxed a:hover { - background-color: whitesmoke; - border-bottom-color: #dbdbdb; -} - -.tabs.is-boxed li.is-active a { - background-color: white; - border-color: #dbdbdb; - border-bottom-color: transparent !important; -} - -.tabs.is-fullwidth li { - flex-grow: 1; - flex-shrink: 0; -} - -.tabs.is-toggle a { - border-color: #dbdbdb; - border-style: solid; - border-width: 1px; - margin-bottom: 0; - position: relative; -} - -.tabs.is-toggle a:hover { - background-color: whitesmoke; - border-color: #b5b5b5; - z-index: 2; -} - -.tabs.is-toggle li + li { - margin-left: -1px; -} - -.tabs.is-toggle li:first-child a { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.tabs.is-toggle li:last-child a { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.tabs.is-toggle li.is-active a { - background-color: #3273dc; - border-color: #3273dc; - color: #fff; - z-index: 1; -} - -.tabs.is-toggle ul { - border-bottom: none; -} - -.tabs.is-toggle.is-toggle-rounded li:first-child a { - border-bottom-left-radius: 290486px; - border-top-left-radius: 290486px; - padding-left: 1.25em; -} - -.tabs.is-toggle.is-toggle-rounded li:last-child a { - border-bottom-right-radius: 290486px; - border-top-right-radius: 290486px; - padding-right: 1.25em; -} - -.tabs.is-small { - font-size: 0.75rem; -} - -.tabs.is-medium { - font-size: 1.25rem; -} - -.tabs.is-large { - font-size: 1.5rem; -} - -.column { - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - padding: 0.75rem; -} - -.columns.is-mobile > .column.is-narrow { - flex: none; -} - -.columns.is-mobile > .column.is-full { - flex: none; - width: 100%; -} - -.columns.is-mobile > .column.is-three-quarters { - flex: none; - width: 75%; -} - -.columns.is-mobile > .column.is-two-thirds { - flex: none; - width: 66.6666%; -} - -.columns.is-mobile > .column.is-half { - flex: none; - width: 50%; -} - -.columns.is-mobile > .column.is-one-third { - flex: none; - width: 33.3333%; -} - -.columns.is-mobile > .column.is-one-quarter { - flex: none; - width: 25%; -} - -.columns.is-mobile > .column.is-one-fifth { - flex: none; - width: 20%; -} - -.columns.is-mobile > .column.is-two-fifths { - flex: none; - width: 40%; -} - -.columns.is-mobile > .column.is-three-fifths { - flex: none; - width: 60%; -} - -.columns.is-mobile > .column.is-four-fifths { - flex: none; - width: 80%; -} - -.columns.is-mobile > .column.is-offset-three-quarters { - margin-left: 75%; -} - -.columns.is-mobile > .column.is-offset-two-thirds { - margin-left: 66.6666%; -} - -.columns.is-mobile > .column.is-offset-half { - margin-left: 50%; -} - -.columns.is-mobile > .column.is-offset-one-third { - margin-left: 33.3333%; -} - -.columns.is-mobile > .column.is-offset-one-quarter { - margin-left: 25%; -} - -.columns.is-mobile > .column.is-offset-one-fifth { - margin-left: 20%; -} - -.columns.is-mobile > .column.is-offset-two-fifths { - margin-left: 40%; -} - -.columns.is-mobile > .column.is-offset-three-fifths { - margin-left: 60%; -} - -.columns.is-mobile > .column.is-offset-four-fifths { - margin-left: 80%; -} - -.columns.is-mobile > .column.is-0 { - flex: none; - width: 0%; -} - -.columns.is-mobile > .column.is-offset-0 { - margin-left: 0%; -} - -.columns.is-mobile > .column.is-1 { - flex: none; - width: 8.33333%; -} - -.columns.is-mobile > .column.is-offset-1 { - margin-left: 8.33333%; -} - -.columns.is-mobile > .column.is-2 { - flex: none; - width: 16.66667%; -} - -.columns.is-mobile > .column.is-offset-2 { - margin-left: 16.66667%; -} - -.columns.is-mobile > .column.is-3 { - flex: none; - width: 25%; -} - -.columns.is-mobile > .column.is-offset-3 { - margin-left: 25%; -} - -.columns.is-mobile > .column.is-4 { - flex: none; - width: 33.33333%; -} - -.columns.is-mobile > .column.is-offset-4 { - margin-left: 33.33333%; -} - -.columns.is-mobile > .column.is-5 { - flex: none; - width: 41.66667%; -} - -.columns.is-mobile > .column.is-offset-5 { - margin-left: 41.66667%; -} - -.columns.is-mobile > .column.is-6 { - flex: none; - width: 50%; -} - -.columns.is-mobile > .column.is-offset-6 { - margin-left: 50%; -} - -.columns.is-mobile > .column.is-7 { - flex: none; - width: 58.33333%; -} - -.columns.is-mobile > .column.is-offset-7 { - margin-left: 58.33333%; -} - -.columns.is-mobile > .column.is-8 { - flex: none; - width: 66.66667%; -} - -.columns.is-mobile > .column.is-offset-8 { - margin-left: 66.66667%; -} - -.columns.is-mobile > .column.is-9 { - flex: none; - width: 75%; -} - -.columns.is-mobile > .column.is-offset-9 { - margin-left: 75%; -} - -.columns.is-mobile > .column.is-10 { - flex: none; - width: 83.33333%; -} - -.columns.is-mobile > .column.is-offset-10 { - margin-left: 83.33333%; -} - -.columns.is-mobile > .column.is-11 { - flex: none; - width: 91.66667%; -} - -.columns.is-mobile > .column.is-offset-11 { - margin-left: 91.66667%; -} - -.columns.is-mobile > .column.is-12 { - flex: none; - width: 100%; -} - -.columns.is-mobile > .column.is-offset-12 { - margin-left: 100%; -} - -@media screen and (max-width: 768px) { - .column.is-narrow-mobile { - flex: none; - } - .column.is-full-mobile { - flex: none; - width: 100%; - } - .column.is-three-quarters-mobile { - flex: none; - width: 75%; - } - .column.is-two-thirds-mobile { - flex: none; - width: 66.6666%; - } - .column.is-half-mobile { - flex: none; - width: 50%; - } - .column.is-one-third-mobile { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-mobile { - flex: none; - width: 25%; - } - .column.is-one-fifth-mobile { - flex: none; - width: 20%; - } - .column.is-two-fifths-mobile { - flex: none; - width: 40%; - } - .column.is-three-fifths-mobile { - flex: none; - width: 60%; - } - .column.is-four-fifths-mobile { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-mobile { - margin-left: 75%; - } - .column.is-offset-two-thirds-mobile { - margin-left: 66.6666%; - } - .column.is-offset-half-mobile { - margin-left: 50%; - } - .column.is-offset-one-third-mobile { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-mobile { - margin-left: 25%; - } - .column.is-offset-one-fifth-mobile { - margin-left: 20%; - } - .column.is-offset-two-fifths-mobile { - margin-left: 40%; - } - .column.is-offset-three-fifths-mobile { - margin-left: 60%; - } - .column.is-offset-four-fifths-mobile { - margin-left: 80%; - } - .column.is-0-mobile { - flex: none; - width: 0%; - } - .column.is-offset-0-mobile { - margin-left: 0%; - } - .column.is-1-mobile { - flex: none; - width: 8.33333%; - } - .column.is-offset-1-mobile { - margin-left: 8.33333%; - } - .column.is-2-mobile { - flex: none; - width: 16.66667%; - } - .column.is-offset-2-mobile { - margin-left: 16.66667%; - } - .column.is-3-mobile { - flex: none; - width: 25%; - } - .column.is-offset-3-mobile { - margin-left: 25%; - } - .column.is-4-mobile { - flex: none; - width: 33.33333%; - } - .column.is-offset-4-mobile { - margin-left: 33.33333%; - } - .column.is-5-mobile { - flex: none; - width: 41.66667%; - } - .column.is-offset-5-mobile { - margin-left: 41.66667%; - } - .column.is-6-mobile { - flex: none; - width: 50%; - } - .column.is-offset-6-mobile { - margin-left: 50%; - } - .column.is-7-mobile { - flex: none; - width: 58.33333%; - } - .column.is-offset-7-mobile { - margin-left: 58.33333%; - } - .column.is-8-mobile { - flex: none; - width: 66.66667%; - } - .column.is-offset-8-mobile { - margin-left: 66.66667%; - } - .column.is-9-mobile { - flex: none; - width: 75%; - } - .column.is-offset-9-mobile { - margin-left: 75%; - } - .column.is-10-mobile { - flex: none; - width: 83.33333%; - } - .column.is-offset-10-mobile { - margin-left: 83.33333%; - } - .column.is-11-mobile { - flex: none; - width: 91.66667%; - } - .column.is-offset-11-mobile { - margin-left: 91.66667%; - } - .column.is-12-mobile { - flex: none; - width: 100%; - } - .column.is-offset-12-mobile { - margin-left: 100%; - } -} - -@media screen and (min-width: 769px), print { - .column.is-narrow, .column.is-narrow-tablet { - flex: none; - } - .column.is-full, .column.is-full-tablet { - flex: none; - width: 100%; - } - .column.is-three-quarters, .column.is-three-quarters-tablet { - flex: none; - width: 75%; - } - .column.is-two-thirds, .column.is-two-thirds-tablet { - flex: none; - width: 66.6666%; - } - .column.is-half, .column.is-half-tablet { - flex: none; - width: 50%; - } - .column.is-one-third, .column.is-one-third-tablet { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter, .column.is-one-quarter-tablet { - flex: none; - width: 25%; - } - .column.is-one-fifth, .column.is-one-fifth-tablet { - flex: none; - width: 20%; - } - .column.is-two-fifths, .column.is-two-fifths-tablet { - flex: none; - width: 40%; - } - .column.is-three-fifths, .column.is-three-fifths-tablet { - flex: none; - width: 60%; - } - .column.is-four-fifths, .column.is-four-fifths-tablet { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { - margin-left: 75%; - } - .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { - margin-left: 66.6666%; - } - .column.is-offset-half, .column.is-offset-half-tablet { - margin-left: 50%; - } - .column.is-offset-one-third, .column.is-offset-one-third-tablet { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { - margin-left: 25%; - } - .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { - margin-left: 20%; - } - .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { - margin-left: 40%; - } - .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { - margin-left: 60%; - } - .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { - margin-left: 80%; - } - .column.is-0, .column.is-0-tablet { - flex: none; - width: 0%; - } - .column.is-offset-0, .column.is-offset-0-tablet { - margin-left: 0%; - } - .column.is-1, .column.is-1-tablet { - flex: none; - width: 8.33333%; - } - .column.is-offset-1, .column.is-offset-1-tablet { - margin-left: 8.33333%; - } - .column.is-2, .column.is-2-tablet { - flex: none; - width: 16.66667%; - } - .column.is-offset-2, .column.is-offset-2-tablet { - margin-left: 16.66667%; - } - .column.is-3, .column.is-3-tablet { - flex: none; - width: 25%; - } - .column.is-offset-3, .column.is-offset-3-tablet { - margin-left: 25%; - } - .column.is-4, .column.is-4-tablet { - flex: none; - width: 33.33333%; - } - .column.is-offset-4, .column.is-offset-4-tablet { - margin-left: 33.33333%; - } - .column.is-5, .column.is-5-tablet { - flex: none; - width: 41.66667%; - } - .column.is-offset-5, .column.is-offset-5-tablet { - margin-left: 41.66667%; - } - .column.is-6, .column.is-6-tablet { - flex: none; - width: 50%; - } - .column.is-offset-6, .column.is-offset-6-tablet { - margin-left: 50%; - } - .column.is-7, .column.is-7-tablet { - flex: none; - width: 58.33333%; - } - .column.is-offset-7, .column.is-offset-7-tablet { - margin-left: 58.33333%; - } - .column.is-8, .column.is-8-tablet { - flex: none; - width: 66.66667%; - } - .column.is-offset-8, .column.is-offset-8-tablet { - margin-left: 66.66667%; - } - .column.is-9, .column.is-9-tablet { - flex: none; - width: 75%; - } - .column.is-offset-9, .column.is-offset-9-tablet { - margin-left: 75%; - } - .column.is-10, .column.is-10-tablet { - flex: none; - width: 83.33333%; - } - .column.is-offset-10, .column.is-offset-10-tablet { - margin-left: 83.33333%; - } - .column.is-11, .column.is-11-tablet { - flex: none; - width: 91.66667%; - } - .column.is-offset-11, .column.is-offset-11-tablet { - margin-left: 91.66667%; - } - .column.is-12, .column.is-12-tablet { - flex: none; - width: 100%; - } - .column.is-offset-12, .column.is-offset-12-tablet { - margin-left: 100%; - } -} - -@media screen and (max-width: 1023px) { - .column.is-narrow-touch { - flex: none; - } - .column.is-full-touch { - flex: none; - width: 100%; - } - .column.is-three-quarters-touch { - flex: none; - width: 75%; - } - .column.is-two-thirds-touch { - flex: none; - width: 66.6666%; - } - .column.is-half-touch { - flex: none; - width: 50%; - } - .column.is-one-third-touch { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-touch { - flex: none; - width: 25%; - } - .column.is-one-fifth-touch { - flex: none; - width: 20%; - } - .column.is-two-fifths-touch { - flex: none; - width: 40%; - } - .column.is-three-fifths-touch { - flex: none; - width: 60%; - } - .column.is-four-fifths-touch { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-touch { - margin-left: 75%; - } - .column.is-offset-two-thirds-touch { - margin-left: 66.6666%; - } - .column.is-offset-half-touch { - margin-left: 50%; - } - .column.is-offset-one-third-touch { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-touch { - margin-left: 25%; - } - .column.is-offset-one-fifth-touch { - margin-left: 20%; - } - .column.is-offset-two-fifths-touch { - margin-left: 40%; - } - .column.is-offset-three-fifths-touch { - margin-left: 60%; - } - .column.is-offset-four-fifths-touch { - margin-left: 80%; - } - .column.is-0-touch { - flex: none; - width: 0%; - } - .column.is-offset-0-touch { - margin-left: 0%; - } - .column.is-1-touch { - flex: none; - width: 8.33333%; - } - .column.is-offset-1-touch { - margin-left: 8.33333%; - } - .column.is-2-touch { - flex: none; - width: 16.66667%; - } - .column.is-offset-2-touch { - margin-left: 16.66667%; - } - .column.is-3-touch { - flex: none; - width: 25%; - } - .column.is-offset-3-touch { - margin-left: 25%; - } - .column.is-4-touch { - flex: none; - width: 33.33333%; - } - .column.is-offset-4-touch { - margin-left: 33.33333%; - } - .column.is-5-touch { - flex: none; - width: 41.66667%; - } - .column.is-offset-5-touch { - margin-left: 41.66667%; - } - .column.is-6-touch { - flex: none; - width: 50%; - } - .column.is-offset-6-touch { - margin-left: 50%; - } - .column.is-7-touch { - flex: none; - width: 58.33333%; - } - .column.is-offset-7-touch { - margin-left: 58.33333%; - } - .column.is-8-touch { - flex: none; - width: 66.66667%; - } - .column.is-offset-8-touch { - margin-left: 66.66667%; - } - .column.is-9-touch { - flex: none; - width: 75%; - } - .column.is-offset-9-touch { - margin-left: 75%; - } - .column.is-10-touch { - flex: none; - width: 83.33333%; - } - .column.is-offset-10-touch { - margin-left: 83.33333%; - } - .column.is-11-touch { - flex: none; - width: 91.66667%; - } - .column.is-offset-11-touch { - margin-left: 91.66667%; - } - .column.is-12-touch { - flex: none; - width: 100%; - } - .column.is-offset-12-touch { - margin-left: 100%; - } -} - -@media screen and (min-width: 1024px) { - .column.is-narrow-desktop { - flex: none; - } - .column.is-full-desktop { - flex: none; - width: 100%; - } - .column.is-three-quarters-desktop { - flex: none; - width: 75%; - } - .column.is-two-thirds-desktop { - flex: none; - width: 66.6666%; - } - .column.is-half-desktop { - flex: none; - width: 50%; - } - .column.is-one-third-desktop { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-desktop { - flex: none; - width: 25%; - } - .column.is-one-fifth-desktop { - flex: none; - width: 20%; - } - .column.is-two-fifths-desktop { - flex: none; - width: 40%; - } - .column.is-three-fifths-desktop { - flex: none; - width: 60%; - } - .column.is-four-fifths-desktop { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-desktop { - margin-left: 75%; - } - .column.is-offset-two-thirds-desktop { - margin-left: 66.6666%; - } - .column.is-offset-half-desktop { - margin-left: 50%; - } - .column.is-offset-one-third-desktop { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-desktop { - margin-left: 25%; - } - .column.is-offset-one-fifth-desktop { - margin-left: 20%; - } - .column.is-offset-two-fifths-desktop { - margin-left: 40%; - } - .column.is-offset-three-fifths-desktop { - margin-left: 60%; - } - .column.is-offset-four-fifths-desktop { - margin-left: 80%; - } - .column.is-0-desktop { - flex: none; - width: 0%; - } - .column.is-offset-0-desktop { - margin-left: 0%; - } - .column.is-1-desktop { - flex: none; - width: 8.33333%; - } - .column.is-offset-1-desktop { - margin-left: 8.33333%; - } - .column.is-2-desktop { - flex: none; - width: 16.66667%; - } - .column.is-offset-2-desktop { - margin-left: 16.66667%; - } - .column.is-3-desktop { - flex: none; - width: 25%; - } - .column.is-offset-3-desktop { - margin-left: 25%; - } - .column.is-4-desktop { - flex: none; - width: 33.33333%; - } - .column.is-offset-4-desktop { - margin-left: 33.33333%; - } - .column.is-5-desktop { - flex: none; - width: 41.66667%; - } - .column.is-offset-5-desktop { - margin-left: 41.66667%; - } - .column.is-6-desktop { - flex: none; - width: 50%; - } - .column.is-offset-6-desktop { - margin-left: 50%; - } - .column.is-7-desktop { - flex: none; - width: 58.33333%; - } - .column.is-offset-7-desktop { - margin-left: 58.33333%; - } - .column.is-8-desktop { - flex: none; - width: 66.66667%; - } - .column.is-offset-8-desktop { - margin-left: 66.66667%; - } - .column.is-9-desktop { - flex: none; - width: 75%; - } - .column.is-offset-9-desktop { - margin-left: 75%; - } - .column.is-10-desktop { - flex: none; - width: 83.33333%; - } - .column.is-offset-10-desktop { - margin-left: 83.33333%; - } - .column.is-11-desktop { - flex: none; - width: 91.66667%; - } - .column.is-offset-11-desktop { - margin-left: 91.66667%; - } - .column.is-12-desktop { - flex: none; - width: 100%; - } - .column.is-offset-12-desktop { - margin-left: 100%; - } -} - -@media screen and (min-width: 1216px) { - .column.is-narrow-widescreen { - flex: none; - } - .column.is-full-widescreen { - flex: none; - width: 100%; - } - .column.is-three-quarters-widescreen { - flex: none; - width: 75%; - } - .column.is-two-thirds-widescreen { - flex: none; - width: 66.6666%; - } - .column.is-half-widescreen { - flex: none; - width: 50%; - } - .column.is-one-third-widescreen { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-widescreen { - flex: none; - width: 25%; - } - .column.is-one-fifth-widescreen { - flex: none; - width: 20%; - } - .column.is-two-fifths-widescreen { - flex: none; - width: 40%; - } - .column.is-three-fifths-widescreen { - flex: none; - width: 60%; - } - .column.is-four-fifths-widescreen { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-widescreen { - margin-left: 75%; - } - .column.is-offset-two-thirds-widescreen { - margin-left: 66.6666%; - } - .column.is-offset-half-widescreen { - margin-left: 50%; - } - .column.is-offset-one-third-widescreen { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-widescreen { - margin-left: 25%; - } - .column.is-offset-one-fifth-widescreen { - margin-left: 20%; - } - .column.is-offset-two-fifths-widescreen { - margin-left: 40%; - } - .column.is-offset-three-fifths-widescreen { - margin-left: 60%; - } - .column.is-offset-four-fifths-widescreen { - margin-left: 80%; - } - .column.is-0-widescreen { - flex: none; - width: 0%; - } - .column.is-offset-0-widescreen { - margin-left: 0%; - } - .column.is-1-widescreen { - flex: none; - width: 8.33333%; - } - .column.is-offset-1-widescreen { - margin-left: 8.33333%; - } - .column.is-2-widescreen { - flex: none; - width: 16.66667%; - } - .column.is-offset-2-widescreen { - margin-left: 16.66667%; - } - .column.is-3-widescreen { - flex: none; - width: 25%; - } - .column.is-offset-3-widescreen { - margin-left: 25%; - } - .column.is-4-widescreen { - flex: none; - width: 33.33333%; - } - .column.is-offset-4-widescreen { - margin-left: 33.33333%; - } - .column.is-5-widescreen { - flex: none; - width: 41.66667%; - } - .column.is-offset-5-widescreen { - margin-left: 41.66667%; - } - .column.is-6-widescreen { - flex: none; - width: 50%; - } - .column.is-offset-6-widescreen { - margin-left: 50%; - } - .column.is-7-widescreen { - flex: none; - width: 58.33333%; - } - .column.is-offset-7-widescreen { - margin-left: 58.33333%; - } - .column.is-8-widescreen { - flex: none; - width: 66.66667%; - } - .column.is-offset-8-widescreen { - margin-left: 66.66667%; - } - .column.is-9-widescreen { - flex: none; - width: 75%; - } - .column.is-offset-9-widescreen { - margin-left: 75%; - } - .column.is-10-widescreen { - flex: none; - width: 83.33333%; - } - .column.is-offset-10-widescreen { - margin-left: 83.33333%; - } - .column.is-11-widescreen { - flex: none; - width: 91.66667%; - } - .column.is-offset-11-widescreen { - margin-left: 91.66667%; - } - .column.is-12-widescreen { - flex: none; - width: 100%; - } - .column.is-offset-12-widescreen { - margin-left: 100%; - } -} - -@media screen and (min-width: 1408px) { - .column.is-narrow-fullhd { - flex: none; - } - .column.is-full-fullhd { - flex: none; - width: 100%; - } - .column.is-three-quarters-fullhd { - flex: none; - width: 75%; - } - .column.is-two-thirds-fullhd { - flex: none; - width: 66.6666%; - } - .column.is-half-fullhd { - flex: none; - width: 50%; - } - .column.is-one-third-fullhd { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-fullhd { - flex: none; - width: 25%; - } - .column.is-one-fifth-fullhd { - flex: none; - width: 20%; - } - .column.is-two-fifths-fullhd { - flex: none; - width: 40%; - } - .column.is-three-fifths-fullhd { - flex: none; - width: 60%; - } - .column.is-four-fifths-fullhd { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-fullhd { - margin-left: 75%; - } - .column.is-offset-two-thirds-fullhd { - margin-left: 66.6666%; - } - .column.is-offset-half-fullhd { - margin-left: 50%; - } - .column.is-offset-one-third-fullhd { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-fullhd { - margin-left: 25%; - } - .column.is-offset-one-fifth-fullhd { - margin-left: 20%; - } - .column.is-offset-two-fifths-fullhd { - margin-left: 40%; - } - .column.is-offset-three-fifths-fullhd { - margin-left: 60%; - } - .column.is-offset-four-fifths-fullhd { - margin-left: 80%; - } - .column.is-0-fullhd { - flex: none; - width: 0%; - } - .column.is-offset-0-fullhd { - margin-left: 0%; - } - .column.is-1-fullhd { - flex: none; - width: 8.33333%; - } - .column.is-offset-1-fullhd { - margin-left: 8.33333%; - } - .column.is-2-fullhd { - flex: none; - width: 16.66667%; - } - .column.is-offset-2-fullhd { - margin-left: 16.66667%; - } - .column.is-3-fullhd { - flex: none; - width: 25%; - } - .column.is-offset-3-fullhd { - margin-left: 25%; - } - .column.is-4-fullhd { - flex: none; - width: 33.33333%; - } - .column.is-offset-4-fullhd { - margin-left: 33.33333%; - } - .column.is-5-fullhd { - flex: none; - width: 41.66667%; - } - .column.is-offset-5-fullhd { - margin-left: 41.66667%; - } - .column.is-6-fullhd { - flex: none; - width: 50%; - } - .column.is-offset-6-fullhd { - margin-left: 50%; - } - .column.is-7-fullhd { - flex: none; - width: 58.33333%; - } - .column.is-offset-7-fullhd { - margin-left: 58.33333%; - } - .column.is-8-fullhd { - flex: none; - width: 66.66667%; - } - .column.is-offset-8-fullhd { - margin-left: 66.66667%; - } - .column.is-9-fullhd { - flex: none; - width: 75%; - } - .column.is-offset-9-fullhd { - margin-left: 75%; - } - .column.is-10-fullhd { - flex: none; - width: 83.33333%; - } - .column.is-offset-10-fullhd { - margin-left: 83.33333%; - } - .column.is-11-fullhd { - flex: none; - width: 91.66667%; - } - .column.is-offset-11-fullhd { - margin-left: 91.66667%; - } - .column.is-12-fullhd { - flex: none; - width: 100%; - } - .column.is-offset-12-fullhd { - margin-left: 100%; - } -} - -.columns { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; -} - -.columns:last-child { - margin-bottom: -0.75rem; -} - -.columns:not(:last-child) { - margin-bottom: calc(1.5rem - 0.75rem); -} - -.columns.is-centered { - justify-content: center; -} - -.columns.is-gapless { - margin-left: 0; - margin-right: 0; - margin-top: 0; -} - -.columns.is-gapless > .column { - margin: 0; - padding: 0 !important; -} - -.columns.is-gapless:not(:last-child) { - margin-bottom: 1.5rem; -} - -.columns.is-gapless:last-child { - margin-bottom: 0; -} - -.columns.is-mobile { - display: flex; -} - -.columns.is-multiline { - flex-wrap: wrap; -} - -.columns.is-vcentered { - align-items: center; -} - -@media screen and (min-width: 769px), print { - .columns:not(.is-desktop) { - display: flex; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-desktop { - display: flex; - } -} - -.columns.is-variable { - --columnGap: 0.75rem; - margin-left: calc(-1 * var(--columnGap)); - margin-right: calc(-1 * var(--columnGap)); -} - -.columns.is-variable .column { - padding-left: var(--columnGap); - padding-right: var(--columnGap); -} - -.columns.is-variable.is-0 { - --columnGap: 0rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-0-mobile { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-0-tablet { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-0-tablet-only { - --columnGap: 0rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-0-touch { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-0-desktop { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-0-desktop-only { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-0-widescreen { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-0-widescreen-only { - --columnGap: 0rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-0-fullhd { - --columnGap: 0rem; - } -} - -.columns.is-variable.is-1 { - --columnGap: 0.25rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-1-mobile { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-1-tablet { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-1-tablet-only { - --columnGap: 0.25rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-1-touch { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-1-desktop { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-1-desktop-only { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-1-widescreen { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-1-widescreen-only { - --columnGap: 0.25rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-1-fullhd { - --columnGap: 0.25rem; - } -} - -.columns.is-variable.is-2 { - --columnGap: 0.5rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-2-mobile { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-2-tablet { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-2-tablet-only { - --columnGap: 0.5rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-2-touch { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-2-desktop { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-2-desktop-only { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-2-widescreen { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-2-widescreen-only { - --columnGap: 0.5rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-2-fullhd { - --columnGap: 0.5rem; - } -} - -.columns.is-variable.is-3 { - --columnGap: 0.75rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-3-mobile { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-3-tablet { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-3-tablet-only { - --columnGap: 0.75rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-3-touch { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-3-desktop { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-3-desktop-only { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-3-widescreen { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-3-widescreen-only { - --columnGap: 0.75rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-3-fullhd { - --columnGap: 0.75rem; - } -} - -.columns.is-variable.is-4 { - --columnGap: 1rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-4-mobile { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-4-tablet { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-4-tablet-only { - --columnGap: 1rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-4-touch { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-4-desktop { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-4-desktop-only { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-4-widescreen { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-4-widescreen-only { - --columnGap: 1rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-4-fullhd { - --columnGap: 1rem; - } -} - -.columns.is-variable.is-5 { - --columnGap: 1.25rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-5-mobile { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-5-tablet { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-5-tablet-only { - --columnGap: 1.25rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-5-touch { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-5-desktop { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-5-desktop-only { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-5-widescreen { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-5-widescreen-only { - --columnGap: 1.25rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-5-fullhd { - --columnGap: 1.25rem; - } -} - -.columns.is-variable.is-6 { - --columnGap: 1.5rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-6-mobile { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-6-tablet { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-6-tablet-only { - --columnGap: 1.5rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-6-touch { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-6-desktop { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-6-desktop-only { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-6-widescreen { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-6-widescreen-only { - --columnGap: 1.5rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-6-fullhd { - --columnGap: 1.5rem; - } -} - -.columns.is-variable.is-7 { - --columnGap: 1.75rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-7-mobile { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-7-tablet { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-7-tablet-only { - --columnGap: 1.75rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-7-touch { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-7-desktop { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-7-desktop-only { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-7-widescreen { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-7-widescreen-only { - --columnGap: 1.75rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-7-fullhd { - --columnGap: 1.75rem; - } -} - -.columns.is-variable.is-8 { - --columnGap: 2rem; -} - -@media screen and (max-width: 768px) { - .columns.is-variable.is-8-mobile { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 769px), print { - .columns.is-variable.is-8-tablet { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-8-tablet-only { - --columnGap: 2rem; - } -} - -@media screen and (max-width: 1023px) { - .columns.is-variable.is-8-touch { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 1024px) { - .columns.is-variable.is-8-desktop { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-8-desktop-only { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 1216px) { - .columns.is-variable.is-8-widescreen { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-8-widescreen-only { - --columnGap: 2rem; - } -} - -@media screen and (min-width: 1408px) { - .columns.is-variable.is-8-fullhd { - --columnGap: 2rem; - } -} - -.tile { - align-items: stretch; - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - min-height: -webkit-min-content; - min-height: -moz-min-content; - min-height: min-content; -} - -.tile.is-ancestor { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; -} - -.tile.is-ancestor:last-child { - margin-bottom: -0.75rem; -} - -.tile.is-ancestor:not(:last-child) { - margin-bottom: 0.75rem; -} - -.tile.is-child { - margin: 0 !important; -} - -.tile.is-parent { - padding: 0.75rem; -} - -.tile.is-vertical { - flex-direction: column; -} - -.tile.is-vertical > .tile.is-child:not(:last-child) { - margin-bottom: 1.5rem !important; -} - -@media screen and (min-width: 769px), print { - .tile:not(.is-child) { - display: flex; - } - .tile.is-1 { - flex: none; - width: 8.33333%; - } - .tile.is-2 { - flex: none; - width: 16.66667%; - } - .tile.is-3 { - flex: none; - width: 25%; - } - .tile.is-4 { - flex: none; - width: 33.33333%; - } - .tile.is-5 { - flex: none; - width: 41.66667%; - } - .tile.is-6 { - flex: none; - width: 50%; - } - .tile.is-7 { - flex: none; - width: 58.33333%; - } - .tile.is-8 { - flex: none; - width: 66.66667%; - } - .tile.is-9 { - flex: none; - width: 75%; - } - .tile.is-10 { - flex: none; - width: 83.33333%; - } - .tile.is-11 { - flex: none; - width: 91.66667%; - } - .tile.is-12 { - flex: none; - width: 100%; - } -} - -.has-text-white { - color: white !important; -} - -a.has-text-white:hover, a.has-text-white:focus { - color: #e6e6e6 !important; -} - -.has-background-white { - background-color: white !important; -} - -.has-text-black { - color: #0a0a0a !important; -} - -a.has-text-black:hover, a.has-text-black:focus { - color: black !important; -} - -.has-background-black { - background-color: #0a0a0a !important; -} - -.has-text-light { - color: whitesmoke !important; -} - -a.has-text-light:hover, a.has-text-light:focus { - color: #dbdbdb !important; -} - -.has-background-light { - background-color: whitesmoke !important; -} - -.has-text-dark { - color: #363636 !important; -} - -a.has-text-dark:hover, a.has-text-dark:focus { - color: #1c1c1c !important; -} - -.has-background-dark { - background-color: #363636 !important; -} - -.has-text-primary { - color: #00d1b2 !important; -} - -a.has-text-primary:hover, a.has-text-primary:focus { - color: #009e86 !important; -} - -.has-background-primary { - background-color: #00d1b2 !important; -} - -.has-text-primary-light { - color: #ebfffc !important; -} - -a.has-text-primary-light:hover, a.has-text-primary-light:focus { - color: #b8fff4 !important; -} - -.has-background-primary-light { - background-color: #ebfffc !important; -} - -.has-text-primary-dark { - color: #00947e !important; -} - -a.has-text-primary-dark:hover, a.has-text-primary-dark:focus { - color: #00c7a9 !important; -} - -.has-background-primary-dark { - background-color: #00947e !important; -} - -.has-text-link { - color: #3273dc !important; -} - -a.has-text-link:hover, a.has-text-link:focus { - color: #205bbc !important; -} - -.has-background-link { - background-color: #3273dc !important; -} - -.has-text-link-light { - color: #eef3fc !important; -} - -a.has-text-link-light:hover, a.has-text-link-light:focus { - color: #c2d5f5 !important; -} - -.has-background-link-light { - background-color: #eef3fc !important; -} - -.has-text-link-dark { - color: #2160c4 !important; -} - -a.has-text-link-dark:hover, a.has-text-link-dark:focus { - color: #3b79de !important; -} - -.has-background-link-dark { - background-color: #2160c4 !important; -} - -.has-text-info { - color: #3298dc !important; -} - -a.has-text-info:hover, a.has-text-info:focus { - color: #207dbc !important; -} - -.has-background-info { - background-color: #3298dc !important; -} - -.has-text-info-light { - color: #eef6fc !important; -} - -a.has-text-info-light:hover, a.has-text-info-light:focus { - color: #c2e0f5 !important; -} - -.has-background-info-light { - background-color: #eef6fc !important; -} - -.has-text-info-dark { - color: #1d72aa !important; -} - -a.has-text-info-dark:hover, a.has-text-info-dark:focus { - color: #248fd6 !important; -} - -.has-background-info-dark { - background-color: #1d72aa !important; -} - -.has-text-success { - color: #48c774 !important; -} - -a.has-text-success:hover, a.has-text-success:focus { - color: #34a85c !important; -} - -.has-background-success { - background-color: #48c774 !important; -} - -.has-text-success-light { - color: #effaf3 !important; -} - -a.has-text-success-light:hover, a.has-text-success-light:focus { - color: #c8eed6 !important; -} - -.has-background-success-light { - background-color: #effaf3 !important; -} - -.has-text-success-dark { - color: #257942 !important; -} - -a.has-text-success-dark:hover, a.has-text-success-dark:focus { - color: #31a058 !important; -} - -.has-background-success-dark { - background-color: #257942 !important; -} - -.has-text-warning { - color: #ffdd57 !important; -} - -a.has-text-warning:hover, a.has-text-warning:focus { - color: #ffd324 !important; -} - -.has-background-warning { - background-color: #ffdd57 !important; -} - -.has-text-warning-light { - color: #fffbeb !important; -} - -a.has-text-warning-light:hover, a.has-text-warning-light:focus { - color: #fff1b8 !important; -} - -.has-background-warning-light { - background-color: #fffbeb !important; -} - -.has-text-warning-dark { - color: #947600 !important; -} - -a.has-text-warning-dark:hover, a.has-text-warning-dark:focus { - color: #c79f00 !important; -} - -.has-background-warning-dark { - background-color: #947600 !important; -} - -.has-text-danger { - color: #f14668 !important; -} - -a.has-text-danger:hover, a.has-text-danger:focus { - color: #ee1742 !important; -} - -.has-background-danger { - background-color: #f14668 !important; -} - -.has-text-danger-light { - color: #feecf0 !important; -} - -a.has-text-danger-light:hover, a.has-text-danger-light:focus { - color: #fabdc9 !important; -} - -.has-background-danger-light { - background-color: #feecf0 !important; -} - -.has-text-danger-dark { - color: #cc0f35 !important; -} - -a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { - color: #ee2049 !important; -} - -.has-background-danger-dark { - background-color: #cc0f35 !important; -} - -.has-text-black-bis { - color: #121212 !important; -} - -.has-background-black-bis { - background-color: #121212 !important; -} - -.has-text-black-ter { - color: #242424 !important; -} - -.has-background-black-ter { - background-color: #242424 !important; -} - -.has-text-grey-darker { - color: #363636 !important; -} - -.has-background-grey-darker { - background-color: #363636 !important; -} - -.has-text-grey-dark { - color: #4a4a4a !important; -} - -.has-background-grey-dark { - background-color: #4a4a4a !important; -} - -.has-text-grey { - color: #7a7a7a !important; -} - -.has-background-grey { - background-color: #7a7a7a !important; -} - -.has-text-grey-light { - color: #b5b5b5 !important; -} - -.has-background-grey-light { - background-color: #b5b5b5 !important; -} - -.has-text-grey-lighter { - color: #dbdbdb !important; -} - -.has-background-grey-lighter { - background-color: #dbdbdb !important; -} - -.has-text-white-ter { - color: whitesmoke !important; -} - -.has-background-white-ter { - background-color: whitesmoke !important; -} - -.has-text-white-bis { - color: #fafafa !important; -} - -.has-background-white-bis { - background-color: #fafafa !important; -} - -.is-clearfix::after { - clear: both; - content: " "; - display: table; -} - -.is-pulled-left { - float: left !important; -} - -.is-pulled-right { - float: right !important; -} - -.is-radiusless { - border-radius: 0 !important; -} - -.is-shadowless { - box-shadow: none !important; -} - -.is-clipped { - overflow: hidden !important; -} - -.is-relative { - position: relative !important; -} - -.is-marginless { - margin: 0 !important; -} - -.is-paddingless { - padding: 0 !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mr-0 { - margin-right: 0 !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.ml-0 { - margin-left: 0 !important; -} - -.mx-0 { - margin-left: 0 !important; - margin-right: 0 !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mr-1 { - margin-right: 0.25rem !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1 { - margin-left: 0.25rem !important; -} - -.mx-1 { - margin-left: 0.25rem !important; - margin-right: 0.25rem !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mr-2 { - margin-right: 0.5rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2 { - margin-left: 0.5rem !important; -} - -.mx-2 { - margin-left: 0.5rem !important; - margin-right: 0.5rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.mt-3 { - margin-top: 0.75rem !important; -} - -.mr-3 { - margin-right: 0.75rem !important; -} - -.mb-3 { - margin-bottom: 0.75rem !important; -} - -.ml-3 { - margin-left: 0.75rem !important; -} - -.mx-3 { - margin-left: 0.75rem !important; - margin-right: 0.75rem !important; -} - -.my-3 { - margin-top: 0.75rem !important; - margin-bottom: 0.75rem !important; -} - -.mt-4 { - margin-top: 1rem !important; -} - -.mr-4 { - margin-right: 1rem !important; -} - -.mb-4 { - margin-bottom: 1rem !important; -} - -.ml-4 { - margin-left: 1rem !important; -} - -.mx-4 { - margin-left: 1rem !important; - margin-right: 1rem !important; -} - -.my-4 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.mt-5 { - margin-top: 1.5rem !important; -} - -.mr-5 { - margin-right: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 1.5rem !important; -} - -.ml-5 { - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-left: 1.5rem !important; - margin-right: 1.5rem !important; -} - -.my-5 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.mt-6 { - margin-top: 3rem !important; -} - -.mr-6 { - margin-right: 3rem !important; -} - -.mb-6 { - margin-bottom: 3rem !important; -} - -.ml-6 { - margin-left: 3rem !important; -} - -.mx-6 { - margin-left: 3rem !important; - margin-right: 3rem !important; -} - -.my-6 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pr-0 { - padding-right: 0 !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pl-0 { - padding-left: 0 !important; -} - -.px-0 { - padding-left: 0 !important; - padding-right: 0 !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pr-1 { - padding-right: 0.25rem !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1 { - padding-left: 0.25rem !important; -} - -.px-1 { - padding-left: 0.25rem !important; - padding-right: 0.25rem !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pr-2 { - padding-right: 0.5rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2 { - padding-left: 0.5rem !important; -} - -.px-2 { - padding-left: 0.5rem !important; - padding-right: 0.5rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.pt-3 { - padding-top: 0.75rem !important; -} - -.pr-3 { - padding-right: 0.75rem !important; -} - -.pb-3 { - padding-bottom: 0.75rem !important; -} - -.pl-3 { - padding-left: 0.75rem !important; -} - -.px-3 { - padding-left: 0.75rem !important; - padding-right: 0.75rem !important; -} - -.py-3 { - padding-top: 0.75rem !important; - padding-bottom: 0.75rem !important; -} - -.pt-4 { - padding-top: 1rem !important; -} - -.pr-4 { - padding-right: 1rem !important; -} - -.pb-4 { - padding-bottom: 1rem !important; -} - -.pl-4 { - padding-left: 1rem !important; -} - -.px-4 { - padding-left: 1rem !important; - padding-right: 1rem !important; -} - -.py-4 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.pt-5 { - padding-top: 1.5rem !important; -} - -.pr-5 { - padding-right: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 1.5rem !important; -} - -.pl-5 { - padding-left: 1.5rem !important; -} - -.px-5 { - padding-left: 1.5rem !important; - padding-right: 1.5rem !important; -} - -.py-5 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.pt-6 { - padding-top: 3rem !important; -} - -.pr-6 { - padding-right: 3rem !important; -} - -.pb-6 { - padding-bottom: 3rem !important; -} - -.pl-6 { - padding-left: 3rem !important; -} - -.px-6 { - padding-left: 3rem !important; - padding-right: 3rem !important; -} - -.py-6 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.is-size-1 { - font-size: 3rem !important; -} - -.is-size-2 { - font-size: 2.5rem !important; -} - -.is-size-3 { - font-size: 2rem !important; -} - -.is-size-4 { - font-size: 1.5rem !important; -} - -.is-size-5 { - font-size: 1.25rem !important; -} - -.is-size-6 { - font-size: 1rem !important; -} - -.is-size-7 { - font-size: 0.75rem !important; -} - -@media screen and (max-width: 768px) { - .is-size-1-mobile { - font-size: 3rem !important; - } - .is-size-2-mobile { - font-size: 2.5rem !important; - } - .is-size-3-mobile { - font-size: 2rem !important; - } - .is-size-4-mobile { - font-size: 1.5rem !important; - } - .is-size-5-mobile { - font-size: 1.25rem !important; - } - .is-size-6-mobile { - font-size: 1rem !important; - } - .is-size-7-mobile { - font-size: 0.75rem !important; - } -} - -@media screen and (min-width: 769px), print { - .is-size-1-tablet { - font-size: 3rem !important; - } - .is-size-2-tablet { - font-size: 2.5rem !important; - } - .is-size-3-tablet { - font-size: 2rem !important; - } - .is-size-4-tablet { - font-size: 1.5rem !important; - } - .is-size-5-tablet { - font-size: 1.25rem !important; - } - .is-size-6-tablet { - font-size: 1rem !important; - } - .is-size-7-tablet { - font-size: 0.75rem !important; - } -} - -@media screen and (max-width: 1023px) { - .is-size-1-touch { - font-size: 3rem !important; - } - .is-size-2-touch { - font-size: 2.5rem !important; - } - .is-size-3-touch { - font-size: 2rem !important; - } - .is-size-4-touch { - font-size: 1.5rem !important; - } - .is-size-5-touch { - font-size: 1.25rem !important; - } - .is-size-6-touch { - font-size: 1rem !important; - } - .is-size-7-touch { - font-size: 0.75rem !important; - } -} - -@media screen and (min-width: 1024px) { - .is-size-1-desktop { - font-size: 3rem !important; - } - .is-size-2-desktop { - font-size: 2.5rem !important; - } - .is-size-3-desktop { - font-size: 2rem !important; - } - .is-size-4-desktop { - font-size: 1.5rem !important; - } - .is-size-5-desktop { - font-size: 1.25rem !important; - } - .is-size-6-desktop { - font-size: 1rem !important; - } - .is-size-7-desktop { - font-size: 0.75rem !important; - } -} - -@media screen and (min-width: 1216px) { - .is-size-1-widescreen { - font-size: 3rem !important; - } - .is-size-2-widescreen { - font-size: 2.5rem !important; - } - .is-size-3-widescreen { - font-size: 2rem !important; - } - .is-size-4-widescreen { - font-size: 1.5rem !important; - } - .is-size-5-widescreen { - font-size: 1.25rem !important; - } - .is-size-6-widescreen { - font-size: 1rem !important; - } - .is-size-7-widescreen { - font-size: 0.75rem !important; - } -} - -@media screen and (min-width: 1408px) { - .is-size-1-fullhd { - font-size: 3rem !important; - } - .is-size-2-fullhd { - font-size: 2.5rem !important; - } - .is-size-3-fullhd { - font-size: 2rem !important; - } - .is-size-4-fullhd { - font-size: 1.5rem !important; - } - .is-size-5-fullhd { - font-size: 1.25rem !important; - } - .is-size-6-fullhd { - font-size: 1rem !important; - } - .is-size-7-fullhd { - font-size: 0.75rem !important; - } -} - -.has-text-centered { - text-align: center !important; -} - -.has-text-justified { - text-align: justify !important; -} - -.has-text-left { - text-align: left !important; -} - -.has-text-right { - text-align: right !important; -} - -@media screen and (max-width: 768px) { - .has-text-centered-mobile { - text-align: center !important; - } -} - -@media screen and (min-width: 769px), print { - .has-text-centered-tablet { - text-align: center !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-centered-tablet-only { - text-align: center !important; - } -} - -@media screen and (max-width: 1023px) { - .has-text-centered-touch { - text-align: center !important; - } -} - -@media screen and (min-width: 1024px) { - .has-text-centered-desktop { - text-align: center !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-centered-desktop-only { - text-align: center !important; - } -} - -@media screen and (min-width: 1216px) { - .has-text-centered-widescreen { - text-align: center !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-centered-widescreen-only { - text-align: center !important; - } -} - -@media screen and (min-width: 1408px) { - .has-text-centered-fullhd { - text-align: center !important; - } -} - -@media screen and (max-width: 768px) { - .has-text-justified-mobile { - text-align: justify !important; - } -} - -@media screen and (min-width: 769px), print { - .has-text-justified-tablet { - text-align: justify !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-justified-tablet-only { - text-align: justify !important; - } -} - -@media screen and (max-width: 1023px) { - .has-text-justified-touch { - text-align: justify !important; - } -} - -@media screen and (min-width: 1024px) { - .has-text-justified-desktop { - text-align: justify !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-justified-desktop-only { - text-align: justify !important; - } -} - -@media screen and (min-width: 1216px) { - .has-text-justified-widescreen { - text-align: justify !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-justified-widescreen-only { - text-align: justify !important; - } -} - -@media screen and (min-width: 1408px) { - .has-text-justified-fullhd { - text-align: justify !important; - } -} - -@media screen and (max-width: 768px) { - .has-text-left-mobile { - text-align: left !important; - } -} - -@media screen and (min-width: 769px), print { - .has-text-left-tablet { - text-align: left !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-left-tablet-only { - text-align: left !important; - } -} - -@media screen and (max-width: 1023px) { - .has-text-left-touch { - text-align: left !important; - } -} - -@media screen and (min-width: 1024px) { - .has-text-left-desktop { - text-align: left !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-left-desktop-only { - text-align: left !important; - } -} - -@media screen and (min-width: 1216px) { - .has-text-left-widescreen { - text-align: left !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-left-widescreen-only { - text-align: left !important; - } -} - -@media screen and (min-width: 1408px) { - .has-text-left-fullhd { - text-align: left !important; - } -} - -@media screen and (max-width: 768px) { - .has-text-right-mobile { - text-align: right !important; - } -} - -@media screen and (min-width: 769px), print { - .has-text-right-tablet { - text-align: right !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-right-tablet-only { - text-align: right !important; - } -} - -@media screen and (max-width: 1023px) { - .has-text-right-touch { - text-align: right !important; - } -} - -@media screen and (min-width: 1024px) { - .has-text-right-desktop { - text-align: right !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-right-desktop-only { - text-align: right !important; - } -} - -@media screen and (min-width: 1216px) { - .has-text-right-widescreen { - text-align: right !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-right-widescreen-only { - text-align: right !important; - } -} - -@media screen and (min-width: 1408px) { - .has-text-right-fullhd { - text-align: right !important; - } -} - -.is-capitalized { - text-transform: capitalize !important; -} - -.is-lowercase { - text-transform: lowercase !important; -} - -.is-uppercase { - text-transform: uppercase !important; -} - -.is-italic { - font-style: italic !important; -} - -.has-text-weight-light { - font-weight: 300 !important; -} - -.has-text-weight-normal { - font-weight: 400 !important; -} - -.has-text-weight-medium { - font-weight: 500 !important; -} - -.has-text-weight-semibold { - font-weight: 600 !important; -} - -.has-text-weight-bold { - font-weight: 700 !important; -} - -.is-family-primary { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; -} - -.is-family-secondary { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; -} - -.is-family-sans-serif { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; -} - -.is-family-monospace { - font-family: monospace !important; -} - -.is-family-code { - font-family: monospace !important; -} - -.is-block { - display: block !important; -} - -@media screen and (max-width: 768px) { - .is-block-mobile { - display: block !important; - } -} - -@media screen and (min-width: 769px), print { - .is-block-tablet { - display: block !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-block-tablet-only { - display: block !important; - } -} - -@media screen and (max-width: 1023px) { - .is-block-touch { - display: block !important; - } -} - -@media screen and (min-width: 1024px) { - .is-block-desktop { - display: block !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-block-desktop-only { - display: block !important; - } -} - -@media screen and (min-width: 1216px) { - .is-block-widescreen { - display: block !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-block-widescreen-only { - display: block !important; - } -} - -@media screen and (min-width: 1408px) { - .is-block-fullhd { - display: block !important; - } -} - -.is-flex { - display: flex !important; -} - -@media screen and (max-width: 768px) { - .is-flex-mobile { - display: flex !important; - } -} - -@media screen and (min-width: 769px), print { - .is-flex-tablet { - display: flex !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-flex-tablet-only { - display: flex !important; - } -} - -@media screen and (max-width: 1023px) { - .is-flex-touch { - display: flex !important; - } -} - -@media screen and (min-width: 1024px) { - .is-flex-desktop { - display: flex !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-flex-desktop-only { - display: flex !important; - } -} - -@media screen and (min-width: 1216px) { - .is-flex-widescreen { - display: flex !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-flex-widescreen-only { - display: flex !important; - } -} - -@media screen and (min-width: 1408px) { - .is-flex-fullhd { - display: flex !important; - } -} - -.is-inline { - display: inline !important; -} - -@media screen and (max-width: 768px) { - .is-inline-mobile { - display: inline !important; - } -} - -@media screen and (min-width: 769px), print { - .is-inline-tablet { - display: inline !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-inline-tablet-only { - display: inline !important; - } -} - -@media screen and (max-width: 1023px) { - .is-inline-touch { - display: inline !important; - } -} - -@media screen and (min-width: 1024px) { - .is-inline-desktop { - display: inline !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-inline-desktop-only { - display: inline !important; - } -} - -@media screen and (min-width: 1216px) { - .is-inline-widescreen { - display: inline !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-widescreen-only { - display: inline !important; - } -} - -@media screen and (min-width: 1408px) { - .is-inline-fullhd { - display: inline !important; - } -} - -.is-inline-block { - display: inline-block !important; -} - -@media screen and (max-width: 768px) { - .is-inline-block-mobile { - display: inline-block !important; - } -} - -@media screen and (min-width: 769px), print { - .is-inline-block-tablet { - display: inline-block !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-inline-block-tablet-only { - display: inline-block !important; - } -} - -@media screen and (max-width: 1023px) { - .is-inline-block-touch { - display: inline-block !important; - } -} - -@media screen and (min-width: 1024px) { - .is-inline-block-desktop { - display: inline-block !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-inline-block-desktop-only { - display: inline-block !important; - } -} - -@media screen and (min-width: 1216px) { - .is-inline-block-widescreen { - display: inline-block !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-block-widescreen-only { - display: inline-block !important; - } -} - -@media screen and (min-width: 1408px) { - .is-inline-block-fullhd { - display: inline-block !important; - } -} - -.is-inline-flex { - display: inline-flex !important; -} - -@media screen and (max-width: 768px) { - .is-inline-flex-mobile { - display: inline-flex !important; - } -} - -@media screen and (min-width: 769px), print { - .is-inline-flex-tablet { - display: inline-flex !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-inline-flex-tablet-only { - display: inline-flex !important; - } -} - -@media screen and (max-width: 1023px) { - .is-inline-flex-touch { - display: inline-flex !important; - } -} - -@media screen and (min-width: 1024px) { - .is-inline-flex-desktop { - display: inline-flex !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-inline-flex-desktop-only { - display: inline-flex !important; - } -} - -@media screen and (min-width: 1216px) { - .is-inline-flex-widescreen { - display: inline-flex !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-flex-widescreen-only { - display: inline-flex !important; - } -} - -@media screen and (min-width: 1408px) { - .is-inline-flex-fullhd { - display: inline-flex !important; - } -} - -.is-hidden { - display: none !important; -} - -.is-sr-only { - border: none !important; - clip: rect(0, 0, 0, 0) !important; - height: 0.01em !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - white-space: nowrap !important; - width: 0.01em !important; -} - -@media screen and (max-width: 768px) { - .is-hidden-mobile { - display: none !important; - } -} - -@media screen and (min-width: 769px), print { - .is-hidden-tablet { - display: none !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-hidden-tablet-only { - display: none !important; - } -} - -@media screen and (max-width: 1023px) { - .is-hidden-touch { - display: none !important; - } -} - -@media screen and (min-width: 1024px) { - .is-hidden-desktop { - display: none !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-hidden-desktop-only { - display: none !important; - } -} - -@media screen and (min-width: 1216px) { - .is-hidden-widescreen { - display: none !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-hidden-widescreen-only { - display: none !important; - } -} - -@media screen and (min-width: 1408px) { - .is-hidden-fullhd { - display: none !important; - } -} - -.is-invisible { - visibility: hidden !important; -} - -@media screen and (max-width: 768px) { - .is-invisible-mobile { - visibility: hidden !important; - } -} - -@media screen and (min-width: 769px), print { - .is-invisible-tablet { - visibility: hidden !important; - } -} - -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-invisible-tablet-only { - visibility: hidden !important; - } -} - -@media screen and (max-width: 1023px) { - .is-invisible-touch { - visibility: hidden !important; - } -} - -@media screen and (min-width: 1024px) { - .is-invisible-desktop { - visibility: hidden !important; - } -} - -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-invisible-desktop-only { - visibility: hidden !important; - } -} - -@media screen and (min-width: 1216px) { - .is-invisible-widescreen { - visibility: hidden !important; - } -} - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-invisible-widescreen-only { - visibility: hidden !important; - } -} - -@media screen and (min-width: 1408px) { - .is-invisible-fullhd { - visibility: hidden !important; - } -} - -.hero { - align-items: stretch; - display: flex; - flex-direction: column; - justify-content: space-between; -} - -.hero .navbar { - background: none; -} - -.hero .tabs ul { - border-bottom: none; -} - -.hero.is-white { - background-color: white; - color: #0a0a0a; -} - -.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-white strong { - color: inherit; -} - -.hero.is-white .title { - color: #0a0a0a; -} - -.hero.is-white .subtitle { - color: rgba(10, 10, 10, 0.9); -} - -.hero.is-white .subtitle a:not(.button), -.hero.is-white .subtitle strong { - color: #0a0a0a; -} - -@media screen and (max-width: 1023px) { - .hero.is-white .navbar-menu { - background-color: white; - } -} - -.hero.is-white .navbar-item, -.hero.is-white .navbar-link { - color: rgba(10, 10, 10, 0.7); -} - -.hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, -.hero.is-white .navbar-link:hover, -.hero.is-white .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; -} - -.hero.is-white .tabs a { - color: #0a0a0a; - opacity: 0.9; -} - -.hero.is-white .tabs a:hover { - opacity: 1; -} - -.hero.is-white .tabs li.is-active a { - opacity: 1; -} - -.hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { - color: #0a0a0a; -} - -.hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; -} - -.hero.is-white.is-bold { - background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-white.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); - } -} - -.hero.is-black { - background-color: #0a0a0a; - color: white; -} - -.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-black strong { - color: inherit; -} - -.hero.is-black .title { - color: white; -} - -.hero.is-black .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-black .subtitle a:not(.button), -.hero.is-black .subtitle strong { - color: white; -} - -@media screen and (max-width: 1023px) { - .hero.is-black .navbar-menu { - background-color: #0a0a0a; - } -} - -.hero.is-black .navbar-item, -.hero.is-black .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, -.hero.is-black .navbar-link:hover, -.hero.is-black .navbar-link.is-active { - background-color: black; - color: white; -} - -.hero.is-black .tabs a { - color: white; - opacity: 0.9; -} - -.hero.is-black .tabs a:hover { - opacity: 1; -} - -.hero.is-black .tabs li.is-active a { - opacity: 1; -} - -.hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { - color: white; -} - -.hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { - background-color: white; - border-color: white; - color: #0a0a0a; -} - -.hero.is-black.is-bold { - background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-black.is-bold .navbar-menu { - background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); - } -} - -.hero.is-light { - background-color: whitesmoke; - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-light strong { - color: inherit; -} - -.hero.is-light .title { - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-light .subtitle { - color: rgba(0, 0, 0, 0.9); -} - -.hero.is-light .subtitle a:not(.button), -.hero.is-light .subtitle strong { - color: rgba(0, 0, 0, 0.7); -} - -@media screen and (max-width: 1023px) { - .hero.is-light .navbar-menu { - background-color: whitesmoke; - } -} - -.hero.is-light .navbar-item, -.hero.is-light .navbar-link { - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, -.hero.is-light .navbar-link:hover, -.hero.is-light .navbar-link.is-active { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-light .tabs a { - color: rgba(0, 0, 0, 0.7); - opacity: 0.9; -} - -.hero.is-light .tabs a:hover { - opacity: 1; -} - -.hero.is-light .tabs li.is-active a { - opacity: 1; -} - -.hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { - background-color: rgba(0, 0, 0, 0.7); - border-color: rgba(0, 0, 0, 0.7); - color: whitesmoke; -} - -.hero.is-light.is-bold { - background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-light.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); - } -} - -.hero.is-dark { - background-color: #363636; - color: #fff; -} - -.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-dark strong { - color: inherit; -} - -.hero.is-dark .title { - color: #fff; -} - -.hero.is-dark .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-dark .subtitle a:not(.button), -.hero.is-dark .subtitle strong { - color: #fff; -} - -@media screen and (max-width: 1023px) { - .hero.is-dark .navbar-menu { - background-color: #363636; - } -} - -.hero.is-dark .navbar-item, -.hero.is-dark .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, -.hero.is-dark .navbar-link:hover, -.hero.is-dark .navbar-link.is-active { - background-color: #292929; - color: #fff; -} - -.hero.is-dark .tabs a { - color: #fff; - opacity: 0.9; -} - -.hero.is-dark .tabs a:hover { - opacity: 1; -} - -.hero.is-dark .tabs li.is-active a { - opacity: 1; -} - -.hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a { - color: #fff; -} - -.hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #363636; -} - -.hero.is-dark.is-bold { - background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-dark.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); - } -} - -.hero.is-primary { - background-color: #00d1b2; - color: #fff; -} - -.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-primary strong { - color: inherit; -} - -.hero.is-primary .title { - color: #fff; -} - -.hero.is-primary .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-primary .subtitle a:not(.button), -.hero.is-primary .subtitle strong { - color: #fff; -} - -@media screen and (max-width: 1023px) { - .hero.is-primary .navbar-menu { - background-color: #00d1b2; - } -} - -.hero.is-primary .navbar-item, -.hero.is-primary .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, -.hero.is-primary .navbar-link:hover, -.hero.is-primary .navbar-link.is-active { - background-color: #00b89c; - color: #fff; -} - -.hero.is-primary .tabs a { - color: #fff; - opacity: 0.9; -} - -.hero.is-primary .tabs a:hover { - opacity: 1; -} - -.hero.is-primary .tabs li.is-active a { - opacity: 1; -} - -.hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a { - color: #fff; -} - -.hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #00d1b2; -} - -.hero.is-primary.is-bold { - background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-primary.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); - } -} - -.hero.is-link { - background-color: #3273dc; - color: #fff; -} - -.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-link strong { - color: inherit; -} - -.hero.is-link .title { - color: #fff; -} - -.hero.is-link .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-link .subtitle a:not(.button), -.hero.is-link .subtitle strong { - color: #fff; -} - -@media screen and (max-width: 1023px) { - .hero.is-link .navbar-menu { - background-color: #3273dc; - } -} - -.hero.is-link .navbar-item, -.hero.is-link .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, -.hero.is-link .navbar-link:hover, -.hero.is-link .navbar-link.is-active { - background-color: #2366d1; - color: #fff; -} - -.hero.is-link .tabs a { - color: #fff; - opacity: 0.9; -} - -.hero.is-link .tabs a:hover { - opacity: 1; -} - -.hero.is-link .tabs li.is-active a { - opacity: 1; -} - -.hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { - color: #fff; -} - -.hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #3273dc; -} - -.hero.is-link.is-bold { - background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-link.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); - } -} - -.hero.is-info { - background-color: #3273dc; - color: #fff; -} - -.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-info strong { - color: inherit; -} - -.hero.is-info .title { - color: #fff; -} - -.hero.is-info .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-info .subtitle a:not(.button), -.hero.is-info .subtitle strong { - color: #fff; -} - -@media screen and (max-width: 1023px) { - .hero.is-info .navbar-menu { - background-color: #3298dc; - } -} - -.hero.is-info .navbar-item, -.hero.is-info .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, -.hero.is-info .navbar-link:hover, -.hero.is-info .navbar-link.is-active { - background-color: #238cd1; - color: #fff; -} - -.hero.is-info .tabs a { - color: #fff; - opacity: 0.9; -} - -.hero.is-info .tabs a:hover { - opacity: 1; -} - -.hero.is-info .tabs li.is-active a { - opacity: 1; -} - -.hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { - color: #fff; -} - -.hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #3298dc; -} - -.hero.is-info.is-bold { - background-image: linear-gradient(141deg, #159dc6 0%, #3298dc 71%, #4389e5 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-info.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #159dc6 0%, #3298dc 71%, #4389e5 100%); - } -} - -.hero.is-success { - background-color: #48c774; - color: #fff; -} - -.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-success strong { - color: inherit; -} - -.hero.is-success .title { - color: #fff; -} - -.hero.is-success .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-success .subtitle a:not(.button), -.hero.is-success .subtitle strong { - color: #fff; -} - -@media screen and (max-width: 1023px) { - .hero.is-success .navbar-menu { - background-color: #48c774; - } -} - -.hero.is-success .navbar-item, -.hero.is-success .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, -.hero.is-success .navbar-link:hover, -.hero.is-success .navbar-link.is-active { - background-color: #3abb67; - color: #fff; -} - -.hero.is-success .tabs a { - color: #fff; - opacity: 0.9; -} - -.hero.is-success .tabs a:hover { - opacity: 1; -} - -.hero.is-success .tabs li.is-active a { - opacity: 1; -} - -.hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { - color: #fff; -} - -.hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #48c774; -} - -.hero.is-success.is-bold { - background-image: linear-gradient(141deg, #29b342 0%, #48c774 71%, #56d296 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-success.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #29b342 0%, #48c774 71%, #56d296 100%); - } -} - -.hero.is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-warning strong { - color: inherit; -} - -.hero.is-warning .title { - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-warning .subtitle { - color: rgba(0, 0, 0, 0.9); -} - -.hero.is-warning .subtitle a:not(.button), -.hero.is-warning .subtitle strong { - color: rgba(0, 0, 0, 0.7); -} - -@media screen and (max-width: 1023px) { - .hero.is-warning .navbar-menu { - background-color: #ffdd57; - } -} - -.hero.is-warning .navbar-item, -.hero.is-warning .navbar-link { - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, -.hero.is-warning .navbar-link:hover, -.hero.is-warning .navbar-link.is-active { - background-color: #ffd83d; - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-warning .tabs a { - color: rgba(0, 0, 0, 0.7); - opacity: 0.9; -} - -.hero.is-warning .tabs a:hover { - opacity: 1; -} - -.hero.is-warning .tabs li.is-active a { - opacity: 1; -} - -.hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { - color: rgba(0, 0, 0, 0.7); -} - -.hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { - background-color: rgba(0, 0, 0, 0.7); - border-color: rgba(0, 0, 0, 0.7); - color: #ffdd57; -} - -.hero.is-warning.is-bold { - background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-warning.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); - } -} - -.hero.is-danger { - background-color: #f14668; - color: #fff; -} - -.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-danger strong { - color: inherit; -} - -.hero.is-danger .title { - color: #fff; -} - -.hero.is-danger .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.hero.is-danger .subtitle a:not(.button), -.hero.is-danger .subtitle strong { - color: #fff; -} - -@media screen and (max-width: 1023px) { - .hero.is-danger .navbar-menu { - background-color: #f14668; - } -} - -.hero.is-danger .navbar-item, -.hero.is-danger .navbar-link { - color: rgba(255, 255, 255, 0.7); -} - -.hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, -.hero.is-danger .navbar-link:hover, -.hero.is-danger .navbar-link.is-active { - background-color: #ef2e55; - color: #fff; -} - -.hero.is-danger .tabs a { - color: #fff; - opacity: 0.9; -} - -.hero.is-danger .tabs a:hover { - opacity: 1; -} - -.hero.is-danger .tabs li.is-active a { - opacity: 1; -} - -.hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { - color: #fff; -} - -.hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} - -.hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #f14668; -} - -.hero.is-danger.is-bold { - background-image: linear-gradient(141deg, #fa0a62 0%, #f14668 71%, #f7595f 100%); -} - -@media screen and (max-width: 768px) { - .hero.is-danger.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #fa0a62 0%, #f14668 71%, #f7595f 100%); - } -} - -.hero.is-small .hero-body { - padding: 1.5rem; -} - -@media screen and (min-width: 769px), print { - .hero.is-medium .hero-body { - padding: 9rem 1.5rem; - } -} - -@media screen and (min-width: 769px), print { - .hero.is-large .hero-body { - padding: 18rem 1.5rem; - } -} - -.hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { - align-items: center; - display: flex; -} - -.hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { - flex-grow: 1; - flex-shrink: 1; -} - -.hero.is-halfheight { - min-height: 50vh; -} - -.hero.is-fullheight { - min-height: 100vh; -} - -.hero-video { - overflow: hidden; -} - -.hero-video video { - left: 50%; - min-height: 100%; - min-width: 100%; - position: absolute; - top: 50%; - transform: translate3d(-50%, -50%, 0); -} - -.hero-video.is-transparent { - opacity: 0.3; -} - -@media screen and (max-width: 768px) { - .hero-video { - display: none; - } -} - -.hero-buttons { - margin-top: 1.5rem; -} - -@media screen and (max-width: 768px) { - .hero-buttons .button { - display: flex; - } - .hero-buttons .button:not(:last-child) { - margin-bottom: 0.75rem; - } -} - -@media screen and (min-width: 769px), print { - .hero-buttons { - display: flex; - justify-content: center; - } - .hero-buttons .button:not(:last-child) { - margin-right: 1.5rem; - } -} - -.hero-head, -.hero-foot { - flex-grow: 0; - flex-shrink: 0; -} - -.hero-body { - flex-grow: 1; - flex-shrink: 0; - padding: 3rem 1.5rem; -} - -.section { - padding: 3rem 1.5rem; -} - -@media screen and (min-width: 1024px) { - .section.is-medium { - padding: 9rem 1.5rem; - } - .section.is-large { - padding: 18rem 1.5rem; - } -} - -.footer { - background-color: #fafafa; - padding: 3rem 1.5rem 6rem; -} -/*# sourceMappingURL=bulma.css.map */ diff --git a/public/css/filament/filament/app.css b/public/css/filament/filament/app.css new file mode 100644 index 000000000..cf1fc9f7b --- /dev/null +++ b/public/css/filament/filament/app.css @@ -0,0 +1 @@ +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-top:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-start:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-top:.2222222em;padding-inline-start:.4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding-inline-end:1.5em;padding-bottom:1em;padding-top:1em;padding-inline-start:1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-top:.75em;padding-inline-start:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-3{margin-inline-end:.75rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-6{margin-inline-start:1.5rem}.ms-auto{margin-inline-start:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.hidden{display:none}.h-0{height:0}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-48{min-width:12rem}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.\!max-w-2xl{max-width:42rem!important}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-6xl{max-width:72rem!important}.\!max-w-7xl{max-width:80rem!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:32rem!important}.\!max-w-md{max-width:28rem!important}.\!max-w-sm{max-width:24rem!important}.\!max-w-xl{max-width:36rem!important}.\!max-w-xs{max-width:20rem!important}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-1\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/4{--tw-translate-x:-25%}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-12,.-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-3\/4{--tw-translate-y:-75%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-12{--tw-translate-y:3rem}.-rotate-180,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity,1))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity,1))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity,1))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity,1))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity,1))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity,1))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity,1))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.\!bg-none{background-image:none!important}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity,1))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity,1))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity,1))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity,1))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity,1))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity,1))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity,1))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity,1))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity,1))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity,1));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity,1))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity,1))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity,1))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity,1))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity,1))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity,1))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity,1))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity,1))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity,1))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity,1))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity,1))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-gray-400:checked:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity,1))}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity,1))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity,1))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:divide-white\/10:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}.dark\:divide-white\/5:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity,1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity,1))}.dark\:border-primary-500:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity,1))}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:border-t-white\/10:is(.dark *){border-top-color:hsla(0,0%,100%,.1)}.dark\:\!bg-gray-700:is(.dark *){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1))!important}.dark\:bg-custom-400\/10:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity,1))}.dark\:bg-custom-500\/20:is(.dark *){background-color:rgba(var(--c-500),.2)}.dark\:bg-gray-400\/10:is(.dark *){background-color:rgba(var(--gray-400),.1)}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity,1))}.dark\:bg-gray-500\/20:is(.dark *){background-color:rgba(var(--gray-500),.2)}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity,1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity,1))}.dark\:bg-gray-900\/30:is(.dark *){background-color:rgba(var(--gray-900),.3)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity,1))}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(var(--gray-950),.75)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity,1))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-white\/10:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:text-custom-300\/50:is(.dark *){color:rgba(var(--c-300),.5)}.dark\:text-custom-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity,1))}.dark\:text-custom-400\/10:is(.dark *){color:rgba(var(--c-400),.1)}.dark\:text-danger-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity,1))}.dark\:text-danger-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity,1))}.dark\:text-gray-300\/50:is(.dark *){color:rgba(var(--gray-300),.5)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity,1))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity,1))}.dark\:text-primary-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:text-white\/5:is(.dark *){color:hsla(0,0%,100%,.05)}.dark\:ring-custom-400\/30:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.3)}.dark\:ring-custom-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity,1))}.dark\:ring-danger-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity,1))}.dark\:ring-gray-400\/20:is(.dark *){--tw-ring-color:rgba(var(--gray-400),0.2)}.dark\:ring-gray-50\/10:is(.dark *){--tw-ring-color:rgba(var(--gray-50),0.1)}.dark\:ring-gray-700:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity,1))}.dark\:ring-gray-900:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity,1))}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.dark\:before\:bg-primary-500:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity,1));content:var(--tw-content)}.dark\:checked\:bg-danger-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity,1))}.dark\:checked\:bg-primary-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity,1))}.dark\:focus-within\:bg-white\/5:focus-within:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-custom-400\/10:hover:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:text-custom-300:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity,1))}.dark\:hover\:text-custom-300\/75:hover:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity,1))}.dark\:hover\:text-gray-300\/75:hover:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.dark\:hover\:ring-white\/20:hover:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:focus\:ring-danger-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity,1))}.dark\:focus\:ring-primary-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity,1))}.dark\:checked\:focus\:ring-danger-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--danger-400),0.5)}.dark\:checked\:focus\:ring-primary-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--primary-400),0.5)}.dark\:focus-visible\:border-primary-500:focus-visible:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity,1))}.dark\:focus-visible\:bg-custom-400\/10:focus-visible:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:focus-visible\:bg-white\/5:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:focus-visible\:text-custom-300\/75:focus-visible:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:focus-visible\:text-gray-300\/75:focus-visible:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:focus-visible\:text-gray-400:focus-visible:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.dark\:focus-visible\:ring-custom-400\/50:focus-visible:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}.dark\:focus-visible\:ring-custom-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity,1))}.dark\:focus-visible\:ring-primary-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity,1))}.dark\:disabled\:bg-transparent:disabled:is(.dark *){background-color:transparent}.dark\:disabled\:text-gray-400:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.dark\:disabled\:ring-white\/10:disabled:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled:is(.dark *){-webkit-text-fill-color:rgba(var(--gray-400),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:checked\:bg-gray-600:checked:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity,1))}.group\/button:hover .dark\:group-hover\/button\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.group:focus-visible .dark\:group-focus-visible\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity,1))}.group:focus-visible .dark\:group-focus-visible\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-sm{max-width:24rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:w-max{width:-moz-max-content;width:max-content}.md\:max-w-60{max-width:15rem}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}.dark\:lg\:bg-transparent:is(.dark *){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/4:where([dir=rtl],[dir=rtl] *){--tw-translate-x:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity,1))}.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:\[\&\.trix-active\]\:text-primary-400.trix-active:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity,1))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity,1))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity,1))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity,1))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn)):is(.dark *){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity,1));content:var(--tw-content)}.\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500:is(.dark *)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity,1));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.\[\&_optgroup\]\:dark\:bg-gray-900:is(.dark *) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity,1))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.\[\&_option\]\:dark\:bg-gray-900:is(.dark *) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity,1))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity,1))}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity,1))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity,1))}input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity,1))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity,1))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity,1))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity,1))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity,1))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)} \ No newline at end of file diff --git a/public/css/filament/forms/forms.css b/public/css/filament/forms/forms.css new file mode 100644 index 000000000..c3ec78f92 --- /dev/null +++ b/public/css/filament/forms/forms.css @@ -0,0 +1,49 @@ +input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:#00000003;border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:auto;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (-webkit-min-device-pixel-ratio:0),not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:"";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.4;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:#00000003;border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:#ffffff4d;border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:#00000003;border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000,#0000);content:" ";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity,1));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity,1));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity,1));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity,1))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity,1))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity,1))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity,1))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:#ff96004d}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,#fff0);height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,#fff0 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:#0000000d;border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:"";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:#ff000026}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity,1));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1));display:block;height:1.25rem;width:1.25rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button:before{content:"";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity,1));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity,1));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1));color:rgb(255 255 255/var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity,1));background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity,1));background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-size:1.5em 1.5em;&:has(.choices__button){padding-inline-end:3.5rem}}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity,1))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity,1));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity,1));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity,1))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity,1));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity,1))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity,1))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity,1));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity,1))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.webkit-calendar-picker-indicator\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information: + +cropperjs/dist/cropper.min.css: + (*! + * Cropper.js v1.6.2 + * https://fengyuanchen.github.io/cropperjs + * + * Copyright 2015-present Chen Fengyuan + * Released under the MIT license + * + * Date: 2024-04-21T07:43:02.731Z + *) + +filepond/dist/filepond.min.css: + (*! + * FilePond 4.32.7 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-edit/dist/filepond-plugin-image-edit.css: + (*! + * FilePondPluginImageEdit 1.6.3 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css: + (*! + * FilePondPluginImagePreview 4.6.12 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-media-preview/dist/filepond-plugin-media-preview.css: + (*! + * FilePondPluginmediaPreview 1.0.11 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit undefined for details. + *) + +easymde/dist/easymde.min.css: + (** + * easymde v2.18.0 + * Copyright Jeroen Akkerman + * @link https://github.com/ionaru/easy-markdown-editor + * @license MIT + *) +*/ \ No newline at end of file diff --git a/public/css/filament/support/support.css b/public/css/filament/support/support.css new file mode 100644 index 000000000..a80d070c8 --- /dev/null +++ b/public/css/filament/support/support.css @@ -0,0 +1 @@ +.fi-pagination-items,.fi-pagination-overview,.fi-pagination-records-per-page-select:not(.fi-compact){display:none}@supports (container-type:inline-size){.fi-pagination{container-type:inline-size}@container (min-width: 28rem){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@container (min-width: 56rem){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:640px){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@media (min-width:768px){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;height:16px;width:16px}.tippy-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.tippy-content{padding:5px 9px;position:relative;z-index:1}.tippy-box[data-theme~=light]{background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;color:#26323d}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.fi-sortable-ghost{opacity:.3} \ No newline at end of file diff --git a/public/css/leaflet.css b/public/css/leaflet.css deleted file mode 100644 index d83652a19..000000000 --- a/public/css/leaflet.css +++ /dev/null @@ -1,39 +0,0 @@ -.info { - padding: 6px 8px; - font: 14px/16px Arial, Helvetica, sans-serif; - background: white; - background: rgba(255,255,255,0.8); - box-shadow: 0 0 15px rgba(0,0,0,0.2); - border-radius: 5px; -} - -.info h4 { - margin: 0 0 5px; - color: #777; -} - -.legend { - text-align: left; - line-height: 18px; - color: #555; -} - -.legend i { - width: 18px; - height: 18px; - float: left; - margin-right: 8px; - opacity: 0.7; -} - -.leaflet-pane .leaflet-shadow-pane { - display: none; -} - -.leaflet-popup-content { - width: 180px !important; -} - -.lealet-popup { - left: -106px !important; -} diff --git a/public/js/filament/filament/app.js b/public/js/filament/filament/app.js new file mode 100644 index 000000000..caff16739 --- /dev/null +++ b/public/js/filament/filament/app.js @@ -0,0 +1 @@ +(()=>{var Z=Object.create,L=Object.defineProperty,ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty,re=Object.getOwnPropertyNames,ne=Object.getOwnPropertyDescriptor,ae=s=>L(s,"__esModule",{value:!0}),ie=(s,n)=>()=>(n||(n={exports:{}},s(n.exports,n)),n.exports),oe=(s,n,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(let d of re(n))!te.call(s,d)&&d!=="default"&&L(s,d,{get:()=>n[d],enumerable:!(p=ne(n,d))||p.enumerable});return s},se=s=>oe(ae(L(s!=null?Z(ee(s)):{},"default",s&&s.__esModule&&"default"in s?{get:()=>s.default,enumerable:!0}:{value:s,enumerable:!0})),s),fe=ie((s,n)=>{(function(p,d,M){if(!p)return;for(var h={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},y={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},g={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},q={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},S,w=1;w<20;++w)h[111+w]="f"+w;for(w=0;w<=9;++w)h[w+96]=w.toString();function C(e,t,a){if(e.addEventListener){e.addEventListener(t,a,!1);return}e.attachEvent("on"+t,a)}function T(e){if(e.type=="keypress"){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return h[e.which]?h[e.which]:y[e.which]?y[e.which]:String.fromCharCode(e.which).toLowerCase()}function V(e,t){return e.sort().join(",")===t.sort().join(",")}function $(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.push("alt"),e.ctrlKey&&t.push("ctrl"),e.metaKey&&t.push("meta"),t}function B(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=!1}function H(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=!0}function O(e){return e=="shift"||e=="ctrl"||e=="alt"||e=="meta"}function J(){if(!S){S={};for(var e in h)e>95&&e<112||h.hasOwnProperty(e)&&(S[h[e]]=e)}return S}function U(e,t,a){return a||(a=J()[e]?"keydown":"keypress"),a=="keypress"&&t.length&&(a="keydown"),a}function X(e){return e==="+"?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split("+"))}function I(e,t){var a,c,b,P=[];for(a=X(e),b=0;b1){z(r,m,o,l);return}f=I(r,l),t._callbacks[f.key]=t._callbacks[f.key]||[],j(f.key,f.modifiers,{type:f.action},i,r,u),t._callbacks[f.key][i?"unshift":"push"]({callback:o,modifiers:f.modifiers,action:f.action,seq:i,level:u,combo:r})}t._bindMultiple=function(r,o,l){for(var i=0;i-1||D(t,a.target))return!1;if("composedPath"in e&&typeof e.composedPath=="function"){var c=e.composedPath()[0];c!==e.target&&(t=c)}return t.tagName=="INPUT"||t.tagName=="SELECT"||t.tagName=="TEXTAREA"||t.isContentEditable},v.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},v.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(h[t]=e[t]);S=null},v.init=function(){var e=v(d);for(var t in e)t.charAt(0)!=="_"&&(v[t]=function(a){return function(){return e[a].apply(e,arguments)}}(t))},v.init(),p.Mousetrap=v,typeof n<"u"&&n.exports&&(n.exports=v),typeof define=="function"&&define.amd&&define(function(){return v})})(typeof window<"u"?window:null,typeof window<"u"?document:null)}),R=se(fe());(function(s){if(s){var n={},p=s.prototype.stopCallback;s.prototype.stopCallback=function(d,M,h,y){var g=this;return g.paused?!0:n[h]||n[y]?!1:p.call(g,d,M,h)},s.prototype.bindGlobal=function(d,M,h){var y=this;if(y.bind(d,M,h),d instanceof Array){for(var g=0;g{s.directive("mousetrap",(n,{modifiers:p,expression:d},{evaluate:M})=>{let h=()=>d?M(d):n.click();p=p.map(y=>y.replace(/-/g,"+")),p.includes("global")&&(p=p.filter(y=>y!=="global"),R.default.bindGlobal(p,y=>{y.preventDefault(),h()})),R.default.bind(p,y=>{y.preventDefault(),h()})})},F=le;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(F),window.Alpine.store("sidebar",{isOpen:window.Alpine.$persist(!0).as("isOpen"),collapsedGroups:window.Alpine.$persist(null).as("collapsedGroups"),groupIsCollapsed:function(n){return this.collapsedGroups.includes(n)},collapseGroup:function(n){this.collapsedGroups.includes(n)||(this.collapsedGroups=this.collapsedGroups.concat(n))},toggleCollapsedGroup:function(n){this.collapsedGroups=this.collapsedGroups.includes(n)?this.collapsedGroups.filter(p=>p!==n):this.collapsedGroups.concat(n)},close:function(){this.isOpen=!1},open:function(){this.isOpen=!0}});let s=localStorage.getItem("theme")??getComputedStyle(document.documentElement).getPropertyValue("--default-theme-mode");window.Alpine.store("theme",s==="dark"||s==="system"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.addEventListener("theme-changed",n=>{let p=n.detail;localStorage.setItem("theme",p),p==="system"&&(p=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.Alpine.store("theme",p)}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",n=>{localStorage.getItem("theme")==="system"&&window.Alpine.store("theme",n.matches?"dark":"light")}),window.Alpine.effect(()=>{window.Alpine.store("theme")==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")})});})(); diff --git a/public/js/filament/filament/echo.js b/public/js/filament/filament/echo.js new file mode 100644 index 000000000..65edaf5eb --- /dev/null +++ b/public/js/filament/filament/echo.js @@ -0,0 +1,13 @@ +(()=>{var Ci=Object.create;var he=Object.defineProperty;var Ti=Object.getOwnPropertyDescriptor;var Pi=Object.getOwnPropertyNames;var xi=Object.getPrototypeOf,Oi=Object.prototype.hasOwnProperty;var Ai=(l,h)=>()=>(h||l((h={exports:{}}).exports,h),h.exports);var Ei=(l,h,a,c)=>{if(h&&typeof h=="object"||typeof h=="function")for(let s of Pi(h))!Oi.call(l,s)&&s!==a&&he(l,s,{get:()=>h[s],enumerable:!(c=Ti(h,s))||c.enumerable});return l};var Li=(l,h,a)=>(a=l!=null?Ci(xi(l)):{},Ei(h||!l||!l.__esModule?he(a,"default",{value:l,enumerable:!0}):a,l));var me=Ai((vt,It)=>{(function(h,a){typeof vt=="object"&&typeof It=="object"?It.exports=a():typeof define=="function"&&define.amd?define([],a):typeof vt=="object"?vt.Pusher=a():h.Pusher=a()})(window,function(){return function(l){var h={};function a(c){if(h[c])return h[c].exports;var s=h[c]={i:c,l:!1,exports:{}};return l[c].call(s.exports,s,s.exports,a),s.l=!0,s.exports}return a.m=l,a.c=h,a.d=function(c,s,f){a.o(c,s)||Object.defineProperty(c,s,{enumerable:!0,get:f})},a.r=function(c){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},a.t=function(c,s){if(s&1&&(c=a(c)),s&8||s&4&&typeof c=="object"&&c&&c.__esModule)return c;var f=Object.create(null);if(a.r(f),Object.defineProperty(f,"default",{enumerable:!0,value:c}),s&2&&typeof c!="string")for(var d in c)a.d(f,d,function(N){return c[N]}.bind(null,d));return f},a.n=function(c){var s=c&&c.__esModule?function(){return c.default}:function(){return c};return a.d(s,"a",s),s},a.o=function(c,s){return Object.prototype.hasOwnProperty.call(c,s)},a.p="",a(a.s=2)}([function(l,h,a){"use strict";var c=this&&this.__extends||function(){var b=function(v,y){return b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(w,O){w.__proto__=O}||function(w,O){for(var I in O)O.hasOwnProperty(I)&&(w[I]=O[I])},b(v,y)};return function(v,y){b(v,y);function w(){this.constructor=v}v.prototype=y===null?Object.create(y):(w.prototype=y.prototype,new w)}}();Object.defineProperty(h,"__esModule",{value:!0});var s=256,f=function(){function b(v){v===void 0&&(v="="),this._paddingCharacter=v}return b.prototype.encodedLength=function(v){return this._paddingCharacter?(v+2)/3*4|0:(v*8+5)/6|0},b.prototype.encode=function(v){for(var y="",w=0;w>>3*6&63),y+=this._encodeByte(O>>>2*6&63),y+=this._encodeByte(O>>>1*6&63),y+=this._encodeByte(O>>>0*6&63)}var I=v.length-w;if(I>0){var O=v[w]<<16|(I===2?v[w+1]<<8:0);y+=this._encodeByte(O>>>3*6&63),y+=this._encodeByte(O>>>2*6&63),I===2?y+=this._encodeByte(O>>>1*6&63):y+=this._paddingCharacter||"",y+=this._paddingCharacter||""}return y},b.prototype.maxDecodedLength=function(v){return this._paddingCharacter?v/4*3|0:(v*6+7)/8|0},b.prototype.decodedLength=function(v){return this.maxDecodedLength(v.length-this._getPaddingLength(v))},b.prototype.decode=function(v){if(v.length===0)return new Uint8Array(0);for(var y=this._getPaddingLength(v),w=v.length-y,O=new Uint8Array(this.maxDecodedLength(w)),I=0,q=0,M=0,J=0,F=0,z=0,B=0;q>>4,O[I++]=F<<4|z>>>2,O[I++]=z<<6|B,M|=J&s,M|=F&s,M|=z&s,M|=B&s;if(q>>4,M|=J&s,M|=F&s),q>>2,M|=z&s),q>>8&6,y+=51-v>>>8&-75,y+=61-v>>>8&-15,y+=62-v>>>8&3,String.fromCharCode(y)},b.prototype._decodeChar=function(v){var y=s;return y+=(42-v&v-44)>>>8&-s+v-43+62,y+=(46-v&v-48)>>>8&-s+v-47+63,y+=(47-v&v-58)>>>8&-s+v-48+52,y+=(64-v&v-91)>>>8&-s+v-65+0,y+=(96-v&v-123)>>>8&-s+v-97+26,y},b.prototype._getPaddingLength=function(v){var y=0;if(this._paddingCharacter){for(var w=v.length-1;w>=0&&v[w]===this._paddingCharacter;w--)y++;if(v.length<4||y>2)throw new Error("Base64Coder: incorrect padding")}return y},b}();h.Coder=f;var d=new f;function N(b){return d.encode(b)}h.encode=N;function P(b){return d.decode(b)}h.decode=P;var T=function(b){c(v,b);function v(){return b!==null&&b.apply(this,arguments)||this}return v.prototype._encodeByte=function(y){var w=y;return w+=65,w+=25-y>>>8&6,w+=51-y>>>8&-75,w+=61-y>>>8&-13,w+=62-y>>>8&49,String.fromCharCode(w)},v.prototype._decodeChar=function(y){var w=s;return w+=(44-y&y-46)>>>8&-s+y-45+62,w+=(94-y&y-96)>>>8&-s+y-95+63,w+=(47-y&y-58)>>>8&-s+y-48+52,w+=(64-y&y-91)>>>8&-s+y-65+0,w+=(96-y&y-123)>>>8&-s+y-97+26,w},v}(f);h.URLSafeCoder=T;var S=new T;function C(b){return S.encode(b)}h.encodeURLSafe=C;function x(b){return S.decode(b)}h.decodeURLSafe=x,h.encodedLength=function(b){return d.encodedLength(b)},h.maxDecodedLength=function(b){return d.maxDecodedLength(b)},h.decodedLength=function(b){return d.decodedLength(b)}},function(l,h,a){"use strict";Object.defineProperty(h,"__esModule",{value:!0});var c="utf8: invalid string",s="utf8: invalid source encoding";function f(P){for(var T=new Uint8Array(d(P)),S=0,C=0;C>6,T[S++]=128|x&63):x<55296?(T[S++]=224|x>>12,T[S++]=128|x>>6&63,T[S++]=128|x&63):(C++,x=(x&1023)<<10,x|=P.charCodeAt(C)&1023,x+=65536,T[S++]=240|x>>18,T[S++]=128|x>>12&63,T[S++]=128|x>>6&63,T[S++]=128|x&63)}return T}h.encode=f;function d(P){for(var T=0,S=0;S=P.length-1)throw new Error(c);S++,T+=4}else throw new Error(c)}return T}h.encodedLength=d;function N(P){for(var T=[],S=0;S=P.length)throw new Error(s);var b=P[++S];if((b&192)!==128)throw new Error(s);C=(C&31)<<6|b&63,x=128}else if(C<240){if(S>=P.length-1)throw new Error(s);var b=P[++S],v=P[++S];if((b&192)!==128||(v&192)!==128)throw new Error(s);C=(C&15)<<12|(b&63)<<6|v&63,x=2048}else if(C<248){if(S>=P.length-2)throw new Error(s);var b=P[++S],v=P[++S],y=P[++S];if((b&192)!==128||(v&192)!==128||(y&192)!==128)throw new Error(s);C=(C&15)<<18|(b&63)<<12|(v&63)<<6|y&63,x=65536}else throw new Error(s);if(C=55296&&C<=57343)throw new Error(s);if(C>=65536){if(C>1114111)throw new Error(s);C-=65536,T.push(String.fromCharCode(55296|C>>10)),C=56320|C&1023}}T.push(String.fromCharCode(C))}return T.join("")}h.decode=N},function(l,h,a){l.exports=a(3).default},function(l,h,a){"use strict";a.r(h);var c=function(){function e(t,n){this.lastId=0,this.prefix=t,this.name=n}return e.prototype.create=function(t){this.lastId++;var n=this.lastId,r=this.prefix+n,i=this.name+"["+n+"]",o=!1,u=function(){o||(t.apply(null,arguments),o=!0)};return this[n]=u,{number:n,id:r,name:i,callback:u}},e.prototype.remove=function(t){delete this[t.number]},e}(),s=new c("_pusher_script_","Pusher.ScriptReceivers"),f={VERSION:"7.6.0",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,cluster:"mt1",userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""},d=f,N=function(){function e(t){this.options=t,this.receivers=t.receivers||s,this.loading={}}return e.prototype.load=function(t,n,r){var i=this;if(i.loading[t]&&i.loading[t].length>0)i.loading[t].push(r);else{i.loading[t]=[r];var o=m.createScriptRequest(i.getPath(t,n)),u=i.receivers.create(function(p){if(i.receivers.remove(u),i.loading[t]){var _=i.loading[t];delete i.loading[t];for(var g=function(E){E||o.cleanup()},k=0;k<_.length;k++)_[k](p,g)}});o.send(u)}},e.prototype.getRoot=function(t){var n,r=m.getDocument().location.protocol;return t&&t.useTLS||r==="https:"?n=this.options.cdn_https:n=this.options.cdn_http,n.replace(/\/*$/,"")+"/"+this.options.version},e.prototype.getPath=function(t,n){return this.getRoot(n)+"/"+t+this.options.suffix+".js"},e}(),P=N,T=new c("_pusher_dependencies","Pusher.DependenciesReceivers"),S=new P({cdn_http:d.cdn_http,cdn_https:d.cdn_https,version:d.VERSION,suffix:d.dependency_suffix,receivers:T}),C={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}},x=function(e){var t="See:",n=C.urls[e];if(!n)return"";var r;return n.fullUrl?r=n.fullUrl:n.path&&(r=C.baseUrl+n.path),r?t+" "+r:""},b={buildLogSuffix:x},v;(function(e){e.UserAuthentication="user-authentication",e.ChannelAuthorization="channel-authorization"})(v||(v={}));var y=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),O=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),I=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),q=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),M=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),J=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),F=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),z=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),B=function(e){y(t,e);function t(n,r){var i=this.constructor,o=e.call(this,r)||this;return o.status=n,Object.setPrototypeOf(o,i.prototype),o}return t}(Error),ke=function(e,t,n,r,i){var o=m.createXHR();o.open("POST",n.endpoint,!0),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");for(var u in n.headers)o.setRequestHeader(u,n.headers[u]);if(n.headersProvider!=null){var p=n.headersProvider();for(var u in p)o.setRequestHeader(u,p[u])}return o.onreadystatechange=function(){if(o.readyState===4)if(o.status===200){var _=void 0,g=!1;try{_=JSON.parse(o.responseText),g=!0}catch{i(new B(200,"JSON returned from "+r.toString()+" endpoint was invalid, yet status code was 200. Data was: "+o.responseText),null)}g&&i(null,_)}else{var k="";switch(r){case v.UserAuthentication:k=b.buildLogSuffix("authenticationEndpoint");break;case v.ChannelAuthorization:k="Clients must be authorized to join private or presence channels. "+b.buildLogSuffix("authorizationEndpoint");break}i(new B(o.status,"Unable to retrieve auth string from "+r.toString()+" endpoint - "+("received status: "+o.status+" from "+n.endpoint+". "+k)),null)}},o.send(t),o},Se=ke;function Ce(e){return Ee(Oe(e))}for(var nt=String.fromCharCode,Z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Te={},ct=0,Pe=Z.length;ct>>6)+nt(128|t&63):nt(224|t>>>12&15)+nt(128|t>>>6&63)+nt(128|t&63)},Oe=function(e){return e.replace(/[^\x00-\x7F]/g,xe)},Ae=function(e){var t=[0,2,1][e.length%3],n=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),r=[Z.charAt(n>>>18),Z.charAt(n>>>12&63),t>=2?"=":Z.charAt(n>>>6&63),t>=1?"=":Z.charAt(n&63)];return r.join("")},Ee=window.btoa||function(e){return e.replace(/[\s\S]{1,3}/g,Ae)},Le=function(){function e(t,n,r,i){var o=this;this.clear=n,this.timer=t(function(){o.timer&&(o.timer=i(o.timer))},r)}return e.prototype.isRunning=function(){return this.timer!==null},e.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},e}(),jt=Le,Nt=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();function Re(e){window.clearTimeout(e)}function Ie(e){window.clearInterval(e)}var Q=function(e){Nt(t,e);function t(n,r){return e.call(this,setTimeout,Re,n,function(i){return r(),null})||this}return t}(jt),je=function(e){Nt(t,e);function t(n,r){return e.call(this,setInterval,Ie,n,function(i){return r(),i})||this}return t}(jt),Ne={now:function(){return Date.now?Date.now():new Date().valueOf()},defer:function(e){return new Q(0,e)},method:function(e){for(var t=[],n=1;n0)for(var i=0;i=1002&&e.code<=1004?"backoff":null:e.code===4e3?"tls_only":e.code<4100?"refused":e.code<4200?"backoff":e.code<4300?"retry":"refused"},getCloseError:function(e){return e.code!==1e3&&e.code!==1001?{type:"PusherError",data:{code:e.code,message:e.reason||e.message}}:null}},K=Vt,Cn=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Tn=function(e){Cn(t,e);function t(n,r){var i=e.call(this)||this;return i.id=n,i.transport=r,i.activityTimeout=r.activityTimeout,i.bindListeners(),i}return t.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},t.prototype.send=function(n){return this.transport.send(n)},t.prototype.send_event=function(n,r,i){var o={event:n,data:r};return i&&(o.channel=i),A.debug("Event sent",o),this.send(K.encodeMessage(o))},t.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},t.prototype.close=function(){this.transport.close()},t.prototype.bindListeners=function(){var n=this,r={message:function(o){var u;try{u=K.decodeMessage(o)}catch(p){n.emit("error",{type:"MessageParseError",error:p,data:o.data})}if(u!==void 0){switch(A.debug("Event recd",u),u.event){case"pusher:error":n.emit("error",{type:"PusherError",data:u.data});break;case"pusher:ping":n.emit("ping");break;case"pusher:pong":n.emit("pong");break}n.emit("message",u)}},activity:function(){n.emit("activity")},error:function(o){n.emit("error",o)},closed:function(o){i(),o&&o.code&&n.handleCloseEvent(o),n.transport=null,n.emit("closed")}},i=function(){W(r,function(o,u){n.transport.unbind(u,o)})};W(r,function(o,u){n.transport.bind(u,o)})},t.prototype.handleCloseEvent=function(n){var r=K.getCloseAction(n),i=K.getCloseError(n);i&&this.emit("error",i),r&&this.emit(r,{action:r,error:i})},t}(V),Pn=Tn,xn=function(){function e(t,n){this.transport=t,this.callback=n,this.bindListeners()}return e.prototype.close=function(){this.unbindListeners(),this.transport.close()},e.prototype.bindListeners=function(){var t=this;this.onMessage=function(n){t.unbindListeners();var r;try{r=K.processHandshake(n)}catch(i){t.finish("error",{error:i}),t.transport.close();return}r.action==="connected"?t.finish("connected",{connection:new Pn(r.id,t.transport),activityTimeout:r.activityTimeout}):(t.finish(r.action,{error:r.error}),t.transport.close())},this.onClosed=function(n){t.unbindListeners();var r=K.getCloseAction(n)||"backoff",i=K.getCloseError(n);t.finish(r,{error:i})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},e.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},e.prototype.finish=function(t,n){this.callback(U({transport:this.transport,action:t},n))},e}(),On=xn,An=function(){function e(t,n){this.timeline=t,this.options=n||{}}return e.prototype.send=function(t,n){this.timeline.isEmpty()||this.timeline.send(m.TimelineTransport.getAgent(this,t),n)},e}(),En=An,Ln=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Rn=function(e){Ln(t,e);function t(n,r){var i=e.call(this,function(o,u){A.debug("No callbacks on "+n+" for "+o)})||this;return i.name=n,i.pusher=r,i.subscribed=!1,i.subscriptionPending=!1,i.subscriptionCancelled=!1,i}return t.prototype.authorize=function(n,r){return r(null,{auth:""})},t.prototype.trigger=function(n,r){if(n.indexOf("client-")!==0)throw new w("Event '"+n+"' does not start with 'client-'");if(!this.subscribed){var i=b.buildLogSuffix("triggeringClientEvents");A.warn("Client event triggered before channel 'subscription_succeeded' event . "+i)}return this.pusher.send_event(n,r,this.name)},t.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},t.prototype.handleEvent=function(n){var r=n.event,i=n.data;if(r==="pusher_internal:subscription_succeeded")this.handleSubscriptionSucceededEvent(n);else if(r==="pusher_internal:subscription_count")this.handleSubscriptionCountEvent(n);else if(r.indexOf("pusher_internal:")!==0){var o={};this.emit(r,i,o)}},t.prototype.handleSubscriptionSucceededEvent=function(n){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",n.data)},t.prototype.handleSubscriptionCountEvent=function(n){n.data.subscription_count&&(this.subscriptionCount=n.data.subscription_count),this.emit("pusher:subscription_count",n.data)},t.prototype.subscribe=function(){var n=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,function(r,i){r?(n.subscriptionPending=!1,A.error(r.toString()),n.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:r.message},r instanceof B?{status:r.status}:{}))):n.pusher.send_event("pusher:subscribe",{auth:i.auth,channel_data:i.channel_data,channel:n.name})}))},t.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},t.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},t.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},t}(V),bt=Rn,In=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),jn=function(e){In(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.authorize=function(n,r){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:n},r)},t}(bt),mt=jn,Nn=function(){function e(){this.reset()}return e.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},e.prototype.each=function(t){var n=this;W(this.members,function(r,i){t(n.get(i))})},e.prototype.setMyID=function(t){this.myID=t},e.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},e.prototype.addMember=function(t){return this.get(t.user_id)===null&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},e.prototype.removeMember=function(t){var n=this.get(t.user_id);return n&&(delete this.members[t.user_id],this.count--),n},e.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},e}(),qn=Nn,Un=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Dn=function(e,t,n,r){function i(o){return o instanceof n?o:new n(function(u){u(o)})}return new(n||(n=Promise))(function(o,u){function p(k){try{g(r.next(k))}catch(E){u(E)}}function _(k){try{g(r.throw(k))}catch(E){u(E)}}function g(k){k.done?o(k.value):i(k.value).then(p,_)}g((r=r.apply(e,t||[])).next())})},Hn=function(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,u;return u={next:p(0),throw:p(1),return:p(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function p(g){return function(k){return _([g,k])}}function _(g){if(r)throw new TypeError("Generator is already executing.");for(;n;)try{if(r=1,i&&(o=g[0]&2?i.return:g[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,g[1])).done)return o;switch(i=0,o&&(g=[g[0]&2,o.value]),g[0]){case 0:case 1:o=g;break;case 4:return n.label++,{value:g[1],done:!1};case 5:n.label++,i=g[1],g=[0];continue;case 7:g=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(g[0]===6||g[0]===2)){n=0;continue}if(g[0]===3&&(!o||g[1]>o[0]&&g[1]0&&this.emit("connecting_in",Math.round(n/1e3)),this.retryTimer=new Q(n||0,function(){r.disconnectInternally(),r.connect()})},t.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},t.prototype.setUnavailableTimer=function(){var n=this;this.unavailableTimer=new Q(this.options.unavailableTimeout,function(){n.updateState("unavailable")})},t.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},t.prototype.sendActivityCheck=function(){var n=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new Q(this.options.pongTimeout,function(){n.timeline.error({pong_timed_out:n.options.pongTimeout}),n.retryIn(0)})},t.prototype.resetActivityCheck=function(){var n=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new Q(this.activityTimeout,function(){n.sendActivityCheck()}))},t.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},t.prototype.buildConnectionCallbacks=function(n){var r=this;return U({},n,{message:function(i){r.resetActivityCheck(),r.emit("message",i)},ping:function(){r.send_event("pusher:pong",{})},activity:function(){r.resetActivityCheck()},error:function(i){r.emit("error",i)},closed:function(){r.abandonConnection(),r.shouldRetry()&&r.retryIn(1e3)}})},t.prototype.buildHandshakeCallbacks=function(n){var r=this;return U({},n,{connected:function(i){r.activityTimeout=Math.min(r.options.activityTimeout,i.activityTimeout,i.connection.activityTimeout||1/0),r.clearUnavailableTimer(),r.setConnection(i.connection),r.socket_id=r.connection.id,r.updateState("connected",{socket_id:r.socket_id})}})},t.prototype.buildErrorCallbacks=function(){var n=this,r=function(i){return function(o){o.error&&n.emit("error",{type:"WebSocketError",error:o.error}),i(o)}};return{tls_only:r(function(){n.usingTLS=!0,n.updateStrategy(),n.retryIn(0)}),refused:r(function(){n.disconnect()}),backoff:r(function(){n.retryIn(1e3)}),retry:r(function(){n.retryIn(0)})}},t.prototype.setConnection=function(n){this.connection=n;for(var r in this.connectionCallbacks)this.connection.bind(r,this.connectionCallbacks[r]);this.resetActivityCheck()},t.prototype.abandonConnection=function(){if(this.connection){this.stopActivityCheck();for(var n in this.connectionCallbacks)this.connection.unbind(n,this.connectionCallbacks[n]);var r=this.connection;return this.connection=null,r}},t.prototype.updateState=function(n,r){var i=this.state;if(this.state=n,i!==n){var o=n;o==="connected"&&(o+=" with new socket ID "+r.socket_id),A.debug("State changed",i+" -> "+o),this.timeline.info({state:n,params:r}),this.emit("state_change",{previous:i,current:n}),this.emit(n,r)}},t.prototype.shouldRetry=function(){return this.state==="connecting"||this.state==="connected"},t}(V),Gn=Vn,Qn=function(){function e(){this.channels={}}return e.prototype.add=function(t,n){return this.channels[t]||(this.channels[t]=Yn(t,n)),this.channels[t]},e.prototype.all=function(){return Ue(this.channels)},e.prototype.find=function(t){return this.channels[t]},e.prototype.remove=function(t){var n=this.channels[t];return delete this.channels[t],n},e.prototype.disconnect=function(){W(this.channels,function(t){t.disconnect()})},e}(),Kn=Qn;function Yn(e,t){if(e.indexOf("private-encrypted-")===0){if(t.config.nacl)return G.createEncryptedChannel(e,t,t.config.nacl);var n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",r=b.buildLogSuffix("encryptedChannelSupport");throw new J(n+". "+r)}else{if(e.indexOf("private-")===0)return G.createPrivateChannel(e,t);if(e.indexOf("presence-")===0)return G.createPresenceChannel(e,t);if(e.indexOf("#")===0)throw new O('Cannot create a channel with name "'+e+'".');return G.createChannel(e,t)}}var $n={createChannels:function(){return new Kn},createConnectionManager:function(e,t){return new Gn(e,t)},createChannel:function(e,t){return new bt(e,t)},createPrivateChannel:function(e,t){return new mt(e,t)},createPresenceChannel:function(e,t){return new zn(e,t)},createEncryptedChannel:function(e,t,n){return new Jn(e,t,n)},createTimelineSender:function(e,t){return new En(e,t)},createHandshake:function(e,t){return new On(e,t)},createAssistantToTheTransportManager:function(e,t,n){return new Sn(e,t,n)}},G=$n,Zn=function(){function e(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return e.prototype.getAssistant=function(t){return G.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},e.prototype.isAlive=function(){return this.livesLeft>0},e.prototype.reportDeath=function(){this.livesLeft-=1},e}(),Gt=Zn,tr=function(){function e(t,n){this.strategies=t,this.loop=!!n.loop,this.failFast=!!n.failFast,this.timeout=n.timeout,this.timeoutLimit=n.timeoutLimit}return e.prototype.isSupported=function(){return zt(this.strategies,j.method("isSupported"))},e.prototype.connect=function(t,n){var r=this,i=this.strategies,o=0,u=this.timeout,p=null,_=function(g,k){k?n(null,k):(o=o+1,r.loop&&(o=o%i.length),o0&&(o=new Q(r.timeout,function(){u.abort(),i(!0)})),u=t.connect(n,function(p,_){p&&o&&o.isRunning()&&!r.failFast||(o&&o.ensureAborted(),i(p,_))}),{abort:function(){o&&o.ensureAborted(),u.abort()},forceMinPriority:function(p){u.forceMinPriority(p)}}},e}(),Y=tr,er=function(){function e(t){this.strategies=t}return e.prototype.isSupported=function(){return zt(this.strategies,j.method("isSupported"))},e.prototype.connect=function(t,n){return nr(this.strategies,t,function(r,i){return function(o,u){if(i[r].error=o,o){rr(i)&&n(!0);return}rt(i,function(p){p.forceMinPriority(u.transport.priority)}),n(null,u)}})},e}(),kt=er;function nr(e,t,n){var r=Dt(e,function(i,o,u,p){return i.connect(t,n(o,p))});return{abort:function(){rt(r,ir)},forceMinPriority:function(i){rt(r,function(o){o.forceMinPriority(i)})}}}function rr(e){return Me(e,function(t){return!!t.error})}function ir(e){!e.error&&!e.aborted&&(e.abort(),e.aborted=!0)}var or=function(){function e(t,n,r){this.strategy=t,this.transports=n,this.ttl=r.ttl||1800*1e3,this.usingTLS=r.useTLS,this.timeline=r.timeline}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.usingTLS,i=ar(r),o=[this.strategy];if(i&&i.timestamp+this.ttl>=j.now()){var u=this.transports[i.transport];u&&(this.timeline.info({cached:!0,transport:i.transport,latency:i.latency}),o.push(new Y([u],{timeout:i.latency*2+1e3,failFast:!0})))}var p=j.now(),_=o.pop().connect(t,function g(k,E){k?(Qt(r),o.length>0?(p=j.now(),_=o.pop().connect(t,g)):n(k)):(cr(r,E.transport.name,j.now()-p),n(null,E))});return{abort:function(){_.abort()},forceMinPriority:function(g){t=g,_&&_.forceMinPriority(g)}}},e}(),sr=or;function St(e){return"pusherTransport"+(e?"TLS":"NonTLS")}function ar(e){var t=m.getLocalStorage();if(t)try{var n=t[St(e)];if(n)return JSON.parse(n)}catch{Qt(e)}return null}function cr(e,t,n){var r=m.getLocalStorage();if(r)try{r[St(e)]=ut({timestamp:j.now(),transport:t,latency:n})}catch{}}function Qt(e){var t=m.getLocalStorage();if(t)try{delete t[St(e)]}catch{}}var ur=function(){function e(t,n){var r=n.delay;this.strategy=t,this.options={delay:r}}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.strategy,i,o=new Q(this.options.delay,function(){i=r.connect(t,n)});return{abort:function(){o.ensureAborted(),i&&i.abort()},forceMinPriority:function(u){t=u,i&&i.forceMinPriority(u)}}},e}(),lt=ur,hr=function(){function e(t,n,r){this.test=t,this.trueBranch=n,this.falseBranch=r}return e.prototype.isSupported=function(){var t=this.test()?this.trueBranch:this.falseBranch;return t.isSupported()},e.prototype.connect=function(t,n){var r=this.test()?this.trueBranch:this.falseBranch;return r.connect(t,n)},e}(),it=hr,lr=function(){function e(t){this.strategy=t}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.strategy.connect(t,function(i,o){o&&r.abort(),n(i,o)});return r},e}(),fr=lr;function ot(e){return function(){return e.isSupported()}}var pr=function(e,t,n){var r={};function i(ce,mi,wi,ki,Si){var ue=n(e,ce,mi,wi,ki,Si);return r[ce]=ue,ue}var o=Object.assign({},t,{hostNonTLS:e.wsHost+":"+e.wsPort,hostTLS:e.wsHost+":"+e.wssPort,httpPath:e.wsPath}),u=Object.assign({},o,{useTLS:!0}),p=Object.assign({},t,{hostNonTLS:e.httpHost+":"+e.httpPort,hostTLS:e.httpHost+":"+e.httpsPort,httpPath:e.httpPath}),_={loop:!0,timeout:15e3,timeoutLimit:6e4},g=new Gt({lives:2,minPingDelay:1e4,maxPingDelay:e.activityTimeout}),k=new Gt({lives:2,minPingDelay:1e4,maxPingDelay:e.activityTimeout}),E=i("ws","ws",3,o,g),X=i("wss","ws",3,u,g),vi=i("sockjs","sockjs",1,p),ne=i("xhr_streaming","xhr_streaming",1,p,k),yi=i("xdr_streaming","xdr_streaming",1,p,k),re=i("xhr_polling","xhr_polling",1,p),gi=i("xdr_polling","xdr_polling",1,p),ie=new Y([E],_),_i=new Y([X],_),bi=new Y([vi],_),oe=new Y([new it(ot(ne),ne,yi)],_),se=new Y([new it(ot(re),re,gi)],_),ae=new Y([new it(ot(oe),new kt([oe,new lt(se,{delay:4e3})]),se)],_),xt=new it(ot(ae),ae,bi),Ot;return t.useTLS?Ot=new kt([ie,new lt(xt,{delay:2e3})]):Ot=new kt([ie,new lt(_i,{delay:2e3}),new lt(xt,{delay:5e3})]),new sr(new fr(new it(ot(E),Ot,xt)),r,{ttl:18e5,timeline:t.timeline,useTLS:t.useTLS})},dr=pr,vr=function(){var e=this;e.timeline.info(e.buildTimelineMessage({transport:e.name+(e.options.useTLS?"s":"")})),e.hooks.isInitialized()?e.changeState("initialized"):e.hooks.file?(e.changeState("initializing"),S.load(e.hooks.file,{useTLS:e.options.useTLS},function(t,n){e.hooks.isInitialized()?(e.changeState("initialized"),n(!0)):(t&&e.onError(t),e.onClose(),n(!1))})):e.onClose()},yr={getRequest:function(e){var t=new window.XDomainRequest;return t.ontimeout=function(){e.emit("error",new I),e.close()},t.onerror=function(n){e.emit("error",n),e.close()},t.onprogress=function(){t.responseText&&t.responseText.length>0&&e.onChunk(200,t.responseText)},t.onload=function(){t.responseText&&t.responseText.length>0&&e.onChunk(200,t.responseText),e.emit("finished",200),e.close()},t},abortRequest:function(e){e.ontimeout=e.onerror=e.onprogress=e.onload=null,e.abort()}},gr=yr,_r=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),br=256*1024,mr=function(e){_r(t,e);function t(n,r,i){var o=e.call(this)||this;return o.hooks=n,o.method=r,o.url=i,o}return t.prototype.start=function(n){var r=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){r.close()},m.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(n)},t.prototype.close=function(){this.unloader&&(m.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},t.prototype.onChunk=function(n,r){for(;;){var i=this.advanceBuffer(r);if(i)this.emit("chunk",{status:n,data:i});else break}this.isBufferTooLong(r)&&this.emit("buffer_too_long")},t.prototype.advanceBuffer=function(n){var r=n.slice(this.position),i=r.indexOf(` +`);return i!==-1?(this.position+=i+1,r.slice(0,i)):null},t.prototype.isBufferTooLong=function(n){return this.position===n.length&&n.length>br},t}(V),wr=mr,Ct;(function(e){e[e.CONNECTING=0]="CONNECTING",e[e.OPEN=1]="OPEN",e[e.CLOSED=3]="CLOSED"})(Ct||(Ct={}));var $=Ct,kr=1,Sr=function(){function e(t,n){this.hooks=t,this.session=Yt(1e3)+"/"+xr(8),this.location=Cr(n),this.readyState=$.CONNECTING,this.openStream()}return e.prototype.send=function(t){return this.sendRaw(JSON.stringify([t]))},e.prototype.ping=function(){this.hooks.sendHeartbeat(this)},e.prototype.close=function(t,n){this.onClose(t,n,!0)},e.prototype.sendRaw=function(t){if(this.readyState===$.OPEN)try{return m.createSocketRequest("POST",Kt(Tr(this.location,this.session))).start(t),!0}catch{return!1}else return!1},e.prototype.reconnect=function(){this.closeStream(),this.openStream()},e.prototype.onClose=function(t,n,r){this.closeStream(),this.readyState=$.CLOSED,this.onclose&&this.onclose({code:t,reason:n,wasClean:r})},e.prototype.onChunk=function(t){if(t.status===200){this.readyState===$.OPEN&&this.onActivity();var n,r=t.data.slice(0,1);switch(r){case"o":n=JSON.parse(t.data.slice(1)||"{}"),this.onOpen(n);break;case"a":n=JSON.parse(t.data.slice(1)||"[]");for(var i=0;i0&&e.onChunk(n.status,n.responseText);break;case 4:n.responseText&&n.responseText.length>0&&e.onChunk(n.status,n.responseText),e.emit("finished",n.status),e.close();break}},n},abortRequest:function(e){e.onreadystatechange=null,e.abort()}},jr=Ir,Nr={createStreamingSocket:function(e){return this.createSocket(Er,e)},createPollingSocket:function(e){return this.createSocket(Rr,e)},createSocket:function(e,t){return new Or(e,t)},createXHR:function(e,t){return this.createRequest(jr,e,t)},createRequest:function(e,t,n){return new wr(e,t,n)}},$t=Nr;$t.createXDR=function(e,t){return this.createRequest(gr,e,t)};var qr=$t,Ur={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:s,DependenciesReceivers:T,getDefaultStrategy:dr,Transports:_n,transportConnectionInitializer:vr,HTTPFactory:qr,TimelineTransport:Ze,getXHRAPI:function(){return window.XMLHttpRequest},getWebSocketAPI:function(){return window.WebSocket||window.MozWebSocket},setup:function(e){var t=this;window.Pusher=e;var n=function(){t.onDocumentBody(e.ready)};window.JSON?n():S.load("json2",{},n)},getDocument:function(){return document},getProtocol:function(){return this.getDocument().location.protocol},getAuthorizers:function(){return{ajax:Se,jsonp:We}},onDocumentBody:function(e){var t=this;document.body?e():setTimeout(function(){t.onDocumentBody(e)},0)},createJSONPRequest:function(e,t){return new Ke(e,t)},createScriptRequest:function(e){return new Ge(e)},getLocalStorage:function(){try{return window.localStorage}catch{return}},createXHR:function(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest:function(){var e=this.getXHRAPI();return new e},createMicrosoftXHR:function(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork:function(){return wn},createWebSocket:function(e){var t=this.getWebSocketAPI();return new t(e)},createSocketRequest:function(e,t){if(this.isXHRSupported())return this.HTTPFactory.createXHR(e,t);if(this.isXDRSupported(t.indexOf("https:")===0))return this.HTTPFactory.createXDR(e,t);throw"Cross-origin HTTP requests are not supported"},isXHRSupported:function(){var e=this.getXHRAPI();return!!e&&new e().withCredentials!==void 0},isXDRSupported:function(e){var t=e?"https:":"http:",n=this.getProtocol();return!!window.XDomainRequest&&n===t},addUnloadListener:function(e){window.addEventListener!==void 0?window.addEventListener("unload",e,!1):window.attachEvent!==void 0&&window.attachEvent("onunload",e)},removeUnloadListener:function(e){window.addEventListener!==void 0?window.removeEventListener("unload",e,!1):window.detachEvent!==void 0&&window.detachEvent("onunload",e)},randomInt:function(e){var t=function(){var n=window.crypto||window.msCrypto,r=n.getRandomValues(new Uint32Array(1))[0];return r/Math.pow(2,32)};return Math.floor(t()*e)}},m=Ur,Tt;(function(e){e[e.ERROR=3]="ERROR",e[e.INFO=6]="INFO",e[e.DEBUG=7]="DEBUG"})(Tt||(Tt={}));var ft=Tt,Dr=function(){function e(t,n,r){this.key=t,this.session=n,this.events=[],this.options=r||{},this.sent=0,this.uniqueID=0}return e.prototype.log=function(t,n){t<=this.options.level&&(this.events.push(U({},n,{timestamp:j.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},e.prototype.error=function(t){this.log(ft.ERROR,t)},e.prototype.info=function(t){this.log(ft.INFO,t)},e.prototype.debug=function(t){this.log(ft.DEBUG,t)},e.prototype.isEmpty=function(){return this.events.length===0},e.prototype.send=function(t,n){var r=this,i=U({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(i,function(o,u){o||r.sent++,n&&n(o,u)}),!0},e.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},e}(),Hr=Dr,Mr=function(){function e(t,n,r,i){this.name=t,this.priority=n,this.transport=r,this.options=i||{}}return e.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},e.prototype.connect=function(t,n){var r=this;if(this.isSupported()){if(this.priority"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ii(l){if(l===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return l}function ji(l,h){if(h&&(typeof h=="object"||typeof h=="function"))return h;if(h!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ii(l)}function H(l){var h=Ri();return function(){var c=pt(l),s;if(h){var f=pt(this).constructor;s=Reflect.construct(c,arguments,f)}else s=c.apply(this,arguments);return ji(this,s)}}var Et=function(){function l(){L(this,l)}return R(l,[{key:"listenForWhisper",value:function(a,c){return this.listen(".client-"+a,c)}},{key:"notification",value:function(a){return this.listen(".Illuminate\\Notifications\\Events\\BroadcastNotificationCreated",a)}},{key:"stopListeningForWhisper",value:function(a,c){return this.stopListening(".client-"+a,c)}}]),l}(),de=function(){function l(h){L(this,l),this.namespace=h}return R(l,[{key:"format",value:function(a){return[".","\\"].includes(a.charAt(0))?a.substring(1):(this.namespace&&(a=this.namespace+"."+a),a.replace(/\./g,"\\"))}},{key:"setNamespace",value:function(a){this.namespace=a}}]),l}();function Ni(l){try{new l}catch(h){if(h.message.includes("is not a constructor"))return!1}return!0}var Lt=function(l){D(a,l);var h=H(a);function a(c,s,f){var d;return L(this,a),d=h.call(this),d.name=s,d.pusher=c,d.options=f,d.eventFormatter=new de(d.options.namespace),d.subscribe(),d}return R(a,[{key:"subscribe",value:function(){this.subscription=this.pusher.subscribe(this.name)}},{key:"unsubscribe",value:function(){this.pusher.unsubscribe(this.name)}},{key:"listen",value:function(s,f){return this.on(this.eventFormatter.format(s),f),this}},{key:"listenToAll",value:function(s){var f=this;return this.subscription.bind_global(function(d,N){if(!d.startsWith("pusher:")){var P=f.options.namespace.replace(/\./g,"\\"),T=d.startsWith(P)?d.substring(P.length+1):"."+d;s(T,N)}}),this}},{key:"stopListening",value:function(s,f){return f?this.subscription.unbind(this.eventFormatter.format(s),f):this.subscription.unbind(this.eventFormatter.format(s)),this}},{key:"stopListeningToAll",value:function(s){return s?this.subscription.unbind_global(s):this.subscription.unbind_global(),this}},{key:"subscribed",value:function(s){return this.on("pusher:subscription_succeeded",function(){s()}),this}},{key:"error",value:function(s){return this.on("pusher:subscription_error",function(f){s(f)}),this}},{key:"on",value:function(s,f){return this.subscription.bind(s,f),this}}]),a}(Et),ve=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this.pusher.channels.channels[this.name].trigger("client-".concat(s),f),this}}]),a}(Lt),qi=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this.pusher.channels.channels[this.name].trigger("client-".concat(s),f),this}}]),a}(Lt),Ui=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"here",value:function(s){return this.on("pusher:subscription_succeeded",function(f){s(Object.keys(f.members).map(function(d){return f.members[d]}))}),this}},{key:"joining",value:function(s){return this.on("pusher:member_added",function(f){s(f.info)}),this}},{key:"whisper",value:function(s,f){return this.pusher.channels.channels[this.name].trigger("client-".concat(s),f),this}},{key:"leaving",value:function(s){return this.on("pusher:member_removed",function(f){s(f.info)}),this}}]),a}(ve),ye=function(l){D(a,l);var h=H(a);function a(c,s,f){var d;return L(this,a),d=h.call(this),d.events={},d.listeners={},d.name=s,d.socket=c,d.options=f,d.eventFormatter=new de(d.options.namespace),d.subscribe(),d}return R(a,[{key:"subscribe",value:function(){this.socket.emit("subscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"unsubscribe",value:function(){this.unbind(),this.socket.emit("unsubscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"listen",value:function(s,f){return this.on(this.eventFormatter.format(s),f),this}},{key:"stopListening",value:function(s,f){return this.unbindEvent(this.eventFormatter.format(s),f),this}},{key:"subscribed",value:function(s){return this.on("connect",function(f){s(f)}),this}},{key:"error",value:function(s){return this}},{key:"on",value:function(s,f){var d=this;return this.listeners[s]=this.listeners[s]||[],this.events[s]||(this.events[s]=function(N,P){d.name===N&&d.listeners[s]&&d.listeners[s].forEach(function(T){return T(P)})},this.socket.on(s,this.events[s])),this.listeners[s].push(f),this}},{key:"unbind",value:function(){var s=this;Object.keys(this.events).forEach(function(f){s.unbindEvent(f)})}},{key:"unbindEvent",value:function(s,f){this.listeners[s]=this.listeners[s]||[],f&&(this.listeners[s]=this.listeners[s].filter(function(d){return d!==f})),(!f||this.listeners[s].length===0)&&(this.events[s]&&(this.socket.removeListener(s,this.events[s]),delete this.events[s]),delete this.listeners[s])}}]),a}(Et),ge=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(s),data:f}),this}}]),a}(ye),Di=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"here",value:function(s){return this.on("presence:subscribed",function(f){s(f.map(function(d){return d.user_info}))}),this}},{key:"joining",value:function(s){return this.on("presence:joining",function(f){return s(f.user_info)}),this}},{key:"whisper",value:function(s,f){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(s),data:f}),this}},{key:"leaving",value:function(s){return this.on("presence:leaving",function(f){return s(f.user_info)}),this}}]),a}(ge),dt=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"subscribe",value:function(){}},{key:"unsubscribe",value:function(){}},{key:"listen",value:function(s,f){return this}},{key:"listenToAll",value:function(s){return this}},{key:"stopListening",value:function(s,f){return this}},{key:"subscribed",value:function(s){return this}},{key:"error",value:function(s){return this}},{key:"on",value:function(s,f){return this}}]),a}(Et),_e=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this}}]),a}(dt),Hi=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this}}]),a}(dt),Mi=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"here",value:function(s){return this}},{key:"joining",value:function(s){return this}},{key:"whisper",value:function(s,f){return this}},{key:"leaving",value:function(s){return this}}]),a}(_e),Rt=function(){function l(h){L(this,l),this._defaultOptions={auth:{headers:{}},authEndpoint:"/broadcasting/auth",userAuthentication:{endpoint:"/broadcasting/user-auth",headers:{}},broadcaster:"pusher",csrfToken:null,bearerToken:null,host:null,key:null,namespace:"App.Events"},this.setOptions(h),this.connect()}return R(l,[{key:"setOptions",value:function(a){this.options=at(this._defaultOptions,a);var c=this.csrfToken();return c&&(this.options.auth.headers["X-CSRF-TOKEN"]=c,this.options.userAuthentication.headers["X-CSRF-TOKEN"]=c),c=this.options.bearerToken,c&&(this.options.auth.headers.Authorization="Bearer "+c,this.options.userAuthentication.headers.Authorization="Bearer "+c),a}},{key:"csrfToken",value:function(){var a;return typeof window<"u"&&window.Laravel&&window.Laravel.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<"u"&&typeof document.querySelector=="function"&&(a=document.querySelector('meta[name="csrf-token"]'))?a.getAttribute("content"):null}}]),l}(),fe=function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:"connect",value:function(){typeof this.options.client<"u"?this.pusher=this.options.client:this.options.Pusher?this.pusher=new this.options.Pusher(this.options.key,this.options):this.pusher=new Pusher(this.options.key,this.options)}},{key:"signin",value:function(){this.pusher.signin()}},{key:"listen",value:function(s,f,d){return this.channel(s).listen(f,d)}},{key:"channel",value:function(s){return this.channels[s]||(this.channels[s]=new Lt(this.pusher,s,this.options)),this.channels[s]}},{key:"privateChannel",value:function(s){return this.channels["private-"+s]||(this.channels["private-"+s]=new ve(this.pusher,"private-"+s,this.options)),this.channels["private-"+s]}},{key:"encryptedPrivateChannel",value:function(s){return this.channels["private-encrypted-"+s]||(this.channels["private-encrypted-"+s]=new qi(this.pusher,"private-encrypted-"+s,this.options)),this.channels["private-encrypted-"+s]}},{key:"presenceChannel",value:function(s){return this.channels["presence-"+s]||(this.channels["presence-"+s]=new Ui(this.pusher,"presence-"+s,this.options)),this.channels["presence-"+s]}},{key:"leave",value:function(s){var f=this,d=[s,"private-"+s,"private-encrypted-"+s,"presence-"+s];d.forEach(function(N,P){f.leaveChannel(N)})}},{key:"leaveChannel",value:function(s){this.channels[s]&&(this.channels[s].unsubscribe(),delete this.channels[s])}},{key:"socketId",value:function(){return this.pusher.connection.socket_id}},{key:"disconnect",value:function(){this.pusher.disconnect()}}]),a}(Rt),pe=function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:"connect",value:function(){var s=this,f=this.getSocketIO();return this.socket=f(this.options.host,this.options),this.socket.on("reconnect",function(){Object.values(s.channels).forEach(function(d){d.subscribe()})}),this.socket}},{key:"getSocketIO",value:function(){if(typeof this.options.client<"u")return this.options.client;if(typeof io<"u")return io;throw new Error("Socket.io client not found. Should be globally available or passed via options.client")}},{key:"listen",value:function(s,f,d){return this.channel(s).listen(f,d)}},{key:"channel",value:function(s){return this.channels[s]||(this.channels[s]=new ye(this.socket,s,this.options)),this.channels[s]}},{key:"privateChannel",value:function(s){return this.channels["private-"+s]||(this.channels["private-"+s]=new ge(this.socket,"private-"+s,this.options)),this.channels["private-"+s]}},{key:"presenceChannel",value:function(s){return this.channels["presence-"+s]||(this.channels["presence-"+s]=new Di(this.socket,"presence-"+s,this.options)),this.channels["presence-"+s]}},{key:"leave",value:function(s){var f=this,d=[s,"private-"+s,"presence-"+s];d.forEach(function(N){f.leaveChannel(N)})}},{key:"leaveChannel",value:function(s){this.channels[s]&&(this.channels[s].unsubscribe(),delete this.channels[s])}},{key:"socketId",value:function(){return this.socket.id}},{key:"disconnect",value:function(){this.socket.disconnect()}}]),a}(Rt),zi=function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:"connect",value:function(){}},{key:"listen",value:function(s,f,d){return new dt}},{key:"channel",value:function(s){return new dt}},{key:"privateChannel",value:function(s){return new _e}},{key:"encryptedPrivateChannel",value:function(s){return new Hi}},{key:"presenceChannel",value:function(s){return new Mi}},{key:"leave",value:function(s){}},{key:"leaveChannel",value:function(s){}},{key:"socketId",value:function(){return"fake-socket-id"}},{key:"disconnect",value:function(){}}]),a}(Rt),be=function(){function l(h){L(this,l),this.options=h,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}return R(l,[{key:"channel",value:function(a){return this.connector.channel(a)}},{key:"connect",value:function(){if(this.options.broadcaster=="reverb")this.connector=new fe(at(at({},this.options),{cluster:""}));else if(this.options.broadcaster=="pusher")this.connector=new fe(this.options);else if(this.options.broadcaster=="socket.io")this.connector=new pe(this.options);else if(this.options.broadcaster=="null")this.connector=new zi(this.options);else if(typeof this.options.broadcaster=="function"&&Ni(this.options.broadcaster))this.connector=new this.options.broadcaster(this.options);else throw new Error("Broadcaster ".concat(st(this.options.broadcaster)," ").concat(this.options.broadcaster," is not supported."))}},{key:"disconnect",value:function(){this.connector.disconnect()}},{key:"join",value:function(a){return this.connector.presenceChannel(a)}},{key:"leave",value:function(a){this.connector.leave(a)}},{key:"leaveChannel",value:function(a){this.connector.leaveChannel(a)}},{key:"leaveAllChannels",value:function(){for(var a in this.connector.channels)this.leaveChannel(a)}},{key:"listen",value:function(a,c,s){return this.connector.listen(a,c,s)}},{key:"private",value:function(a){return this.connector.privateChannel(a)}},{key:"encryptedPrivate",value:function(a){if(this.connector instanceof pe)throw new Error("Broadcaster ".concat(st(this.options.broadcaster)," ").concat(this.options.broadcaster," does not support encrypted private channels."));return this.connector.encryptedPrivateChannel(a)}},{key:"socketId",value:function(){return this.connector.socketId()}},{key:"registerInterceptors",value:function(){typeof Vue=="function"&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios=="function"&&this.registerAxiosRequestInterceptor(),typeof jQuery=="function"&&this.registerjQueryAjaxSetup(),(typeof Turbo>"u"?"undefined":st(Turbo))==="object"&&this.registerTurboRequestInterceptor()}},{key:"registerVueRequestInterceptor",value:function(){var a=this;Vue.http.interceptors.push(function(c,s){a.socketId()&&c.headers.set("X-Socket-ID",a.socketId()),s()})}},{key:"registerAxiosRequestInterceptor",value:function(){var a=this;axios.interceptors.request.use(function(c){return a.socketId()&&(c.headers["X-Socket-Id"]=a.socketId()),c})}},{key:"registerjQueryAjaxSetup",value:function(){var a=this;typeof jQuery.ajax<"u"&&jQuery.ajaxPrefilter(function(c,s,f){a.socketId()&&f.setRequestHeader("X-Socket-Id",a.socketId())})}},{key:"registerTurboRequestInterceptor",value:function(){var a=this;document.addEventListener("turbo:before-fetch-request",function(c){c.detail.fetchOptions.headers["X-Socket-Id"]=a.socketId()})}}]),l}();var we=Li(me(),1);window.EchoFactory=be;window.Pusher=we.default;})(); +/*! Bundled license information: + +pusher-js/dist/web/pusher.js: + (*! + * Pusher JavaScript Library v7.6.0 + * https://pusher.com/ + * + * Copyright 2020, Pusher + * Released under the MIT licence. + *) +*/ diff --git a/public/js/filament/forms/components/color-picker.js b/public/js/filament/forms/components/color-picker.js new file mode 100644 index 000000000..6d807128c --- /dev/null +++ b/public/js/filament/forms/components/color-picker.js @@ -0,0 +1 @@ +var c=(e,t=0,r=1)=>e>r?r:eMath.round(r*e)/r;var nt={grad:360/400,turn:360,rad:360/(Math.PI*2)},F=e=>G(v(e)),v=e=>(e[0]==="#"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?n(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?n(parseInt(e.substring(6,8),16)/255,2):1}),at=(e,t="deg")=>Number(e)*(nt[t]||1),it=e=>{let r=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return r?lt({h:at(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:r[5]===void 0?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},J=it,lt=({h:e,s:t,l:r,a:o})=>(t*=(r<50?r:100-r)/100,{h:e,s:t>0?2*t/(r+t)*100:0,v:r+t,a:o}),X=e=>ct(A(e)),Y=({h:e,s:t,v:r,a:o})=>{let s=(200-t)*r/100;return{h:n(e),s:n(s>0&&s<200?t*r/100/(s<=100?s:200-s)*100:0),l:n(s/2),a:n(o,2)}};var d=e=>{let{h:t,s:r,l:o}=Y(e);return`hsl(${t}, ${r}%, ${o}%)`},$=e=>{let{h:t,s:r,l:o,a:s}=Y(e);return`hsla(${t}, ${r}%, ${o}%, ${s})`},A=({h:e,s:t,v:r,a:o})=>{e=e/360*6,t=t/100,r=r/100;let s=Math.floor(e),a=r*(1-t),i=r*(1-(e-s)*t),l=r*(1-(1-e+s)*t),q=s%6;return{r:n([r,i,a,a,l,r][q]*255),g:n([l,r,r,i,a,a][q]*255),b:n([a,a,l,r,r,i][q]*255),a:n(o,2)}},B=e=>{let{r:t,g:r,b:o}=A(e);return`rgb(${t}, ${r}, ${o})`},D=e=>{let{r:t,g:r,b:o,a:s}=A(e);return`rgba(${t}, ${r}, ${o}, ${s})`};var I=e=>{let r=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return r?G({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:r[7]===void 0?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},U=I,b=e=>{let t=e.toString(16);return t.length<2?"0"+t:t},ct=({r:e,g:t,b:r,a:o})=>{let s=o<1?b(n(o*255)):"";return"#"+b(e)+b(t)+b(r)+s},G=({r:e,g:t,b:r,a:o})=>{let s=Math.max(e,t,r),a=s-Math.min(e,t,r),i=a?s===e?(t-r)/a:s===t?2+(r-e)/a:4+(e-t)/a:0;return{h:n(60*(i<0?i+6:i)),s:n(s?a/s*100:0),v:n(s/255*100),a:o}};var L=(e,t)=>{if(e===t)return!0;for(let r in e)if(e[r]!==t[r])return!1;return!0},h=(e,t)=>e.replace(/\s/g,"")===t.replace(/\s/g,""),K=(e,t)=>e.toLowerCase()===t.toLowerCase()?!0:L(v(e),v(t));var Q={},H=e=>{let t=Q[e];return t||(t=document.createElement("template"),t.innerHTML=e,Q[e]=t),t},f=(e,t,r)=>{e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:r}))};var m=!1,O=e=>"touches"in e,pt=e=>m&&!O(e)?!1:(m||(m=O(e)),!0),W=(e,t)=>{let r=O(t)?t.touches[0]:t,o=e.el.getBoundingClientRect();f(e.el,"move",e.getMove({x:c((r.pageX-(o.left+window.pageXOffset))/o.width),y:c((r.pageY-(o.top+window.pageYOffset))/o.height)}))},ut=(e,t)=>{let r=t.keyCode;r>40||e.xy&&r<37||r<33||(t.preventDefault(),f(e.el,"move",e.getMove({x:r===39?.01:r===37?-.01:r===34?.05:r===33?-.05:r===35?1:r===36?-1:0,y:r===40?.01:r===38?-.01:0},!0)))},u=class{constructor(t,r,o,s){let a=H(`
`);t.appendChild(a.content.cloneNode(!0));let i=t.querySelector(`[part=${r}]`);i.addEventListener("mousedown",this),i.addEventListener("touchstart",this),i.addEventListener("keydown",this),this.el=i,this.xy=s,this.nodes=[i.firstChild,i]}set dragging(t){let r=t?document.addEventListener:document.removeEventListener;r(m?"touchmove":"mousemove",this),r(m?"touchend":"mouseup",this)}handleEvent(t){switch(t.type){case"mousedown":case"touchstart":if(t.preventDefault(),!pt(t)||!m&&t.button!=0)return;this.el.focus(),W(this,t),this.dragging=!0;break;case"mousemove":case"touchmove":t.preventDefault(),W(this,t);break;case"mouseup":case"touchend":this.dragging=!1;break;case"keydown":ut(this,t);break}}style(t){t.forEach((r,o)=>{for(let s in r)this.nodes[o].style.setProperty(s,r[s])})}};var S=class extends u{constructor(t){super(t,"hue",'aria-label="Hue" aria-valuemin="0" aria-valuemax="360"',!1)}update({h:t}){this.h=t,this.style([{left:`${t/360*100}%`,color:d({h:t,s:100,v:100,a:1})}]),this.el.setAttribute("aria-valuenow",`${n(t)}`)}getMove(t,r){return{h:r?c(this.h+t.x*360,0,360):360*t.x}}};var T=class extends u{constructor(t){super(t,"saturation",'aria-label="Color"',!0)}update(t){this.hsva=t,this.style([{top:`${100-t.v}%`,left:`${t.s}%`,color:d(t)},{"background-color":d({h:t.h,s:100,v:100,a:1})}]),this.el.setAttribute("aria-valuetext",`Saturation ${n(t.s)}%, Brightness ${n(t.v)}%`)}getMove(t,r){return{s:r?c(this.hsva.s+t.x*100,0,100):t.x*100,v:r?c(this.hsva.v-t.y*100,0,100):Math.round(100-t.y*100)}}};var Z=':host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:"";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}';var tt="[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}";var rt="[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}";var w=Symbol("same"),R=Symbol("color"),et=Symbol("hsva"),_=Symbol("update"),ot=Symbol("parts"),g=Symbol("css"),x=Symbol("sliders"),p=class extends HTMLElement{static get observedAttributes(){return["color"]}get[g](){return[Z,tt,rt]}get[x](){return[T,S]}get color(){return this[R]}set color(t){if(!this[w](t)){let r=this.colorModel.toHsva(t);this[_](r),this[R]=t}}constructor(){super();let t=H(``),r=this.attachShadow({mode:"open"});r.appendChild(t.content.cloneNode(!0)),r.addEventListener("move",this),this[ot]=this[x].map(o=>new o(r))}connectedCallback(){if(this.hasOwnProperty("color")){let t=this.color;delete this.color,this.color=t}else this.color||(this.color=this.colorModel.defaultColor)}attributeChangedCallback(t,r,o){let s=this.colorModel.fromAttr(o);this[w](s)||(this.color=s)}handleEvent(t){let r=this[et],o={...r,...t.detail};this[_](o);let s;!L(o,r)&&!this[w](s=this.colorModel.fromHsva(o))&&(this[R]=s,f(this,"color-changed",{value:s}))}[w](t){return this.color&&this.colorModel.equal(t,this.color)}[_](t){this[et]=t,this[ot].forEach(r=>r.update(t))}};var dt={defaultColor:"#000",toHsva:F,fromHsva:({h:e,s:t,v:r})=>X({h:e,s:t,v:r,a:1}),equal:K,fromAttr:e=>e},y=class extends p{get colorModel(){return dt}};var P=class extends y{};customElements.define("hex-color-picker",P);var ht={defaultColor:"hsl(0, 0%, 0%)",toHsva:J,fromHsva:d,equal:h,fromAttr:e=>e},M=class extends p{get colorModel(){return ht}};var z=class extends M{};customElements.define("hsl-string-color-picker",z);var mt={defaultColor:"rgb(0, 0, 0)",toHsva:U,fromHsva:B,equal:h,fromAttr:e=>e},C=class extends p{get colorModel(){return mt}};var V=class extends C{};customElements.define("rgb-string-color-picker",V);var k=class extends u{constructor(t){super(t,"alpha",'aria-label="Alpha" aria-valuemin="0" aria-valuemax="1"',!1)}update(t){this.hsva=t;let r=$({...t,a:0}),o=$({...t,a:1}),s=t.a*100;this.style([{left:`${s}%`,color:$(t)},{"--gradient":`linear-gradient(90deg, ${r}, ${o}`}]);let a=n(s);this.el.setAttribute("aria-valuenow",`${a}`),this.el.setAttribute("aria-valuetext",`${a}%`)}getMove(t,r){return{a:r?c(this.hsva.a+t.x):t.x}}};var st=`[part=alpha]{flex:0 0 24px}[part=alpha]::after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;border-radius:inherit;background-image:var(--gradient);box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part^=alpha]{background-color:#fff;background-image:url('data:image/svg+xml,')}[part=alpha-pointer]{top:50%}`;var E=class extends p{get[g](){return[...super[g],st]}get[x](){return[...super[x],k]}};var ft={defaultColor:"rgba(0, 0, 0, 1)",toHsva:I,fromHsva:D,equal:h,fromAttr:e=>e},N=class extends E{get colorModel(){return ft}};var j=class extends N{};customElements.define("rgba-string-color-picker",j);function gt({isAutofocused:e,isDisabled:t,isLive:r,isLiveDebounced:o,isLiveOnBlur:s,liveDebounce:a,state:i}){return{state:i,init:function(){this.state===null||this.state===""||this.setState(this.state),e&&this.togglePanelVisibility(this.$refs.input),this.$refs.input.addEventListener("change",l=>{this.setState(l.target.value)}),this.$refs.panel.addEventListener("color-changed",l=>{this.setState(l.detail.value),!(s||!(r||o))&&setTimeout(()=>{this.state===l.detail.value&&this.commitState()},o?a:250)}),(r||o||s)&&new MutationObserver(()=>this.isOpen()?null:this.commitState()).observe(this.$refs.panel,{attributes:!0,childList:!0})},togglePanelVisibility:function(){t||this.$refs.panel.toggle(this.$refs.input)},setState:function(l){this.state=l,this.$refs.input.value=l,this.$refs.panel.color=l},isOpen:function(){return this.$refs.panel.style.display==="block"},commitState:function(){JSON.stringify(this.$wire.__instance.canonical)!==JSON.stringify(this.$wire.__instance.ephemeral)&&this.$wire.$commit()}}}export{gt as default}; diff --git a/public/js/filament/forms/components/date-time-picker.js b/public/js/filament/forms/components/date-time-picker.js new file mode 100644 index 000000000..b4e38cd22 --- /dev/null +++ b/public/js/filament/forms/components/date-time-picker.js @@ -0,0 +1 @@ +var vi=Object.create;var fn=Object.defineProperty;var gi=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var bi=Object.getPrototypeOf,ki=Object.prototype.hasOwnProperty;var k=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports);var Hi=(n,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of Si(t))!ki.call(n,e)&&e!==s&&fn(n,e,{get:()=>t[e],enumerable:!(i=gi(t,e))||i.enumerable});return n};var de=(n,t,s)=>(s=n!=null?vi(bi(n)):{},Hi(t||!n||!n.__esModule?fn(s,"default",{value:n,enumerable:!0}):s,n));var bn=k((He,je)=>{(function(n,t){typeof He=="object"&&typeof je<"u"?je.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_advancedFormat=t()})(He,function(){"use strict";return function(n,t){var s=t.prototype,i=s.format;s.format=function(e){var r=this,a=this.$locale();if(!this.isValid())return i.bind(this)(e);var u=this.$utils(),o=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return a.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return a.ordinal(r.week(),"W");case"w":case"ww":return u.s(r.week(),d==="w"?1:2,"0");case"W":case"WW":return u.s(r.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return u.s(String(r.$H===0?24:r.$H),d==="k"?1:2,"0");case"X":return Math.floor(r.$d.getTime()/1e3);case"x":return r.$d.getTime();case"z":return"["+r.offsetName()+"]";case"zzz":return"["+r.offsetName("long")+"]";default:return d}});return i.bind(this)(o)}}})});var kn=k((Te,we)=>{(function(n,t){typeof Te=="object"&&typeof we<"u"?we.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_customParseFormat=t()})(Te,function(){"use strict";var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d/,i=/\d\d/,e=/\d\d?/,r=/\d*[^-_:/,()\s\d]+/,a={},u=function(m){return(m=+m)+(m>68?1900:2e3)},o=function(m){return function(Y){this[m]=+Y}},d=[/[+-]\d\d:?(\d\d)?|Z/,function(m){(this.zone||(this.zone={})).offset=function(Y){if(!Y||Y==="Z")return 0;var L=Y.match(/([+-]|\d\d)/g),D=60*L[1]+(+L[2]||0);return D===0?0:L[0]==="+"?-D:D}(m)}],_=function(m){var Y=a[m];return Y&&(Y.indexOf?Y:Y.s.concat(Y.f))},y=function(m,Y){var L,D=a.meridiem;if(D){for(var w=1;w<=24;w+=1)if(m.indexOf(D(w,0,Y))>-1){L=w>12;break}}else L=m===(Y?"pm":"PM");return L},l={A:[r,function(m){this.afternoon=y(m,!1)}],a:[r,function(m){this.afternoon=y(m,!0)}],Q:[s,function(m){this.month=3*(m-1)+1}],S:[s,function(m){this.milliseconds=100*+m}],SS:[i,function(m){this.milliseconds=10*+m}],SSS:[/\d{3}/,function(m){this.milliseconds=+m}],s:[e,o("seconds")],ss:[e,o("seconds")],m:[e,o("minutes")],mm:[e,o("minutes")],H:[e,o("hours")],h:[e,o("hours")],HH:[e,o("hours")],hh:[e,o("hours")],D:[e,o("day")],DD:[i,o("day")],Do:[r,function(m){var Y=a.ordinal,L=m.match(/\d+/);if(this.day=L[0],Y)for(var D=1;D<=31;D+=1)Y(D).replace(/\[|\]/g,"")===m&&(this.day=D)}],w:[e,o("week")],ww:[i,o("week")],M:[e,o("month")],MM:[i,o("month")],MMM:[r,function(m){var Y=_("months"),L=(_("monthsShort")||Y.map(function(D){return D.slice(0,3)})).indexOf(m)+1;if(L<1)throw new Error;this.month=L%12||L}],MMMM:[r,function(m){var Y=_("months").indexOf(m)+1;if(Y<1)throw new Error;this.month=Y%12||Y}],Y:[/[+-]?\d+/,o("year")],YY:[i,function(m){this.year=u(m)}],YYYY:[/\d{4}/,o("year")],Z:d,ZZ:d};function f(m){var Y,L;Y=m,L=a&&a.formats;for(var D=(m=Y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function($,H,W){var U=W&&W.toUpperCase();return H||L[W]||n[W]||L[U].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(v,h,c){return h||c.slice(1)})})).match(t),w=D.length,g=0;g-1)return new Date((M==="X"?1e3:1)*p);var T=f(M)(p),I=T.year,N=T.month,E=T.day,P=T.hours,B=T.minutes,Q=T.seconds,re=T.milliseconds,Z=T.zone,J=T.week,G=new Date,X=E||(I||N?1:G.getDate()),ee=I||G.getFullYear(),le=0;I&&!N||(le=N>0?N-1:G.getMonth());var me,pe=P||0,De=B||0,Le=Q||0,ve=re||0;return Z?new Date(Date.UTC(ee,le,X,pe,De,Le,ve+60*Z.offset*1e3)):S?new Date(Date.UTC(ee,le,X,pe,De,Le,ve)):(me=new Date(ee,le,X,pe,De,Le,ve),J&&(me=b(me).week(J).toDate()),me)}catch{return new Date("")}}(C,x,A,L),this.init(),U&&U!==!0&&(this.$L=this.locale(U).$L),W&&C!=this.format(x)&&(this.$d=new Date("")),a={}}else if(x instanceof Array)for(var v=x.length,h=1;h<=v;h+=1){q[1]=x[h-1];var c=L.apply(this,q);if(c.isValid()){this.$d=c.$d,this.$L=c.$L,this.init();break}h===v&&(this.$d=new Date(""))}else w.call(this,g)}}})});var Hn=k(($e,Ce)=>{(function(n,t){typeof $e=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_localeData=t()})($e,function(){"use strict";return function(n,t,s){var i=t.prototype,e=function(d){return d&&(d.indexOf?d:d.s)},r=function(d,_,y,l,f){var m=d.name?d:d.$locale(),Y=e(m[_]),L=e(m[y]),D=Y||L.map(function(g){return g.slice(0,l)});if(!f)return D;var w=m.weekStart;return D.map(function(g,C){return D[(C+(w||0))%7]})},a=function(){return s.Ls[s.locale()]},u=function(d,_){return d.formats[_]||function(y){return y.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(l,f,m){return f||m.slice(1)})}(d.formats[_.toUpperCase()])},o=function(){var d=this;return{months:function(_){return _?_.format("MMMM"):r(d,"months")},monthsShort:function(_){return _?_.format("MMM"):r(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(_){return _?_.format("dddd"):r(d,"weekdays")},weekdaysMin:function(_){return _?_.format("dd"):r(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(_){return _?_.format("ddd"):r(d,"weekdaysShort","weekdays",3)},longDateFormat:function(_){return u(d.$locale(),_)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};i.localeData=function(){return o.bind(this)()},s.localeData=function(){var d=a();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return s.weekdays()},weekdaysShort:function(){return s.weekdaysShort()},weekdaysMin:function(){return s.weekdaysMin()},months:function(){return s.months()},monthsShort:function(){return s.monthsShort()},longDateFormat:function(_){return u(d,_)},meridiem:d.meridiem,ordinal:d.ordinal}},s.months=function(){return r(a(),"months")},s.monthsShort=function(){return r(a(),"monthsShort","months",3)},s.weekdays=function(d){return r(a(),"weekdays",null,null,d)},s.weekdaysShort=function(d){return r(a(),"weekdaysShort","weekdays",3,d)},s.weekdaysMin=function(d){return r(a(),"weekdaysMin","weekdays",2,d)}}})});var jn=k((Oe,ze)=>{(function(n,t){typeof Oe=="object"&&typeof ze<"u"?ze.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_timezone=t()})(Oe,function(){"use strict";var n={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(s,i,e){var r,a=function(_,y,l){l===void 0&&(l={});var f=new Date(_),m=function(Y,L){L===void 0&&(L={});var D=L.timeZoneName||"short",w=Y+"|"+D,g=t[w];return g||(g=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:Y,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:D}),t[w]=g),g}(y,l);return m.formatToParts(f)},u=function(_,y){for(var l=a(_,y),f=[],m=0;m=0&&(f[w]=parseInt(D,10))}var g=f[3],C=g===24?0:g,A=f[0]+"-"+f[1]+"-"+f[2]+" "+C+":"+f[4]+":"+f[5]+":000",q=+_;return(e.utc(A).valueOf()-(q-=q%1e3))/6e4},o=i.prototype;o.tz=function(_,y){_===void 0&&(_=r);var l,f=this.utcOffset(),m=this.toDate(),Y=m.toLocaleString("en-US",{timeZone:_}),L=Math.round((m-new Date(Y))/1e3/60),D=15*-Math.round(m.getTimezoneOffset()/15)-L;if(!Number(D))l=this.utcOffset(0,y);else if(l=e(Y,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(D,!0),y){var w=l.utcOffset();l=l.add(f-w,"minute")}return l.$x.$timezone=_,l},o.offsetName=function(_){var y=this.$x.$timezone||e.tz.guess(),l=a(this.valueOf(),y,{timeZoneName:_}).find(function(f){return f.type.toLowerCase()==="timezonename"});return l&&l.value};var d=o.startOf;o.startOf=function(_,y){if(!this.$x||!this.$x.$timezone)return d.call(this,_,y);var l=e(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(l,_,y).tz(this.$x.$timezone,!0)},e.tz=function(_,y,l){var f=l&&y,m=l||y||r,Y=u(+e(),m);if(typeof _!="string")return e(_).tz(m);var L=function(C,A,q){var x=C-60*A*1e3,$=u(x,q);if(A===$)return[x,A];var H=u(x-=60*($-A)*1e3,q);return $===H?[x,$]:[C-60*Math.min($,H)*1e3,Math.max($,H)]}(e.utc(_,f).valueOf(),Y,m),D=L[0],w=L[1],g=e(D).utcOffset(w);return g.$x.$timezone=m,g},e.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},e.tz.setDefault=function(_){r=_}}})});var Tn=k((Ae,Ie)=>{(function(n,t){typeof Ae=="object"&&typeof Ie<"u"?Ie.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_utc=t()})(Ae,function(){"use strict";var n="minute",t=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(i,e,r){var a=e.prototype;r.utc=function(f){var m={date:f,utc:!0,args:arguments};return new e(m)},a.utc=function(f){var m=r(this.toDate(),{locale:this.$L,utc:!0});return f?m.add(this.utcOffset(),n):m},a.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var u=a.parse;a.parse=function(f){f.utc&&(this.$u=!0),this.$utils().u(f.$offset)||(this.$offset=f.$offset),u.call(this,f)};var o=a.init;a.init=function(){if(this.$u){var f=this.$d;this.$y=f.getUTCFullYear(),this.$M=f.getUTCMonth(),this.$D=f.getUTCDate(),this.$W=f.getUTCDay(),this.$H=f.getUTCHours(),this.$m=f.getUTCMinutes(),this.$s=f.getUTCSeconds(),this.$ms=f.getUTCMilliseconds()}else o.call(this)};var d=a.utcOffset;a.utcOffset=function(f,m){var Y=this.$utils().u;if(Y(f))return this.$u?0:Y(this.$offset)?d.call(this):this.$offset;if(typeof f=="string"&&(f=function(g){g===void 0&&(g="");var C=g.match(t);if(!C)return null;var A=(""+C[0]).match(s)||["-",0,0],q=A[0],x=60*+A[1]+ +A[2];return x===0?0:q==="+"?x:-x}(f),f===null))return this;var L=Math.abs(f)<=16?60*f:f,D=this;if(m)return D.$offset=L,D.$u=f===0,D;if(f!==0){var w=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(D=this.local().add(L+w,n)).$offset=L,D.$x.$localOffset=w}else D=this.utc();return D};var _=a.format;a.format=function(f){var m=f||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return _.call(this,m)},a.valueOf=function(){var f=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*f},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var y=a.toDate;a.toDate=function(f){return f==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():y.call(this)};var l=a.diff;a.diff=function(f,m,Y){if(f&&this.$u===f.$u)return l.call(this,f,m,Y);var L=this.local(),D=r(f).local();return l.call(L,D,m,Y)}}})});var j=k((qe,xe)=>{(function(n,t){typeof qe=="object"&&typeof xe<"u"?xe.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs=t()})(qe,function(){"use strict";var n=1e3,t=6e4,s=36e5,i="millisecond",e="second",r="minute",a="hour",u="day",o="week",d="month",_="quarter",y="year",l="date",f="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,Y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,L={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(v){var h=["th","st","nd","rd"],c=v%100;return"["+v+(h[(c-20)%10]||h[c]||h[0])+"]"}},D=function(v,h,c){var p=String(v);return!p||p.length>=h?v:""+Array(h+1-p.length).join(c)+v},w={s:D,z:function(v){var h=-v.utcOffset(),c=Math.abs(h),p=Math.floor(c/60),M=c%60;return(h<=0?"+":"-")+D(p,2,"0")+":"+D(M,2,"0")},m:function v(h,c){if(h.date()1)return v(b[0])}else{var T=h.name;C[T]=h,M=T}return!p&&M&&(g=M),M||!p&&g},$=function(v,h){if(q(v))return v.clone();var c=typeof h=="object"?h:{};return c.date=v,c.args=arguments,new W(c)},H=w;H.l=x,H.i=q,H.w=function(v,h){return $(v,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var W=function(){function v(c){this.$L=x(c.locale,null,!0),this.parse(c),this.$x=this.$x||c.x||{},this[A]=!0}var h=v.prototype;return h.parse=function(c){this.$d=function(p){var M=p.date,S=p.utc;if(M===null)return new Date(NaN);if(H.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var b=M.match(m);if(b){var T=b[2]-1||0,I=(b[7]||"0").substring(0,3);return S?new Date(Date.UTC(b[1],T,b[3]||1,b[4]||0,b[5]||0,b[6]||0,I)):new Date(b[1],T,b[3]||1,b[4]||0,b[5]||0,b[6]||0,I)}}return new Date(M)}(c),this.init()},h.init=function(){var c=this.$d;this.$y=c.getFullYear(),this.$M=c.getMonth(),this.$D=c.getDate(),this.$W=c.getDay(),this.$H=c.getHours(),this.$m=c.getMinutes(),this.$s=c.getSeconds(),this.$ms=c.getMilliseconds()},h.$utils=function(){return H},h.isValid=function(){return this.$d.toString()!==f},h.isSame=function(c,p){var M=$(c);return this.startOf(p)<=M&&M<=this.endOf(p)},h.isAfter=function(c,p){return $(c){(function(n,t){typeof Ne=="object"&&typeof Ee<"u"?Ee.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ar=t(n.dayjs)})(Ne,function(n){"use strict";function t(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var s=t(n),i="\u064A\u0646\u0627\u064A\u0631_\u0641\u0628\u0631\u0627\u064A\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064A\u0644_\u0645\u0627\u064A\u0648_\u064A\u0648\u0646\u064A\u0648_\u064A\u0648\u0644\u064A\u0648_\u0623\u063A\u0633\u0637\u0633_\u0633\u0628\u062A\u0645\u0628\u0631_\u0623\u0643\u062A\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062F\u064A\u0633\u0645\u0628\u0631".split("_"),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},a={name:"ar",weekdays:"\u0627\u0644\u0623\u062D\u062F_\u0627\u0644\u0625\u062B\u0646\u064A\u0646_\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062E\u0645\u064A\u0633_\u0627\u0644\u062C\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062A".split("_"),weekdaysShort:"\u0623\u062D\u062F_\u0625\u062B\u0646\u064A\u0646_\u062B\u0644\u0627\u062B\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062E\u0645\u064A\u0633_\u062C\u0645\u0639\u0629_\u0633\u0628\u062A".split("_"),weekdaysMin:"\u062D_\u0646_\u062B_\u0631_\u062E_\u062C_\u0633".split("_"),months:i,monthsShort:i,weekStart:6,meridiem:function(u){return u>12?"\u0645":"\u0635"},relativeTime:{future:"\u0628\u0639\u062F %s",past:"\u0645\u0646\u0630 %s",s:"\u062B\u0627\u0646\u064A\u0629 \u0648\u0627\u062D\u062F\u0629",m:"\u062F\u0642\u064A\u0642\u0629 \u0648\u0627\u062D\u062F\u0629",mm:"%d \u062F\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629 \u0648\u0627\u062D\u062F\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062A",d:"\u064A\u0648\u0645 \u0648\u0627\u062D\u062F",dd:"%d \u0623\u064A\u0627\u0645",M:"\u0634\u0647\u0631 \u0648\u0627\u062D\u062F",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0639\u0627\u0645 \u0648\u0627\u062D\u062F",yy:"%d \u0623\u0639\u0648\u0627\u0645"},preparse:function(u){return u.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(o){return r[o]}).replace(/،/g,",")},postformat:function(u){return u.replace(/\d/g,function(o){return e[o]}).replace(/,/g,"\u060C")},ordinal:function(u){return u},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200FM/\u200FYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return s.default.locale(a,null,!0),a})});var $n=k((Fe,Je)=>{(function(n,t){typeof Fe=="object"&&typeof Je<"u"?Je.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_bs=t(n.dayjs)})(Fe,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010Detvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._\u010Det._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010De_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(i,null,!0),i})});var Cn=k((We,Ue)=>{(function(n,t){typeof We=="object"&&typeof Ue<"u"?Ue.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ca=t(n.dayjs)})(We,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Mar\xE7_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Mar\xE7_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aqu\xED %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return""+e+(e===1||e===3?"r":e===2?"n":e===4?"t":"\xE8")}};return s.default.locale(i,null,!0),i})});var Pe=k((Ye,On)=>{(function(n,t){typeof Ye=="object"&&typeof On<"u"?t(Ye,j()):typeof define=="function"&&define.amd?define(["exports","dayjs"],t):t((n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ku={},n.dayjs)})(Ye,function(n,t){"use strict";function s(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var i=s(t),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},a=["\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u0634\u0648\u0628\u0627\u062A","\u0626\u0627\u062F\u0627\u0631","\u0646\u06CC\u0633\u0627\u0646","\u0626\u0627\u06CC\u0627\u0631","\u062D\u0648\u0632\u06D5\u06CC\u0631\u0627\u0646","\u062A\u06D5\u0645\u0645\u0648\u0648\u0632","\u0626\u0627\u0628","\u0626\u06D5\u06CC\u0644\u0648\u0648\u0644","\u062A\u0634\u0631\u06CC\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645","\u062A\u0634\u0631\u06CC\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645"],u={name:"ku",months:a,monthsShort:a,weekdays:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645\u0645\u06D5_\u062F\u0648\u0648\u0634\u06D5\u0645\u0645\u06D5_\u0633\u06CE\u0634\u06D5\u0645\u0645\u06D5_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645\u0645\u06D5_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645\u0645\u06D5_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekdaysShort:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645_\u062F\u0648\u0648\u0634\u06D5\u0645_\u0633\u06CE\u0634\u06D5\u0645_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekStart:6,weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u0647\u0640_\u0634".split("_"),preparse:function(o){return o.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(d){return r[d]}).replace(/،/g,",")},postformat:function(o){return o.replace(/\d/g,function(d){return e[d]}).replace(/,/g,"\u060C")},ordinal:function(o){return o},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiem:function(o){return o<12?"\u067E.\u0646":"\u062F.\u0646"},relativeTime:{future:"\u0644\u06D5 %s",past:"\u0644\u06D5\u0645\u06D5\u0648\u067E\u06CE\u0634 %s",s:"\u0686\u06D5\u0646\u062F \u0686\u0631\u06A9\u06D5\u06CC\u06D5\u06A9",m:"\u06CC\u06D5\u06A9 \u062E\u0648\u0644\u06D5\u06A9",mm:"%d \u062E\u0648\u0644\u06D5\u06A9",h:"\u06CC\u06D5\u06A9 \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",hh:"%d \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",d:"\u06CC\u06D5\u06A9 \u0695\u06C6\u0698",dd:"%d \u0695\u06C6\u0698",M:"\u06CC\u06D5\u06A9 \u0645\u0627\u0646\u06AF",MM:"%d \u0645\u0627\u0646\u06AF",y:"\u06CC\u06D5\u06A9 \u0633\u0627\u06B5",yy:"%d \u0633\u0627\u06B5"}};i.default.locale(u,null,!0),n.default=u,n.englishToArabicNumbersMap=e,Object.defineProperty(n,"__esModule",{value:!0})})});var zn=k((Re,Ge)=>{(function(n,t){typeof Re=="object"&&typeof Ge<"u"?Ge.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cs=t(n.dayjs)})(Re,function(n){"use strict";function t(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var s=t(n);function i(a){return a>1&&a<5&&~~(a/10)!=1}function e(a,u,o,d){var _=a+" ";switch(o){case"s":return u||d?"p\xE1r sekund":"p\xE1r sekundami";case"m":return u?"minuta":d?"minutu":"minutou";case"mm":return u||d?_+(i(a)?"minuty":"minut"):_+"minutami";case"h":return u?"hodina":d?"hodinu":"hodinou";case"hh":return u||d?_+(i(a)?"hodiny":"hodin"):_+"hodinami";case"d":return u||d?"den":"dnem";case"dd":return u||d?_+(i(a)?"dny":"dn\xED"):_+"dny";case"M":return u||d?"m\u011Bs\xEDc":"m\u011Bs\xEDcem";case"MM":return u||d?_+(i(a)?"m\u011Bs\xEDce":"m\u011Bs\xEDc\u016F"):_+"m\u011Bs\xEDci";case"y":return u||d?"rok":"rokem";case"yy":return u||d?_+(i(a)?"roky":"let"):_+"lety"}}var r={name:"cs",weekdays:"ned\u011Ble_pond\u011Bl\xED_\xFAter\xFD_st\u0159eda_\u010Dtvrtek_p\xE1tek_sobota".split("_"),weekdaysShort:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),weekdaysMin:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),months:"leden_\xFAnor_b\u0159ezen_duben_kv\u011Bten_\u010Derven_\u010Dervenec_srpen_z\xE1\u0159\xED_\u0159\xEDjen_listopad_prosinec".split("_"),monthsShort:"led_\xFAno_b\u0159e_dub_kv\u011B_\u010Dvn_\u010Dvc_srp_z\xE1\u0159_\u0159\xEDj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(a){return a+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var An=k((Ze,Ve)=>{(function(n,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cy=t(n.dayjs)})(Ze,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn \xF4l",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return s.default.locale(i,null,!0),i})});var In=k((Ke,Qe)=>{(function(n,t){typeof Ke=="object"&&typeof Qe<"u"?Qe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_da=t(n.dayjs)})(Ke,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"da",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8n._man._tirs._ons._tors._fre._l\xF8r.".split("_"),weekdaysMin:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xE5 sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"et \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var qn=k((Xe,Be)=>{(function(n,t){typeof Xe=="object"&&typeof Be<"u"?Be.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_de=t(n.dayjs)})(Xe,function(n){"use strict";function t(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var s=t(n),i={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function e(a,u,o){var d=i[o];return Array.isArray(d)&&(d=d[u?0:1]),d.replace("%d",a)}var r={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_M\xE4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xE4rz_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),ordinal:function(a){return a+"."},weekStart:1,yearStart:4,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var xn=k((et,tt)=>{(function(n,t){typeof et=="object"&&typeof tt<"u"?tt.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_en=t()})(et,function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(n){var t=["th","st","nd","rd"],s=n%100;return"["+n+(t[(s-20)%10]||t[s]||t[0])+"]"}}})});var Nn=k((nt,it)=>{(function(n,t){typeof nt=="object"&&typeof it<"u"?it.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_es=t(n.dayjs)})(nt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_mi\xE9rcoles_jueves_viernes_s\xE1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xE9._jue._vie._s\xE1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xE1".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xEDa",dd:"%d d\xEDas",M:"un mes",MM:"%d meses",y:"un a\xF1o",yy:"%d a\xF1os"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var En=k((st,rt)=>{(function(n,t){typeof st=="object"&&typeof rt<"u"?rt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_et=t(n.dayjs)})(st,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,a,u,o){var d={s:["m\xF5ne sekundi","m\xF5ni sekund","paar sekundit"],m:["\xFChe minuti","\xFCks minut"],mm:["%d minuti","%d minutit"],h:["\xFChe tunni","tund aega","\xFCks tund"],hh:["%d tunni","%d tundi"],d:["\xFChe p\xE4eva","\xFCks p\xE4ev"],M:["kuu aja","kuu aega","\xFCks kuu"],MM:["%d kuu","%d kuud"],y:["\xFChe aasta","aasta","\xFCks aasta"],yy:["%d aasta","%d aastat"]};return a?(d[u][2]?d[u][2]:d[u][1]).replace("%d",r):(o?d[u][0]:d[u][1]).replace("%d",r)}var e={name:"et",weekdays:"p\xFChap\xE4ev_esmasp\xE4ev_teisip\xE4ev_kolmap\xE4ev_neljap\xE4ev_reede_laup\xE4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_m\xE4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xE4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(r){return r+"."},weekStart:1,relativeTime:{future:"%s p\xE4rast",past:"%s tagasi",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:"%d p\xE4eva",M:i,MM:i,y:i,yy:i},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(e,null,!0),e})});var Fn=k((at,ut)=>{(function(n,t){typeof at=="object"&&typeof ut<"u"?ut.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fa=t(n.dayjs)})(at,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fa",weekdays:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u062C_\u0634".split("_"),weekStart:6,months:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"\u062F\u0631 %s",past:"%s \u067E\u06CC\u0634",s:"\u0686\u0646\u062F \u062B\u0627\u0646\u06CC\u0647",m:"\u06CC\u06A9 \u062F\u0642\u06CC\u0642\u0647",mm:"%d \u062F\u0642\u06CC\u0642\u0647",h:"\u06CC\u06A9 \u0633\u0627\u0639\u062A",hh:"%d \u0633\u0627\u0639\u062A",d:"\u06CC\u06A9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06CC\u06A9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06CC\u06A9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"}};return s.default.locale(i,null,!0),i})});var Jn=k((ot,dt)=>{(function(n,t){typeof ot=="object"&&typeof dt<"u"?dt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fi=t(n.dayjs)})(ot,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,a,u,o){var d={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"p\xE4iv\xE4",dd:"%d p\xE4iv\xE4\xE4",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_nelj\xE4_viisi_kuusi_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},_={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"p\xE4iv\xE4n",dd:"%d p\xE4iv\xE4n",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_nelj\xE4n_viiden_kuuden_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},y=o&&!a?_:d,l=y[u];return r<10?l.replace("%d",y.numbers[r]):l.replace("%d",r)}var e={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xE4kuu_hein\xE4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xE4_hein\xE4_elo_syys_loka_marras_joulu".split("_"),ordinal:function(r){return r+"."},weekStart:1,yearStart:4,relativeTime:{future:"%s p\xE4\xE4st\xE4",past:"%s sitten",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM[ta] YYYY",LLL:"D. MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, D. MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [klo] HH.mm",llll:"ddd, D. MMM YYYY, [klo] HH.mm"}};return s.default.locale(e,null,!0),e})});var Wn=k((_t,ft)=>{(function(n,t){typeof _t=="object"&&typeof ft<"u"?ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fr=t(n.dayjs)})(_t,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_f\xE9vrier_mars_avril_mai_juin_juillet_ao\xFBt_septembre_octobre_novembre_d\xE9cembre".split("_"),monthsShort:"janv._f\xE9vr._mars_avr._mai_juin_juil._ao\xFBt_sept._oct._nov._d\xE9c.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return""+e+(e===1?"er":"")}};return s.default.locale(i,null,!0),i})});var Un=k((lt,mt)=>{(function(n,t){typeof lt=="object"&&typeof mt<"u"?mt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hi=t(n.dayjs)})(lt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hi",weekdays:"\u0930\u0935\u093F\u0935\u093E\u0930_\u0938\u094B\u092E\u0935\u093E\u0930_\u092E\u0902\u0917\u0932\u0935\u093E\u0930_\u092C\u0941\u0927\u0935\u093E\u0930_\u0917\u0941\u0930\u0942\u0935\u093E\u0930_\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930_\u0936\u0928\u093F\u0935\u093E\u0930".split("_"),months:"\u091C\u0928\u0935\u0930\u0940_\u092B\u093C\u0930\u0935\u0930\u0940_\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948\u0932_\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932\u093E\u0908_\u0905\u0917\u0938\u094D\u0924_\u0938\u093F\u0924\u092E\u094D\u092C\u0930_\u0905\u0915\u094D\u091F\u0942\u092C\u0930_\u0928\u0935\u092E\u094D\u092C\u0930_\u0926\u093F\u0938\u092E\u094D\u092C\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093F_\u0938\u094B\u092E_\u092E\u0902\u0917\u0932_\u092C\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094D\u0930_\u0936\u0928\u093F".split("_"),monthsShort:"\u091C\u0928._\u092B\u093C\u0930._\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948._\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932._\u0905\u0917._\u0938\u093F\u0924._\u0905\u0915\u094D\u091F\u0942._\u0928\u0935._\u0926\u093F\u0938.".split("_"),weekdaysMin:"\u0930_\u0938\u094B_\u092E\u0902_\u092C\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm \u092C\u091C\u0947",LTS:"A h:mm:ss \u092C\u091C\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092C\u091C\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092C\u091C\u0947"},relativeTime:{future:"%s \u092E\u0947\u0902",past:"%s \u092A\u0939\u0932\u0947",s:"\u0915\u0941\u091B \u0939\u0940 \u0915\u094D\u0937\u0923",m:"\u090F\u0915 \u092E\u093F\u0928\u091F",mm:"%d \u092E\u093F\u0928\u091F",h:"\u090F\u0915 \u0918\u0902\u091F\u093E",hh:"%d \u0918\u0902\u091F\u0947",d:"\u090F\u0915 \u0926\u093F\u0928",dd:"%d \u0926\u093F\u0928",M:"\u090F\u0915 \u092E\u0939\u0940\u0928\u0947",MM:"%d \u092E\u0939\u0940\u0928\u0947",y:"\u090F\u0915 \u0935\u0930\u094D\u0937",yy:"%d \u0935\u0930\u094D\u0937"}};return s.default.locale(i,null,!0),i})});var Pn=k((ct,ht)=>{(function(n,t){typeof ct=="object"&&typeof ht<"u"?ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hu=t(n.dayjs)})(ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hu",weekdays:"vas\xE1rnap_h\xE9tf\u0151_kedd_szerda_cs\xFCt\xF6rt\xF6k_p\xE9ntek_szombat".split("_"),weekdaysShort:"vas_h\xE9t_kedd_sze_cs\xFCt_p\xE9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"janu\xE1r_febru\xE1r_m\xE1rcius_\xE1prilis_m\xE1jus_j\xFAnius_j\xFAlius_augusztus_szeptember_okt\xF3ber_november_december".split("_"),monthsShort:"jan_feb_m\xE1rc_\xE1pr_m\xE1j_j\xFAn_j\xFAl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s m\xFAlva",past:"%s",s:function(e,r,a,u){return"n\xE9h\xE1ny m\xE1sodperc"+(u||r?"":"e")},m:function(e,r,a,u){return"egy perc"+(u||r?"":"e")},mm:function(e,r,a,u){return e+" perc"+(u||r?"":"e")},h:function(e,r,a,u){return"egy "+(u||r?"\xF3ra":"\xF3r\xE1ja")},hh:function(e,r,a,u){return e+" "+(u||r?"\xF3ra":"\xF3r\xE1ja")},d:function(e,r,a,u){return"egy "+(u||r?"nap":"napja")},dd:function(e,r,a,u){return e+" "+(u||r?"nap":"napja")},M:function(e,r,a,u){return"egy "+(u||r?"h\xF3nap":"h\xF3napja")},MM:function(e,r,a,u){return e+" "+(u||r?"h\xF3nap":"h\xF3napja")},y:function(e,r,a,u){return"egy "+(u||r?"\xE9v":"\xE9ve")},yy:function(e,r,a,u){return e+" "+(u||r?"\xE9v":"\xE9ve")}},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return s.default.locale(i,null,!0),i})});var Rn=k((Mt,yt)=>{(function(n,t){typeof Mt=="object"&&typeof yt<"u"?yt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hy_am=t(n.dayjs)})(Mt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hy-am",weekdays:"\u056F\u056B\u0580\u0561\u056F\u056B_\u0565\u0580\u056F\u0578\u0582\u0577\u0561\u0562\u0569\u056B_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0570\u056B\u0576\u0563\u0577\u0561\u0562\u0569\u056B_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),months:"\u0570\u0578\u0582\u0576\u057E\u0561\u0580\u056B_\u0583\u0565\u057F\u0580\u057E\u0561\u0580\u056B_\u0574\u0561\u0580\u057F\u056B_\u0561\u057A\u0580\u056B\u056C\u056B_\u0574\u0561\u0575\u056B\u057D\u056B_\u0570\u0578\u0582\u0576\u056B\u057D\u056B_\u0570\u0578\u0582\u056C\u056B\u057D\u056B_\u0585\u0563\u0578\u057D\u057F\u0578\u057D\u056B_\u057D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0570\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056B_\u0564\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B".split("_"),weekStart:1,weekdaysShort:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),monthsShort:"\u0570\u0576\u057E_\u0583\u057F\u0580_\u0574\u0580\u057F_\u0561\u057A\u0580_\u0574\u0575\u057D_\u0570\u0576\u057D_\u0570\u056C\u057D_\u0585\u0563\u057D_\u057D\u057A\u057F_\u0570\u056F\u057F_\u0576\u0574\u0562_\u0564\u056F\u057F".split("_"),weekdaysMin:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},relativeTime:{future:"%s \u0570\u0565\u057F\u0578",past:"%s \u0561\u057C\u0561\u057B",s:"\u0574\u056B \u0584\u0561\u0576\u056B \u057E\u0561\u0575\u0580\u056F\u0575\u0561\u0576",m:"\u0580\u0578\u057A\u0565",mm:"%d \u0580\u0578\u057A\u0565",h:"\u056A\u0561\u0574",hh:"%d \u056A\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056B\u057D",MM:"%d \u0561\u0574\u056B\u057D",y:"\u057F\u0561\u0580\u056B",yy:"%d \u057F\u0561\u0580\u056B"}};return s.default.locale(i,null,!0),i})});var Gn=k((Yt,pt)=>{(function(n,t){typeof Yt=="object"&&typeof pt<"u"?pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_id=t(n.dayjs)})(Yt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var Zn=k((Dt,Lt)=>{(function(n,t){typeof Dt=="object"&&typeof Lt<"u"?Lt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_it=t(n.dayjs)})(Dt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"it",weekdays:"domenica_luned\xEC_marted\xEC_mercoled\xEC_gioved\xEC_venerd\xEC_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var Vn=k((vt,gt)=>{(function(n,t){typeof vt=="object"&&typeof gt<"u"?gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ja=t(n.dayjs)})(vt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ja",weekdays:"\u65E5\u66DC\u65E5_\u6708\u66DC\u65E5_\u706B\u66DC\u65E5_\u6C34\u66DC\u65E5_\u6728\u66DC\u65E5_\u91D1\u66DC\u65E5_\u571F\u66DC\u65E5".split("_"),weekdaysShort:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),weekdaysMin:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e){return e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5(ddd) HH:mm"},meridiem:function(e){return e<12?"\u5348\u524D":"\u5348\u5F8C"},relativeTime:{future:"%s\u5F8C",past:"%s\u524D",s:"\u6570\u79D2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65E5",dd:"%d\u65E5",M:"1\u30F6\u6708",MM:"%d\u30F6\u6708",y:"1\u5E74",yy:"%d\u5E74"}};return s.default.locale(i,null,!0),i})});var Kn=k((St,bt)=>{(function(n,t){typeof St=="object"&&typeof bt<"u"?bt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ka=t(n.dayjs)})(St,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ka",weekdays:"\u10D9\u10D5\u10D8\u10E0\u10D0_\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8_\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8".split("_"),weekdaysShort:"\u10D9\u10D5\u10D8_\u10DD\u10E0\u10E8_\u10E1\u10D0\u10DB_\u10DD\u10D7\u10EE_\u10EE\u10E3\u10D7_\u10DE\u10D0\u10E0_\u10E8\u10D0\u10D1".split("_"),weekdaysMin:"\u10D9\u10D5_\u10DD\u10E0_\u10E1\u10D0_\u10DD\u10D7_\u10EE\u10E3_\u10DE\u10D0_\u10E8\u10D0".split("_"),months:"\u10D8\u10D0\u10DC\u10D5\u10D0\u10E0\u10D8_\u10D7\u10D4\u10D1\u10D4\u10E0\u10D5\u10D0\u10DA\u10D8_\u10DB\u10D0\u10E0\u10E2\u10D8_\u10D0\u10DE\u10E0\u10D8\u10DA\u10D8_\u10DB\u10D0\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DC\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DA\u10D8\u10E1\u10D8_\u10D0\u10D2\u10D5\u10D8\u10E1\u10E2\u10DD_\u10E1\u10D4\u10E5\u10E2\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DD\u10E5\u10E2\u10DD\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DC\u10DD\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10D3\u10D4\u10D9\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8".split("_"),monthsShort:"\u10D8\u10D0\u10DC_\u10D7\u10D4\u10D1_\u10DB\u10D0\u10E0_\u10D0\u10DE\u10E0_\u10DB\u10D0\u10D8_\u10D8\u10D5\u10DC_\u10D8\u10D5\u10DA_\u10D0\u10D2\u10D5_\u10E1\u10D4\u10E5_\u10DD\u10E5\u10E2_\u10DC\u10DD\u10D4_\u10D3\u10D4\u10D9".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s \u10E8\u10D4\u10DB\u10D3\u10D4\u10D2",past:"%s \u10EC\u10D8\u10DC",s:"\u10EC\u10D0\u10DB\u10D8",m:"\u10EC\u10E3\u10D7\u10D8",mm:"%d \u10EC\u10E3\u10D7\u10D8",h:"\u10E1\u10D0\u10D0\u10D7\u10D8",hh:"%d \u10E1\u10D0\u10D0\u10D7\u10D8\u10E1",d:"\u10D3\u10E6\u10D4\u10E1",dd:"%d \u10D3\u10E6\u10D8\u10E1 \u10D2\u10D0\u10DC\u10DB\u10D0\u10D5\u10DA\u10DD\u10D1\u10D0\u10E8\u10D8",M:"\u10D7\u10D5\u10D8\u10E1",MM:"%d \u10D7\u10D5\u10D8\u10E1",y:"\u10EC\u10D4\u10DA\u10D8",yy:"%d \u10EC\u10DA\u10D8\u10E1"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var Qn=k((kt,Ht)=>{(function(n,t){typeof kt=="object"&&typeof Ht<"u"?Ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_km=t(n.dayjs)})(kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"km",weekdays:"\u17A2\u17B6\u1791\u17B7\u178F\u17D2\u1799_\u1785\u17D0\u1793\u17D2\u1791_\u17A2\u1784\u17D2\u1782\u17B6\u179A_\u1796\u17BB\u1792_\u1796\u17D2\u179A\u17A0\u179F\u17D2\u1794\u178F\u17B7\u17CD_\u179F\u17BB\u1780\u17D2\u179A_\u179F\u17C5\u179A\u17CD".split("_"),months:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekStart:1,weekdaysShort:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),monthsShort:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekdaysMin:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s\u1791\u17C0\u178F",past:"%s\u1798\u17BB\u1793",s:"\u1794\u17C9\u17BB\u1793\u17D2\u1798\u17B6\u1793\u179C\u17B7\u1793\u17B6\u1791\u17B8",m:"\u1798\u17BD\u1799\u1793\u17B6\u1791\u17B8",mm:"%d \u1793\u17B6\u1791\u17B8",h:"\u1798\u17BD\u1799\u1798\u17C9\u17C4\u1784",hh:"%d \u1798\u17C9\u17C4\u1784",d:"\u1798\u17BD\u1799\u1790\u17D2\u1784\u17C3",dd:"%d \u1790\u17D2\u1784\u17C3",M:"\u1798\u17BD\u1799\u1781\u17C2",MM:"%d \u1781\u17C2",y:"\u1798\u17BD\u1799\u1786\u17D2\u1793\u17B6\u17C6",yy:"%d \u1786\u17D2\u1793\u17B6\u17C6"}};return s.default.locale(i,null,!0),i})});var Xn=k((jt,Tt)=>{(function(n,t){typeof jt=="object"&&typeof Tt<"u"?Tt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lt=t(n.dayjs)})(jt,function(n){"use strict";function t(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var s=t(n),i="sausio_vasario_kovo_baland\u017Eio_gegu\u017E\u0117s_bir\u017Eelio_liepos_rugpj\u016B\u010Dio_rugs\u0117jo_spalio_lapkri\u010Dio_gruod\u017Eio".split("_"),e="sausis_vasaris_kovas_balandis_gegu\u017E\u0117_bir\u017Eelis_liepa_rugpj\u016Btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),r=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,a=function(o,d){return r.test(d)?i[o.month()]:e[o.month()]};a.s=e,a.f=i;var u={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_tre\u010Diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_\u0161e\u0161".split("_"),weekdaysMin:"s_p_a_t_k_pn_\u0161".split("_"),months:a,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(o){return o+"."},weekStart:1,relativeTime:{future:"u\u017E %s",past:"prie\u0161 %s",s:"kelias sekundes",m:"minut\u0119",mm:"%d minutes",h:"valand\u0105",hh:"%d valandas",d:"dien\u0105",dd:"%d dienas",M:"m\u0117nes\u012F",MM:"%d m\u0117nesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return s.default.locale(u,null,!0),u})});var Bn=k((wt,$t)=>{(function(n,t){typeof wt=="object"&&typeof $t<"u"?$t.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lv=t(n.dayjs)})(wt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"lv",weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janv\u0101ris_febru\u0101ris_marts_apr\u012Blis_maijs_j\u016Bnijs_j\u016Blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016Bn_j\u016Bl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:"da\u017E\u0101m sekund\u0113m",m:"min\u016Btes",mm:"%d min\u016Bt\u0113m",h:"stundas",hh:"%d stund\u0101m",d:"dienas",dd:"%d dien\u0101m",M:"m\u0113ne\u0161a",MM:"%d m\u0113ne\u0161iem",y:"gada",yy:"%d gadiem"}};return s.default.locale(i,null,!0),i})});var ei=k((Ct,Ot)=>{(function(n,t){typeof Ct=="object"&&typeof Ot<"u"?Ot.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ms=t(n.dayjs)})(Ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var ti=k((zt,At)=>{(function(n,t){typeof zt=="object"&&typeof At<"u"?At.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_my=t(n.dayjs)})(zt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"my",weekdays:"\u1010\u1014\u1004\u103A\u1039\u1002\u1014\u103D\u1031_\u1010\u1014\u1004\u103A\u1039\u101C\u102C_\u1021\u1004\u103A\u1039\u1002\u102B_\u1017\u102F\u1012\u1039\u1013\u101F\u1030\u1038_\u1000\u103C\u102C\u101E\u1015\u1010\u1031\u1038_\u101E\u1031\u102C\u1000\u103C\u102C_\u1005\u1014\u1031".split("_"),months:"\u1007\u1014\u103A\u1014\u101D\u102B\u101B\u102E_\u1016\u1031\u1016\u1031\u102C\u103A\u101D\u102B\u101B\u102E_\u1019\u1010\u103A_\u1027\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u1007\u1030\u101C\u102D\u102F\u1004\u103A_\u101E\u103C\u1002\u102F\u1010\u103A_\u1005\u1000\u103A\u1010\u1004\u103A\u1018\u102C_\u1021\u1031\u102C\u1000\u103A\u1010\u102D\u102F\u1018\u102C_\u1014\u102D\u102F\u101D\u1004\u103A\u1018\u102C_\u1012\u102E\u1007\u1004\u103A\u1018\u102C".split("_"),weekStart:1,weekdaysShort:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),monthsShort:"\u1007\u1014\u103A_\u1016\u1031_\u1019\u1010\u103A_\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u101C\u102D\u102F\u1004\u103A_\u101E\u103C_\u1005\u1000\u103A_\u1021\u1031\u102C\u1000\u103A_\u1014\u102D\u102F_\u1012\u102E".split("_"),weekdaysMin:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"\u101C\u102C\u1019\u100A\u103A\u1037 %s \u1019\u103E\u102C",past:"\u101C\u103D\u1014\u103A\u1001\u1032\u1037\u101E\u1031\u102C %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103A.\u1021\u1014\u100A\u103A\u1038\u1004\u101A\u103A",m:"\u1010\u1005\u103A\u1019\u102D\u1014\u1005\u103A",mm:"%d \u1019\u102D\u1014\u1005\u103A",h:"\u1010\u1005\u103A\u1014\u102C\u101B\u102E",hh:"%d \u1014\u102C\u101B\u102E",d:"\u1010\u1005\u103A\u101B\u1000\u103A",dd:"%d \u101B\u1000\u103A",M:"\u1010\u1005\u103A\u101C",MM:"%d \u101C",y:"\u1010\u1005\u103A\u1014\u103E\u1005\u103A",yy:"%d \u1014\u103E\u1005\u103A"}};return s.default.locale(i,null,!0),i})});var ni=k((It,qt)=>{(function(n,t){typeof It=="object"&&typeof qt<"u"?qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nl=t(n.dayjs)})(It,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return"["+e+(e===1||e===8||e>=20?"ste":"de")+"]"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return s.default.locale(i,null,!0),i})});var ii=k((xt,Nt)=>{(function(n,t){typeof xt=="object"&&typeof Nt<"u"?Nt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nb=t(n.dayjs)})(xt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nb",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),weekdaysMin:"s\xF8_ma_ti_on_to_fr_l\xF8".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var si=k((Et,Ft)=>{(function(n,t){typeof Et=="object"&&typeof Ft<"u"?Ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pl=t(n.dayjs)})(Et,function(n){"use strict";function t(_){return _&&typeof _=="object"&&"default"in _?_:{default:_}}var s=t(n);function i(_){return _%10<5&&_%10>1&&~~(_/10)%10!=1}function e(_,y,l){var f=_+" ";switch(l){case"m":return y?"minuta":"minut\u0119";case"mm":return f+(i(_)?"minuty":"minut");case"h":return y?"godzina":"godzin\u0119";case"hh":return f+(i(_)?"godziny":"godzin");case"MM":return f+(i(_)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return f+(i(_)?"lata":"lat")}}var r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015Bnia_pa\u017Adziernika_listopada_grudnia".split("_"),a="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017Adziernik_listopad_grudzie\u0144".split("_"),u=/D MMMM/,o=function(_,y){return u.test(y)?r[_.month()]:a[_.month()]};o.s=a,o.f=r;var d={name:"pl",weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015Broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015Br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015Ar_Cz_Pt_So".split("_"),months:o,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017A_lis_gru".split("_"),ordinal:function(_){return _+"."},weekStart:1,yearStart:4,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:e,mm:e,h:e,hh:e,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:e,y:"rok",yy:e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return s.default.locale(d,null,!0),d})});var ri=k((Jt,Wt)=>{(function(n,t){typeof Jt=="object"&&typeof Wt<"u"?Wt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt_br=t(n.dayjs)})(Jt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt-br",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xE1b".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_S\xE1".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ai=k((Ut,Pt)=>{(function(n,t){typeof Ut=="object"&&typeof Pt<"u"?Pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt=t(n.dayjs)})(Ut,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sab".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_Sa".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ui=k((Rt,Gt)=>{(function(n,t){typeof Rt=="object"&&typeof Gt<"u"?Gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ro=t(n.dayjs)})(Rt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ro",weekdays:"Duminic\u0103_Luni_Mar\u021Bi_Miercuri_Joi_Vineri_S\xE2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xE2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xE2".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"c\xE2teva secunde",m:"un minut",mm:"%d minute",h:"o or\u0103",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lun\u0103",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var oi=k((Zt,Vt)=>{(function(n,t){typeof Zt=="object"&&typeof Vt<"u"?Vt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ru=t(n.dayjs)})(Zt,function(n){"use strict";function t(l){return l&&typeof l=="object"&&"default"in l?l:{default:l}}var s=t(n),i="\u044F\u043D\u0432\u0430\u0440\u044F_\u0444\u0435\u0432\u0440\u0430\u043B\u044F_\u043C\u0430\u0440\u0442\u0430_\u0430\u043F\u0440\u0435\u043B\u044F_\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044F_\u043E\u043A\u0442\u044F\u0431\u0440\u044F_\u043D\u043E\u044F\u0431\u0440\u044F_\u0434\u0435\u043A\u0430\u0431\u0440\u044F".split("_"),e="\u044F\u043D\u0432\u0430\u0440\u044C_\u0444\u0435\u0432\u0440\u0430\u043B\u044C_\u043C\u0430\u0440\u0442_\u0430\u043F\u0440\u0435\u043B\u044C_\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C_\u043E\u043A\u0442\u044F\u0431\u0440\u044C_\u043D\u043E\u044F\u0431\u0440\u044C_\u0434\u0435\u043A\u0430\u0431\u0440\u044C".split("_"),r="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440._\u0430\u043F\u0440._\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),a="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440\u0442_\u0430\u043F\u0440._\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),u=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function o(l,f,m){var Y,L;return m==="m"?f?"\u043C\u0438\u043D\u0443\u0442\u0430":"\u043C\u0438\u043D\u0443\u0442\u0443":l+" "+(Y=+l,L={mm:f?"\u043C\u0438\u043D\u0443\u0442\u0430_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442":"\u043C\u0438\u043D\u0443\u0442\u0443_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043E\u0432",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u044F_\u0434\u043D\u0435\u0439",MM:"\u043C\u0435\u0441\u044F\u0446_\u043C\u0435\u0441\u044F\u0446\u0430_\u043C\u0435\u0441\u044F\u0446\u0435\u0432",yy:"\u0433\u043E\u0434_\u0433\u043E\u0434\u0430_\u043B\u0435\u0442"}[m].split("_"),Y%10==1&&Y%100!=11?L[0]:Y%10>=2&&Y%10<=4&&(Y%100<10||Y%100>=20)?L[1]:L[2])}var d=function(l,f){return u.test(f)?i[l.month()]:e[l.month()]};d.s=e,d.f=i;var _=function(l,f){return u.test(f)?r[l.month()]:a[l.month()]};_.s=a,_.f=r;var y={name:"ru",weekdays:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435_\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A_\u0432\u0442\u043E\u0440\u043D\u0438\u043A_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043F\u044F\u0442\u043D\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u0432\u0441\u043A_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u0432\u0441_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:d,monthsShort:_,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043D\u0430\u0437\u0430\u0434",s:"\u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434",m:o,mm:o,h:"\u0447\u0430\u0441",hh:o,d:"\u0434\u0435\u043D\u044C",dd:o,M:"\u043C\u0435\u0441\u044F\u0446",MM:o,y:"\u0433\u043E\u0434",yy:o},ordinal:function(l){return l},meridiem:function(l){return l<4?"\u043D\u043E\u0447\u0438":l<12?"\u0443\u0442\u0440\u0430":l<17?"\u0434\u043D\u044F":"\u0432\u0435\u0447\u0435\u0440\u0430"}};return s.default.locale(y,null,!0),y})});var di=k((Kt,Qt)=>{(function(n,t){typeof Kt=="object"&&typeof Qt<"u"?Qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_sv=t(n.dayjs)})(Kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"sv",weekdays:"s\xF6ndag_m\xE5ndag_tisdag_onsdag_torsdag_fredag_l\xF6rdag".split("_"),weekdaysShort:"s\xF6n_m\xE5n_tis_ons_tor_fre_l\xF6r".split("_"),weekdaysMin:"s\xF6_m\xE5_ti_on_to_fr_l\xF6".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var r=e%10;return"["+e+(r===1||r===2?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"f\xF6r %s sedan",s:"n\xE5gra sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xE5nad",MM:"%d m\xE5nader",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var _i=k((Xt,Bt)=>{(function(n,t){typeof Xt=="object"&&typeof Bt<"u"?Bt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_th=t(n.dayjs)})(Xt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"th",weekdays:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysShort:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysMin:"\u0E2D\u0E32._\u0E08._\u0E2D._\u0E1E._\u0E1E\u0E24._\u0E28._\u0E2A.".split("_"),months:"\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21_\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C_\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21_\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19_\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21_\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19_\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21_\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21_\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19_\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21_\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19_\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21".split("_"),monthsShort:"\u0E21.\u0E04._\u0E01.\u0E1E._\u0E21\u0E35.\u0E04._\u0E40\u0E21.\u0E22._\u0E1E.\u0E04._\u0E21\u0E34.\u0E22._\u0E01.\u0E04._\u0E2A.\u0E04._\u0E01.\u0E22._\u0E15.\u0E04._\u0E1E.\u0E22._\u0E18.\u0E04.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm",LLLL:"\u0E27\u0E31\u0E19dddd\u0E17\u0E35\u0E48 D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm"},relativeTime:{future:"\u0E2D\u0E35\u0E01 %s",past:"%s\u0E17\u0E35\u0E48\u0E41\u0E25\u0E49\u0E27",s:"\u0E44\u0E21\u0E48\u0E01\u0E35\u0E48\u0E27\u0E34\u0E19\u0E32\u0E17\u0E35",m:"1 \u0E19\u0E32\u0E17\u0E35",mm:"%d \u0E19\u0E32\u0E17\u0E35",h:"1 \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",hh:"%d \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",d:"1 \u0E27\u0E31\u0E19",dd:"%d \u0E27\u0E31\u0E19",M:"1 \u0E40\u0E14\u0E37\u0E2D\u0E19",MM:"%d \u0E40\u0E14\u0E37\u0E2D\u0E19",y:"1 \u0E1B\u0E35",yy:"%d \u0E1B\u0E35"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var fi=k((en,tn)=>{(function(n,t){typeof en=="object"&&typeof tn<"u"?tn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_tr=t(n.dayjs)})(en,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"tr",weekdays:"Pazar_Pazartesi_Sal\u0131_\xC7ar\u015Famba_Per\u015Fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xC7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xC7a_Pe_Cu_Ct".split("_"),months:"Ocak_\u015Eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011Fustos_Eyl\xFCl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015Eub_Mar_Nis_May_Haz_Tem_A\u011Fu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s \xF6nce",s:"birka\xE7 saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xFCn",dd:"%d g\xFCn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var li=k((nn,sn)=>{(function(n,t){typeof nn=="object"&&typeof sn<"u"?sn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_uk=t(n.dayjs)})(nn,function(n){"use strict";function t(d){return d&&typeof d=="object"&&"default"in d?d:{default:d}}var s=t(n),i="\u0441\u0456\u0447\u043D\u044F_\u043B\u044E\u0442\u043E\u0433\u043E_\u0431\u0435\u0440\u0435\u0437\u043D\u044F_\u043A\u0432\u0456\u0442\u043D\u044F_\u0442\u0440\u0430\u0432\u043D\u044F_\u0447\u0435\u0440\u0432\u043D\u044F_\u043B\u0438\u043F\u043D\u044F_\u0441\u0435\u0440\u043F\u043D\u044F_\u0432\u0435\u0440\u0435\u0441\u043D\u044F_\u0436\u043E\u0432\u0442\u043D\u044F_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043D\u044F".split("_"),e="\u0441\u0456\u0447\u0435\u043D\u044C_\u043B\u044E\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043D\u044C_\u043A\u0432\u0456\u0442\u0435\u043D\u044C_\u0442\u0440\u0430\u0432\u0435\u043D\u044C_\u0447\u0435\u0440\u0432\u0435\u043D\u044C_\u043B\u0438\u043F\u0435\u043D\u044C_\u0441\u0435\u0440\u043F\u0435\u043D\u044C_\u0432\u0435\u0440\u0435\u0441\u0435\u043D\u044C_\u0436\u043E\u0432\u0442\u0435\u043D\u044C_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043D\u044C".split("_"),r=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function a(d,_,y){var l,f;return y==="m"?_?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443":y==="h"?_?"\u0433\u043E\u0434\u0438\u043D\u0430":"\u0433\u043E\u0434\u0438\u043D\u0443":d+" "+(l=+d,f={ss:_?"\u0441\u0435\u043A\u0443\u043D\u0434\u0430_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434":"\u0441\u0435\u043A\u0443\u043D\u0434\u0443_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434",mm:_?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D",hh:_?"\u0433\u043E\u0434\u0438\u043D\u0430_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D":"\u0433\u043E\u0434\u0438\u043D\u0443_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u0456_\u0434\u043D\u0456\u0432",MM:"\u043C\u0456\u0441\u044F\u0446\u044C_\u043C\u0456\u0441\u044F\u0446\u0456_\u043C\u0456\u0441\u044F\u0446\u0456\u0432",yy:"\u0440\u0456\u043A_\u0440\u043E\u043A\u0438_\u0440\u043E\u043A\u0456\u0432"}[y].split("_"),l%10==1&&l%100!=11?f[0]:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?f[1]:f[2])}var u=function(d,_){return r.test(_)?i[d.month()]:e[d.month()]};u.s=e,u.f=i;var o={name:"uk",weekdays:"\u043D\u0435\u0434\u0456\u043B\u044F_\u043F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A_\u0432\u0456\u0432\u0442\u043E\u0440\u043E\u043A_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043F\u2019\u044F\u0442\u043D\u0438\u0446\u044F_\u0441\u0443\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u043D\u0434\u043B_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u043D\u0434_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:u,monthsShort:"\u0441\u0456\u0447_\u043B\u044E\u0442_\u0431\u0435\u0440_\u043A\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043B\u0438\u043F_\u0441\u0435\u0440\u043F_\u0432\u0435\u0440_\u0436\u043E\u0432\u0442_\u043B\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekStart:1,relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043E\u043C\u0443",s:"\u0434\u0435\u043A\u0456\u043B\u044C\u043A\u0430 \u0441\u0435\u043A\u0443\u043D\u0434",m:a,mm:a,h:a,hh:a,d:"\u0434\u0435\u043D\u044C",dd:a,M:"\u043C\u0456\u0441\u044F\u0446\u044C",MM:a,y:"\u0440\u0456\u043A",yy:a},ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"}};return s.default.locale(o,null,!0),o})});var mi=k((rn,an)=>{(function(n,t){typeof rn=="object"&&typeof an<"u"?an.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_vi=t(n.dayjs)})(rn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"vi",weekdays:"ch\u1EE7 nh\u1EADt_th\u1EE9 hai_th\u1EE9 ba_th\u1EE9 t\u01B0_th\u1EE9 n\u0103m_th\u1EE9 s\xE1u_th\u1EE9 b\u1EA3y".split("_"),months:"th\xE1ng 1_th\xE1ng 2_th\xE1ng 3_th\xE1ng 4_th\xE1ng 5_th\xE1ng 6_th\xE1ng 7_th\xE1ng 8_th\xE1ng 9_th\xE1ng 10_th\xE1ng 11_th\xE1ng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s t\u1EDBi",past:"%s tr\u01B0\u1EDBc",s:"v\xE0i gi\xE2y",m:"m\u1ED9t ph\xFAt",mm:"%d ph\xFAt",h:"m\u1ED9t gi\u1EDD",hh:"%d gi\u1EDD",d:"m\u1ED9t ng\xE0y",dd:"%d ng\xE0y",M:"m\u1ED9t th\xE1ng",MM:"%d th\xE1ng",y:"m\u1ED9t n\u0103m",yy:"%d n\u0103m"}};return s.default.locale(i,null,!0),i})});var ci=k((un,on)=>{(function(n,t){typeof un=="object"&&typeof on<"u"?on.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_cn=t(n.dayjs)})(un,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u5468":e+"\u65E5"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var a=100*e+r;return a<600?"\u51CC\u6668":a<900?"\u65E9\u4E0A":a<1100?"\u4E0A\u5348":a<1300?"\u4E2D\u5348":a<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var hi=k((dn,_n)=>{(function(n,t){typeof dn=="object"&&typeof _n<"u"?_n.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_tw=t(n.dayjs)})(dn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-tw",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u9031\u65E5_\u9031\u4E00_\u9031\u4E8C_\u9031\u4E09_\u9031\u56DB_\u9031\u4E94_\u9031\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u9031":e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5167",past:"%s\u524D",s:"\u5E7E\u79D2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5C0F\u6642",hh:"%d \u5C0F\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500B\u6708",MM:"%d \u500B\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var a=100*e+r;return a<600?"\u51CC\u6668":a<900?"\u65E9\u4E0A":a<1100?"\u4E0A\u5348":a<1300?"\u4E2D\u5348":a<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var ln=60,mn=ln*60,cn=mn*24,ji=cn*7,ae=1e3,ce=ln*ae,ge=mn*ae,hn=cn*ae,Mn=ji*ae,_e="millisecond",te="second",ne="minute",ie="hour",V="day",oe="week",R="month",he="quarter",K="year",se="date",yn="YYYY-MM-DDTHH:mm:ssZ",Se="Invalid Date",Yn=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,pn=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;var Ln={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var s=["th","st","nd","rd"],i=t%100;return"["+t+(s[(i-20)%10]||s[i]||s[0])+"]"}};var be=function(t,s,i){var e=String(t);return!e||e.length>=s?t:""+Array(s+1-e.length).join(i)+t},Ti=function(t){var s=-t.utcOffset(),i=Math.abs(s),e=Math.floor(i/60),r=i%60;return(s<=0?"+":"-")+be(e,2,"0")+":"+be(r,2,"0")},wi=function n(t,s){if(t.date()1)return n(a[0])}else{var u=t.name;ue[u]=t,e=u}return!i&&e&&(fe=e),e||!i&&fe},F=function(t,s){if(ke(t))return t.clone();var i=typeof s=="object"?s:{};return i.date=t,i.args=arguments,new ye(i)},zi=function(t,s){return F(t,{locale:s.$L,utc:s.$u,x:s.$x,$offset:s.$offset})},z=vn;z.l=Me;z.i=ke;z.w=zi;var Ai=function(t){var s=t.date,i=t.utc;if(s===null)return new Date(NaN);if(z.u(s))return new Date;if(s instanceof Date)return new Date(s);if(typeof s=="string"&&!/Z$/i.test(s)){var e=s.match(Yn);if(e){var r=e[2]-1||0,a=(e[7]||"0").substring(0,3);return i?new Date(Date.UTC(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,a)):new Date(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,a)}}return new Date(s)},ye=function(){function n(s){this.$L=Me(s.locale,null,!0),this.parse(s),this.$x=this.$x||s.x||{},this[gn]=!0}var t=n.prototype;return t.parse=function(i){this.$d=Ai(i),this.init()},t.init=function(){var i=this.$d;this.$y=i.getFullYear(),this.$M=i.getMonth(),this.$D=i.getDate(),this.$W=i.getDay(),this.$H=i.getHours(),this.$m=i.getMinutes(),this.$s=i.getSeconds(),this.$ms=i.getMilliseconds()},t.$utils=function(){return z},t.isValid=function(){return this.$d.toString()!==Se},t.isSame=function(i,e){var r=F(i);return this.startOf(e)<=r&&r<=this.endOf(e)},t.isAfter=function(i,e){return F(i)this.togglePanelVisibility(this.$refs.button)),this.$watch("focusedMonth",()=>{this.focusedMonth=+this.focusedMonth,this.focusedDate.month()!==this.focusedMonth&&(this.focusedDate=this.focusedDate.month(this.focusedMonth))}),this.$watch("focusedYear",()=>{if(this.focusedYear?.length>4&&(this.focusedYear=this.focusedYear.substring(0,4)),!this.focusedYear||this.focusedYear?.length!==4)return;let o=+this.focusedYear;Number.isInteger(o)||(o=O().tz(a).year(),this.focusedYear=o),this.focusedDate.year()!==o&&(this.focusedDate=this.focusedDate.year(o))}),this.$watch("focusedDate",()=>{let o=this.focusedDate.month(),d=this.focusedDate.year();this.focusedMonth!==o&&(this.focusedMonth=o),this.focusedYear!==d&&(this.focusedYear=d),this.setupDaysGrid()}),this.$watch("hour",()=>{let o=+this.hour;if(Number.isInteger(o)?o>23?this.hour=0:o<0?this.hour=23:this.hour=o:this.hour=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.hour(this.hour??0))}),this.$watch("minute",()=>{let o=+this.minute;if(Number.isInteger(o)?o>59?this.minute=0:o<0?this.minute=59:this.minute=o:this.minute=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.minute(this.minute??0))}),this.$watch("second",()=>{let o=+this.second;if(Number.isInteger(o)?o>59?this.second=0:o<0?this.second=59:this.second=o:this.second=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.second(this.second??0))}),this.$watch("state",()=>{if(this.state===void 0)return;let o=this.getSelectedDate();if(o===null){this.clearState();return}this.getMaxDate()!==null&&o?.isAfter(this.getMaxDate())&&(o=null),this.getMinDate()!==null&&o?.isBefore(this.getMinDate())&&(o=null);let d=o?.hour()??0;this.hour!==d&&(this.hour=d);let _=o?.minute()??0;this.minute!==_&&(this.minute=_);let y=o?.second()??0;this.second!==y&&(this.second=y),this.setDisplayText()})},clearState:function(){this.isClearingState=!0,this.setState(null),this.hour=0,this.minute=0,this.second=0,this.$nextTick(()=>this.isClearingState=!1)},dateIsDisabled:function(u){return!!(this.$refs?.disabledDates&&JSON.parse(this.$refs.disabledDates.value??[]).some(o=>(o=O(o),o.isValid()?o.isSame(u,"day"):!1))||this.getMaxDate()&&u.isAfter(this.getMaxDate(),"day")||this.getMinDate()&&u.isBefore(this.getMinDate(),"day"))},dayIsDisabled:function(u){return this.focusedDate??(this.focusedDate=O().tz(a)),this.dateIsDisabled(this.focusedDate.date(u))},dayIsSelected:function(u){let o=this.getSelectedDate();return o===null?!1:(this.focusedDate??(this.focusedDate=O().tz(a)),o.date()===u&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year())},dayIsToday:function(u){let o=O().tz(a);return this.focusedDate??(this.focusedDate=o),o.date()===u&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year()},focusPreviousDay:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.subtract(1,"day")},focusPreviousWeek:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.subtract(1,"week")},focusNextDay:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.add(1,"day")},focusNextWeek:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.add(1,"week")},getDayLabels:function(){let u=O.weekdaysShort();return t===0?u:[...u.slice(t),...u.slice(0,t)]},getMaxDate:function(){let u=O(this.$refs.maxDate?.value);return u.isValid()?u:null},getMinDate:function(){let u=O(this.$refs.minDate?.value);return u.isValid()?u:null},getSelectedDate:function(){if(this.state===void 0||this.state===null)return null;let u=O(this.state);return u.isValid()?u:null},togglePanelVisibility:function(){this.isOpen()||(this.focusedDate=this.getSelectedDate()??this.getMinDate()??O().tz(a),this.setupDaysGrid()),this.$refs.panel.toggle(this.$refs.button)},selectDate:function(u=null){u&&this.setFocusedDay(u),this.focusedDate??(this.focusedDate=O().tz(a)),this.setState(this.focusedDate),e&&this.togglePanelVisibility()},setDisplayText:function(){this.displayText=this.getSelectedDate()?this.getSelectedDate().format(n):""},setMonths:function(){this.months=O.months()},setDayLabels:function(){this.dayLabels=this.getDayLabels()},setupDaysGrid:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.emptyDaysInFocusedMonth=Array.from({length:this.focusedDate.date(8-t).day()},(u,o)=>o+1),this.daysInFocusedMonth=Array.from({length:this.focusedDate.daysInMonth()},(u,o)=>o+1)},setFocusedDay:function(u){this.focusedDate=(this.focusedDate??O().tz(a)).date(u)},setState:function(u){if(u===null){this.state=null,this.setDisplayText();return}this.dateIsDisabled(u)||(this.state=u.hour(this.hour??0).minute(this.minute??0).second(this.second??0).format("YYYY-MM-DD HH:mm:ss"),this.setDisplayText())},isOpen:function(){return this.$refs.panel?.style.display==="block"}}}var Mi={ar:wn(),bs:$n(),ca:Cn(),ckb:Pe(),cs:zn(),cy:An(),da:In(),de:qn(),en:xn(),es:Nn(),et:En(),fa:Fn(),fi:Jn(),fr:Wn(),hi:Un(),hu:Pn(),hy:Rn(),id:Gn(),it:Zn(),ja:Vn(),ka:Kn(),km:Qn(),ku:Pe(),lt:Xn(),lv:Bn(),ms:ei(),my:ti(),nl:ni(),no:ii(),pl:si(),pt_BR:ri(),pt_PT:ai(),ro:ui(),ru:oi(),sv:di(),th:_i(),tr:fi(),uk:li(),vi:mi(),zh_CN:ci(),zh_TW:hi()};export{Ii as default}; diff --git a/public/js/filament/forms/components/file-upload.js b/public/js/filament/forms/components/file-upload.js new file mode 100644 index 000000000..09cc6082c --- /dev/null +++ b/public/js/filament/forms/components/file-upload.js @@ -0,0 +1,123 @@ +var er=Object.defineProperty;var tr=(e,t)=>{for(var i in t)er(e,i,{get:t[i],enumerable:!0})};var oa={};tr(oa,{FileOrigin:()=>Ct,FileStatus:()=>bt,OptionTypes:()=>Ui,Status:()=>oo,create:()=>ft,destroy:()=>gt,find:()=>Hi,getOptions:()=>ji,parse:()=>Wi,registerPlugin:()=>ve,setOptions:()=>Ft,supported:()=>Gi});var ir=e=>e instanceof HTMLElement,ar=(e,t=[],i=[])=>{let a={...e},n=[],o=[],l=()=>({...a}),r=()=>{let f=[...n];return n.length=0,f},s=()=>{let f=[...o];o.length=0,f.forEach(({type:g,data:h})=>{p(g,h)})},p=(f,g,h)=>{if(h&&!document.hidden){o.push({type:f,data:g});return}u[f]&&u[f](g),n.push({type:f,data:g})},c=(f,...g)=>m[f]?m[f](...g):null,d={getState:l,processActionQueue:r,processDispatchQueue:s,dispatch:p,query:c},m={};t.forEach(f=>{m={...f(a),...m}});let u={};return i.forEach(f=>{u={...f(p,c,a),...u}}),d},nr=(e,t,i)=>{if(typeof i=="function"){e[t]=i;return}Object.defineProperty(e,t,{...i})},te=(e,t)=>{for(let i in e)e.hasOwnProperty(i)&&t(i,e[i])},We=e=>{let t={};return te(e,i=>{nr(t,i,e[i])}),t},se=(e,t,i=null)=>{if(i===null)return e.getAttribute(t)||e.hasAttribute(t);e.setAttribute(t,i)},or="http://www.w3.org/2000/svg",lr=["svg","path"],Pa=e=>lr.includes(e),oi=(e,t,i={})=>{typeof t=="object"&&(i=t,t=null);let a=Pa(e)?document.createElementNS(or,e):document.createElement(e);return t&&(Pa(e)?se(a,"class",t):a.className=t),te(i,(n,o)=>{se(a,n,o)}),a},rr=e=>(t,i)=>{typeof i<"u"&&e.children[i]?e.insertBefore(t,e.children[i]):e.appendChild(t)},sr=(e,t)=>(i,a)=>(typeof a<"u"?t.splice(a,0,i):t.push(i),i),cr=(e,t)=>i=>(t.splice(t.indexOf(i),1),i.element.parentNode&&e.removeChild(i.element),i),dr=typeof window<"u"&&typeof window.document<"u",bn=()=>dr,pr=bn()?oi("svg"):{},mr="children"in pr?e=>e.children.length:e=>e.childNodes.length,Tn=(e,t,i,a)=>{let n=i[0]||e.left,o=i[1]||e.top,l=n+e.width,r=o+e.height*(a[1]||1),s={element:{...e},inner:{left:e.left,top:e.top,right:e.right,bottom:e.bottom},outer:{left:n,top:o,right:l,bottom:r}};return t.filter(p=>!p.isRectIgnored()).map(p=>p.rect).forEach(p=>{Da(s.inner,{...p.inner}),Da(s.outer,{...p.outer})}),Fa(s.inner),s.outer.bottom+=s.element.marginBottom,s.outer.right+=s.element.marginRight,Fa(s.outer),s},Da=(e,t)=>{t.top+=e.top,t.right+=e.left,t.bottom+=e.top,t.left+=e.left,t.bottom>e.bottom&&(e.bottom=t.bottom),t.right>e.right&&(e.right=t.right)},Fa=e=>{e.width=e.right-e.left,e.height=e.bottom-e.top},$e=e=>typeof e=="number",ur=(e,t,i,a=.001)=>Math.abs(e-t){let a=null,n=null,o=0,l=!1,p=We({interpolate:(c,d)=>{if(l)return;if(!($e(a)&&$e(n))){l=!0,o=0;return}let m=-(n-a)*e;o+=m/i,n+=o,o*=t,ur(n,a,o)||d?(n=a,o=0,l=!0,p.onupdate(n),p.oncomplete(n)):p.onupdate(n)},target:{set:c=>{if($e(c)&&!$e(n)&&(n=c),a===null&&(a=c,n=c),a=c,n===a||typeof a>"u"){l=!0,o=0,p.onupdate(n),p.oncomplete(n);return}l=!1},get:()=>a},resting:{get:()=>l},onupdate:c=>{},oncomplete:c=>{}});return p};var gr=e=>e<.5?2*e*e:-1+(4-2*e)*e,hr=({duration:e=500,easing:t=gr,delay:i=0}={})=>{let a=null,n,o,l=!0,r=!1,s=null,c=We({interpolate:(d,m)=>{l||s===null||(a===null&&(a=d),!(d-a=e||m?(n=1,o=r?0:1,c.onupdate(o*s),c.oncomplete(o*s),l=!0):(o=n/e,c.onupdate((n>=0?t(r?1-o:o):0)*s))))},target:{get:()=>r?0:s,set:d=>{if(s===null){s=d,c.onupdate(d),c.oncomplete(d);return}dl},onupdate:d=>{},oncomplete:d=>{}});return c},za={spring:fr,tween:hr},Er=(e,t,i)=>{let a=e[t]&&typeof e[t][i]=="object"?e[t][i]:e[t]||e,n=typeof a=="string"?a:a.type,o=typeof a=="object"?{...a}:{};return za[n]?za[n](o):null},qi=(e,t,i,a=!1)=>{t=Array.isArray(t)?t:[t],t.forEach(n=>{e.forEach(o=>{let l=o,r=()=>i[o],s=p=>i[o]=p;typeof o=="object"&&(l=o.key,r=o.getter||r,s=o.setter||s),!(n[l]&&!a)&&(n[l]={get:r,set:s})})})},br=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a})=>{let n={...t},o=[];return te(e,(l,r)=>{let s=Er(r);if(!s)return;s.onupdate=c=>{t[l]=c},s.target=n[l],qi([{key:l,setter:c=>{s.target!==c&&(s.target=c)},getter:()=>t[l]}],[i,a],t,!0),o.push(s)}),{write:l=>{let r=document.hidden,s=!0;return o.forEach(p=>{p.resting||(s=!1),p.interpolate(l,r)}),s},destroy:()=>{}}},Tr=e=>(t,i)=>{e.addEventListener(t,i)},Ir=e=>(t,i)=>{e.removeEventListener(t,i)},vr=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,viewState:n,view:o})=>{let l=[],r=Tr(o.element),s=Ir(o.element);return a.on=(p,c)=>{l.push({type:p,fn:c}),r(p,c)},a.off=(p,c)=>{l.splice(l.findIndex(d=>d.type===p&&d.fn===c),1),s(p,c)},{write:()=>!0,destroy:()=>{l.forEach(p=>{s(p.type,p.fn)})}}},xr=({mixinConfig:e,viewProps:t,viewExternalAPI:i})=>{qi(e,i,t)},ue=e=>e!=null,yr={opacity:1,scaleX:1,scaleY:1,translateX:0,translateY:0,rotateX:0,rotateY:0,rotateZ:0,originX:0,originY:0},_r=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,view:n})=>{let o={...t},l={};qi(e,[i,a],t);let r=()=>[t.translateX||0,t.translateY||0],s=()=>[t.scaleX||0,t.scaleY||0],p=()=>n.rect?Tn(n.rect,n.childViews,r(),s()):null;return i.rect={get:p},a.rect={get:p},e.forEach(c=>{t[c]=typeof o[c]>"u"?yr[c]:o[c]}),{write:()=>{if(Rr(l,t))return wr(n.element,t),Object.assign(l,{...t}),!0},destroy:()=>{}}},Rr=(e,t)=>{if(Object.keys(e).length!==Object.keys(t).length)return!0;for(let i in t)if(t[i]!==e[i])return!0;return!1},wr=(e,{opacity:t,perspective:i,translateX:a,translateY:n,scaleX:o,scaleY:l,rotateX:r,rotateY:s,rotateZ:p,originX:c,originY:d,width:m,height:u})=>{let f="",g="";(ue(c)||ue(d))&&(g+=`transform-origin: ${c||0}px ${d||0}px;`),ue(i)&&(f+=`perspective(${i}px) `),(ue(a)||ue(n))&&(f+=`translate3d(${a||0}px, ${n||0}px, 0) `),(ue(o)||ue(l))&&(f+=`scale3d(${ue(o)?o:1}, ${ue(l)?l:1}, 1) `),ue(p)&&(f+=`rotateZ(${p}rad) `),ue(r)&&(f+=`rotateX(${r}rad) `),ue(s)&&(f+=`rotateY(${s}rad) `),f.length&&(g+=`transform:${f};`),ue(t)&&(g+=`opacity:${t};`,t===0&&(g+="visibility:hidden;"),t<1&&(g+="pointer-events:none;")),ue(u)&&(g+=`height:${u}px;`),ue(m)&&(g+=`width:${m}px;`);let h=e.elementCurrentStyle||"";(g.length!==h.length||g!==h)&&(e.style.cssText=g,e.elementCurrentStyle=g)},Sr={styles:_r,listeners:vr,animations:br,apis:xr},Ca=(e={},t={},i={})=>(t.layoutCalculated||(e.paddingTop=parseInt(i.paddingTop,10)||0,e.marginTop=parseInt(i.marginTop,10)||0,e.marginRight=parseInt(i.marginRight,10)||0,e.marginBottom=parseInt(i.marginBottom,10)||0,e.marginLeft=parseInt(i.marginLeft,10)||0,t.layoutCalculated=!0),e.left=t.offsetLeft||0,e.top=t.offsetTop||0,e.width=t.offsetWidth||0,e.height=t.offsetHeight||0,e.right=e.left+e.width,e.bottom=e.top+e.height,e.scrollTop=t.scrollTop,e.hidden=t.offsetParent===null,e),ne=({tag:e="div",name:t=null,attributes:i={},read:a=()=>{},write:n=()=>{},create:o=()=>{},destroy:l=()=>{},filterFrameActionsForChild:r=(u,f)=>f,didCreateView:s=()=>{},didWriteView:p=()=>{},ignoreRect:c=!1,ignoreRectUpdate:d=!1,mixins:m=[]}={})=>(u,f={})=>{let g=oi(e,`filepond--${t}`,i),h=window.getComputedStyle(g,null),I=Ca(),E=null,T=!1,v=[],y=[],b={},w={},x=[n],_=[a],P=[l],O=()=>g,M=()=>v.concat(),N=()=>b,S=k=>(H,q)=>H(k,q),D=()=>E||(E=Tn(I,v,[0,0],[1,1]),E),R=()=>h,L=()=>{E=null,v.forEach(q=>q._read()),!(d&&I.width&&I.height)&&Ca(I,g,h);let H={root:$,props:f,rect:I};_.forEach(q=>q(H))},z=(k,H,q)=>{let le=H.length===0;return x.forEach(ee=>{ee({props:f,root:$,actions:H,timestamp:k,shouldOptimize:q})===!1&&(le=!1)}),y.forEach(ee=>{ee.write(k)===!1&&(le=!1)}),v.filter(ee=>!!ee.element.parentNode).forEach(ee=>{ee._write(k,r(ee,H),q)||(le=!1)}),v.forEach((ee,dt)=>{ee.element.parentNode||($.appendChild(ee.element,dt),ee._read(),ee._write(k,r(ee,H),q),le=!1)}),T=le,p({props:f,root:$,actions:H,timestamp:k}),le},F=()=>{y.forEach(k=>k.destroy()),P.forEach(k=>{k({root:$,props:f})}),v.forEach(k=>k._destroy())},G={element:{get:O},style:{get:R},childViews:{get:M}},C={...G,rect:{get:D},ref:{get:N},is:k=>t===k,appendChild:rr(g),createChildView:S(u),linkView:k=>(v.push(k),k),unlinkView:k=>{v.splice(v.indexOf(k),1)},appendChildView:sr(g,v),removeChildView:cr(g,v),registerWriter:k=>x.push(k),registerReader:k=>_.push(k),registerDestroyer:k=>P.push(k),invalidateLayout:()=>g.layoutCalculated=!1,dispatch:u.dispatch,query:u.query},Y={element:{get:O},childViews:{get:M},rect:{get:D},resting:{get:()=>T},isRectIgnored:()=>c,_read:L,_write:z,_destroy:F},Q={...G,rect:{get:()=>I}};Object.keys(m).sort((k,H)=>k==="styles"?1:H==="styles"?-1:0).forEach(k=>{let H=Sr[k]({mixinConfig:m[k],viewProps:f,viewState:w,viewInternalAPI:C,viewExternalAPI:Y,view:We(Q)});H&&y.push(H)});let $=We(C);o({root:$,props:f});let pe=mr(g);return v.forEach((k,H)=>{$.appendChild(k.element,pe+H)}),s($),We(Y)},Lr=(e,t,i=60)=>{let a="__framePainter";if(window[a]){window[a].readers.push(e),window[a].writers.push(t);return}window[a]={readers:[e],writers:[t]};let n=window[a],o=1e3/i,l=null,r=null,s=null,p=null,c=()=>{document.hidden?(s=()=>window.setTimeout(()=>d(performance.now()),o),p=()=>window.clearTimeout(r)):(s=()=>window.requestAnimationFrame(d),p=()=>window.cancelAnimationFrame(r))};document.addEventListener("visibilitychange",()=>{p&&p(),c(),d(performance.now())});let d=m=>{r=s(d),l||(l=m);let u=m-l;u<=o||(l=m-u%o,n.readers.forEach(f=>f()),n.writers.forEach(f=>f(m)))};return c(),d(performance.now()),{pause:()=>{p(r)}}},ge=(e,t)=>({root:i,props:a,actions:n=[],timestamp:o,shouldOptimize:l})=>{n.filter(r=>e[r.type]).forEach(r=>e[r.type]({root:i,props:a,action:r.data,timestamp:o,shouldOptimize:l})),t&&t({root:i,props:a,actions:n,timestamp:o,shouldOptimize:l})},Na=(e,t)=>t.parentNode.insertBefore(e,t),Ba=(e,t)=>t.parentNode.insertBefore(e,t.nextSibling),ci=e=>Array.isArray(e),Be=e=>e==null,Ar=e=>e.trim(),di=e=>""+e,Mr=(e,t=",")=>Be(e)?[]:ci(e)?e:di(e).split(t).map(Ar).filter(i=>i.length),In=e=>typeof e=="boolean",vn=e=>In(e)?e:e==="true",fe=e=>typeof e=="string",xn=e=>$e(e)?e:fe(e)?di(e).replace(/[a-z]+/gi,""):0,ni=e=>parseInt(xn(e),10),ka=e=>parseFloat(xn(e)),Et=e=>$e(e)&&isFinite(e)&&Math.floor(e)===e,Va=(e,t=1e3)=>{if(Et(e))return e;let i=di(e).trim();return/MB$/i.test(i)?(i=i.replace(/MB$i/,"").trim(),ni(i)*t*t):/KB/i.test(i)?(i=i.replace(/KB$i/,"").trim(),ni(i)*t):ni(i)},Xe=e=>typeof e=="function",Or=e=>{let t=self,i=e.split("."),a=null;for(;a=i.shift();)if(t=t[a],!t)return null;return t},Ga={process:"POST",patch:"PATCH",revert:"DELETE",fetch:"GET",restore:"GET",load:"GET"},Pr=e=>{let t={};return t.url=fe(e)?e:e.url||"",t.timeout=e.timeout?parseInt(e.timeout,10):0,t.headers=e.headers?e.headers:{},te(Ga,i=>{t[i]=Dr(i,e[i],Ga[i],t.timeout,t.headers)}),t.process=e.process||fe(e)||e.url?t.process:null,t.remove=e.remove||null,delete t.headers,t},Dr=(e,t,i,a,n)=>{if(t===null)return null;if(typeof t=="function")return t;let o={url:i==="GET"||i==="PATCH"?`?${e}=`:"",method:i,headers:n,withCredentials:!1,timeout:a,onload:null,ondata:null,onerror:null};if(fe(t))return o.url=t,o;if(Object.assign(o,t),fe(o.headers)){let l=o.headers.split(/:(.+)/);o.headers={header:l[0],value:l[1]}}return o.withCredentials=vn(o.withCredentials),o},Fr=e=>Pr(e),zr=e=>e===null,ce=e=>typeof e=="object"&&e!==null,Cr=e=>ce(e)&&fe(e.url)&&ce(e.process)&&ce(e.revert)&&ce(e.restore)&&ce(e.fetch),Di=e=>ci(e)?"array":zr(e)?"null":Et(e)?"int":/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(e)?"bytes":Cr(e)?"api":typeof e,Nr=e=>e.replace(/{\s*'/g,'{"').replace(/'\s*}/g,'"}').replace(/'\s*:/g,'":').replace(/:\s*'/g,':"').replace(/,\s*'/g,',"').replace(/'\s*,/g,'",'),Br={array:Mr,boolean:vn,int:e=>Di(e)==="bytes"?Va(e):ni(e),number:ka,float:ka,bytes:Va,string:e=>Xe(e)?e:di(e),function:e=>Or(e),serverapi:Fr,object:e=>{try{return JSON.parse(Nr(e))}catch{return null}}},kr=(e,t)=>Br[t](e),yn=(e,t,i)=>{if(e===t)return e;let a=Di(e);if(a!==i){let n=kr(e,i);if(a=Di(n),n===null)throw`Trying to assign value with incorrect type to "${option}", allowed type: "${i}"`;e=n}return e},Vr=(e,t)=>{let i=e;return{enumerable:!0,get:()=>i,set:a=>{i=yn(a,e,t)}}},Gr=e=>{let t={};return te(e,i=>{let a=e[i];t[i]=Vr(a[0],a[1])}),We(t)},Ur=e=>({items:[],listUpdateTimeout:null,itemUpdateTimeout:null,processingQueue:[],options:Gr(e)}),pi=(e,t="-")=>e.split(/(?=[A-Z])/).map(i=>i.toLowerCase()).join(t),Wr=(e,t)=>{let i={};return te(t,a=>{i[a]={get:()=>e.getState().options[a],set:n=>{e.dispatch(`SET_${pi(a,"_").toUpperCase()}`,{value:n})}}}),i},Hr=e=>(t,i,a)=>{let n={};return te(e,o=>{let l=pi(o,"_").toUpperCase();n[`SET_${l}`]=r=>{try{a.options[o]=r.value}catch{}t(`DID_SET_${l}`,{value:a.options[o]})}}),n},jr=e=>t=>{let i={};return te(e,a=>{i[`GET_${pi(a,"_").toUpperCase()}`]=n=>t.options[a]}),i},_e={API:1,DROP:2,BROWSE:3,PASTE:4,NONE:5},Yi=()=>Math.random().toString(36).substring(2,11),$i=(e,t)=>e.splice(t,1),qr=(e,t)=>{t?e():document.hidden?Promise.resolve(1).then(e):setTimeout(e,0)},mi=()=>{let e=[],t=(a,n)=>{$i(e,e.findIndex(o=>o.event===a&&(o.cb===n||!n)))},i=(a,n,o)=>{e.filter(l=>l.event===a).map(l=>l.cb).forEach(l=>qr(()=>l(...n),o))};return{fireSync:(a,...n)=>{i(a,n,!0)},fire:(a,...n)=>{i(a,n,!1)},on:(a,n)=>{e.push({event:a,cb:n})},onOnce:(a,n)=>{e.push({event:a,cb:(...o)=>{t(a,n),n(...o)}})},off:t}},_n=(e,t,i)=>{Object.getOwnPropertyNames(e).filter(a=>!i.includes(a)).forEach(a=>Object.defineProperty(t,a,Object.getOwnPropertyDescriptor(e,a)))},Yr=["fire","process","revert","load","on","off","onOnce","retryLoad","extend","archive","archived","release","released","requestProcessing","freeze"],he=e=>{let t={};return _n(e,t,Yr),t},$r=e=>{e.forEach((t,i)=>{t.released&&$i(e,i)})},U={INIT:1,IDLE:2,PROCESSING_QUEUED:9,PROCESSING:3,PROCESSING_COMPLETE:5,PROCESSING_ERROR:6,PROCESSING_REVERT_ERROR:10,LOADING:7,LOAD_ERROR:8},re={INPUT:1,LIMBO:2,LOCAL:3},Rn=e=>/[^0-9]+/.exec(e),wn=()=>Rn(1.1.toLocaleString())[0],Xr=()=>{let e=wn(),t=1e3.toLocaleString();return t!=="1000"?Rn(t)[0]:e==="."?",":"."},A={BOOLEAN:"boolean",INT:"int",NUMBER:"number",STRING:"string",ARRAY:"array",OBJECT:"object",FUNCTION:"function",ACTION:"action",SERVER_API:"serverapi",REGEX:"regex"},Xi=[],Ae=(e,t,i)=>new Promise((a,n)=>{let o=Xi.filter(r=>r.key===e).map(r=>r.cb);if(o.length===0){a(t);return}let l=o.shift();o.reduce((r,s)=>r.then(p=>s(p,i)),l(t,i)).then(r=>a(r)).catch(r=>n(r))}),tt=(e,t,i)=>Xi.filter(a=>a.key===e).map(a=>a.cb(t,i)),Qr=(e,t)=>Xi.push({key:e,cb:t}),Zr=e=>Object.assign(pt,e),li=()=>({...pt}),Kr=e=>{te(e,(t,i)=>{pt[t]&&(pt[t][0]=yn(i,pt[t][0],pt[t][1]))})},pt={id:[null,A.STRING],name:["filepond",A.STRING],disabled:[!1,A.BOOLEAN],className:[null,A.STRING],required:[!1,A.BOOLEAN],captureMethod:[null,A.STRING],allowSyncAcceptAttribute:[!0,A.BOOLEAN],allowDrop:[!0,A.BOOLEAN],allowBrowse:[!0,A.BOOLEAN],allowPaste:[!0,A.BOOLEAN],allowMultiple:[!1,A.BOOLEAN],allowReplace:[!0,A.BOOLEAN],allowRevert:[!0,A.BOOLEAN],allowRemove:[!0,A.BOOLEAN],allowProcess:[!0,A.BOOLEAN],allowReorder:[!1,A.BOOLEAN],allowDirectoriesOnly:[!1,A.BOOLEAN],storeAsFile:[!1,A.BOOLEAN],forceRevert:[!1,A.BOOLEAN],maxFiles:[null,A.INT],checkValidity:[!1,A.BOOLEAN],itemInsertLocationFreedom:[!0,A.BOOLEAN],itemInsertLocation:["before",A.STRING],itemInsertInterval:[75,A.INT],dropOnPage:[!1,A.BOOLEAN],dropOnElement:[!0,A.BOOLEAN],dropValidation:[!1,A.BOOLEAN],ignoredFiles:[[".ds_store","thumbs.db","desktop.ini"],A.ARRAY],instantUpload:[!0,A.BOOLEAN],maxParallelUploads:[2,A.INT],allowMinimumUploadDuration:[!0,A.BOOLEAN],chunkUploads:[!1,A.BOOLEAN],chunkForce:[!1,A.BOOLEAN],chunkSize:[5e6,A.INT],chunkRetryDelays:[[500,1e3,3e3],A.ARRAY],server:[null,A.SERVER_API],fileSizeBase:[1e3,A.INT],labelFileSizeBytes:["bytes",A.STRING],labelFileSizeKilobytes:["KB",A.STRING],labelFileSizeMegabytes:["MB",A.STRING],labelFileSizeGigabytes:["GB",A.STRING],labelDecimalSeparator:[wn(),A.STRING],labelThousandsSeparator:[Xr(),A.STRING],labelIdle:['Drag & Drop your files or Browse',A.STRING],labelInvalidField:["Field contains invalid files",A.STRING],labelFileWaitingForSize:["Waiting for size",A.STRING],labelFileSizeNotAvailable:["Size not available",A.STRING],labelFileCountSingular:["file in list",A.STRING],labelFileCountPlural:["files in list",A.STRING],labelFileLoading:["Loading",A.STRING],labelFileAdded:["Added",A.STRING],labelFileLoadError:["Error during load",A.STRING],labelFileRemoved:["Removed",A.STRING],labelFileRemoveError:["Error during remove",A.STRING],labelFileProcessing:["Uploading",A.STRING],labelFileProcessingComplete:["Upload complete",A.STRING],labelFileProcessingAborted:["Upload cancelled",A.STRING],labelFileProcessingError:["Error during upload",A.STRING],labelFileProcessingRevertError:["Error during revert",A.STRING],labelTapToCancel:["tap to cancel",A.STRING],labelTapToRetry:["tap to retry",A.STRING],labelTapToUndo:["tap to undo",A.STRING],labelButtonRemoveItem:["Remove",A.STRING],labelButtonAbortItemLoad:["Abort",A.STRING],labelButtonRetryItemLoad:["Retry",A.STRING],labelButtonAbortItemProcessing:["Cancel",A.STRING],labelButtonUndoItemProcessing:["Undo",A.STRING],labelButtonRetryItemProcessing:["Retry",A.STRING],labelButtonProcessItem:["Upload",A.STRING],iconRemove:['',A.STRING],iconProcess:['',A.STRING],iconRetry:['',A.STRING],iconUndo:['',A.STRING],iconDone:['',A.STRING],oninit:[null,A.FUNCTION],onwarning:[null,A.FUNCTION],onerror:[null,A.FUNCTION],onactivatefile:[null,A.FUNCTION],oninitfile:[null,A.FUNCTION],onaddfilestart:[null,A.FUNCTION],onaddfileprogress:[null,A.FUNCTION],onaddfile:[null,A.FUNCTION],onprocessfilestart:[null,A.FUNCTION],onprocessfileprogress:[null,A.FUNCTION],onprocessfileabort:[null,A.FUNCTION],onprocessfilerevert:[null,A.FUNCTION],onprocessfile:[null,A.FUNCTION],onprocessfiles:[null,A.FUNCTION],onremovefile:[null,A.FUNCTION],onpreparefile:[null,A.FUNCTION],onupdatefiles:[null,A.FUNCTION],onreorderfiles:[null,A.FUNCTION],beforeDropFile:[null,A.FUNCTION],beforeAddFile:[null,A.FUNCTION],beforeRemoveFile:[null,A.FUNCTION],beforePrepareFile:[null,A.FUNCTION],stylePanelLayout:[null,A.STRING],stylePanelAspectRatio:[null,A.STRING],styleItemPanelAspectRatio:[null,A.STRING],styleButtonRemoveItemPosition:["left",A.STRING],styleButtonProcessItemPosition:["right",A.STRING],styleLoadIndicatorPosition:["right",A.STRING],styleProgressIndicatorPosition:["right",A.STRING],styleButtonRemoveItemAlign:[!1,A.BOOLEAN],files:[[],A.ARRAY],credits:[["https://pqina.nl/","Powered by PQINA"],A.ARRAY]},Qe=(e,t)=>Be(t)?e[0]||null:Et(t)?e[t]||null:(typeof t=="object"&&(t=t.id),e.find(i=>i.id===t)||null),Sn=e=>{if(Be(e))return e;if(/:/.test(e)){let t=e.split(":");return t[1]/t[0]}return parseFloat(e)},Me=e=>e.filter(t=>!t.archived),Ln={EMPTY:0,IDLE:1,ERROR:2,BUSY:3,READY:4},Kt=null,Jr=()=>{if(Kt===null)try{let e=new DataTransfer;e.items.add(new File(["hello world"],"This_Works.txt"));let t=document.createElement("input");t.setAttribute("type","file"),t.files=e.files,Kt=t.files.length===1}catch{Kt=!1}return Kt},es=[U.LOAD_ERROR,U.PROCESSING_ERROR,U.PROCESSING_REVERT_ERROR],ts=[U.LOADING,U.PROCESSING,U.PROCESSING_QUEUED,U.INIT],is=[U.PROCESSING_COMPLETE],as=e=>es.includes(e.status),ns=e=>ts.includes(e.status),os=e=>is.includes(e.status),Ua=e=>ce(e.options.server)&&(ce(e.options.server.process)||Xe(e.options.server.process)),ls=e=>({GET_STATUS:()=>{let t=Me(e.items),{EMPTY:i,ERROR:a,BUSY:n,IDLE:o,READY:l}=Ln;return t.length===0?i:t.some(as)?a:t.some(ns)?n:t.some(os)?l:o},GET_ITEM:t=>Qe(e.items,t),GET_ACTIVE_ITEM:t=>Qe(Me(e.items),t),GET_ACTIVE_ITEMS:()=>Me(e.items),GET_ITEMS:()=>e.items,GET_ITEM_NAME:t=>{let i=Qe(e.items,t);return i?i.filename:null},GET_ITEM_SIZE:t=>{let i=Qe(e.items,t);return i?i.fileSize:null},GET_STYLES:()=>Object.keys(e.options).filter(t=>/^style/.test(t)).map(t=>({name:t,value:e.options[t]})),GET_PANEL_ASPECT_RATIO:()=>/circle/.test(e.options.stylePanelLayout)?1:Sn(e.options.stylePanelAspectRatio),GET_ITEM_PANEL_ASPECT_RATIO:()=>e.options.styleItemPanelAspectRatio,GET_ITEMS_BY_STATUS:t=>Me(e.items).filter(i=>i.status===t),GET_TOTAL_ITEMS:()=>Me(e.items).length,SHOULD_UPDATE_FILE_INPUT:()=>e.options.storeAsFile&&Jr()&&!Ua(e),IS_ASYNC:()=>Ua(e),GET_FILE_SIZE_LABELS:t=>({labelBytes:t("GET_LABEL_FILE_SIZE_BYTES")||void 0,labelKilobytes:t("GET_LABEL_FILE_SIZE_KILOBYTES")||void 0,labelMegabytes:t("GET_LABEL_FILE_SIZE_MEGABYTES")||void 0,labelGigabytes:t("GET_LABEL_FILE_SIZE_GIGABYTES")||void 0})}),rs=e=>{let t=Me(e.items).length;if(!e.options.allowMultiple)return t===0;let i=e.options.maxFiles;return i===null||tMath.max(Math.min(i,e),t),ss=(e,t,i)=>e.splice(t,0,i),cs=(e,t,i)=>Be(t)?null:typeof i>"u"?(e.push(t),t):(i=An(i,0,e.length),ss(e,i,t),t),Fi=e=>/^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i.test(e),zt=e=>`${e}`.split("/").pop().split("?").shift(),ui=e=>e.split(".").pop(),ds=e=>{if(typeof e!="string")return"";let t=e.split("/").pop();return/svg/.test(t)?"svg":/zip|compressed/.test(t)?"zip":/plain/.test(t)?"txt":/msword/.test(t)?"doc":/[a-z]+/.test(t)?t==="jpeg"?"jpg":t:""},Mt=(e,t="")=>(t+e).slice(-t.length),Mn=(e=new Date)=>`${e.getFullYear()}-${Mt(e.getMonth()+1,"00")}-${Mt(e.getDate(),"00")}_${Mt(e.getHours(),"00")}-${Mt(e.getMinutes(),"00")}-${Mt(e.getSeconds(),"00")}`,ht=(e,t,i=null,a=null)=>{let n=typeof i=="string"?e.slice(0,e.size,i):e.slice(0,e.size,e.type);return n.lastModifiedDate=new Date,e._relativePath&&(n._relativePath=e._relativePath),fe(t)||(t=Mn()),t&&a===null&&ui(t)?n.name=t:(a=a||ds(n.type),n.name=t+(a?"."+a:"")),n},ps=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,On=(e,t)=>{let i=ps();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},ms=(e,t)=>{let i=new ArrayBuffer(e.length),a=new Uint8Array(i);for(let n=0;n(/^data:(.+);/.exec(e)||[])[1]||null,us=e=>e.split(",")[1].replace(/\s/g,""),fs=e=>atob(us(e)),gs=e=>{let t=Pn(e),i=fs(e);return ms(i,t)},hs=(e,t,i)=>ht(gs(e),t,null,i),Es=e=>{if(!/^content-disposition:/i.test(e))return null;let t=e.split(/filename=|filename\*=.+''/).splice(1).map(i=>i.trim().replace(/^["']|[;"']{0,2}$/g,"")).filter(i=>i.length);return t.length?decodeURI(t[t.length-1]):null},bs=e=>{if(/content-length:/i.test(e)){let t=e.match(/[0-9]+/)[0];return t?parseInt(t,10):null}return null},Ts=e=>/x-content-transfer-id:/i.test(e)&&(e.split(":")[1]||"").trim()||null,Qi=e=>{let t={source:null,name:null,size:null},i=e.split(` +`);for(let a of i){let n=Es(a);if(n){t.name=n;continue}let o=bs(a);if(o){t.size=o;continue}let l=Ts(a);if(l){t.source=l;continue}}return t},Is=e=>{let t={source:null,complete:!1,progress:0,size:null,timestamp:null,duration:0,request:null},i=()=>t.progress,a=()=>{t.request&&t.request.abort&&t.request.abort()},n=()=>{let r=t.source;l.fire("init",r),r instanceof File?l.fire("load",r):r instanceof Blob?l.fire("load",ht(r,r.name)):Fi(r)?l.fire("load",hs(r)):o(r)},o=r=>{if(!e){l.fire("error",{type:"error",body:"Can't load URL",code:400});return}t.timestamp=Date.now(),t.request=e(r,s=>{t.duration=Date.now()-t.timestamp,t.complete=!0,s instanceof Blob&&(s=ht(s,s.name||zt(r))),l.fire("load",s instanceof Blob?s:s?s.body:null)},s=>{l.fire("error",typeof s=="string"?{type:"error",code:0,body:s}:s)},(s,p,c)=>{if(c&&(t.size=c),t.duration=Date.now()-t.timestamp,!s){t.progress=null;return}t.progress=p/c,l.fire("progress",t.progress)},()=>{l.fire("abort")},s=>{let p=Qi(typeof s=="string"?s:s.headers);l.fire("meta",{size:t.size||p.size,filename:p.name,source:p.source})})},l={...mi(),setSource:r=>t.source=r,getProgress:i,abort:a,load:n};return l},Wa=e=>/GET|HEAD/.test(e),Ze=(e,t,i)=>{let a={onheaders:()=>{},onprogress:()=>{},onload:()=>{},ontimeout:()=>{},onerror:()=>{},onabort:()=>{},abort:()=>{n=!0,l.abort()}},n=!1,o=!1;i={method:"POST",headers:{},withCredentials:!1,...i},t=encodeURI(t),Wa(i.method)&&e&&(t=`${t}${encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))}`);let l=new XMLHttpRequest,r=Wa(i.method)?l:l.upload;return r.onprogress=s=>{n||a.onprogress(s.lengthComputable,s.loaded,s.total)},l.onreadystatechange=()=>{l.readyState<2||l.readyState===4&&l.status===0||o||(o=!0,a.onheaders(l))},l.onload=()=>{l.status>=200&&l.status<300?a.onload(l):a.onerror(l)},l.onerror=()=>a.onerror(l),l.onabort=()=>{n=!0,a.onabort()},l.ontimeout=()=>a.ontimeout(l),l.open(i.method,t,!0),Et(i.timeout)&&(l.timeout=i.timeout),Object.keys(i.headers).forEach(s=>{let p=unescape(encodeURIComponent(i.headers[s]));l.setRequestHeader(s,p)}),i.responseType&&(l.responseType=i.responseType),i.withCredentials&&(l.withCredentials=!0),l.send(e),a},ie=(e,t,i,a)=>({type:e,code:t,body:i,headers:a}),Ke=e=>t=>{e(ie("error",0,"Timeout",t.getAllResponseHeaders()))},Ha=e=>/\?/.test(e),Dt=(...e)=>{let t="";return e.forEach(i=>{t+=Ha(t)&&Ha(i)?i.replace(/\?/,"&"):i}),t},Si=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return null;let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l,r,s,p)=>{let c=Ze(n,Dt(e,t.url),{...t,responseType:"blob"});return c.onload=d=>{let m=d.getAllResponseHeaders(),u=Qi(m).name||zt(n);o(ie("load",d.status,t.method==="HEAD"?null:ht(i(d.response),u),m))},c.onerror=d=>{l(ie("error",d.status,a(d.response)||d.statusText,d.getAllResponseHeaders()))},c.onheaders=d=>{p(ie("headers",d.status,null,d.getAllResponseHeaders()))},c.ontimeout=Ke(l),c.onprogress=r,c.onabort=s,c}},xe={QUEUED:0,COMPLETE:1,PROCESSING:2,ERROR:3,WAITING:4},vs=(e,t,i,a,n,o,l,r,s,p,c)=>{let d=[],{chunkTransferId:m,chunkServer:u,chunkSize:f,chunkRetryDelays:g}=c,h={serverId:m,aborted:!1},I=t.ondata||(S=>S),E=t.onload||((S,D)=>D==="HEAD"?S.getResponseHeader("Upload-Offset"):S.response),T=t.onerror||(S=>null),v=S=>{let D=new FormData;ce(n)&&D.append(i,JSON.stringify(n));let R=typeof t.headers=="function"?t.headers(a,n):{...t.headers,"Upload-Length":a.size},L={...t,headers:R},z=Ze(I(D),Dt(e,t.url),L);z.onload=F=>S(E(F,L.method)),z.onerror=F=>l(ie("error",F.status,T(F.response)||F.statusText,F.getAllResponseHeaders())),z.ontimeout=Ke(l)},y=S=>{let D=Dt(e,u.url,h.serverId),L={headers:typeof t.headers=="function"?t.headers(h.serverId):{...t.headers},method:"HEAD"},z=Ze(null,D,L);z.onload=F=>S(E(F,L.method)),z.onerror=F=>l(ie("error",F.status,T(F.response)||F.statusText,F.getAllResponseHeaders())),z.ontimeout=Ke(l)},b=Math.floor(a.size/f);for(let S=0;S<=b;S++){let D=S*f,R=a.slice(D,D+f,"application/offset+octet-stream");d[S]={index:S,size:R.size,offset:D,data:R,file:a,progress:0,retries:[...g],status:xe.QUEUED,error:null,request:null,timeout:null}}let w=()=>o(h.serverId),x=S=>S.status===xe.QUEUED||S.status===xe.ERROR,_=S=>{if(h.aborted)return;if(S=S||d.find(x),!S){d.every(C=>C.status===xe.COMPLETE)&&w();return}S.status=xe.PROCESSING,S.progress=null;let D=u.ondata||(C=>C),R=u.onerror||(C=>null),L=u.onload||(()=>{}),z=Dt(e,u.url,h.serverId),F=typeof u.headers=="function"?u.headers(S):{...u.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":S.offset,"Upload-Length":a.size,"Upload-Name":a.name},G=S.request=Ze(D(S.data),z,{...u,headers:F});G.onload=C=>{L(C,S.index,d.length),S.status=xe.COMPLETE,S.request=null,M()},G.onprogress=(C,Y,Q)=>{S.progress=C?Y:null,O()},G.onerror=C=>{S.status=xe.ERROR,S.request=null,S.error=R(C.response)||C.statusText,P(S)||l(ie("error",C.status,R(C.response)||C.statusText,C.getAllResponseHeaders()))},G.ontimeout=C=>{S.status=xe.ERROR,S.request=null,P(S)||Ke(l)(C)},G.onabort=()=>{S.status=xe.QUEUED,S.request=null,s()}},P=S=>S.retries.length===0?!1:(S.status=xe.WAITING,clearTimeout(S.timeout),S.timeout=setTimeout(()=>{_(S)},S.retries.shift()),!0),O=()=>{let S=d.reduce((R,L)=>R===null||L.progress===null?null:R+L.progress,0);if(S===null)return r(!1,0,0);let D=d.reduce((R,L)=>R+L.size,0);r(!0,S,D)},M=()=>{d.filter(D=>D.status===xe.PROCESSING).length>=1||_()},N=()=>{d.forEach(S=>{clearTimeout(S.timeout),S.request&&S.request.abort()})};return h.serverId?y(S=>{h.aborted||(d.filter(D=>D.offset{D.status=xe.COMPLETE,D.progress=D.size}),M())}):v(S=>{h.aborted||(p(S),h.serverId=S,M())}),{abort:()=>{h.aborted=!0,N()}}},xs=(e,t,i,a)=>(n,o,l,r,s,p,c)=>{if(!n)return;let d=a.chunkUploads,m=d&&n.size>a.chunkSize,u=d&&(m||a.chunkForce);if(n instanceof Blob&&u)return vs(e,t,i,n,o,l,r,s,p,c,a);let f=t.ondata||(y=>y),g=t.onload||(y=>y),h=t.onerror||(y=>null),I=typeof t.headers=="function"?t.headers(n,o)||{}:{...t.headers},E={...t,headers:I};var T=new FormData;ce(o)&&T.append(i,JSON.stringify(o)),(n instanceof Blob?[{name:null,file:n}]:n).forEach(y=>{T.append(i,y.file,y.name===null?y.file.name:`${y.name}${y.file.name}`)});let v=Ze(f(T),Dt(e,t.url),E);return v.onload=y=>{l(ie("load",y.status,g(y.response),y.getAllResponseHeaders()))},v.onerror=y=>{r(ie("error",y.status,h(y.response)||y.statusText,y.getAllResponseHeaders()))},v.ontimeout=Ke(r),v.onprogress=s,v.onabort=p,v},ys=(e="",t,i,a)=>typeof t=="function"?(...n)=>t(i,...n,a):!t||!fe(t.url)?null:xs(e,t,i,a),Ot=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return(n,o)=>o();let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l)=>{let r=Ze(n,e+t.url,t);return r.onload=s=>{o(ie("load",s.status,i(s.response),s.getAllResponseHeaders()))},r.onerror=s=>{l(ie("error",s.status,a(s.response)||s.statusText,s.getAllResponseHeaders()))},r.ontimeout=Ke(l),r}},Dn=(e=0,t=1)=>e+Math.random()*(t-e),_s=(e,t=1e3,i=0,a=25,n=250)=>{let o=null,l=Date.now(),r=()=>{let s=Date.now()-l,p=Dn(a,n);s+p>t&&(p=s+p-t);let c=s/t;if(c>=1||document.hidden){e(1);return}e(c),o=setTimeout(r,p)};return t>0&&r(),{clear:()=>{clearTimeout(o)}}},Rs=(e,t)=>{let i={complete:!1,perceivedProgress:0,perceivedPerformanceUpdater:null,progress:null,timestamp:null,perceivedDuration:0,duration:0,request:null,response:null},{allowMinimumUploadDuration:a}=t,n=(c,d)=>{let m=()=>{i.duration===0||i.progress===null||p.fire("progress",p.getProgress())},u=()=>{i.complete=!0,p.fire("load-perceived",i.response.body)};p.fire("start"),i.timestamp=Date.now(),i.perceivedPerformanceUpdater=_s(f=>{i.perceivedProgress=f,i.perceivedDuration=Date.now()-i.timestamp,m(),i.response&&i.perceivedProgress===1&&!i.complete&&u()},a?Dn(750,1500):0),i.request=e(c,d,f=>{i.response=ce(f)?f:{type:"load",code:200,body:`${f}`,headers:{}},i.duration=Date.now()-i.timestamp,i.progress=1,p.fire("load",i.response.body),(!a||a&&i.perceivedProgress===1)&&u()},f=>{i.perceivedPerformanceUpdater.clear(),p.fire("error",ce(f)?f:{type:"error",code:0,body:`${f}`})},(f,g,h)=>{i.duration=Date.now()-i.timestamp,i.progress=f?g/h:null,m()},()=>{i.perceivedPerformanceUpdater.clear(),p.fire("abort",i.response?i.response.body:null)},f=>{p.fire("transfer",f)})},o=()=>{i.request&&(i.perceivedPerformanceUpdater.clear(),i.request.abort&&i.request.abort(),i.complete=!0)},l=()=>{o(),i.complete=!1,i.perceivedProgress=0,i.progress=0,i.timestamp=null,i.perceivedDuration=0,i.duration=0,i.request=null,i.response=null},r=a?()=>i.progress?Math.min(i.progress,i.perceivedProgress):null:()=>i.progress||null,s=a?()=>Math.min(i.duration,i.perceivedDuration):()=>i.duration,p={...mi(),process:n,abort:o,getProgress:r,getDuration:s,reset:l};return p},Fn=e=>e.substring(0,e.lastIndexOf("."))||e,ws=e=>{let t=[e.name,e.size,e.type];return e instanceof Blob||Fi(e)?t[0]=e.name||Mn():Fi(e)?(t[1]=e.length,t[2]=Pn(e)):fe(e)&&(t[0]=zt(e),t[1]=0,t[2]="application/octet-stream"),{name:t[0],size:t[1],type:t[2]}},Je=e=>!!(e instanceof File||e instanceof Blob&&e.name),zn=e=>{if(!ce(e))return e;let t=ci(e)?[]:{};for(let i in e){if(!e.hasOwnProperty(i))continue;let a=e[i];t[i]=a&&ce(a)?zn(a):a}return t},Ss=(e=null,t=null,i=null)=>{let a=Yi(),n={archived:!1,frozen:!1,released:!1,source:null,file:i,serverFileReference:t,transferId:null,processingAborted:!1,status:t?U.PROCESSING_COMPLETE:U.INIT,activeLoader:null,activeProcessor:null},o=null,l={},r=x=>n.status=x,s=(x,..._)=>{n.released||n.frozen||b.fire(x,..._)},p=()=>ui(n.file.name),c=()=>n.file.type,d=()=>n.file.size,m=()=>n.file,u=(x,_,P)=>{if(n.source=x,b.fireSync("init"),n.file){b.fireSync("load-skip");return}n.file=ws(x),_.on("init",()=>{s("load-init")}),_.on("meta",O=>{n.file.size=O.size,n.file.filename=O.filename,O.source&&(e=re.LIMBO,n.serverFileReference=O.source,n.status=U.PROCESSING_COMPLETE),s("load-meta")}),_.on("progress",O=>{r(U.LOADING),s("load-progress",O)}),_.on("error",O=>{r(U.LOAD_ERROR),s("load-request-error",O)}),_.on("abort",()=>{r(U.INIT),s("load-abort")}),_.on("load",O=>{n.activeLoader=null;let M=S=>{n.file=Je(S)?S:n.file,e===re.LIMBO&&n.serverFileReference?r(U.PROCESSING_COMPLETE):r(U.IDLE),s("load")},N=S=>{n.file=O,s("load-meta"),r(U.LOAD_ERROR),s("load-file-error",S)};if(n.serverFileReference){M(O);return}P(O,M,N)}),_.setSource(x),n.activeLoader=_,_.load()},f=()=>{n.activeLoader&&n.activeLoader.load()},g=()=>{if(n.activeLoader){n.activeLoader.abort();return}r(U.INIT),s("load-abort")},h=(x,_)=>{if(n.processingAborted){n.processingAborted=!1;return}if(r(U.PROCESSING),o=null,!(n.file instanceof Blob)){b.on("load",()=>{h(x,_)});return}x.on("load",M=>{n.transferId=null,n.serverFileReference=M}),x.on("transfer",M=>{n.transferId=M}),x.on("load-perceived",M=>{n.activeProcessor=null,n.transferId=null,n.serverFileReference=M,r(U.PROCESSING_COMPLETE),s("process-complete",M)}),x.on("start",()=>{s("process-start")}),x.on("error",M=>{n.activeProcessor=null,r(U.PROCESSING_ERROR),s("process-error",M)}),x.on("abort",M=>{n.activeProcessor=null,n.serverFileReference=M,r(U.IDLE),s("process-abort"),o&&o()}),x.on("progress",M=>{s("process-progress",M)});let P=M=>{n.archived||x.process(M,{...l})},O=console.error;_(n.file,P,O),n.activeProcessor=x},I=()=>{n.processingAborted=!1,r(U.PROCESSING_QUEUED)},E=()=>new Promise(x=>{if(!n.activeProcessor){n.processingAborted=!0,r(U.IDLE),s("process-abort"),x();return}o=()=>{x()},n.activeProcessor.abort()}),T=(x,_)=>new Promise((P,O)=>{let M=n.serverFileReference!==null?n.serverFileReference:n.transferId;if(M===null){P();return}x(M,()=>{n.serverFileReference=null,n.transferId=null,P()},N=>{if(!_){P();return}r(U.PROCESSING_REVERT_ERROR),s("process-revert-error"),O(N)}),r(U.IDLE),s("process-revert")}),v=(x,_,P)=>{let O=x.split("."),M=O[0],N=O.pop(),S=l;O.forEach(D=>S=S[D]),JSON.stringify(S[N])!==JSON.stringify(_)&&(S[N]=_,s("metadata-update",{key:M,value:l[M],silent:P}))},b={id:{get:()=>a},origin:{get:()=>e,set:x=>e=x},serverId:{get:()=>n.serverFileReference},transferId:{get:()=>n.transferId},status:{get:()=>n.status},filename:{get:()=>n.file.name},filenameWithoutExtension:{get:()=>Fn(n.file.name)},fileExtension:{get:p},fileType:{get:c},fileSize:{get:d},file:{get:m},relativePath:{get:()=>n.file._relativePath},source:{get:()=>n.source},getMetadata:x=>zn(x?l[x]:l),setMetadata:(x,_,P)=>{if(ce(x)){let O=x;return Object.keys(O).forEach(M=>{v(M,O[M],_)}),x}return v(x,_,P),_},extend:(x,_)=>w[x]=_,abortLoad:g,retryLoad:f,requestProcessing:I,abortProcessing:E,load:u,process:h,revert:T,...mi(),freeze:()=>n.frozen=!0,release:()=>n.released=!0,released:{get:()=>n.released},archive:()=>n.archived=!0,archived:{get:()=>n.archived},setFile:x=>n.file=x},w=We(b);return w},Ls=(e,t)=>Be(t)?0:fe(t)?e.findIndex(i=>i.id===t):-1,ja=(e,t)=>{let i=Ls(e,t);if(!(i<0))return e[i]||null},qa=(e,t,i,a,n,o)=>{let l=Ze(null,e,{method:"GET",responseType:"blob"});return l.onload=r=>{let s=r.getAllResponseHeaders(),p=Qi(s).name||zt(e);t(ie("load",r.status,ht(r.response,p),s))},l.onerror=r=>{i(ie("error",r.status,r.statusText,r.getAllResponseHeaders()))},l.onheaders=r=>{o(ie("headers",r.status,null,r.getAllResponseHeaders()))},l.ontimeout=Ke(i),l.onprogress=a,l.onabort=n,l},Ya=e=>(e.indexOf("//")===0&&(e=location.protocol+e),e.toLowerCase().replace("blob:","").replace(/([a-z])?:\/\//,"$1").split("/")[0]),As=e=>(e.indexOf(":")>-1||e.indexOf("//")>-1)&&Ya(location.href)!==Ya(e),Jt=e=>(...t)=>Xe(e)?e(...t):e,Ms=e=>!Je(e.file),Li=(e,t)=>{clearTimeout(t.listUpdateTimeout),t.listUpdateTimeout=setTimeout(()=>{e("DID_UPDATE_ITEMS",{items:Me(t.items)})},0)},$a=(e,...t)=>new Promise(i=>{if(!e)return i(!0);let a=e(...t);if(a==null)return i(!0);if(typeof a=="boolean")return i(a);typeof a.then=="function"&&a.then(i)}),Ai=(e,t)=>{e.items.sort((i,a)=>t(he(i),he(a)))},ye=(e,t)=>({query:i,success:a=()=>{},failure:n=()=>{},...o}={})=>{let l=Qe(e.items,i);if(!l){n({error:ie("error",0,"Item not found"),file:null});return}t(l,a,n,o||{})},Os=(e,t,i)=>({ABORT_ALL:()=>{Me(i.items).forEach(a=>{a.freeze(),a.abortLoad(),a.abortProcessing()})},DID_SET_FILES:({value:a=[]})=>{let n=a.map(l=>({source:l.source?l.source:l,options:l.options})),o=Me(i.items);o.forEach(l=>{n.find(r=>r.source===l.source||r.source===l.file)||e("REMOVE_ITEM",{query:l,remove:!1})}),o=Me(i.items),n.forEach((l,r)=>{o.find(s=>s.source===l.source||s.file===l.source)||e("ADD_ITEM",{...l,interactionMethod:_e.NONE,index:r})})},DID_UPDATE_ITEM_METADATA:({id:a,action:n,change:o})=>{o.silent||(clearTimeout(i.itemUpdateTimeout),i.itemUpdateTimeout=setTimeout(()=>{let l=ja(i.items,a);if(!t("IS_ASYNC")){Ae("SHOULD_PREPARE_OUTPUT",!1,{item:l,query:t,action:n,change:o}).then(c=>{let d=t("GET_BEFORE_PREPARE_FILE");d&&(c=d(l,c)),c&&e("REQUEST_PREPARE_OUTPUT",{query:a,item:l,success:m=>{e("DID_PREPARE_OUTPUT",{id:a,file:m})}},!0)});return}l.origin===re.LOCAL&&e("DID_LOAD_ITEM",{id:l.id,error:null,serverFileReference:l.source});let r=()=>{setTimeout(()=>{e("REQUEST_ITEM_PROCESSING",{query:a})},32)},s=c=>{l.revert(Ot(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(c?r:()=>{}).catch(()=>{})},p=c=>{l.abortProcessing().then(c?r:()=>{})};if(l.status===U.PROCESSING_COMPLETE)return s(i.options.instantUpload);if(l.status===U.PROCESSING)return p(i.options.instantUpload);i.options.instantUpload&&r()},0))},MOVE_ITEM:({query:a,index:n})=>{let o=Qe(i.items,a);if(!o)return;let l=i.items.indexOf(o);n=An(n,0,i.items.length-1),l!==n&&i.items.splice(n,0,i.items.splice(l,1)[0])},SORT:({compare:a})=>{Ai(i,a),e("DID_SORT_ITEMS",{items:t("GET_ACTIVE_ITEMS")})},ADD_ITEMS:({items:a,index:n,interactionMethod:o,success:l=()=>{},failure:r=()=>{}})=>{let s=n;if(n===-1||typeof n>"u"){let u=t("GET_ITEM_INSERT_LOCATION"),f=t("GET_TOTAL_ITEMS");s=u==="before"?0:f}let p=t("GET_IGNORED_FILES"),c=u=>Je(u)?!p.includes(u.name.toLowerCase()):!Be(u),m=a.filter(c).map(u=>new Promise((f,g)=>{e("ADD_ITEM",{interactionMethod:o,source:u.source||u,success:f,failure:g,index:s++,options:u.options||{}})}));Promise.all(m).then(l).catch(r)},ADD_ITEM:({source:a,index:n=-1,interactionMethod:o,success:l=()=>{},failure:r=()=>{},options:s={}})=>{if(Be(a)){r({error:ie("error",0,"No source"),file:null});return}if(Je(a)&&i.options.ignoredFiles.includes(a.name.toLowerCase()))return;if(!rs(i)){if(i.options.allowMultiple||!i.options.allowMultiple&&!i.options.allowReplace){let E=ie("warning",0,"Max files");e("DID_THROW_MAX_FILES",{source:a,error:E}),r({error:E,file:null});return}let I=Me(i.items)[0];if(I.status===U.PROCESSING_COMPLETE||I.status===U.PROCESSING_REVERT_ERROR){let E=t("GET_FORCE_REVERT");if(I.revert(Ot(i.options.server.url,i.options.server.revert),E).then(()=>{E&&e("ADD_ITEM",{source:a,index:n,interactionMethod:o,success:l,failure:r,options:s})}).catch(()=>{}),E)return}e("REMOVE_ITEM",{query:I.id})}let p=s.type==="local"?re.LOCAL:s.type==="limbo"?re.LIMBO:re.INPUT,c=Ss(p,p===re.INPUT?null:a,s.file);Object.keys(s.metadata||{}).forEach(I=>{c.setMetadata(I,s.metadata[I])}),tt("DID_CREATE_ITEM",c,{query:t,dispatch:e});let d=t("GET_ITEM_INSERT_LOCATION");i.options.itemInsertLocationFreedom||(n=d==="before"?-1:i.items.length),cs(i.items,c,n),Xe(d)&&a&&Ai(i,d);let m=c.id;c.on("init",()=>{e("DID_INIT_ITEM",{id:m})}),c.on("load-init",()=>{e("DID_START_ITEM_LOAD",{id:m})}),c.on("load-meta",()=>{e("DID_UPDATE_ITEM_META",{id:m})}),c.on("load-progress",I=>{e("DID_UPDATE_ITEM_LOAD_PROGRESS",{id:m,progress:I})}),c.on("load-request-error",I=>{let E=Jt(i.options.labelFileLoadError)(I);if(I.code>=400&&I.code<500){e("DID_THROW_ITEM_INVALID",{id:m,error:I,status:{main:E,sub:`${I.code} (${I.body})`}}),r({error:I,file:he(c)});return}e("DID_THROW_ITEM_LOAD_ERROR",{id:m,error:I,status:{main:E,sub:i.options.labelTapToRetry}})}),c.on("load-file-error",I=>{e("DID_THROW_ITEM_INVALID",{id:m,error:I.status,status:I.status}),r({error:I.status,file:he(c)})}),c.on("load-abort",()=>{e("REMOVE_ITEM",{query:m})}),c.on("load-skip",()=>{c.on("metadata-update",I=>{Je(c.file)&&e("DID_UPDATE_ITEM_METADATA",{id:m,change:I})}),e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}})}),c.on("load",()=>{let I=E=>{if(!E){e("REMOVE_ITEM",{query:m});return}c.on("metadata-update",T=>{e("DID_UPDATE_ITEM_METADATA",{id:m,change:T})}),Ae("SHOULD_PREPARE_OUTPUT",!1,{item:c,query:t}).then(T=>{let v=t("GET_BEFORE_PREPARE_FILE");v&&(T=v(c,T));let y=()=>{e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}}),Li(e,i)};if(T){e("REQUEST_PREPARE_OUTPUT",{query:m,item:c,success:b=>{e("DID_PREPARE_OUTPUT",{id:m,file:b}),y()}},!0);return}y()})};Ae("DID_LOAD_ITEM",c,{query:t,dispatch:e}).then(()=>{$a(t("GET_BEFORE_ADD_FILE"),he(c)).then(I)}).catch(E=>{if(!E||!E.error||!E.status)return I(!1);e("DID_THROW_ITEM_INVALID",{id:m,error:E.error,status:E.status})})}),c.on("process-start",()=>{e("DID_START_ITEM_PROCESSING",{id:m})}),c.on("process-progress",I=>{e("DID_UPDATE_ITEM_PROCESS_PROGRESS",{id:m,progress:I})}),c.on("process-error",I=>{e("DID_THROW_ITEM_PROCESSING_ERROR",{id:m,error:I,status:{main:Jt(i.options.labelFileProcessingError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-revert-error",I=>{e("DID_THROW_ITEM_PROCESSING_REVERT_ERROR",{id:m,error:I,status:{main:Jt(i.options.labelFileProcessingRevertError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-complete",I=>{e("DID_COMPLETE_ITEM_PROCESSING",{id:m,error:null,serverFileReference:I}),e("DID_DEFINE_VALUE",{id:m,value:I})}),c.on("process-abort",()=>{e("DID_ABORT_ITEM_PROCESSING",{id:m})}),c.on("process-revert",()=>{e("DID_REVERT_ITEM_PROCESSING",{id:m}),e("DID_DEFINE_VALUE",{id:m,value:null})}),e("DID_ADD_ITEM",{id:m,index:n,interactionMethod:o}),Li(e,i);let{url:u,load:f,restore:g,fetch:h}=i.options.server||{};c.load(a,Is(p===re.INPUT?fe(a)&&As(a)&&h?Si(u,h):qa:p===re.LIMBO?Si(u,g):Si(u,f)),(I,E,T)=>{Ae("LOAD_FILE",I,{query:t}).then(E).catch(T)})},REQUEST_PREPARE_OUTPUT:({item:a,success:n,failure:o=()=>{}})=>{let l={error:ie("error",0,"Item not found"),file:null};if(a.archived)return o(l);Ae("PREPARE_OUTPUT",a.file,{query:t,item:a}).then(r=>{Ae("COMPLETE_PREPARE_OUTPUT",r,{query:t,item:a}).then(s=>{if(a.archived)return o(l);n(s)})})},COMPLETE_LOAD_ITEM:({item:a,data:n})=>{let{success:o,source:l}=n,r=t("GET_ITEM_INSERT_LOCATION");if(Xe(r)&&l&&Ai(i,r),e("DID_LOAD_ITEM",{id:a.id,error:null,serverFileReference:a.origin===re.INPUT?null:l}),o(he(a)),a.origin===re.LOCAL){e("DID_LOAD_LOCAL_ITEM",{id:a.id});return}if(a.origin===re.LIMBO){e("DID_COMPLETE_ITEM_PROCESSING",{id:a.id,error:null,serverFileReference:l}),e("DID_DEFINE_VALUE",{id:a.id,value:a.serverId||l});return}t("IS_ASYNC")&&i.options.instantUpload&&e("REQUEST_ITEM_PROCESSING",{query:a.id})},RETRY_ITEM_LOAD:ye(i,a=>{a.retryLoad()}),REQUEST_ITEM_PREPARE:ye(i,(a,n,o)=>{e("REQUEST_PREPARE_OUTPUT",{query:a.id,item:a,success:l=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:l}),n({file:a,output:l})},failure:o},!0)}),REQUEST_ITEM_PROCESSING:ye(i,(a,n,o)=>{if(!(a.status===U.IDLE||a.status===U.PROCESSING_ERROR)){let r=()=>e("REQUEST_ITEM_PROCESSING",{query:a,success:n,failure:o}),s=()=>document.hidden?r():setTimeout(r,32);a.status===U.PROCESSING_COMPLETE||a.status===U.PROCESSING_REVERT_ERROR?a.revert(Ot(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(s).catch(()=>{}):a.status===U.PROCESSING&&a.abortProcessing().then(s);return}a.status!==U.PROCESSING_QUEUED&&(a.requestProcessing(),e("DID_REQUEST_ITEM_PROCESSING",{id:a.id}),e("PROCESS_ITEM",{query:a,success:n,failure:o},!0))}),PROCESS_ITEM:ye(i,(a,n,o)=>{let l=t("GET_MAX_PARALLEL_UPLOADS");if(t("GET_ITEMS_BY_STATUS",U.PROCESSING).length===l){i.processingQueue.push({id:a.id,success:n,failure:o});return}if(a.status===U.PROCESSING)return;let s=()=>{let c=i.processingQueue.shift();if(!c)return;let{id:d,success:m,failure:u}=c,f=Qe(i.items,d);if(!f||f.archived){s();return}e("PROCESS_ITEM",{query:d,success:m,failure:u},!0)};a.onOnce("process-complete",()=>{n(he(a)),s();let c=i.options.server;if(i.options.instantUpload&&a.origin===re.LOCAL&&Xe(c.remove)){let u=()=>{};a.origin=re.LIMBO,i.options.server.remove(a.source,u,u)}t("GET_ITEMS_BY_STATUS",U.PROCESSING_COMPLETE).length===i.items.length&&e("DID_COMPLETE_ITEM_PROCESSING_ALL")}),a.onOnce("process-error",c=>{o({error:c,file:he(a)}),s()});let p=i.options;a.process(Rs(ys(p.server.url,p.server.process,p.name,{chunkTransferId:a.transferId,chunkServer:p.server.patch,chunkUploads:p.chunkUploads,chunkForce:p.chunkForce,chunkSize:p.chunkSize,chunkRetryDelays:p.chunkRetryDelays}),{allowMinimumUploadDuration:t("GET_ALLOW_MINIMUM_UPLOAD_DURATION")}),(c,d,m)=>{Ae("PREPARE_OUTPUT",c,{query:t,item:a}).then(u=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:u}),d(u)}).catch(m)})}),RETRY_ITEM_PROCESSING:ye(i,a=>{e("REQUEST_ITEM_PROCESSING",{query:a})}),REQUEST_REMOVE_ITEM:ye(i,a=>{$a(t("GET_BEFORE_REMOVE_FILE"),he(a)).then(n=>{n&&e("REMOVE_ITEM",{query:a})})}),RELEASE_ITEM:ye(i,a=>{a.release()}),REMOVE_ITEM:ye(i,(a,n,o,l)=>{let r=()=>{let p=a.id;ja(i.items,p).archive(),e("DID_REMOVE_ITEM",{error:null,id:p,item:a}),Li(e,i),n(he(a))},s=i.options.server;a.origin===re.LOCAL&&s&&Xe(s.remove)&&l.remove!==!1?(e("DID_START_ITEM_REMOVE",{id:a.id}),s.remove(a.source,()=>r(),p=>{e("DID_THROW_ITEM_REMOVE_ERROR",{id:a.id,error:ie("error",0,p,null),status:{main:Jt(i.options.labelFileRemoveError)(p),sub:i.options.labelTapToRetry}})})):((l.revert&&a.origin!==re.LOCAL&&a.serverId!==null||i.options.chunkUploads&&a.file.size>i.options.chunkSize||i.options.chunkUploads&&i.options.chunkForce)&&a.revert(Ot(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")),r())}),ABORT_ITEM_LOAD:ye(i,a=>{a.abortLoad()}),ABORT_ITEM_PROCESSING:ye(i,a=>{if(a.serverId){e("REVERT_ITEM_PROCESSING",{id:a.id});return}a.abortProcessing().then(()=>{i.options.instantUpload&&e("REMOVE_ITEM",{query:a.id})})}),REQUEST_REVERT_ITEM_PROCESSING:ye(i,a=>{if(!i.options.instantUpload){e("REVERT_ITEM_PROCESSING",{query:a});return}let n=r=>{r&&e("REVERT_ITEM_PROCESSING",{query:a})},o=t("GET_BEFORE_REMOVE_FILE");if(!o)return n(!0);let l=o(he(a));if(l==null)return n(!0);if(typeof l=="boolean")return n(l);typeof l.then=="function"&&l.then(n)}),REVERT_ITEM_PROCESSING:ye(i,a=>{a.revert(Ot(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(()=>{(i.options.instantUpload||Ms(a))&&e("REMOVE_ITEM",{query:a.id})}).catch(()=>{})}),SET_OPTIONS:({options:a})=>{let n=Object.keys(a),o=Ps.filter(r=>n.includes(r));[...o,...Object.keys(a).filter(r=>!o.includes(r))].forEach(r=>{e(`SET_${pi(r,"_").toUpperCase()}`,{value:a[r]})})}}),Ps=["server"],Zi=e=>e,ke=e=>document.createElement(e),ae=(e,t)=>{let i=e.childNodes[0];i?t!==i.nodeValue&&(i.nodeValue=t):(i=document.createTextNode(t),e.appendChild(i))},Xa=(e,t,i,a)=>{let n=(a%360-90)*Math.PI/180;return{x:e+i*Math.cos(n),y:t+i*Math.sin(n)}},Ds=(e,t,i,a,n,o)=>{let l=Xa(e,t,i,n),r=Xa(e,t,i,a);return["M",l.x,l.y,"A",i,i,0,o,0,r.x,r.y].join(" ")},Fs=(e,t,i,a,n)=>{let o=1;return n>a&&n-a<=.5&&(o=0),a>n&&a-n>=.5&&(o=0),Ds(e,t,i,Math.min(.9999,a)*360,Math.min(.9999,n)*360,o)},zs=({root:e,props:t})=>{t.spin=!1,t.progress=0,t.opacity=0;let i=oi("svg");e.ref.path=oi("path",{"stroke-width":2,"stroke-linecap":"round"}),i.appendChild(e.ref.path),e.ref.svg=i,e.appendChild(i)},Cs=({root:e,props:t})=>{if(t.opacity===0)return;t.align&&(e.element.dataset.align=t.align);let i=parseInt(se(e.ref.path,"stroke-width"),10),a=e.rect.element.width*.5,n=0,o=0;t.spin?(n=0,o=.5):(n=0,o=t.progress);let l=Fs(a,a,a-i,n,o);se(e.ref.path,"d",l),se(e.ref.path,"stroke-opacity",t.spin||t.progress>0?1:0)},Qa=ne({tag:"div",name:"progress-indicator",ignoreRectUpdate:!0,ignoreRect:!0,create:zs,write:Cs,mixins:{apis:["progress","spin","align"],styles:["opacity"],animations:{opacity:{type:"tween",duration:500},progress:{type:"spring",stiffness:.95,damping:.65,mass:10}}}}),Ns=({root:e,props:t})=>{e.element.innerHTML=(t.icon||"")+`${t.label}`,t.isDisabled=!1},Bs=({root:e,props:t})=>{let{isDisabled:i}=t,a=e.query("GET_DISABLED")||t.opacity===0;a&&!i?(t.isDisabled=!0,se(e.element,"disabled","disabled")):!a&&i&&(t.isDisabled=!1,e.element.removeAttribute("disabled"))},Cn=ne({tag:"button",attributes:{type:"button"},ignoreRect:!0,ignoreRectUpdate:!0,name:"file-action-button",mixins:{apis:["label"],styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}},listeners:!0},create:Ns,write:Bs}),Nn=(e,t=".",i=1e3,a={})=>{let{labelBytes:n="bytes",labelKilobytes:o="KB",labelMegabytes:l="MB",labelGigabytes:r="GB"}=a;e=Math.round(Math.abs(e));let s=i,p=i*i,c=i*i*i;return ee.toFixed(t).split(".").filter(a=>a!=="0").join(i),ks=({root:e,props:t})=>{let i=ke("span");i.className="filepond--file-info-main",se(i,"aria-hidden","true"),e.appendChild(i),e.ref.fileName=i;let a=ke("span");a.className="filepond--file-info-sub",e.appendChild(a),e.ref.fileSize=a,ae(a,e.query("GET_LABEL_FILE_WAITING_FOR_SIZE")),ae(i,Zi(e.query("GET_ITEM_NAME",t.id)))},zi=({root:e,props:t})=>{ae(e.ref.fileSize,Nn(e.query("GET_ITEM_SIZE",t.id),".",e.query("GET_FILE_SIZE_BASE"),e.query("GET_FILE_SIZE_LABELS",e.query))),ae(e.ref.fileName,Zi(e.query("GET_ITEM_NAME",t.id)))},Ka=({root:e,props:t})=>{if(Et(e.query("GET_ITEM_SIZE",t.id))){zi({root:e,props:t});return}ae(e.ref.fileSize,e.query("GET_LABEL_FILE_SIZE_NOT_AVAILABLE"))},Vs=ne({name:"file-info",ignoreRect:!0,ignoreRectUpdate:!0,write:ge({DID_LOAD_ITEM:zi,DID_UPDATE_ITEM_META:zi,DID_THROW_ITEM_LOAD_ERROR:Ka,DID_THROW_ITEM_INVALID:Ka}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:ks,mixins:{styles:["translateX","translateY"],animations:{translateX:"spring",translateY:"spring"}}}),Bn=e=>Math.round(e*100),Gs=({root:e})=>{let t=ke("span");t.className="filepond--file-status-main",e.appendChild(t),e.ref.main=t;let i=ke("span");i.className="filepond--file-status-sub",e.appendChild(i),e.ref.sub=i,kn({root:e,action:{progress:null}})},kn=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_LOADING"):`${e.query("GET_LABEL_FILE_LOADING")} ${Bn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Us=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_PROCESSING"):`${e.query("GET_LABEL_FILE_PROCESSING")} ${Bn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Ws=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Hs=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_ABORTED")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_RETRY"))},js=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_COMPLETE")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_UNDO"))},Ja=({root:e})=>{ae(e.ref.main,""),ae(e.ref.sub,"")},Pt=({root:e,action:t})=>{ae(e.ref.main,t.status.main),ae(e.ref.sub,t.status.sub)},qs=ne({name:"file-status",ignoreRect:!0,ignoreRectUpdate:!0,write:ge({DID_LOAD_ITEM:Ja,DID_REVERT_ITEM_PROCESSING:Ja,DID_REQUEST_ITEM_PROCESSING:Ws,DID_ABORT_ITEM_PROCESSING:Hs,DID_COMPLETE_ITEM_PROCESSING:js,DID_UPDATE_ITEM_PROCESS_PROGRESS:Us,DID_UPDATE_ITEM_LOAD_PROGRESS:kn,DID_THROW_ITEM_LOAD_ERROR:Pt,DID_THROW_ITEM_INVALID:Pt,DID_THROW_ITEM_PROCESSING_ERROR:Pt,DID_THROW_ITEM_PROCESSING_REVERT_ERROR:Pt,DID_THROW_ITEM_REMOVE_ERROR:Pt}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Gs,mixins:{styles:["translateX","translateY","opacity"],animations:{opacity:{type:"tween",duration:250},translateX:"spring",translateY:"spring"}}}),Ci={AbortItemLoad:{label:"GET_LABEL_BUTTON_ABORT_ITEM_LOAD",action:"ABORT_ITEM_LOAD",className:"filepond--action-abort-item-load",align:"LOAD_INDICATOR_POSITION"},RetryItemLoad:{label:"GET_LABEL_BUTTON_RETRY_ITEM_LOAD",action:"RETRY_ITEM_LOAD",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-load",align:"BUTTON_PROCESS_ITEM_POSITION"},RemoveItem:{label:"GET_LABEL_BUTTON_REMOVE_ITEM",action:"REQUEST_REMOVE_ITEM",icon:"GET_ICON_REMOVE",className:"filepond--action-remove-item",align:"BUTTON_REMOVE_ITEM_POSITION"},ProcessItem:{label:"GET_LABEL_BUTTON_PROCESS_ITEM",action:"REQUEST_ITEM_PROCESSING",icon:"GET_ICON_PROCESS",className:"filepond--action-process-item",align:"BUTTON_PROCESS_ITEM_POSITION"},AbortItemProcessing:{label:"GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING",action:"ABORT_ITEM_PROCESSING",className:"filepond--action-abort-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RetryItemProcessing:{label:"GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING",action:"RETRY_ITEM_PROCESSING",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RevertItemProcessing:{label:"GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING",action:"REQUEST_REVERT_ITEM_PROCESSING",icon:"GET_ICON_UNDO",className:"filepond--action-revert-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"}},Ni=[];te(Ci,e=>{Ni.push(e)});var Ie=e=>{if(Bi(e)==="right")return 0;let t=e.ref.buttonRemoveItem.rect.element;return t.hidden?null:t.width+t.left},Ys=e=>e.ref.buttonAbortItemLoad.rect.element.width,ei=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.height/4),$s=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.left/2),Xs=e=>e.query("GET_STYLE_LOAD_INDICATOR_POSITION"),Qs=e=>e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION"),Bi=e=>e.query("GET_STYLE_BUTTON_REMOVE_ITEM_POSITION"),Zs={buttonAbortItemLoad:{opacity:0},buttonRetryItemLoad:{opacity:0},buttonRemoveItem:{opacity:0},buttonProcessItem:{opacity:0},buttonAbortItemProcessing:{opacity:0},buttonRetryItemProcessing:{opacity:0},buttonRevertItemProcessing:{opacity:0},loadProgressIndicator:{opacity:0,align:Xs},processProgressIndicator:{opacity:0,align:Qs},processingCompleteIndicator:{opacity:0,scaleX:.75,scaleY:.75},info:{translateX:0,translateY:0,opacity:0},status:{translateX:0,translateY:0,opacity:0}},en={buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},Mi={buttonAbortItemProcessing:{opacity:1},processProgressIndicator:{opacity:1},status:{opacity:1}},mt={DID_THROW_ITEM_INVALID:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie,opacity:1}},DID_START_ITEM_LOAD:{buttonAbortItemLoad:{opacity:1},loadProgressIndicator:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_LOAD_ERROR:{buttonRetryItemLoad:{opacity:1},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_START_ITEM_REMOVE:{processProgressIndicator:{opacity:1,align:Bi},info:{translateX:Ie},status:{opacity:0}},DID_THROW_ITEM_REMOVE_ERROR:{processProgressIndicator:{opacity:0,align:Bi},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1,translateX:Ie}},DID_LOAD_ITEM:en,DID_LOAD_LOCAL_ITEM:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},DID_START_ITEM_PROCESSING:Mi,DID_REQUEST_ITEM_PROCESSING:Mi,DID_UPDATE_ITEM_PROCESS_PROGRESS:Mi,DID_COMPLETE_ITEM_PROCESSING:{buttonRevertItemProcessing:{opacity:1},info:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_PROCESSING_ERROR:{buttonRemoveItem:{opacity:1},buttonRetryItemProcessing:{opacity:1},status:{opacity:1},info:{translateX:Ie}},DID_THROW_ITEM_PROCESSING_REVERT_ERROR:{buttonRevertItemProcessing:{opacity:1},status:{opacity:1},info:{opacity:1}},DID_ABORT_ITEM_PROCESSING:{buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_REVERT_ITEM_PROCESSING:en},Ks=ne({create:({root:e})=>{e.element.innerHTML=e.query("GET_ICON_DONE")},name:"processing-complete-indicator",ignoreRect:!0,mixins:{styles:["scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",opacity:{type:"tween",duration:250}}}}),Js=({root:e,props:t})=>{let i=Object.keys(Ci).reduce((f,g)=>(f[g]={...Ci[g]},f),{}),{id:a}=t,n=e.query("GET_ALLOW_REVERT"),o=e.query("GET_ALLOW_REMOVE"),l=e.query("GET_ALLOW_PROCESS"),r=e.query("GET_INSTANT_UPLOAD"),s=e.query("IS_ASYNC"),p=e.query("GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN"),c;s?l&&!n?c=f=>!/RevertItemProcessing/.test(f):!l&&n?c=f=>!/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(f):!l&&!n&&(c=f=>!/Process/.test(f)):c=f=>!/Process/.test(f);let d=c?Ni.filter(c):Ni.concat();if(r&&n&&(i.RevertItemProcessing.label="GET_LABEL_BUTTON_REMOVE_ITEM",i.RevertItemProcessing.icon="GET_ICON_REMOVE"),s&&!n){let f=mt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=$s,f.info.translateY=ei,f.status.translateY=ei,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}if(s&&!l&&(["DID_START_ITEM_PROCESSING","DID_REQUEST_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_THROW_ITEM_PROCESSING_ERROR"].forEach(f=>{mt[f].status.translateY=ei}),mt.DID_THROW_ITEM_PROCESSING_ERROR.status.translateX=Ys),p&&n){i.RevertItemProcessing.align="BUTTON_REMOVE_ITEM_POSITION";let f=mt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=Ie,f.status.translateY=ei,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}o||(i.RemoveItem.disabled=!0),te(i,(f,g)=>{let h=e.createChildView(Cn,{label:e.query(g.label),icon:e.query(g.icon),opacity:0});d.includes(f)&&e.appendChildView(h),g.disabled&&(h.element.setAttribute("disabled","disabled"),h.element.setAttribute("hidden","hidden")),h.element.dataset.align=e.query(`GET_STYLE_${g.align}`),h.element.classList.add(g.className),h.on("click",I=>{I.stopPropagation(),!g.disabled&&e.dispatch(g.action,{query:a})}),e.ref[`button${f}`]=h}),e.ref.processingCompleteIndicator=e.appendChildView(e.createChildView(Ks)),e.ref.processingCompleteIndicator.element.dataset.align=e.query("GET_STYLE_BUTTON_PROCESS_ITEM_POSITION"),e.ref.info=e.appendChildView(e.createChildView(Vs,{id:a})),e.ref.status=e.appendChildView(e.createChildView(qs,{id:a}));let m=e.appendChildView(e.createChildView(Qa,{opacity:0,align:e.query("GET_STYLE_LOAD_INDICATOR_POSITION")}));m.element.classList.add("filepond--load-indicator"),e.ref.loadProgressIndicator=m;let u=e.appendChildView(e.createChildView(Qa,{opacity:0,align:e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION")}));u.element.classList.add("filepond--process-indicator"),e.ref.processProgressIndicator=u,e.ref.activeStyles=[]},ec=({root:e,actions:t,props:i})=>{tc({root:e,actions:t,props:i});let a=t.concat().filter(n=>/^DID_/.test(n.type)).reverse().find(n=>mt[n.type]);if(a){e.ref.activeStyles=[];let n=mt[a.type];te(Zs,(o,l)=>{let r=e.ref[o];te(l,(s,p)=>{let c=n[o]&&typeof n[o][s]<"u"?n[o][s]:p;e.ref.activeStyles.push({control:r,key:s,value:c})})})}e.ref.activeStyles.forEach(({control:n,key:o,value:l})=>{n[o]=typeof l=="function"?l(e):l})},tc=ge({DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING:({root:e,action:t})=>{e.ref.buttonAbortItemProcessing.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD:({root:e,action:t})=>{e.ref.buttonAbortItemLoad.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL:({root:e,action:t})=>{e.ref.buttonAbortItemRemoval.label=t.value},DID_REQUEST_ITEM_PROCESSING:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_START_ITEM_LOAD:({root:e})=>{e.ref.loadProgressIndicator.spin=!0,e.ref.loadProgressIndicator.progress=0},DID_START_ITEM_REMOVE:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_UPDATE_ITEM_LOAD_PROGRESS:({root:e,action:t})=>{e.ref.loadProgressIndicator.spin=!1,e.ref.loadProgressIndicator.progress=t.progress},DID_UPDATE_ITEM_PROCESS_PROGRESS:({root:e,action:t})=>{e.ref.processProgressIndicator.spin=!1,e.ref.processProgressIndicator.progress=t.progress}}),ic=ne({create:Js,write:ec,didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},name:"file"}),ac=({root:e,props:t})=>{e.ref.fileName=ke("legend"),e.appendChild(e.ref.fileName),e.ref.file=e.appendChildView(e.createChildView(ic,{id:t.id})),e.ref.data=!1},nc=({root:e,props:t})=>{ae(e.ref.fileName,Zi(e.query("GET_ITEM_NAME",t.id)))},oc=ne({create:ac,ignoreRect:!0,write:ge({DID_LOAD_ITEM:nc}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},tag:"fieldset",name:"file-wrapper"}),tn={type:"spring",damping:.6,mass:7},lc=({root:e,props:t})=>{[{name:"top"},{name:"center",props:{translateY:null,scaleY:null},mixins:{animations:{scaleY:tn},styles:["translateY","scaleY"]}},{name:"bottom",props:{translateY:null},mixins:{animations:{translateY:tn},styles:["translateY"]}}].forEach(i=>{rc(e,i,t.name)}),e.element.classList.add(`filepond--${t.name}`),e.ref.scalable=null},rc=(e,t,i)=>{let a=ne({name:`panel-${t.name} filepond--${i}`,mixins:t.mixins,ignoreRectUpdate:!0}),n=e.createChildView(a,t.props);e.ref[t.name]=e.appendChildView(n)},sc=({root:e,props:t})=>{if((e.ref.scalable===null||t.scalable!==e.ref.scalable)&&(e.ref.scalable=In(t.scalable)?t.scalable:!0,e.element.dataset.scalable=e.ref.scalable),!t.height)return;let i=e.ref.top.rect.element,a=e.ref.bottom.rect.element,n=Math.max(i.height+a.height,t.height);e.ref.center.translateY=i.height,e.ref.center.scaleY=(n-i.height-a.height)/100,e.ref.bottom.translateY=n-a.height},Vn=ne({name:"panel",read:({root:e,props:t})=>t.heightCurrent=e.ref.bottom.translateY,write:sc,create:lc,ignoreRect:!0,mixins:{apis:["height","heightCurrent","scalable"]}}),cc=e=>{let t=e.map(a=>a.id),i;return{setIndex:a=>{i=a},getIndex:()=>i,getItemIndex:a=>t.indexOf(a.id)}},an={type:"spring",stiffness:.75,damping:.45,mass:10},nn="spring",on={DID_START_ITEM_LOAD:"busy",DID_UPDATE_ITEM_LOAD_PROGRESS:"loading",DID_THROW_ITEM_INVALID:"load-invalid",DID_THROW_ITEM_LOAD_ERROR:"load-error",DID_LOAD_ITEM:"idle",DID_THROW_ITEM_REMOVE_ERROR:"remove-error",DID_START_ITEM_REMOVE:"busy",DID_START_ITEM_PROCESSING:"busy processing",DID_REQUEST_ITEM_PROCESSING:"busy processing",DID_UPDATE_ITEM_PROCESS_PROGRESS:"processing",DID_COMPLETE_ITEM_PROCESSING:"processing-complete",DID_THROW_ITEM_PROCESSING_ERROR:"processing-error",DID_THROW_ITEM_PROCESSING_REVERT_ERROR:"processing-revert-error",DID_ABORT_ITEM_PROCESSING:"cancelled",DID_REVERT_ITEM_PROCESSING:"idle"},dc=({root:e,props:t})=>{if(e.ref.handleClick=a=>e.dispatch("DID_ACTIVATE_ITEM",{id:t.id}),e.element.id=`filepond--item-${t.id}`,e.element.addEventListener("click",e.ref.handleClick),e.ref.container=e.appendChildView(e.createChildView(oc,{id:t.id})),e.ref.panel=e.appendChildView(e.createChildView(Vn,{name:"item-panel"})),e.ref.panel.height=null,t.markedForRemoval=!1,!e.query("GET_ALLOW_REORDER"))return;e.element.dataset.dragState="idle";let i=a=>{if(!a.isPrimary)return;let n=!1,o={x:a.pageX,y:a.pageY};t.dragOrigin={x:e.translateX,y:e.translateY},t.dragCenter={x:a.offsetX,y:a.offsetY};let l=cc(e.query("GET_ACTIVE_ITEMS"));e.dispatch("DID_GRAB_ITEM",{id:t.id,dragState:l});let r=d=>{if(!d.isPrimary)return;d.stopPropagation(),d.preventDefault(),t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},t.dragOffset.x*t.dragOffset.x+t.dragOffset.y*t.dragOffset.y>16&&!n&&(n=!0,e.element.removeEventListener("click",e.ref.handleClick)),e.dispatch("DID_DRAG_ITEM",{id:t.id,dragState:l})},s=d=>{d.isPrimary&&(t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},c())},p=()=>{c()},c=()=>{document.removeEventListener("pointercancel",p),document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",s),e.dispatch("DID_DROP_ITEM",{id:t.id,dragState:l}),n&&setTimeout(()=>e.element.addEventListener("click",e.ref.handleClick),0)};document.addEventListener("pointercancel",p),document.addEventListener("pointermove",r),document.addEventListener("pointerup",s)};e.element.addEventListener("pointerdown",i)},pc=ge({DID_UPDATE_PANEL_HEIGHT:({root:e,action:t})=>{e.height=t.height}}),mc=ge({DID_GRAB_ITEM:({root:e,props:t})=>{t.dragOrigin={x:e.translateX,y:e.translateY}},DID_DRAG_ITEM:({root:e})=>{e.element.dataset.dragState="drag"},DID_DROP_ITEM:({root:e,props:t})=>{t.dragOffset=null,t.dragOrigin=null,e.element.dataset.dragState="drop"}},({root:e,actions:t,props:i,shouldOptimize:a})=>{e.element.dataset.dragState==="drop"&&e.scaleX<=1&&(e.element.dataset.dragState="idle");let n=t.concat().filter(l=>/^DID_/.test(l.type)).reverse().find(l=>on[l.type]);n&&n.type!==i.currentState&&(i.currentState=n.type,e.element.dataset.filepondItemState=on[i.currentState]||"");let o=e.query("GET_ITEM_PANEL_ASPECT_RATIO")||e.query("GET_PANEL_ASPECT_RATIO");o?a||(e.height=e.rect.element.width*o):(pc({root:e,actions:t,props:i}),!e.height&&e.ref.container.rect.element.height>0&&(e.height=e.ref.container.rect.element.height)),a&&(e.ref.panel.height=null),e.ref.panel.height=e.height}),uc=ne({create:dc,write:mc,destroy:({root:e,props:t})=>{e.element.removeEventListener("click",e.ref.handleClick),e.dispatch("RELEASE_ITEM",{query:t.id})},tag:"li",name:"item",mixins:{apis:["id","interactionMethod","markedForRemoval","spawnDate","dragCenter","dragOrigin","dragOffset"],styles:["translateX","translateY","scaleX","scaleY","opacity","height"],animations:{scaleX:nn,scaleY:nn,translateX:an,translateY:an,opacity:{type:"tween",duration:150}}}}),Ki=(e,t)=>Math.max(1,Math.floor((e+1)/t)),Ji=(e,t,i)=>{if(!i)return;let a=e.rect.element.width,n=t.length,o=null;if(n===0||i.topE){if(i.left{se(e.element,"role","list"),e.ref.lastItemSpanwDate=Date.now()},gc=({root:e,action:t})=>{let{id:i,index:a,interactionMethod:n}=t;e.ref.addIndex=a;let o=Date.now(),l=o,r=1;if(n!==_e.NONE){r=0;let s=e.query("GET_ITEM_INSERT_INTERVAL"),p=o-e.ref.lastItemSpanwDate;l=p{e.dragOffset?(e.translateX=null,e.translateY=null,e.translateX=e.dragOrigin.x+e.dragOffset.x,e.translateY=e.dragOrigin.y+e.dragOffset.y,e.scaleX=1.025,e.scaleY=1.025):(e.translateX=t,e.translateY=i,Date.now()>e.spawnDate&&(e.opacity===0&&hc(e,t,i,a,n),e.scaleX=1,e.scaleY=1,e.opacity=1))},hc=(e,t,i,a,n)=>{e.interactionMethod===_e.NONE?(e.translateX=null,e.translateX=t,e.translateY=null,e.translateY=i):e.interactionMethod===_e.DROP?(e.translateX=null,e.translateX=t-a*20,e.translateY=null,e.translateY=i-n*10,e.scaleX=.8,e.scaleY=.8):e.interactionMethod===_e.BROWSE?(e.translateY=null,e.translateY=i-30):e.interactionMethod===_e.API&&(e.translateX=null,e.translateX=t-30,e.translateY=null)},Ec=({root:e,action:t})=>{let{id:i}=t,a=e.childViews.find(n=>n.id===i);a&&(a.scaleX=.9,a.scaleY=.9,a.opacity=0,a.markedForRemoval=!0)},Oi=e=>e.rect.element.height+e.rect.element.marginBottom*.5+e.rect.element.marginTop*.5,bc=e=>e.rect.element.width+e.rect.element.marginLeft*.5+e.rect.element.marginRight*.5,Tc=({root:e,action:t})=>{let{id:i,dragState:a}=t,n=e.query("GET_ITEM",{id:i}),o=e.childViews.find(h=>h.id===i),l=e.childViews.length,r=a.getItemIndex(n);if(!o)return;let s={x:o.dragOrigin.x+o.dragOffset.x+o.dragCenter.x,y:o.dragOrigin.y+o.dragOffset.y+o.dragCenter.y},p=Oi(o),c=bc(o),d=Math.floor(e.rect.outer.width/c);d>l&&(d=l);let m=Math.floor(l/d+1);ti.setHeight=p*m,ti.setWidth=c*d;var u={y:Math.floor(s.y/p),x:Math.floor(s.x/c),getGridIndex:function(){return s.y>ti.getHeight||s.y<0||s.x>ti.getWidth||s.x<0?r:this.y*d+this.x},getColIndex:function(){let I=e.query("GET_ACTIVE_ITEMS"),E=e.childViews.filter(O=>O.rect.element.height),T=I.map(O=>E.find(M=>M.id===O.id)),v=T.findIndex(O=>O===o),y=Oi(o),b=T.length,w=b,x=0,_=0,P=0;for(let O=0;OO){if(s.y1?u.getGridIndex():u.getColIndex();e.dispatch("MOVE_ITEM",{query:o,index:f});let g=a.getIndex();if(g===void 0||g!==f){if(a.setIndex(f),g===void 0)return;e.dispatch("DID_REORDER_ITEMS",{items:e.query("GET_ACTIVE_ITEMS"),origin:r,target:f})}},Ic=ge({DID_ADD_ITEM:gc,DID_REMOVE_ITEM:Ec,DID_DRAG_ITEM:Tc}),vc=({root:e,props:t,actions:i,shouldOptimize:a})=>{Ic({root:e,props:t,actions:i});let{dragCoordinates:n}=t,o=e.rect.element.width,l=e.childViews.filter(T=>T.rect.element.height),r=e.query("GET_ACTIVE_ITEMS").map(T=>l.find(v=>v.id===T.id)).filter(T=>T),s=n?Ji(e,r,n):null,p=e.ref.addIndex||null;e.ref.addIndex=null;let c=0,d=0,m=0;if(r.length===0)return;let u=r[0].rect.element,f=u.marginTop+u.marginBottom,g=u.marginLeft+u.marginRight,h=u.width+g,I=u.height+f,E=Ki(o,h);if(E===1){let T=0,v=0;r.forEach((y,b)=>{if(s){let _=b-s;_===-2?v=-f*.25:_===-1?v=-f*.75:_===0?v=f*.75:_===1?v=f*.25:v=0}a&&(y.translateX=null,y.translateY=null),y.markedForRemoval||ln(y,0,T+v);let x=(y.rect.element.height+f)*(y.markedForRemoval?y.opacity:1);T+=x})}else{let T=0,v=0;r.forEach((y,b)=>{b===s&&(c=1),b===p&&(m+=1),y.markedForRemoval&&y.opacity<.5&&(d-=1);let w=b+m+c+d,x=w%E,_=Math.floor(w/E),P=x*h,O=_*I,M=Math.sign(P-T),N=Math.sign(O-v);T=P,v=O,!y.markedForRemoval&&(a&&(y.translateX=null,y.translateY=null),ln(y,P,O,M,N))})}},xc=(e,t)=>t.filter(i=>i.data&&i.data.id?e.id===i.data.id:!0),yc=ne({create:fc,write:vc,tag:"ul",name:"list",didWriteView:({root:e})=>{e.childViews.filter(t=>t.markedForRemoval&&t.opacity===0&&t.resting).forEach(t=>{t._destroy(),e.removeChildView(t)})},filterFrameActionsForChild:xc,mixins:{apis:["dragCoordinates"]}}),_c=({root:e,props:t})=>{e.ref.list=e.appendChildView(e.createChildView(yc)),t.dragCoordinates=null,t.overflowing=!1},Rc=({root:e,props:t,action:i})=>{e.query("GET_ITEM_INSERT_LOCATION_FREEDOM")&&(t.dragCoordinates={left:i.position.scopeLeft-e.ref.list.rect.element.left,top:i.position.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},wc=({props:e})=>{e.dragCoordinates=null},Sc=ge({DID_DRAG:Rc,DID_END_DRAG:wc}),Lc=({root:e,props:t,actions:i})=>{if(Sc({root:e,props:t,actions:i}),e.ref.list.dragCoordinates=t.dragCoordinates,t.overflowing&&!t.overflow&&(t.overflowing=!1,e.element.dataset.state="",e.height=null),t.overflow){let a=Math.round(t.overflow);a!==e.height&&(t.overflowing=!0,e.element.dataset.state="overflow",e.height=a)}},Ac=ne({create:_c,write:Lc,name:"list-scroller",mixins:{apis:["overflow","dragCoordinates"],styles:["height","translateY"],animations:{translateY:"spring"}}}),Oe=(e,t,i,a="")=>{i?se(e,t,a):e.removeAttribute(t)},Mc=e=>{if(!(!e||e.value==="")){try{e.value=""}catch{}if(e.value){let t=ke("form"),i=e.parentNode,a=e.nextSibling;t.appendChild(e),t.reset(),a?i.insertBefore(e,a):i.appendChild(e)}}},Oc=({root:e,props:t})=>{e.element.id=`filepond--browser-${t.id}`,se(e.element,"name",e.query("GET_NAME")),se(e.element,"aria-controls",`filepond--assistant-${t.id}`),se(e.element,"aria-labelledby",`filepond--drop-label-${t.id}`),Gn({root:e,action:{value:e.query("GET_ACCEPTED_FILE_TYPES")}}),Un({root:e,action:{value:e.query("GET_ALLOW_MULTIPLE")}}),Wn({root:e,action:{value:e.query("GET_ALLOW_DIRECTORIES_ONLY")}}),ki({root:e}),Hn({root:e,action:{value:e.query("GET_REQUIRED")}}),jn({root:e,action:{value:e.query("GET_CAPTURE_METHOD")}}),e.ref.handleChange=i=>{if(!e.element.value)return;let a=Array.from(e.element.files).map(n=>(n._relativePath=n.webkitRelativePath,n));setTimeout(()=>{t.onload(a),Mc(e.element)},250)},e.element.addEventListener("change",e.ref.handleChange)},Gn=({root:e,action:t})=>{e.query("GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE")&&Oe(e.element,"accept",!!t.value,t.value?t.value.join(","):"")},Un=({root:e,action:t})=>{Oe(e.element,"multiple",t.value)},Wn=({root:e,action:t})=>{Oe(e.element,"webkitdirectory",t.value)},ki=({root:e})=>{let t=e.query("GET_DISABLED"),i=e.query("GET_ALLOW_BROWSE"),a=t||!i;Oe(e.element,"disabled",a)},Hn=({root:e,action:t})=>{t.value?e.query("GET_TOTAL_ITEMS")===0&&Oe(e.element,"required",!0):Oe(e.element,"required",!1)},jn=({root:e,action:t})=>{Oe(e.element,"capture",!!t.value,t.value===!0?"":t.value)},rn=({root:e})=>{let{element:t}=e;if(e.query("GET_TOTAL_ITEMS")>0){Oe(t,"required",!1),Oe(t,"name",!1);let i=e.query("GET_ACTIVE_ITEMS"),a=!1;for(let n=0;n{e.query("GET_CHECK_VALIDITY")&&e.element.setCustomValidity(e.query("GET_LABEL_INVALID_FIELD"))},Dc=ne({tag:"input",name:"browser",ignoreRect:!0,ignoreRectUpdate:!0,attributes:{type:"file"},create:Oc,destroy:({root:e})=>{e.element.removeEventListener("change",e.ref.handleChange)},write:ge({DID_LOAD_ITEM:rn,DID_REMOVE_ITEM:rn,DID_THROW_ITEM_INVALID:Pc,DID_SET_DISABLED:ki,DID_SET_ALLOW_BROWSE:ki,DID_SET_ALLOW_DIRECTORIES_ONLY:Wn,DID_SET_ALLOW_MULTIPLE:Un,DID_SET_ACCEPTED_FILE_TYPES:Gn,DID_SET_CAPTURE_METHOD:jn,DID_SET_REQUIRED:Hn})}),sn={ENTER:13,SPACE:32},Fc=({root:e,props:t})=>{let i=ke("label");se(i,"for",`filepond--browser-${t.id}`),se(i,"id",`filepond--drop-label-${t.id}`),e.ref.handleKeyDown=a=>{(a.keyCode===sn.ENTER||a.keyCode===sn.SPACE)&&(a.preventDefault(),e.ref.label.click())},e.ref.handleClick=a=>{a.target===i||i.contains(a.target)||e.ref.label.click()},i.addEventListener("keydown",e.ref.handleKeyDown),e.element.addEventListener("click",e.ref.handleClick),qn(i,t.caption),e.appendChild(i),e.ref.label=i},qn=(e,t)=>{e.innerHTML=t;let i=e.querySelector(".filepond--label-action");return i&&se(i,"tabindex","0"),t},zc=ne({name:"drop-label",ignoreRect:!0,create:Fc,destroy:({root:e})=>{e.ref.label.addEventListener("keydown",e.ref.handleKeyDown),e.element.removeEventListener("click",e.ref.handleClick)},write:ge({DID_SET_LABEL_IDLE:({root:e,action:t})=>{qn(e.ref.label,t.value)}}),mixins:{styles:["opacity","translateX","translateY"],animations:{opacity:{type:"tween",duration:150},translateX:"spring",translateY:"spring"}}}),Cc=ne({name:"drip-blob",ignoreRect:!0,mixins:{styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}}}}),Nc=({root:e})=>{let t=e.rect.element.width*.5,i=e.rect.element.height*.5;e.ref.blob=e.appendChildView(e.createChildView(Cc,{opacity:0,scaleX:2.5,scaleY:2.5,translateX:t,translateY:i}))},Bc=({root:e,action:t})=>{if(!e.ref.blob){Nc({root:e});return}e.ref.blob.translateX=t.position.scopeLeft,e.ref.blob.translateY=t.position.scopeTop,e.ref.blob.scaleX=1,e.ref.blob.scaleY=1,e.ref.blob.opacity=1},kc=({root:e})=>{e.ref.blob&&(e.ref.blob.opacity=0)},Vc=({root:e})=>{e.ref.blob&&(e.ref.blob.scaleX=2.5,e.ref.blob.scaleY=2.5,e.ref.blob.opacity=0)},Gc=({root:e,props:t,actions:i})=>{Uc({root:e,props:t,actions:i});let{blob:a}=e.ref;i.length===0&&a&&a.opacity===0&&(e.removeChildView(a),e.ref.blob=null)},Uc=ge({DID_DRAG:Bc,DID_DROP:Vc,DID_END_DRAG:kc}),Wc=ne({ignoreRect:!0,ignoreRectUpdate:!0,name:"drip",write:Gc}),Yn=(e,t)=>{try{let i=new DataTransfer;t.forEach(a=>{a instanceof File?i.items.add(a):i.items.add(new File([a],a.name,{type:a.type}))}),e.files=i.files}catch{return!1}return!0},Hc=({root:e})=>{e.ref.fields={};let t=document.createElement("legend");t.textContent="Files",e.element.appendChild(t)},fi=(e,t)=>e.ref.fields[t],ea=e=>{e.query("GET_ACTIVE_ITEMS").forEach(t=>{e.ref.fields[t.id]&&e.element.appendChild(e.ref.fields[t.id])})},cn=({root:e})=>ea(e),jc=({root:e,action:t})=>{let n=!(e.query("GET_ITEM",t.id).origin===re.LOCAL)&&e.query("SHOULD_UPDATE_FILE_INPUT"),o=ke("input");o.type=n?"file":"hidden",o.name=e.query("GET_NAME"),e.ref.fields[t.id]=o,ea(e)},qc=({root:e,action:t})=>{let i=fi(e,t.id);if(!i||(t.serverFileReference!==null&&(i.value=t.serverFileReference),!e.query("SHOULD_UPDATE_FILE_INPUT")))return;let a=e.query("GET_ITEM",t.id);Yn(i,[a.file])},Yc=({root:e,action:t})=>{e.query("SHOULD_UPDATE_FILE_INPUT")&&setTimeout(()=>{let i=fi(e,t.id);i&&Yn(i,[t.file])},0)},$c=({root:e})=>{e.element.disabled=e.query("GET_DISABLED")},Xc=({root:e,action:t})=>{let i=fi(e,t.id);i&&(i.parentNode&&i.parentNode.removeChild(i),delete e.ref.fields[t.id])},Qc=({root:e,action:t})=>{let i=fi(e,t.id);i&&(t.value===null?i.removeAttribute("value"):i.type!="file"&&(i.value=t.value),ea(e))},Zc=ge({DID_SET_DISABLED:$c,DID_ADD_ITEM:jc,DID_LOAD_ITEM:qc,DID_REMOVE_ITEM:Xc,DID_DEFINE_VALUE:Qc,DID_PREPARE_OUTPUT:Yc,DID_REORDER_ITEMS:cn,DID_SORT_ITEMS:cn}),Kc=ne({tag:"fieldset",name:"data",create:Hc,write:Zc,ignoreRect:!0}),Jc=e=>"getRootNode"in e?e.getRootNode():document,ed=["jpg","jpeg","png","gif","bmp","webp","svg","tiff"],td=["css","csv","html","txt"],id={zip:"zip|compressed",epub:"application/epub+zip"},$n=(e="")=>(e=e.toLowerCase(),ed.includes(e)?"image/"+(e==="jpg"?"jpeg":e==="svg"?"svg+xml":e):td.includes(e)?"text/"+e:id[e]||""),ta=e=>new Promise((t,i)=>{let a=dd(e);if(a.length&&!ad(e))return t(a);nd(e).then(t)}),ad=e=>e.files?e.files.length>0:!1,nd=e=>new Promise((t,i)=>{let a=(e.items?Array.from(e.items):[]).filter(n=>od(n)).map(n=>ld(n));if(!a.length){t(e.files?Array.from(e.files):[]);return}Promise.all(a).then(n=>{let o=[];n.forEach(l=>{o.push.apply(o,l)}),t(o.filter(l=>l).map(l=>(l._relativePath||(l._relativePath=l.webkitRelativePath),l)))}).catch(console.error)}),od=e=>{if(Xn(e)){let t=ia(e);if(t)return t.isFile||t.isDirectory}return e.kind==="file"},ld=e=>new Promise((t,i)=>{if(cd(e)){rd(ia(e)).then(t).catch(i);return}t([e.getAsFile()])}),rd=e=>new Promise((t,i)=>{let a=[],n=0,o=0,l=()=>{o===0&&n===0&&t(a)},r=s=>{n++;let p=s.createReader(),c=()=>{p.readEntries(d=>{if(d.length===0){n--,l();return}d.forEach(m=>{m.isDirectory?r(m):(o++,m.file(u=>{let f=sd(u);m.fullPath&&(f._relativePath=m.fullPath),a.push(f),o--,l()}))}),c()},i)};c()};r(e)}),sd=e=>{if(e.type.length)return e;let t=e.lastModifiedDate,i=e.name,a=$n(ui(e.name));return a.length&&(e=e.slice(0,e.size,a),e.name=i,e.lastModifiedDate=t),e},cd=e=>Xn(e)&&(ia(e)||{}).isDirectory,Xn=e=>"webkitGetAsEntry"in e,ia=e=>e.webkitGetAsEntry(),dd=e=>{let t=[];try{if(t=md(e),t.length)return t;t=pd(e)}catch{}return t},pd=e=>{let t=e.getData("url");return typeof t=="string"&&t.length?[t]:[]},md=e=>{let t=e.getData("text/html");if(typeof t=="string"&&t.length){let i=t.match(/src\s*=\s*"(.+?)"/);if(i)return[i[1]]}return[]},ri=[],et=e=>({pageLeft:e.pageX,pageTop:e.pageY,scopeLeft:e.offsetX||e.layerX,scopeTop:e.offsetY||e.layerY}),ud=(e,t,i)=>{let a=fd(t),n={element:e,filterElement:i,state:null,ondrop:()=>{},onenter:()=>{},ondrag:()=>{},onexit:()=>{},onload:()=>{},allowdrop:()=>{}};return n.destroy=a.addListener(n),n},fd=e=>{let t=ri.find(a=>a.element===e);if(t)return t;let i=gd(e);return ri.push(i),i},gd=e=>{let t=[],i={dragenter:Ed,dragover:bd,dragleave:Id,drop:Td},a={};te(i,(o,l)=>{a[o]=l(e,t),e.addEventListener(o,a[o],!1)});let n={element:e,addListener:o=>(t.push(o),()=>{t.splice(t.indexOf(o),1),t.length===0&&(ri.splice(ri.indexOf(n),1),te(i,l=>{e.removeEventListener(l,a[l],!1)}))})};return n},hd=(e,t)=>("elementFromPoint"in e||(e=document),e.elementFromPoint(t.x,t.y)),aa=(e,t)=>{let i=Jc(t),a=hd(i,{x:e.pageX-window.pageXOffset,y:e.pageY-window.pageYOffset});return a===t||t.contains(a)},Qn=null,ii=(e,t)=>{try{e.dropEffect=t}catch{}},Ed=(e,t)=>i=>{i.preventDefault(),Qn=i.target,t.forEach(a=>{let{element:n,onenter:o}=a;aa(i,n)&&(a.state="enter",o(et(i)))})},bd=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ta(a).then(n=>{let o=!1;t.some(l=>{let{filterElement:r,element:s,onenter:p,onexit:c,ondrag:d,allowdrop:m}=l;ii(a,"copy");let u=m(n);if(!u){ii(a,"none");return}if(aa(i,s)){if(o=!0,l.state===null){l.state="enter",p(et(i));return}if(l.state="over",r&&!u){ii(a,"none");return}d(et(i))}else r&&!o&&ii(a,"none"),l.state&&(l.state=null,c(et(i)))})})},Td=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ta(a).then(n=>{t.forEach(o=>{let{filterElement:l,element:r,ondrop:s,onexit:p,allowdrop:c}=o;if(o.state=null,!(l&&!aa(i,r))){if(!c(n))return p(et(i));s(et(i),n)}})})},Id=(e,t)=>i=>{Qn===i.target&&t.forEach(a=>{let{onexit:n}=a;a.state=null,n(et(i))})},vd=(e,t,i)=>{e.classList.add("filepond--hopper");let{catchesDropsOnPage:a,requiresDropOnElement:n,filterItems:o=c=>c}=i,l=ud(e,a?document.documentElement:e,n),r="",s="";l.allowdrop=c=>t(o(c)),l.ondrop=(c,d)=>{let m=o(d);if(!t(m)){p.ondragend(c);return}s="drag-drop",p.onload(m,c)},l.ondrag=c=>{p.ondrag(c)},l.onenter=c=>{s="drag-over",p.ondragstart(c)},l.onexit=c=>{s="drag-exit",p.ondragend(c)};let p={updateHopperState:()=>{r!==s&&(e.dataset.hopperState=s,r=s)},onload:()=>{},ondragstart:()=>{},ondrag:()=>{},ondragend:()=>{},destroy:()=>{l.destroy()}};return p},Vi=!1,ut=[],Zn=e=>{let t=document.activeElement;if(t&&(/textarea|input/i.test(t.nodeName)||t.getAttribute("contenteditable")==="true")){let a=!1,n=t;for(;n!==document.body;){if(n.classList.contains("filepond--root")){a=!0;break}n=n.parentNode}if(!a)return}ta(e.clipboardData).then(a=>{a.length&&ut.forEach(n=>n(a))})},xd=e=>{ut.includes(e)||(ut.push(e),!Vi&&(Vi=!0,document.addEventListener("paste",Zn)))},yd=e=>{$i(ut,ut.indexOf(e)),ut.length===0&&(document.removeEventListener("paste",Zn),Vi=!1)},_d=()=>{let e=i=>{t.onload(i)},t={destroy:()=>{yd(e)},onload:()=>{}};return xd(e),t},Rd=({root:e,props:t})=>{e.element.id=`filepond--assistant-${t.id}`,se(e.element,"role","alert"),se(e.element,"aria-live","polite"),se(e.element,"aria-relevant","additions")},dn=null,pn=null,Pi=[],gi=(e,t)=>{e.element.textContent=t},wd=e=>{e.element.textContent=""},Kn=(e,t,i)=>{let a=e.query("GET_TOTAL_ITEMS");gi(e,`${i} ${t}, ${a} ${a===1?e.query("GET_LABEL_FILE_COUNT_SINGULAR"):e.query("GET_LABEL_FILE_COUNT_PLURAL")}`),clearTimeout(pn),pn=setTimeout(()=>{wd(e)},1500)},Jn=e=>e.element.parentNode.contains(document.activeElement),Sd=({root:e,action:t})=>{if(!Jn(e))return;e.element.textContent="";let i=e.query("GET_ITEM",t.id);Pi.push(i.filename),clearTimeout(dn),dn=setTimeout(()=>{Kn(e,Pi.join(", "),e.query("GET_LABEL_FILE_ADDED")),Pi.length=0},750)},Ld=({root:e,action:t})=>{if(!Jn(e))return;let i=t.item;Kn(e,i.filename,e.query("GET_LABEL_FILE_REMOVED"))},Ad=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_COMPLETE");gi(e,`${a} ${n}`)},mn=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_ABORTED");gi(e,`${a} ${n}`)},ai=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename;gi(e,`${t.status.main} ${a} ${t.status.sub}`)},Md=ne({create:Rd,ignoreRect:!0,ignoreRectUpdate:!0,write:ge({DID_LOAD_ITEM:Sd,DID_REMOVE_ITEM:Ld,DID_COMPLETE_ITEM_PROCESSING:Ad,DID_ABORT_ITEM_PROCESSING:mn,DID_REVERT_ITEM_PROCESSING:mn,DID_THROW_ITEM_REMOVE_ERROR:ai,DID_THROW_ITEM_LOAD_ERROR:ai,DID_THROW_ITEM_INVALID:ai,DID_THROW_ITEM_PROCESSING_ERROR:ai}),tag:"span",name:"assistant"}),eo=(e,t="-")=>e.replace(new RegExp(`${t}.`,"g"),i=>i.charAt(1).toUpperCase()),to=(e,t=16,i=!0)=>{let a=Date.now(),n=null;return(...o)=>{clearTimeout(n);let l=Date.now()-a,r=()=>{a=Date.now(),e(...o)};le.preventDefault(),Pd=({root:e,props:t})=>{let i=e.query("GET_ID");i&&(e.element.id=i);let a=e.query("GET_CLASS_NAME");a&&a.split(" ").filter(s=>s.length).forEach(s=>{e.element.classList.add(s)}),e.ref.label=e.appendChildView(e.createChildView(zc,{...t,translateY:null,caption:e.query("GET_LABEL_IDLE")})),e.ref.list=e.appendChildView(e.createChildView(Ac,{translateY:null})),e.ref.panel=e.appendChildView(e.createChildView(Vn,{name:"panel-root"})),e.ref.assistant=e.appendChildView(e.createChildView(Md,{...t})),e.ref.data=e.appendChildView(e.createChildView(Kc,{...t})),e.ref.measure=ke("div"),e.ref.measure.style.height="100%",e.element.appendChild(e.ref.measure),e.ref.bounds=null,e.query("GET_STYLES").filter(s=>!Be(s.value)).map(({name:s,value:p})=>{e.element.dataset[s]=p}),e.ref.widthPrevious=null,e.ref.widthUpdated=to(()=>{e.ref.updateHistory=[],e.dispatch("DID_RESIZE_ROOT")},250),e.ref.previousAspectRatio=null,e.ref.updateHistory=[];let n=window.matchMedia("(pointer: fine) and (hover: hover)").matches,o="PointerEvent"in window;e.query("GET_ALLOW_REORDER")&&o&&!n&&(e.element.addEventListener("touchmove",si,{passive:!1}),e.element.addEventListener("gesturestart",si));let l=e.query("GET_CREDITS");if(l.length===2){let s=document.createElement("a");s.className="filepond--credits",s.href=l[0],s.tabIndex=-1,s.target="_blank",s.rel="noopener noreferrer nofollow",s.textContent=l[1],e.element.appendChild(s),e.ref.credits=s}},Dd=({root:e,props:t,actions:i})=>{if(Bd({root:e,props:t,actions:i}),i.filter(b=>/^DID_SET_STYLE_/.test(b.type)).filter(b=>!Be(b.data.value)).map(({type:b,data:w})=>{let x=eo(b.substring(8).toLowerCase(),"_");e.element.dataset[x]=w.value,e.invalidateLayout()}),e.rect.element.hidden)return;e.rect.element.width!==e.ref.widthPrevious&&(e.ref.widthPrevious=e.rect.element.width,e.ref.widthUpdated());let a=e.ref.bounds;a||(a=e.ref.bounds=Cd(e),e.element.removeChild(e.ref.measure),e.ref.measure=null);let{hopper:n,label:o,list:l,panel:r}=e.ref;n&&n.updateHopperState();let s=e.query("GET_PANEL_ASPECT_RATIO"),p=e.query("GET_ALLOW_MULTIPLE"),c=e.query("GET_TOTAL_ITEMS"),d=p?e.query("GET_MAX_FILES")||Od:1,m=c===d,u=i.find(b=>b.type==="DID_ADD_ITEM");if(m&&u){let b=u.data.interactionMethod;o.opacity=0,p?o.translateY=-40:b===_e.API?o.translateX=40:b===_e.BROWSE?o.translateY=40:o.translateY=30}else m||(o.opacity=1,o.translateX=0,o.translateY=0);let f=Fd(e),g=zd(e),h=o.rect.element.height,I=!p||m?0:h,E=m?l.rect.element.marginTop:0,T=c===0?0:l.rect.element.marginBottom,v=I+E+g.visual+T,y=I+E+g.bounds+T;if(l.translateY=Math.max(0,I-l.rect.element.marginTop)-f.top,s){let b=e.rect.element.width,w=b*s;s!==e.ref.previousAspectRatio&&(e.ref.previousAspectRatio=s,e.ref.updateHistory=[]);let x=e.ref.updateHistory;x.push(b);let _=2;if(x.length>_*2){let O=x.length,M=O-10,N=0;for(let S=O;S>=M;S--)if(x[S]===x[S-2]&&N++,N>=_)return}r.scalable=!1,r.height=w;let P=w-I-(T-f.bottom)-(m?E:0);g.visual>P?l.overflow=P:l.overflow=null,e.height=w}else if(a.fixedHeight){r.scalable=!1;let b=a.fixedHeight-I-(T-f.bottom)-(m?E:0);g.visual>b?l.overflow=b:l.overflow=null}else if(a.cappedHeight){let b=v>=a.cappedHeight,w=Math.min(a.cappedHeight,v);r.scalable=!0,r.height=b?w:w-f.top-f.bottom;let x=w-I-(T-f.bottom)-(m?E:0);v>a.cappedHeight&&g.visual>x?l.overflow=x:l.overflow=null,e.height=Math.min(a.cappedHeight,y-f.top-f.bottom)}else{let b=c>0?f.top+f.bottom:0;r.scalable=!0,r.height=Math.max(h,v-b),e.height=Math.max(h,y-b)}e.ref.credits&&r.heightCurrent&&(e.ref.credits.style.transform=`translateY(${r.heightCurrent}px)`)},Fd=e=>{let t=e.ref.list.childViews[0].childViews[0];return t?{top:t.rect.element.marginTop,bottom:t.rect.element.marginBottom}:{top:0,bottom:0}},zd=e=>{let t=0,i=0,a=e.ref.list,n=a.childViews[0],o=n.childViews.filter(E=>E.rect.element.height),l=e.query("GET_ACTIVE_ITEMS").map(E=>o.find(T=>T.id===E.id)).filter(E=>E);if(l.length===0)return{visual:t,bounds:i};let r=n.rect.element.width,s=Ji(n,l,a.dragCoordinates),p=l[0].rect.element,c=p.marginTop+p.marginBottom,d=p.marginLeft+p.marginRight,m=p.width+d,u=p.height+c,f=typeof s<"u"&&s>=0?1:0,g=l.find(E=>E.markedForRemoval&&E.opacity<.45)?-1:0,h=l.length+f+g,I=Ki(r,m);return I===1?l.forEach(E=>{let T=E.rect.element.height+c;i+=T,t+=T*E.opacity}):(i=Math.ceil(h/I)*u,t=i),{visual:t,bounds:i}},Cd=e=>{let t=e.ref.measureHeight||null;return{cappedHeight:parseInt(e.style.maxHeight,10)||null,fixedHeight:t===0?null:t}},na=(e,t)=>{let i=e.query("GET_ALLOW_REPLACE"),a=e.query("GET_ALLOW_MULTIPLE"),n=e.query("GET_TOTAL_ITEMS"),o=e.query("GET_MAX_FILES"),l=t.length;return!a&&l>1?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):(o=a?o:1,!a&&i?!1:Et(o)&&n+l>o?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):!1)},Nd=(e,t,i)=>{let a=e.childViews[0];return Ji(a,t,{left:i.scopeLeft-a.rect.element.left,top:i.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},un=e=>{let t=e.query("GET_ALLOW_DROP"),i=e.query("GET_DISABLED"),a=t&&!i;if(a&&!e.ref.hopper){let n=vd(e.element,o=>{let l=e.query("GET_BEFORE_DROP_FILE")||(()=>!0);return e.query("GET_DROP_VALIDATION")?o.every(s=>tt("ALLOW_HOPPER_ITEM",s,{query:e.query}).every(p=>p===!0)&&l(s)):!0},{filterItems:o=>{let l=e.query("GET_IGNORED_FILES");return o.filter(r=>Je(r)?!l.includes(r.name.toLowerCase()):!0)},catchesDropsOnPage:e.query("GET_DROP_ON_PAGE"),requiresDropOnElement:e.query("GET_DROP_ON_ELEMENT")});n.onload=(o,l)=>{let s=e.ref.list.childViews[0].childViews.filter(c=>c.rect.element.height),p=e.query("GET_ACTIVE_ITEMS").map(c=>s.find(d=>d.id===c.id)).filter(c=>c);Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(c=>{if(na(e,c))return!1;e.dispatch("ADD_ITEMS",{items:c,index:Nd(e.ref.list,p,l),interactionMethod:_e.DROP})}),e.dispatch("DID_DROP",{position:l}),e.dispatch("DID_END_DRAG",{position:l})},n.ondragstart=o=>{e.dispatch("DID_START_DRAG",{position:o})},n.ondrag=to(o=>{e.dispatch("DID_DRAG",{position:o})}),n.ondragend=o=>{e.dispatch("DID_END_DRAG",{position:o})},e.ref.hopper=n,e.ref.drip=e.appendChildView(e.createChildView(Wc))}else!a&&e.ref.hopper&&(e.ref.hopper.destroy(),e.ref.hopper=null,e.removeChildView(e.ref.drip))},fn=(e,t)=>{let i=e.query("GET_ALLOW_BROWSE"),a=e.query("GET_DISABLED"),n=i&&!a;n&&!e.ref.browser?e.ref.browser=e.appendChildView(e.createChildView(Dc,{...t,onload:o=>{Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(l=>{if(na(e,l))return!1;e.dispatch("ADD_ITEMS",{items:l,index:-1,interactionMethod:_e.BROWSE})})}}),0):!n&&e.ref.browser&&(e.removeChildView(e.ref.browser),e.ref.browser=null)},gn=e=>{let t=e.query("GET_ALLOW_PASTE"),i=e.query("GET_DISABLED"),a=t&&!i;a&&!e.ref.paster?(e.ref.paster=_d(),e.ref.paster.onload=n=>{Ae("ADD_ITEMS",n,{dispatch:e.dispatch}).then(o=>{if(na(e,o))return!1;e.dispatch("ADD_ITEMS",{items:o,index:-1,interactionMethod:_e.PASTE})})}):!a&&e.ref.paster&&(e.ref.paster.destroy(),e.ref.paster=null)},Bd=ge({DID_SET_ALLOW_BROWSE:({root:e,props:t})=>{fn(e,t)},DID_SET_ALLOW_DROP:({root:e})=>{un(e)},DID_SET_ALLOW_PASTE:({root:e})=>{gn(e)},DID_SET_DISABLED:({root:e,props:t})=>{un(e),gn(e),fn(e,t),e.query("GET_DISABLED")?e.element.dataset.disabled="disabled":e.element.removeAttribute("data-disabled")}}),kd=ne({name:"root",read:({root:e})=>{e.ref.measure&&(e.ref.measureHeight=e.ref.measure.offsetHeight)},create:Pd,write:Dd,destroy:({root:e})=>{e.ref.paster&&e.ref.paster.destroy(),e.ref.hopper&&e.ref.hopper.destroy(),e.element.removeEventListener("touchmove",si),e.element.removeEventListener("gesturestart",si)},mixins:{styles:["height"]}}),Vd=(e={})=>{let t=null,i=li(),a=ar(Ur(i),[ls,jr(i)],[Os,Hr(i)]);a.dispatch("SET_OPTIONS",{options:e});let n=()=>{document.hidden||a.dispatch("KICK")};document.addEventListener("visibilitychange",n);let o=null,l=!1,r=!1,s=null,p=null,c=()=>{l||(l=!0),clearTimeout(o),o=setTimeout(()=>{l=!1,s=null,p=null,r&&(r=!1,a.dispatch("DID_STOP_RESIZE"))},500)};window.addEventListener("resize",c);let d=kd(a,{id:Yi()}),m=!1,u=!1,f={_read:()=>{l&&(p=window.innerWidth,s||(s=p),!r&&p!==s&&(a.dispatch("DID_START_RESIZE"),r=!0)),u&&m&&(m=d.element.offsetParent===null),!m&&(d._read(),u=d.rect.element.hidden)},_write:R=>{let L=a.processActionQueue().filter(z=>!/^SET_/.test(z.type));m&&!L.length||(E(L),m=d._write(R,L,r),$r(a.query("GET_ITEMS")),m&&a.processDispatchQueue())}},g=R=>L=>{let z={type:R};if(!L)return z;if(L.hasOwnProperty("error")&&(z.error=L.error?{...L.error}:null),L.status&&(z.status={...L.status}),L.file&&(z.output=L.file),L.source)z.file=L.source;else if(L.item||L.id){let F=L.item?L.item:a.query("GET_ITEM",L.id);z.file=F?he(F):null}return L.items&&(z.items=L.items.map(he)),/progress/.test(R)&&(z.progress=L.progress),L.hasOwnProperty("origin")&&L.hasOwnProperty("target")&&(z.origin=L.origin,z.target=L.target),z},h={DID_DESTROY:g("destroy"),DID_INIT:g("init"),DID_THROW_MAX_FILES:g("warning"),DID_INIT_ITEM:g("initfile"),DID_START_ITEM_LOAD:g("addfilestart"),DID_UPDATE_ITEM_LOAD_PROGRESS:g("addfileprogress"),DID_LOAD_ITEM:g("addfile"),DID_THROW_ITEM_INVALID:[g("error"),g("addfile")],DID_THROW_ITEM_LOAD_ERROR:[g("error"),g("addfile")],DID_THROW_ITEM_REMOVE_ERROR:[g("error"),g("removefile")],DID_PREPARE_OUTPUT:g("preparefile"),DID_START_ITEM_PROCESSING:g("processfilestart"),DID_UPDATE_ITEM_PROCESS_PROGRESS:g("processfileprogress"),DID_ABORT_ITEM_PROCESSING:g("processfileabort"),DID_COMPLETE_ITEM_PROCESSING:g("processfile"),DID_COMPLETE_ITEM_PROCESSING_ALL:g("processfiles"),DID_REVERT_ITEM_PROCESSING:g("processfilerevert"),DID_THROW_ITEM_PROCESSING_ERROR:[g("error"),g("processfile")],DID_REMOVE_ITEM:g("removefile"),DID_UPDATE_ITEMS:g("updatefiles"),DID_ACTIVATE_ITEM:g("activatefile"),DID_REORDER_ITEMS:g("reorderfiles")},I=R=>{let L={pond:D,...R};delete L.type,d.element.dispatchEvent(new CustomEvent(`FilePond:${R.type}`,{detail:L,bubbles:!0,cancelable:!0,composed:!0}));let z=[];R.hasOwnProperty("error")&&z.push(R.error),R.hasOwnProperty("file")&&z.push(R.file);let F=["type","error","file"];Object.keys(R).filter(C=>!F.includes(C)).forEach(C=>z.push(R[C])),D.fire(R.type,...z);let G=a.query(`GET_ON${R.type.toUpperCase()}`);G&&G(...z)},E=R=>{R.length&&R.filter(L=>h[L.type]).forEach(L=>{let z=h[L.type];(Array.isArray(z)?z:[z]).forEach(F=>{L.type==="DID_INIT_ITEM"?I(F(L.data)):setTimeout(()=>{I(F(L.data))},0)})})},T=R=>a.dispatch("SET_OPTIONS",{options:R}),v=R=>a.query("GET_ACTIVE_ITEM",R),y=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PREPARE",{query:R,success:F=>{L(F)},failure:F=>{z(F)}})}),b=(R,L={})=>new Promise((z,F)=>{_([{source:R,options:L}],{index:L.index}).then(G=>z(G&&G[0])).catch(F)}),w=R=>R.file&&R.id,x=(R,L)=>(typeof R=="object"&&!w(R)&&!L&&(L=R,R=void 0),a.dispatch("REMOVE_ITEM",{...L,query:R}),a.query("GET_ACTIVE_ITEM",R)===null),_=(...R)=>new Promise((L,z)=>{let F=[],G={};if(ci(R[0]))F.push.apply(F,R[0]),Object.assign(G,R[1]||{});else{let C=R[R.length-1];typeof C=="object"&&!(C instanceof Blob)&&Object.assign(G,R.pop()),F.push(...R)}a.dispatch("ADD_ITEMS",{items:F,index:G.index,interactionMethod:_e.API,success:L,failure:z})}),P=()=>a.query("GET_ACTIVE_ITEMS"),O=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PROCESSING",{query:R,success:F=>{L(F)},failure:F=>{z(F)}})}),M=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z=L.length?L:P();return Promise.all(z.map(y))},N=(...R)=>{let L=Array.isArray(R[0])?R[0]:R;if(!L.length){let z=P().filter(F=>!(F.status===U.IDLE&&F.origin===re.LOCAL)&&F.status!==U.PROCESSING&&F.status!==U.PROCESSING_COMPLETE&&F.status!==U.PROCESSING_REVERT_ERROR);return Promise.all(z.map(O))}return Promise.all(L.map(O))},S=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z;typeof L[L.length-1]=="object"?z=L.pop():Array.isArray(R[0])&&(z=R[1]);let F=P();return L.length?L.map(C=>$e(C)?F[C]?F[C].id:null:C).filter(C=>C).map(C=>x(C,z)):Promise.all(F.map(C=>x(C,z)))},D={...mi(),...f,...Wr(a,i),setOptions:T,addFile:b,addFiles:_,getFile:v,processFile:O,prepareFile:y,removeFile:x,moveFile:(R,L)=>a.dispatch("MOVE_ITEM",{query:R,index:L}),getFiles:P,processFiles:N,removeFiles:S,prepareFiles:M,sort:R=>a.dispatch("SORT",{compare:R}),browse:()=>{var R=d.element.querySelector("input[type=file]");R&&R.click()},destroy:()=>{D.fire("destroy",d.element),a.dispatch("ABORT_ALL"),d._destroy(),window.removeEventListener("resize",c),document.removeEventListener("visibilitychange",n),a.dispatch("DID_DESTROY")},insertBefore:R=>Na(d.element,R),insertAfter:R=>Ba(d.element,R),appendTo:R=>R.appendChild(d.element),replaceElement:R=>{Na(d.element,R),R.parentNode.removeChild(R),t=R},restoreElement:()=>{t&&(Ba(t,d.element),d.element.parentNode.removeChild(d.element),t=null)},isAttachedTo:R=>d.element===R||t===R,element:{get:()=>d.element},status:{get:()=>a.query("GET_STATUS")}};return a.dispatch("DID_INIT"),We(D)},io=(e={})=>{let t={};return te(li(),(a,n)=>{t[a]=n[0]}),Vd({...t,...e})},Gd=e=>e.charAt(0).toLowerCase()+e.slice(1),Ud=e=>eo(e.replace(/^data-/,"")),ao=(e,t)=>{te(t,(i,a)=>{te(e,(n,o)=>{let l=new RegExp(i);if(!l.test(n)||(delete e[n],a===!1))return;if(fe(a)){e[a]=o;return}let s=a.group;ce(a)&&!e[s]&&(e[s]={}),e[s][Gd(n.replace(l,""))]=o}),a.mapping&&ao(e[a.group],a.mapping)})},Wd=(e,t={})=>{let i=[];te(e.attributes,n=>{i.push(e.attributes[n])});let a=i.filter(n=>n.name).reduce((n,o)=>{let l=se(e,o.name);return n[Ud(o.name)]=l===o.name?!0:l,n},{});return ao(a,t),a},Hd=(e,t={})=>{let i={"^class$":"className","^multiple$":"allowMultiple","^capture$":"captureMethod","^webkitdirectory$":"allowDirectoriesOnly","^server":{group:"server",mapping:{"^process":{group:"process"},"^revert":{group:"revert"},"^fetch":{group:"fetch"},"^restore":{group:"restore"},"^load":{group:"load"}}},"^type$":!1,"^files$":!1};tt("SET_ATTRIBUTE_TO_OPTION_MAP",i);let a={...t},n=Wd(e.nodeName==="FIELDSET"?e.querySelector("input[type=file]"):e,i);Object.keys(n).forEach(l=>{ce(n[l])?(ce(a[l])||(a[l]={}),Object.assign(a[l],n[l])):a[l]=n[l]}),a.files=(t.files||[]).concat(Array.from(e.querySelectorAll("input:not([type=file])")).map(l=>({source:l.value,options:{type:l.dataset.type}})));let o=io(a);return e.files&&Array.from(e.files).forEach(l=>{o.addFile(l)}),o.replaceElement(e),o},jd=(...e)=>ir(e[0])?Hd(...e):io(...e),qd=["fire","_read","_write"],hn=e=>{let t={};return _n(e,t,qd),t},Yd=(e,t)=>e.replace(/(?:{([a-zA-Z]+)})/g,(i,a)=>t[a]),$d=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i);return{transfer:(n,o)=>{},post:(n,o,l)=>{let r=Yi();a.onmessage=s=>{s.data.id===r&&o(s.data.message)},a.postMessage({id:r,message:n},l)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},Xd=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),no=(e,t)=>{let i=e.slice(0,e.size,e.type);return i.lastModifiedDate=e.lastModifiedDate,i.name=t,i},Qd=e=>no(e,e.name),En=[],Zd=e=>{if(En.includes(e))return;En.push(e);let t=e({addFilter:Qr,utils:{Type:A,forin:te,isString:fe,isFile:Je,toNaturalFileSize:Nn,replaceInString:Yd,getExtensionFromFilename:ui,getFilenameWithoutExtension:Fn,guesstimateMimeType:$n,getFileFromBlob:ht,getFilenameFromURL:zt,createRoute:ge,createWorker:$d,createView:ne,createItemAPI:he,loadImage:Xd,copyFile:Qd,renameFile:no,createBlob:On,applyFilterChain:Ae,text:ae,getNumericAspectRatioFromString:Sn},views:{fileActionButton:Cn}});Zr(t.options)},Kd=()=>Object.prototype.toString.call(window.operamini)==="[object OperaMini]",Jd=()=>"Promise"in window,ep=()=>"slice"in Blob.prototype,tp=()=>"URL"in window&&"createObjectURL"in window.URL,ip=()=>"visibilityState"in document,ap=()=>"performance"in window,np=()=>"supports"in(window.CSS||{}),op=()=>/MSIE|Trident/.test(window.navigator.userAgent),Gi=(()=>{let e=bn()&&!Kd()&&ip()&&Jd()&&ep()&&tp()&&ap()&&(np()||op());return()=>e})(),Ue={apps:[]},lp="filepond",it=()=>{},oo={},bt={},Ct={},Ui={},ft=it,gt=it,Wi=it,Hi=it,ve=it,ji=it,Ft=it;if(Gi()){Lr(()=>{Ue.apps.forEach(i=>i._read())},i=>{Ue.apps.forEach(a=>a._write(i))});let e=()=>{document.dispatchEvent(new CustomEvent("FilePond:loaded",{detail:{supported:Gi,create:ft,destroy:gt,parse:Wi,find:Hi,registerPlugin:ve,setOptions:Ft}})),document.removeEventListener("DOMContentLoaded",e)};document.readyState!=="loading"?setTimeout(()=>e(),0):document.addEventListener("DOMContentLoaded",e);let t=()=>te(li(),(i,a)=>{Ui[i]=a[1]});oo={...Ln},Ct={...re},bt={...U},Ui={},t(),ft=(...i)=>{let a=jd(...i);return a.on("destroy",gt),Ue.apps.push(a),hn(a)},gt=i=>{let a=Ue.apps.findIndex(n=>n.isAttachedTo(i));return a>=0?(Ue.apps.splice(a,1)[0].restoreElement(),!0):!1},Wi=i=>Array.from(i.querySelectorAll(`.${lp}`)).filter(o=>!Ue.apps.find(l=>l.isAttachedTo(o))).map(o=>ft(o)),Hi=i=>{let a=Ue.apps.find(n=>n.isAttachedTo(i));return a?hn(a):null},ve=(...i)=>{i.forEach(Zd),t()},ji=()=>{let i={};return te(li(),(a,n)=>{i[a]=n[0]}),i},Ft=i=>(ce(i)&&(Ue.apps.forEach(a=>{a.setOptions(i)}),Kr(i)),ji())}function lo(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),i.push.apply(i,a)}return i}function yo(e){for(var t=1;te.length)&&(t=e.length);for(var i=0,a=new Array(t);i
',_p=Number.isNaN||Fe.isNaN;function j(e){return typeof e=="number"&&!_p(e)}var Io=function(t){return t>0&&t<1/0};function la(e){return typeof e>"u"}function ot(e){return sa(e)==="object"&&e!==null}var Rp=Object.prototype.hasOwnProperty;function It(e){if(!ot(e))return!1;try{var t=e.constructor,i=t.prototype;return t&&i&&Rp.call(i,"isPrototypeOf")}catch{return!1}}function Ee(e){return typeof e=="function"}var wp=Array.prototype.slice;function Do(e){return Array.from?Array.from(e):wp.call(e)}function oe(e,t){return e&&Ee(t)&&(Array.isArray(e)||j(e.length)?Do(e).forEach(function(i,a){t.call(e,i,a,e)}):ot(e)&&Object.keys(e).forEach(function(i){t.call(e,e[i],i,e)})),e}var J=Object.assign||function(t){for(var i=arguments.length,a=new Array(i>1?i-1:0),n=1;n0&&a.forEach(function(o){ot(o)&&Object.keys(o).forEach(function(l){t[l]=o[l]})}),t},Sp=/\.\d*(?:0|9){12}\d*$/;function xt(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e11;return Sp.test(e)?Math.round(e*t)/t:e}var Lp=/^width|height|left|top|marginLeft|marginTop$/;function je(e,t){var i=e.style;oe(t,function(a,n){Lp.test(n)&&j(a)&&(a="".concat(a,"px")),i[n]=a})}function Ap(e,t){return e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function de(e,t){if(t){if(j(e.length)){oe(e,function(a){de(a,t)});return}if(e.classList){e.classList.add(t);return}var i=e.className.trim();i?i.indexOf(t)<0&&(e.className="".concat(i," ").concat(t)):e.className=t}}function De(e,t){if(t){if(j(e.length)){oe(e,function(i){De(i,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function vt(e,t,i){if(t){if(j(e.length)){oe(e,function(a){vt(a,t,i)});return}i?de(e,t):De(e,t)}}var Mp=/([a-z\d])([A-Z])/g;function xa(e){return e.replace(Mp,"$1-$2").toLowerCase()}function Ea(e,t){return ot(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(xa(t)))}function Wt(e,t,i){ot(i)?e[t]=i:e.dataset?e.dataset[t]=i:e.setAttribute("data-".concat(xa(t)),i)}function Op(e,t){if(ot(e[t]))try{delete e[t]}catch{e[t]=void 0}else if(e.dataset)try{delete e.dataset[t]}catch{e.dataset[t]=void 0}else e.removeAttribute("data-".concat(xa(t)))}var Fo=/\s\s*/,zo=function(){var e=!1;if(Ti){var t=!1,i=function(){},a=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(o){t=o}});Fe.addEventListener("test",i,a),Fe.removeEventListener("test",i,a)}return e}();function Pe(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Fo).forEach(function(o){if(!zo){var l=e.listeners;l&&l[o]&&l[o][i]&&(n=l[o][i],delete l[o][i],Object.keys(l[o]).length===0&&delete l[o],Object.keys(l).length===0&&delete e.listeners)}e.removeEventListener(o,n,a)})}function Re(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Fo).forEach(function(o){if(a.once&&!zo){var l=e.listeners,r=l===void 0?{}:l;n=function(){delete r[o][i],e.removeEventListener(o,n,a);for(var p=arguments.length,c=new Array(p),d=0;dMath.abs(i)&&(i=m)})}),i}function Ei(e,t){var i=e.pageX,a=e.pageY,n={endX:i,endY:a};return t?n:yo({startX:i,startY:a},n)}function Fp(e){var t=0,i=0,a=0;return oe(e,function(n){var o=n.startX,l=n.startY;t+=o,i+=l,a+=1}),t/=a,i/=a,{pageX:t,pageY:i}}function qe(e){var t=e.aspectRatio,i=e.height,a=e.width,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"contain",o=Io(a),l=Io(i);if(o&&l){var r=i*t;n==="contain"&&r>a||n==="cover"&&r90?{width:s,height:r}:{width:r,height:s}}function Cp(e,t,i,a){var n=t.aspectRatio,o=t.naturalWidth,l=t.naturalHeight,r=t.rotate,s=r===void 0?0:r,p=t.scaleX,c=p===void 0?1:p,d=t.scaleY,m=d===void 0?1:d,u=i.aspectRatio,f=i.naturalWidth,g=i.naturalHeight,h=a.fillColor,I=h===void 0?"transparent":h,E=a.imageSmoothingEnabled,T=E===void 0?!0:E,v=a.imageSmoothingQuality,y=v===void 0?"low":v,b=a.maxWidth,w=b===void 0?1/0:b,x=a.maxHeight,_=x===void 0?1/0:x,P=a.minWidth,O=P===void 0?0:P,M=a.minHeight,N=M===void 0?0:M,S=document.createElement("canvas"),D=S.getContext("2d"),R=qe({aspectRatio:u,width:w,height:_}),L=qe({aspectRatio:u,width:O,height:N},"cover"),z=Math.min(R.width,Math.max(L.width,f)),F=Math.min(R.height,Math.max(L.height,g)),G=qe({aspectRatio:n,width:w,height:_}),C=qe({aspectRatio:n,width:O,height:N},"cover"),Y=Math.min(G.width,Math.max(C.width,o)),Q=Math.min(G.height,Math.max(C.height,l)),$=[-Y/2,-Q/2,Y,Q];return S.width=xt(z),S.height=xt(F),D.fillStyle=I,D.fillRect(0,0,z,F),D.save(),D.translate(z/2,F/2),D.rotate(s*Math.PI/180),D.scale(c,m),D.imageSmoothingEnabled=T,D.imageSmoothingQuality=y,D.drawImage.apply(D,[e].concat(Ro($.map(function(pe){return Math.floor(xt(pe))})))),D.restore(),S}var No=String.fromCharCode;function Np(e,t,i){var a="";i+=t;for(var n=t;n0;)i.push(No.apply(null,Do(n.subarray(0,a)))),n=n.subarray(a);return"data:".concat(t,";base64,").concat(btoa(i.join("")))}function Gp(e){var t=new DataView(e),i;try{var a,n,o;if(t.getUint8(0)===255&&t.getUint8(1)===216)for(var l=t.byteLength,r=2;r+1=8&&(o=p+d)}}}if(o){var m=t.getUint16(o,a),u,f;for(f=0;f=0?o:Oo),height:Math.max(a.offsetHeight,l>=0?l:Po)};this.containerData=r,je(n,{width:r.width,height:r.height}),de(t,be),De(n,be)},initCanvas:function(){var t=this.containerData,i=this.imageData,a=this.options.viewMode,n=Math.abs(i.rotate)%180===90,o=n?i.naturalHeight:i.naturalWidth,l=n?i.naturalWidth:i.naturalHeight,r=o/l,s=t.width,p=t.height;t.height*r>t.width?a===3?s=t.height*r:p=t.width/r:a===3?p=t.width/r:s=t.height*r;var c={aspectRatio:r,naturalWidth:o,naturalHeight:l,width:s,height:p};this.canvasData=c,this.limited=a===1||a===2,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(t.width-c.width)/2,c.top=(t.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=J({},c)},limitCanvas:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=a.viewMode,s=o.aspectRatio,p=this.cropped&&l;if(t){var c=Number(a.minCanvasWidth)||0,d=Number(a.minCanvasHeight)||0;r>1?(c=Math.max(c,n.width),d=Math.max(d,n.height),r===3&&(d*s>c?c=d*s:d=c/s)):r>0&&(c?c=Math.max(c,p?l.width:0):d?d=Math.max(d,p?l.height:0):p&&(c=l.width,d=l.height,d*s>c?c=d*s:d=c/s));var m=qe({aspectRatio:s,width:c,height:d});c=m.width,d=m.height,o.minWidth=c,o.minHeight=d,o.maxWidth=1/0,o.maxHeight=1/0}if(i)if(r>(p?0:1)){var u=n.width-o.width,f=n.height-o.height;o.minLeft=Math.min(0,u),o.minTop=Math.min(0,f),o.maxLeft=Math.max(0,u),o.maxTop=Math.max(0,f),p&&this.limited&&(o.minLeft=Math.min(l.left,l.left+(l.width-o.width)),o.minTop=Math.min(l.top,l.top+(l.height-o.height)),o.maxLeft=l.left,o.maxTop=l.top,r===2&&(o.width>=n.width&&(o.minLeft=Math.min(0,u),o.maxLeft=Math.max(0,u)),o.height>=n.height&&(o.minTop=Math.min(0,f),o.maxTop=Math.max(0,f))))}else o.minLeft=-o.width,o.minTop=-o.height,o.maxLeft=n.width,o.maxTop=n.height},renderCanvas:function(t,i){var a=this.canvasData,n=this.imageData;if(i){var o=zp({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),l=o.width,r=o.height,s=a.width*(l/a.naturalWidth),p=a.height*(r/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(p-a.height)/2,a.width=s,a.height=p,a.aspectRatio=l/r,a.naturalWidth=l,a.naturalHeight=r,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.widtha.maxHeight||a.heighti.width?o.height=o.width/a:o.width=o.height*a),this.cropBoxData=o,this.limitCropBox(!0,!0),o.width=Math.min(Math.max(o.width,o.minWidth),o.maxWidth),o.height=Math.min(Math.max(o.height,o.minHeight),o.maxHeight),o.width=Math.max(o.minWidth,o.width*n),o.height=Math.max(o.minHeight,o.height*n),o.left=i.left+(i.width-o.width)/2,o.top=i.top+(i.height-o.height)/2,o.oldLeft=o.left,o.oldTop=o.top,this.initialCropBoxData=J({},o)},limitCropBox:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=this.limited,s=a.aspectRatio;if(t){var p=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,d=r?Math.min(n.width,o.width,o.width+o.left,n.width-o.left):n.width,m=r?Math.min(n.height,o.height,o.height+o.top,n.height-o.top):n.height;p=Math.min(p,n.width),c=Math.min(c,n.height),s&&(p&&c?c*s>p?c=p/s:p=c*s:p?c=p/s:c&&(p=c*s),m*s>d?m=d/s:d=m*s),l.minWidth=Math.min(p,d),l.minHeight=Math.min(c,m),l.maxWidth=d,l.maxHeight=m}i&&(r?(l.minLeft=Math.max(0,o.left),l.minTop=Math.max(0,o.top),l.maxLeft=Math.min(n.width,o.left+o.width)-l.width,l.maxTop=Math.min(n.height,o.top+o.height)-l.height):(l.minLeft=0,l.minTop=0,l.maxLeft=n.width-l.width,l.maxTop=n.height-l.height))},renderCropBox:function(){var t=this.options,i=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.widtha.maxHeight||a.height=i.width&&a.height>=i.height?So:Ia),je(this.cropBox,J({width:a.width,height:a.height},Gt({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),yt(this.element,ma,this.getData())}},Hp={initPreview:function(){var t=this.element,i=this.crossOrigin,a=this.options.preview,n=i?this.crossOriginUrl:this.url,o=t.alt||"The image to preview",l=document.createElement("img");if(i&&(l.crossOrigin=i),l.src=n,l.alt=o,this.viewBox.appendChild(l),this.viewBoxImage=l,!!a){var r=a;typeof a=="string"?r=t.ownerDocument.querySelectorAll(a):a.querySelector&&(r=[a]),this.previews=r,oe(r,function(s){var p=document.createElement("img");Wt(s,hi,{width:s.offsetWidth,height:s.offsetHeight,html:s.innerHTML}),i&&(p.crossOrigin=i),p.src=n,p.alt=o,p.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',s.innerHTML="",s.appendChild(p)})}},resetPreview:function(){oe(this.previews,function(t){var i=Ea(t,hi);je(t,{width:i.width,height:i.height}),t.innerHTML=i.html,Op(t,hi)})},preview:function(){var t=this.imageData,i=this.canvasData,a=this.cropBoxData,n=a.width,o=a.height,l=t.width,r=t.height,s=a.left-i.left-t.left,p=a.top-i.top-t.top;!this.cropped||this.disabled||(je(this.viewBoxImage,J({width:l,height:r},Gt(J({translateX:-s,translateY:-p},t)))),oe(this.previews,function(c){var d=Ea(c,hi),m=d.width,u=d.height,f=m,g=u,h=1;n&&(h=m/n,g=o*h),o&&g>u&&(h=u/o,f=n*h,g=u),je(c,{width:f,height:g}),je(c.getElementsByTagName("img")[0],J({width:l*h,height:r*h},Gt(J({translateX:-s*h,translateY:-p*h},t))))}))}},jp={bind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Re(t,ga,i.cropstart),Ee(i.cropmove)&&Re(t,fa,i.cropmove),Ee(i.cropend)&&Re(t,ua,i.cropend),Ee(i.crop)&&Re(t,ma,i.crop),Ee(i.zoom)&&Re(t,ha,i.zoom),Re(a,mo,this.onCropStart=this.cropStart.bind(this)),i.zoomable&&i.zoomOnWheel&&Re(a,Eo,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Re(a,po,this.onDblclick=this.dblclick.bind(this)),Re(t.ownerDocument,uo,this.onCropMove=this.cropMove.bind(this)),Re(t.ownerDocument,fo,this.onCropEnd=this.cropEnd.bind(this)),i.responsive&&Re(window,ho,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Pe(t,ga,i.cropstart),Ee(i.cropmove)&&Pe(t,fa,i.cropmove),Ee(i.cropend)&&Pe(t,ua,i.cropend),Ee(i.crop)&&Pe(t,ma,i.crop),Ee(i.zoom)&&Pe(t,ha,i.zoom),Pe(a,mo,this.onCropStart),i.zoomable&&i.zoomOnWheel&&Pe(a,Eo,this.onWheel,{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Pe(a,po,this.onDblclick),Pe(t.ownerDocument,uo,this.onCropMove),Pe(t.ownerDocument,fo,this.onCropEnd),i.responsive&&Pe(window,ho,this.onResize)}},qp={resize:function(){if(!this.disabled){var t=this.options,i=this.container,a=this.containerData,n=i.offsetWidth/a.width,o=i.offsetHeight/a.height,l=Math.abs(n-1)>Math.abs(o-1)?n:o;if(l!==1){var r,s;t.restore&&(r=this.getCanvasData(),s=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(oe(r,function(p,c){r[c]=p*l})),this.setCropBoxData(oe(s,function(p,c){s[c]=p*l})))}}},dblclick:function(){this.disabled||this.options.dragMode===Mo||this.setDragMode(Ap(this.dragBox,da)?Ao:va)},wheel:function(t){var i=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),!this.wheeling&&(this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){var i=t.buttons,a=t.button;if(!(this.disabled||(t.type==="mousedown"||t.type==="pointerdown"&&t.pointerType==="mouse")&&(j(i)&&i!==1||j(a)&&a!==0||t.ctrlKey))){var n=this.options,o=this.pointers,l;t.changedTouches?oe(t.changedTouches,function(r){o[r.identifier]=Ei(r)}):o[t.pointerId||0]=Ei(t),Object.keys(o).length>1&&n.zoomable&&n.zoomOnTouch?l=Lo:l=Ea(t.target,Ut),Tp.test(l)&&yt(this.element,ga,{originalEvent:t,action:l})!==!1&&(t.preventDefault(),this.action=l,this.cropping=!1,l===wo&&(this.cropping=!0,de(this.dragBox,bi)))}},cropMove:function(t){var i=this.action;if(!(this.disabled||!i)){var a=this.pointers;t.preventDefault(),yt(this.element,fa,{originalEvent:t,action:i})!==!1&&(t.changedTouches?oe(t.changedTouches,function(n){J(a[n.identifier]||{},Ei(n,!0))}):J(a[t.pointerId||0]||{},Ei(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var i=this.action,a=this.pointers;t.changedTouches?oe(t.changedTouches,function(n){delete a[n.identifier]}):delete a[t.pointerId||0],i&&(t.preventDefault(),Object.keys(a).length||(this.action=""),this.cropping&&(this.cropping=!1,vt(this.dragBox,bi,this.cropped&&this.options.modal)),yt(this.element,ua,{originalEvent:t,action:i}))}}},Yp={change:function(t){var i=this.options,a=this.canvasData,n=this.containerData,o=this.cropBoxData,l=this.pointers,r=this.action,s=i.aspectRatio,p=o.left,c=o.top,d=o.width,m=o.height,u=p+d,f=c+m,g=0,h=0,I=n.width,E=n.height,T=!0,v;!s&&t.shiftKey&&(s=d&&m?d/m:1),this.limited&&(g=o.minLeft,h=o.minTop,I=g+Math.min(n.width,a.width,a.left+a.width),E=h+Math.min(n.height,a.height,a.top+a.height));var y=l[Object.keys(l)[0]],b={x:y.endX-y.startX,y:y.endY-y.startY},w=function(_){switch(_){case at:u+b.x>I&&(b.x=I-u);break;case nt:p+b.xE&&(b.y=E-f);break}};switch(r){case Ia:p+=b.x,c+=b.y;break;case at:if(b.x>=0&&(u>=I||s&&(c<=h||f>=E))){T=!1;break}w(at),d+=b.x,d<0&&(r=nt,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case He:if(b.y<=0&&(c<=h||s&&(p<=g||u>=I))){T=!1;break}w(He),m-=b.y,c+=b.y,m<0&&(r=Tt,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case nt:if(b.x<=0&&(p<=g||s&&(c<=h||f>=E))){T=!1;break}w(nt),d-=b.x,p+=b.x,d<0&&(r=at,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case Tt:if(b.y>=0&&(f>=E||s&&(p<=g||u>=I))){T=!1;break}w(Tt),m+=b.y,m<0&&(r=He,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case Nt:if(s){if(b.y<=0&&(c<=h||u>=I)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s}else w(He),w(at),b.x>=0?uh&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=Vt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Bt,d=-d,p-=d):m<0&&(r=kt,m=-m,c-=m);break;case Bt:if(s){if(b.y<=0&&(c<=h||p<=g)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s,p+=o.width-d}else w(He),w(nt),b.x<=0?p>g?(d-=b.x,p+=b.x):b.y<=0&&c<=h&&(T=!1):(d-=b.x,p+=b.x),b.y<=0?c>h&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=kt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Nt,d=-d,p-=d):m<0&&(r=Vt,m=-m,c-=m);break;case Vt:if(s){if(b.x<=0&&(p<=g||f>=E)){T=!1;break}w(nt),d-=b.x,p+=b.x,m=d/s}else w(Tt),w(nt),b.x<=0?p>g?(d-=b.x,p+=b.x):b.y>=0&&f>=E&&(T=!1):(d-=b.x,p+=b.x),b.y>=0?f=0&&(u>=I||f>=E)){T=!1;break}w(at),d+=b.x,m=d/s}else w(Tt),w(at),b.x>=0?u=0&&f>=E&&(T=!1):d+=b.x,b.y>=0?f0?r=b.y>0?kt:Nt:b.x<0&&(p-=d,r=b.y>0?Vt:Bt),b.y<0&&(c-=m),this.cropped||(De(this.cropBox,be),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0));break}T&&(o.width=d,o.height=m,o.left=p,o.top=c,this.action=r,this.renderCropBox()),oe(l,function(x){x.startX=x.endX,x.startY=x.endY})}},$p={crop:function(){return this.ready&&!this.cropped&&!this.disabled&&(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&de(this.dragBox,bi),De(this.cropBox,be),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=J({},this.initialImageData),this.canvasData=J({},this.initialCanvasData),this.cropBoxData=J({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(J(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),De(this.dragBox,bi),de(this.cropBox,be)),this},replace:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return!this.disabled&&t&&(this.isImg&&(this.element.src=t),i?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,oe(this.previews,function(a){a.getElementsByTagName("img")[0].src=t}))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,De(this.cropper,so)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,de(this.cropper,so)),this},destroy:function(){var t=this.element;return t[K]?(t[K]=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=a.left,o=a.top;return this.moveTo(la(t)?t:n+Number(t),la(i)?i:o+Number(i))},moveTo:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(j(t)&&(a.left=t,n=!0),j(i)&&(a.top=i,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,i){var a=this.canvasData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(a.width*t/a.naturalWidth,null,i)},zoomTo:function(t,i,a){var n=this.options,o=this.canvasData,l=o.width,r=o.height,s=o.naturalWidth,p=o.naturalHeight;if(t=Number(t),t>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,d=p*t;if(yt(this.element,ha,{ratio:t,oldRatio:l/s,originalEvent:a})===!1)return this;if(a){var m=this.pointers,u=Co(this.cropper),f=m&&Object.keys(m).length?Fp(m):{pageX:a.pageX,pageY:a.pageY};o.left-=(c-l)*((f.pageX-u.left-o.left)/l),o.top-=(d-r)*((f.pageY-u.top-o.top)/r)}else It(i)&&j(i.x)&&j(i.y)?(o.left-=(c-l)*((i.x-o.left)/l),o.top-=(d-r)*((i.y-o.top)/r)):(o.left-=(c-l)/2,o.top-=(d-r)/2);o.width=c,o.height=d,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return t=Number(t),j(t)&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var i=this.imageData.scaleY;return this.scale(t,j(i)?i:1)},scaleY:function(t){var i=this.imageData.scaleX;return this.scale(j(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(j(t)&&(a.scaleX=t,n=!0),j(i)&&(a.scaleY=i,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.options,a=this.imageData,n=this.canvasData,o=this.cropBoxData,l;if(this.ready&&this.cropped){l={x:o.left-n.left,y:o.top-n.top,width:o.width,height:o.height};var r=a.width/a.naturalWidth;if(oe(l,function(c,d){l[d]=c/r}),t){var s=Math.round(l.y+l.height),p=Math.round(l.x+l.width);l.x=Math.round(l.x),l.y=Math.round(l.y),l.width=p-l.x,l.height=s-l.y}}else l={x:0,y:0,width:0,height:0};return i.rotatable&&(l.rotate=a.rotate||0),i.scalable&&(l.scaleX=a.scaleX||1,l.scaleY=a.scaleY||1),l},setData:function(t){var i=this.options,a=this.imageData,n=this.canvasData,o={};if(this.ready&&!this.disabled&&It(t)){var l=!1;i.rotatable&&j(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,l=!0),i.scalable&&(j(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,l=!0),j(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,l=!0)),l&&this.renderCanvas(!0,!0);var r=a.width/a.naturalWidth;j(t.x)&&(o.left=t.x*r+n.left),j(t.y)&&(o.top=t.y*r+n.top),j(t.width)&&(o.width=t.width*r),j(t.height)&&(o.height=t.height*r),this.setCropBoxData(o)}return this},getContainerData:function(){return this.ready?J({},this.containerData):{}},getImageData:function(){return this.sized?J({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,i={};return this.ready&&oe(["left","top","width","height","naturalWidth","naturalHeight"],function(a){i[a]=t[a]}),i},setCanvasData:function(t){var i=this.canvasData,a=i.aspectRatio;return this.ready&&!this.disabled&&It(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)?(i.width=t.width,i.height=t.width/a):j(t.height)&&(i.height=t.height,i.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t=this.cropBoxData,i;return this.ready&&this.cropped&&(i={left:t.left,top:t.top,width:t.width,height:t.height}),i||{}},setCropBoxData:function(t){var i=this.cropBoxData,a=this.options.aspectRatio,n,o;return this.ready&&this.cropped&&!this.disabled&&It(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)&&t.width!==i.width&&(n=!0,i.width=t.width),j(t.height)&&t.height!==i.height&&(o=!0,i.height=t.height),a&&(n?i.height=i.width/a:o&&(i.width=i.height*a)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var i=this.canvasData,a=Cp(this.image,this.imageData,i,t);if(!this.cropped)return a;var n=this.getData(t.rounded),o=n.x,l=n.y,r=n.width,s=n.height,p=a.width/Math.floor(i.naturalWidth);p!==1&&(o*=p,l*=p,r*=p,s*=p);var c=r/s,d=qe({aspectRatio:c,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),m=qe({aspectRatio:c,width:t.minWidth||0,height:t.minHeight||0},"cover"),u=qe({aspectRatio:c,width:t.width||(p!==1?a.width:r),height:t.height||(p!==1?a.height:s)}),f=u.width,g=u.height;f=Math.min(d.width,Math.max(m.width,f)),g=Math.min(d.height,Math.max(m.height,g));var h=document.createElement("canvas"),I=h.getContext("2d");h.width=xt(f),h.height=xt(g),I.fillStyle=t.fillColor||"transparent",I.fillRect(0,0,f,g);var E=t.imageSmoothingEnabled,T=E===void 0?!0:E,v=t.imageSmoothingQuality;I.imageSmoothingEnabled=T,v&&(I.imageSmoothingQuality=v);var y=a.width,b=a.height,w=o,x=l,_,P,O,M,N,S;w<=-r||w>y?(w=0,_=0,O=0,N=0):w<=0?(O=-w,w=0,_=Math.min(y,r+w),N=_):w<=y&&(O=0,_=Math.min(r,y-w),N=_),_<=0||x<=-s||x>b?(x=0,P=0,M=0,S=0):x<=0?(M=-x,x=0,P=Math.min(b,s+x),S=P):x<=b&&(M=0,P=Math.min(s,b-x),S=P);var D=[w,x,_,P];if(N>0&&S>0){var R=f/r;D.push(O*R,M*R,N*R,S*R)}return I.drawImage.apply(I,[a].concat(Ro(D.map(function(L){return Math.floor(xt(L))})))),h},setAspectRatio:function(t){var i=this.options;return!this.disabled&&!la(t)&&(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var i=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var o=t===va,l=i.movable&&t===Ao;t=o||l?t:Mo,i.dragMode=t,Wt(a,Ut,t),vt(a,da,o),vt(a,pa,l),i.cropBoxMovable||(Wt(n,Ut,t),vt(n,da,o),vt(n,pa,l))}return this}},Xp=Fe.Cropper,ya=function(){function e(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(sp(this,e),!t||!xp.test(t.tagName))throw new Error("The first argument is required and must be an or element.");this.element=t,this.options=J({},To,It(i)&&i),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return cp(e,[{key:"init",value:function(){var i=this.element,a=i.tagName.toLowerCase(),n;if(!i[K]){if(i[K]=this,a==="img"){if(this.isImg=!0,n=i.getAttribute("src")||"",this.originalUrl=n,!n)return;n=i.src}else a==="canvas"&&window.HTMLCanvasElement&&(n=i.toDataURL());this.load(n)}}},{key:"load",value:function(i){var a=this;if(i){this.url=i,this.imageData={};var n=this.element,o=this.options;if(!o.rotatable&&!o.scalable&&(o.checkOrientation=!1),!o.checkOrientation||!window.ArrayBuffer){this.clone();return}if(Ip.test(i)){vp.test(i)?this.read(kp(i)):this.clone();return}var l=new XMLHttpRequest,r=this.clone.bind(this);this.reloading=!0,this.xhr=l,l.onabort=r,l.onerror=r,l.ontimeout=r,l.onprogress=function(){l.getResponseHeader("content-type")!==bo&&l.abort()},l.onload=function(){a.read(l.response)},l.onloadend=function(){a.reloading=!1,a.xhr=null},o.checkCrossOrigin&&vo(i)&&n.crossOrigin&&(i=xo(i)),l.open("GET",i,!0),l.responseType="arraybuffer",l.withCredentials=n.crossOrigin==="use-credentials",l.send()}}},{key:"read",value:function(i){var a=this.options,n=this.imageData,o=Gp(i),l=0,r=1,s=1;if(o>1){this.url=Vp(i,bo);var p=Up(o);l=p.rotate,r=p.scaleX,s=p.scaleY}a.rotatable&&(n.rotate=l),a.scalable&&(n.scaleX=r,n.scaleY=s),this.clone()}},{key:"clone",value:function(){var i=this.element,a=this.url,n=i.crossOrigin,o=a;this.options.checkCrossOrigin&&vo(a)&&(n||(n="anonymous"),o=xo(a)),this.crossOrigin=n,this.crossOriginUrl=o;var l=document.createElement("img");n&&(l.crossOrigin=n),l.src=o||a,l.alt=i.alt||"The image to crop",this.image=l,l.onload=this.start.bind(this),l.onerror=this.stop.bind(this),de(l,co),i.parentNode.insertBefore(l,i.nextSibling)}},{key:"start",value:function(){var i=this,a=this.image;a.onload=null,a.onerror=null,this.sizing=!0;var n=Fe.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(Fe.navigator.userAgent),o=function(p,c){J(i.imageData,{naturalWidth:p,naturalHeight:c,aspectRatio:p/c}),i.initialImageData=J({},i.imageData),i.sizing=!1,i.sized=!0,i.build()};if(a.naturalWidth&&!n){o(a.naturalWidth,a.naturalHeight);return}var l=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=l,l.onload=function(){o(l.width,l.height),n||r.removeChild(l)},l.src=a.src,n||(l.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",r.appendChild(l))}},{key:"stop",value:function(){var i=this.image;i.onload=null,i.onerror=null,i.parentNode.removeChild(i),this.image=null}},{key:"build",value:function(){if(!(!this.sized||this.ready)){var i=this.element,a=this.options,n=this.image,o=i.parentNode,l=document.createElement("div");l.innerHTML=yp;var r=l.querySelector(".".concat(K,"-container")),s=r.querySelector(".".concat(K,"-canvas")),p=r.querySelector(".".concat(K,"-drag-box")),c=r.querySelector(".".concat(K,"-crop-box")),d=c.querySelector(".".concat(K,"-face"));this.container=o,this.cropper=r,this.canvas=s,this.dragBox=p,this.cropBox=c,this.viewBox=r.querySelector(".".concat(K,"-view-box")),this.face=d,s.appendChild(n),de(i,be),o.insertBefore(r,i.nextSibling),De(n,co),this.initPreview(),this.bind(),a.initialAspectRatio=Math.max(0,a.initialAspectRatio)||NaN,a.aspectRatio=Math.max(0,a.aspectRatio)||NaN,a.viewMode=Math.max(0,Math.min(3,Math.round(a.viewMode)))||0,de(c,be),a.guides||de(c.getElementsByClassName("".concat(K,"-dashed")),be),a.center||de(c.getElementsByClassName("".concat(K,"-center")),be),a.background&&de(r,"".concat(K,"-bg")),a.highlight||de(d,gp),a.cropBoxMovable&&(de(d,pa),Wt(d,Ut,Ia)),a.cropBoxResizable||(de(c.getElementsByClassName("".concat(K,"-line")),be),de(c.getElementsByClassName("".concat(K,"-point")),be)),this.render(),this.ready=!0,this.setDragMode(a.dragMode),a.autoCrop&&this.crop(),this.setData(a.data),Ee(a.ready)&&Re(i,go,a.ready,{once:!0}),yt(i,go)}}},{key:"unbuild",value:function(){if(this.ready){this.ready=!1,this.unbind(),this.resetPreview();var i=this.cropper.parentNode;i&&i.removeChild(this.cropper),De(this.element,be)}}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}],[{key:"noConflict",value:function(){return window.Cropper=Xp,e}},{key:"setDefaults",value:function(i){J(To,It(i)&&i)}}])}();J(ya.prototype,Wp,Hp,jp,qp,Yp,$p);var Bo={"application/prs.cww":["cww"],"application/prs.xsf+xml":["xsf"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["*xfdf"],"application/vnd.age":["age"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["*fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.slides":["ggs"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.gov.sk.xmldatacontainer+xml":["xdcf"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["*mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.nato.bindingdataobject+xml":["bdo"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.pwg-xhtml-print+xml":["xhtm"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml","uo"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["*prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["*sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["*aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif","btf"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.bary":["bary"],"model/vnd.cld":["cld"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["*mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.pytha.pyox":["pyo","pyox"],"model/vnd.sap.vds":["vds"],"model/vnd.usda":["usda"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.familysearch.gedcom":["ged"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};Object.freeze(Bo);var ko=Bo;var Vo={"application/andrew-inset":["ez"],"application/appinstaller":["appinstaller"],"application/applixware":["aw"],"application/appx":["appx"],"application/appxbundle":["appxbundle"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/automationml-aml+xml":["aml"],"application/automationml-amlx+zip":["amlx"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cpl+xml":["cpl"],"application/cu-seeme":["cu"],"application/cwl":["cwl"],"application/dash+xml":["mpd"],"application/dash-patch+xml":["mpp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdf":["fdf"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["*js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/media-policy-dataset+xml":["mpf"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["*mp4","*mpg4","mp4s","m4p"],"application/msix":["msix"],"application/msixbundle":["msixbundle"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-keys":["asc"],"application/pgp-signature":["sig","*asc"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/sql":["sql"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/watcherinfo+xml":["wif"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xfdf":["xfdf"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/aac":["adts","aac"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avci":["avci"],"image/avcs":["avcs"],"image/avif":["avif"],"image/bmp":["bmp","dib"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/dpx":["dpx"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm","jpgm"],"image/jpx":["jpx","jpf"],"image/jxl":["jxl"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/jt":["jt"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/prc":["prc"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/u3d":["u3d"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/javascript":["js","mjs"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["md","markdown"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/wgsl":["wgsl"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","*jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts","m2t","m2ts","mts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};Object.freeze(Vo);var Go=Vo;var we=function(e,t,i,a){if(i==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!a:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?a:i==="a"?a.call(e):a?a.value:t.get(e)},_t,Ht,lt,_a=class{constructor(...t){_t.set(this,new Map),Ht.set(this,new Map),lt.set(this,new Map);for(let i of t)this.define(i)}define(t,i=!1){for(let[a,n]of Object.entries(t)){a=a.toLowerCase(),n=n.map(r=>r.toLowerCase()),we(this,lt,"f").has(a)||we(this,lt,"f").set(a,new Set);let o=we(this,lt,"f").get(a),l=!0;for(let r of n){let s=r.startsWith("*");if(r=s?r.slice(1):r,o?.add(r),l&&we(this,Ht,"f").set(a,r),l=!1,s)continue;let p=we(this,_t,"f").get(r);if(p&&p!=a&&!i)throw new Error(`"${a} -> ${r}" conflicts with "${p} -> ${r}". Pass \`force=true\` to override this definition.`);we(this,_t,"f").set(r,a)}}return this}getType(t){if(typeof t!="string")return null;let i=t.replace(/^.*[/\\]/,"").toLowerCase(),a=i.replace(/^.*\./,"").toLowerCase(),n=i.length{throw new Error("define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances")},Object.freeze(this);for(let t of we(this,lt,"f").values())Object.freeze(t);return this}_getTestState(){return{types:we(this,_t,"f"),extensions:we(this,Ht,"f")}}};_t=new WeakMap,Ht=new WeakMap,lt=new WeakMap;var Ra=_a;var Uo=new Ra(Go,ko)._freeze();var Wo=({addFilter:e,utils:t})=>{let{Type:i,replaceInString:a,toNaturalFileSize:n}=t;return e("ALLOW_HOPPER_ITEM",(o,{query:l})=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return!0;let r=l("GET_MAX_FILE_SIZE");if(r!==null&&o.size>r)return!1;let s=l("GET_MIN_FILE_SIZE");return!(s!==null&&o.sizenew Promise((r,s)=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return r(o);let p=l("GET_FILE_VALIDATE_SIZE_FILTER");if(p&&!p(o))return r(o);let c=l("GET_MAX_FILE_SIZE");if(c!==null&&o.size>c){s({status:{main:l("GET_LABEL_MAX_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_FILE_SIZE"),{filesize:n(c,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}let d=l("GET_MIN_FILE_SIZE");if(d!==null&&o.sizef+g.fileSize,0)>m){s({status:{main:l("GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_TOTAL_FILE_SIZE"),{filesize:n(m,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}r(o)})),{options:{allowFileSizeValidation:[!0,i.BOOLEAN],maxFileSize:[null,i.INT],minFileSize:[null,i.INT],maxTotalFileSize:[null,i.INT],fileValidateSizeFilter:[null,i.FUNCTION],labelMinFileSizeExceeded:["File is too small",i.STRING],labelMinFileSize:["Minimum file size is {filesize}",i.STRING],labelMaxFileSizeExceeded:["File is too large",i.STRING],labelMaxFileSize:["Maximum file size is {filesize}",i.STRING],labelMaxTotalFileSizeExceeded:["Maximum total size exceeded",i.STRING],labelMaxTotalFileSize:["Maximum total file size is {filesize}",i.STRING]}}},Qp=typeof window<"u"&&typeof window.document<"u";Qp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Wo}));var Ho=Wo;var jo=({addFilter:e,utils:t})=>{let{Type:i,isString:a,replaceInString:n,guesstimateMimeType:o,getExtensionFromFilename:l,getFilenameFromURL:r}=t,s=(u,f)=>{let g=(/^[^/]+/.exec(u)||[]).pop(),h=f.slice(0,-2);return g===h},p=(u,f)=>u.some(g=>/\*$/.test(g)?s(f,g):g===f),c=u=>{let f="";if(a(u)){let g=r(u),h=l(g);h&&(f=o(h))}else f=u.type;return f},d=(u,f,g)=>{if(f.length===0)return!0;let h=c(u);return g?new Promise((I,E)=>{g(u,h).then(T=>{p(f,T)?I():E()}).catch(E)}):p(f,h)},m=u=>f=>u[f]===null?!1:u[f]||f;return e("SET_ATTRIBUTE_TO_OPTION_MAP",u=>Object.assign(u,{accept:"acceptedFileTypes"})),e("ALLOW_HOPPER_ITEM",(u,{query:f})=>f("GET_ALLOW_FILE_TYPE_VALIDATION")?d(u,f("GET_ACCEPTED_FILE_TYPES")):!0),e("LOAD_FILE",(u,{query:f})=>new Promise((g,h)=>{if(!f("GET_ALLOW_FILE_TYPE_VALIDATION")){g(u);return}let I=f("GET_ACCEPTED_FILE_TYPES"),E=f("GET_FILE_VALIDATE_TYPE_DETECT_TYPE"),T=d(u,I,E),v=()=>{let y=I.map(m(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP"))).filter(w=>w!==!1),b=y.filter((w,x)=>y.indexOf(w)===x);h({status:{main:f("GET_LABEL_FILE_TYPE_NOT_ALLOWED"),sub:n(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES"),{allTypes:b.join(", "),allButLastType:b.slice(0,-1).join(", "),lastType:b[b.length-1]})}})};if(typeof T=="boolean")return T?g(u):v();T.then(()=>{g(u)}).catch(v)})),{options:{allowFileTypeValidation:[!0,i.BOOLEAN],acceptedFileTypes:[[],i.ARRAY],labelFileTypeNotAllowed:["File is of invalid type",i.STRING],fileValidateTypeLabelExpectedTypes:["Expects {allButLastType} or {lastType}",i.STRING],fileValidateTypeLabelExpectedTypesMap:[{},i.OBJECT],fileValidateTypeDetectType:[null,i.FUNCTION]}}},Zp=typeof window<"u"&&typeof window.document<"u";Zp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:jo}));var qo=jo;var Yo=e=>/^image/.test(e.type),$o=({addFilter:e,utils:t})=>{let{Type:i,isFile:a,getNumericAspectRatioFromString:n}=t,o=(p,c)=>!(!Yo(p.file)||!c("GET_ALLOW_IMAGE_CROP")),l=p=>typeof p=="object",r=p=>typeof p=="number",s=(p,c)=>p.setMetadata("crop",Object.assign({},p.getMetadata("crop"),c));return e("DID_CREATE_ITEM",(p,{query:c})=>{p.extend("setImageCrop",d=>{if(!(!o(p,c)||!l(center)))return p.setMetadata("crop",d),d}),p.extend("setImageCropCenter",d=>{if(!(!o(p,c)||!l(d)))return s(p,{center:d})}),p.extend("setImageCropZoom",d=>{if(!(!o(p,c)||!r(d)))return s(p,{zoom:Math.max(1,d)})}),p.extend("setImageCropRotation",d=>{if(!(!o(p,c)||!r(d)))return s(p,{rotation:d})}),p.extend("setImageCropFlip",d=>{if(!(!o(p,c)||!l(d)))return s(p,{flip:d})}),p.extend("setImageCropAspectRatio",d=>{if(!o(p,c)||typeof d>"u")return;let m=p.getMetadata("crop"),u=n(d),f={center:{x:.5,y:.5},flip:m?Object.assign({},m.flip):{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:u};return p.setMetadata("crop",f),f})}),e("DID_LOAD_ITEM",(p,{query:c})=>new Promise((d,m)=>{let u=p.file;if(!a(u)||!Yo(u)||!c("GET_ALLOW_IMAGE_CROP")||p.getMetadata("crop"))return d(p);let g=c("GET_IMAGE_CROP_ASPECT_RATIO");p.setMetadata("crop",{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:g?n(g):null}),d(p)})),{options:{allowImageCrop:[!0,i.BOOLEAN],imageCropAspectRatio:[null,i.STRING]}}},Kp=typeof window<"u"&&typeof window.document<"u";Kp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:$o}));var Xo=$o;var wa=e=>/^image/.test(e.type),Qo=e=>{let{addFilter:t,utils:i,views:a}=e,{Type:n,createRoute:o,createItemAPI:l=c=>c}=i,{fileActionButton:r}=a;t("SHOULD_REMOVE_ON_REVERT",(c,{item:d,query:m})=>new Promise(u=>{let{file:f}=d,g=m("GET_ALLOW_IMAGE_EDIT")&&m("GET_IMAGE_EDIT_ALLOW_EDIT")&&wa(f);u(!g)})),t("DID_LOAD_ITEM",(c,{query:d,dispatch:m})=>new Promise((u,f)=>{if(c.origin>1){u(c);return}let{file:g}=c;if(!d("GET_ALLOW_IMAGE_EDIT")||!d("GET_IMAGE_EDIT_INSTANT_EDIT")){u(c);return}if(!wa(g)){u(c);return}let h=(E,T,v)=>y=>{s.shift(),y?T(E):v(E),m("KICK"),I()},I=()=>{if(!s.length)return;let{item:E,resolve:T,reject:v}=s[0];m("EDIT_ITEM",{id:E.id,handleEditorResponse:h(E,T,v)})};p({item:c,resolve:u,reject:f}),s.length===1&&I()})),t("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{c.extend("edit",()=>{m("EDIT_ITEM",{id:c.id})})});let s=[],p=c=>(s.push(c),c);return t("CREATE_VIEW",c=>{let{is:d,view:m,query:u}=c;if(!u("GET_ALLOW_IMAGE_EDIT"))return;let f=u("GET_ALLOW_IMAGE_PREVIEW");if(!(d("file-info")&&!f||d("file")&&f))return;let h=u("GET_IMAGE_EDIT_EDITOR");if(!h)return;h.filepondCallbackBridge||(h.outputData=!0,h.outputFile=!1,h.filepondCallbackBridge={onconfirm:h.onconfirm||(()=>{}),oncancel:h.oncancel||(()=>{})});let I=({root:v,props:y,action:b})=>{let{id:w}=y,{handleEditorResponse:x}=b;h.cropAspectRatio=v.query("GET_IMAGE_CROP_ASPECT_RATIO")||h.cropAspectRatio,h.outputCanvasBackgroundColor=v.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||h.outputCanvasBackgroundColor;let _=v.query("GET_ITEM",w);if(!_)return;let P=_.file,O=_.getMetadata("crop"),M={center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},N=_.getMetadata("resize"),S=_.getMetadata("filter")||null,D=_.getMetadata("filters")||null,R=_.getMetadata("colors")||null,L=_.getMetadata("markup")||null,z={crop:O||M,size:N?{upscale:N.upscale,mode:N.mode,width:N.size.width,height:N.size.height}:null,filter:D?D.id||D.matrix:v.query("GET_ALLOW_IMAGE_FILTER")&&v.query("GET_IMAGE_FILTER_COLOR_MATRIX")&&!R?S:null,color:R,markup:L};h.onconfirm=({data:F})=>{let{crop:G,size:C,filter:Y,color:Q,colorMatrix:$,markup:pe}=F,k={};if(G&&(k.crop=G),C){let H=(_.getMetadata("resize")||{}).size,q={width:C.width,height:C.height};!(q.width&&q.height)&&H&&(q.width=H.width,q.height=H.height),(q.width||q.height)&&(k.resize={upscale:C.upscale,mode:C.mode,size:q})}pe&&(k.markup=pe),k.colors=Q,k.filters=Y,k.filter=$,_.setMetadata(k),h.filepondCallbackBridge.onconfirm(F,l(_)),x&&(h.onclose=()=>{x(!0),h.onclose=null})},h.oncancel=()=>{h.filepondCallbackBridge.oncancel(l(_)),x&&(h.onclose=()=>{x(!1),h.onclose=null})},h.open(P,z)},E=({root:v,props:y})=>{if(!u("GET_IMAGE_EDIT_ALLOW_EDIT"))return;let{id:b}=y,w=u("GET_ITEM",b);if(!w)return;let x=w.file;if(wa(x))if(v.ref.handleEdit=_=>{_.stopPropagation(),v.dispatch("EDIT_ITEM",{id:b})},f){let _=m.createChildView(r,{label:"edit",icon:u("GET_IMAGE_EDIT_ICON_EDIT"),opacity:0});_.element.classList.add("filepond--action-edit-item"),_.element.dataset.align=u("GET_STYLE_IMAGE_EDIT_BUTTON_EDIT_ITEM_POSITION"),_.on("click",v.ref.handleEdit),v.ref.buttonEditItem=m.appendChildView(_)}else{let _=m.element.querySelector(".filepond--file-info-main"),P=document.createElement("button");P.className="filepond--action-edit-item-alt",P.innerHTML=u("GET_IMAGE_EDIT_ICON_EDIT")+"edit",P.addEventListener("click",v.ref.handleEdit),_.appendChild(P),v.ref.editButton=P}};m.registerDestroyer(({root:v})=>{v.ref.buttonEditItem&&v.ref.buttonEditItem.off("click",v.ref.handleEdit),v.ref.editButton&&v.ref.editButton.removeEventListener("click",v.ref.handleEdit)});let T={EDIT_ITEM:I,DID_LOAD_ITEM:E};if(f){let v=({root:y})=>{y.ref.buttonEditItem&&(y.ref.buttonEditItem.opacity=1)};T.DID_IMAGE_PREVIEW_SHOW=v}m.registerWriter(o(T))}),{options:{allowImageEdit:[!0,n.BOOLEAN],styleImageEditButtonEditItemPosition:["bottom center",n.STRING],imageEditInstantEdit:[!1,n.BOOLEAN],imageEditAllowEdit:[!0,n.BOOLEAN],imageEditIconEdit:['',n.STRING],imageEditEditor:[null,n.OBJECT]}}},Jp=typeof window<"u"&&typeof window.document<"u";Jp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Qo}));var Zo=Qo;var em=e=>/^image\/jpeg/.test(e.type),rt={JPEG:65496,APP1:65505,EXIF:1165519206,TIFF:18761,Orientation:274,Unknown:65280},st=(e,t,i=!1)=>e.getUint16(t,i),Ko=(e,t,i=!1)=>e.getUint32(t,i),tm=e=>new Promise((t,i)=>{let a=new FileReader;a.onload=function(n){let o=new DataView(n.target.result);if(st(o,0)!==rt.JPEG){t(-1);return}let l=o.byteLength,r=2;for(;rim,nm="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QA6RXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAYAAAEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAIBASIA/8QAJgABAAAAAAAAAAAAAAAAAAAAAxABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAPwBH/9k=",Jo,Ii=am()?new Image:{};Ii.onload=()=>Jo=Ii.naturalWidth>Ii.naturalHeight;Ii.src=nm;var om=()=>Jo,el=({addFilter:e,utils:t})=>{let{Type:i,isFile:a}=t;return e("DID_LOAD_ITEM",(n,{query:o})=>new Promise((l,r)=>{let s=n.file;if(!a(s)||!em(s)||!o("GET_ALLOW_IMAGE_EXIF_ORIENTATION")||!om())return l(n);tm(s).then(p=>{n.setMetadata("exif",{orientation:p}),l(n)})})),{options:{allowImageExifOrientation:[!0,i.BOOLEAN]}}},lm=typeof window<"u"&&typeof window.document<"u";lm&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:el}));var tl=el;var rm=e=>/^image/.test(e.type),il=(e,t)=>qt(e.x*t,e.y*t),al=(e,t)=>qt(e.x+t.x,e.y+t.y),sm=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:qt(e.x/t,e.y/t)},vi=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=qt(e.x-i.x,e.y-i.y);return qt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},qt=(e=0,t=0)=>({x:e,y:t}),Te=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},cm=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=Te(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>Te(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Se=e=>e!=null,dm=(e,t,i=1)=>{let a=Te(e.x,t,i,"width")||Te(e.left,t,i,"width"),n=Te(e.y,t,i,"height")||Te(e.top,t,i,"height"),o=Te(e.width,t,i,"width"),l=Te(e.height,t,i,"height"),r=Te(e.right,t,i,"width"),s=Te(e.bottom,t,i,"height");return Se(n)||(Se(l)&&Se(s)?n=t.height-l-s:n=s),Se(a)||(Se(o)&&Se(r)?a=t.width-o-r:a=r),Se(o)||(Se(a)&&Se(r)?o=t.width-a-r:o=0),Se(l)||(Se(n)&&Se(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},pm=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ce=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),mm="http://www.w3.org/2000/svg",Rt=(e,t)=>{let i=document.createElementNS(mm,e);return t&&Ce(i,t),i},um=e=>Ce(e,{...e.rect,...e.styles}),fm=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ce(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},gm={contain:"xMidYMid meet",cover:"xMidYMid slice"},hm=(e,t)=>{Ce(e,{...e.rect,...e.styles,preserveAspectRatio:gm[t.fit]||"none"})},Em={left:"start",center:"middle",right:"end"},bm=(e,t,i,a)=>{let n=Te(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=Em[t.textAlign]||"start";Ce(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},Tm=(e,t,i,a)=>{Ce(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ce(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=sm({x:s.x-r.x,y:s.y-r.y}),c=Te(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=il(p,c),m=al(r,d),u=vi(r,2,m),f=vi(r,-2,m);Ce(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=il(p,-c),m=al(s,d),u=vi(s,2,m),f=vi(s,-2,m);Ce(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Im=(e,t,i,a)=>{Ce(e,{...e.styles,fill:"none",d:pm(t.points.map(n=>({x:Te(n.x,i,a,"width"),y:Te(n.y,i,a,"height")})))})},xi=e=>t=>Rt(e,{id:t.id}),vm=e=>{let t=Rt("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},xm=e=>{let t=Rt("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=Rt("line");t.appendChild(i);let a=Rt("path");t.appendChild(a);let n=Rt("path");return t.appendChild(n),t},ym={image:vm,rect:xi("rect"),ellipse:xi("ellipse"),text:xi("text"),path:xi("path"),line:xm},_m={rect:um,ellipse:fm,image:hm,text:bm,path:Im,line:Tm},Rm=(e,t)=>ym[e](t),wm=(e,t,i,a,n)=>{t!=="path"&&(e.rect=dm(i,a,n)),e.styles=cm(i,a,n),_m[t](e,i,a,n)},Sm=["x","y","left","top","right","bottom","width","height"],Lm=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,Am=e=>{let[t,i]=e,a=i.points?{}:Sm.reduce((n,o)=>(n[o]=Lm(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},Mm=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexe.utils.createView({name:"image-preview-markup",tag:"svg",ignoreRect:!0,mixins:{apis:["width","height","crop","markup","resize","dirty"]},write:({root:t,props:i})=>{if(!i.dirty)return;let{crop:a,resize:n,markup:o}=i,l=i.width,r=i.height,s=a.width,p=a.height;if(n){let{size:u}=n,f=u&&u.width,g=u&&u.height,h=n.mode,I=n.upscale;f&&!g&&(g=f),g&&!f&&(f=g);let E=s{let[f,g]=u,h=Rm(f,g);wm(h,f,g,c,d),t.element.appendChild(h)})}}),jt=(e,t)=>({x:e,y:t}),Pm=(e,t)=>e.x*t.x+e.y*t.y,nl=(e,t)=>jt(e.x-t.x,e.y-t.y),Dm=(e,t)=>Pm(nl(e,t),nl(e,t)),ol=(e,t)=>Math.sqrt(Dm(e,t)),ll=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return jt(p*d,p*m)},Fm=(e,t)=>{let i=e.width,a=e.height,n=ll(i,t),o=ll(a,t),l=jt(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=jt(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=jt(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:ol(l,r),height:ol(l,s)}},zm=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},sl=(e,t,i,a)=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=Fm(t,i);return Math.max(s.width/l,s.height/r)},cl=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},Cm=(e,t={})=>{let{zoom:i,rotation:a,center:n,aspectRatio:o}=t;o||(o=e.height/e.width);let l=zm(e,o,i),r={x:l.width*.5,y:l.height*.5},s={x:0,y:0,width:l.width,height:l.height,center:r},p=typeof t.scaleToFit>"u"||t.scaleToFit,c=sl(e,cl(s,o),a,p?n:{x:.5,y:.5}),d=i*c;return{widthFloat:l.width/d,heightFloat:l.height/d,width:Math.round(l.width/d),height:Math.round(l.height/d)}},ze={type:"spring",stiffness:.5,damping:.45,mass:10},Nm=e=>e.utils.createView({name:"image-bitmap",ignoreRect:!0,mixins:{styles:["scaleX","scaleY"]},create:({root:t,props:i})=>{t.appendChild(i.image)}}),Bm=e=>e.utils.createView({name:"image-canvas-wrapper",tag:"div",ignoreRect:!0,mixins:{apis:["crop","width","height"],styles:["originX","originY","translateX","translateY","scaleX","scaleY","rotateZ"],animations:{originX:ze,originY:ze,scaleX:ze,scaleY:ze,translateX:ze,translateY:ze,rotateZ:ze}},create:({root:t,props:i})=>{i.width=i.image.width,i.height=i.image.height,t.ref.bitmap=t.appendChildView(t.createChildView(Nm(e),{image:i.image}))},write:({root:t,props:i})=>{let{flip:a}=i.crop,{bitmap:n}=t.ref;n.scaleX=a.horizontal?-1:1,n.scaleY=a.vertical?-1:1}}),km=e=>e.utils.createView({name:"image-clip",tag:"div",ignoreRect:!0,mixins:{apis:["crop","markup","resize","width","height","dirty","background"],styles:["width","height","opacity"],animations:{opacity:{type:"tween",duration:250}}},didWriteView:function({root:t,props:i}){i.background&&(t.element.style.backgroundColor=i.background)},create:({root:t,props:i})=>{t.ref.image=t.appendChildView(t.createChildView(Bm(e),Object.assign({},i))),t.ref.createMarkup=()=>{t.ref.markup||(t.ref.markup=t.appendChildView(t.createChildView(Om(e),Object.assign({},i))))},t.ref.destroyMarkup=()=>{t.ref.markup&&(t.removeChildView(t.ref.markup),t.ref.markup=null)};let a=t.query("GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR");a!==null&&(a==="grid"?t.element.dataset.transparencyIndicator=a:t.element.dataset.transparencyIndicator="color")},write:({root:t,props:i,shouldOptimize:a})=>{let{crop:n,markup:o,resize:l,dirty:r,width:s,height:p}=i;t.ref.image.crop=n;let c={x:0,y:0,width:s,height:p,center:{x:s*.5,y:p*.5}},d={width:t.ref.image.width,height:t.ref.image.height},m={x:n.center.x*d.width,y:n.center.y*d.height},u={x:c.center.x-d.width*n.center.x,y:c.center.y-d.height*n.center.y},f=Math.PI*2+n.rotation%(Math.PI*2),g=n.aspectRatio||d.height/d.width,h=typeof n.scaleToFit>"u"||n.scaleToFit,I=sl(d,cl(c,g),f,h?n.center:{x:.5,y:.5}),E=n.zoom*I;o&&o.length?(t.ref.createMarkup(),t.ref.markup.width=s,t.ref.markup.height=p,t.ref.markup.resize=l,t.ref.markup.dirty=r,t.ref.markup.markup=o,t.ref.markup.crop=Cm(d,n)):t.ref.markup&&t.ref.destroyMarkup();let T=t.ref.image;if(a){T.originX=null,T.originY=null,T.translateX=null,T.translateY=null,T.rotateZ=null,T.scaleX=null,T.scaleY=null;return}T.originX=m.x,T.originY=m.y,T.translateX=u.x,T.translateY=u.y,T.rotateZ=f,T.scaleX=E,T.scaleY=E}}),Vm=e=>e.utils.createView({name:"image-preview",tag:"div",ignoreRect:!0,mixins:{apis:["image","crop","markup","resize","dirty","background"],styles:["translateY","scaleX","scaleY","opacity"],animations:{scaleX:ze,scaleY:ze,translateY:ze,opacity:{type:"tween",duration:400}}},create:({root:t,props:i})=>{t.ref.clip=t.appendChildView(t.createChildView(km(e),{id:i.id,image:i.image,crop:i.crop,markup:i.markup,resize:i.resize,dirty:i.dirty,background:i.background}))},write:({root:t,props:i,shouldOptimize:a})=>{let{clip:n}=t.ref,{image:o,crop:l,markup:r,resize:s,dirty:p}=i;if(n.crop=l,n.markup=r,n.resize=s,n.dirty=p,n.opacity=a?0:1,a||t.rect.element.hidden)return;let c=o.height/o.width,d=l.aspectRatio||c,m=t.rect.inner.width,u=t.rect.inner.height,f=t.query("GET_IMAGE_PREVIEW_HEIGHT"),g=t.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),h=t.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),I=t.query("GET_PANEL_ASPECT_RATIO"),E=t.query("GET_ALLOW_MULTIPLE");I&&!E&&(f=m*I,d=I);let T=f!==null?f:Math.max(g,Math.min(m*d,h)),v=T/d;v>m&&(v=m,T=v*d),T>u&&(T=u,v=u/d),n.width=v,n.height=T}}),Gm=` + + + + + + + + + + + + + + + + + +`,rl=0,Um=e=>e.utils.createView({name:"image-preview-overlay",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let a=Gm;if(document.querySelector("base")){let n=new URL(window.location.href.replace(window.location.hash,"")).href;a=a.replace(/url\(\#/g,"url("+n+"#")}rl++,t.element.classList.add(`filepond--image-preview-overlay-${i.status}`),t.element.innerHTML=a.replace(/__UID__/g,rl)},mixins:{styles:["opacity"],animations:{opacity:{type:"spring",mass:25}}}}),Wm=function(){self.onmessage=e=>{createImageBitmap(e.data.message.file).then(t=>{self.postMessage({id:e.data.id,message:t},[t])})}},Hm=function(){self.onmessage=e=>{let t=e.data.message.imageData,i=e.data.message.colorMatrix,a=t.data,n=a.length,o=i[0],l=i[1],r=i[2],s=i[3],p=i[4],c=i[5],d=i[6],m=i[7],u=i[8],f=i[9],g=i[10],h=i[11],I=i[12],E=i[13],T=i[14],v=i[15],y=i[16],b=i[17],w=i[18],x=i[19],_=0,P=0,O=0,M=0,N=0;for(;_{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t(a,n)},i.src=e},qm={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},Ym=(e,t,i,a)=>{a!==-1&&e.transform.apply(e,qm[a](t,i))},$m=(e,t,i,a)=>{t=Math.round(t),i=Math.round(i);let n=document.createElement("canvas");n.width=t,n.height=i;let o=n.getContext("2d");return a>=5&&a<=8&&([t,i]=[i,t]),Ym(o,t,i,a),o.drawImage(e,0,0,t,i),n},dl=e=>/^image/.test(e.type)&&!/svg/.test(e.type),Xm=10,Qm=10,Zm=e=>{let t=Math.min(Xm/e.width,Qm/e.height),i=document.createElement("canvas"),a=i.getContext("2d"),n=i.width=Math.ceil(e.width*t),o=i.height=Math.ceil(e.height*t);a.drawImage(e,0,0,n,o);let l=null;try{l=a.getImageData(0,0,n,o).data}catch{return null}let r=l.length,s=0,p=0,c=0,d=0;for(;dMath.floor(Math.sqrt(e/(t/4))),Km=(e,t)=>(t=t||document.createElement("canvas"),t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t),Jm=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(new Uint8ClampedArray(e.data)),t},eu=e=>new Promise((t,i)=>{let a=new Image;a.crossOrigin="Anonymous",a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),tu=e=>{let t=Um(e),i=Vm(e),{createWorker:a}=e.utils,n=(E,T,v)=>new Promise(y=>{E.ref.imageData||(E.ref.imageData=v.getContext("2d").getImageData(0,0,v.width,v.height));let b=Jm(E.ref.imageData);if(!T||T.length!==20)return v.getContext("2d").putImageData(b,0,0),y();let w=a(Hm);w.post({imageData:b,colorMatrix:T},x=>{v.getContext("2d").putImageData(x,0,0),w.terminate(),y()},[b.data.buffer])}),o=(E,T)=>{E.removeChildView(T),T.image.width=1,T.image.height=1,T._destroy()},l=({root:E})=>{let T=E.ref.images.shift();return T.opacity=0,T.translateY=-15,E.ref.imageViewBin.push(T),T},r=({root:E,props:T,image:v})=>{let y=T.id,b=E.query("GET_ITEM",{id:y});if(!b)return;let w=b.getMetadata("crop")||{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},x=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),_,P,O=!1;E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(_=b.getMetadata("markup")||[],P=b.getMetadata("resize"),O=!0);let M=E.appendChildView(E.createChildView(i,{id:y,image:v,crop:w,resize:P,markup:_,dirty:O,background:x,opacity:0,scaleX:1.15,scaleY:1.15,translateY:15}),E.childViews.length);E.ref.images.push(M),M.opacity=1,M.scaleX=1,M.scaleY=1,M.translateY=0,setTimeout(()=>{E.dispatch("DID_IMAGE_PREVIEW_SHOW",{id:y})},250)},s=({root:E,props:T})=>{let v=E.query("GET_ITEM",{id:T.id});if(!v)return;let y=E.ref.images[E.ref.images.length-1];y.crop=v.getMetadata("crop"),y.background=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(y.dirty=!0,y.resize=v.getMetadata("resize"),y.markup=v.getMetadata("markup"))},p=({root:E,props:T,action:v})=>{if(!/crop|filter|markup|resize/.test(v.change.key)||!E.ref.images.length)return;let y=E.query("GET_ITEM",{id:T.id});if(y){if(/filter/.test(v.change.key)){let b=E.ref.images[E.ref.images.length-1];n(E,v.change.value,b.image);return}if(/crop|markup|resize/.test(v.change.key)){let b=y.getMetadata("crop"),w=E.ref.images[E.ref.images.length-1];if(b&&b.aspectRatio&&w.crop&&w.crop.aspectRatio&&Math.abs(b.aspectRatio-w.crop.aspectRatio)>1e-5){let x=l({root:E});r({root:E,props:T,image:Km(x.image)})}else s({root:E,props:T})}}},c=E=>{let v=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./),y=v?parseInt(v[1]):null;return y!==null&&y<=58?!1:"createImageBitmap"in window&&dl(E)},d=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file);jm(b,(w,x)=>{E.dispatch("DID_IMAGE_PREVIEW_CALCULATE_SIZE",{id:v,width:w,height:x})})},m=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file),w=()=>{eu(b).then(x)},x=_=>{URL.revokeObjectURL(b);let O=(y.getMetadata("exif")||{}).orientation||-1,{width:M,height:N}=_;if(!M||!N)return;O>=5&&O<=8&&([M,N]=[N,M]);let S=Math.max(1,window.devicePixelRatio*.75),R=E.query("GET_IMAGE_PREVIEW_ZOOM_FACTOR")*S,L=N/M,z=E.rect.element.width,F=E.rect.element.height,G=z,C=G*L;L>1?(G=Math.min(M,z*R),C=G*L):(C=Math.min(N,F*R),G=C/L);let Y=$m(_,G,C,O),Q=()=>{let pe=E.query("GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR")?Zm(data):null;y.setMetadata("color",pe,!0),"close"in _&&_.close(),E.ref.overlayShadow.opacity=1,r({root:E,props:T,image:Y})},$=y.getMetadata("filter");$?n(E,$,Y).then(Q):Q()};if(c(y.file)){let _=a(Wm);_.post({file:y.file},P=>{if(_.terminate(),!P){w();return}x(P)})}else w()},u=({root:E})=>{let T=E.ref.images[E.ref.images.length-1];T.translateY=0,T.scaleX=1,T.scaleY=1,T.opacity=1},f=({root:E})=>{E.ref.overlayShadow.opacity=1,E.ref.overlayError.opacity=0,E.ref.overlaySuccess.opacity=0},g=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlayError.opacity=1},h=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlaySuccess.opacity=1},I=({root:E})=>{E.ref.images=[],E.ref.imageData=null,E.ref.imageViewBin=[],E.ref.overlayShadow=E.appendChildView(E.createChildView(t,{opacity:0,status:"idle"})),E.ref.overlaySuccess=E.appendChildView(E.createChildView(t,{opacity:0,status:"success"})),E.ref.overlayError=E.appendChildView(E.createChildView(t,{opacity:0,status:"failure"}))};return e.utils.createView({name:"image-preview-wrapper",create:I,styles:["height"],apis:["height"],destroy:({root:E})=>{E.ref.images.forEach(T=>{T.image.width=1,T.image.height=1})},didWriteView:({root:E})=>{E.ref.images.forEach(T=>{T.dirty=!1})},write:e.utils.createRoute({DID_IMAGE_PREVIEW_DRAW:u,DID_IMAGE_PREVIEW_CONTAINER_CREATE:d,DID_FINISH_CALCULATE_PREVIEWSIZE:m,DID_UPDATE_ITEM_METADATA:p,DID_THROW_ITEM_LOAD_ERROR:g,DID_THROW_ITEM_PROCESSING_ERROR:g,DID_THROW_ITEM_INVALID:g,DID_COMPLETE_ITEM_PROCESSING:h,DID_START_ITEM_PROCESSING:f,DID_REVERT_ITEM_PROCESSING:f},({root:E})=>{let T=E.ref.imageViewBin.filter(v=>v.opacity===0);E.ref.imageViewBin=E.ref.imageViewBin.filter(v=>v.opacity>0),T.forEach(v=>o(E,v)),T.length=0})})},pl=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n,isFile:o}=i,l=tu(e);return t("CREATE_VIEW",r=>{let{is:s,view:p,query:c}=r;if(!s("file")||!c("GET_ALLOW_IMAGE_PREVIEW"))return;let d=({root:h,props:I})=>{let{id:E}=I,T=c("GET_ITEM",E);if(!T||!o(T.file)||T.archived)return;let v=T.file;if(!rm(v)||!c("GET_IMAGE_PREVIEW_FILTER_ITEM")(T))return;let y="createImageBitmap"in(window||{}),b=c("GET_IMAGE_PREVIEW_MAX_FILE_SIZE");if(!y&&b&&v.size>b)return;h.ref.imagePreview=p.appendChildView(p.createChildView(l,{id:E}));let w=h.query("GET_IMAGE_PREVIEW_HEIGHT");w&&h.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:w});let x=!y&&v.size>c("GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE");h.dispatch("DID_IMAGE_PREVIEW_CONTAINER_CREATE",{id:E},x)},m=(h,I)=>{if(!h.ref.imagePreview)return;let{id:E}=I,T=h.query("GET_ITEM",{id:E});if(!T)return;let v=h.query("GET_PANEL_ASPECT_RATIO"),y=h.query("GET_ITEM_PANEL_ASPECT_RATIO"),b=h.query("GET_IMAGE_PREVIEW_HEIGHT");if(v||y||b)return;let{imageWidth:w,imageHeight:x}=h.ref;if(!w||!x)return;let _=h.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),P=h.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),M=(T.getMetadata("exif")||{}).orientation||-1;if(M>=5&&M<=8&&([w,x]=[x,w]),!dl(T.file)||h.query("GET_IMAGE_PREVIEW_UPSCALE")){let z=2048/w;w*=z,x*=z}let N=x/w,S=(T.getMetadata("crop")||{}).aspectRatio||N,D=Math.max(_,Math.min(x,P)),R=h.rect.element.width,L=Math.min(R*S,D);h.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:L})},u=({root:h})=>{h.ref.shouldRescale=!0},f=({root:h,action:I})=>{I.change.key==="crop"&&(h.ref.shouldRescale=!0)},g=({root:h,action:I})=>{h.ref.imageWidth=I.width,h.ref.imageHeight=I.height,h.ref.shouldRescale=!0,h.ref.shouldDrawPreview=!0,h.dispatch("KICK")};p.registerWriter(n({DID_RESIZE_ROOT:u,DID_STOP_RESIZE:u,DID_LOAD_ITEM:d,DID_IMAGE_PREVIEW_CALCULATE_SIZE:g,DID_UPDATE_ITEM_METADATA:f},({root:h,props:I})=>{h.ref.imagePreview&&(h.rect.element.hidden||(h.ref.shouldRescale&&(m(h,I),h.ref.shouldRescale=!1),h.ref.shouldDrawPreview&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{h.dispatch("DID_FINISH_CALCULATE_PREVIEWSIZE",{id:I.id})})}),h.ref.shouldDrawPreview=!1)))}))}),{options:{allowImagePreview:[!0,a.BOOLEAN],imagePreviewFilterItem:[()=>!0,a.FUNCTION],imagePreviewHeight:[null,a.INT],imagePreviewMinHeight:[44,a.INT],imagePreviewMaxHeight:[256,a.INT],imagePreviewMaxFileSize:[null,a.INT],imagePreviewZoomFactor:[2,a.INT],imagePreviewUpscale:[!1,a.BOOLEAN],imagePreviewMaxInstantPreviewFileSize:[1e6,a.INT],imagePreviewTransparencyIndicator:[null,a.STRING],imagePreviewCalculateAverageImageColor:[!1,a.BOOLEAN],imagePreviewMarkupShow:[!0,a.BOOLEAN],imagePreviewMarkupFilter:[()=>!0,a.FUNCTION]}}},iu=typeof window<"u"&&typeof window.document<"u";iu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:pl}));var ml=pl;var au=e=>/^image/.test(e.type),nu=(e,t)=>{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t({width:a,height:n})},i.onerror=()=>t(null),i.src=e},ul=({addFilter:e,utils:t})=>{let{Type:i}=t;return e("DID_LOAD_ITEM",(a,{query:n})=>new Promise((o,l)=>{let r=a.file;if(!au(r)||!n("GET_ALLOW_IMAGE_RESIZE"))return o(a);let s=n("GET_IMAGE_RESIZE_MODE"),p=n("GET_IMAGE_RESIZE_TARGET_WIDTH"),c=n("GET_IMAGE_RESIZE_TARGET_HEIGHT"),d=n("GET_IMAGE_RESIZE_UPSCALE");if(p===null&&c===null)return o(a);let m=p===null?c:p,u=c===null?m:c,f=URL.createObjectURL(r);nu(f,g=>{if(URL.revokeObjectURL(f),!g)return o(a);let{width:h,height:I}=g,E=(a.getMetadata("exif")||{}).orientation||-1;if(E>=5&&E<=8&&([h,I]=[I,h]),h===m&&I===u)return o(a);if(!d){if(s==="cover"){if(h<=m||I<=u)return o(a)}else if(h<=m&&I<=m)return o(a)}a.setMetadata("resize",{mode:s,upscale:d,size:{width:m,height:u}}),o(a)})})),{options:{allowImageResize:[!0,i.BOOLEAN],imageResizeMode:["cover",i.STRING],imageResizeUpscale:[!0,i.BOOLEAN],imageResizeTargetWidth:[null,i.INT],imageResizeTargetHeight:[null,i.INT]}}},ou=typeof window<"u"&&typeof window.document<"u";ou&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:ul}));var fl=ul;var lu=e=>/^image/.test(e.type),ru=e=>e.substr(0,e.lastIndexOf("."))||e,su={jpeg:"jpg","svg+xml":"svg"},cu=(e,t)=>{let i=ru(e),a=t.split("/")[1],n=su[a]||a;return`${i}.${n}`},du=e=>/jpeg|png|svg\+xml/.test(e)?e:"image/jpeg",pu=e=>/^image/.test(e.type),mu={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},uu=(e,t,i)=>(i===-1&&(i=1),mu[i](e,t)),Yt=(e,t)=>({x:e,y:t}),fu=(e,t)=>e.x*t.x+e.y*t.y,gl=(e,t)=>Yt(e.x-t.x,e.y-t.y),gu=(e,t)=>fu(gl(e,t),gl(e,t)),hl=(e,t)=>Math.sqrt(gu(e,t)),El=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return Yt(p*d,p*m)},hu=(e,t)=>{let i=e.width,a=e.height,n=El(i,t),o=El(a,t),l=Yt(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=Yt(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=Yt(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:hl(l,r),height:hl(l,s)}},Il=(e,t,i=0,a={x:.5,y:.5})=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=hu(t,i);return Math.max(s.width/l,s.height/r)},vl=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},bl=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},xl=e=>{e.width=1,e.height=1,e.getContext("2d").clearRect(0,0,1,1)},Tl=e=>e&&(e.horizontal||e.vertical),Eu=(e,t,i)=>{if(t<=1&&!Tl(i))return e.width=e.naturalWidth,e.height=e.naturalHeight,e;let a=document.createElement("canvas"),n=e.naturalWidth,o=e.naturalHeight,l=t>=5&&t<=8;l?(a.width=o,a.height=n):(a.width=n,a.height=o);let r=a.getContext("2d");if(t&&r.transform.apply(r,uu(n,o,t)),Tl(i)){let s=[1,0,0,1,0,0];(!l&&i.horizontal||l&i.vertical)&&(s[0]=-1,s[4]=n),(!l&&i.vertical||l&&i.horizontal)&&(s[3]=-1,s[5]=o),r.transform(...s)}return r.drawImage(e,0,0,n,o),a},bu=(e,t,i={},a={})=>{let{canvasMemoryLimit:n,background:o=null}=a,l=i.zoom||1,r=Eu(e,t,i.flip),s={width:r.width,height:r.height},p=i.aspectRatio||s.height/s.width,c=bl(s,p,l);if(n){let T=c.width*c.height;if(T>n){let v=Math.sqrt(n)/Math.sqrt(T);s.width=Math.floor(s.width*v),s.height=Math.floor(s.height*v),c=bl(s,p,l)}}let d=document.createElement("canvas"),m={x:c.width*.5,y:c.height*.5},u={x:0,y:0,width:c.width,height:c.height,center:m},f=typeof i.scaleToFit>"u"||i.scaleToFit,g=l*Il(s,vl(u,p),i.rotation,f?i.center:{x:.5,y:.5});d.width=Math.round(c.width/g),d.height=Math.round(c.height/g),m.x/=g,m.y/=g;let h={x:m.x-s.width*(i.center?i.center.x:.5),y:m.y-s.height*(i.center?i.center.y:.5)},I=d.getContext("2d");o&&(I.fillStyle=o,I.fillRect(0,0,d.width,d.height)),I.translate(m.x,m.y),I.rotate(i.rotation||0),I.drawImage(r,h.x-m.x,h.y-m.y,s.width,s.height);let E=I.getImageData(0,0,d.width,d.height);return xl(d),E},Tu=typeof window<"u"&&typeof window.document<"u";Tu&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){var a=this.toDataURL(t,i).split(",")[1];setTimeout(function(){for(var n=atob(a),o=n.length,l=new Uint8Array(o),r=0;rnew Promise(a=>{let n=i?i(e):e;Promise.resolve(n).then(o=>{o.toBlob(a,t.type,t.quality)})}),_i=(e,t)=>$t(e.x*t,e.y*t),Ri=(e,t)=>$t(e.x+t.x,e.y+t.y),yl=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:$t(e.x/t,e.y/t)},Ye=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=$t(e.x-i.x,e.y-i.y);return $t(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},$t=(e=0,t=0)=>({x:e,y:t}),me=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},ct=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=me(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>me(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Le=e=>e!=null,St=(e,t,i=1)=>{let a=me(e.x,t,i,"width")||me(e.left,t,i,"width"),n=me(e.y,t,i,"height")||me(e.top,t,i,"height"),o=me(e.width,t,i,"width"),l=me(e.height,t,i,"height"),r=me(e.right,t,i,"width"),s=me(e.bottom,t,i,"height");return Le(n)||(Le(l)&&Le(s)?n=t.height-l-s:n=s),Le(a)||(Le(o)&&Le(r)?a=t.width-o-r:a=r),Le(o)||(Le(a)&&Le(r)?o=t.width-a-r:o=0),Le(l)||(Le(n)&&Le(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},vu=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ne=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),xu="http://www.w3.org/2000/svg",wt=(e,t)=>{let i=document.createElementNS(xu,e);return t&&Ne(i,t),i},yu=e=>Ne(e,{...e.rect,...e.styles}),_u=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ne(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},Ru={contain:"xMidYMid meet",cover:"xMidYMid slice"},wu=(e,t)=>{Ne(e,{...e.rect,...e.styles,preserveAspectRatio:Ru[t.fit]||"none"})},Su={left:"start",center:"middle",right:"end"},Lu=(e,t,i,a)=>{let n=me(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=Su[t.textAlign]||"start";Ne(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},Au=(e,t,i,a)=>{Ne(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ne(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=yl({x:s.x-r.x,y:s.y-r.y}),c=me(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=_i(p,c),m=Ri(r,d),u=Ye(r,2,m),f=Ye(r,-2,m);Ne(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=_i(p,-c),m=Ri(s,d),u=Ye(s,2,m),f=Ye(s,-2,m);Ne(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Mu=(e,t,i,a)=>{Ne(e,{...e.styles,fill:"none",d:vu(t.points.map(n=>({x:me(n.x,i,a,"width"),y:me(n.y,i,a,"height")})))})},yi=e=>t=>wt(e,{id:t.id}),Ou=e=>{let t=wt("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},Pu=e=>{let t=wt("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=wt("line");t.appendChild(i);let a=wt("path");t.appendChild(a);let n=wt("path");return t.appendChild(n),t},Du={image:Ou,rect:yi("rect"),ellipse:yi("ellipse"),text:yi("text"),path:yi("path"),line:Pu},Fu={rect:yu,ellipse:_u,image:wu,text:Lu,path:Mu,line:Au},zu=(e,t)=>Du[e](t),Cu=(e,t,i,a,n)=>{t!=="path"&&(e.rect=St(i,a,n)),e.styles=ct(i,a,n),Fu[t](e,i,a,n)},_l=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexnew Promise(n=>{let{background:o=null}=a,l=new FileReader;l.onloadend=()=>{let r=l.result,s=document.createElement("div");s.style.cssText="position:absolute;pointer-events:none;width:0;height:0;visibility:hidden;",s.innerHTML=r;let p=s.querySelector("svg");document.body.appendChild(s);let c=p.getBBox();s.parentNode.removeChild(s);let d=s.querySelector("title"),m=p.getAttribute("viewBox")||"",u=p.getAttribute("width")||"",f=p.getAttribute("height")||"",g=parseFloat(u)||null,h=parseFloat(f)||null,I=(u.match(/[a-z]+/)||[])[0]||"",E=(f.match(/[a-z]+/)||[])[0]||"",T=m.split(" ").map(parseFloat),v=T.length?{x:T[0],y:T[1],width:T[2],height:T[3]}:c,y=g??v.width,b=h??v.height;p.style.overflow="visible",p.setAttribute("width",y),p.setAttribute("height",b);let w="";if(i&&i.length){let $={width:y,height:b};w=i.sort(_l).reduce((pe,k)=>{let H=zu(k[0],k[1]);return Cu(H,k[0],k[1],$),H.removeAttribute("id"),H.getAttribute("opacity")===1&&H.removeAttribute("opacity"),pe+` +`+H.outerHTML+` +`},""),w=` + +${w.replace(/ /g," ")} + +`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,N=t.center?t.center.y:.5,S=Il({width:y,height:b},vl({width:_,height:P},x),t.rotation,O?{x:M,y:N}:{x:.5,y:.5}),D=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*N},F=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${D})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],G=t.flip&&t.flip.horizontal,C=t.flip&&t.flip.vertical,Y=[`scale(${G?-1:1} ${C?-1:1})`,`translate(${G?-y:0} ${C?-b:0})`],Q=` + + +${d?d.textContent:""} + + +${p.outerHTML}${w} + + +`;n(Q)},l.readAsText(e)}),Bu=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(e.data),t},ku=()=>{let e={resize:c,filter:p},t=(d,m)=>(d.forEach(u=>{m=e[u.type](m,u.data)}),m),i=(d,m)=>{let u=d.transforms,f=null;if(u.forEach(g=>{g.type==="filter"&&(f=g)}),f){let g=null;u.forEach(h=>{h.type==="resize"&&(g=h)}),g&&(g.data.matrix=f.data,u=u.filter(h=>h.type!=="filter"))}m(t(u,d.imageData))};self.onmessage=d=>{i(d.data.message,m=>{self.postMessage({id:d.data.id,message:m},[m.data.buffer])})};let a=1,n=1,o=1;function l(d,m,u){let f=m[d]/255,g=m[d+1]/255,h=m[d+2]/255,I=m[d+3]/255,E=f*u[0]+g*u[1]+h*u[2]+I*u[3]+u[4],T=f*u[5]+g*u[6]+h*u[7]+I*u[8]+u[9],v=f*u[10]+g*u[11]+h*u[12]+I*u[13]+u[14],y=f*u[15]+g*u[16]+h*u[17]+I*u[18]+u[19],b=Math.max(0,E*y)+a*(1-y),w=Math.max(0,T*y)+n*(1-y),x=Math.max(0,v*y)+o*(1-y);m[d]=Math.max(0,Math.min(1,b))*255,m[d+1]=Math.max(0,Math.min(1,w))*255,m[d+2]=Math.max(0,Math.min(1,x))*255}let r=self.JSON.stringify([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]);function s(d){return self.JSON.stringify(d||[])===r}function p(d,m){if(!m||s(m))return d;let u=d.data,f=u.length,g=m[0],h=m[1],I=m[2],E=m[3],T=m[4],v=m[5],y=m[6],b=m[7],w=m[8],x=m[9],_=m[10],P=m[11],O=m[12],M=m[13],N=m[14],S=m[15],D=m[16],R=m[17],L=m[18],z=m[19],F=0,G=0,C=0,Y=0,Q=0,$=0,pe=0,k=0,H=0,q=0,le=0,ee=0;for(;F1&&f===!1)return p(d,I);g=d.width*S,h=d.height*S}let E=d.width,T=d.height,v=Math.round(g),y=Math.round(h),b=d.data,w=new Uint8ClampedArray(v*y*4),x=E/v,_=T/y,P=Math.ceil(x*.5),O=Math.ceil(_*.5);for(let M=0;M=-1&&le<=1&&(D=2*le*le*le-3*le*le+1,D>0)){q=4*(H+Q*E);let ee=b[q+3];C+=D*ee,L+=D,ee<255&&(D=D*ee/250),z+=D*b[q],F+=D*b[q+1],G+=D*b[q+2],R+=D}}}w[S]=z/R,w[S+1]=F/R,w[S+2]=G/R,w[S+3]=C/L,I&&l(S,w,I)}return{data:w,width:v,height:y}}},Vu=(e,t)=>{if(e.getUint32(t+4,!1)!==1165519206)return;t+=4;let i=e.getUint16(t+=6,!1)===18761;t+=e.getUint32(t+4,i);let a=e.getUint16(t,i);t+=2;for(let n=0;n{let t=new DataView(e);if(t.getUint16(0)!==65496)return null;let i=2,a,n,o=!1;for(;i=65504&&a<=65519||a===65534)||(o||(o=Vu(t,i,n)),i+n>t.byteLength)));)i+=n;return e.slice(0,i)},Uu=e=>new Promise(t=>{let i=new FileReader;i.onload=()=>t(Gu(i.result)||null),i.readAsArrayBuffer(e.slice(0,256*1024))}),Wu=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Hu=(e,t)=>{let i=Wu();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},ju=()=>Math.random().toString(36).substr(2,9),qu=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i),n=[];return{transfer:()=>{},post:(o,l,r)=>{let s=ju();n[s]=l,a.onmessage=p=>{let c=n[p.data.id];c&&(c(p.data.message),delete n[p.data.id])},a.postMessage({id:s,message:o},r)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},Yu=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),$u=e=>e.reduce((t,i)=>t.then(a=>i().then(Array.prototype.concat.bind(a))),Promise.resolve([])),Xu=(e,t)=>new Promise(i=>{let a={width:e.width,height:e.height},n=e.getContext("2d"),o=t.sort(_l).map(l=>()=>new Promise(r=>{af[l[0]](n,a,l[1],r)&&r()}));$u(o).then(()=>i(e))}),Lt=(e,t)=>{e.beginPath(),e.lineCap=t["stroke-linecap"],e.lineJoin=t["stroke-linejoin"],e.lineWidth=t["stroke-width"],t["stroke-dasharray"].length&&e.setLineDash(t["stroke-dasharray"].split(",")),e.fillStyle=t.fill,e.strokeStyle=t.stroke,e.globalAlpha=t.opacity||1},At=e=>{e.fill(),e.stroke(),e.globalAlpha=1},Qu=(e,t,i)=>{let a=St(i,t),n=ct(i,t);return Lt(e,n),e.rect(a.x,a.y,a.width,a.height),At(e,n),!0},Zu=(e,t,i)=>{let a=St(i,t),n=ct(i,t);Lt(e,n);let o=a.x,l=a.y,r=a.width,s=a.height,p=.5522848,c=r/2*p,d=s/2*p,m=o+r,u=l+s,f=o+r/2,g=l+s/2;return e.moveTo(o,g),e.bezierCurveTo(o,g-d,f-c,l,f,l),e.bezierCurveTo(f+c,l,m,g-d,m,g),e.bezierCurveTo(m,g+d,f+c,u,f,u),e.bezierCurveTo(f-c,u,o,g+d,o,g),At(e,n),!0},Ku=(e,t,i,a)=>{let n=St(i,t),o=ct(i,t);Lt(e,o);let l=new Image;new URL(i.src,window.location.href).origin!==window.location.origin&&(l.crossOrigin=""),l.onload=()=>{if(i.fit==="cover"){let s=n.width/n.height,p=s>1?l.width:l.height*s,c=s>1?l.width/s:l.height,d=l.width*.5-p*.5,m=l.height*.5-c*.5;e.drawImage(l,d,m,p,c,n.x,n.y,n.width,n.height)}else if(i.fit==="contain"){let s=Math.min(n.width/l.width,n.height/l.height),p=s*l.width,c=s*l.height,d=n.x+n.width*.5-p*.5,m=n.y+n.height*.5-c*.5;e.drawImage(l,0,0,l.width,l.height,d,m,p,c)}else e.drawImage(l,0,0,l.width,l.height,n.x,n.y,n.width,n.height);At(e,o),a()},l.src=i.src},Ju=(e,t,i)=>{let a=St(i,t),n=ct(i,t);Lt(e,n);let o=me(i.fontSize,t),l=i.fontFamily||"sans-serif",r=i.fontWeight||"normal",s=i.textAlign||"left";return e.font=`${r} ${o}px ${l}`,e.textAlign=s,e.fillText(i.text,a.x,a.y),At(e,n),!0},ef=(e,t,i)=>{let a=ct(i,t);Lt(e,a),e.beginPath();let n=i.points.map(l=>({x:me(l.x,t,1,"width"),y:me(l.y,t,1,"height")}));e.moveTo(n[0].x,n[0].y);let o=n.length;for(let l=1;l{let a=St(i,t),n=ct(i,t);Lt(e,n),e.beginPath();let o={x:a.x,y:a.y},l={x:a.x+a.width,y:a.y+a.height};e.moveTo(o.x,o.y),e.lineTo(l.x,l.y);let r=yl({x:l.x-o.x,y:l.y-o.y}),s=.04*Math.min(t.width,t.height);if(i.lineDecoration.indexOf("arrow-begin")!==-1){let p=_i(r,s),c=Ri(o,p),d=Ye(o,2,c),m=Ye(o,-2,c);e.moveTo(d.x,d.y),e.lineTo(o.x,o.y),e.lineTo(m.x,m.y)}if(i.lineDecoration.indexOf("arrow-end")!==-1){let p=_i(r,-s),c=Ri(l,p),d=Ye(l,2,c),m=Ye(l,-2,c);e.moveTo(d.x,d.y),e.lineTo(l.x,l.y),e.lineTo(m.x,m.y)}return At(e,n),!0},af={rect:Qu,ellipse:Zu,image:Ku,text:Ju,line:tf,path:ef},nf=e=>{let t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").putImageData(e,0,0),t},of=(e,t,i={})=>new Promise((a,n)=>{if(!e||!pu(e))return n({status:"not an image file",file:e});let{stripImageHead:o,beforeCreateBlob:l,afterCreateBlob:r,canvasMemoryLimit:s}=i,{crop:p,size:c,filter:d,markup:m,output:u}=t,f=t.image&&t.image.orientation?Math.max(1,Math.min(8,t.image.orientation)):null,g=u&&u.quality,h=g===null?null:g/100,I=u&&u.type||null,E=u&&u.background||null,T=[];c&&(typeof c.width=="number"||typeof c.height=="number")&&T.push({type:"resize",data:c}),d&&d.length===20&&T.push({type:"filter",data:d});let v=w=>{let x=r?r(w):w;Promise.resolve(x).then(a)},y=(w,x)=>{let _=nf(w),P=m.length?Xu(_,m):_;Promise.resolve(P).then(O=>{Iu(O,x,l).then(M=>{if(xl(O),o)return v(M);Uu(e).then(N=>{N!==null&&(M=new Blob([N,M.slice(20)],{type:M.type})),v(M)})}).catch(n)})};if(/svg/.test(e.type)&&I===null)return Nu(e,p,m,{background:E}).then(w=>{a(Hu(w,"image/svg+xml"))});let b=URL.createObjectURL(e);Yu(b).then(w=>{URL.revokeObjectURL(b);let x=bu(w,f,p,{canvasMemoryLimit:s,background:E}),_={quality:h,type:I||e.type};if(!T.length)return y(x,_);let P=qu(ku);P.post({transforms:T,imageData:x},O=>{y(Bu(O),_),P.terminate()},[x.data.buffer])}).catch(n)}),lf=["x","y","left","top","right","bottom","width","height"],rf=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,sf=e=>{let[t,i]=e,a=i.points?{}:lf.reduce((n,o)=>(n[o]=rf(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},cf=e=>new Promise((t,i)=>{let a=new Image;a.src=URL.createObjectURL(e);let n=()=>{let l=a.naturalWidth,r=a.naturalHeight;l&&r&&(URL.revokeObjectURL(a.src),clearInterval(o),t({width:l,height:r}))};a.onerror=l=>{URL.revokeObjectURL(a.src),clearInterval(o),i(l)};let o=setInterval(n,1);n()});typeof window<"u"&&typeof window.document<"u"&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){let a=this;setTimeout(()=>{let n=a.toDataURL(t,i).split(",")[1],o=atob(n),l=o.length,r=new Uint8Array(l);for(;l--;)r[l]=o.charCodeAt(l);e(new Blob([r],{type:t||"image/png"}))})}}));var La=typeof window<"u"&&typeof window.document<"u",df=La&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,Rl=({addFilter:e,utils:t})=>{let{Type:i,forin:a,getFileFromBlob:n,isFile:o}=t,l=["crop","resize","filter","markup","output"],r=c=>(d,m,u)=>d(m,c?c(u):u),s=c=>c.aspectRatio===null&&c.rotation===0&&c.zoom===1&&c.center&&c.center.x===.5&&c.center.y===.5&&c.flip&&c.flip.horizontal===!1&&c.flip.vertical===!1;e("SHOULD_PREPARE_OUTPUT",(c,{query:d})=>new Promise(m=>{m(!d("IS_ASYNC"))}));let p=(c,d,m)=>new Promise(u=>{if(!c("GET_ALLOW_IMAGE_TRANSFORM")||m.archived||!o(d)||!lu(d))return u(!1);cf(d).then(()=>{let f=c("GET_IMAGE_TRANSFORM_IMAGE_FILTER");if(f){let g=f(d);if(g==null)return handleRevert(!0);if(typeof g=="boolean")return u(g);if(typeof g.then=="function")return g.then(u)}u(!0)}).catch(f=>{u(!1)})});return e("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{d("GET_ALLOW_IMAGE_TRANSFORM")&&c.extend("requestPrepare",()=>new Promise((u,f)=>{m("REQUEST_PREPARE_OUTPUT",{query:c.id,item:c,success:u,failure:f},!0)}))}),e("PREPARE_OUTPUT",(c,{query:d,item:m})=>new Promise(u=>{p(d,c,m).then(f=>{if(!f)return u(c);let g=[];d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_ORIGINAL")&&g.push(()=>new Promise(x=>{x({name:d("GET_IMAGE_TRANSFORM_VARIANTS_ORIGINAL_NAME"),file:c})})),d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_DEFAULT")&&g.push((x,_,P)=>new Promise(O=>{x(_,P).then(M=>O({name:d("GET_IMAGE_TRANSFORM_VARIANTS_DEFAULT_NAME"),file:M}))}));let h=d("GET_IMAGE_TRANSFORM_VARIANTS")||{};a(h,(x,_)=>{let P=r(_);g.push((O,M,N)=>new Promise(S=>{P(O,M,N).then(D=>S({name:x,file:D}))}))});let I=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY"),E=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY_MODE"),T=I===null?null:I/100,v=d("GET_IMAGE_TRANSFORM_OUTPUT_MIME_TYPE"),y=d("GET_IMAGE_TRANSFORM_CLIENT_TRANSFORMS")||l;m.setMetadata("output",{type:v,quality:T,client:y},!0);let b=(x,_)=>new Promise((P,O)=>{let M={..._};Object.keys(M).filter(C=>C!=="exif").forEach(C=>{y.indexOf(C)===-1&&delete M[C]});let{resize:N,exif:S,output:D,crop:R,filter:L,markup:z}=M,F={image:{orientation:S?S.orientation:null},output:D&&(D.type||typeof D.quality=="number"||D.background)?{type:D.type,quality:typeof D.quality=="number"?D.quality*100:null,background:D.background||d("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||null}:void 0,size:N&&(N.size.width||N.size.height)?{mode:N.mode,upscale:N.upscale,...N.size}:void 0,crop:R&&!s(R)?{...R}:void 0,markup:z&&z.length?z.map(sf):[],filter:L};if(F.output){let C=D.type?D.type!==x.type:!1,Y=/\/jpe?g$/.test(x.type),Q=D.quality!==null?Y&&E==="always":!1;if(!!!(F.size||F.crop||F.filter||C||Q))return P(x)}let G={beforeCreateBlob:d("GET_IMAGE_TRANSFORM_BEFORE_CREATE_BLOB"),afterCreateBlob:d("GET_IMAGE_TRANSFORM_AFTER_CREATE_BLOB"),canvasMemoryLimit:d("GET_IMAGE_TRANSFORM_CANVAS_MEMORY_LIMIT"),stripImageHead:d("GET_IMAGE_TRANSFORM_OUTPUT_STRIP_IMAGE_HEAD")};of(x,F,G).then(C=>{let Y=n(C,cu(x.name,du(C.type)));P(Y)}).catch(O)}),w=g.map(x=>x(b,c,m.getMetadata()));Promise.all(w).then(x=>{u(x.length===1&&x[0].name===null?x[0].file:x)})})})),{options:{allowImageTransform:[!0,i.BOOLEAN],imageTransformImageFilter:[null,i.FUNCTION],imageTransformOutputMimeType:[null,i.STRING],imageTransformOutputQuality:[null,i.INT],imageTransformOutputStripImageHead:[!0,i.BOOLEAN],imageTransformClientTransforms:[null,i.ARRAY],imageTransformOutputQualityMode:["always",i.STRING],imageTransformVariants:[null,i.OBJECT],imageTransformVariantsIncludeDefault:[!0,i.BOOLEAN],imageTransformVariantsDefaultName:[null,i.STRING],imageTransformVariantsIncludeOriginal:[!1,i.BOOLEAN],imageTransformVariantsOriginalName:["original_",i.STRING],imageTransformBeforeCreateBlob:[null,i.FUNCTION],imageTransformAfterCreateBlob:[null,i.FUNCTION],imageTransformCanvasMemoryLimit:[La&&df?4096*4096:null,i.INT],imageTransformCanvasBackgroundColor:[null,i.STRING]}}};La&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Rl}));var wl=Rl;var Aa=e=>/^video/.test(e.type),Xt=e=>/^audio/.test(e.type),Ma=class{constructor(t,i){this.mediaEl=t,this.audioElems=i,this.onplayhead=!1,this.duration=0,this.timelineWidth=this.audioElems.timeline.offsetWidth-this.audioElems.playhead.offsetWidth,this.moveplayheadFn=this.moveplayhead.bind(this),this.registerListeners()}registerListeners(){this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1),this.mediaEl.addEventListener("canplaythrough",()=>this.duration=this.mediaEl.duration,!1),this.audioElems.timeline.addEventListener("click",this.timelineClicked.bind(this),!1),this.audioElems.button.addEventListener("click",this.play.bind(this)),this.audioElems.playhead.addEventListener("mousedown",this.mouseDown.bind(this),!1),window.addEventListener("mouseup",this.mouseUp.bind(this),!1)}play(){this.mediaEl.paused?this.mediaEl.play():this.mediaEl.pause(),this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause")}timeUpdate(){let t=this.mediaEl.currentTime/this.duration*100;this.audioElems.playhead.style.marginLeft=t+"%",this.mediaEl.currentTime===this.duration&&(this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause"))}moveplayhead(t){let i=t.clientX-this.getPosition(this.audioElems.timeline);i>=0&&i<=this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=i+"px"),i<0&&(this.audioElems.playhead.style.marginLeft="0px"),i>this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=this.timelineWidth-4+"px")}timelineClicked(t){this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t)}mouseDown(){this.onplayhead=!0,window.addEventListener("mousemove",this.moveplayheadFn,!0),this.mediaEl.removeEventListener("timeupdate",this.timeUpdate.bind(this),!1)}mouseUp(t){window.removeEventListener("mousemove",this.moveplayheadFn,!0),this.onplayhead==!0&&(this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t),this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1)),this.onplayhead=!1}clickPercent(t){return(t.clientX-this.getPosition(this.audioElems.timeline))/this.timelineWidth}getPosition(t){return t.getBoundingClientRect().left}},pf=e=>e.utils.createView({name:"media-preview",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id}),o=Xt(n.file)?"audio":"video";if(t.ref.media=document.createElement(o),t.ref.media.setAttribute("controls",!0),t.element.appendChild(t.ref.media),Xt(n.file)){let l=document.createDocumentFragment();t.ref.audio=[],t.ref.audio.container=document.createElement("div"),t.ref.audio.button=document.createElement("span"),t.ref.audio.timeline=document.createElement("div"),t.ref.audio.playhead=document.createElement("div"),t.ref.audio.container.className="audioplayer",t.ref.audio.button.className="playpausebtn play",t.ref.audio.timeline.className="timeline",t.ref.audio.playhead.className="playhead",t.ref.audio.timeline.appendChild(t.ref.audio.playhead),t.ref.audio.container.appendChild(t.ref.audio.button),t.ref.audio.container.appendChild(t.ref.audio.timeline),l.appendChild(t.ref.audio.container),t.element.appendChild(l)}},write:e.utils.createRoute({DID_MEDIA_PREVIEW_LOAD:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id});if(!n)return;let o=window.URL||window.webkitURL,l=new Blob([n.file],{type:n.file.type});t.ref.media.type=n.file.type,t.ref.media.src=n.file.mock&&n.file.url||o.createObjectURL(l),Xt(n.file)&&new Ma(t.ref.media,t.ref.audio),t.ref.media.addEventListener("loadeddata",()=>{let r=75;if(Aa(n.file)){let s=t.ref.media.offsetWidth,p=t.ref.media.videoWidth/s;r=t.ref.media.videoHeight/p}t.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:i.id,height:r})},!1)}})}),mf=e=>{let t=({root:a,props:n})=>{let{id:o}=n;a.query("GET_ITEM",o)&&a.dispatch("DID_MEDIA_PREVIEW_LOAD",{id:o})},i=({root:a,props:n})=>{let o=pf(e);a.ref.media=a.appendChildView(a.createChildView(o,{id:n.id}))};return e.utils.createView({name:"media-preview-wrapper",create:i,write:e.utils.createRoute({DID_MEDIA_PREVIEW_CONTAINER_CREATE:t})})},Oa=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n}=i,o=mf(e);return t("CREATE_VIEW",l=>{let{is:r,view:s,query:p}=l;if(!r("file"))return;let c=({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),g=p("GET_ALLOW_VIDEO_PREVIEW"),h=p("GET_ALLOW_AUDIO_PREVIEW");!f||f.archived||(!Aa(f.file)||!g)&&(!Xt(f.file)||!h)||(d.ref.mediaPreview=s.appendChildView(s.createChildView(o,{id:u})),d.dispatch("DID_MEDIA_PREVIEW_CONTAINER_CREATE",{id:u}))};s.registerWriter(n({DID_LOAD_ITEM:c},({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),g=d.query("GET_ALLOW_VIDEO_PREVIEW"),h=d.query("GET_ALLOW_AUDIO_PREVIEW");!f||(!Aa(f.file)||!g)&&(!Xt(f.file)||!h)||d.rect.element.hidden}))}),{options:{allowVideoPreview:[!0,a.BOOLEAN],allowAudioPreview:[!0,a.BOOLEAN]}}},uf=typeof window<"u"&&typeof window.document<"u";uf&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Oa}));var Sl={labelIdle:'\u0627\u0633\u062D\u0628 \u0648 \u0627\u062F\u0631\u062C \u0645\u0644\u0641\u0627\u062A\u0643 \u0623\u0648 \u062A\u0635\u0641\u062D ',labelInvalidField:"\u0627\u0644\u062D\u0642\u0644 \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u063A\u064A\u0631 \u0635\u0627\u0644\u062D\u0629",labelFileWaitingForSize:"\u0628\u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u062D\u062C\u0645",labelFileSizeNotAvailable:"\u0627\u0644\u062D\u062C\u0645 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D",labelFileLoading:"\u0628\u0627\u0644\u0625\u0646\u062A\u0638\u0627\u0631",labelFileLoadError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062D\u0645\u064A\u0644",labelFileProcessing:"\u064A\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingComplete:"\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingAborted:"\u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingRevertError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u0631\u0627\u062C\u0639",labelFileRemoveError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062D\u0630\u0641",labelTapToCancel:"\u0627\u0646\u0642\u0631 \u0644\u0644\u0625\u0644\u063A\u0627\u0621",labelTapToRetry:"\u0627\u0646\u0642\u0631 \u0644\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629",labelTapToUndo:"\u0627\u0646\u0642\u0631 \u0644\u0644\u062A\u0631\u0627\u062C\u0639",labelButtonRemoveItem:"\u0645\u0633\u062D",labelButtonAbortItemLoad:"\u0625\u0644\u063A\u0627\u0621",labelButtonRetryItemLoad:"\u0625\u0639\u0627\u062F\u0629",labelButtonAbortItemProcessing:"\u0625\u0644\u063A\u0627\u0621",labelButtonUndoItemProcessing:"\u062A\u0631\u0627\u062C\u0639",labelButtonRetryItemProcessing:"\u0625\u0639\u0627\u062F\u0629",labelButtonProcessItem:"\u0631\u0641\u0639",labelMaxFileSizeExceeded:"\u0627\u0644\u0645\u0644\u0641 \u0643\u0628\u064A\u0631 \u062C\u062F\u0627",labelMaxFileSize:"\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0623\u0642\u0635\u0649: {filesize}",labelMaxTotalFileSizeExceeded:"\u062A\u0645 \u062A\u062C\u0627\u0648\u0632 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u062D\u062C\u0645 \u0627\u0644\u0625\u062C\u0645\u0627\u0644\u064A",labelMaxTotalFileSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641: {filesize}",labelFileTypeNotAllowed:"\u0645\u0644\u0641 \u0645\u0646 \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D",fileValidateTypeLabelExpectedTypes:"\u062A\u062A\u0648\u0642\u0639 {allButLastType} \u0645\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u0646\u0648\u0639 \u0627\u0644\u0635\u0648\u0631\u0629 \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645",imageValidateSizeLabelImageSizeTooSmall:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0635\u063A\u064A\u0631 \u062C\u062F\u0627",imageValidateSizeLabelImageSizeTooBig:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0627\u0644\u062F\u0642\u0629 \u0636\u0639\u064A\u0641\u0629 \u062C\u062F\u0627",imageValidateSizeLabelImageResolutionTooHigh:"\u0627\u0644\u062F\u0642\u0629 \u0645\u0631\u062A\u0641\u0639\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinResolution:"\u0623\u0642\u0644 \u062F\u0642\u0629: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0623\u0642\u0635\u0649 \u062F\u0642\u0629: {maxResolution}"};var Ll={labelIdle:'Arrossega i deixa anar els teus fitxers o Navega ',labelInvalidField:"El camp cont\xE9 fitxers inv\xE0lids",labelFileWaitingForSize:"Esperant mida",labelFileSizeNotAvailable:"Mida no disponible",labelFileLoading:"Carregant",labelFileLoadError:"Error durant la c\xE0rrega",labelFileProcessing:"Pujant",labelFileProcessingComplete:"Pujada completada",labelFileProcessingAborted:"Pujada cancel\xB7lada",labelFileProcessingError:"Error durant la pujada",labelFileProcessingRevertError:"Error durant la reversi\xF3",labelFileRemoveError:"Error durant l'eliminaci\xF3",labelTapToCancel:"toca per cancel\xB7lar",labelTapToRetry:"toca per reintentar",labelTapToUndo:"toca per desfer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancel\xB7lar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancel\xB7lar",labelButtonUndoItemProcessing:"Desfer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Pujar",labelMaxFileSizeExceeded:"El fitxer \xE9s massa gran",labelMaxFileSize:"La mida m\xE0xima del fitxer \xE9s {filesize}",labelMaxTotalFileSizeExceeded:"Mida m\xE0xima total excedida",labelMaxTotalFileSize:"La mida m\xE0xima total del fitxer \xE9s {filesize}",labelFileTypeNotAllowed:"Fitxer de tipus inv\xE0lid",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipus d'imatge no suportada",imageValidateSizeLabelImageSizeTooSmall:"La imatge \xE9s massa petita",imageValidateSizeLabelImageSizeTooBig:"La imatge \xE9s massa gran",imageValidateSizeLabelExpectedMinSize:"La mida m\xEDnima \xE9s {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La mida m\xE0xima \xE9s {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3 \xE9s massa baixa",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3 \xE9s massa alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3 m\xEDnima \xE9s {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3 m\xE0xima \xE9s {maxResolution}"};var Al={labelIdle:'\u067E\u06D5\u0695\u06AF\u06D5\u06A9\u0627\u0646 \u0641\u0695\u06CE \u0628\u062F\u06D5 \u0626\u06CE\u0631\u06D5 \u0628\u06C6 \u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u06CC\u0627\u0646 \u0647\u06D5\u06B5\u0628\u0698\u06CE\u0631\u06D5 ',labelInvalidField:"\u067E\u06D5\u0695\u06AF\u06D5\u06CC \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06CC \u062A\u06CE\u062F\u0627\u06CC\u06D5",labelFileWaitingForSize:"\u0686\u0627\u0648\u06D5\u0695\u0648\u0627\u0646\u06CC\u06CC \u0642\u06D5\u0628\u0627\u0631\u06D5",labelFileSizeNotAvailable:"\u0642\u06D5\u0628\u0627\u0631\u06D5 \u0628\u06D5\u0631\u062F\u06D5\u0633\u062A \u0646\u06CC\u06D5",labelFileLoading:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileLoadError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u0645\u0627\u0648\u06D5\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessing:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessingComplete:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u062A\u06D5\u0648\u0627\u0648 \u0628\u0648\u0648",labelFileProcessingAborted:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u06CC\u06D5\u0648\u06D5",labelFileProcessingError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u06A9\u0627\u062A\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646\u062F\u0627",labelFileProcessingRevertError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u06AF\u06D5\u0695\u0627\u0646\u06D5\u0648\u06D5",labelFileRemoveError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelTapToCancel:"\u0628\u06C6 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5 Tab \u062F\u0627\u0628\u06AF\u0631\u06D5",labelTapToRetry:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u062F\u0648\u0648\u0628\u0627\u0631\u06D5\u06A9\u0631\u062F\u0646\u06D5\u0648\u06D5",labelTapToUndo:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRemoveItem:"\u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelButtonAbortItemLoad:"\u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemLoad:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonAbortItemProcessing:"\u067E\u06D5\u0634\u06CC\u0645\u0627\u0646\u0628\u0648\u0648\u0646\u06D5\u0648\u06D5",labelButtonUndoItemProcessing:"\u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemProcessing:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonProcessItem:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelMaxFileSizeExceeded:"\u067E\u06D5\u0695\u06AF\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",labelMaxFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {filesize}",labelMaxTotalFileSizeExceeded:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u06AF\u0634\u062A\u06CC \u062A\u06CE\u067E\u06D5\u0695\u06CE\u0646\u062F\u0631\u0627",labelMaxTotalFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u067E\u06D5\u0695\u06AF\u06D5 {filesize}",labelFileTypeNotAllowed:"\u062C\u06C6\u0631\u06CC \u067E\u06D5\u0695\u06AF\u06D5\u06A9\u06D5 \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06D5",fileValidateTypeLabelExpectedTypes:"\u062C\u06AF\u06D5 \u0644\u06D5 {allButLastType} \u06CC\u0627\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u062C\u06C6\u0631\u06CC \u0648\u06CE\u0646\u06D5 \u067E\u0627\u06B5\u067E\u0634\u062A\u06CC\u06CC \u0646\u06D5\u06A9\u0631\u0627\u0648\u06D5",imageValidateSizeLabelImageSizeTooSmall:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u0628\u0686\u0648\u0648\u06A9\u06D5",imageValidateSizeLabelImageSizeTooBig:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",imageValidateSizeLabelExpectedMinSize:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u06A9\u06D5\u0645\u06D5",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u0628\u06D5\u0631\u0632\u06D5",imageValidateSizeLabelExpectedMinResolution:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC {maxResolution}"};var Ml={labelIdle:'P\u0159et\xE1hn\u011Bte soubor sem (drag&drop) nebo Vyhledat ',labelInvalidField:"Pole obsahuje chybn\xE9 soubory",labelFileWaitingForSize:"Zji\u0161\u0165uje se velikost",labelFileSizeNotAvailable:"Velikost nen\xED zn\xE1m\xE1",labelFileLoading:"P\u0159en\xE1\u0161\xED se",labelFileLoadError:"Chyba p\u0159i p\u0159enosu",labelFileProcessing:"Prob\xEDh\xE1 upload",labelFileProcessingComplete:"Upload dokon\u010Den",labelFileProcessingAborted:"Upload stornov\xE1n",labelFileProcessingError:"Chyba p\u0159i uploadu",labelFileProcessingRevertError:"Chyba p\u0159i obnov\u011B",labelFileRemoveError:"Chyba p\u0159i odstran\u011Bn\xED",labelTapToCancel:"klepn\u011Bte pro storno",labelTapToRetry:"klepn\u011Bte pro opakov\xE1n\xED",labelTapToUndo:"klepn\u011Bte pro vr\xE1cen\xED",labelButtonRemoveItem:"Odstranit",labelButtonAbortItemLoad:"Storno",labelButtonRetryItemLoad:"Opakovat",labelButtonAbortItemProcessing:"Zp\u011Bt",labelButtonUndoItemProcessing:"Vr\xE1tit",labelButtonRetryItemProcessing:"Opakovat",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Soubor je p\u0159\xEDli\u0161 velk\xFD",labelMaxFileSize:"Nejv\u011Bt\u0161\xED velikost souboru je {filesize}",labelMaxTotalFileSizeExceeded:"P\u0159ekro\u010Dena maxim\xE1ln\xED celkov\xE1 velikost souboru",labelMaxTotalFileSize:"Maxim\xE1ln\xED celkov\xE1 velikost souboru je {filesize}",labelFileTypeNotAllowed:"Soubor je nespr\xE1vn\xE9ho typu",fileValidateTypeLabelExpectedTypes:"O\u010Dek\xE1v\xE1 se {allButLastType} nebo {lastType}",imageValidateSizeLabelFormatError:"Obr\xE1zek tohoto typu nen\xED podporov\xE1n",imageValidateSizeLabelImageSizeTooSmall:"Obr\xE1zek je p\u0159\xEDli\u0161 mal\xFD",imageValidateSizeLabelImageSizeTooBig:"Obr\xE1zek je p\u0159\xEDli\u0161 velk\xFD",imageValidateSizeLabelExpectedMinSize:"Minim\xE1ln\xED rozm\u011Br je {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maxim\xE1ln\xED rozm\u011Br je {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 mal\xE9",imageValidateSizeLabelImageResolutionTooHigh:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 velk\xE9",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1ln\xED rozli\u0161en\xED je {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1ln\xED rozli\u0161en\xED je {maxResolution}"};var Ol={labelIdle:'Tr\xE6k & slip filer eller Gennemse ',labelInvalidField:"Felt indeholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilg\xE6ngelig",labelFileLoading:"Loader",labelFileLoadError:"Load fejlede",labelFileProcessing:"Uploader",labelFileProcessingComplete:"Upload f\xE6rdig",labelFileProcessingAborted:"Upload annulleret",labelFileProcessingError:"Upload fejlede",labelFileProcessingRevertError:"Fortryd fejlede",labelFileRemoveError:"Fjern fejlede",labelTapToCancel:"tryk for at annullere",labelTapToRetry:"tryk for at pr\xF8ve igen",labelTapToUndo:"tryk for at fortryde",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Annuller",labelButtonRetryItemLoad:"Fors\xF8g igen",labelButtonAbortItemProcessing:"Annuller",labelButtonUndoItemProcessing:"Fortryd",labelButtonRetryItemProcessing:"Pr\xF8v igen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal totalst\xF8rrelse overskredet",labelMaxTotalFileSize:"Maksimal total filst\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Ugyldigt format",imageValidateSizeLabelImageSizeTooSmall:"Billedet er for lille",imageValidateSizeLabelImageSizeTooBig:"Billedet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimum st\xF8rrelse er {minBredde} \xD7 {minH\xF8jde}",imageValidateSizeLabelExpectedMaxSize:"Maksimal st\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"For lav opl\xF8sning",imageValidateSizeLabelImageResolutionTooHigh:"For h\xF8j opl\xF8sning",imageValidateSizeLabelExpectedMinResolution:"Minimum opl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal opl\xF8sning er {maxResolution}"};var Pl={labelIdle:'Dateien ablegen oder ausw\xE4hlen ',labelInvalidField:"Feld beinhaltet ung\xFCltige Dateien",labelFileWaitingForSize:"Dateigr\xF6\xDFe berechnen",labelFileSizeNotAvailable:"Dateigr\xF6\xDFe nicht verf\xFCgbar",labelFileLoading:"Laden",labelFileLoadError:"Fehler beim Laden",labelFileProcessing:"Upload l\xE4uft",labelFileProcessingComplete:"Upload abgeschlossen",labelFileProcessingAborted:"Upload abgebrochen",labelFileProcessingError:"Fehler beim Upload",labelFileProcessingRevertError:"Fehler beim Wiederherstellen",labelFileRemoveError:"Fehler beim L\xF6schen",labelTapToCancel:"abbrechen",labelTapToRetry:"erneut versuchen",labelTapToUndo:"r\xFCckg\xE4ngig",labelButtonRemoveItem:"Entfernen",labelButtonAbortItemLoad:"Verwerfen",labelButtonRetryItemLoad:"Erneut versuchen",labelButtonAbortItemProcessing:"Abbrechen",labelButtonUndoItemProcessing:"R\xFCckg\xE4ngig",labelButtonRetryItemProcessing:"Erneut versuchen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Datei ist zu gro\xDF",labelMaxFileSize:"Maximale Dateigr\xF6\xDFe: {filesize}",labelMaxTotalFileSizeExceeded:"Maximale gesamte Dateigr\xF6\xDFe \xFCberschritten",labelMaxTotalFileSize:"Maximale gesamte Dateigr\xF6\xDFe: {filesize}",labelFileTypeNotAllowed:"Dateityp ung\xFCltig",fileValidateTypeLabelExpectedTypes:"Erwartet {allButLastType} oder {lastType}",imageValidateSizeLabelFormatError:"Bildtyp nicht unterst\xFCtzt",imageValidateSizeLabelImageSizeTooSmall:"Bild ist zu klein",imageValidateSizeLabelImageSizeTooBig:"Bild ist zu gro\xDF",imageValidateSizeLabelExpectedMinSize:"Mindestgr\xF6\xDFe: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale Gr\xF6\xDFe: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Aufl\xF6sung ist zu niedrig",imageValidateSizeLabelImageResolutionTooHigh:"Aufl\xF6sung ist zu hoch",imageValidateSizeLabelExpectedMinResolution:"Mindestaufl\xF6sung: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale Aufl\xF6sung: {maxResolution}"};var Dl={labelIdle:'Drag & Drop your files or Browse ',labelInvalidField:"Field contains invalid files",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"Size not available",labelFileLoading:"Loading",labelFileLoadError:"Error during load",labelFileProcessing:"Uploading",labelFileProcessingComplete:"Upload complete",labelFileProcessingAborted:"Upload cancelled",labelFileProcessingError:"Error during upload",labelFileProcessingRevertError:"Error during revert",labelFileRemoveError:"Error during remove",labelTapToCancel:"tap to cancel",labelTapToRetry:"tap to retry",labelTapToUndo:"tap to undo",labelButtonRemoveItem:"Remove",labelButtonAbortItemLoad:"Abort",labelButtonRetryItemLoad:"Retry",labelButtonAbortItemProcessing:"Cancel",labelButtonUndoItemProcessing:"Undo",labelButtonRetryItemProcessing:"Retry",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"File is too large",labelMaxFileSize:"Maximum file size is {filesize}",labelMaxTotalFileSizeExceeded:"Maximum total size exceeded",labelMaxTotalFileSize:"Maximum total file size is {filesize}",labelFileTypeNotAllowed:"File of invalid type",fileValidateTypeLabelExpectedTypes:"Expects {allButLastType} or {lastType}",imageValidateSizeLabelFormatError:"Image type not supported",imageValidateSizeLabelImageSizeTooSmall:"Image is too small",imageValidateSizeLabelImageSizeTooBig:"Image is too big",imageValidateSizeLabelExpectedMinSize:"Minimum size is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum size is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolution is too low",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimum resolution is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum resolution is {maxResolution}"};var Fl={labelIdle:'Arrastra y suelta tus archivos o Examina ',labelInvalidField:"El campo contiene archivos inv\xE1lidos",labelFileWaitingForSize:"Esperando tama\xF1o",labelFileSizeNotAvailable:"Tama\xF1o no disponible",labelFileLoading:"Cargando",labelFileLoadError:"Error durante la carga",labelFileProcessing:"Subiendo",labelFileProcessingComplete:"Subida completa",labelFileProcessingAborted:"Subida cancelada",labelFileProcessingError:"Error durante la subida",labelFileProcessingRevertError:"Error durante la reversi\xF3n",labelFileRemoveError:"Error durante la eliminaci\xF3n",labelTapToCancel:"toca para cancelar",labelTapToRetry:"tocar para reintentar",labelTapToUndo:"tocar para deshacer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancelar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Deshacer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Subir",labelMaxFileSizeExceeded:"El archivo es demasiado grande",labelMaxFileSize:"El tama\xF1o m\xE1ximo del archivo es {filesize}",labelMaxTotalFileSizeExceeded:"Tama\xF1o total m\xE1ximo excedido",labelMaxTotalFileSize:"El tama\xF1o total m\xE1ximo del archivo es {filesize}",labelFileTypeNotAllowed:"Archivo de tipo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagen no soportada",imageValidateSizeLabelImageSizeTooSmall:"La imagen es demasiado peque\xF1a",imageValidateSizeLabelImageSizeTooBig:"La imagen es demasiado grande",imageValidateSizeLabelExpectedMinSize:"El tama\xF1o m\xEDnimo es {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"El tama\xF1o m\xE1ximo es {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3n es demasiado baja",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3n es demasiado alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3n m\xEDnima es {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3n m\xE1xima es {maxResolution}"};var zl={labelIdle:'\u0641\u0627\u06CC\u0644 \u0631\u0627 \u0627\u06CC\u0646\u062C\u0627 \u0628\u06A9\u0634\u06CC\u062F \u0648 \u0631\u0647\u0627 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u062C\u0633\u062A\u062C\u0648 \u06A9\u0646\u06CC\u062F ',labelInvalidField:"\u0641\u06CC\u0644\u062F \u062F\u0627\u0631\u0627\u06CC \u0641\u0627\u06CC\u0644 \u0647\u0627\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"\u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0645\u062C\u0627\u0632 \u0646\u06CC\u0633\u062A",labelFileLoading:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileLoadError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0627\u062C\u0631\u0627",labelFileProcessing:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingComplete:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u06A9\u0627\u0645\u0644 \u0634\u062F",labelFileProcessingAborted:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0644\u063A\u0648 \u0634\u062F",labelFileProcessingError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingRevertError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelFileRemoveError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelTapToCancel:"\u0628\u0631\u0627\u06CC \u0644\u063A\u0648 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u06CC\u062F",labelTapToRetry:"\u0628\u0631\u0627\u06CC \u062A\u06A9\u0631\u0627\u0631 \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelTapToUndo:"\u0628\u0631\u0627\u06CC \u0628\u0631\u06AF\u0634\u062A \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelButtonRemoveItem:"\u062D\u0630\u0641",labelButtonAbortItemLoad:"\u0644\u063A\u0648",labelButtonRetryItemLoad:"\u062A\u06A9\u0631\u0627\u0631",labelButtonAbortItemProcessing:"\u0644\u063A\u0648",labelButtonUndoItemProcessing:"\u0628\u0631\u06AF\u0634\u062A",labelButtonRetryItemProcessing:"\u062A\u06A9\u0631\u0627\u0631",labelButtonProcessItem:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelMaxFileSizeExceeded:"\u0641\u0627\u06CC\u0644 \u0628\u0633\u06CC\u0627\u0631 \u062D\u062C\u06CC\u0645 \u0627\u0633\u062A",labelMaxFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0645\u062C\u0627\u0632 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelMaxTotalFileSizeExceeded:"\u0627\u0632 \u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0628\u06CC\u0634\u062A\u0631 \u0634\u062F",labelMaxTotalFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelFileTypeNotAllowed:"\u0646\u0648\u0639 \u0641\u0627\u06CC\u0644 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",fileValidateTypeLabelExpectedTypes:"\u062F\u0631 \u0627\u0646\u062A\u0638\u0627\u0631 {allButLastType} \u06CC\u0627 {lastType}",imageValidateSizeLabelFormatError:"\u0641\u0631\u0645\u062A \u062A\u0635\u0648\u06CC\u0631 \u067E\u0634\u062A\u06CC\u0628\u0627\u0646\u06CC \u0646\u0645\u06CC \u0634\u0648\u062F",imageValidateSizeLabelImageSizeTooSmall:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0648\u0686\u06A9 \u0627\u0633\u062A",imageValidateSizeLabelImageSizeTooBig:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0628\u0632\u0631\u06AF \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinSize:"\u062D\u062F\u0627\u0642\u0644 \u0627\u0646\u062F\u0627\u0632\u0647 {minWidth} \xD7 {minHeight} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0627\u0646\u062F\u0627\u0632\u0647 {maxWidth} \xD7 {maxHeight} \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0645 \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0636\u0648\u0639 \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0632\u06CC\u0627\u062F \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinResolution:"\u062D\u062F\u0627\u0642\u0644 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {minResolution} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxResolution:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {maxResolution} \u0627\u0633\u062A"};var Cl={labelIdle:'Ved\xE4 ja pudota tiedostoja tai Selaa ',labelInvalidField:"Kent\xE4ss\xE4 on virheellisi\xE4 tiedostoja",labelFileWaitingForSize:"Odotetaan kokoa",labelFileSizeNotAvailable:"Kokoa ei saatavilla",labelFileLoading:"Ladataan",labelFileLoadError:"Virhe latauksessa",labelFileProcessing:"L\xE4hetet\xE4\xE4n",labelFileProcessingComplete:"L\xE4hetys valmis",labelFileProcessingAborted:"L\xE4hetys peruttu",labelFileProcessingError:"Virhe l\xE4hetyksess\xE4",labelFileProcessingRevertError:"Virhe palautuksessa",labelFileRemoveError:"Virhe poistamisessa",labelTapToCancel:"peruuta napauttamalla",labelTapToRetry:"yrit\xE4 uudelleen napauttamalla",labelTapToUndo:"kumoa napauttamalla",labelButtonRemoveItem:"Poista",labelButtonAbortItemLoad:"Keskeyt\xE4",labelButtonRetryItemLoad:"Yrit\xE4 uudelleen",labelButtonAbortItemProcessing:"Peruuta",labelButtonUndoItemProcessing:"Kumoa",labelButtonRetryItemProcessing:"Yrit\xE4 uudelleen",labelButtonProcessItem:"L\xE4het\xE4",labelMaxFileSizeExceeded:"Tiedoston koko on liian suuri",labelMaxFileSize:"Tiedoston maksimikoko on {filesize}",labelMaxTotalFileSizeExceeded:"Tiedostojen yhdistetty maksimikoko ylitetty",labelMaxTotalFileSize:"Tiedostojen yhdistetty maksimikoko on {filesize}",labelFileTypeNotAllowed:"Tiedostotyyppi\xE4 ei sallita",fileValidateTypeLabelExpectedTypes:"Sallitaan {allButLastType} tai {lastType}",imageValidateSizeLabelFormatError:"Kuvatyyppi\xE4 ei tueta",imageValidateSizeLabelImageSizeTooSmall:"Kuva on liian pieni",imageValidateSizeLabelImageSizeTooBig:"Kuva on liian suuri",imageValidateSizeLabelExpectedMinSize:"Minimikoko on {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimikoko on {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resoluutio on liian pieni",imageValidateSizeLabelImageResolutionTooHigh:"Resoluutio on liian suuri",imageValidateSizeLabelExpectedMinResolution:"Minimiresoluutio on {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimiresoluutio on {maxResolution}"};var Nl={labelIdle:'Faites glisser vos fichiers ou Parcourir ',labelInvalidField:"Le champ contient des fichiers invalides",labelFileWaitingForSize:"En attente de taille",labelFileSizeNotAvailable:"Taille non disponible",labelFileLoading:"Chargement",labelFileLoadError:"Erreur durant le chargement",labelFileProcessing:"Traitement",labelFileProcessingComplete:"Traitement effectu\xE9",labelFileProcessingAborted:"Traitement interrompu",labelFileProcessingError:"Erreur durant le traitement",labelFileProcessingRevertError:"Erreur durant la restauration",labelFileRemoveError:"Erreur durant la suppression",labelTapToCancel:"appuyer pour annuler",labelTapToRetry:"appuyer pour r\xE9essayer",labelTapToUndo:"appuyer pour revenir en arri\xE8re",labelButtonRemoveItem:"Retirer",labelButtonAbortItemLoad:"Annuler",labelButtonRetryItemLoad:"Recommencer",labelButtonAbortItemProcessing:"Annuler",labelButtonUndoItemProcessing:"Revenir en arri\xE8re",labelButtonRetryItemProcessing:"Recommencer",labelButtonProcessItem:"Transf\xE9rer",labelMaxFileSizeExceeded:"Le fichier est trop volumineux",labelMaxFileSize:"La taille maximale de fichier est {filesize}",labelMaxTotalFileSizeExceeded:"Taille totale maximale d\xE9pass\xE9e",labelMaxTotalFileSize:"La taille totale maximale des fichiers est {filesize}",labelFileTypeNotAllowed:"Fichier non valide",fileValidateTypeLabelExpectedTypes:"Attendu {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Type d'image non pris en charge",imageValidateSizeLabelImageSizeTooSmall:"L'image est trop petite",imageValidateSizeLabelImageSizeTooBig:"L'image est trop grande",imageValidateSizeLabelExpectedMinSize:"La taille minimale est {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La taille maximale est {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La r\xE9solution est trop faible",imageValidateSizeLabelImageResolutionTooHigh:"La r\xE9solution est trop \xE9lev\xE9e",imageValidateSizeLabelExpectedMinResolution:"La r\xE9solution minimale est {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La r\xE9solution maximale est {maxResolution}"};var Bl={labelIdle:'Mozgasd ide a f\xE1jlt a felt\xF6lt\xE9shez, vagy tall\xF3z\xE1s ',labelInvalidField:"A mez\u0151 \xE9rv\xE9nytelen f\xE1jlokat tartalmaz",labelFileWaitingForSize:"F\xE1ljm\xE9ret kisz\xE1mol\xE1sa",labelFileSizeNotAvailable:"A f\xE1jlm\xE9ret nem el\xE9rhet\u0151",labelFileLoading:"T\xF6lt\xE9s",labelFileLoadError:"Hiba a bet\xF6lt\xE9s sor\xE1n",labelFileProcessing:"Felt\xF6lt\xE9s",labelFileProcessingComplete:"Sikeres felt\xF6lt\xE9s",labelFileProcessingAborted:"A felt\xF6lt\xE9s megszak\xEDtva",labelFileProcessingError:"Hiba t\xF6rt\xE9nt a felt\xF6lt\xE9s sor\xE1n",labelFileProcessingRevertError:"Hiba a vissza\xE1ll\xEDt\xE1s sor\xE1n",labelFileRemoveError:"Hiba t\xF6rt\xE9nt az elt\xE1vol\xEDt\xE1s sor\xE1n",labelTapToCancel:"koppints a t\xF6rl\xE9shez",labelTapToRetry:"koppints az \xFAjrakezd\xE9shez",labelTapToUndo:"koppints a visszavon\xE1shoz",labelButtonRemoveItem:"Elt\xE1vol\xEDt\xE1s",labelButtonAbortItemLoad:"Megszak\xEDt\xE1s",labelButtonRetryItemLoad:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonAbortItemProcessing:"Megszak\xEDt\xE1s",labelButtonUndoItemProcessing:"Visszavon\xE1s",labelButtonRetryItemProcessing:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonProcessItem:"Felt\xF6lt\xE9s",labelMaxFileSizeExceeded:"A f\xE1jl t\xFAll\xE9pte a maxim\xE1lis m\xE9retet",labelMaxFileSize:"Maxim\xE1lis f\xE1jlm\xE9ret: {filesize}",labelMaxTotalFileSizeExceeded:"T\xFAll\xE9pte a maxim\xE1lis teljes m\xE9retet",labelMaxTotalFileSize:"A maxim\xE1is teljes f\xE1jlm\xE9ret: {filesize}",labelFileTypeNotAllowed:"\xC9rv\xE9nytelen t\xEDpus\xFA f\xE1jl",fileValidateTypeLabelExpectedTypes:"Enged\xE9lyezett t\xEDpusok {allButLastType} vagy {lastType}",imageValidateSizeLabelFormatError:"A k\xE9pt\xEDpus nem t\xE1mogatott",imageValidateSizeLabelImageSizeTooSmall:"A k\xE9p t\xFAl kicsi",imageValidateSizeLabelImageSizeTooBig:"A k\xE9p t\xFAl nagy",imageValidateSizeLabelExpectedMinSize:"Minimum m\xE9ret: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum m\xE9ret: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"A felbont\xE1s t\xFAl alacsony",imageValidateSizeLabelImageResolutionTooHigh:"A felbont\xE1s t\xFAl magas",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1is felbont\xE1s: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1lis felbont\xE1s: {maxResolution}"};var kl={labelIdle:'Seret & Jatuhkan berkas Anda atau Jelajahi',labelInvalidField:"Isian berisi berkas yang tidak valid",labelFileWaitingForSize:"Menunggu ukuran berkas",labelFileSizeNotAvailable:"Ukuran berkas tidak tersedia",labelFileLoading:"Memuat",labelFileLoadError:"Kesalahan saat memuat",labelFileProcessing:"Mengunggah",labelFileProcessingComplete:"Pengunggahan selesai",labelFileProcessingAborted:"Pengunggahan dibatalkan",labelFileProcessingError:"Kesalahan saat pengunggahan",labelFileProcessingRevertError:"Kesalahan saat pemulihan",labelFileRemoveError:"Kesalahan saat penghapusan",labelTapToCancel:"ketuk untuk membatalkan",labelTapToRetry:"ketuk untuk mencoba lagi",labelTapToUndo:"ketuk untuk mengurungkan",labelButtonRemoveItem:"Hapus",labelButtonAbortItemLoad:"Batalkan",labelButtonRetryItemLoad:"Coba Kembali",labelButtonAbortItemProcessing:"Batalkan",labelButtonUndoItemProcessing:"Urungkan",labelButtonRetryItemProcessing:"Coba Kembali",labelButtonProcessItem:"Unggah",labelMaxFileSizeExceeded:"Berkas terlalu besar",labelMaxFileSize:"Ukuran berkas maksimum adalah {filesize}",labelMaxTotalFileSizeExceeded:"Jumlah berkas maksimum terlampaui",labelMaxTotalFileSize:"Jumlah berkas maksimum adalah {filesize}",labelFileTypeNotAllowed:"Jenis berkas tidak valid",fileValidateTypeLabelExpectedTypes:"Mengharapkan {allButLastType} atau {lastType}",imageValidateSizeLabelFormatError:"Jenis citra tidak didukung",imageValidateSizeLabelImageSizeTooSmall:"Citra terlalu kecil",imageValidateSizeLabelImageSizeTooBig:"Citra terlalu besar",imageValidateSizeLabelExpectedMinSize:"Ukuran minimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Ukuran maksimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolusi terlalu rendah",imageValidateSizeLabelImageResolutionTooHigh:"Resolusi terlalu tinggi",imageValidateSizeLabelExpectedMinResolution:"Resolusi minimum adalah {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolusi maksimum adalah {maxResolution}"};var Vl={labelIdle:'Trascina e rilascia i tuoi file oppure Carica ',labelInvalidField:"Il campo contiene dei file non validi",labelFileWaitingForSize:"Aspettando le dimensioni",labelFileSizeNotAvailable:"Dimensioni non disponibili",labelFileLoading:"Caricamento",labelFileLoadError:"Errore durante il caricamento",labelFileProcessing:"Caricamento",labelFileProcessingComplete:"Caricamento completato",labelFileProcessingAborted:"Caricamento cancellato",labelFileProcessingError:"Errore durante il caricamento",labelFileProcessingRevertError:"Errore durante il ripristino",labelFileRemoveError:"Errore durante l'eliminazione",labelTapToCancel:"tocca per cancellare",labelTapToRetry:"tocca per riprovare",labelTapToUndo:"tocca per ripristinare",labelButtonRemoveItem:"Elimina",labelButtonAbortItemLoad:"Cancella",labelButtonRetryItemLoad:"Ritenta",labelButtonAbortItemProcessing:"Camcella",labelButtonUndoItemProcessing:"Indietro",labelButtonRetryItemProcessing:"Ritenta",labelButtonProcessItem:"Carica",labelMaxFileSizeExceeded:"Il peso del file \xE8 eccessivo",labelMaxFileSize:"Il peso massimo del file \xE8 {filesize}",labelMaxTotalFileSizeExceeded:"Dimensione totale massima superata",labelMaxTotalFileSize:"La dimensione massima totale del file \xE8 {filesize}",labelFileTypeNotAllowed:"File non supportato",fileValidateTypeLabelExpectedTypes:"Aspetta {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo di immagine non compatibile",imageValidateSizeLabelImageSizeTooSmall:"L'immagine \xE8 troppo piccola",imageValidateSizeLabelImageSizeTooBig:"L'immagine \xE8 troppo grande",imageValidateSizeLabelExpectedMinSize:"La dimensione minima \xE8 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La dimensione massima \xE8 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La risoluzione \xE8 troppo bassa",imageValidateSizeLabelImageResolutionTooHigh:"La risoluzione \xE8 troppo alta",imageValidateSizeLabelExpectedMinResolution:"La risoluzione minima \xE8 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La risoluzione massima \xE8 {maxResolution}"};var Gl={labelIdle:'\u1791\u17B6\u1789&\u178A\u17B6\u1780\u17CB\u17A0\u17D2\u179C\u17B6\u179B\u17CB\u17AF\u1780\u179F\u17B6\u179A\u179A\u1794\u179F\u17CB\u17A2\u17D2\u1793\u1780 \u17AC \u179F\u17D2\u179C\u17C2\u1784\u179A\u1780 ',labelInvalidField:"\u1785\u1793\u17D2\u179B\u17C4\u17C7\u1798\u17B6\u1793\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",labelFileWaitingForSize:"\u1780\u17C6\u1796\u17BB\u1784\u179A\u1784\u17CB\u1785\u17B6\u17C6\u1791\u17C6\u17A0\u17C6",labelFileSizeNotAvailable:"\u1791\u17C6\u17A0\u17C6\u1798\u17B7\u1793\u17A2\u17B6\u1785\u1794\u17D2\u179A\u17BE\u1794\u17B6\u1793",labelFileLoading:"\u1780\u17C6\u1796\u17BB\u1784\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileLoadError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileProcessing:"\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingComplete:"\u1780\u17B6\u179A\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784\u1796\u17C1\u1789\u179B\u17C1\u1789",labelFileProcessingAborted:"\u1780\u17B6\u179A\u1794\u1784\u17D2\u17A0\u17C4\u17C7\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelFileProcessingError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingRevertError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178F\u17D2\u179A\u17A1\u1794\u17CB",labelFileRemoveError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u1780\u1785\u17C1\u1789",labelTapToCancel:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelTapToRetry:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelTapToUndo:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRemoveItem:"\u1799\u1780\u1785\u17C1\u1789",labelButtonAbortItemLoad:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonRetryItemLoad:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonAbortItemProcessing:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonUndoItemProcessing:"\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRetryItemProcessing:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonProcessItem:"\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelMaxFileSizeExceeded:"\u17AF\u1780\u179F\u17B6\u179A\u1792\u17C6\u1796\u17C1\u1780",labelMaxFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelMaxTotalFileSizeExceeded:"\u179B\u17BE\u179F\u1791\u17C6\u17A0\u17C6\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6",labelMaxTotalFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelFileTypeNotAllowed:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",fileValidateTypeLabelExpectedTypes:"\u179A\u17C6\u1796\u17B9\u1784\u1790\u17B6 {allButLastType} \u17AC {lastType}",imageValidateSizeLabelFormatError:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u179A\u17BC\u1794\u1797\u17B6\u1796\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",imageValidateSizeLabelImageSizeTooSmall:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u178F\u17BC\u1785\u1796\u17C1\u1780",imageValidateSizeLabelImageSizeTooBig:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u1792\u17C6\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1791\u17B6\u1794\u1796\u17C1\u1780",imageValidateSizeLabelImageResolutionTooHigh:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1781\u17D2\u1796\u179F\u17CB\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxResolution}"};var Ul={labelIdle:'Drag & Drop je bestanden of Bladeren ',labelInvalidField:"Veld bevat ongeldige bestanden",labelFileWaitingForSize:"Wachten op grootte",labelFileSizeNotAvailable:"Grootte niet beschikbaar",labelFileLoading:"Laden",labelFileLoadError:"Fout tijdens laden",labelFileProcessing:"Uploaden",labelFileProcessingComplete:"Upload afgerond",labelFileProcessingAborted:"Upload geannuleerd",labelFileProcessingError:"Fout tijdens upload",labelFileProcessingRevertError:"Fout bij herstellen",labelFileRemoveError:"Fout bij verwijderen",labelTapToCancel:"tik om te annuleren",labelTapToRetry:"tik om opnieuw te proberen",labelTapToUndo:"tik om ongedaan te maken",labelButtonRemoveItem:"Verwijderen",labelButtonAbortItemLoad:"Afbreken",labelButtonRetryItemLoad:"Opnieuw proberen",labelButtonAbortItemProcessing:"Annuleren",labelButtonUndoItemProcessing:"Ongedaan maken",labelButtonRetryItemProcessing:"Opnieuw proberen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Bestand is te groot",labelMaxFileSize:"Maximale bestandsgrootte is {filesize}",labelMaxTotalFileSizeExceeded:"Maximale totale grootte overschreden",labelMaxTotalFileSize:"Maximale totale bestandsgrootte is {filesize}",labelFileTypeNotAllowed:"Ongeldig bestandstype",fileValidateTypeLabelExpectedTypes:"Verwacht {allButLastType} of {lastType}",imageValidateSizeLabelFormatError:"Afbeeldingstype niet ondersteund",imageValidateSizeLabelImageSizeTooSmall:"Afbeelding is te klein",imageValidateSizeLabelImageSizeTooBig:"Afbeelding is te groot",imageValidateSizeLabelExpectedMinSize:"Minimale afmeting is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale afmeting is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolutie is te laag",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimale resolutie is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale resolutie is {maxResolution}"};var Wl={labelIdle:'Dra og slipp filene dine, eller Bla gjennom... ',labelInvalidField:"Feltet inneholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilgjengelig",labelFileLoading:"Laster",labelFileLoadError:"Feil under lasting",labelFileProcessing:"Laster opp",labelFileProcessingComplete:"Opplasting ferdig",labelFileProcessingAborted:"Opplasting avbrutt",labelFileProcessingError:"Feil under opplasting",labelFileProcessingRevertError:"Feil under reversering",labelFileRemoveError:"Feil under flytting",labelTapToCancel:"klikk for \xE5 avbryte",labelTapToRetry:"klikk for \xE5 pr\xF8ve p\xE5 nytt",labelTapToUndo:"klikk for \xE5 angre",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"Pr\xF8v p\xE5 nytt",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"Angre",labelButtonRetryItemProcessing:"Pr\xF8v p\xE5 nytt",labelButtonProcessItem:"Last opp",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal total st\xF8rrelse oversteget",labelMaxTotalFileSize:"Maksimal total st\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildeformat ikke st\xF8ttet",imageValidateSizeLabelImageSizeTooSmall:"Bildet er for lite",imageValidateSizeLabelImageSizeTooBig:"Bildet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimumsst\xF8rrelse er {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimumsst\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Oppl\xF8sningen er for lav",imageValidateSizeLabelImageResolutionTooHigh:"Oppl\xF8sningen er for h\xF8y",imageValidateSizeLabelExpectedMinResolution:"Minimum oppl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal oppl\xF8sning er {maxResolution}"};var Hl={labelIdle:'Przeci\u0105gnij i upu\u015B\u0107 lub wybierz pliki',labelInvalidField:"Nieprawid\u0142owe pliki",labelFileWaitingForSize:"Pobieranie rozmiaru",labelFileSizeNotAvailable:"Nieznany rozmiar",labelFileLoading:"Wczytywanie",labelFileLoadError:"B\u0142\u0105d wczytywania",labelFileProcessing:"Przesy\u0142anie",labelFileProcessingComplete:"Przes\u0142ano",labelFileProcessingAborted:"Przerwano",labelFileProcessingError:"Przesy\u0142anie nie powiod\u0142o si\u0119",labelFileProcessingRevertError:"Co\u015B posz\u0142o nie tak",labelFileRemoveError:"Nieudane usuni\u0119cie",labelTapToCancel:"Anuluj",labelTapToRetry:"Pon\xF3w",labelTapToUndo:"Cofnij",labelButtonRemoveItem:"Usu\u0144",labelButtonAbortItemLoad:"Przerwij",labelButtonRetryItemLoad:"Pon\xF3w",labelButtonAbortItemProcessing:"Anuluj",labelButtonUndoItemProcessing:"Cofnij",labelButtonRetryItemProcessing:"Pon\xF3w",labelButtonProcessItem:"Prze\u015Blij",labelMaxFileSizeExceeded:"Plik jest zbyt du\u017Cy",labelMaxFileSize:"Dopuszczalna wielko\u015B\u0107 pliku to {filesize}",labelMaxTotalFileSizeExceeded:"Przekroczono \u0142\u0105czny rozmiar plik\xF3w",labelMaxTotalFileSize:"\u0141\u0105czny rozmiar plik\xF3w nie mo\u017Ce przekroczy\u0107 {filesize}",labelFileTypeNotAllowed:"Niedozwolony rodzaj pliku",fileValidateTypeLabelExpectedTypes:"Oczekiwano {allButLastType} lub {lastType}",imageValidateSizeLabelFormatError:"Nieobs\u0142ugiwany format obrazu",imageValidateSizeLabelImageSizeTooSmall:"Obraz jest zbyt ma\u0142y",imageValidateSizeLabelImageSizeTooBig:"Obraz jest zbyt du\u017Cy",imageValidateSizeLabelExpectedMinSize:"Minimalne wymiary obrazu to {minWidth}\xD7{minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksymalna wymiary obrazu to {maxWidth}\xD7{maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozdzielczo\u015B\u0107 jest zbyt niska",imageValidateSizeLabelImageResolutionTooHigh:"Rozdzielczo\u015B\u0107 jest zbyt wysoka",imageValidateSizeLabelExpectedMinResolution:"Minimalna rozdzielczo\u015B\u0107 to {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksymalna rozdzielczo\u015B\u0107 to {maxResolution}"};var wi={labelIdle:'Arraste e solte os arquivos ou Clique aqui ',labelInvalidField:"Arquivos inv\xE1lidos",labelFileWaitingForSize:"Calculando o tamanho do arquivo",labelFileSizeNotAvailable:"Tamanho do arquivo indispon\xEDvel",labelFileLoading:"Carregando",labelFileLoadError:"Erro durante o carregamento",labelFileProcessing:"Enviando",labelFileProcessingComplete:"Envio finalizado",labelFileProcessingAborted:"Envio cancelado",labelFileProcessingError:"Erro durante o envio",labelFileProcessingRevertError:"Erro ao reverter o envio",labelFileRemoveError:"Erro ao remover o arquivo",labelTapToCancel:"clique para cancelar",labelTapToRetry:"clique para reenviar",labelTapToUndo:"clique para desfazer",labelButtonRemoveItem:"Remover",labelButtonAbortItemLoad:"Abortar",labelButtonRetryItemLoad:"Reenviar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Desfazer",labelButtonRetryItemProcessing:"Reenviar",labelButtonProcessItem:"Enviar",labelMaxFileSizeExceeded:"Arquivo \xE9 muito grande",labelMaxFileSize:"O tamanho m\xE1ximo permitido: {filesize}",labelMaxTotalFileSizeExceeded:"Tamanho total dos arquivos excedido",labelMaxTotalFileSize:"Tamanho total permitido: {filesize}",labelFileTypeNotAllowed:"Tipo de arquivo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Tipos de arquivo suportados s\xE3o {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagem inv\xE1lida",imageValidateSizeLabelImageSizeTooSmall:"Imagem muito pequena",imageValidateSizeLabelImageSizeTooBig:"Imagem muito grande",imageValidateSizeLabelExpectedMinSize:"Tamanho m\xEDnimo permitida: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Tamanho m\xE1ximo permitido: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolu\xE7\xE3o muito baixa",imageValidateSizeLabelImageResolutionTooHigh:"Resolu\xE7\xE3o muito alta",imageValidateSizeLabelExpectedMinResolution:"Resolu\xE7\xE3o m\xEDnima permitida: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolu\xE7\xE3o m\xE1xima permitida: {maxResolution}"};var jl={labelIdle:'Trage \u0219i plaseaz\u0103 fi\u0219iere sau Caut\u0103-le ',labelInvalidField:"C\xE2mpul con\u021Bine fi\u0219iere care nu sunt valide",labelFileWaitingForSize:"\xCEn a\u0219teptarea dimensiunii",labelFileSizeNotAvailable:"Dimensiunea nu este diponibil\u0103",labelFileLoading:"Se \xEEncarc\u0103",labelFileLoadError:"Eroare la \xEEnc\u0103rcare",labelFileProcessing:"Se \xEEncarc\u0103",labelFileProcessingComplete:"\xCEnc\u0103rcare finalizat\u0103",labelFileProcessingAborted:"\xCEnc\u0103rcare anulat\u0103",labelFileProcessingError:"Eroare la \xEEnc\u0103rcare",labelFileProcessingRevertError:"Eroare la anulare",labelFileRemoveError:"Eroare la \u015Ftergere",labelTapToCancel:"apas\u0103 pentru a anula",labelTapToRetry:"apas\u0103 pentru a re\xEEncerca",labelTapToUndo:"apas\u0103 pentru a anula",labelButtonRemoveItem:"\u015Eterge",labelButtonAbortItemLoad:"Anuleaz\u0103",labelButtonRetryItemLoad:"Re\xEEncearc\u0103",labelButtonAbortItemProcessing:"Anuleaz\u0103",labelButtonUndoItemProcessing:"Anuleaz\u0103",labelButtonRetryItemProcessing:"Re\xEEncearc\u0103",labelButtonProcessItem:"\xCEncarc\u0103",labelMaxFileSizeExceeded:"Fi\u0219ierul este prea mare",labelMaxFileSize:"Dimensiunea maxim\u0103 a unui fi\u0219ier este de {filesize}",labelMaxTotalFileSizeExceeded:"Dimensiunea total\u0103 maxim\u0103 a fost dep\u0103\u0219it\u0103",labelMaxTotalFileSize:"Dimensiunea total\u0103 maxim\u0103 a fi\u0219ierelor este de {filesize}",labelFileTypeNotAllowed:"Tipul fi\u0219ierului nu este valid",fileValidateTypeLabelExpectedTypes:"Se a\u0219teapt\u0103 {allButLastType} sau {lastType}",imageValidateSizeLabelFormatError:"Formatul imaginii nu este acceptat",imageValidateSizeLabelImageSizeTooSmall:"Imaginea este prea mic\u0103",imageValidateSizeLabelImageSizeTooBig:"Imaginea este prea mare",imageValidateSizeLabelExpectedMinSize:"M\u0103rimea minim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelExpectedMaxSize:"M\u0103rimea maxim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rezolu\u021Bia este prea mic\u0103",imageValidateSizeLabelImageResolutionTooHigh:"Rezolu\u021Bia este prea mare",imageValidateSizeLabelExpectedMinResolution:"Rezolu\u021Bia minim\u0103 este de {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Rezolu\u021Bia maxim\u0103 este de {maxResolution}"};var ql={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0438\u043B\u0438 \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0444\u0430\u0439\u043B\u044B",labelFileWaitingForSize:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043C\u0435\u0440",labelFileSizeNotAvailable:"\u0420\u0430\u0437\u043C\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",labelFileLoading:"\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435",labelFileLoadError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0438",labelFileProcessing:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelFileProcessingComplete:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430",labelFileProcessingAborted:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430",labelFileProcessingError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435",labelFileProcessingRevertError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0435",labelFileRemoveError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438",labelTapToCancel:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B",labelTapToRetry:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelTapToUndo:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRemoveItem:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",labelButtonAbortItemLoad:"\u041F\u0440\u0435\u043A\u0440\u0430\u0449\u0435\u043D\u043E",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonAbortItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430",labelButtonUndoItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonProcessItem:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0440\u0435\u0432\u044B\u0448\u0435\u043D \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelFileTypeNotAllowed:"\u0424\u0430\u0439\u043B \u043D\u0435\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430",fileValidateTypeLabelExpectedTypes:"\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F {allButLastType} \u0438\u043B\u0438 {lastType}",imageValidateSizeLabelFormatError:"\u0422\u0438\u043F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043D\u0438\u0437\u043A\u043E\u0435",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0432\u044B\u0441\u043E\u043A\u043E\u0435",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {maxResolution}"};var Yl={labelIdle:'Drag och sl\xE4pp dina filer eller Bl\xE4ddra ',labelInvalidField:"F\xE4ltet inneh\xE5ller felaktiga filer",labelFileWaitingForSize:"V\xE4ntar p\xE5 storlek",labelFileSizeNotAvailable:"Storleken finns inte tillg\xE4nglig",labelFileLoading:"Laddar",labelFileLoadError:"Fel under laddning",labelFileProcessing:"Laddar upp",labelFileProcessingComplete:"Uppladdning klar",labelFileProcessingAborted:"Uppladdning avbruten",labelFileProcessingError:"Fel under uppladdning",labelFileProcessingRevertError:"Fel under \xE5terst\xE4llning",labelFileRemoveError:"Fel under borttagning",labelTapToCancel:"tryck f\xF6r att avbryta",labelTapToRetry:"tryck f\xF6r att f\xF6rs\xF6ka igen",labelTapToUndo:"tryck f\xF6r att \xE5ngra",labelButtonRemoveItem:"Tabort",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"F\xF6rs\xF6k igen",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"\xC5ngra",labelButtonRetryItemProcessing:"F\xF6rs\xF6k igen",labelButtonProcessItem:"Ladda upp",labelMaxFileSizeExceeded:"Filen \xE4r f\xF6r stor",labelMaxFileSize:"St\xF6rsta till\xE5tna filstorlek \xE4r {filesize}",labelMaxTotalFileSizeExceeded:"Maximal uppladdningsstorlek uppn\xE5d",labelMaxTotalFileSize:"Maximal uppladdningsstorlek \xE4r {filesize}",labelFileTypeNotAllowed:"Felaktig filtyp",fileValidateTypeLabelExpectedTypes:"Godk\xE4nda filtyper {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildtypen saknar st\xF6d",imageValidateSizeLabelImageSizeTooSmall:"Bilden \xE4r f\xF6r liten",imageValidateSizeLabelImageSizeTooBig:"Bilden \xE4r f\xF6r stor",imageValidateSizeLabelExpectedMinSize:"Minimal storlek \xE4r {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximal storlek \xE4r {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Uppl\xF6sningen \xE4r f\xF6r l\xE5g",imageValidateSizeLabelImageResolutionTooHigh:"Uppl\xF6sningen \xE4r f\xF6r h\xF6g",imageValidateSizeLabelExpectedMinResolution:"Minsta till\xE5tna uppl\xF6sning \xE4r {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"H\xF6gsta till\xE5tna uppl\xF6sning \xE4r {maxResolution}"};var $l={labelIdle:'Dosyan\u0131z\u0131 S\xFCr\xFCkleyin & B\u0131rak\u0131n ya da Se\xE7in ',labelInvalidField:"Alan ge\xE7ersiz dosyalar i\xE7eriyor",labelFileWaitingForSize:"Boyut hesaplan\u0131yor",labelFileSizeNotAvailable:"Boyut mevcut de\u011Fil",labelFileLoading:"Y\xFCkleniyor",labelFileLoadError:"Y\xFCkleme s\u0131ras\u0131nda hata olu\u015Ftu",labelFileProcessing:"Y\xFCkleniyor",labelFileProcessingComplete:"Y\xFCkleme tamamland\u0131",labelFileProcessingAborted:"Y\xFCkleme iptal edildi",labelFileProcessingError:"Y\xFCklerken hata olu\u015Ftu",labelFileProcessingRevertError:"Geri \xE7ekerken hata olu\u015Ftu",labelFileRemoveError:"Kald\u0131r\u0131rken hata olu\u015Ftu",labelTapToCancel:"\u0130ptal etmek i\xE7in t\u0131klay\u0131n",labelTapToRetry:"Tekrar denemek i\xE7in t\u0131klay\u0131n",labelTapToUndo:"Geri almak i\xE7in t\u0131klay\u0131n",labelButtonRemoveItem:"Kald\u0131r",labelButtonAbortItemLoad:"\u0130ptal Et",labelButtonRetryItemLoad:"Tekrar dene",labelButtonAbortItemProcessing:"\u0130ptal et",labelButtonUndoItemProcessing:"Geri Al",labelButtonRetryItemProcessing:"Tekrar dene",labelButtonProcessItem:"Y\xFCkle",labelMaxFileSizeExceeded:"Dosya \xE7ok b\xFCy\xFCk",labelMaxFileSize:"En fazla dosya boyutu: {filesize}",labelMaxTotalFileSizeExceeded:"Maximum boyut a\u015F\u0131ld\u0131",labelMaxTotalFileSize:"Maximum dosya boyutu :{filesize}",labelFileTypeNotAllowed:"Ge\xE7ersiz dosya tipi",fileValidateTypeLabelExpectedTypes:"\u015Eu {allButLastType} ya da \u015Fu dosya olmas\u0131 gerekir: {lastType}",imageValidateSizeLabelFormatError:"Resim tipi desteklenmiyor",imageValidateSizeLabelImageSizeTooSmall:"Resim \xE7ok k\xFC\xE7\xFCk",imageValidateSizeLabelImageSizeTooBig:"Resim \xE7ok b\xFCy\xFCk",imageValidateSizeLabelExpectedMinSize:"Minimum boyut {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum boyut {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok d\xFC\u015F\xFCk",imageValidateSizeLabelImageResolutionTooHigh:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok y\xFCksek",imageValidateSizeLabelExpectedMinResolution:"Minimum \xE7\xF6z\xFCn\xFCrl\xFCk {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum \xE7\xF6z\xFCn\xFCrl\xFCk {maxResolution}"};var Xl={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0430\u0439\u043B\u0438 \u0430\u0431\u043E \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044C ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0456 \u0444\u0430\u0439\u043B\u0438",labelFileWaitingForSize:"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440",labelFileSizeNotAvailable:"\u0420\u043E\u0437\u043C\u0456\u0440 \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439",labelFileLoading:"\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F",labelFileLoadError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u0456",labelFileProcessing:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelFileProcessingComplete:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",labelFileProcessingAborted:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0441\u043A\u0430\u0441\u043E\u0432\u0430\u043D\u043E",labelFileProcessingError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u0456",labelFileProcessingRevertError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0456",labelFileRemoveError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u0456",labelTapToCancel:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelTapToRetry:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelTapToUndo:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u0432\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRemoveItem:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438",labelButtonAbortItemLoad:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonAbortItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonUndoItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonProcessItem:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0438\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 \u0444\u0430\u0439\u043B\u0443: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0435\u0440\u0435\u0432\u0438\u0449\u0435\u043D\u043E \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {filesize}",labelFileTypeNotAllowed:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",fileValidateTypeLabelExpectedTypes:"\u041E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F {allButLastType} \u0430\u0431\u043E {lastType}",imageValidateSizeLabelFormatError:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0456",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0456",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {maxResolution}"};var Ql={labelIdle:'K\xE9o th\u1EA3 t\u1EC7p c\u1EE7a b\u1EA1n ho\u1EB7c T\xECm ki\u1EBFm ',labelInvalidField:"Tr\u01B0\u1EDDng ch\u1EE9a c\xE1c t\u1EC7p kh\xF4ng h\u1EE3p l\u1EC7",labelFileWaitingForSize:"\u0110ang ch\u1EDD k\xEDch th\u01B0\u1EDBc",labelFileSizeNotAvailable:"K\xEDch th\u01B0\u1EDBc kh\xF4ng c\xF3 s\u1EB5n",labelFileLoading:"\u0110ang t\u1EA3i",labelFileLoadError:"L\u1ED7i khi t\u1EA3i",labelFileProcessing:"\u0110ang t\u1EA3i l\xEAn",labelFileProcessingComplete:"T\u1EA3i l\xEAn th\xE0nh c\xF4ng",labelFileProcessingAborted:"\u0110\xE3 hu\u1EF7 t\u1EA3i l\xEAn",labelFileProcessingError:"L\u1ED7i khi t\u1EA3i l\xEAn",labelFileProcessingRevertError:"L\u1ED7i khi ho\xE0n nguy\xEAn",labelFileRemoveError:"L\u1ED7i khi x\xF3a",labelTapToCancel:"nh\u1EA5n \u0111\u1EC3 h\u1EE7y",labelTapToRetry:"nh\u1EA5n \u0111\u1EC3 th\u1EED l\u1EA1i",labelTapToUndo:"nh\u1EA5n \u0111\u1EC3 ho\xE0n t\xE1c",labelButtonRemoveItem:"Xo\xE1",labelButtonAbortItemLoad:"Hu\u1EF7 b\u1ECF",labelButtonRetryItemLoad:"Th\u1EED l\u1EA1i",labelButtonAbortItemProcessing:"H\u1EE7y b\u1ECF",labelButtonUndoItemProcessing:"Ho\xE0n t\xE1c",labelButtonRetryItemProcessing:"Th\u1EED l\u1EA1i",labelButtonProcessItem:"T\u1EA3i l\xEAn",labelMaxFileSizeExceeded:"T\u1EADp tin qu\xE1 l\u1EDBn",labelMaxFileSize:"K\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelMaxTotalFileSizeExceeded:"\u0110\xE3 v\u01B0\u1EE3t qu\xE1 t\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a",labelMaxTotalFileSize:"T\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelFileTypeNotAllowed:"T\u1EC7p thu\u1ED9c lo\u1EA1i kh\xF4ng h\u1EE3p l\u1EC7",fileValidateTypeLabelExpectedTypes:"Ki\u1EC3u t\u1EC7p h\u1EE3p l\u1EC7 l\xE0 {allButLastType} ho\u1EB7c {lastType}",imageValidateSizeLabelFormatError:"Lo\u1EA1i h\xECnh \u1EA3nh kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3",imageValidateSizeLabelImageSizeTooSmall:"H\xECnh \u1EA3nh qu\xE1 nh\u1ECF",imageValidateSizeLabelImageSizeTooBig:"H\xECnh \u1EA3nh qu\xE1 l\u1EDBn",imageValidateSizeLabelExpectedMinSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i thi\u1EC3u l\xE0 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 th\u1EA5p",imageValidateSizeLabelImageResolutionTooHigh:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 cao",imageValidateSizeLabelExpectedMinResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i thi\u1EC3u l\xE0 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i \u0111a l\xE0 {maxResolution}"};var Zl={labelIdle:'\u62D6\u653E\u6587\u4EF6\uFF0C\u6216\u8005 \u6D4F\u89C8 ',labelInvalidField:"\u5B57\u6BB5\u5305\u542B\u65E0\u6548\u6587\u4EF6",labelFileWaitingForSize:"\u8BA1\u7B97\u6587\u4EF6\u5927\u5C0F",labelFileSizeNotAvailable:"\u6587\u4EF6\u5927\u5C0F\u4E0D\u53EF\u7528",labelFileLoading:"\u52A0\u8F7D",labelFileLoadError:"\u52A0\u8F7D\u9519\u8BEF",labelFileProcessing:"\u4E0A\u4F20",labelFileProcessingComplete:"\u5DF2\u4E0A\u4F20",labelFileProcessingAborted:"\u4E0A\u4F20\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u4F20\u51FA\u9519",labelFileProcessingRevertError:"\u8FD8\u539F\u51FA\u9519",labelFileRemoveError:"\u5220\u9664\u51FA\u9519",labelTapToCancel:"\u70B9\u51FB\u53D6\u6D88",labelTapToRetry:"\u70B9\u51FB\u91CD\u8BD5",labelTapToUndo:"\u70B9\u51FB\u64A4\u6D88",labelButtonRemoveItem:"\u5220\u9664",labelButtonAbortItemLoad:"\u4E2D\u6B62",labelButtonRetryItemLoad:"\u91CD\u8BD5",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u64A4\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8BD5",labelButtonProcessItem:"\u4E0A\u4F20",labelMaxFileSizeExceeded:"\u6587\u4EF6\u592A\u5927",labelMaxFileSize:"\u6700\u5927\u503C: {filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u8FC7\u6700\u5927\u6587\u4EF6\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u6587\u4EF6\u7C7B\u578B\u65E0\u6548",fileValidateTypeLabelExpectedTypes:"\u5E94\u4E3A {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u56FE\u50CF\u7C7B\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u56FE\u50CF\u592A\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u56FE\u50CF\u592A\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u503C: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u503C: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u5206\u8FA8\u7387\u592A\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u5206\u8FA8\u7387\u592A\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u5C0F\u5206\u8FA8\u7387\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u5927\u5206\u8FA8\u7387\uFF1A{maxResolution}"};var Kl={labelIdle:'\u62D6\u653E\u6A94\u6848\uFF0C\u6216\u8005 \u700F\u89BD ',labelInvalidField:"\u4E0D\u652F\u63F4\u6B64\u6A94\u6848",labelFileWaitingForSize:"\u6B63\u5728\u8A08\u7B97\u6A94\u6848\u5927\u5C0F",labelFileSizeNotAvailable:"\u6A94\u6848\u5927\u5C0F\u4E0D\u7B26",labelFileLoading:"\u8B80\u53D6\u4E2D",labelFileLoadError:"\u8B80\u53D6\u932F\u8AA4",labelFileProcessing:"\u4E0A\u50B3",labelFileProcessingComplete:"\u5DF2\u4E0A\u50B3",labelFileProcessingAborted:"\u4E0A\u50B3\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u50B3\u767C\u751F\u932F\u8AA4",labelFileProcessingRevertError:"\u9084\u539F\u932F\u8AA4",labelFileRemoveError:"\u522A\u9664\u932F\u8AA4",labelTapToCancel:"\u9EDE\u64CA\u53D6\u6D88",labelTapToRetry:"\u9EDE\u64CA\u91CD\u8A66",labelTapToUndo:"\u9EDE\u64CA\u9084\u539F",labelButtonRemoveItem:"\u522A\u9664",labelButtonAbortItemLoad:"\u505C\u6B62",labelButtonRetryItemLoad:"\u91CD\u8A66",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u53D6\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8A66",labelButtonProcessItem:"\u4E0A\u50B3",labelMaxFileSizeExceeded:"\u6A94\u6848\u904E\u5927",labelMaxFileSize:"\u6700\u5927\u503C\uFF1A{filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u904E\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u4E0D\u652F\u63F4\u6B64\u985E\u578B\u6A94\u6848",fileValidateTypeLabelExpectedTypes:"\u61C9\u70BA {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u6B64\u985E\u5716\u7247\u985E\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u5716\u7247\u904E\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u5716\u7247\u904E\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u5C3A\u5BF8\uFF1A{minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u5C3A\u5BF8\uFF1A{maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u89E3\u6790\u5EA6\u904E\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u89E3\u6790\u5EA6\u904E\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u4F4E\u89E3\u6790\u5EA6\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u9AD8\u89E3\u6790\u5EA6\uFF1A{maxResolution}"};ve(Ho);ve(qo);ve(Xo);ve(Zo);ve(tl);ve(ml);ve(fl);ve(wl);ve(Oa);window.FilePond=oa;function ff({acceptedFileTypes:e,imageEditorEmptyFillColor:t,imageEditorMode:i,imageEditorViewportHeight:a,imageEditorViewportWidth:n,deleteUploadedFileUsing:o,isDeletable:l,isDisabled:r,getUploadedFilesUsing:s,imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeMode:d,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeUpscale:f,isAvatar:g,hasImageEditor:h,hasCircleCropper:I,canEditSvgs:E,isSvgEditingConfirmed:T,confirmSvgEditingMessage:v,disabledSvgEditingMessage:y,isDownloadable:b,isMultiple:w,isOpenable:x,isPreviewable:_,isReorderable:P,itemPanelAspectRatio:O,loadingIndicatorPosition:M,locale:N,maxFiles:S,maxSize:D,minSize:R,maxParallelUploads:L,panelAspectRatio:z,panelLayout:F,placeholder:G,removeUploadedFileButtonPosition:C,removeUploadedFileUsing:Y,reorderUploadedFilesUsing:Q,shouldAppendFiles:$,shouldOrientImageFromExif:pe,shouldTransformImage:k,state:H,uploadButtonPosition:q,uploadingMessage:le,uploadProgressIndicatorPosition:ee,uploadUsing:dt}){return{fileKeyIndex:{},pond:null,shouldUpdateState:!0,state:H,lastState:null,error:null,uploadedFileIndex:{},isEditorOpen:!1,editingFile:{},currentRatio:"",editor:{},init:async function(){Ft(Jl[N]??Jl.en),this.pond=ft(this.$refs.input,{acceptedFileTypes:e,allowImageExifOrientation:pe,allowPaste:!1,allowRemove:l,allowReorder:P,allowImagePreview:_,allowVideoPreview:_,allowAudioPreview:_,allowImageTransform:k,credits:!1,files:await this.getFiles(),imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeMode:d,imageResizeUpscale:f,imageTransformOutputStripImageHead:!1,itemInsertLocation:$?"after":"before",...G&&{labelIdle:G},maxFiles:S,maxFileSize:D,minFileSize:R,...L&&{maxParallelUploads:L},styleButtonProcessItemPosition:q,styleButtonRemoveItemPosition:C,styleItemPanelAspectRatio:O,styleLoadIndicatorPosition:M,stylePanelAspectRatio:z,stylePanelLayout:F,styleProgressIndicatorPosition:ee,server:{load:async(B,W)=>{let Z=await(await fetch(B,{cache:"no-store"})).blob();W(Z)},process:(B,W,X,Z,Ve,Ge)=>{this.shouldUpdateState=!1;let Qt=("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,Zt=>(Zt^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Zt/4).toString(16));dt(Qt,W,Zt=>{this.shouldUpdateState=!0,Z(Zt)},Ve,Ge)},remove:async(B,W)=>{let X=this.uploadedFileIndex[B]??null;X&&(await o(X),W())},revert:async(B,W)=>{await Y(B),W()}},allowImageEdit:h,imageEditEditor:{open:B=>this.loadEditor(B),onconfirm:()=>{},oncancel:()=>this.closeEditor(),onclose:()=>this.closeEditor()},fileValidateTypeDetectType:(B,W)=>new Promise((X,Z)=>{let Ve=W||Uo.getType(B.name.split(".").pop());Ve?X(Ve):Z()})}),this.$watch("state",async()=>{if(this.pond&&this.shouldUpdateState&&this.state!==void 0){if(this.state!==null&&Object.values(this.state).filter(B=>B.startsWith("livewire-file:")).length){this.lastState=null;return}JSON.stringify(this.state)!==this.lastState&&(this.lastState=JSON.stringify(this.state),this.pond.files=await this.getFiles())}}),this.pond.on("reorderfiles",async B=>{let W=B.map(X=>X.source instanceof File?X.serverId:this.uploadedFileIndex[X.source]??null).filter(X=>X);await Q($?W:W.reverse())}),this.pond.on("initfile",async B=>{b&&(g||this.insertDownloadLink(B))}),this.pond.on("initfile",async B=>{x&&(g||this.insertOpenLink(B))}),this.pond.on("addfilestart",async B=>{B.status===bt.PROCESSING_QUEUED&&this.dispatchFormEvent("form-processing-started",{message:le})});let V=async()=>{this.pond.getFiles().filter(B=>B.status===bt.PROCESSING||B.status===bt.PROCESSING_QUEUED).length||this.dispatchFormEvent("form-processing-finished")};this.pond.on("processfile",V),this.pond.on("processfileabort",V),this.pond.on("processfilerevert",V),F==="compact circle"&&(this.pond.on("error",B=>{this.error=`${B.main}: ${B.sub}`.replace("Expects or","Expects")}),this.pond.on("removefile",()=>this.error=null))},destroy:function(){this.destroyEditor(),gt(this.$refs.input),this.pond=null},dispatchFormEvent:function(V,B={}){this.$el.closest("form")?.dispatchEvent(new CustomEvent(V,{composed:!0,cancelable:!0,detail:B}))},getUploadedFiles:async function(){let V=await s();this.fileKeyIndex=V??{},this.uploadedFileIndex=Object.entries(this.fileKeyIndex).filter(([B,W])=>W?.url).reduce((B,[W,X])=>(B[X.url]=W,B),{})},getFiles:async function(){await this.getUploadedFiles();let V=[];for(let B of Object.values(this.fileKeyIndex))B&&V.push({source:B.url,options:{type:"local",...!B.type||_&&(/^audio/.test(B.type)||/^image/.test(B.type)||/^video/.test(B.type))?{}:{file:{name:B.name,size:B.size,type:B.type}}}});return $?V:V.reverse()},insertDownloadLink:function(V){if(V.origin!==Ct.LOCAL)return;let B=this.getDownloadLink(V);B&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(B)},insertOpenLink:function(V){if(V.origin!==Ct.LOCAL)return;let B=this.getOpenLink(V);B&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(B)},getDownloadLink:function(V){let B=V.source;if(!B)return;let W=document.createElement("a");return W.className="filepond--download-icon",W.href=B,W.download=V.file.name,W},getOpenLink:function(V){let B=V.source;if(!B)return;let W=document.createElement("a");return W.className="filepond--open-icon",W.href=B,W.target="_blank",W},initEditor:function(){r||h&&(this.editor=new ya(this.$refs.editor,{aspectRatio:n/a,autoCropArea:1,center:!0,crop:V=>{this.$refs.xPositionInput.value=Math.round(V.detail.x),this.$refs.yPositionInput.value=Math.round(V.detail.y),this.$refs.heightInput.value=Math.round(V.detail.height),this.$refs.widthInput.value=Math.round(V.detail.width),this.$refs.rotationInput.value=V.detail.rotate},cropBoxResizable:!0,guides:!0,highlight:!0,responsive:!0,toggleDragModeOnDblclick:!0,viewMode:i,wheelZoomRatio:.02}))},closeEditor:function(){this.editingFile={},this.isEditorOpen=!1,this.destroyEditor()},fixImageDimensions:function(V,B){if(V.type!=="image/svg+xml")return B(V);let W=new FileReader;W.onload=X=>{let Z=new DOMParser().parseFromString(X.target.result,"image/svg+xml")?.querySelector("svg");if(!Z)return B(V);let Ve=["viewBox","ViewBox","viewbox"].find(Qt=>Z.hasAttribute(Qt));if(!Ve)return B(V);let Ge=Z.getAttribute(Ve).split(" ");return!Ge||Ge.length!==4?B(V):(Z.setAttribute("width",parseFloat(Ge[2])+"pt"),Z.setAttribute("height",parseFloat(Ge[3])+"pt"),B(new File([new Blob([new XMLSerializer().serializeToString(Z)],{type:"image/svg+xml"})],V.name,{type:"image/svg+xml",_relativePath:""})))},W.readAsText(V)},loadEditor:function(V){if(r||!h||!V)return;let B=V.type==="image/svg+xml";if(!E&&B){alert(y);return}T&&B&&!confirm(v)||this.fixImageDimensions(V,W=>{this.editingFile=W,this.initEditor();let X=new FileReader;X.onload=Z=>{this.isEditorOpen=!0,setTimeout(()=>this.editor.replace(Z.target.result),200)},X.readAsDataURL(V)})},getRoundedCanvas:function(V){let B=V.width,W=V.height,X=document.createElement("canvas");X.width=B,X.height=W;let Z=X.getContext("2d");return Z.imageSmoothingEnabled=!0,Z.drawImage(V,0,0,B,W),Z.globalCompositeOperation="destination-in",Z.beginPath(),Z.ellipse(B/2,W/2,B/2,W/2,0,0,2*Math.PI),Z.fill(),X},saveEditor:function(){if(r||!h)return;let V=this.editor.getCroppedCanvas({fillColor:t??"transparent",height:m,imageSmoothingEnabled:!0,imageSmoothingQuality:"high",width:u});I&&(V=this.getRoundedCanvas(V)),V.toBlob(B=>{w&&this.pond.removeFile(this.pond.getFiles().find(W=>W.filename===this.editingFile.name)?.id,{revert:!0}),this.$nextTick(()=>{this.shouldUpdateState=!1;let W=this.editingFile.name.slice(0,this.editingFile.name.lastIndexOf(".")),X=this.editingFile.name.split(".").pop();X==="svg"&&(X="png");let Z=/-v(\d+)/;Z.test(W)?W=W.replace(Z,(Ve,Ge)=>`-v${Number(Ge)+1}`):W+="-v1",this.pond.addFile(new File([B],`${W}.${X}`,{type:this.editingFile.type==="image/svg+xml"||I?"image/png":this.editingFile.type,lastModified:new Date().getTime()})).then(()=>{this.closeEditor()}).catch(()=>{this.closeEditor()})})},I?"image/png":this.editingFile.type)},destroyEditor:function(){this.editor&&typeof this.editor.destroy=="function"&&this.editor.destroy(),this.editor=null}}}var Jl={ar:Sl,ca:Ll,ckb:Al,cs:Ml,da:Ol,de:Pl,en:Dl,es:Fl,fa:zl,fi:Cl,fr:Nl,hu:Bl,id:kl,it:Vl,km:Gl,nl:Ul,no:Wl,pl:Hl,pt_BR:wi,pt_PT:wi,ro:jl,ru:ql,sv:Yl,tr:$l,uk:Xl,vi:Ql,zh_CN:Zl,zh_TW:Kl};export{ff as default}; +/*! Bundled license information: + +filepond/dist/filepond.esm.js: + (*! + * FilePond 4.32.7 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +cropperjs/dist/cropper.esm.js: + (*! + * Cropper.js v1.6.2 + * https://fengyuanchen.github.io/cropperjs + * + * Copyright 2015-present Chen Fengyuan + * Released under the MIT license + * + * Date: 2024-04-21T07:43:05.335Z + *) + +filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.esm.js: + (*! + * FilePondPluginFileValidateSize 2.2.8 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.esm.js: + (*! + * FilePondPluginFileValidateType 1.2.9 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-crop/dist/filepond-plugin-image-crop.esm.js: + (*! + * FilePondPluginImageCrop 2.0.6 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-edit/dist/filepond-plugin-image-edit.esm.js: + (*! + * FilePondPluginImageEdit 1.6.3 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-exif-orientation/dist/filepond-plugin-image-exif-orientation.esm.js: + (*! + * FilePondPluginImageExifOrientation 1.0.11 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-preview/dist/filepond-plugin-image-preview.esm.js: + (*! + * FilePondPluginImagePreview 4.6.12 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-resize/dist/filepond-plugin-image-resize.esm.js: + (*! + * FilePondPluginImageResize 2.0.10 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-transform/dist/filepond-plugin-image-transform.esm.js: + (*! + * FilePondPluginImageTransform 3.8.7 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-media-preview/dist/filepond-plugin-media-preview.esm.js: + (*! + * FilePondPluginMediaPreview 1.0.11 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit undefined for details. + *) +*/ diff --git a/public/js/filament/forms/components/key-value.js b/public/js/filament/forms/components/key-value.js new file mode 100644 index 000000000..9c847c018 --- /dev/null +++ b/public/js/filament/forms/components/key-value.js @@ -0,0 +1 @@ +function r({state:o}){return{state:o,rows:[],shouldUpdateRows:!0,init:function(){this.updateRows(),this.rows.length<=0?this.rows.push({key:"",value:""}):this.updateState(),this.$watch("state",(t,e)=>{let s=i=>i===null?0:Array.isArray(i)?i.length:typeof i!="object"?0:Object.keys(i).length;s(t)===0&&s(e)===0||this.updateRows()})},addRow:function(){this.rows.push({key:"",value:""}),this.updateState()},deleteRow:function(t){this.rows.splice(t,1),this.rows.length<=0&&this.addRow(),this.updateState()},reorderRows:function(t){let e=Alpine.raw(this.rows);this.rows=[];let s=e.splice(t.oldIndex,1)[0];e.splice(t.newIndex,0,s),this.$nextTick(()=>{this.rows=e,this.updateState()})},updateRows:function(){if(!this.shouldUpdateRows){this.shouldUpdateRows=!0;return}let t=[];for(let[e,s]of Object.entries(this.state??{}))t.push({key:e,value:s});this.rows=t},updateState:function(){let t={};this.rows.forEach(e=>{e.key===""||e.key===null||(t[e.key]=e.value)}),this.shouldUpdateRows=!1,this.state=t}}}export{r as default}; diff --git a/public/js/filament/forms/components/markdown-editor.js b/public/js/filament/forms/components/markdown-editor.js new file mode 100644 index 000000000..c5861840b --- /dev/null +++ b/public/js/filament/forms/components/markdown-editor.js @@ -0,0 +1,51 @@ +var ss=Object.defineProperty;var Sd=Object.getOwnPropertyDescriptor;var Td=Object.getOwnPropertyNames;var Ld=Object.prototype.hasOwnProperty;var Cd=(o,p)=>()=>(o&&(p=o(o=0)),p);var Ke=(o,p)=>()=>(p||o((p={exports:{}}).exports,p),p.exports);var Ed=(o,p,v,C)=>{if(p&&typeof p=="object"||typeof p=="function")for(let b of Td(p))!Ld.call(o,b)&&b!==v&&ss(o,b,{get:()=>p[b],enumerable:!(C=Sd(p,b))||C.enumerable});return o};var zd=o=>Ed(ss({},"__esModule",{value:!0}),o);var We=Ke((Yo,Qo)=>{(function(o,p){typeof Yo=="object"&&typeof Qo<"u"?Qo.exports=p():typeof define=="function"&&define.amd?define(p):(o=o||self,o.CodeMirror=p())})(Yo,function(){"use strict";var o=navigator.userAgent,p=navigator.platform,v=/gecko\/\d/i.test(o),C=/MSIE \d/.test(o),b=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(o),S=/Edge\/(\d+)/.exec(o),s=C||b||S,h=s&&(C?document.documentMode||6:+(S||b)[1]),g=!S&&/WebKit\//.test(o),T=g&&/Qt\/\d+\.\d+/.test(o),x=!S&&/Chrome\/(\d+)/.exec(o),c=x&&+x[1],d=/Opera\//.test(o),w=/Apple Computer/.test(navigator.vendor),E=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(o),z=/PhantomJS/.test(o),y=w&&(/Mobile\/\w+/.test(o)||navigator.maxTouchPoints>2),R=/Android/.test(o),M=y||R||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(o),H=y||/Mac/.test(p),Z=/\bCrOS\b/.test(o),ee=/win/i.test(p),re=d&&o.match(/Version\/(\d*\.\d*)/);re&&(re=Number(re[1])),re&&re>=15&&(d=!1,g=!0);var N=H&&(T||d&&(re==null||re<12.11)),F=v||s&&h>=9;function D(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var Q=function(e,t){var n=e.className,r=D(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function j(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function V(e,t){return j(e).appendChild(t)}function _(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),typeof t=="string")i.appendChild(document.createTextNode(t));else if(t)for(var a=0;a=t)return l+(t-a);l+=u-a,l+=n-l%n,a=u+1}}var qe=function(){this.id=null,this.f=null,this.time=0,this.handler=Ee(this.onTimeout,this)};qe.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},qe.prototype.set=function(e,t){this.f=t;var n=+new Date+e;(!this.id||n=t)return r+Math.min(l,t-i);if(i+=a-r,i+=n-i%n,r=a+1,i>=t)return r}}var U=[""];function G(e){for(;U.length<=e;)U.push(ce(U)+" ");return U[e]}function ce(e){return e[e.length-1]}function Be(e,t){for(var n=[],r=0;r"\x80"&&(e.toUpperCase()!=e.toLowerCase()||Ue.test(e))}function Me(e,t){return t?t.source.indexOf("\\w")>-1&&we(e)?!0:t.test(e):we(e)}function Le(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var $=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function W(e){return e.charCodeAt(0)>=768&&$.test(e)}function se(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,a=r<0?Math.ceil(i):Math.floor(i);if(a==t)return e(a)?t:n;e(a)?n=a:t=a+r}}function nt(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var i=!1,a=0;at||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),l.level==1?"rtl":"ltr",a),i=!0)}i||r(t,n,"ltr")}var dt=null;function Pt(e,t,n){var r;dt=null;for(var i=0;it)return i;a.to==t&&(a.from!=a.to&&n=="before"?r=i:dt=i),a.from==t&&(a.from!=a.to&&n!="before"?r=i:dt=i)}return r??dt}var It=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(m){return m<=247?e.charAt(m):1424<=m&&m<=1524?"R":1536<=m&&m<=1785?t.charAt(m-1536):1774<=m&&m<=2220?"r":8192<=m&&m<=8203?"w":m==8204?"b":"L"}var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,i=/[stwN]/,a=/[LRr]/,l=/[Lb1n]/,u=/[1n]/;function f(m,A,P){this.level=m,this.from=A,this.to=P}return function(m,A){var P=A=="ltr"?"L":"R";if(m.length==0||A=="ltr"&&!r.test(m))return!1;for(var J=m.length,Y=[],ie=0;ie-1&&(r[t]=i.slice(0,a).concat(i.slice(a+1)))}}}function it(e,t){var n=nr(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function Wt(e){e.prototype.on=function(t,n){Fe(this,t,n)},e.prototype.off=function(t,n){_t(this,t,n)}}function kt(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Hr(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ct(e){return e.defaultPrevented!=null?e.defaultPrevented:e.returnValue==!1}function dr(e){kt(e),Hr(e)}function yn(e){return e.target||e.srcElement}function Ut(e){var t=e.which;return t==null&&(e.button&1?t=1:e.button&2?t=3:e.button&4&&(t=2)),H&&e.ctrlKey&&t==1&&(t=3),t}var eo=function(){if(s&&h<9)return!1;var e=_("div");return"draggable"in e||"dragDrop"in e}(),Br;function ei(e){if(Br==null){var t=_("span","\u200B");V(e,_("span",[t,document.createTextNode("x")])),e.firstChild.offsetHeight!=0&&(Br=t.offsetWidth<=1&&t.offsetHeight>2&&!(s&&h<8))}var n=Br?_("span","\u200B"):_("span","\xA0",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}var xn;function pr(e){if(xn!=null)return xn;var t=V(e,document.createTextNode("A\u062EA")),n=X(t,0,1).getBoundingClientRect(),r=X(t,1,2).getBoundingClientRect();return j(e),!n||n.left==n.right?!1:xn=r.right-n.right<3}var Bt=` + +b`.split(/\n/).length!=3?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf(` +`,t);i==-1&&(i=e.length);var a=e.slice(t,e.charAt(i-1)=="\r"?i-1:i),l=a.indexOf("\r");l!=-1?(n.push(a.slice(0,l)),t+=l+1):(n.push(a),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},hr=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch{return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch{}return!t||t.parentElement()!=e?!1:t.compareEndPoints("StartToEnd",t)!=0},ti=function(){var e=_("div");return"oncopy"in e?!0:(e.setAttribute("oncopy","return;"),typeof e.oncopy=="function")}(),$t=null;function to(e){if($t!=null)return $t;var t=V(e,_("span","x")),n=t.getBoundingClientRect(),r=X(t,0,1).getBoundingClientRect();return $t=Math.abs(n.left-r.left)>1}var Wr={},Kt={};function Gt(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Wr[e]=t}function Cr(e,t){Kt[e]=t}function Ur(e){if(typeof e=="string"&&Kt.hasOwnProperty(e))e=Kt[e];else if(e&&typeof e.name=="string"&&Kt.hasOwnProperty(e.name)){var t=Kt[e.name];typeof t=="string"&&(t={name:t}),e=oe(t,e),e.name=t.name}else{if(typeof e=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ur("application/xml");if(typeof e=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ur("application/json")}return typeof e=="string"?{name:e}:e||{name:"null"}}function $r(e,t){t=Ur(t);var n=Wr[t.name];if(!n)return $r(e,"text/plain");var r=n(e,t);if(gr.hasOwnProperty(t.name)){var i=gr[t.name];for(var a in i)i.hasOwnProperty(a)&&(r.hasOwnProperty(a)&&(r["_"+a]=r[a]),r[a]=i[a])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}var gr={};function Kr(e,t){var n=gr.hasOwnProperty(e)?gr[e]:gr[e]={};ge(t,n)}function Vt(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function _n(e,t){for(var n;e.innerMode&&(n=e.innerMode(t),!(!n||n.mode==e));)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Gr(e,t,n){return e.startState?e.startState(t,n):!0}var at=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};at.prototype.eol=function(){return this.pos>=this.string.length},at.prototype.sol=function(){return this.pos==this.lineStart},at.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},at.prototype.next=function(){if(this.post},at.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},at.prototype.skipToEnd=function(){this.pos=this.string.length},at.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},at.prototype.backUp=function(e){this.pos-=e},at.prototype.column=function(){return this.lastColumnPos0?null:(a&&t!==!1&&(this.pos+=a[0].length),a)}},at.prototype.current=function(){return this.string.slice(this.start,this.pos)},at.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},at.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},at.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};function Ae(e,t){if(t-=e.first,t<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],a=i.chunkSize();if(t=e.first&&tn?ne(n,Ae(e,n).text.length):Sc(t,Ae(e,t.line).text.length)}function Sc(e,t){var n=e.ch;return n==null||n>t?ne(e.line,t):n<0?ne(e.line,0):e}function ca(e,t){for(var n=[],r=0;rthis.maxLookAhead&&(this.maxLookAhead=e),t},Jt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Jt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Jt.fromSaved=function(e,t,n){return t instanceof ri?new Jt(e,Vt(e.mode,t.state),n,t.lookAhead):new Jt(e,Vt(e.mode,t),n)},Jt.prototype.save=function(e){var t=e!==!1?Vt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ri(t,this.maxLookAhead):t};function fa(e,t,n,r){var i=[e.state.modeGen],a={};va(e,t.text,e.doc.mode,n,function(m,A){return i.push(m,A)},a,r);for(var l=n.state,u=function(m){n.baseTokens=i;var A=e.state.overlays[m],P=1,J=0;n.state=!0,va(e,t.text,A.mode,n,function(Y,ie){for(var ue=P;JY&&i.splice(P,1,Y,i[P+1],me),P+=2,J=Math.min(Y,me)}if(ie)if(A.opaque)i.splice(ue,P-ue,Y,"overlay "+ie),P=ue+2;else for(;uee.options.maxHighlightLength&&Vt(e.doc.mode,r.state),a=fa(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=a.styles,a.classes?t.styleClasses=a.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function wn(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new Jt(r,!0,t);var a=Tc(e,t,n),l=a>r.first&&Ae(r,a-1).stateAfter,u=l?Jt.fromSaved(r,l,a):new Jt(r,Gr(r.mode),a);return r.iter(a,t,function(f){ro(e,f.text,u);var m=u.line;f.stateAfter=m==t-1||m%5==0||m>=i.viewFrom&&mt.start)return a}throw new Error("Mode "+e.name+" failed to advance stream.")}var ha=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function ga(e,t,n,r){var i=e.doc,a=i.mode,l;t=Re(i,t);var u=Ae(i,t.line),f=wn(e,t.line,n),m=new at(u.text,e.options.tabSize,f),A;for(r&&(A=[]);(r||m.pose.options.maxHighlightLength?(u=!1,l&&ro(e,t,r,A.pos),A.pos=t.length,P=null):P=ma(no(n,A,r.state,J),a),J){var Y=J[0].name;Y&&(P="m-"+(P?Y+" "+P:Y))}if(!u||m!=P){for(;fl;--u){if(u<=a.first)return a.first;var f=Ae(a,u-1),m=f.stateAfter;if(m&&(!n||u+(m instanceof ri?m.lookAhead:0)<=a.modeFrontier))return u;var A=Oe(f.text,null,e.options.tabSize);(i==null||r>A)&&(i=u-1,r=A)}return i}function Lc(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=Ae(e,r).stateAfter;if(i&&(!(i instanceof ri)||r+i.lookAhead=t:a.to>t);(r||(r=[])).push(new ni(l,a.from,f?null:a.to))}}return r}function Dc(e,t,n){var r;if(e)for(var i=0;i=t:a.to>t);if(u||a.from==t&&l.type=="bookmark"&&(!n||a.marker.insertLeft)){var f=a.from==null||(l.inclusiveLeft?a.from<=t:a.from0&&u)for(var Ce=0;Ce0)){var A=[f,1],P=ye(m.from,u.from),J=ye(m.to,u.to);(P<0||!l.inclusiveLeft&&!P)&&A.push({from:m.from,to:u.from}),(J>0||!l.inclusiveRight&&!J)&&A.push({from:u.to,to:m.to}),i.splice.apply(i,A),f+=A.length-3}}return i}function xa(e){var t=e.markedSpans;if(t){for(var n=0;nt)&&(!r||oo(r,a.marker)<0)&&(r=a.marker)}return r}function Sa(e,t,n,r,i){var a=Ae(e,t),l=or&&a.markedSpans;if(l)for(var u=0;u=0&&P<=0||A<=0&&P>=0)&&(A<=0&&(f.marker.inclusiveRight&&i.inclusiveLeft?ye(m.to,n)>=0:ye(m.to,n)>0)||A>=0&&(f.marker.inclusiveRight&&i.inclusiveLeft?ye(m.from,r)<=0:ye(m.from,r)<0)))return!0}}}function Zt(e){for(var t;t=wa(e);)e=t.find(-1,!0).line;return e}function Fc(e){for(var t;t=ai(e);)e=t.find(1,!0).line;return e}function Nc(e){for(var t,n;t=ai(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function ao(e,t){var n=Ae(e,t),r=Zt(n);return n==r?t:k(r)}function Ta(e,t){if(t>e.lastLine())return t;var n=Ae(e,t),r;if(!mr(e,n))return t;for(;r=ai(n);)n=r.find(1,!0).line;return k(n)+1}function mr(e,t){var n=or&&t.markedSpans;if(n){for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=i,t.maxLine=r)})}var Xr=function(e,t,n){this.text=e,_a(this,t),this.height=n?n(this):1};Xr.prototype.lineNo=function(){return k(this)},Wt(Xr);function Oc(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),e.order!=null&&(e.order=null),xa(e),_a(e,n);var i=r?r(e):1;i!=e.height&&jt(e,i)}function Pc(e){e.parent=null,xa(e)}var jc={},Rc={};function La(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Rc:jc;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Ca(e,t){var n=K("span",null,null,g?"padding-right: .1px":null),r={pre:K("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var a=i?t.rest[i-1]:t.line,l=void 0;r.pos=0,r.addToken=Bc,pr(e.display.measure)&&(l=Pe(a,e.doc.direction))&&(r.addToken=Uc(r.addToken,l)),r.map=[];var u=t!=e.display.externalMeasured&&k(a);$c(a,r,da(e,a,u)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=xe(a.styleClasses.bgClass,r.bgClass||"")),a.styleClasses.textClass&&(r.textClass=xe(a.styleClasses.textClass,r.textClass||""))),r.map.length==0&&r.map.push(0,0,r.content.appendChild(ei(e.display.measure))),i==0?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(g){var f=r.content.lastChild;(/\bcm-tab\b/.test(f.className)||f.querySelector&&f.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return it(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=xe(r.pre.className,r.textClass||"")),r}function Hc(e){var t=_("span","\u2022","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Bc(e,t,n,r,i,a,l){if(t){var u=e.splitSpaces?Wc(t,e.trailingSpace):t,f=e.cm.state.specialChars,m=!1,A;if(!f.test(t))e.col+=t.length,A=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,A),s&&h<9&&(m=!0),e.pos+=t.length;else{A=document.createDocumentFragment();for(var P=0;;){f.lastIndex=P;var J=f.exec(t),Y=J?J.index-P:t.length-P;if(Y){var ie=document.createTextNode(u.slice(P,P+Y));s&&h<9?A.appendChild(_("span",[ie])):A.appendChild(ie),e.map.push(e.pos,e.pos+Y,ie),e.col+=Y,e.pos+=Y}if(!J)break;P+=Y+1;var ue=void 0;if(J[0]==" "){var me=e.cm.options.tabSize,ve=me-e.col%me;ue=A.appendChild(_("span",G(ve),"cm-tab")),ue.setAttribute("role","presentation"),ue.setAttribute("cm-text"," "),e.col+=ve}else J[0]=="\r"||J[0]==` +`?(ue=A.appendChild(_("span",J[0]=="\r"?"\u240D":"\u2424","cm-invalidchar")),ue.setAttribute("cm-text",J[0]),e.col+=1):(ue=e.cm.options.specialCharPlaceholder(J[0]),ue.setAttribute("cm-text",J[0]),s&&h<9?A.appendChild(_("span",[ue])):A.appendChild(ue),e.col+=1);e.map.push(e.pos,e.pos+1,ue),e.pos++}}if(e.trailingSpace=u.charCodeAt(t.length-1)==32,n||r||i||m||a||l){var _e=n||"";r&&(_e+=r),i&&(_e+=i);var be=_("span",[A],_e,a);if(l)for(var Ce in l)l.hasOwnProperty(Ce)&&Ce!="style"&&Ce!="class"&&be.setAttribute(Ce,l[Ce]);return e.content.appendChild(be)}e.content.appendChild(A)}}function Wc(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,r="",i=0;im&&P.from<=m));J++);if(P.to>=A)return e(n,r,i,a,l,u,f);e(n,r.slice(0,P.to-m),i,a,null,u,f),a=null,r=r.slice(P.to-m),m=P.to}}}function Ea(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function $c(e,t,n){var r=e.markedSpans,i=e.text,a=0;if(!r){for(var l=1;lf||$e.collapsed&&Ie.to==f&&Ie.from==f)){if(Ie.to!=null&&Ie.to!=f&&Y>Ie.to&&(Y=Ie.to,ue=""),$e.className&&(ie+=" "+$e.className),$e.css&&(J=(J?J+";":"")+$e.css),$e.startStyle&&Ie.from==f&&(me+=" "+$e.startStyle),$e.endStyle&&Ie.to==Y&&(Ce||(Ce=[])).push($e.endStyle,Ie.to),$e.title&&((_e||(_e={})).title=$e.title),$e.attributes)for(var Ve in $e.attributes)(_e||(_e={}))[Ve]=$e.attributes[Ve];$e.collapsed&&(!ve||oo(ve.marker,$e)<0)&&(ve=Ie)}else Ie.from>f&&Y>Ie.from&&(Y=Ie.from)}if(Ce)for(var vt=0;vt=u)break;for(var Ot=Math.min(u,Y);;){if(A){var At=f+A.length;if(!ve){var ut=At>Ot?A.slice(0,Ot-f):A;t.addToken(t,ut,P?P+ie:ie,me,f+ut.length==Y?ue:"",J,_e)}if(At>=Ot){A=A.slice(Ot-f),f=Ot;break}f=At,me=""}A=i.slice(a,a=n[m++]),P=La(n[m++],t.cm.options)}}}function za(e,t,n){this.line=t,this.rest=Nc(t),this.size=this.rest?k(ce(this.rest))-n+1:1,this.node=this.text=null,this.hidden=mr(e,t)}function si(e,t,n){for(var r=[],i,a=t;a2&&a.push((f.bottom+m.top)/2-n.top)}}a.push(n.bottom-n.top)}}function Na(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};if(e.rest){for(var r=0;rn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function rf(e,t){t=Zt(t);var n=k(t),r=e.display.externalMeasured=new za(e.doc,t,n);r.lineN=n;var i=r.built=Ca(e,r);return r.text=i.pre,V(e.display.lineMeasure,i.pre),r}function Oa(e,t,n,r){return tr(e,Qr(e,t),n,r)}function po(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&tt)&&(a=f-u,i=a-1,t>=f&&(l="right")),i!=null){if(r=e[m+2],u==f&&n==(r.insertLeft?"left":"right")&&(l=n),n=="left"&&i==0)for(;m&&e[m-2]==e[m-3]&&e[m-1].insertLeft;)r=e[(m-=3)+2],l="left";if(n=="right"&&i==f-u)for(;m=0&&(n=e[i]).left==n.right;i--);return n}function of(e,t,n,r){var i=ja(t.map,n,r),a=i.node,l=i.start,u=i.end,f=i.collapse,m;if(a.nodeType==3){for(var A=0;A<4;A++){for(;l&&W(t.line.text.charAt(i.coverStart+l));)--l;for(;i.coverStart+u0&&(f=r="right");var P;e.options.lineWrapping&&(P=a.getClientRects()).length>1?m=P[r=="right"?P.length-1:0]:m=a.getBoundingClientRect()}if(s&&h<9&&!l&&(!m||!m.left&&!m.right)){var J=a.parentNode.getClientRects()[0];J?m={left:J.left,right:J.left+Jr(e.display),top:J.top,bottom:J.bottom}:m=Pa}for(var Y=m.top-t.rect.top,ie=m.bottom-t.rect.top,ue=(Y+ie)/2,me=t.view.measure.heights,ve=0;ve=r.text.length?(f=r.text.length,m="before"):f<=0&&(f=0,m="after"),!u)return l(m=="before"?f-1:f,m=="before");function A(ie,ue,me){var ve=u[ue],_e=ve.level==1;return l(me?ie-1:ie,_e!=me)}var P=Pt(u,f,m),J=dt,Y=A(f,P,m=="before");return J!=null&&(Y.other=A(f,J,m!="before")),Y}function $a(e,t){var n=0;t=Re(e.doc,t),e.options.lineWrapping||(n=Jr(e.display)*t.ch);var r=Ae(e.doc,t.line),i=ar(r)+ui(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function go(e,t,n,r,i){var a=ne(e,t,n);return a.xRel=i,r&&(a.outside=r),a}function mo(e,t,n){var r=e.doc;if(n+=e.display.viewOffset,n<0)return go(r.first,0,null,-1,-1);var i=O(r,n),a=r.first+r.size-1;if(i>a)return go(r.first+r.size-1,Ae(r,a).text.length,null,1,1);t<0&&(t=0);for(var l=Ae(r,i);;){var u=lf(e,l,i,t,n),f=Ic(l,u.ch+(u.xRel>0||u.outside>0?1:0));if(!f)return u;var m=f.find(1);if(m.line==i)return m;l=Ae(r,i=m.line)}}function Ka(e,t,n,r){r-=ho(t);var i=t.text.length,a=De(function(l){return tr(e,n,l-1).bottom<=r},i,0);return i=De(function(l){return tr(e,n,l).top>r},a,i),{begin:a,end:i}}function Ga(e,t,n,r){n||(n=Qr(e,t));var i=ci(e,t,tr(e,n,r),"line").top;return Ka(e,t,n,i)}function vo(e,t,n,r){return e.bottom<=n?!1:e.top>n?!0:(r?e.left:e.right)>t}function lf(e,t,n,r,i){i-=ar(t);var a=Qr(e,t),l=ho(t),u=0,f=t.text.length,m=!0,A=Pe(t,e.doc.direction);if(A){var P=(e.options.lineWrapping?uf:sf)(e,t,n,a,A,r,i);m=P.level!=1,u=m?P.from:P.to-1,f=m?P.to:P.from-1}var J=null,Y=null,ie=De(function(Ne){var Ie=tr(e,a,Ne);return Ie.top+=l,Ie.bottom+=l,vo(Ie,r,i,!1)?(Ie.top<=i&&Ie.left<=r&&(J=Ne,Y=Ie),!0):!1},u,f),ue,me,ve=!1;if(Y){var _e=r-Y.left=Ce.bottom?1:0}return ie=se(t.text,ie,1),go(n,ie,me,ve,r-ue)}function sf(e,t,n,r,i,a,l){var u=De(function(P){var J=i[P],Y=J.level!=1;return vo(Xt(e,ne(n,Y?J.to:J.from,Y?"before":"after"),"line",t,r),a,l,!0)},0,i.length-1),f=i[u];if(u>0){var m=f.level!=1,A=Xt(e,ne(n,m?f.from:f.to,m?"after":"before"),"line",t,r);vo(A,a,l,!0)&&A.top>l&&(f=i[u-1])}return f}function uf(e,t,n,r,i,a,l){var u=Ka(e,t,r,l),f=u.begin,m=u.end;/\s/.test(t.text.charAt(m-1))&&m--;for(var A=null,P=null,J=0;J=m||Y.to<=f)){var ie=Y.level!=1,ue=tr(e,r,ie?Math.min(m,Y.to)-1:Math.max(f,Y.from)).right,me=ueme)&&(A=Y,P=me)}}return A||(A=i[i.length-1]),A.fromm&&(A={from:A.from,to:m,level:A.level}),A}var zr;function Vr(e){if(e.cachedTextHeight!=null)return e.cachedTextHeight;if(zr==null){zr=_("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)zr.appendChild(document.createTextNode("x")),zr.appendChild(_("br"));zr.appendChild(document.createTextNode("x"))}V(e.measure,zr);var n=zr.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),j(e.measure),n||1}function Jr(e){if(e.cachedCharWidth!=null)return e.cachedCharWidth;var t=_("span","xxxxxxxxxx"),n=_("pre",[t],"CodeMirror-line-like");V(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function bo(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,a=t.gutters.firstChild,l=0;a;a=a.nextSibling,++l){var u=e.display.gutterSpecs[l].className;n[u]=a.offsetLeft+a.clientLeft+i,r[u]=a.clientWidth}return{fixedPos:yo(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function yo(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Za(e){var t=Vr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/Jr(e.display)-3);return function(i){if(mr(e.doc,i))return 0;var a=0;if(i.widgets)for(var l=0;l0&&(m=Ae(e.doc,f.line).text).length==f.ch){var A=Oe(m,m.length,e.options.tabSize)-m.length;f=ne(f.line,Math.max(0,Math.round((a-Fa(e.display).left)/Jr(e.display))-A))}return f}function Ar(e,t){if(t>=e.display.viewTo||(t-=e.display.viewFrom,t<0))return null;for(var n=e.display.view,r=0;rt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)or&&ao(e.doc,t)i.viewFrom?br(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)br(e);else if(t<=i.viewFrom){var a=di(e,n,n+r,1);a?(i.view=i.view.slice(a.index),i.viewFrom=a.lineN,i.viewTo+=r):br(e)}else if(n>=i.viewTo){var l=di(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):br(e)}else{var u=di(e,t,t,-1),f=di(e,n,n+r,1);u&&f?(i.view=i.view.slice(0,u.index).concat(si(e,u.lineN,f.lineN)).concat(i.view.slice(f.index)),i.viewTo+=r):br(e)}var m=i.externalMeasured;m&&(n=i.lineN&&t=r.viewTo)){var a=r.view[Ar(e,t)];if(a.node!=null){var l=a.changes||(a.changes=[]);Se(l,n)==-1&&l.push(n)}}}function br(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function di(e,t,n,r){var i=Ar(e,t),a,l=e.display.view;if(!or||n==e.doc.first+e.doc.size)return{index:i,lineN:n};for(var u=e.display.viewFrom,f=0;f0){if(i==l.length-1)return null;a=u+l[i].size-t,i++}else a=u-t;t+=a,n+=a}for(;ao(e.doc,n)!=n;){if(i==(r<0?0:l.length-1))return null;n+=r*l[i-(r<0?1:0)].size,i+=r}return{index:i,lineN:n}}function cf(e,t,n){var r=e.display,i=r.view;i.length==0||t>=r.viewTo||n<=r.viewFrom?(r.view=si(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=si(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,Ar(e,n)))),r.viewTo=n}function Xa(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo||f.to().line0?l:e.defaultCharWidth())+"px"}if(r.other){var u=n.appendChild(_("div","\xA0","CodeMirror-cursor CodeMirror-secondarycursor"));u.style.display="",u.style.left=r.other.left+"px",u.style.top=r.other.top+"px",u.style.height=(r.other.bottom-r.other.top)*.85+"px"}}function pi(e,t){return e.top-t.top||e.left-t.left}function ff(e,t,n){var r=e.display,i=e.doc,a=document.createDocumentFragment(),l=Fa(e.display),u=l.left,f=Math.max(r.sizerWidth,Er(e)-r.sizer.offsetLeft)-l.right,m=i.direction=="ltr";function A(be,Ce,Ne,Ie){Ce<0&&(Ce=0),Ce=Math.round(Ce),Ie=Math.round(Ie),a.appendChild(_("div",null,"CodeMirror-selected","position: absolute; left: "+be+`px; + top: `+Ce+"px; width: "+(Ne??f-be)+`px; + height: `+(Ie-Ce)+"px"))}function P(be,Ce,Ne){var Ie=Ae(i,be),$e=Ie.text.length,Ve,vt;function rt(ut,Dt){return fi(e,ne(be,ut),"div",Ie,Dt)}function Ot(ut,Dt,yt){var ft=Ga(e,Ie,null,ut),ct=Dt=="ltr"==(yt=="after")?"left":"right",lt=yt=="after"?ft.begin:ft.end-(/\s/.test(Ie.text.charAt(ft.end-1))?2:1);return rt(lt,ct)[ct]}var At=Pe(Ie,i.direction);return nt(At,Ce||0,Ne??$e,function(ut,Dt,yt,ft){var ct=yt=="ltr",lt=rt(ut,ct?"left":"right"),qt=rt(Dt-1,ct?"right":"left"),pn=Ce==null&&ut==0,Sr=Ne==null&&Dt==$e,St=ft==0,rr=!At||ft==At.length-1;if(qt.top-lt.top<=3){var bt=(m?pn:Sr)&&St,Zo=(m?Sr:pn)&&rr,cr=bt?u:(ct?lt:qt).left,Nr=Zo?f:(ct?qt:lt).right;A(cr,lt.top,Nr-cr,lt.bottom)}else{var Or,Lt,hn,Xo;ct?(Or=m&&pn&&St?u:lt.left,Lt=m?f:Ot(ut,yt,"before"),hn=m?u:Ot(Dt,yt,"after"),Xo=m&&Sr&&rr?f:qt.right):(Or=m?Ot(ut,yt,"before"):u,Lt=!m&&pn&&St?f:lt.right,hn=!m&&Sr&&rr?u:qt.left,Xo=m?Ot(Dt,yt,"after"):f),A(Or,lt.top,Lt-Or,lt.bottom),lt.bottom0?t.blinker=setInterval(function(){e.hasFocus()||en(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Qa(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||So(e))}function wo(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&en(e))},100)}function So(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),e.options.readOnly!="nocursor"&&(e.state.focused||(it(e,"focus",e,t),e.state.focused=!0,le(e.display.wrapper,"CodeMirror-focused"),!e.curOp&&e.display.selForContextMenu!=e.doc.sel&&(e.display.input.reset(),g&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),ko(e))}function en(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,"blur",e,t),e.state.focused=!1,Q(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function hi(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=Math.max(0,t.scroller.getBoundingClientRect().top),i=t.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||Y<-.005)&&(ie.display.sizerWidth){var ue=Math.ceil(A/Jr(e.display));ue>e.display.maxLineLength&&(e.display.maxLineLength=ue,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(t.scroller.scrollTop+=a)}function Va(e){if(e.widgets)for(var t=0;t=l&&(a=O(t,ar(Ae(t,f))-e.wrapper.clientHeight),l=f)}return{from:a,to:Math.max(l,a+1)}}function df(e,t){if(!ot(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null,a=n.wrapper.ownerDocument;if(t.top+r.top<0?i=!0:t.bottom+r.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(i=!1),i!=null&&!z){var l=_("div","\u200B",null,`position: absolute; + top: `+(t.top-n.viewOffset-ui(e.display))+`px; + height: `+(t.bottom-t.top+er(e)+n.barHeight)+`px; + left: `+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(i),e.display.lineSpace.removeChild(l)}}}function pf(e,t,n,r){r==null&&(r=0);var i;!e.options.lineWrapping&&t==n&&(n=t.sticky=="before"?ne(t.line,t.ch+1,"before"):t,t=t.ch?ne(t.line,t.sticky=="before"?t.ch-1:t.ch,"after"):t);for(var a=0;a<5;a++){var l=!1,u=Xt(e,t),f=!n||n==t?u:Xt(e,n);i={left:Math.min(u.left,f.left),top:Math.min(u.top,f.top)-r,right:Math.max(u.left,f.left),bottom:Math.max(u.bottom,f.bottom)+r};var m=To(e,i),A=e.doc.scrollTop,P=e.doc.scrollLeft;if(m.scrollTop!=null&&(An(e,m.scrollTop),Math.abs(e.doc.scrollTop-A)>1&&(l=!0)),m.scrollLeft!=null&&(Dr(e,m.scrollLeft),Math.abs(e.doc.scrollLeft-P)>1&&(l=!0)),!l)break}return i}function hf(e,t){var n=To(e,t);n.scrollTop!=null&&An(e,n.scrollTop),n.scrollLeft!=null&&Dr(e,n.scrollLeft)}function To(e,t){var n=e.display,r=Vr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&e.curOp.scrollTop!=null?e.curOp.scrollTop:n.scroller.scrollTop,a=fo(e),l={};t.bottom-t.top>a&&(t.bottom=t.top+a);var u=e.doc.height+co(n),f=t.topu-r;if(t.topi+a){var A=Math.min(t.top,(m?u:t.bottom)-a);A!=i&&(l.scrollTop=A)}var P=e.options.fixedGutter?0:n.gutters.offsetWidth,J=e.curOp&&e.curOp.scrollLeft!=null?e.curOp.scrollLeft:n.scroller.scrollLeft-P,Y=Er(e)-n.gutters.offsetWidth,ie=t.right-t.left>Y;return ie&&(t.right=t.left+Y),t.left<10?l.scrollLeft=0:t.leftY+J-3&&(l.scrollLeft=t.right+(ie?0:10)-Y),l}function Lo(e,t){t!=null&&(mi(e),e.curOp.scrollTop=(e.curOp.scrollTop==null?e.doc.scrollTop:e.curOp.scrollTop)+t)}function tn(e){mi(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Mn(e,t,n){(t!=null||n!=null)&&mi(e),t!=null&&(e.curOp.scrollLeft=t),n!=null&&(e.curOp.scrollTop=n)}function gf(e,t){mi(e),e.curOp.scrollToPos=t}function mi(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=$a(e,t.from),r=$a(e,t.to);Ja(e,n,r,t.margin)}}function Ja(e,t,n,r){var i=To(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Mn(e,i.scrollLeft,i.scrollTop)}function An(e,t){Math.abs(e.doc.scrollTop-t)<2||(v||Eo(e,{top:t}),el(e,t,!0),v&&Eo(e),In(e,100))}function el(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),!(e.display.scroller.scrollTop==t&&!n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),!((n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r)&&(e.doc.scrollLeft=t,ol(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Dn(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+co(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+er(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var qr=function(e,t,n){this.cm=n;var r=this.vert=_("div",[_("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=_("div",[_("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),Fe(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),Fe(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,s&&h<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};qr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var a=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(r==0&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},qr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},qr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},qr.prototype.zeroWidthHack=function(){var e=H&&!E?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new qe,this.disableVert=new qe},qr.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility="";function r(){var i=e.getBoundingClientRect(),a=n=="vert"?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1);a!=e?e.style.visibility="hidden":t.set(1e3,r)}t.set(1e3,r)},qr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var qn=function(){};qn.prototype.update=function(){return{bottom:0,right:0}},qn.prototype.setScrollLeft=function(){},qn.prototype.setScrollTop=function(){},qn.prototype.clear=function(){};function rn(e,t){t||(t=Dn(e));var n=e.display.barWidth,r=e.display.barHeight;tl(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&hi(e),tl(e,Dn(e)),n=e.display.barWidth,r=e.display.barHeight}function tl(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}var rl={native:qr,null:qn};function nl(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&Q(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new rl[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Fe(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){n=="horizontal"?Dr(e,t):An(e,t)},e),e.display.scrollbars.addClass&&le(e.display.wrapper,e.display.scrollbars.addClass)}var mf=0;function Ir(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++mf,markArrays:null},Kc(e.curOp)}function Fr(e){var t=e.curOp;t&&Zc(t,function(n){for(var r=0;r=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new vi(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function yf(e){e.updatedDisplay=e.mustUpdate&&Co(e.cm,e.update)}function xf(e){var t=e.cm,n=t.display;e.updatedDisplay&&hi(t),e.barMeasure=Dn(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Oa(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+er(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Er(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function _f(e){var t=e.cm;e.adjustWidthTo!=null&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft=e.display.viewTo)){var n=+new Date+e.options.workTime,r=wn(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(a){if(r.line>=e.display.viewFrom){var l=a.styles,u=a.text.length>e.options.maxHighlightLength?Vt(t.mode,r.state):null,f=fa(e,a,r,!0);u&&(r.state=u),a.styles=f.styles;var m=a.styleClasses,A=f.classes;A?a.styleClasses=A:m&&(a.styleClasses=null);for(var P=!l||l.length!=a.styles.length||m!=A&&(!m||!A||m.bgClass!=A.bgClass||m.textClass!=A.textClass),J=0;!P&&Jn)return In(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Nt(e,function(){for(var a=0;a=n.viewFrom&&t.visible.to<=n.viewTo&&(n.updateLineNumbers==null||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&Xa(e)==0)return!1;al(e)&&(br(e),t.dims=bo(e));var i=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFroml&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),or&&(a=ao(e.doc,a),l=Ta(e.doc,l));var u=a!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;cf(e,a,l),n.viewOffset=ar(Ae(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var f=Xa(e);if(!u&&f==0&&!t.force&&n.renderedView==n.view&&(n.updateLineNumbers==null||n.updateLineNumbers>=n.viewTo))return!1;var m=Tf(e);return f>4&&(n.lineDiv.style.display="none"),Cf(e,n.updateLineNumbers,t.dims),f>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,Lf(m),j(n.cursorDiv),j(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,u&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,In(e,400)),n.updateLineNumbers=null,!0}function il(e,t){for(var n=t.viewport,r=!0;;r=!1){if(!r||!e.options.lineWrapping||t.oldDisplayWidth==Er(e)){if(n&&n.top!=null&&(n={top:Math.min(e.doc.height+co(e.display)-fo(e),n.top)}),t.visible=gi(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break}else r&&(t.visible=gi(e.display,e.doc,n));if(!Co(e,t))break;hi(e);var i=Dn(e);zn(e),rn(e,i),Mo(e,i),t.force=!1}t.signal(e,"update",e),(e.display.viewFrom!=e.display.reportedViewFrom||e.display.viewTo!=e.display.reportedViewTo)&&(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Eo(e,t){var n=new vi(e,t);if(Co(e,n)){hi(e),il(e,n);var r=Dn(e);zn(e),rn(e,r),Mo(e,r),n.finish()}}function Cf(e,t,n){var r=e.display,i=e.options.lineNumbers,a=r.lineDiv,l=a.firstChild;function u(ie){var ue=ie.nextSibling;return g&&H&&e.display.currentWheelTarget==ie?ie.style.display="none":ie.parentNode.removeChild(ie),ue}for(var f=r.view,m=r.viewFrom,A=0;A-1&&(Y=!1),Ma(e,P,m,n)),Y&&(j(P.lineNumber),P.lineNumber.appendChild(document.createTextNode(he(e.options,m)))),l=P.node.nextSibling}m+=P.size}for(;l;)l=u(l)}function zo(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",ht(e,"gutterChanged",e)}function Mo(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+er(e)+"px"}function ol(e){var t=e.display,n=t.view;if(!(!t.alignWidgets&&(!t.gutters.firstChild||!e.options.fixedGutter))){for(var r=yo(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,a=r+"px",l=0;l=105&&(i.wrapper.style.clipPath="inset(0px)"),i.wrapper.setAttribute("translate","no"),s&&h<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),!g&&!(v&&M)&&(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=Ao(r.gutters,r.lineNumbers),ll(i),n.init(i)}var bi=0,sr=null;s?sr=-.53:v?sr=15:x?sr=-.7:w&&(sr=-1/3);function sl(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return t==null&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),n==null&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:n==null&&(n=e.wheelDelta),{x:t,y:n}}function zf(e){var t=sl(e);return t.x*=sr,t.y*=sr,t}function ul(e,t){x&&c==102&&(e.display.chromeScrollHack==null?e.display.sizer.style.pointerEvents="none":clearTimeout(e.display.chromeScrollHack),e.display.chromeScrollHack=setTimeout(function(){e.display.chromeScrollHack=null,e.display.sizer.style.pointerEvents=""},100));var n=sl(t),r=n.x,i=n.y,a=sr;t.deltaMode===0&&(r=t.deltaX,i=t.deltaY,a=1);var l=e.display,u=l.scroller,f=u.scrollWidth>u.clientWidth,m=u.scrollHeight>u.clientHeight;if(r&&f||i&&m){if(i&&H&&g){e:for(var A=t.target,P=l.view;A!=u;A=A.parentNode)for(var J=0;J=0&&ye(e,r.to())<=0)return n}return-1};var Ye=function(e,t){this.anchor=e,this.head=t};Ye.prototype.from=function(){return Zr(this.anchor,this.head)},Ye.prototype.to=function(){return Et(this.anchor,this.head)},Ye.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function Yt(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort(function(J,Y){return ye(J.from(),Y.from())}),n=Se(t,i);for(var a=1;a0:f>=0){var m=Zr(u.from(),l.from()),A=Et(u.to(),l.to()),P=u.empty()?l.from()==l.head:u.from()==u.head;a<=n&&--n,t.splice(--a,2,new Ye(P?A:m,P?m:A))}}return new Rt(t,n)}function yr(e,t){return new Rt([new Ye(e,t||e)],0)}function xr(e){return e.text?ne(e.from.line+e.text.length-1,ce(e.text).length+(e.text.length==1?e.from.ch:0)):e.to}function cl(e,t){if(ye(e,t.from)<0)return e;if(ye(e,t.to)<=0)return xr(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=xr(t).ch-t.to.ch),ne(n,r)}function Do(e,t){for(var n=[],r=0;r1&&e.remove(u.line+1,ie-1),e.insert(u.line+1,ve)}ht(e,"change",e,t)}function _r(e,t,n){function r(i,a,l){if(i.linked)for(var u=0;u1&&!e.done[e.done.length-2].ranges)return e.done.pop(),ce(e.done)}function ml(e,t,n,r){var i=e.history;i.undone.length=0;var a=+new Date,l,u;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&(t.origin.charAt(0)=="+"&&i.lastModTime>a-(e.cm?e.cm.options.historyEventDelay:500)||t.origin.charAt(0)=="*"))&&(l=Df(i,i.lastOp==r)))u=ce(l.changes),ye(t.from,t.to)==0&&ye(t.from,u.to)==0?u.to=xr(t):l.changes.push(Fo(e,t));else{var f=ce(i.done);for((!f||!f.ranges)&&xi(e.sel,i.done),l={changes:[Fo(e,t)],generation:i.generation},i.done.push(l);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,u||it(e,"historyAdded")}function qf(e,t,n,r){var i=t.charAt(0);return i=="*"||i=="+"&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function If(e,t,n,r){var i=e.history,a=r&&r.origin;n==i.lastSelOp||a&&i.lastSelOrigin==a&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==a||qf(e,a,ce(i.done),t))?i.done[i.done.length-1]=t:xi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=a,i.lastSelOp=n,r&&r.clearRedo!==!1&&gl(i.undone)}function xi(e,t){var n=ce(t);n&&n.ranges&&n.equals(e)||t.push(e)}function vl(e,t,n,r){var i=t["spans_"+e.id],a=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(l){l.markedSpans&&((i||(i=t["spans_"+e.id]={}))[a]=l.markedSpans),++a})}function Ff(e){if(!e)return null;for(var t,n=0;n-1&&(ce(u)[P]=m[P],delete m[P])}}return r}function No(e,t,n,r){if(r){var i=e.anchor;if(n){var a=ye(t,i)<0;a!=ye(n,i)<0?(i=t,t=n):a!=ye(t,n)<0&&(t=n)}return new Ye(i,t)}else return new Ye(n||t,t)}function _i(e,t,n,r,i){i==null&&(i=e.cm&&(e.cm.display.shift||e.extend)),wt(e,new Rt([No(e.sel.primary(),t,n,i)],0),r)}function yl(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),a=0;a=t.ch:u.to>t.ch))){if(i&&(it(f,"beforeCursorEnter"),f.explicitlyCleared))if(a.markedSpans){--l;continue}else break;if(!f.atomic)continue;if(n){var P=f.find(r<0?1:-1),J=void 0;if((r<0?A:m)&&(P=Tl(e,P,-r,P&&P.line==t.line?a:null)),P&&P.line==t.line&&(J=ye(P,n))&&(r<0?J<0:J>0))return on(e,P,t,r,i)}var Y=f.find(r<0?-1:1);return(r<0?m:A)&&(Y=Tl(e,Y,r,Y.line==t.line?a:null)),Y?on(e,Y,t,r,i):null}}return t}function wi(e,t,n,r,i){var a=r||1,l=on(e,t,n,a,i)||!i&&on(e,t,n,a,!0)||on(e,t,n,-a,i)||!i&&on(e,t,n,-a,!0);return l||(e.cantEdit=!0,ne(e.first,0))}function Tl(e,t,n,r){return n<0&&t.ch==0?t.line>e.first?Re(e,ne(t.line-1)):null:n>0&&t.ch==(r||Ae(e,t.line)).text.length?t.line=0;--i)El(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else El(e,t)}}function El(e,t){if(!(t.text.length==1&&t.text[0]==""&&ye(t.from,t.to)==0)){var n=Do(e,t);ml(e,t,n,e.cm?e.cm.curOp.id:NaN),On(e,t,n,io(e,t));var r=[];_r(e,function(i,a){!a&&Se(r,i.history)==-1&&(Dl(i.history,t),r.push(i.history)),On(i,t,null,io(i,t))})}}function Si(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!(r&&!n)){for(var i=e.history,a,l=e.sel,u=t=="undo"?i.done:i.undone,f=t=="undo"?i.undone:i.done,m=0;m=0;--Y){var ie=J(Y);if(ie)return ie.v}}}}function zl(e,t){if(t!=0&&(e.first+=t,e.sel=new Rt(Be(e.sel.ranges,function(i){return new Ye(ne(i.anchor.line+t,i.anchor.ch),ne(i.head.line+t,i.head.ch))}),e.sel.primIndex),e.cm)){zt(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.linea&&(t={from:t.from,to:ne(a,Ae(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ir(e,t.from,t.to),n||(n=Do(e,t)),e.cm?Pf(e.cm,t,r):Io(e,t,r),ki(e,n,ke),e.cantEdit&&wi(e,ne(e.firstLine(),0))&&(e.cantEdit=!1)}}function Pf(e,t,n){var r=e.doc,i=e.display,a=t.from,l=t.to,u=!1,f=a.line;e.options.lineWrapping||(f=k(Zt(Ae(r,a.line))),r.iter(f,l.line+1,function(Y){if(Y==i.maxLine)return u=!0,!0})),r.sel.contains(t.from,t.to)>-1&&Ht(e),Io(r,t,n,Za(e)),e.options.lineWrapping||(r.iter(f,a.line+t.text.length,function(Y){var ie=li(Y);ie>i.maxLineLength&&(i.maxLine=Y,i.maxLineLength=ie,i.maxLineChanged=!0,u=!1)}),u&&(e.curOp.updateMaxLine=!0)),Lc(r,a.line),In(e,400);var m=t.text.length-(l.line-a.line)-1;t.full?zt(e):a.line==l.line&&t.text.length==1&&!dl(e.doc,t)?vr(e,a.line,"text"):zt(e,a.line,l.line+1,m);var A=Ft(e,"changes"),P=Ft(e,"change");if(P||A){var J={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};P&&ht(e,"change",e,J),A&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(J)}e.display.selForContextMenu=null}function ln(e,t,n,r,i){var a;r||(r=n),ye(r,n)<0&&(a=[r,n],n=a[0],r=a[1]),typeof t=="string"&&(t=e.splitLines(t)),an(e,{from:n,to:r,text:t,origin:i})}function Ml(e,t,n,r){n1||!(this.children[0]instanceof jn))){var u=[];this.collapse(u),this.children=[new jn(u)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,u=l;u10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;re.display.maxLineLength&&(e.display.maxLine=m,e.display.maxLineLength=A,e.display.maxLineChanged=!0)}r!=null&&e&&this.collapsed&&zt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&wl(e.doc)),e&&ht(e,"markerCleared",e,this,r,i),t&&Fr(e),this.parent&&this.parent.clear()}},kr.prototype.find=function(e,t){e==null&&this.type=="bookmark"&&(e=1);for(var n,r,i=0;i0||l==0&&a.clearWhenEmpty!==!1)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=K("span",[a.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(Sa(e,t.line,t,n,a)||t.line!=n.line&&Sa(e,n.line,t,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Ec()}a.addToHistory&&ml(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var u=t.line,f=e.cm,m;if(e.iter(u,n.line+1,function(P){f&&a.collapsed&&!f.options.lineWrapping&&Zt(P)==f.display.maxLine&&(m=!0),a.collapsed&&u!=t.line&&jt(P,0),Mc(P,new ni(a,u==t.line?t.ch:null,u==n.line?n.ch:null),e.cm&&e.cm.curOp),++u}),a.collapsed&&e.iter(t.line,n.line+1,function(P){mr(e,P)&&jt(P,0)}),a.clearOnEnter&&Fe(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Cc(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++Il,a.atomic=!0),f){if(m&&(f.curOp.updateMaxLine=!0),a.collapsed)zt(f,t.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var A=t.line;A<=n.line;A++)vr(f,A,"text");a.atomic&&wl(f.doc),ht(f,"markerAdded",f,a)}return a}var Bn=function(e,t){this.markers=e,this.primary=t;for(var n=0;n=0;f--)an(this,r[f]);u?_l(this,u):this.cm&&tn(this.cm)}),undo:mt(function(){Si(this,"undo")}),redo:mt(function(){Si(this,"redo")}),undoSelection:mt(function(){Si(this,"undo",!0)}),redoSelection:mt(function(){Si(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=Re(this,e),t=Re(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(a){var l=a.markedSpans;if(l)for(var u=0;u=f.to||f.from==null&&i!=e.line||f.from!=null&&i==t.line&&f.from>=t.ch)&&(!n||n(f.marker))&&r.push(f.marker.parent||f.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=a,++n}),Re(this,ne(n,t))},indexFromPos:function(e){e=Re(this,e);var t=e.ch;if(e.linet&&(t=e.from),e.to!=null&&e.to-1){t.state.draggingText(e),setTimeout(function(){return t.display.input.focus()},20);return}try{var A=e.dataTransfer.getData("Text");if(A){var P;if(t.state.draggingText&&!t.state.draggingText.copy&&(P=t.listSelections()),ki(t.doc,yr(n,n)),P)for(var J=0;J=0;u--)ln(e.doc,"",r[u].from,r[u].to,"+delete");tn(e)})}function Po(e,t,n){var r=se(e.text,t+n,n);return r<0||r>e.text.length?null:r}function jo(e,t,n){var r=Po(e,t.ch,n);return r==null?null:new ne(t.line,r,n<0?"after":"before")}function Ro(e,t,n,r,i){if(e){t.doc.direction=="rtl"&&(i=-i);var a=Pe(n,t.doc.direction);if(a){var l=i<0?ce(a):a[0],u=i<0==(l.level==1),f=u?"after":"before",m;if(l.level>0||t.doc.direction=="rtl"){var A=Qr(t,n);m=i<0?n.text.length-1:0;var P=tr(t,A,m).top;m=De(function(J){return tr(t,A,J).top==P},i<0==(l.level==1)?l.from:l.to-1,m),f=="before"&&(m=Po(n,m,1))}else m=i<0?l.to:l.from;return new ne(r,m,f)}}return new ne(r,i<0?n.text.length:0,i<0?"before":"after")}function Vf(e,t,n,r){var i=Pe(t,e.doc.direction);if(!i)return jo(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var a=Pt(i,n.ch,n.sticky),l=i[a];if(e.doc.direction=="ltr"&&l.level%2==0&&(r>0?l.to>n.ch:l.from=l.from&&J>=A.begin)){var Y=P?"before":"after";return new ne(n.line,J,Y)}}var ie=function(ve,_e,be){for(var Ce=function(Ve,vt){return vt?new ne(n.line,u(Ve,1),"before"):new ne(n.line,Ve,"after")};ve>=0&&ve0==(Ne.level!=1),$e=Ie?be.begin:u(be.end,-1);if(Ne.from<=$e&&$e0?A.end:u(A.begin,-1);return me!=null&&!(r>0&&me==t.text.length)&&(ue=ie(r>0?0:i.length-1,r,m(me)),ue)?ue:null}var $n={selectAll:Ll,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),ke)},killLine:function(e){return cn(e,function(t){if(t.empty()){var n=Ae(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new ne(i.line,i.ch+1),e.replaceRange(a.charAt(i.ch-1)+a.charAt(i.ch-2),ne(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Ae(e.doc,i.line-1).text;l&&(i=new ne(i.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),ne(i.line-1,l.length-1),i,"+transpose"))}}n.push(new Ye(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return Nt(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;re&&ye(t,this.pos)==0&&n==this.button};var Gn,Zn;function od(e,t){var n=+new Date;return Zn&&Zn.compare(n,e,t)?(Gn=Zn=null,"triple"):Gn&&Gn.compare(n,e,t)?(Zn=new Bo(n,e,t),Gn=null,"double"):(Gn=new Bo(n,e,t),Zn=null,"single")}function Yl(e){var t=this,n=t.display;if(!(ot(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=e.shiftKey,lr(n,e)){g||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100));return}if(!Wo(t,e)){var r=Mr(t,e),i=Ut(e),a=r?od(r,i):"single";pe(t).focus(),i==1&&t.state.selectingText&&t.state.selectingText(e),!(r&&ad(t,i,r,a,e))&&(i==1?r?sd(t,r,a,e):yn(e)==n.scroller&&kt(e):i==2?(r&&_i(t.doc,r),setTimeout(function(){return n.input.focus()},20)):i==3&&(F?t.display.input.onContextMenu(e):wo(t)))}}}function ad(e,t,n,r,i){var a="Click";return r=="double"?a="Double"+a:r=="triple"&&(a="Triple"+a),a=(t==1?"Left":t==2?"Middle":"Right")+a,Kn(e,Hl(a,i),i,function(l){if(typeof l=="string"&&(l=$n[l]),!l)return!1;var u=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),u=l(e,n)!=Ze}finally{e.state.suppressEdits=!1}return u})}function ld(e,t,n){var r=e.getOption("configureMouse"),i=r?r(e,t,n):{};if(i.unit==null){var a=Z?n.shiftKey&&n.metaKey:n.altKey;i.unit=a?"rectangle":t=="single"?"char":t=="double"?"word":"line"}return(i.extend==null||e.doc.extend)&&(i.extend=e.doc.extend||n.shiftKey),i.addNew==null&&(i.addNew=H?n.metaKey:n.ctrlKey),i.moveOnDrag==null&&(i.moveOnDrag=!(H?n.altKey:n.ctrlKey)),i}function sd(e,t,n,r){s?setTimeout(Ee(Qa,e),0):e.curOp.focus=B(de(e));var i=ld(e,n,r),a=e.doc.sel,l;e.options.dragDrop&&eo&&!e.isReadOnly()&&n=="single"&&(l=a.contains(t))>-1&&(ye((l=a.ranges[l]).from(),t)<0||t.xRel>0)&&(ye(l.to(),t)>0||t.xRel<0)?ud(e,r,t,i):cd(e,r,t,i)}function ud(e,t,n,r){var i=e.display,a=!1,l=gt(e,function(m){g&&(i.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:wo(e)),_t(i.wrapper.ownerDocument,"mouseup",l),_t(i.wrapper.ownerDocument,"mousemove",u),_t(i.scroller,"dragstart",f),_t(i.scroller,"drop",l),a||(kt(m),r.addNew||_i(e.doc,n,null,null,r.extend),g&&!w||s&&h==9?setTimeout(function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()},20):i.input.focus())}),u=function(m){a=a||Math.abs(t.clientX-m.clientX)+Math.abs(t.clientY-m.clientY)>=10},f=function(){return a=!0};g&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!r.moveOnDrag,Fe(i.wrapper.ownerDocument,"mouseup",l),Fe(i.wrapper.ownerDocument,"mousemove",u),Fe(i.scroller,"dragstart",f),Fe(i.scroller,"drop",l),e.state.delayingBlurEvent=!0,setTimeout(function(){return i.input.focus()},20),i.scroller.dragDrop&&i.scroller.dragDrop()}function Ql(e,t,n){if(n=="char")return new Ye(t,t);if(n=="word")return e.findWordAt(t);if(n=="line")return new Ye(ne(t.line,0),Re(e.doc,ne(t.line+1,0)));var r=n(e,t);return new Ye(r.from,r.to)}function cd(e,t,n,r){s&&wo(e);var i=e.display,a=e.doc;kt(t);var l,u,f=a.sel,m=f.ranges;if(r.addNew&&!r.extend?(u=a.sel.contains(n),u>-1?l=m[u]:l=new Ye(n,n)):(l=a.sel.primary(),u=a.sel.primIndex),r.unit=="rectangle")r.addNew||(l=new Ye(n,n)),n=Mr(e,t,!0,!0),u=-1;else{var A=Ql(e,n,r.unit);r.extend?l=No(l,A.anchor,A.head,r.extend):l=A}r.addNew?u==-1?(u=m.length,wt(a,Yt(e,m.concat([l]),u),{scroll:!1,origin:"*mouse"})):m.length>1&&m[u].empty()&&r.unit=="char"&&!r.extend?(wt(a,Yt(e,m.slice(0,u).concat(m.slice(u+1)),0),{scroll:!1,origin:"*mouse"}),f=a.sel):Oo(a,u,l,Je):(u=0,wt(a,new Rt([l],0),Je),f=a.sel);var P=n;function J(be){if(ye(P,be)!=0)if(P=be,r.unit=="rectangle"){for(var Ce=[],Ne=e.options.tabSize,Ie=Oe(Ae(a,n.line).text,n.ch,Ne),$e=Oe(Ae(a,be.line).text,be.ch,Ne),Ve=Math.min(Ie,$e),vt=Math.max(Ie,$e),rt=Math.min(n.line,be.line),Ot=Math.min(e.lastLine(),Math.max(n.line,be.line));rt<=Ot;rt++){var At=Ae(a,rt).text,ut=Ge(At,Ve,Ne);Ve==vt?Ce.push(new Ye(ne(rt,ut),ne(rt,ut))):At.length>ut&&Ce.push(new Ye(ne(rt,ut),ne(rt,Ge(At,vt,Ne))))}Ce.length||Ce.push(new Ye(n,n)),wt(a,Yt(e,f.ranges.slice(0,u).concat(Ce),u),{origin:"*mouse",scroll:!1}),e.scrollIntoView(be)}else{var Dt=l,yt=Ql(e,be,r.unit),ft=Dt.anchor,ct;ye(yt.anchor,ft)>0?(ct=yt.head,ft=Zr(Dt.from(),yt.anchor)):(ct=yt.anchor,ft=Et(Dt.to(),yt.head));var lt=f.ranges.slice(0);lt[u]=fd(e,new Ye(Re(a,ft),ct)),wt(a,Yt(e,lt,u),Je)}}var Y=i.wrapper.getBoundingClientRect(),ie=0;function ue(be){var Ce=++ie,Ne=Mr(e,be,!0,r.unit=="rectangle");if(Ne)if(ye(Ne,P)!=0){e.curOp.focus=B(de(e)),J(Ne);var Ie=gi(i,a);(Ne.line>=Ie.to||Ne.lineY.bottom?20:0;$e&&setTimeout(gt(e,function(){ie==Ce&&(i.scroller.scrollTop+=$e,ue(be))}),50)}}function me(be){e.state.selectingText=!1,ie=1/0,be&&(kt(be),i.input.focus()),_t(i.wrapper.ownerDocument,"mousemove",ve),_t(i.wrapper.ownerDocument,"mouseup",_e),a.history.lastSelOrigin=null}var ve=gt(e,function(be){be.buttons===0||!Ut(be)?me(be):ue(be)}),_e=gt(e,me);e.state.selectingText=_e,Fe(i.wrapper.ownerDocument,"mousemove",ve),Fe(i.wrapper.ownerDocument,"mouseup",_e)}function fd(e,t){var n=t.anchor,r=t.head,i=Ae(e.doc,n.line);if(ye(n,r)==0&&n.sticky==r.sticky)return t;var a=Pe(i);if(!a)return t;var l=Pt(a,n.ch,n.sticky),u=a[l];if(u.from!=n.ch&&u.to!=n.ch)return t;var f=l+(u.from==n.ch==(u.level!=1)?0:1);if(f==0||f==a.length)return t;var m;if(r.line!=n.line)m=(r.line-n.line)*(e.doc.direction=="ltr"?1:-1)>0;else{var A=Pt(a,r.ch,r.sticky),P=A-l||(r.ch-n.ch)*(u.level==1?-1:1);A==f-1||A==f?m=P<0:m=P>0}var J=a[f+(m?-1:0)],Y=m==(J.level==1),ie=Y?J.from:J.to,ue=Y?"after":"before";return n.ch==ie&&n.sticky==ue?t:new Ye(new ne(n.line,ie,ue),r)}function Vl(e,t,n,r){var i,a;if(t.touches)i=t.touches[0].clientX,a=t.touches[0].clientY;else try{i=t.clientX,a=t.clientY}catch{return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&kt(t);var l=e.display,u=l.lineDiv.getBoundingClientRect();if(a>u.bottom||!Ft(e,n))return Ct(t);a-=u.top-l.viewOffset;for(var f=0;f=i){var A=O(e.doc,a),P=e.display.gutterSpecs[f];return it(e,n,e,A,P.className,t),Ct(t)}}}function Wo(e,t){return Vl(e,t,"gutterClick",!0)}function Jl(e,t){lr(e.display,t)||dd(e,t)||ot(e,t,"contextmenu")||F||e.display.input.onContextMenu(t)}function dd(e,t){return Ft(e,"gutterContextMenu")?Vl(e,t,"gutterContextMenu",!1):!1}function es(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),En(e)}var fn={toString:function(){return"CodeMirror.Init"}},ts={},Ei={};function pd(e){var t=e.optionHandlers;function n(r,i,a,l){e.defaults[r]=i,a&&(t[r]=l?function(u,f,m){m!=fn&&a(u,f,m)}:a)}e.defineOption=n,e.Init=fn,n("value","",function(r,i){return r.setValue(i)},!0),n("mode",null,function(r,i){r.doc.modeOption=i,qo(r)},!0),n("indentUnit",2,qo,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(r){Nn(r),En(r),zt(r)},!0),n("lineSeparator",null,function(r,i){if(r.doc.lineSep=i,!!i){var a=[],l=r.doc.first;r.doc.iter(function(f){for(var m=0;;){var A=f.text.indexOf(i,m);if(A==-1)break;m=A+i.length,a.push(ne(l,A))}l++});for(var u=a.length-1;u>=0;u--)ln(r.doc,i,a[u],ne(a[u].line,a[u].ch+i.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(r,i,a){r.state.specialChars=new RegExp(i.source+(i.test(" ")?"":"| "),"g"),a!=fn&&r.refresh()}),n("specialCharPlaceholder",Hc,function(r){return r.refresh()},!0),n("electricChars",!0),n("inputStyle",M?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(r,i){return r.getInputField().spellcheck=i},!0),n("autocorrect",!1,function(r,i){return r.getInputField().autocorrect=i},!0),n("autocapitalize",!1,function(r,i){return r.getInputField().autocapitalize=i},!0),n("rtlMoveVisually",!ee),n("wholeLineUpdateBefore",!0),n("theme","default",function(r){es(r),Fn(r)},!0),n("keyMap","default",function(r,i,a){var l=Li(i),u=a!=fn&&Li(a);u&&u.detach&&u.detach(r,l),l.attach&&l.attach(r,u||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,gd,!0),n("gutters",[],function(r,i){r.display.gutterSpecs=Ao(i,r.options.lineNumbers),Fn(r)},!0),n("fixedGutter",!0,function(r,i){r.display.gutters.style.left=i?yo(r.display)+"px":"0",r.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(r){return rn(r)},!0),n("scrollbarStyle","native",function(r){nl(r),rn(r),r.display.scrollbars.setScrollTop(r.doc.scrollTop),r.display.scrollbars.setScrollLeft(r.doc.scrollLeft)},!0),n("lineNumbers",!1,function(r,i){r.display.gutterSpecs=Ao(r.options.gutters,i),Fn(r)},!0),n("firstLineNumber",1,Fn,!0),n("lineNumberFormatter",function(r){return r},Fn,!0),n("showCursorWhenSelecting",!1,zn,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,function(r,i){i=="nocursor"&&(en(r),r.display.input.blur()),r.display.input.readOnlyChanged(i)}),n("screenReaderLabel",null,function(r,i){i=i===""?null:i,r.display.input.screenReaderLabelChanged(i)}),n("disableInput",!1,function(r,i){i||r.display.input.reset()},!0),n("dragDrop",!0,hd),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,zn,!0),n("singleCursorHeightPerLine",!0,zn,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Nn,!0),n("addModeClass",!1,Nn,!0),n("pollInterval",100),n("undoDepth",200,function(r,i){return r.doc.history.undoDepth=i}),n("historyEventDelay",1250),n("viewportMargin",10,function(r){return r.refresh()},!0),n("maxHighlightLength",1e4,Nn,!0),n("moveInputWithCursor",!0,function(r,i){i||r.display.input.resetPosition()}),n("tabindex",null,function(r,i){return r.display.input.getField().tabIndex=i||""}),n("autofocus",null),n("direction","ltr",function(r,i){return r.doc.setDirection(i)},!0),n("phrases",null)}function hd(e,t,n){var r=n&&n!=fn;if(!t!=!r){var i=e.display.dragFunctions,a=t?Fe:_t;a(e.display.scroller,"dragstart",i.start),a(e.display.scroller,"dragenter",i.enter),a(e.display.scroller,"dragover",i.over),a(e.display.scroller,"dragleave",i.leave),a(e.display.scroller,"drop",i.drop)}}function gd(e){e.options.lineWrapping?(le(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Q(e.display.wrapper,"CodeMirror-wrap"),so(e)),xo(e),zt(e),En(e),setTimeout(function(){return rn(e)},100)}function tt(e,t){var n=this;if(!(this instanceof tt))return new tt(e,t);this.options=t=t?ge(t):{},ge(ts,t,!1);var r=t.value;typeof r=="string"?r=new Mt(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new tt.inputStyles[t.inputStyle](this),a=this.display=new Ef(e,r,i,t);a.wrapper.CodeMirror=this,es(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),nl(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new qe,keySeq:null,specialChars:null},t.autofocus&&!M&&a.input.focus(),s&&h<11&&setTimeout(function(){return n.display.input.reset(!0)},20),md(this),Gf(),Ir(this),this.curOp.forceUpdate=!0,pl(this,r),t.autofocus&&!M||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&So(n)},20):en(this);for(var l in Ei)Ei.hasOwnProperty(l)&&Ei[l](this,t[l],fn);al(this),t.finishInit&&t.finishInit(this);for(var u=0;u20*20}Fe(t.scroller,"touchstart",function(f){if(!ot(e,f)&&!a(f)&&!Wo(e,f)){t.input.ensurePolled(),clearTimeout(n);var m=+new Date;t.activeTouch={start:m,moved:!1,prev:m-r.end<=300?r:null},f.touches.length==1&&(t.activeTouch.left=f.touches[0].pageX,t.activeTouch.top=f.touches[0].pageY)}}),Fe(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),Fe(t.scroller,"touchend",function(f){var m=t.activeTouch;if(m&&!lr(t,f)&&m.left!=null&&!m.moved&&new Date-m.start<300){var A=e.coordsChar(t.activeTouch,"page"),P;!m.prev||l(m,m.prev)?P=new Ye(A,A):!m.prev.prev||l(m,m.prev.prev)?P=e.findWordAt(A):P=new Ye(ne(A.line,0),Re(e.doc,ne(A.line+1,0))),e.setSelection(P.anchor,P.head),e.focus(),kt(f)}i()}),Fe(t.scroller,"touchcancel",i),Fe(t.scroller,"scroll",function(){t.scroller.clientHeight&&(An(e,t.scroller.scrollTop),Dr(e,t.scroller.scrollLeft,!0),it(e,"scroll",e))}),Fe(t.scroller,"mousewheel",function(f){return ul(e,f)}),Fe(t.scroller,"DOMMouseScroll",function(f){return ul(e,f)}),Fe(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(f){ot(e,f)||dr(f)},over:function(f){ot(e,f)||(Kf(e,f),dr(f))},start:function(f){return $f(e,f)},drop:gt(e,Uf),leave:function(f){ot(e,f)||Ol(e)}};var u=t.input.getField();Fe(u,"keyup",function(f){return Zl.call(e,f)}),Fe(u,"keydown",gt(e,Gl)),Fe(u,"keypress",gt(e,Xl)),Fe(u,"focus",function(f){return So(e,f)}),Fe(u,"blur",function(f){return en(e,f)})}var Uo=[];tt.defineInitHook=function(e){return Uo.push(e)};function Xn(e,t,n,r){var i=e.doc,a;n==null&&(n="add"),n=="smart"&&(i.mode.indent?a=wn(e,t).state:n="prev");var l=e.options.tabSize,u=Ae(i,t),f=Oe(u.text,null,l);u.stateAfter&&(u.stateAfter=null);var m=u.text.match(/^\s*/)[0],A;if(!r&&!/\S/.test(u.text))A=0,n="not";else if(n=="smart"&&(A=i.mode.indent(a,u.text.slice(m.length),u.text),A==Ze||A>150)){if(!r)return;n="prev"}n=="prev"?t>i.first?A=Oe(Ae(i,t-1).text,null,l):A=0:n=="add"?A=f+e.options.indentUnit:n=="subtract"?A=f-e.options.indentUnit:typeof n=="number"&&(A=f+n),A=Math.max(0,A);var P="",J=0;if(e.options.indentWithTabs)for(var Y=Math.floor(A/l);Y;--Y)J+=l,P+=" ";if(Jl,f=Bt(t),m=null;if(u&&r.ranges.length>1)if(Qt&&Qt.text.join(` +`)==t){if(r.ranges.length%Qt.text.length==0){m=[];for(var A=0;A=0;J--){var Y=r.ranges[J],ie=Y.from(),ue=Y.to();Y.empty()&&(n&&n>0?ie=ne(ie.line,ie.ch-n):e.state.overwrite&&!u?ue=ne(ue.line,Math.min(Ae(a,ue.line).text.length,ue.ch+ce(f).length)):u&&Qt&&Qt.lineWise&&Qt.text.join(` +`)==f.join(` +`)&&(ie=ue=ne(ie.line,0)));var me={from:ie,to:ue,text:m?m[J%m.length]:f,origin:i||(u?"paste":e.state.cutIncoming>l?"cut":"+input")};an(e.doc,me),ht(e,"inputRead",e,me)}t&&!u&&ns(e,t),tn(e),e.curOp.updateInput<2&&(e.curOp.updateInput=P),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function rs(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),!t.isReadOnly()&&!t.options.disableInput&&t.hasFocus()&&Nt(t,function(){return $o(t,n,0,null,"paste")}),!0}function ns(e,t){if(!(!e.options.electricChars||!e.options.smartIndent))for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var a=e.getModeAt(i.head),l=!1;if(a.electricChars){for(var u=0;u-1){l=Xn(e,i.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(Ae(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Xn(e,i.head.line,"smart"));l&&ht(e,"electricInput",e,i.head.line)}}}function is(e){for(var t=[],n=[],r=0;ra&&(Xn(this,u.head.line,r,!0),a=u.head.line,l==this.doc.sel.primIndex&&tn(this));else{var f=u.from(),m=u.to(),A=Math.max(a,f.line);a=Math.min(this.lastLine(),m.line-(m.ch?0:1))+1;for(var P=A;P0&&Oo(this.doc,l,new Ye(f,J[l].to()),ke)}}}),getTokenAt:function(r,i){return ga(this,r,i)},getLineTokens:function(r,i){return ga(this,ne(r),i,!0)},getTokenTypeAt:function(r){r=Re(this.doc,r);var i=da(this,Ae(this.doc,r.line)),a=0,l=(i.length-1)/2,u=r.ch,f;if(u==0)f=i[2];else for(;;){var m=a+l>>1;if((m?i[m*2-1]:0)>=u)l=m;else if(i[m*2+1]f&&(r=f,l=!0),u=Ae(this.doc,r)}else u=r;return ci(this,u,{top:0,left:0},i||"page",a||l).top+(l?this.doc.height-ar(u):0)},defaultTextHeight:function(){return Vr(this.display)},defaultCharWidth:function(){return Jr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(r,i,a,l,u){var f=this.display;r=Xt(this,Re(this.doc,r));var m=r.bottom,A=r.left;if(i.style.position="absolute",i.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(i),f.sizer.appendChild(i),l=="over")m=r.top;else if(l=="above"||l=="near"){var P=Math.max(f.wrapper.clientHeight,this.doc.height),J=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);(l=="above"||r.bottom+i.offsetHeight>P)&&r.top>i.offsetHeight?m=r.top-i.offsetHeight:r.bottom+i.offsetHeight<=P&&(m=r.bottom),A+i.offsetWidth>J&&(A=J-i.offsetWidth)}i.style.top=m+"px",i.style.left=i.style.right="",u=="right"?(A=f.sizer.clientWidth-i.offsetWidth,i.style.right="0px"):(u=="left"?A=0:u=="middle"&&(A=(f.sizer.clientWidth-i.offsetWidth)/2),i.style.left=A+"px"),a&&hf(this,{left:A,top:m,right:A+i.offsetWidth,bottom:m+i.offsetHeight})},triggerOnKeyDown:Tt(Gl),triggerOnKeyPress:Tt(Xl),triggerOnKeyUp:Zl,triggerOnMouseDown:Tt(Yl),execCommand:function(r){if($n.hasOwnProperty(r))return $n[r].call(null,this)},triggerElectric:Tt(function(r){ns(this,r)}),findPosH:function(r,i,a,l){var u=1;i<0&&(u=-1,i=-i);for(var f=Re(this.doc,r),m=0;m0&&A(a.charAt(l-1));)--l;for(;u.5||this.options.lineWrapping)&&xo(this),it(this,"refresh",this)}),swapDoc:Tt(function(r){var i=this.doc;return i.cm=null,this.state.selectingText&&this.state.selectingText(),pl(this,r),En(this),this.display.input.reset(),Mn(this,r.scrollLeft,r.scrollTop),this.curOp.forceScroll=!0,ht(this,"swapDoc",this,i),i}),phrase:function(r){var i=this.options.phrases;return i&&Object.prototype.hasOwnProperty.call(i,r)?i[r]:r},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Wt(e),e.registerHelper=function(r,i,a){n.hasOwnProperty(r)||(n[r]=e[r]={_global:[]}),n[r][i]=a},e.registerGlobalHelper=function(r,i,a,l){e.registerHelper(r,i,l),n[r]._global.push({pred:a,val:l})}}function Go(e,t,n,r,i){var a=t,l=n,u=Ae(e,t.line),f=i&&e.direction=="rtl"?-n:n;function m(){var _e=t.line+f;return _e=e.first+e.size?!1:(t=new ne(_e,t.ch,t.sticky),u=Ae(e,_e))}function A(_e){var be;if(r=="codepoint"){var Ce=u.text.charCodeAt(t.ch+(n>0?0:-1));if(isNaN(Ce))be=null;else{var Ne=n>0?Ce>=55296&&Ce<56320:Ce>=56320&&Ce<57343;be=new ne(t.line,Math.max(0,Math.min(u.text.length,t.ch+n*(Ne?2:1))),-n)}}else i?be=Vf(e.cm,u,t,n):be=jo(u,t,n);if(be==null)if(!_e&&m())t=Ro(i,e.cm,u,t.line,f);else return!1;else t=be;return!0}if(r=="char"||r=="codepoint")A();else if(r=="column")A(!0);else if(r=="word"||r=="group")for(var P=null,J=r=="group",Y=e.cm&&e.cm.getHelper(t,"wordChars"),ie=!0;!(n<0&&!A(!ie));ie=!1){var ue=u.text.charAt(t.ch)||` +`,me=Me(ue,Y)?"w":J&&ue==` +`?"n":!J||/\s/.test(ue)?null:"p";if(J&&!ie&&!me&&(me="s"),P&&P!=me){n<0&&(n=1,A(),t.sticky="after");break}if(me&&(P=me),n>0&&!A(!ie))break}var ve=wi(e,t,a,l,!0);return Xe(a,ve)&&(ve.hitSide=!0),ve}function as(e,t,n,r){var i=e.doc,a=t.left,l;if(r=="page"){var u=Math.min(e.display.wrapper.clientHeight,pe(e).innerHeight||i(e).documentElement.clientHeight),f=Math.max(u-.5*Vr(e.display),3);l=(n>0?t.bottom:t.top)+n*f}else r=="line"&&(l=n>0?t.bottom+3:t.top-3);for(var m;m=mo(e,a,l),!!m.outside;){if(n<0?l<=0:l>=i.height){m.hitSide=!0;break}l+=n*5}return m}var Qe=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new qe,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Qe.prototype.init=function(e){var t=this,n=this,r=n.cm,i=n.div=e.lineDiv;i.contentEditable=!0,Ko(i,r.options.spellcheck,r.options.autocorrect,r.options.autocapitalize);function a(u){for(var f=u.target;f;f=f.parentNode){if(f==i)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(f.className))break}return!1}Fe(i,"paste",function(u){!a(u)||ot(r,u)||rs(u,r)||h<=11&&setTimeout(gt(r,function(){return t.updateFromDOM()}),20)}),Fe(i,"compositionstart",function(u){t.composing={data:u.data,done:!1}}),Fe(i,"compositionupdate",function(u){t.composing||(t.composing={data:u.data,done:!1})}),Fe(i,"compositionend",function(u){t.composing&&(u.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),Fe(i,"touchstart",function(){return n.forceCompositionEnd()}),Fe(i,"input",function(){t.composing||t.readFromDOMSoon()});function l(u){if(!(!a(u)||ot(r,u))){if(r.somethingSelected())zi({lineWise:!1,text:r.getSelections()}),u.type=="cut"&&r.replaceSelection("",null,"cut");else if(r.options.lineWiseCopyCut){var f=is(r);zi({lineWise:!0,text:f.text}),u.type=="cut"&&r.operation(function(){r.setSelections(f.ranges,0,ke),r.replaceSelection("",null,"cut")})}else return;if(u.clipboardData){u.clipboardData.clearData();var m=Qt.text.join(` +`);if(u.clipboardData.setData("Text",m),u.clipboardData.getData("Text")==m){u.preventDefault();return}}var A=os(),P=A.firstChild;Ko(P),r.display.lineSpace.insertBefore(A,r.display.lineSpace.firstChild),P.value=Qt.text.join(` +`);var J=B(ze(i));q(P),setTimeout(function(){r.display.lineSpace.removeChild(A),J.focus(),J==i&&n.showPrimarySelection()},50)}}Fe(i,"copy",l),Fe(i,"cut",l)},Qe.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute("aria-label",e):this.div.removeAttribute("aria-label")},Qe.prototype.prepareSelection=function(){var e=Ya(this.cm,!1);return e.focus=B(ze(this.div))==this.div,e},Qe.prototype.showSelection=function(e,t){!e||!this.cm.display.view.length||((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Qe.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Qe.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),i=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||i.line=t.display.viewFrom&&ls(t,r)||{node:u[0].measure.map[2],offset:0},m=i.linee.firstLine()&&(r=ne(r.line-1,Ae(e.doc,r.line-1).length)),i.ch==Ae(e.doc,i.line).text.length&&i.linet.viewTo-1)return!1;var a,l,u;r.line==t.viewFrom||(a=Ar(e,r.line))==0?(l=k(t.view[0].line),u=t.view[0].node):(l=k(t.view[a].line),u=t.view[a-1].node.nextSibling);var f=Ar(e,i.line),m,A;if(f==t.view.length-1?(m=t.viewTo-1,A=t.lineDiv.lastChild):(m=k(t.view[f+1].line)-1,A=t.view[f+1].node.previousSibling),!u)return!1;for(var P=e.doc.splitLines(yd(e,u,A,l,m)),J=ir(e.doc,ne(l,0),ne(m,Ae(e.doc,m).text.length));P.length>1&&J.length>1;)if(ce(P)==ce(J))P.pop(),J.pop(),m--;else if(P[0]==J[0])P.shift(),J.shift(),l++;else break;for(var Y=0,ie=0,ue=P[0],me=J[0],ve=Math.min(ue.length,me.length);Yr.ch&&_e.charCodeAt(_e.length-ie-1)==be.charCodeAt(be.length-ie-1);)Y--,ie++;P[P.length-1]=_e.slice(0,_e.length-ie).replace(/^\u200b+/,""),P[0]=P[0].slice(Y).replace(/\u200b+$/,"");var Ne=ne(l,Y),Ie=ne(m,J.length?ce(J).length-ie:0);if(P.length>1||P[0]||ye(Ne,Ie))return ln(e.doc,P,Ne,Ie,"+input"),!0},Qe.prototype.ensurePolled=function(){this.forceCompositionEnd()},Qe.prototype.reset=function(){this.forceCompositionEnd()},Qe.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Qe.prototype.readFromDOMSoon=function(){var e=this;this.readDOMTimeout==null&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing)if(e.composing.done)e.composing=null;else return;e.updateFromDOM()},80))},Qe.prototype.updateFromDOM=function(){var e=this;(this.cm.isReadOnly()||!this.pollContent())&&Nt(this.cm,function(){return zt(e.cm)})},Qe.prototype.setUneditable=function(e){e.contentEditable="false"},Qe.prototype.onKeyPress=function(e){e.charCode==0||this.composing||(e.preventDefault(),this.cm.isReadOnly()||gt(this.cm,$o)(this.cm,String.fromCharCode(e.charCode==null?e.keyCode:e.charCode),0))},Qe.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(e!="nocursor")},Qe.prototype.onContextMenu=function(){},Qe.prototype.resetPosition=function(){},Qe.prototype.needsContentAttribute=!0;function ls(e,t){var n=po(e,t.line);if(!n||n.hidden)return null;var r=Ae(e.doc,t.line),i=Na(n,r,t.line),a=Pe(r,e.doc.direction),l="left";if(a){var u=Pt(a,t.ch);l=u%2?"right":"left"}var f=ja(i.map,t.ch,l);return f.offset=f.collapse=="right"?f.end:f.start,f}function bd(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function dn(e,t){return t&&(e.bad=!0),e}function yd(e,t,n,r,i){var a="",l=!1,u=e.doc.lineSeparator(),f=!1;function m(Y){return function(ie){return ie.id==Y}}function A(){l&&(a+=u,f&&(a+=u),l=f=!1)}function P(Y){Y&&(A(),a+=Y)}function J(Y){if(Y.nodeType==1){var ie=Y.getAttribute("cm-text");if(ie){P(ie);return}var ue=Y.getAttribute("cm-marker"),me;if(ue){var ve=e.findMarks(ne(r,0),ne(i+1,0),m(+ue));ve.length&&(me=ve[0].find(0))&&P(ir(e.doc,me.from,me.to).join(u));return}if(Y.getAttribute("contenteditable")=="false")return;var _e=/^(pre|div|p|li|table|br)$/i.test(Y.nodeName);if(!/^br$/i.test(Y.nodeName)&&Y.textContent.length==0)return;_e&&A();for(var be=0;be=9&&t.hasSelection&&(t.hasSelection=null),n.poll()}),Fe(i,"paste",function(l){ot(r,l)||rs(l,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())});function a(l){if(!ot(r,l)){if(r.somethingSelected())zi({lineWise:!1,text:r.getSelections()});else if(r.options.lineWiseCopyCut){var u=is(r);zi({lineWise:!0,text:u.text}),l.type=="cut"?r.setSelections(u.ranges,null,ke):(n.prevInput="",i.value=u.text.join(` +`),q(i))}else return;l.type=="cut"&&(r.state.cutIncoming=+new Date)}}Fe(i,"cut",a),Fe(i,"copy",a),Fe(e.scroller,"paste",function(l){if(!(lr(e,l)||ot(r,l))){if(!i.dispatchEvent){r.state.pasteIncoming=+new Date,n.focus();return}var u=new Event("paste");u.clipboardData=l.clipboardData,i.dispatchEvent(u)}}),Fe(e.lineSpace,"selectstart",function(l){lr(e,l)||kt(l)}),Fe(i,"compositionstart",function(){var l=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:l,range:r.markText(l,r.getCursor("to"),{className:"CodeMirror-composing"})}}),Fe(i,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},st.prototype.createField=function(e){this.wrapper=os(),this.textarea=this.wrapper.firstChild;var t=this.cm.options;Ko(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},st.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},st.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Ya(e);if(e.options.moveInputWithCursor){var i=Xt(e,n.sel.primary().head,"div"),a=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-a.left))}return r},st.prototype.showSelection=function(e){var t=this.cm,n=t.display;V(n.cursorDiv,e.cursors),V(n.selectionDiv,e.selection),e.teTop!=null&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},st.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&q(this.textarea),s&&h>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",s&&h>=9&&(this.hasSelection=null));this.resetting=!1}},st.prototype.getField=function(){return this.textarea},st.prototype.supportsTouch=function(){return!1},st.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!M||B(ze(this.textarea))!=this.textarea))try{this.textarea.focus()}catch{}},st.prototype.blur=function(){this.textarea.blur()},st.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},st.prototype.receivedFocus=function(){this.slowPoll()},st.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},st.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0;function n(){var r=t.poll();!r&&!e?(e=!0,t.polling.set(60,n)):(t.pollingFast=!1,t.slowPoll())}t.polling.set(20,n)},st.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||hr(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(s&&h>=9&&this.hasSelection===i||H&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=i.charCodeAt(0);if(a==8203&&!r&&(r="\u200B"),a==8666)return this.reset(),this.cm.execCommand("undo")}for(var l=0,u=Math.min(r.length,i.length);l1e3||i.indexOf(` +`)>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},st.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},st.prototype.onKeyPress=function(){s&&h>=9&&(this.hasSelection=null),this.fastPoll()},st.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var a=Mr(n,e),l=r.scroller.scrollTop;if(!a||d)return;var u=n.options.resetSelectionOnContextMenu;u&&n.doc.sel.contains(a)==-1&>(n,wt)(n.doc,yr(a),ke);var f=i.style.cssText,m=t.wrapper.style.cssText,A=t.wrapper.offsetParent.getBoundingClientRect();t.wrapper.style.cssText="position: static",i.style.cssText=`position: absolute; width: 30px; height: 30px; + top: `+(e.clientY-A.top-5)+"px; left: "+(e.clientX-A.left-5)+`px; + z-index: 1000; background: `+(s?"rgba(255, 255, 255, .05)":"transparent")+`; + outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var P;g&&(P=i.ownerDocument.defaultView.scrollY),r.input.focus(),g&&i.ownerDocument.defaultView.scrollTo(null,P),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=Y,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll);function J(){if(i.selectionStart!=null){var ue=n.somethingSelected(),me="\u200B"+(ue?i.value:"");i.value="\u21DA",i.value=me,t.prevInput=ue?"":"\u200B",i.selectionStart=1,i.selectionEnd=me.length,r.selForContextMenu=n.doc.sel}}function Y(){if(t.contextMenuPending==Y&&(t.contextMenuPending=!1,t.wrapper.style.cssText=m,i.style.cssText=f,s&&h<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=l),i.selectionStart!=null)){(!s||s&&h<9)&&J();var ue=0,me=function(){r.selForContextMenu==n.doc.sel&&i.selectionStart==0&&i.selectionEnd>0&&t.prevInput=="\u200B"?gt(n,Ll)(n):ue++<10?r.detectingSelectAll=setTimeout(me,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(me,200)}}if(s&&h>=9&&J(),F){dr(e);var ie=function(){_t(window,"mouseup",ie),setTimeout(Y,20)};Fe(window,"mouseup",ie)}else setTimeout(Y,50)},st.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=e=="nocursor",this.textarea.readOnly=!!e},st.prototype.setUneditable=function(){},st.prototype.needsContentAttribute=!1;function _d(e,t){if(t=t?ge(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),t.autofocus==null){var n=B(ze(e));t.autofocus=n==e||e.getAttribute("autofocus")!=null&&n==document.body}function r(){e.value=u.getValue()}var i;if(e.form&&(Fe(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var l=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=l}}catch{}}t.finishInit=function(f){f.save=r,f.getTextArea=function(){return e},f.toTextArea=function(){f.toTextArea=isNaN,r(),e.parentNode.removeChild(f.getWrapperElement()),e.style.display="",e.form&&(_t(e.form,"submit",r),!t.leaveSubmitMethodAlone&&typeof e.form.submit=="function"&&(e.form.submit=i))}},e.style.display="none";var u=tt(function(f){return e.parentNode.insertBefore(f,e.nextSibling)},t);return u}function kd(e){e.off=_t,e.on=Fe,e.wheelEventPixels=zf,e.Doc=Mt,e.splitLines=Bt,e.countColumn=Oe,e.findColumn=Ge,e.isWordChar=we,e.Pass=Ze,e.signal=it,e.Line=Xr,e.changeEnd=xr,e.scrollbarModel=rl,e.Pos=ne,e.cmpPos=ye,e.modes=Wr,e.mimeModes=Kt,e.resolveMode=Ur,e.getMode=$r,e.modeExtensions=gr,e.extendMode=Kr,e.copyState=Vt,e.startState=Gr,e.innerMode=_n,e.commands=$n,e.keyMap=ur,e.keyName=Bl,e.isModifierKey=Rl,e.lookupKey=un,e.normalizeKeyMap=Qf,e.StringStream=at,e.SharedTextMarker=Bn,e.TextMarker=kr,e.LineWidget=Hn,e.e_preventDefault=kt,e.e_stopPropagation=Hr,e.e_stop=dr,e.addClass=le,e.contains=I,e.rmClass=Q,e.keyNames=wr}pd(tt),vd(tt);var wd="iter insert remove copy getEditor constructor".split(" ");for(var Ai in Mt.prototype)Mt.prototype.hasOwnProperty(Ai)&&Se(wd,Ai)<0&&(tt.prototype[Ai]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mt.prototype[Ai]));return Wt(Mt),tt.inputStyles={textarea:st,contenteditable:Qe},tt.defineMode=function(e){!tt.defaults.mode&&e!="null"&&(tt.defaults.mode=e),Gt.apply(this,arguments)},tt.defineMIME=Cr,tt.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),tt.defineMIME("text/plain","null"),tt.defineExtension=function(e,t){tt.prototype[e]=t},tt.defineDocExtension=function(e,t){Mt.prototype[e]=t},tt.fromTextArea=_d,kd(tt),tt.version="5.65.18",tt})});var Yn=Ke((us,cs)=>{(function(o){typeof us=="object"&&typeof cs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.overlayMode=function(p,v,C){return{startState:function(){return{base:o.startState(p),overlay:o.startState(v),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(b){return{base:o.copyState(p,b.base),overlay:o.copyState(v,b.overlay),basePos:b.basePos,baseCur:null,overlayPos:b.overlayPos,overlayCur:null}},token:function(b,S){return(b!=S.streamSeen||Math.min(S.basePos,S.overlayPos){(function(o){typeof fs=="object"&&typeof ds=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=/^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,v=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,C=/[*+-]\s/;o.commands.newlineAndIndentContinueMarkdownList=function(S){if(S.getOption("disableInput"))return o.Pass;for(var s=S.listSelections(),h=[],g=0;g\s*$/.test(E),M=!/>\s*$/.test(E);(R||M)&&S.replaceRange("",{line:T.line,ch:0},{line:T.line,ch:T.ch+1}),h[g]=` +`}else{var H=z[1],Z=z[5],ee=!(C.test(z[2])||z[2].indexOf(">")>=0),re=ee?parseInt(z[3],10)+1+z[4]:z[2].replace("x"," ");h[g]=` +`+H+re+Z,ee&&b(S,T)}}S.replaceSelections(h)};function b(S,s){var h=s.line,g=0,T=0,x=p.exec(S.getLine(h)),c=x[1];do{g+=1;var d=h+g,w=S.getLine(d),E=p.exec(w);if(E){var z=E[1],y=parseInt(x[3],10)+g-T,R=parseInt(E[3],10),M=R;if(c===z&&!isNaN(R))y===R&&(M=R+1),y>R&&(M=y+1),S.replaceRange(w.replace(p,z+M+E[4]+E[5]),{line:d,ch:0},{line:d,ch:w.length});else{if(c.length>z.length||c.length{(function(o){typeof hs=="object"&&typeof gs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){o.defineOption("placeholder","",function(h,g,T){var x=T&&T!=o.Init;if(g&&!x)h.on("blur",b),h.on("change",S),h.on("swapDoc",S),o.on(h.getInputField(),"compositionupdate",h.state.placeholderCompose=function(){C(h)}),S(h);else if(!g&&x){h.off("blur",b),h.off("change",S),h.off("swapDoc",S),o.off(h.getInputField(),"compositionupdate",h.state.placeholderCompose),p(h);var c=h.getWrapperElement();c.className=c.className.replace(" CodeMirror-empty","")}g&&!h.hasFocus()&&b(h)});function p(h){h.state.placeholder&&(h.state.placeholder.parentNode.removeChild(h.state.placeholder),h.state.placeholder=null)}function v(h){p(h);var g=h.state.placeholder=document.createElement("pre");g.style.cssText="height: 0; overflow: visible",g.style.direction=h.getOption("direction"),g.className="CodeMirror-placeholder CodeMirror-line-like";var T=h.getOption("placeholder");typeof T=="string"&&(T=document.createTextNode(T)),g.appendChild(T),h.display.lineSpace.insertBefore(g,h.display.lineSpace.firstChild)}function C(h){setTimeout(function(){var g=!1;if(h.lineCount()==1){var T=h.getInputField();g=T.nodeName=="TEXTAREA"?!h.getLine(0).length:!/[^\u200b]/.test(T.querySelector(".CodeMirror-line").textContent)}g?v(h):p(h)},20)}function b(h){s(h)&&v(h)}function S(h){var g=h.getWrapperElement(),T=s(h);g.className=g.className.replace(" CodeMirror-empty","")+(T?" CodeMirror-empty":""),T?v(h):p(h)}function s(h){return h.lineCount()===1&&h.getLine(0)===""}})});var ys=Ke((vs,bs)=>{(function(o){typeof vs=="object"&&typeof bs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineOption("styleSelectedText",!1,function(x,c,d){var w=d&&d!=o.Init;c&&!w?(x.state.markedSelection=[],x.state.markedSelectionStyle=typeof c=="string"?c:"CodeMirror-selectedtext",g(x),x.on("cursorActivity",p),x.on("change",v)):!c&&w&&(x.off("cursorActivity",p),x.off("change",v),h(x),x.state.markedSelection=x.state.markedSelectionStyle=null)});function p(x){x.state.markedSelection&&x.operation(function(){T(x)})}function v(x){x.state.markedSelection&&x.state.markedSelection.length&&x.operation(function(){h(x)})}var C=8,b=o.Pos,S=o.cmpPos;function s(x,c,d,w){if(S(c,d)!=0)for(var E=x.state.markedSelection,z=x.state.markedSelectionStyle,y=c.line;;){var R=y==c.line?c:b(y,0),M=y+C,H=M>=d.line,Z=H?d:b(M,0),ee=x.markText(R,Z,{className:z});if(w==null?E.push(ee):E.splice(w++,0,ee),H)break;y=M}}function h(x){for(var c=x.state.markedSelection,d=0;d1)return g(x);var c=x.getCursor("start"),d=x.getCursor("end"),w=x.state.markedSelection;if(!w.length)return s(x,c,d);var E=w[0].find(),z=w[w.length-1].find();if(!E||!z||d.line-c.line<=C||S(c,z.to)>=0||S(d,E.from)<=0)return g(x);for(;S(c,E.from)>0;)w.shift().clear(),E=w[0].find();for(S(c,E.from)<0&&(E.to.line-c.line0&&(d.line-z.from.line{(function(o){typeof xs=="object"&&typeof _s=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=o.Pos;function v(y){var R=y.flags;return R??(y.ignoreCase?"i":"")+(y.global?"g":"")+(y.multiline?"m":"")}function C(y,R){for(var M=v(y),H=M,Z=0;Zre);N++){var F=y.getLine(ee++);H=H==null?F:H+` +`+F}Z=Z*2,R.lastIndex=M.ch;var D=R.exec(H);if(D){var Q=H.slice(0,D.index).split(` +`),j=D[0].split(` +`),V=M.line+Q.length-1,_=Q[Q.length-1].length;return{from:p(V,_),to:p(V+j.length-1,j.length==1?_+j[0].length:j[j.length-1].length),match:D}}}}function h(y,R,M){for(var H,Z=0;Z<=y.length;){R.lastIndex=Z;var ee=R.exec(y);if(!ee)break;var re=ee.index+ee[0].length;if(re>y.length-M)break;(!H||re>H.index+H[0].length)&&(H=ee),Z=ee.index+1}return H}function g(y,R,M){R=C(R,"g");for(var H=M.line,Z=M.ch,ee=y.firstLine();H>=ee;H--,Z=-1){var re=y.getLine(H),N=h(re,R,Z<0?0:re.length-Z);if(N)return{from:p(H,N.index),to:p(H,N.index+N[0].length),match:N}}}function T(y,R,M){if(!b(R))return g(y,R,M);R=C(R,"gm");for(var H,Z=1,ee=y.getLine(M.line).length-M.ch,re=M.line,N=y.firstLine();re>=N;){for(var F=0;F=N;F++){var D=y.getLine(re--);H=H==null?D:D+` +`+H}Z*=2;var Q=h(H,R,ee);if(Q){var j=H.slice(0,Q.index).split(` +`),V=Q[0].split(` +`),_=re+j.length,K=j[j.length-1].length;return{from:p(_,K),to:p(_+V.length-1,V.length==1?K+V[0].length:V[V.length-1].length),match:Q}}}}var x,c;String.prototype.normalize?(x=function(y){return y.normalize("NFD").toLowerCase()},c=function(y){return y.normalize("NFD")}):(x=function(y){return y.toLowerCase()},c=function(y){return y});function d(y,R,M,H){if(y.length==R.length)return M;for(var Z=0,ee=M+Math.max(0,y.length-R.length);;){if(Z==ee)return Z;var re=Z+ee>>1,N=H(y.slice(0,re)).length;if(N==M)return re;N>M?ee=re:Z=re+1}}function w(y,R,M,H){if(!R.length)return null;var Z=H?x:c,ee=Z(R).split(/\r|\n\r?/);e:for(var re=M.line,N=M.ch,F=y.lastLine()+1-ee.length;re<=F;re++,N=0){var D=y.getLine(re).slice(N),Q=Z(D);if(ee.length==1){var j=Q.indexOf(ee[0]);if(j==-1)continue e;var M=d(D,Q,j,Z)+N;return{from:p(re,d(D,Q,j,Z)+N),to:p(re,d(D,Q,j+ee[0].length,Z)+N)}}else{var V=Q.length-ee[0].length;if(Q.slice(V)!=ee[0])continue e;for(var _=1;_=F;re--,N=-1){var D=y.getLine(re);N>-1&&(D=D.slice(0,N));var Q=Z(D);if(ee.length==1){var j=Q.lastIndexOf(ee[0]);if(j==-1)continue e;return{from:p(re,d(D,Q,j,Z)),to:p(re,d(D,Q,j+ee[0].length,Z))}}else{var V=ee[ee.length-1];if(Q.slice(0,V.length)!=V)continue e;for(var _=1,M=re-ee.length+1;_(this.doc.getLine(R.line)||"").length&&(R.ch=0,R.line++)),o.cmpPos(R,this.doc.clipPos(R))!=0))return this.atOccurrence=!1;var M=this.matches(y,R);if(this.afterEmptyMatch=M&&o.cmpPos(M.from,M.to)==0,M)return this.pos=M,this.atOccurrence=!0,this.pos.match||!0;var H=p(y?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:H,to:H},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(y,R){if(this.atOccurrence){var M=o.splitLines(y);this.doc.replaceRange(M,this.pos.from,this.pos.to,R),this.pos.to=p(this.pos.from.line+M.length-1,M[M.length-1].length+(M.length==1?this.pos.from.ch:0))}}},o.defineExtension("getSearchCursor",function(y,R,M){return new z(this.doc,y,R,M)}),o.defineDocExtension("getSearchCursor",function(y,R,M){return new z(this,y,R,M)}),o.defineExtension("selectMatches",function(y,R){for(var M=[],H=this.getSearchCursor(y,this.getCursor("from"),R);H.findNext()&&!(o.cmpPos(H.to(),this.getCursor("to"))>0);)M.push({anchor:H.from(),head:H.to()});M.length&&this.setSelections(M,0)})})});var Vo=Ke((ws,Ss)=>{(function(o){typeof ws=="object"&&typeof Ss=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(I,B,le,xe,q,L){this.indented=I,this.column=B,this.type=le,this.info=xe,this.align=q,this.prev=L}function v(I,B,le,xe){var q=I.indented;return I.context&&I.context.type=="statement"&&le!="statement"&&(q=I.context.indented),I.context=new p(q,B,le,xe,null,I.context)}function C(I){var B=I.context.type;return(B==")"||B=="]"||B=="}")&&(I.indented=I.context.indented),I.context=I.context.prev}function b(I,B,le){if(B.prevToken=="variable"||B.prevToken=="type"||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(I.string.slice(0,le))||B.typeAtEndOfLine&&I.column()==I.indentation())return!0}function S(I){for(;;){if(!I||I.type=="top")return!0;if(I.type=="}"&&I.prev.info!="namespace")return!1;I=I.prev}}o.defineMode("clike",function(I,B){var le=I.indentUnit,xe=B.statementIndentUnit||le,q=B.dontAlignCalls,L=B.keywords||{},de=B.types||{},ze=B.builtin||{},pe=B.blockKeywords||{},Ee=B.defKeywords||{},ge=B.atoms||{},Oe=B.hooks||{},qe=B.multiLineStrings,Se=B.indentStatements!==!1,je=B.indentSwitch!==!1,Ze=B.namespaceSeparator,ke=B.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,Je=B.numberStart||/[\d\.]/,He=B.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,Ge=B.isOperatorChar||/[+\-*&%=<>!?|\/]/,U=B.isIdentifierChar||/[\w\$_\xa1-\uffff]/,G=B.isReservedIdentifier||!1,ce,Be;function te(we,Me){var Le=we.next();if(Oe[Le]){var $=Oe[Le](we,Me);if($!==!1)return $}if(Le=='"'||Le=="'")return Me.tokenize=fe(Le),Me.tokenize(we,Me);if(Je.test(Le)){if(we.backUp(1),we.match(He))return"number";we.next()}if(ke.test(Le))return ce=Le,null;if(Le=="/"){if(we.eat("*"))return Me.tokenize=oe,oe(we,Me);if(we.eat("/"))return we.skipToEnd(),"comment"}if(Ge.test(Le)){for(;!we.match(/^\/[\/*]/,!1)&&we.eat(Ge););return"operator"}if(we.eatWhile(U),Ze)for(;we.match(Ze);)we.eatWhile(U);var W=we.current();return h(L,W)?(h(pe,W)&&(ce="newstatement"),h(Ee,W)&&(Be=!0),"keyword"):h(de,W)?"type":h(ze,W)||G&&G(W)?(h(pe,W)&&(ce="newstatement"),"builtin"):h(ge,W)?"atom":"variable"}function fe(we){return function(Me,Le){for(var $=!1,W,se=!1;(W=Me.next())!=null;){if(W==we&&!$){se=!0;break}$=!$&&W=="\\"}return(se||!($||qe))&&(Le.tokenize=null),"string"}}function oe(we,Me){for(var Le=!1,$;$=we.next();){if($=="/"&&Le){Me.tokenize=null;break}Le=$=="*"}return"comment"}function Ue(we,Me){B.typeFirstDefinitions&&we.eol()&&S(Me.context)&&(Me.typeAtEndOfLine=b(we,Me,we.pos))}return{startState:function(we){return{tokenize:null,context:new p((we||0)-le,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(we,Me){var Le=Me.context;if(we.sol()&&(Le.align==null&&(Le.align=!1),Me.indented=we.indentation(),Me.startOfLine=!0),we.eatSpace())return Ue(we,Me),null;ce=Be=null;var $=(Me.tokenize||te)(we,Me);if($=="comment"||$=="meta")return $;if(Le.align==null&&(Le.align=!0),ce==";"||ce==":"||ce==","&&we.match(/^\s*(?:\/\/.*)?$/,!1))for(;Me.context.type=="statement";)C(Me);else if(ce=="{")v(Me,we.column(),"}");else if(ce=="[")v(Me,we.column(),"]");else if(ce=="(")v(Me,we.column(),")");else if(ce=="}"){for(;Le.type=="statement";)Le=C(Me);for(Le.type=="}"&&(Le=C(Me));Le.type=="statement";)Le=C(Me)}else ce==Le.type?C(Me):Se&&((Le.type=="}"||Le.type=="top")&&ce!=";"||Le.type=="statement"&&ce=="newstatement")&&v(Me,we.column(),"statement",we.current());if($=="variable"&&(Me.prevToken=="def"||B.typeFirstDefinitions&&b(we,Me,we.start)&&S(Me.context)&&we.match(/^\s*\(/,!1))&&($="def"),Oe.token){var W=Oe.token(we,Me,$);W!==void 0&&($=W)}return $=="def"&&B.styleDefs===!1&&($="variable"),Me.startOfLine=!1,Me.prevToken=Be?"def":$||ce,Ue(we,Me),$},indent:function(we,Me){if(we.tokenize!=te&&we.tokenize!=null||we.typeAtEndOfLine&&S(we.context))return o.Pass;var Le=we.context,$=Me&&Me.charAt(0),W=$==Le.type;if(Le.type=="statement"&&$=="}"&&(Le=Le.prev),B.dontIndentStatements)for(;Le.type=="statement"&&B.dontIndentStatements.test(Le.info);)Le=Le.prev;if(Oe.indent){var se=Oe.indent(we,Le,Me,le);if(typeof se=="number")return se}var De=Le.prev&&Le.prev.info=="switch";if(B.allmanIndentation&&/[{(]/.test($)){for(;Le.type!="top"&&Le.type!="}";)Le=Le.prev;return Le.indented}return Le.type=="statement"?Le.indented+($=="{"?0:xe):Le.align&&(!q||Le.type!=")")?Le.column+(W?0:1):Le.type==")"&&!W?Le.indented+xe:Le.indented+(W?0:le)+(!W&&De&&!/^(?:case|default)\b/.test(Me)?le:0)},electricInput:je?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}});function s(I){for(var B={},le=I.split(" "),xe=0;xe!?|\/#:@]/,hooks:{"@":function(I){return I.eatWhile(/[\w\$_]/),"meta"},'"':function(I,B){return I.match('""')?(B.tokenize=j,B.tokenize(I,B)):!1},"'":function(I){return I.match(/^(\\[^'\s]+|[^\\'])'/)?"string-2":(I.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},"=":function(I,B){var le=B.context;return le.type=="}"&&le.align&&I.eat(">")?(B.context=new p(le.indented,le.column,le.type,le.info,null,le.prev),"operator"):!1},"/":function(I,B){return I.eat("*")?(B.tokenize=V(1),B.tokenize(I,B)):!1}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}});function _(I){return function(B,le){for(var xe=!1,q,L=!1;!B.eol();){if(!I&&!xe&&B.match('"')){L=!0;break}if(I&&B.match('"""')){L=!0;break}q=B.next(),!xe&&q=="$"&&B.match("{")&&B.skipTo("}"),xe=!xe&&q=="\\"&&!I}return(L||!I)&&(le.tokenize=null),"string"}}Q("text/x-kotlin",{name:"clike",keywords:s("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam value"),types:s("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:s("catch class do else finally for if where try while enum"),defKeywords:s("class val var object interface fun"),atoms:s("true false null this"),hooks:{"@":function(I){return I.eatWhile(/[\w\$_]/),"meta"},"*":function(I,B){return B.prevToken=="."?"variable":"operator"},'"':function(I,B){return B.tokenize=_(I.match('""')),B.tokenize(I,B)},"/":function(I,B){return I.eat("*")?(B.tokenize=V(1),B.tokenize(I,B)):!1},indent:function(I,B,le,xe){var q=le&&le.charAt(0);if((I.prevToken=="}"||I.prevToken==")")&&le=="")return I.indented;if(I.prevToken=="operator"&&le!="}"&&I.context.type!="}"||I.prevToken=="variable"&&q=="."||(I.prevToken=="}"||I.prevToken==")")&&q==".")return xe*2+B.indented;if(B.align&&B.type=="}")return B.indented+(I.context.type==(le||"").charAt(0)?0:xe)}},modeProps:{closeBrackets:{triples:'"'}}}),Q(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:s("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:s("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:s("for while do if else struct"),builtin:s("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:s("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":M},modeProps:{fold:["brace","include"]}}),Q("text/x-nesc",{name:"clike",keywords:s(g+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:E,blockKeywords:s(y),atoms:s("null true false"),hooks:{"#":M},modeProps:{fold:["brace","include"]}}),Q("text/x-objectivec",{name:"clike",keywords:s(g+" "+x),types:z,builtin:s(c),blockKeywords:s(y+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:s(R+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:s("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:Z,hooks:{"#":M,"*":H},modeProps:{fold:["brace","include"]}}),Q("text/x-objectivec++",{name:"clike",keywords:s(g+" "+x+" "+T),types:z,builtin:s(c),blockKeywords:s(y+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:s(R+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:s("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:Z,hooks:{"#":M,"*":H,u:re,U:re,L:re,R:re,0:ee,1:ee,2:ee,3:ee,4:ee,5:ee,6:ee,7:ee,8:ee,9:ee,token:function(I,B,le){if(le=="variable"&&I.peek()=="("&&(B.prevToken==";"||B.prevToken==null||B.prevToken=="}")&&N(I.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),Q("text/x-squirrel",{name:"clike",keywords:s("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:E,blockKeywords:s("case catch class else for foreach if switch try while"),defKeywords:s("function local class"),typeFirstDefinitions:!0,atoms:s("true false null"),hooks:{"#":M},modeProps:{fold:["brace","include"]}});var K=null;function X(I){return function(B,le){for(var xe=!1,q,L=!1;!B.eol();){if(!xe&&B.match('"')&&(I=="single"||B.match('""'))){L=!0;break}if(!xe&&B.match("``")){K=X(I),L=!0;break}q=B.next(),xe=I=="single"&&!xe&&q=="\\"}return L&&(le.tokenize=null),"string"}}Q("text/x-ceylon",{name:"clike",keywords:s("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(I){var B=I.charAt(0);return B===B.toUpperCase()&&B!==B.toLowerCase()},blockKeywords:s("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:s("class dynamic function interface module object package value"),builtin:s("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:s("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(I){return I.eatWhile(/[\w\$_]/),"meta"},'"':function(I,B){return B.tokenize=X(I.match('""')?"triple":"single"),B.tokenize(I,B)},"`":function(I,B){return!K||!I.match("`")?!1:(B.tokenize=K,K=null,B.tokenize(I,B))},"'":function(I){return I.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(I,B,le){if((le=="variable"||le=="type")&&B.prevToken==".")return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})})});var Cs=Ke((Ts,Ls)=>{(function(o){typeof Ts=="object"&&typeof Ls=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("cmake",function(){var p=/({)?[a-zA-Z0-9_]+(})?/;function v(b,S){for(var s,h,g=!1;!b.eol()&&(s=b.next())!=S.pending;){if(s==="$"&&h!="\\"&&S.pending=='"'){g=!0;break}h=s}return g&&b.backUp(1),s==S.pending?S.continueString=!1:S.continueString=!0,"string"}function C(b,S){var s=b.next();return s==="$"?b.match(p)?"variable-2":"variable":S.continueString?(b.backUp(1),v(b,S)):b.match(/(\s+)?\w+\(/)||b.match(/(\s+)?\w+\ \(/)?(b.backUp(1),"def"):s=="#"?(b.skipToEnd(),"comment"):s=="'"||s=='"'?(S.pending=s,v(b,S)):s=="("||s==")"?"bracket":s.match(/[0-9]/)?"number":(b.eatWhile(/[\w-]/),null)}return{startState:function(){var b={};return b.inDefinition=!1,b.inInclude=!1,b.continueString=!1,b.pending=!1,b},token:function(b,S){return b.eatSpace()?null:C(b,S)}}}),o.defineMIME("text/x-cmake","cmake")})});var gn=Ke((Es,zs)=>{(function(o){typeof Es=="object"&&typeof zs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("css",function(F,D){var Q=D.inline;D.propertyKeywords||(D=o.resolveMode("text/css"));var j=F.indentUnit,V=D.tokenHooks,_=D.documentTypes||{},K=D.mediaTypes||{},X=D.mediaFeatures||{},I=D.mediaValueKeywords||{},B=D.propertyKeywords||{},le=D.nonStandardPropertyKeywords||{},xe=D.fontProperties||{},q=D.counterDescriptors||{},L=D.colorKeywords||{},de=D.valueKeywords||{},ze=D.allowNested,pe=D.lineComment,Ee=D.supportsAtComponent===!0,ge=F.highlightNonStandardPropertyKeywords!==!1,Oe,qe;function Se(te,fe){return Oe=fe,te}function je(te,fe){var oe=te.next();if(V[oe]){var Ue=V[oe](te,fe);if(Ue!==!1)return Ue}if(oe=="@")return te.eatWhile(/[\w\\\-]/),Se("def",te.current());if(oe=="="||(oe=="~"||oe=="|")&&te.eat("="))return Se(null,"compare");if(oe=='"'||oe=="'")return fe.tokenize=Ze(oe),fe.tokenize(te,fe);if(oe=="#")return te.eatWhile(/[\w\\\-]/),Se("atom","hash");if(oe=="!")return te.match(/^\s*\w*/),Se("keyword","important");if(/\d/.test(oe)||oe=="."&&te.eat(/\d/))return te.eatWhile(/[\w.%]/),Se("number","unit");if(oe==="-"){if(/[\d.]/.test(te.peek()))return te.eatWhile(/[\w.%]/),Se("number","unit");if(te.match(/^-[\w\\\-]*/))return te.eatWhile(/[\w\\\-]/),te.match(/^\s*:/,!1)?Se("variable-2","variable-definition"):Se("variable-2","variable");if(te.match(/^\w+-/))return Se("meta","meta")}else return/[,+>*\/]/.test(oe)?Se(null,"select-op"):oe=="."&&te.match(/^-?[_a-z][_a-z0-9-]*/i)?Se("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(oe)?Se(null,oe):te.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(te.current())&&(fe.tokenize=ke),Se("variable callee","variable")):/[\w\\\-]/.test(oe)?(te.eatWhile(/[\w\\\-]/),Se("property","word")):Se(null,null)}function Ze(te){return function(fe,oe){for(var Ue=!1,we;(we=fe.next())!=null;){if(we==te&&!Ue){te==")"&&fe.backUp(1);break}Ue=!Ue&&we=="\\"}return(we==te||!Ue&&te!=")")&&(oe.tokenize=null),Se("string","string")}}function ke(te,fe){return te.next(),te.match(/^\s*[\"\')]/,!1)?fe.tokenize=null:fe.tokenize=Ze(")"),Se(null,"(")}function Je(te,fe,oe){this.type=te,this.indent=fe,this.prev=oe}function He(te,fe,oe,Ue){return te.context=new Je(oe,fe.indentation()+(Ue===!1?0:j),te.context),oe}function Ge(te){return te.context.prev&&(te.context=te.context.prev),te.context.type}function U(te,fe,oe){return Be[oe.context.type](te,fe,oe)}function G(te,fe,oe,Ue){for(var we=Ue||1;we>0;we--)oe.context=oe.context.prev;return U(te,fe,oe)}function ce(te){var fe=te.current().toLowerCase();de.hasOwnProperty(fe)?qe="atom":L.hasOwnProperty(fe)?qe="keyword":qe="variable"}var Be={};return Be.top=function(te,fe,oe){if(te=="{")return He(oe,fe,"block");if(te=="}"&&oe.context.prev)return Ge(oe);if(Ee&&/@component/i.test(te))return He(oe,fe,"atComponentBlock");if(/^@(-moz-)?document$/i.test(te))return He(oe,fe,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(te))return He(oe,fe,"atBlock");if(/^@(font-face|counter-style)/i.test(te))return oe.stateArg=te,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(te))return"keyframes";if(te&&te.charAt(0)=="@")return He(oe,fe,"at");if(te=="hash")qe="builtin";else if(te=="word")qe="tag";else{if(te=="variable-definition")return"maybeprop";if(te=="interpolation")return He(oe,fe,"interpolation");if(te==":")return"pseudo";if(ze&&te=="(")return He(oe,fe,"parens")}return oe.context.type},Be.block=function(te,fe,oe){if(te=="word"){var Ue=fe.current().toLowerCase();return B.hasOwnProperty(Ue)?(qe="property","maybeprop"):le.hasOwnProperty(Ue)?(qe=ge?"string-2":"property","maybeprop"):ze?(qe=fe.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(qe+=" error","maybeprop")}else return te=="meta"?"block":!ze&&(te=="hash"||te=="qualifier")?(qe="error","block"):Be.top(te,fe,oe)},Be.maybeprop=function(te,fe,oe){return te==":"?He(oe,fe,"prop"):U(te,fe,oe)},Be.prop=function(te,fe,oe){if(te==";")return Ge(oe);if(te=="{"&&ze)return He(oe,fe,"propBlock");if(te=="}"||te=="{")return G(te,fe,oe);if(te=="(")return He(oe,fe,"parens");if(te=="hash"&&!/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(fe.current()))qe+=" error";else if(te=="word")ce(fe);else if(te=="interpolation")return He(oe,fe,"interpolation");return"prop"},Be.propBlock=function(te,fe,oe){return te=="}"?Ge(oe):te=="word"?(qe="property","maybeprop"):oe.context.type},Be.parens=function(te,fe,oe){return te=="{"||te=="}"?G(te,fe,oe):te==")"?Ge(oe):te=="("?He(oe,fe,"parens"):te=="interpolation"?He(oe,fe,"interpolation"):(te=="word"&&ce(fe),"parens")},Be.pseudo=function(te,fe,oe){return te=="meta"?"pseudo":te=="word"?(qe="variable-3",oe.context.type):U(te,fe,oe)},Be.documentTypes=function(te,fe,oe){return te=="word"&&_.hasOwnProperty(fe.current())?(qe="tag",oe.context.type):Be.atBlock(te,fe,oe)},Be.atBlock=function(te,fe,oe){if(te=="(")return He(oe,fe,"atBlock_parens");if(te=="}"||te==";")return G(te,fe,oe);if(te=="{")return Ge(oe)&&He(oe,fe,ze?"block":"top");if(te=="interpolation")return He(oe,fe,"interpolation");if(te=="word"){var Ue=fe.current().toLowerCase();Ue=="only"||Ue=="not"||Ue=="and"||Ue=="or"?qe="keyword":K.hasOwnProperty(Ue)?qe="attribute":X.hasOwnProperty(Ue)?qe="property":I.hasOwnProperty(Ue)?qe="keyword":B.hasOwnProperty(Ue)?qe="property":le.hasOwnProperty(Ue)?qe=ge?"string-2":"property":de.hasOwnProperty(Ue)?qe="atom":L.hasOwnProperty(Ue)?qe="keyword":qe="error"}return oe.context.type},Be.atComponentBlock=function(te,fe,oe){return te=="}"?G(te,fe,oe):te=="{"?Ge(oe)&&He(oe,fe,ze?"block":"top",!1):(te=="word"&&(qe="error"),oe.context.type)},Be.atBlock_parens=function(te,fe,oe){return te==")"?Ge(oe):te=="{"||te=="}"?G(te,fe,oe,2):Be.atBlock(te,fe,oe)},Be.restricted_atBlock_before=function(te,fe,oe){return te=="{"?He(oe,fe,"restricted_atBlock"):te=="word"&&oe.stateArg=="@counter-style"?(qe="variable","restricted_atBlock_before"):U(te,fe,oe)},Be.restricted_atBlock=function(te,fe,oe){return te=="}"?(oe.stateArg=null,Ge(oe)):te=="word"?(oe.stateArg=="@font-face"&&!xe.hasOwnProperty(fe.current().toLowerCase())||oe.stateArg=="@counter-style"&&!q.hasOwnProperty(fe.current().toLowerCase())?qe="error":qe="property","maybeprop"):"restricted_atBlock"},Be.keyframes=function(te,fe,oe){return te=="word"?(qe="variable","keyframes"):te=="{"?He(oe,fe,"top"):U(te,fe,oe)},Be.at=function(te,fe,oe){return te==";"?Ge(oe):te=="{"||te=="}"?G(te,fe,oe):(te=="word"?qe="tag":te=="hash"&&(qe="builtin"),"at")},Be.interpolation=function(te,fe,oe){return te=="}"?Ge(oe):te=="{"||te==";"?G(te,fe,oe):(te=="word"?qe="variable":te!="variable"&&te!="("&&te!=")"&&(qe="error"),"interpolation")},{startState:function(te){return{tokenize:null,state:Q?"block":"top",stateArg:null,context:new Je(Q?"block":"top",te||0,null)}},token:function(te,fe){if(!fe.tokenize&&te.eatSpace())return null;var oe=(fe.tokenize||je)(te,fe);return oe&&typeof oe=="object"&&(Oe=oe[1],oe=oe[0]),qe=oe,Oe!="comment"&&(fe.state=Be[fe.state](Oe,te,fe)),qe},indent:function(te,fe){var oe=te.context,Ue=fe&&fe.charAt(0),we=oe.indent;return oe.type=="prop"&&(Ue=="}"||Ue==")")&&(oe=oe.prev),oe.prev&&(Ue=="}"&&(oe.type=="block"||oe.type=="top"||oe.type=="interpolation"||oe.type=="restricted_atBlock")?(oe=oe.prev,we=oe.indent):(Ue==")"&&(oe.type=="parens"||oe.type=="atBlock_parens")||Ue=="{"&&(oe.type=="at"||oe.type=="atBlock"))&&(we=Math.max(0,oe.indent-j))),we},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:pe,fold:"brace"}});function p(F){for(var D={},Q=0;Q{(function(o){typeof Ms=="object"&&typeof As=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("diff",function(){var p={"+":"positive","-":"negative","@":"meta"};return{token:function(v){var C=v.string.search(/[\t ]+?$/);if(!v.sol()||C===0)return v.skipToEnd(),("error "+(p[v.string.charAt(0)]||"")).replace(/ $/,"");var b=p[v.peek()]||v.skipToEnd();return C===-1?v.skipToEnd():v.pos=C,b}}}),o.defineMIME("text/x-diff","diff")})});var mn=Ke((qs,Is)=>{(function(o){typeof qs=="object"&&typeof Is=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},v={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};o.defineMode("xml",function(C,b){var S=C.indentUnit,s={},h=b.htmlMode?p:v;for(var g in h)s[g]=h[g];for(var g in b)s[g]=b[g];var T,x;function c(_,K){function X(le){return K.tokenize=le,le(_,K)}var I=_.next();if(I=="<")return _.eat("!")?_.eat("[")?_.match("CDATA[")?X(E("atom","]]>")):null:_.match("--")?X(E("comment","-->")):_.match("DOCTYPE",!0,!0)?(_.eatWhile(/[\w\._\-]/),X(z(1))):null:_.eat("?")?(_.eatWhile(/[\w\._\-]/),K.tokenize=E("meta","?>"),"meta"):(T=_.eat("/")?"closeTag":"openTag",K.tokenize=d,"tag bracket");if(I=="&"){var B;return _.eat("#")?_.eat("x")?B=_.eatWhile(/[a-fA-F\d]/)&&_.eat(";"):B=_.eatWhile(/[\d]/)&&_.eat(";"):B=_.eatWhile(/[\w\.\-:]/)&&_.eat(";"),B?"atom":"error"}else return _.eatWhile(/[^&<]/),null}c.isInText=!0;function d(_,K){var X=_.next();if(X==">"||X=="/"&&_.eat(">"))return K.tokenize=c,T=X==">"?"endTag":"selfcloseTag","tag bracket";if(X=="=")return T="equals",null;if(X=="<"){K.tokenize=c,K.state=Z,K.tagName=K.tagStart=null;var I=K.tokenize(_,K);return I?I+" tag error":"tag error"}else return/[\'\"]/.test(X)?(K.tokenize=w(X),K.stringStartCol=_.column(),K.tokenize(_,K)):(_.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function w(_){var K=function(X,I){for(;!X.eol();)if(X.next()==_){I.tokenize=d;break}return"string"};return K.isInAttribute=!0,K}function E(_,K){return function(X,I){for(;!X.eol();){if(X.match(K)){I.tokenize=c;break}X.next()}return _}}function z(_){return function(K,X){for(var I;(I=K.next())!=null;){if(I=="<")return X.tokenize=z(_+1),X.tokenize(K,X);if(I==">")if(_==1){X.tokenize=c;break}else return X.tokenize=z(_-1),X.tokenize(K,X)}return"meta"}}function y(_){return _&&_.toLowerCase()}function R(_,K,X){this.prev=_.context,this.tagName=K||"",this.indent=_.indented,this.startOfLine=X,(s.doNotIndent.hasOwnProperty(K)||_.context&&_.context.noIndent)&&(this.noIndent=!0)}function M(_){_.context&&(_.context=_.context.prev)}function H(_,K){for(var X;;){if(!_.context||(X=_.context.tagName,!s.contextGrabbers.hasOwnProperty(y(X))||!s.contextGrabbers[y(X)].hasOwnProperty(y(K))))return;M(_)}}function Z(_,K,X){return _=="openTag"?(X.tagStart=K.column(),ee):_=="closeTag"?re:Z}function ee(_,K,X){return _=="word"?(X.tagName=K.current(),x="tag",D):s.allowMissingTagName&&_=="endTag"?(x="tag bracket",D(_,K,X)):(x="error",ee)}function re(_,K,X){if(_=="word"){var I=K.current();return X.context&&X.context.tagName!=I&&s.implicitlyClosed.hasOwnProperty(y(X.context.tagName))&&M(X),X.context&&X.context.tagName==I||s.matchClosing===!1?(x="tag",N):(x="tag error",F)}else return s.allowMissingTagName&&_=="endTag"?(x="tag bracket",N(_,K,X)):(x="error",F)}function N(_,K,X){return _!="endTag"?(x="error",N):(M(X),Z)}function F(_,K,X){return x="error",N(_,K,X)}function D(_,K,X){if(_=="word")return x="attribute",Q;if(_=="endTag"||_=="selfcloseTag"){var I=X.tagName,B=X.tagStart;return X.tagName=X.tagStart=null,_=="selfcloseTag"||s.autoSelfClosers.hasOwnProperty(y(I))?H(X,I):(H(X,I),X.context=new R(X,I,B==X.indented)),Z}return x="error",D}function Q(_,K,X){return _=="equals"?j:(s.allowMissing||(x="error"),D(_,K,X))}function j(_,K,X){return _=="string"?V:_=="word"&&s.allowUnquoted?(x="string",D):(x="error",D(_,K,X))}function V(_,K,X){return _=="string"?V:D(_,K,X)}return{startState:function(_){var K={tokenize:c,state:Z,indented:_||0,tagName:null,tagStart:null,context:null};return _!=null&&(K.baseIndent=_),K},token:function(_,K){if(!K.tagName&&_.sol()&&(K.indented=_.indentation()),_.eatSpace())return null;T=null;var X=K.tokenize(_,K);return(X||T)&&X!="comment"&&(x=null,K.state=K.state(T||X,_,K),x&&(X=x=="error"?X+" error":x)),X},indent:function(_,K,X){var I=_.context;if(_.tokenize.isInAttribute)return _.tagStart==_.indented?_.stringStartCol+1:_.indented+S;if(I&&I.noIndent)return o.Pass;if(_.tokenize!=d&&_.tokenize!=c)return X?X.match(/^(\s*)/)[0].length:0;if(_.tagName)return s.multilineTagIndentPastTag!==!1?_.tagStart+_.tagName.length+2:_.tagStart+S*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(_){_.state==j&&(_.state=D)},xmlCurrentTag:function(_){return _.tagName?{name:_.tagName,close:_.type=="closeTag"}:null},xmlCurrentContext:function(_){for(var K=[],X=_.context;X;X=X.prev)K.push(X.tagName);return K.reverse()}}}),o.defineMIME("text/xml","xml"),o.defineMIME("application/xml","xml"),o.mimeModes.hasOwnProperty("text/html")||o.defineMIME("text/html",{name:"xml",htmlMode:!0})})});var vn=Ke((Fs,Ns)=>{(function(o){typeof Fs=="object"&&typeof Ns=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("javascript",function(p,v){var C=p.indentUnit,b=v.statementIndent,S=v.jsonld,s=v.json||S,h=v.trackScope!==!1,g=v.typescript,T=v.wordCharacters||/[\w$\xa1-\uffff]/,x=function(){function k(pt){return{type:pt,style:"keyword"}}var O=k("keyword a"),ae=k("keyword b"),he=k("keyword c"),ne=k("keyword d"),ye=k("operator"),Xe={type:"atom",style:"atom"};return{if:k("if"),while:O,with:O,else:ae,do:ae,try:ae,finally:ae,return:ne,break:ne,continue:ne,new:k("new"),delete:he,void:he,throw:he,debugger:k("debugger"),var:k("var"),const:k("var"),let:k("var"),function:k("function"),catch:k("catch"),for:k("for"),switch:k("switch"),case:k("case"),default:k("default"),in:ye,typeof:ye,instanceof:ye,true:Xe,false:Xe,null:Xe,undefined:Xe,NaN:Xe,Infinity:Xe,this:k("this"),class:k("class"),super:k("atom"),yield:he,export:k("export"),import:k("import"),extends:he,await:he}}(),c=/[+\-*&%=<>!?|~^@]/,d=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function w(k){for(var O=!1,ae,he=!1;(ae=k.next())!=null;){if(!O){if(ae=="/"&&!he)return;ae=="["?he=!0:he&&ae=="]"&&(he=!1)}O=!O&&ae=="\\"}}var E,z;function y(k,O,ae){return E=k,z=ae,O}function R(k,O){var ae=k.next();if(ae=='"'||ae=="'")return O.tokenize=M(ae),O.tokenize(k,O);if(ae=="."&&k.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return y("number","number");if(ae=="."&&k.match(".."))return y("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(ae))return y(ae);if(ae=="="&&k.eat(">"))return y("=>","operator");if(ae=="0"&&k.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return y("number","number");if(/\d/.test(ae))return k.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),y("number","number");if(ae=="/")return k.eat("*")?(O.tokenize=H,H(k,O)):k.eat("/")?(k.skipToEnd(),y("comment","comment")):jt(k,O,1)?(w(k),k.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),y("regexp","string-2")):(k.eat("="),y("operator","operator",k.current()));if(ae=="`")return O.tokenize=Z,Z(k,O);if(ae=="#"&&k.peek()=="!")return k.skipToEnd(),y("meta","meta");if(ae=="#"&&k.eatWhile(T))return y("variable","property");if(ae=="<"&&k.match("!--")||ae=="-"&&k.match("->")&&!/\S/.test(k.string.slice(0,k.start)))return k.skipToEnd(),y("comment","comment");if(c.test(ae))return(ae!=">"||!O.lexical||O.lexical.type!=">")&&(k.eat("=")?(ae=="!"||ae=="=")&&k.eat("="):/[<>*+\-|&?]/.test(ae)&&(k.eat(ae),ae==">"&&k.eat(ae))),ae=="?"&&k.eat(".")?y("."):y("operator","operator",k.current());if(T.test(ae)){k.eatWhile(T);var he=k.current();if(O.lastType!="."){if(x.propertyIsEnumerable(he)){var ne=x[he];return y(ne.type,ne.style,he)}if(he=="async"&&k.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return y("async","keyword",he)}return y("variable","variable",he)}}function M(k){return function(O,ae){var he=!1,ne;if(S&&O.peek()=="@"&&O.match(d))return ae.tokenize=R,y("jsonld-keyword","meta");for(;(ne=O.next())!=null&&!(ne==k&&!he);)he=!he&&ne=="\\";return he||(ae.tokenize=R),y("string","string")}}function H(k,O){for(var ae=!1,he;he=k.next();){if(he=="/"&&ae){O.tokenize=R;break}ae=he=="*"}return y("comment","comment")}function Z(k,O){for(var ae=!1,he;(he=k.next())!=null;){if(!ae&&(he=="`"||he=="$"&&k.eat("{"))){O.tokenize=R;break}ae=!ae&&he=="\\"}return y("quasi","string-2",k.current())}var ee="([{}])";function re(k,O){O.fatArrowAt&&(O.fatArrowAt=null);var ae=k.string.indexOf("=>",k.start);if(!(ae<0)){if(g){var he=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(k.string.slice(k.start,ae));he&&(ae=he.index)}for(var ne=0,ye=!1,Xe=ae-1;Xe>=0;--Xe){var pt=k.string.charAt(Xe),Et=ee.indexOf(pt);if(Et>=0&&Et<3){if(!ne){++Xe;break}if(--ne==0){pt=="("&&(ye=!0);break}}else if(Et>=3&&Et<6)++ne;else if(T.test(pt))ye=!0;else if(/["'\/`]/.test(pt))for(;;--Xe){if(Xe==0)return;var Zr=k.string.charAt(Xe-1);if(Zr==pt&&k.string.charAt(Xe-2)!="\\"){Xe--;break}}else if(ye&&!ne){++Xe;break}}ye&&!ne&&(O.fatArrowAt=Xe)}}var N={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function F(k,O,ae,he,ne,ye){this.indented=k,this.column=O,this.type=ae,this.prev=ne,this.info=ye,he!=null&&(this.align=he)}function D(k,O){if(!h)return!1;for(var ae=k.localVars;ae;ae=ae.next)if(ae.name==O)return!0;for(var he=k.context;he;he=he.prev)for(var ae=he.vars;ae;ae=ae.next)if(ae.name==O)return!0}function Q(k,O,ae,he,ne){var ye=k.cc;for(j.state=k,j.stream=ne,j.marked=null,j.cc=ye,j.style=O,k.lexical.hasOwnProperty("align")||(k.lexical.align=!0);;){var Xe=ye.length?ye.pop():s?Se:Oe;if(Xe(ae,he)){for(;ye.length&&ye[ye.length-1].lex;)ye.pop()();return j.marked?j.marked:ae=="variable"&&D(k,he)?"variable-2":O}}}var j={state:null,column:null,marked:null,cc:null};function V(){for(var k=arguments.length-1;k>=0;k--)j.cc.push(arguments[k])}function _(){return V.apply(null,arguments),!0}function K(k,O){for(var ae=O;ae;ae=ae.next)if(ae.name==k)return!0;return!1}function X(k){var O=j.state;if(j.marked="def",!!h){if(O.context){if(O.lexical.info=="var"&&O.context&&O.context.block){var ae=I(k,O.context);if(ae!=null){O.context=ae;return}}else if(!K(k,O.localVars)){O.localVars=new xe(k,O.localVars);return}}v.globalVars&&!K(k,O.globalVars)&&(O.globalVars=new xe(k,O.globalVars))}}function I(k,O){if(O)if(O.block){var ae=I(k,O.prev);return ae?ae==O.prev?O:new le(ae,O.vars,!0):null}else return K(k,O.vars)?O:new le(O.prev,new xe(k,O.vars),!1);else return null}function B(k){return k=="public"||k=="private"||k=="protected"||k=="abstract"||k=="readonly"}function le(k,O,ae){this.prev=k,this.vars=O,this.block=ae}function xe(k,O){this.name=k,this.next=O}var q=new xe("this",new xe("arguments",null));function L(){j.state.context=new le(j.state.context,j.state.localVars,!1),j.state.localVars=q}function de(){j.state.context=new le(j.state.context,j.state.localVars,!0),j.state.localVars=null}L.lex=de.lex=!0;function ze(){j.state.localVars=j.state.context.vars,j.state.context=j.state.context.prev}ze.lex=!0;function pe(k,O){var ae=function(){var he=j.state,ne=he.indented;if(he.lexical.type=="stat")ne=he.lexical.indented;else for(var ye=he.lexical;ye&&ye.type==")"&&ye.align;ye=ye.prev)ne=ye.indented;he.lexical=new F(ne,j.stream.column(),k,null,he.lexical,O)};return ae.lex=!0,ae}function Ee(){var k=j.state;k.lexical.prev&&(k.lexical.type==")"&&(k.indented=k.lexical.indented),k.lexical=k.lexical.prev)}Ee.lex=!0;function ge(k){function O(ae){return ae==k?_():k==";"||ae=="}"||ae==")"||ae=="]"?V():_(O)}return O}function Oe(k,O){return k=="var"?_(pe("vardef",O),Hr,ge(";"),Ee):k=="keyword a"?_(pe("form"),Ze,Oe,Ee):k=="keyword b"?_(pe("form"),Oe,Ee):k=="keyword d"?j.stream.match(/^\s*$/,!1)?_():_(pe("stat"),Je,ge(";"),Ee):k=="debugger"?_(ge(";")):k=="{"?_(pe("}"),de,De,Ee,ze):k==";"?_():k=="if"?(j.state.lexical.info=="else"&&j.state.cc[j.state.cc.length-1]==Ee&&j.state.cc.pop()(),_(pe("form"),Ze,Oe,Ee,Br)):k=="function"?_(Bt):k=="for"?_(pe("form"),de,ei,Oe,ze,Ee):k=="class"||g&&O=="interface"?(j.marked="keyword",_(pe("form",k=="class"?k:O),Wr,Ee)):k=="variable"?g&&O=="declare"?(j.marked="keyword",_(Oe)):g&&(O=="module"||O=="enum"||O=="type")&&j.stream.match(/^\s*\w/,!1)?(j.marked="keyword",O=="enum"?_(Ae):O=="type"?_(ti,ge("operator"),Pe,ge(";")):_(pe("form"),Ct,ge("{"),pe("}"),De,Ee,Ee)):g&&O=="namespace"?(j.marked="keyword",_(pe("form"),Se,Oe,Ee)):g&&O=="abstract"?(j.marked="keyword",_(Oe)):_(pe("stat"),Ue):k=="switch"?_(pe("form"),Ze,ge("{"),pe("}","switch"),de,De,Ee,Ee,ze):k=="case"?_(Se,ge(":")):k=="default"?_(ge(":")):k=="catch"?_(pe("form"),L,qe,Oe,Ee,ze):k=="export"?_(pe("stat"),Ur,Ee):k=="import"?_(pe("stat"),gr,Ee):k=="async"?_(Oe):O=="@"?_(Se,Oe):V(pe("stat"),Se,ge(";"),Ee)}function qe(k){if(k=="(")return _($t,ge(")"))}function Se(k,O){return ke(k,O,!1)}function je(k,O){return ke(k,O,!0)}function Ze(k){return k!="("?V():_(pe(")"),Je,ge(")"),Ee)}function ke(k,O,ae){if(j.state.fatArrowAt==j.stream.start){var he=ae?Be:ce;if(k=="(")return _(L,pe(")"),W($t,")"),Ee,ge("=>"),he,ze);if(k=="variable")return V(L,Ct,ge("=>"),he,ze)}var ne=ae?Ge:He;return N.hasOwnProperty(k)?_(ne):k=="function"?_(Bt,ne):k=="class"||g&&O=="interface"?(j.marked="keyword",_(pe("form"),to,Ee)):k=="keyword c"||k=="async"?_(ae?je:Se):k=="("?_(pe(")"),Je,ge(")"),Ee,ne):k=="operator"||k=="spread"?_(ae?je:Se):k=="["?_(pe("]"),at,Ee,ne):k=="{"?se(Me,"}",null,ne):k=="quasi"?V(U,ne):k=="new"?_(te(ae)):_()}function Je(k){return k.match(/[;\}\)\],]/)?V():V(Se)}function He(k,O){return k==","?_(Je):Ge(k,O,!1)}function Ge(k,O,ae){var he=ae==!1?He:Ge,ne=ae==!1?Se:je;if(k=="=>")return _(L,ae?Be:ce,ze);if(k=="operator")return/\+\+|--/.test(O)||g&&O=="!"?_(he):g&&O=="<"&&j.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?_(pe(">"),W(Pe,">"),Ee,he):O=="?"?_(Se,ge(":"),ne):_(ne);if(k=="quasi")return V(U,he);if(k!=";"){if(k=="(")return se(je,")","call",he);if(k==".")return _(we,he);if(k=="[")return _(pe("]"),Je,ge("]"),Ee,he);if(g&&O=="as")return j.marked="keyword",_(Pe,he);if(k=="regexp")return j.state.lastType=j.marked="operator",j.stream.backUp(j.stream.pos-j.stream.start-1),_(ne)}}function U(k,O){return k!="quasi"?V():O.slice(O.length-2)!="${"?_(U):_(Je,G)}function G(k){if(k=="}")return j.marked="string-2",j.state.tokenize=Z,_(U)}function ce(k){return re(j.stream,j.state),V(k=="{"?Oe:Se)}function Be(k){return re(j.stream,j.state),V(k=="{"?Oe:je)}function te(k){return function(O){return O=="."?_(k?oe:fe):O=="variable"&&g?_(Ft,k?Ge:He):V(k?je:Se)}}function fe(k,O){if(O=="target")return j.marked="keyword",_(He)}function oe(k,O){if(O=="target")return j.marked="keyword",_(Ge)}function Ue(k){return k==":"?_(Ee,Oe):V(He,ge(";"),Ee)}function we(k){if(k=="variable")return j.marked="property",_()}function Me(k,O){if(k=="async")return j.marked="property",_(Me);if(k=="variable"||j.style=="keyword"){if(j.marked="property",O=="get"||O=="set")return _(Le);var ae;return g&&j.state.fatArrowAt==j.stream.start&&(ae=j.stream.match(/^\s*:\s*/,!1))&&(j.state.fatArrowAt=j.stream.pos+ae[0].length),_($)}else{if(k=="number"||k=="string")return j.marked=S?"property":j.style+" property",_($);if(k=="jsonld-keyword")return _($);if(g&&B(O))return j.marked="keyword",_(Me);if(k=="[")return _(Se,nt,ge("]"),$);if(k=="spread")return _(je,$);if(O=="*")return j.marked="keyword",_(Me);if(k==":")return V($)}}function Le(k){return k!="variable"?V($):(j.marked="property",_(Bt))}function $(k){if(k==":")return _(je);if(k=="(")return V(Bt)}function W(k,O,ae){function he(ne,ye){if(ae?ae.indexOf(ne)>-1:ne==","){var Xe=j.state.lexical;return Xe.info=="call"&&(Xe.pos=(Xe.pos||0)+1),_(function(pt,Et){return pt==O||Et==O?V():V(k)},he)}return ne==O||ye==O?_():ae&&ae.indexOf(";")>-1?V(k):_(ge(O))}return function(ne,ye){return ne==O||ye==O?_():V(k,he)}}function se(k,O,ae){for(var he=3;he"),Pe);if(k=="quasi")return V(_t,Ht)}function xt(k){if(k=="=>")return _(Pe)}function Fe(k){return k.match(/[\}\)\]]/)?_():k==","||k==";"?_(Fe):V(nr,Fe)}function nr(k,O){if(k=="variable"||j.style=="keyword")return j.marked="property",_(nr);if(O=="?"||k=="number"||k=="string")return _(nr);if(k==":")return _(Pe);if(k=="[")return _(ge("variable"),dt,ge("]"),nr);if(k=="(")return V(hr,nr);if(!k.match(/[;\}\)\],]/))return _()}function _t(k,O){return k!="quasi"?V():O.slice(O.length-2)!="${"?_(_t):_(Pe,it)}function it(k){if(k=="}")return j.marked="string-2",j.state.tokenize=Z,_(_t)}function ot(k,O){return k=="variable"&&j.stream.match(/^\s*[?:]/,!1)||O=="?"?_(ot):k==":"?_(Pe):k=="spread"?_(ot):V(Pe)}function Ht(k,O){if(O=="<")return _(pe(">"),W(Pe,">"),Ee,Ht);if(O=="|"||k=="."||O=="&")return _(Pe);if(k=="[")return _(Pe,ge("]"),Ht);if(O=="extends"||O=="implements")return j.marked="keyword",_(Pe);if(O=="?")return _(Pe,ge(":"),Pe)}function Ft(k,O){if(O=="<")return _(pe(">"),W(Pe,">"),Ee,Ht)}function Wt(){return V(Pe,kt)}function kt(k,O){if(O=="=")return _(Pe)}function Hr(k,O){return O=="enum"?(j.marked="keyword",_(Ae)):V(Ct,nt,Ut,eo)}function Ct(k,O){if(g&&B(O))return j.marked="keyword",_(Ct);if(k=="variable")return X(O),_();if(k=="spread")return _(Ct);if(k=="[")return se(yn,"]");if(k=="{")return se(dr,"}")}function dr(k,O){return k=="variable"&&!j.stream.match(/^\s*:/,!1)?(X(O),_(Ut)):(k=="variable"&&(j.marked="property"),k=="spread"?_(Ct):k=="}"?V():k=="["?_(Se,ge("]"),ge(":"),dr):_(ge(":"),Ct,Ut))}function yn(){return V(Ct,Ut)}function Ut(k,O){if(O=="=")return _(je)}function eo(k){if(k==",")return _(Hr)}function Br(k,O){if(k=="keyword b"&&O=="else")return _(pe("form","else"),Oe,Ee)}function ei(k,O){if(O=="await")return _(ei);if(k=="(")return _(pe(")"),xn,Ee)}function xn(k){return k=="var"?_(Hr,pr):k=="variable"?_(pr):V(pr)}function pr(k,O){return k==")"?_():k==";"?_(pr):O=="in"||O=="of"?(j.marked="keyword",_(Se,pr)):V(Se,pr)}function Bt(k,O){if(O=="*")return j.marked="keyword",_(Bt);if(k=="variable")return X(O),_(Bt);if(k=="(")return _(L,pe(")"),W($t,")"),Ee,Pt,Oe,ze);if(g&&O=="<")return _(pe(">"),W(Wt,">"),Ee,Bt)}function hr(k,O){if(O=="*")return j.marked="keyword",_(hr);if(k=="variable")return X(O),_(hr);if(k=="(")return _(L,pe(")"),W($t,")"),Ee,Pt,ze);if(g&&O=="<")return _(pe(">"),W(Wt,">"),Ee,hr)}function ti(k,O){if(k=="keyword"||k=="variable")return j.marked="type",_(ti);if(O=="<")return _(pe(">"),W(Wt,">"),Ee)}function $t(k,O){return O=="@"&&_(Se,$t),k=="spread"?_($t):g&&B(O)?(j.marked="keyword",_($t)):g&&k=="this"?_(nt,Ut):V(Ct,nt,Ut)}function to(k,O){return k=="variable"?Wr(k,O):Kt(k,O)}function Wr(k,O){if(k=="variable")return X(O),_(Kt)}function Kt(k,O){if(O=="<")return _(pe(">"),W(Wt,">"),Ee,Kt);if(O=="extends"||O=="implements"||g&&k==",")return O=="implements"&&(j.marked="keyword"),_(g?Pe:Se,Kt);if(k=="{")return _(pe("}"),Gt,Ee)}function Gt(k,O){if(k=="async"||k=="variable"&&(O=="static"||O=="get"||O=="set"||g&&B(O))&&j.stream.match(/^\s+#?[\w$\xa1-\uffff]/,!1))return j.marked="keyword",_(Gt);if(k=="variable"||j.style=="keyword")return j.marked="property",_(Cr,Gt);if(k=="number"||k=="string")return _(Cr,Gt);if(k=="[")return _(Se,nt,ge("]"),Cr,Gt);if(O=="*")return j.marked="keyword",_(Gt);if(g&&k=="(")return V(hr,Gt);if(k==";"||k==",")return _(Gt);if(k=="}")return _();if(O=="@")return _(Se,Gt)}function Cr(k,O){if(O=="!"||O=="?")return _(Cr);if(k==":")return _(Pe,Ut);if(O=="=")return _(je);var ae=j.state.lexical.prev,he=ae&&ae.info=="interface";return V(he?hr:Bt)}function Ur(k,O){return O=="*"?(j.marked="keyword",_(Gr,ge(";"))):O=="default"?(j.marked="keyword",_(Se,ge(";"))):k=="{"?_(W($r,"}"),Gr,ge(";")):V(Oe)}function $r(k,O){if(O=="as")return j.marked="keyword",_(ge("variable"));if(k=="variable")return V(je,$r)}function gr(k){return k=="string"?_():k=="("?V(Se):k=="."?V(He):V(Kr,Vt,Gr)}function Kr(k,O){return k=="{"?se(Kr,"}"):(k=="variable"&&X(O),O=="*"&&(j.marked="keyword"),_(_n))}function Vt(k){if(k==",")return _(Kr,Vt)}function _n(k,O){if(O=="as")return j.marked="keyword",_(Kr)}function Gr(k,O){if(O=="from")return j.marked="keyword",_(Se)}function at(k){return k=="]"?_():V(W(je,"]"))}function Ae(){return V(pe("form"),Ct,ge("{"),pe("}"),W(ir,"}"),Ee,Ee)}function ir(){return V(Ct,Ut)}function kn(k,O){return k.lastType=="operator"||k.lastType==","||c.test(O.charAt(0))||/[,.]/.test(O.charAt(0))}function jt(k,O,ae){return O.tokenize==R&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(O.lastType)||O.lastType=="quasi"&&/\{\s*$/.test(k.string.slice(0,k.pos-(ae||0)))}return{startState:function(k){var O={tokenize:R,lastType:"sof",cc:[],lexical:new F((k||0)-C,0,"block",!1),localVars:v.localVars,context:v.localVars&&new le(null,null,!1),indented:k||0};return v.globalVars&&typeof v.globalVars=="object"&&(O.globalVars=v.globalVars),O},token:function(k,O){if(k.sol()&&(O.lexical.hasOwnProperty("align")||(O.lexical.align=!1),O.indented=k.indentation(),re(k,O)),O.tokenize!=H&&k.eatSpace())return null;var ae=O.tokenize(k,O);return E=="comment"?ae:(O.lastType=E=="operator"&&(z=="++"||z=="--")?"incdec":E,Q(O,ae,E,z,k))},indent:function(k,O){if(k.tokenize==H||k.tokenize==Z)return o.Pass;if(k.tokenize!=R)return 0;var ae=O&&O.charAt(0),he=k.lexical,ne;if(!/^\s*else\b/.test(O))for(var ye=k.cc.length-1;ye>=0;--ye){var Xe=k.cc[ye];if(Xe==Ee)he=he.prev;else if(Xe!=Br&&Xe!=ze)break}for(;(he.type=="stat"||he.type=="form")&&(ae=="}"||(ne=k.cc[k.cc.length-1])&&(ne==He||ne==Ge)&&!/^[,\.=+\-*:?[\(]/.test(O));)he=he.prev;b&&he.type==")"&&he.prev.type=="stat"&&(he=he.prev);var pt=he.type,Et=ae==pt;return pt=="vardef"?he.indented+(k.lastType=="operator"||k.lastType==","?he.info.length+1:0):pt=="form"&&ae=="{"?he.indented:pt=="form"?he.indented+C:pt=="stat"?he.indented+(kn(k,O)?b||C:0):he.info=="switch"&&!Et&&v.doubleIndentSwitch!=!1?he.indented+(/^(?:case|default)\b/.test(O)?C:2*C):he.align?he.column+(Et?0:1):he.indented+(Et?0:C)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:S,jsonMode:s,expressionAllowed:jt,skipExpression:function(k){Q(k,"atom","atom","true",new o.StringStream("",2,null))}}}),o.registerHelper("wordChars","javascript",/[\w$]/),o.defineMIME("text/javascript","javascript"),o.defineMIME("text/ecmascript","javascript"),o.defineMIME("application/javascript","javascript"),o.defineMIME("application/x-javascript","javascript"),o.defineMIME("application/ecmascript","javascript"),o.defineMIME("application/json",{name:"javascript",json:!0}),o.defineMIME("application/x-json",{name:"javascript",json:!0}),o.defineMIME("application/manifest+json",{name:"javascript",json:!0}),o.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),o.defineMIME("text/typescript",{name:"javascript",typescript:!0}),o.defineMIME("application/typescript",{name:"javascript",typescript:!0})})});var Qn=Ke((Os,Ps)=>{(function(o){typeof Os=="object"&&typeof Ps=="object"?o(We(),mn(),vn(),gn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],o):o(CodeMirror)})(function(o){"use strict";var p={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};function v(T,x,c){var d=T.current(),w=d.search(x);return w>-1?T.backUp(d.length-w):d.match(/<\/?$/)&&(T.backUp(d.length),T.match(x,!1)||T.match(d)),c}var C={};function b(T){var x=C[T];return x||(C[T]=new RegExp("\\s+"+T+`\\s*=\\s*('|")?([^'"]+)('|")?\\s*`))}function S(T,x){var c=T.match(b(x));return c?/^\s*(.*?)\s*$/.exec(c[2])[1]:""}function s(T,x){return new RegExp((x?"^":"")+"","i")}function h(T,x){for(var c in T)for(var d=x[c]||(x[c]=[]),w=T[c],E=w.length-1;E>=0;E--)d.unshift(w[E])}function g(T,x){for(var c=0;c=0;z--)d.script.unshift(["type",E[z].matches,E[z].mode]);function y(R,M){var H=c.token(R,M.htmlState),Z=/\btag\b/.test(H),ee;if(Z&&!/[<>\s\/]/.test(R.current())&&(ee=M.htmlState.tagName&&M.htmlState.tagName.toLowerCase())&&d.hasOwnProperty(ee))M.inTag=ee+" ";else if(M.inTag&&Z&&/>$/.test(R.current())){var re=/^([\S]+) (.*)/.exec(M.inTag);M.inTag=null;var N=R.current()==">"&&g(d[re[1]],re[2]),F=o.getMode(T,N),D=s(re[1],!0),Q=s(re[1],!1);M.token=function(j,V){return j.match(D,!1)?(V.token=y,V.localState=V.localMode=null,null):v(j,Q,V.localMode.token(j,V.localState))},M.localMode=F,M.localState=o.startState(F,c.indent(M.htmlState,"",""))}else M.inTag&&(M.inTag+=R.current(),R.eol()&&(M.inTag+=" "));return H}return{startState:function(){var R=o.startState(c);return{token:y,inTag:null,localMode:null,localState:null,htmlState:R}},copyState:function(R){var M;return R.localState&&(M=o.copyState(R.localMode,R.localState)),{token:R.token,inTag:R.inTag,localMode:R.localMode,localState:M,htmlState:o.copyState(c,R.htmlState)}},token:function(R,M){return M.token(R,M)},indent:function(R,M,H){return!R.localMode||/^\s*<\//.test(M)?c.indent(R.htmlState,M,H):R.localMode.indent?R.localMode.indent(R.localState,M,H):o.Pass},innerMode:function(R){return{state:R.localState||R.htmlState,mode:R.localMode||c}}}},"xml","javascript","css"),o.defineMIME("text/html","htmlmixed")})});var Hs=Ke((js,Rs)=>{(function(o){typeof js=="object"&&typeof Rs=="object"?o(We(),Qn(),Yn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../htmlmixed/htmlmixed","../../addon/mode/overlay"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("django:inner",function(){var p=["block","endblock","for","endfor","true","false","filter","endfilter","loop","none","self","super","if","elif","endif","as","else","import","with","endwith","without","context","ifequal","endifequal","ifnotequal","endifnotequal","extends","include","load","comment","endcomment","empty","url","static","trans","blocktrans","endblocktrans","now","regroup","lorem","ifchanged","endifchanged","firstof","debug","cycle","csrf_token","autoescape","endautoescape","spaceless","endspaceless","ssi","templatetag","verbatim","endverbatim","widthratio"],v=["add","addslashes","capfirst","center","cut","date","default","default_if_none","dictsort","dictsortreversed","divisibleby","escape","escapejs","filesizeformat","first","floatformat","force_escape","get_digit","iriencode","join","last","length","length_is","linebreaks","linebreaksbr","linenumbers","ljust","lower","make_list","phone2numeric","pluralize","pprint","random","removetags","rjust","safe","safeseq","slice","slugify","stringformat","striptags","time","timesince","timeuntil","title","truncatechars","truncatechars_html","truncatewords","truncatewords_html","unordered_list","upper","urlencode","urlize","urlizetrunc","wordcount","wordwrap","yesno"],C=["==","!=","<",">","<=",">="],b=["in","not","or","and"];p=new RegExp("^\\b("+p.join("|")+")\\b"),v=new RegExp("^\\b("+v.join("|")+")\\b"),C=new RegExp("^\\b("+C.join("|")+")\\b"),b=new RegExp("^\\b("+b.join("|")+")\\b");function S(c,d){if(c.match("{{"))return d.tokenize=h,"tag";if(c.match("{%"))return d.tokenize=g,"tag";if(c.match("{#"))return d.tokenize=T,"comment";for(;c.next()!=null&&!c.match(/\{[{%#]/,!1););return null}function s(c,d){return function(w,E){if(!E.escapeNext&&w.eat(c))E.tokenize=d;else{E.escapeNext&&(E.escapeNext=!1);var z=w.next();z=="\\"&&(E.escapeNext=!0)}return"string"}}function h(c,d){if(d.waitDot){if(d.waitDot=!1,c.peek()!=".")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("."))return d.waitProperty=!0,"null";throw Error("Unexpected error while waiting for property.")}if(d.waitPipe){if(d.waitPipe=!1,c.peek()!="|")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("|"))return d.waitFilter=!0,"null";throw Error("Unexpected error while waiting for filter.")}return d.waitProperty&&(d.waitProperty=!1,c.match(/\b(\w+)\b/))?(d.waitDot=!0,d.waitPipe=!0,"property"):d.waitFilter&&(d.waitFilter=!1,c.match(v))?"variable-2":c.eatSpace()?(d.waitProperty=!1,"null"):c.match(/\b\d+(\.\d+)?\b/)?"number":c.match("'")?(d.tokenize=s("'",d.tokenize),"string"):c.match('"')?(d.tokenize=s('"',d.tokenize),"string"):c.match(/\b(\w+)\b/)&&!d.foundVariable?(d.waitDot=!0,d.waitPipe=!0,"variable"):c.match("}}")?(d.waitProperty=null,d.waitFilter=null,d.waitDot=null,d.waitPipe=null,d.tokenize=S,"tag"):(c.next(),"null")}function g(c,d){if(d.waitDot){if(d.waitDot=!1,c.peek()!=".")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("."))return d.waitProperty=!0,"null";throw Error("Unexpected error while waiting for property.")}if(d.waitPipe){if(d.waitPipe=!1,c.peek()!="|")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("|"))return d.waitFilter=!0,"null";throw Error("Unexpected error while waiting for filter.")}if(d.waitProperty&&(d.waitProperty=!1,c.match(/\b(\w+)\b/)))return d.waitDot=!0,d.waitPipe=!0,"property";if(d.waitFilter&&(d.waitFilter=!1,c.match(v)))return"variable-2";if(c.eatSpace())return d.waitProperty=!1,"null";if(c.match(/\b\d+(\.\d+)?\b/))return"number";if(c.match("'"))return d.tokenize=s("'",d.tokenize),"string";if(c.match('"'))return d.tokenize=s('"',d.tokenize),"string";if(c.match(C))return"operator";if(c.match(b))return"keyword";var w=c.match(p);return w?(w[0]=="comment"&&(d.blockCommentTag=!0),"keyword"):c.match(/\b(\w+)\b/)?(d.waitDot=!0,d.waitPipe=!0,"variable"):c.match("%}")?(d.waitProperty=null,d.waitFilter=null,d.waitDot=null,d.waitPipe=null,d.blockCommentTag?(d.blockCommentTag=!1,d.tokenize=x):d.tokenize=S,"tag"):(c.next(),"null")}function T(c,d){return c.match(/^.*?#\}/)?d.tokenize=S:c.skipToEnd(),"comment"}function x(c,d){return c.match(/\{%\s*endcomment\s*%\}/,!1)?(d.tokenize=g,c.match("{%"),"tag"):(c.next(),"comment")}return{startState:function(){return{tokenize:S}},token:function(c,d){return d.tokenize(c,d)},blockCommentStart:"{% comment %}",blockCommentEnd:"{% endcomment %}"}}),o.defineMode("django",function(p){var v=o.getMode(p,"text/html"),C=o.getMode(p,"django:inner");return o.overlayMode(v,C)}),o.defineMIME("text/x-django","django")})});var Di=Ke((Bs,Ws)=>{(function(o){typeof Bs=="object"&&typeof Ws=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineSimpleMode=function(x,c){o.defineMode(x,function(d){return o.simpleMode(d,c)})},o.simpleMode=function(x,c){p(c,"start");var d={},w=c.meta||{},E=!1;for(var z in c)if(z!=w&&c.hasOwnProperty(z))for(var y=d[z]=[],R=c[z],M=0;M2&&H.token&&typeof H.token!="string"){for(var re=2;re-1)return o.Pass;var z=d.indent.length-1,y=x[d.state];e:for(;;){for(var R=0;R{(function(o){typeof Us=="object"&&typeof $s=="object"?o(We(),Di()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/simple"],o):o(CodeMirror)})(function(o){"use strict";var p="from",v=new RegExp("^(\\s*)\\b("+p+")\\b","i"),C=["run","cmd","entrypoint","shell"],b=new RegExp("^(\\s*)("+C.join("|")+")(\\s+\\[)","i"),S="expose",s=new RegExp("^(\\s*)("+S+")(\\s+)","i"),h=["arg","from","maintainer","label","env","add","copy","volume","user","workdir","onbuild","stopsignal","healthcheck","shell"],g=[p,S].concat(C).concat(h),T="("+g.join("|")+")",x=new RegExp("^(\\s*)"+T+"(\\s*)(#.*)?$","i"),c=new RegExp("^(\\s*)"+T+"(\\s+)","i");o.defineSimpleMode("dockerfile",{start:[{regex:/^\s*#.*$/,sol:!0,token:"comment"},{regex:v,token:[null,"keyword"],sol:!0,next:"from"},{regex:x,token:[null,"keyword",null,"error"],sol:!0},{regex:b,token:[null,"keyword",null],sol:!0,next:"array"},{regex:s,token:[null,"keyword",null],sol:!0,next:"expose"},{regex:c,token:[null,"keyword",null],sol:!0,next:"arguments"},{regex:/./,token:null}],from:[{regex:/\s*$/,token:null,next:"start"},{regex:/(\s*)(#.*)$/,token:[null,"error"],next:"start"},{regex:/(\s*\S+\s+)(as)/i,token:[null,"keyword"],next:"start"},{token:null,next:"start"}],single:[{regex:/(?:[^\\']|\\.)/,token:"string"},{regex:/'/,token:"string",pop:!0}],double:[{regex:/(?:[^\\"]|\\.)/,token:"string"},{regex:/"/,token:"string",pop:!0}],array:[{regex:/\]/,token:null,next:"start"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"}],expose:[{regex:/\d+$/,token:"number",next:"start"},{regex:/[^\d]+$/,token:null,next:"start"},{regex:/\d+/,token:"number"},{regex:/[^\d]+/,token:null},{token:null,next:"start"}],arguments:[{regex:/^\s*#.*$/,sol:!0,token:"comment"},{regex:/"(?:[^\\"]|\\.)*"?$/,token:"string",next:"start"},{regex:/"/,token:"string",push:"double"},{regex:/'(?:[^\\']|\\.)*'?$/,token:"string",next:"start"},{regex:/'/,token:"string",push:"single"},{regex:/[^#"']+[\\`]$/,token:null},{regex:/[^#"']+$/,token:null,next:"start"},{regex:/[^#"']+/,token:null},{token:null,next:"start"}],meta:{lineComment:"#"}}),o.defineMIME("text/x-dockerfile","dockerfile")})});var Xs=Ke((Gs,Zs)=>{(function(o){typeof Gs=="object"&&typeof Zs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy","cbl"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded JavaScript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"],alias:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var p=0;p-1&&C.substring(s+1,C.length);if(h)return o.findModeByExtension(h)},o.findModeByName=function(C){C=C.toLowerCase();for(var b=0;b{(function(o){typeof Ys=="object"&&typeof Qs=="object"?o(We(),mn(),Xs()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../xml/xml","../meta"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("markdown",function(p,v){var C=o.getMode(p,"text/html"),b=C.name=="null";function S(q){if(o.findModeByName){var L=o.findModeByName(q);L&&(q=L.mime||L.mimes[0])}var de=o.getMode(p,q);return de.name=="null"?null:de}v.highlightFormatting===void 0&&(v.highlightFormatting=!1),v.maxBlockquoteDepth===void 0&&(v.maxBlockquoteDepth=0),v.taskLists===void 0&&(v.taskLists=!1),v.strikethrough===void 0&&(v.strikethrough=!1),v.emoji===void 0&&(v.emoji=!1),v.fencedCodeBlockHighlighting===void 0&&(v.fencedCodeBlockHighlighting=!0),v.fencedCodeBlockDefaultMode===void 0&&(v.fencedCodeBlockDefaultMode="text/plain"),v.xml===void 0&&(v.xml=!0),v.tokenTypeOverrides===void 0&&(v.tokenTypeOverrides={});var s={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var h in s)s.hasOwnProperty(h)&&v.tokenTypeOverrides[h]&&(s[h]=v.tokenTypeOverrides[h]);var g=/^([*\-_])(?:\s*\1){2,}\s*$/,T=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,x=/^\[(x| )\](?=\s)/i,c=v.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,d=/^ {0,3}(?:\={1,}|-{2,})\s*$/,w=/^[^#!\[\]*_\\<>` "'(~:]+/,E=/^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/,z=/^\s*\[[^\]]+?\]:.*$/,y=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/,R=" ";function M(q,L,de){return L.f=L.inline=de,de(q,L)}function H(q,L,de){return L.f=L.block=de,de(q,L)}function Z(q){return!q||!/\S/.test(q.string)}function ee(q){if(q.linkTitle=!1,q.linkHref=!1,q.linkText=!1,q.em=!1,q.strong=!1,q.strikethrough=!1,q.quote=0,q.indentedCode=!1,q.f==N){var L=b;if(!L){var de=o.innerMode(C,q.htmlState);L=de.mode.name=="xml"&&de.state.tagStart===null&&!de.state.context&&de.state.tokenize.isInText}L&&(q.f=j,q.block=re,q.htmlState=null)}return q.trailingSpace=0,q.trailingSpaceNewLine=!1,q.prevLine=q.thisLine,q.thisLine={stream:null},null}function re(q,L){var de=q.column()===L.indentation,ze=Z(L.prevLine.stream),pe=L.indentedCode,Ee=L.prevLine.hr,ge=L.list!==!1,Oe=(L.listStack[L.listStack.length-1]||0)+3;L.indentedCode=!1;var qe=L.indentation;if(L.indentationDiff===null&&(L.indentationDiff=L.indentation,ge)){for(L.list=null;qe=4&&(pe||L.prevLine.fencedCodeEnd||L.prevLine.header||ze))return q.skipToEnd(),L.indentedCode=!0,s.code;if(q.eatSpace())return null;if(de&&L.indentation<=Oe&&(Ze=q.match(c))&&Ze[1].length<=6)return L.quote=0,L.header=Ze[1].length,L.thisLine.header=!0,v.highlightFormatting&&(L.formatting="header"),L.f=L.inline,D(L);if(L.indentation<=Oe&&q.eat(">"))return L.quote=de?1:L.quote+1,v.highlightFormatting&&(L.formatting="quote"),q.eatSpace(),D(L);if(!je&&!L.setext&&de&&L.indentation<=Oe&&(Ze=q.match(T))){var ke=Ze[1]?"ol":"ul";return L.indentation=qe+q.current().length,L.list=!0,L.quote=0,L.listStack.push(L.indentation),L.em=!1,L.strong=!1,L.code=!1,L.strikethrough=!1,v.taskLists&&q.match(x,!1)&&(L.taskList=!0),L.f=L.inline,v.highlightFormatting&&(L.formatting=["list","list-"+ke]),D(L)}else{if(de&&L.indentation<=Oe&&(Ze=q.match(E,!0)))return L.quote=0,L.fencedEndRE=new RegExp(Ze[1]+"+ *$"),L.localMode=v.fencedCodeBlockHighlighting&&S(Ze[2]||v.fencedCodeBlockDefaultMode),L.localMode&&(L.localState=o.startState(L.localMode)),L.f=L.block=F,v.highlightFormatting&&(L.formatting="code-block"),L.code=-1,D(L);if(L.setext||(!Se||!ge)&&!L.quote&&L.list===!1&&!L.code&&!je&&!z.test(q.string)&&(Ze=q.lookAhead(1))&&(Ze=Ze.match(d)))return L.setext?(L.header=L.setext,L.setext=0,q.skipToEnd(),v.highlightFormatting&&(L.formatting="header")):(L.header=Ze[0].charAt(0)=="="?1:2,L.setext=L.header),L.thisLine.header=!0,L.f=L.inline,D(L);if(je)return q.skipToEnd(),L.hr=!0,L.thisLine.hr=!0,s.hr;if(q.peek()==="[")return M(q,L,I)}return M(q,L,L.inline)}function N(q,L){var de=C.token(q,L.htmlState);if(!b){var ze=o.innerMode(C,L.htmlState);(ze.mode.name=="xml"&&ze.state.tagStart===null&&!ze.state.context&&ze.state.tokenize.isInText||L.md_inside&&q.current().indexOf(">")>-1)&&(L.f=j,L.block=re,L.htmlState=null)}return de}function F(q,L){var de=L.listStack[L.listStack.length-1]||0,ze=L.indentation=q.quote?L.push(s.formatting+"-"+q.formatting[de]+"-"+q.quote):L.push("error"))}if(q.taskOpen)return L.push("meta"),L.length?L.join(" "):null;if(q.taskClosed)return L.push("property"),L.length?L.join(" "):null;if(q.linkHref?L.push(s.linkHref,"url"):(q.strong&&L.push(s.strong),q.em&&L.push(s.em),q.strikethrough&&L.push(s.strikethrough),q.emoji&&L.push(s.emoji),q.linkText&&L.push(s.linkText),q.code&&L.push(s.code),q.image&&L.push(s.image),q.imageAltText&&L.push(s.imageAltText,"link"),q.imageMarker&&L.push(s.imageMarker)),q.header&&L.push(s.header,s.header+"-"+q.header),q.quote&&(L.push(s.quote),!v.maxBlockquoteDepth||v.maxBlockquoteDepth>=q.quote?L.push(s.quote+"-"+q.quote):L.push(s.quote+"-"+v.maxBlockquoteDepth)),q.list!==!1){var ze=(q.listStack.length-1)%3;ze?ze===1?L.push(s.list2):L.push(s.list3):L.push(s.list1)}return q.trailingSpaceNewLine?L.push("trailing-space-new-line"):q.trailingSpace&&L.push("trailing-space-"+(q.trailingSpace%2?"a":"b")),L.length?L.join(" "):null}function Q(q,L){if(q.match(w,!0))return D(L)}function j(q,L){var de=L.text(q,L);if(typeof de<"u")return de;if(L.list)return L.list=null,D(L);if(L.taskList){var ze=q.match(x,!0)[1]===" ";return ze?L.taskOpen=!0:L.taskClosed=!0,v.highlightFormatting&&(L.formatting="task"),L.taskList=!1,D(L)}if(L.taskOpen=!1,L.taskClosed=!1,L.header&&q.match(/^#+$/,!0))return v.highlightFormatting&&(L.formatting="header"),D(L);var pe=q.next();if(L.linkTitle){L.linkTitle=!1;var Ee=pe;pe==="("&&(Ee=")"),Ee=(Ee+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1");var ge="^\\s*(?:[^"+Ee+"\\\\]+|\\\\\\\\|\\\\.)"+Ee;if(q.match(new RegExp(ge),!0))return s.linkHref}if(pe==="`"){var Oe=L.formatting;v.highlightFormatting&&(L.formatting="code"),q.eatWhile("`");var qe=q.current().length;if(L.code==0&&(!L.quote||qe==1))return L.code=qe,D(L);if(qe==L.code){var Se=D(L);return L.code=0,Se}else return L.formatting=Oe,D(L)}else if(L.code)return D(L);if(pe==="\\"&&(q.next(),v.highlightFormatting)){var je=D(L),Ze=s.formatting+"-escape";return je?je+" "+Ze:Ze}if(pe==="!"&&q.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return L.imageMarker=!0,L.image=!0,v.highlightFormatting&&(L.formatting="image"),D(L);if(pe==="["&&L.imageMarker&&q.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return L.imageMarker=!1,L.imageAltText=!0,v.highlightFormatting&&(L.formatting="image"),D(L);if(pe==="]"&&L.imageAltText){v.highlightFormatting&&(L.formatting="image");var je=D(L);return L.imageAltText=!1,L.image=!1,L.inline=L.f=_,je}if(pe==="["&&!L.image)return L.linkText&&q.match(/^.*?\]/)||(L.linkText=!0,v.highlightFormatting&&(L.formatting="link")),D(L);if(pe==="]"&&L.linkText){v.highlightFormatting&&(L.formatting="link");var je=D(L);return L.linkText=!1,L.inline=L.f=q.match(/\(.*?\)| ?\[.*?\]/,!1)?_:j,je}if(pe==="<"&&q.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){L.f=L.inline=V,v.highlightFormatting&&(L.formatting="link");var je=D(L);return je?je+=" ":je="",je+s.linkInline}if(pe==="<"&&q.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){L.f=L.inline=V,v.highlightFormatting&&(L.formatting="link");var je=D(L);return je?je+=" ":je="",je+s.linkEmail}if(v.xml&&pe==="<"&&q.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var ke=q.string.indexOf(">",q.pos);if(ke!=-1){var Je=q.string.substring(q.start,ke);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(Je)&&(L.md_inside=!0)}return q.backUp(1),L.htmlState=o.startState(C),H(q,L,N)}if(v.xml&&pe==="<"&&q.match(/^\/\w*?>/))return L.md_inside=!1,"tag";if(pe==="*"||pe==="_"){for(var He=1,Ge=q.pos==1?" ":q.string.charAt(q.pos-2);He<3&&q.eat(pe);)He++;var U=q.peek()||" ",G=!/\s/.test(U)&&(!y.test(U)||/\s/.test(Ge)||y.test(Ge)),ce=!/\s/.test(Ge)&&(!y.test(Ge)||/\s/.test(U)||y.test(U)),Be=null,te=null;if(He%2&&(!L.em&&G&&(pe==="*"||!ce||y.test(Ge))?Be=!0:L.em==pe&&ce&&(pe==="*"||!G||y.test(U))&&(Be=!1)),He>1&&(!L.strong&&G&&(pe==="*"||!ce||y.test(Ge))?te=!0:L.strong==pe&&ce&&(pe==="*"||!G||y.test(U))&&(te=!1)),te!=null||Be!=null){v.highlightFormatting&&(L.formatting=Be==null?"strong":te==null?"em":"strong em"),Be===!0&&(L.em=pe),te===!0&&(L.strong=pe);var Se=D(L);return Be===!1&&(L.em=!1),te===!1&&(L.strong=!1),Se}}else if(pe===" "&&(q.eat("*")||q.eat("_"))){if(q.peek()===" ")return D(L);q.backUp(1)}if(v.strikethrough){if(pe==="~"&&q.eatWhile(pe)){if(L.strikethrough){v.highlightFormatting&&(L.formatting="strikethrough");var Se=D(L);return L.strikethrough=!1,Se}else if(q.match(/^[^\s]/,!1))return L.strikethrough=!0,v.highlightFormatting&&(L.formatting="strikethrough"),D(L)}else if(pe===" "&&q.match("~~",!0)){if(q.peek()===" ")return D(L);q.backUp(2)}}if(v.emoji&&pe===":"&&q.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){L.emoji=!0,v.highlightFormatting&&(L.formatting="emoji");var fe=D(L);return L.emoji=!1,fe}return pe===" "&&(q.match(/^ +$/,!1)?L.trailingSpace++:L.trailingSpace&&(L.trailingSpaceNewLine=!0)),D(L)}function V(q,L){var de=q.next();if(de===">"){L.f=L.inline=j,v.highlightFormatting&&(L.formatting="link");var ze=D(L);return ze?ze+=" ":ze="",ze+s.linkInline}return q.match(/^[^>]+/,!0),s.linkInline}function _(q,L){if(q.eatSpace())return null;var de=q.next();return de==="("||de==="["?(L.f=L.inline=X(de==="("?")":"]"),v.highlightFormatting&&(L.formatting="link-string"),L.linkHref=!0,D(L)):"error"}var K={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function X(q){return function(L,de){var ze=L.next();if(ze===q){de.f=de.inline=j,v.highlightFormatting&&(de.formatting="link-string");var pe=D(de);return de.linkHref=!1,pe}return L.match(K[q]),de.linkHref=!0,D(de)}}function I(q,L){return q.match(/^([^\]\\]|\\.)*\]:/,!1)?(L.f=B,q.next(),v.highlightFormatting&&(L.formatting="link"),L.linkText=!0,D(L)):M(q,L,j)}function B(q,L){if(q.match("]:",!0)){L.f=L.inline=le,v.highlightFormatting&&(L.formatting="link");var de=D(L);return L.linkText=!1,de}return q.match(/^([^\]\\]|\\.)+/,!0),s.linkText}function le(q,L){return q.eatSpace()?null:(q.match(/^[^\s]+/,!0),q.peek()===void 0?L.linkTitle=!0:q.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/,!0),L.f=L.inline=j,s.linkHref+" url")}var xe={startState:function(){return{f:re,prevLine:{stream:null},thisLine:{stream:null},block:re,htmlState:null,indentation:0,inline:j,text:Q,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(q){return{f:q.f,prevLine:q.prevLine,thisLine:q.thisLine,block:q.block,htmlState:q.htmlState&&o.copyState(C,q.htmlState),indentation:q.indentation,localMode:q.localMode,localState:q.localMode?o.copyState(q.localMode,q.localState):null,inline:q.inline,text:q.text,formatting:!1,linkText:q.linkText,linkTitle:q.linkTitle,linkHref:q.linkHref,code:q.code,em:q.em,strong:q.strong,strikethrough:q.strikethrough,emoji:q.emoji,header:q.header,setext:q.setext,hr:q.hr,taskList:q.taskList,list:q.list,listStack:q.listStack.slice(0),quote:q.quote,indentedCode:q.indentedCode,trailingSpace:q.trailingSpace,trailingSpaceNewLine:q.trailingSpaceNewLine,md_inside:q.md_inside,fencedEndRE:q.fencedEndRE}},token:function(q,L){if(L.formatting=!1,q!=L.thisLine.stream){if(L.header=0,L.hr=!1,q.match(/^\s*$/,!0))return ee(L),null;if(L.prevLine=L.thisLine,L.thisLine={stream:q},L.taskList=!1,L.trailingSpace=0,L.trailingSpaceNewLine=!1,!L.localState&&(L.f=L.block,L.f!=N)){var de=q.match(/^\s*/,!0)[0].replace(/\t/g,R).length;if(L.indentation=de,L.indentationDiff=null,de>0)return null}}return L.f(q,L)},innerMode:function(q){return q.block==N?{state:q.htmlState,mode:C}:q.localState?{state:q.localState,mode:q.localMode}:{state:q,mode:xe}},indent:function(q,L,de){return q.block==N&&C.indent?C.indent(q.htmlState,L,de):q.localState&&q.localMode.indent?q.localMode.indent(q.localState,L,de):o.Pass},blankLine:ee,getType:D,blockCommentStart:"",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return xe},"xml"),o.defineMIME("text/markdown","markdown"),o.defineMIME("text/x-markdown","markdown")})});var eu=Ke((Vs,Js)=>{(function(o){typeof Vs=="object"&&typeof Js=="object"?o(We(),Jo(),Yn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],o):o(CodeMirror)})(function(o){"use strict";var p=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;o.defineMode("gfm",function(v,C){var b=0;function S(T){return T.code=!1,null}var s={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(T){return{code:T.code,codeBlock:T.codeBlock,ateSpace:T.ateSpace}},token:function(T,x){if(x.combineTokens=null,x.codeBlock)return T.match(/^```+/)?(x.codeBlock=!1,null):(T.skipToEnd(),null);if(T.sol()&&(x.code=!1),T.sol()&&T.match(/^```+/))return T.skipToEnd(),x.codeBlock=!0,null;if(T.peek()==="`"){T.next();var c=T.pos;T.eatWhile("`");var d=1+T.pos-c;return x.code?d===b&&(x.code=!1):(b=d,x.code=!0),null}else if(x.code)return T.next(),null;if(T.eatSpace())return x.ateSpace=!0,null;if((T.sol()||x.ateSpace)&&(x.ateSpace=!1,C.gitHubSpice!==!1)){if(T.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return x.combineTokens=!0,"link";if(T.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return x.combineTokens=!0,"link"}return T.match(p)&&T.string.slice(T.start-2,T.start)!="]("&&(T.start==0||/\W/.test(T.string.charAt(T.start-1)))?(x.combineTokens=!0,"link"):(T.next(),null)},blankLine:S},h={taskLists:!0,strikethrough:!0,emoji:!0};for(var g in C)h[g]=C[g];return h.name="markdown",o.overlayMode(o.getMode(v,h),s)},"markdown"),o.defineMIME("text/x-gfm","gfm")})});var nu=Ke((tu,ru)=>{(function(o){typeof tu=="object"&&typeof ru=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("go",function(p){var v=p.indentUnit,C={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},b={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},S=/[+\-*&^%:=<>!|\/]/,s;function h(w,E){var z=w.next();if(z=='"'||z=="'"||z=="`")return E.tokenize=g(z),E.tokenize(w,E);if(/[\d\.]/.test(z))return z=="."?w.match(/^[0-9_]+([eE][\-+]?[0-9_]+)?/):z=="0"?w.match(/^[xX][0-9a-fA-F_]+/)||w.match(/^[0-7_]+/):w.match(/^[0-9_]*\.?[0-9_]*([eE][\-+]?[0-9_]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(z))return s=z,null;if(z=="/"){if(w.eat("*"))return E.tokenize=T,T(w,E);if(w.eat("/"))return w.skipToEnd(),"comment"}if(S.test(z))return w.eatWhile(S),"operator";w.eatWhile(/[\w\$_\xa1-\uffff]/);var y=w.current();return C.propertyIsEnumerable(y)?((y=="case"||y=="default")&&(s="case"),"keyword"):b.propertyIsEnumerable(y)?"atom":"variable"}function g(w){return function(E,z){for(var y=!1,R,M=!1;(R=E.next())!=null;){if(R==w&&!y){M=!0;break}y=!y&&w!="`"&&R=="\\"}return(M||!(y||w=="`"))&&(z.tokenize=h),"string"}}function T(w,E){for(var z=!1,y;y=w.next();){if(y=="/"&&z){E.tokenize=h;break}z=y=="*"}return"comment"}function x(w,E,z,y,R){this.indented=w,this.column=E,this.type=z,this.align=y,this.prev=R}function c(w,E,z){return w.context=new x(w.indented,E,z,null,w.context)}function d(w){if(w.context.prev){var E=w.context.type;return(E==")"||E=="]"||E=="}")&&(w.indented=w.context.indented),w.context=w.context.prev}}return{startState:function(w){return{tokenize:null,context:new x((w||0)-v,0,"top",!1),indented:0,startOfLine:!0}},token:function(w,E){var z=E.context;if(w.sol()&&(z.align==null&&(z.align=!1),E.indented=w.indentation(),E.startOfLine=!0,z.type=="case"&&(z.type="}")),w.eatSpace())return null;s=null;var y=(E.tokenize||h)(w,E);return y=="comment"||(z.align==null&&(z.align=!0),s=="{"?c(E,w.column(),"}"):s=="["?c(E,w.column(),"]"):s=="("?c(E,w.column(),")"):s=="case"?z.type="case":(s=="}"&&z.type=="}"||s==z.type)&&d(E),E.startOfLine=!1),y},indent:function(w,E){if(w.tokenize!=h&&w.tokenize!=null)return o.Pass;var z=w.context,y=E&&E.charAt(0);if(z.type=="case"&&/^(?:case|default)\b/.test(E))return w.context.type="}",z.indented;var R=y==z.type;return z.align?z.column+(R?0:1):z.indented+(R?0:v)},electricChars:"{}):",closeBrackets:"()[]{}''\"\"``",fold:"brace",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),o.defineMIME("text/x-go","go")})});var au=Ke((iu,ou)=>{(function(o){typeof iu=="object"&&typeof ou=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("http",function(){function p(T,x){return T.skipToEnd(),x.cur=h,"error"}function v(T,x){return T.match(/^HTTP\/\d\.\d/)?(x.cur=C,"keyword"):T.match(/^[A-Z]+/)&&/[ \t]/.test(T.peek())?(x.cur=S,"keyword"):p(T,x)}function C(T,x){var c=T.match(/^\d+/);if(!c)return p(T,x);x.cur=b;var d=Number(c[0]);return d>=100&&d<200?"positive informational":d>=200&&d<300?"positive success":d>=300&&d<400?"positive redirect":d>=400&&d<500?"negative client-error":d>=500&&d<600?"negative server-error":"error"}function b(T,x){return T.skipToEnd(),x.cur=h,null}function S(T,x){return T.eatWhile(/\S/),x.cur=s,"string-2"}function s(T,x){return T.match(/^HTTP\/\d\.\d$/)?(x.cur=h,"keyword"):p(T,x)}function h(T){return T.sol()&&!T.eat(/[ \t]/)?T.match(/^.*?:/)?"atom":(T.skipToEnd(),"error"):(T.skipToEnd(),"string")}function g(T){return T.skipToEnd(),null}return{token:function(T,x){var c=x.cur;return c!=h&&c!=g&&T.eatSpace()?null:c(T,x)},blankLine:function(T){T.cur=g},startState:function(){return{cur:v}}}}),o.defineMIME("message/http","http")})});var uu=Ke((lu,su)=>{(function(o){typeof lu=="object"&&typeof su=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("jinja2",function(){var p=["and","as","block","endblock","by","cycle","debug","else","elif","extends","filter","endfilter","firstof","do","for","endfor","if","endif","ifchanged","endifchanged","ifequal","endifequal","ifnotequal","set","raw","endraw","endifnotequal","in","include","load","not","now","or","parsed","regroup","reversed","spaceless","call","endcall","macro","endmacro","endspaceless","ssi","templatetag","openblock","closeblock","openvariable","closevariable","without","context","openbrace","closebrace","opencomment","closecomment","widthratio","url","with","endwith","get_current_language","trans","endtrans","noop","blocktrans","endblocktrans","get_available_languages","get_current_language_bidi","pluralize","autoescape","endautoescape"],v=/^[+\-*&%=<>!?|~^]/,C=/^[:\[\(\{]/,b=["true","false"],S=/^(\d[+\-\*\/])?\d+(\.\d+)?/;p=new RegExp("(("+p.join(")|(")+"))\\b"),b=new RegExp("(("+b.join(")|(")+"))\\b");function s(h,g){var T=h.peek();if(g.incomment)return h.skipTo("#}")?(h.eatWhile(/\#|}/),g.incomment=!1):h.skipToEnd(),"comment";if(g.intag){if(g.operator){if(g.operator=!1,h.match(b))return"atom";if(h.match(S))return"number"}if(g.sign){if(g.sign=!1,h.match(b))return"atom";if(h.match(S))return"number"}if(g.instring)return T==g.instring&&(g.instring=!1),h.next(),"string";if(T=="'"||T=='"')return g.instring=T,h.next(),"string";if(g.inbraces>0&&T==")")h.next(),g.inbraces--;else if(T=="(")h.next(),g.inbraces++;else if(g.inbrackets>0&&T=="]")h.next(),g.inbrackets--;else if(T=="[")h.next(),g.inbrackets++;else{if(!g.lineTag&&(h.match(g.intag+"}")||h.eat("-")&&h.match(g.intag+"}")))return g.intag=!1,"tag";if(h.match(v))return g.operator=!0,"operator";if(h.match(C))g.sign=!0;else{if(h.column()==1&&g.lineTag&&h.match(p))return"keyword";if(h.eat(" ")||h.sol()){if(h.match(p))return"keyword";if(h.match(b))return"atom";if(h.match(S))return"number";h.sol()&&h.next()}else h.next()}}return"variable"}else if(h.eat("{")){if(h.eat("#"))return g.incomment=!0,h.skipTo("#}")?(h.eatWhile(/\#|}/),g.incomment=!1):h.skipToEnd(),"comment";if(T=h.eat(/\{|%/))return g.intag=T,g.inbraces=0,g.inbrackets=0,T=="{"&&(g.intag="}"),h.eat("-"),"tag"}else if(h.eat("#")){if(h.peek()=="#")return h.skipToEnd(),"comment";if(!h.eol())return g.intag=!0,g.lineTag=!0,g.inbraces=0,g.inbrackets=0,"tag"}h.next()}return{startState:function(){return{tokenize:s,inbrackets:0,inbraces:0}},token:function(h,g){var T=g.tokenize(h,g);return h.eol()&&g.lineTag&&!g.instring&&g.inbraces==0&&g.inbrackets==0&&(g.intag=!1,g.lineTag=!1),T},blockCommentStart:"{#",blockCommentEnd:"#}",lineComment:"##"}}),o.defineMIME("text/jinja2","jinja2")})});var du=Ke((cu,fu)=>{(function(o){typeof cu=="object"&&typeof fu=="object"?o(We(),mn(),vn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript"],o):o(CodeMirror)})(function(o){"use strict";function p(C,b,S,s){this.state=C,this.mode=b,this.depth=S,this.prev=s}function v(C){return new p(o.copyState(C.mode,C.state),C.mode,C.depth,C.prev&&v(C.prev))}o.defineMode("jsx",function(C,b){var S=o.getMode(C,{name:"xml",allowMissing:!0,multilineTagIndentPastTag:!1,allowMissingTagName:!0}),s=o.getMode(C,b&&b.base||"javascript");function h(c){var d=c.tagName;c.tagName=null;var w=S.indent(c,"","");return c.tagName=d,w}function g(c,d){return d.context.mode==S?T(c,d,d.context):x(c,d,d.context)}function T(c,d,w){if(w.depth==2)return c.match(/^.*?\*\//)?w.depth=1:c.skipToEnd(),"comment";if(c.peek()=="{"){S.skipAttribute(w.state);var E=h(w.state),z=w.state.context;if(z&&c.match(/^[^>]*>\s*$/,!1)){for(;z.prev&&!z.startOfLine;)z=z.prev;z.startOfLine?E-=C.indentUnit:w.prev.state.lexical&&(E=w.prev.state.lexical.indented)}else w.depth==1&&(E+=C.indentUnit);return d.context=new p(o.startState(s,E),s,0,d.context),null}if(w.depth==1){if(c.peek()=="<")return S.skipAttribute(w.state),d.context=new p(o.startState(S,h(w.state)),S,0,d.context),null;if(c.match("//"))return c.skipToEnd(),"comment";if(c.match("/*"))return w.depth=2,g(c,d)}var y=S.token(c,w.state),R=c.current(),M;return/\btag\b/.test(y)?/>$/.test(R)?w.state.context?w.depth=0:d.context=d.context.prev:/^-1&&c.backUp(R.length-M),y}function x(c,d,w){if(c.peek()=="<"&&!c.match(/^<([^<>]|<[^>]*>)+,\s*>/,!1)&&s.expressionAllowed(c,w.state))return d.context=new p(o.startState(S,s.indent(w.state,"","")),S,0,d.context),s.skipExpression(w.state),null;var E=s.token(c,w.state);if(!E&&w.depth!=null){var z=c.current();z=="{"?w.depth++:z=="}"&&--w.depth==0&&(d.context=d.context.prev)}return E}return{startState:function(){return{context:new p(o.startState(s),s)}},copyState:function(c){return{context:v(c.context)}},token:g,indent:function(c,d,w){return c.context.mode.indent(c.context.state,d,w)},innerMode:function(c){return c.context}}},"xml","javascript"),o.defineMIME("text/jsx","jsx"),o.defineMIME("text/typescript-jsx",{name:"jsx",base:{name:"javascript",typescript:!0}})})});var gu=Ke((pu,hu)=>{(function(o){typeof pu=="object"&&typeof hu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("nginx",function(p){function v(w){for(var E={},z=w.split(" "),y=0;y*\/]/.test(y)?g(null,"select-op"):/[;{}:\[\]]/.test(y)?g(null,y):(w.eatWhile(/[\w\\\-]/),g("variable","variable"))}function x(w,E){for(var z=!1,y;(y=w.next())!=null;){if(z&&y=="/"){E.tokenize=T;break}z=y=="*"}return g("comment","comment")}function c(w,E){for(var z=0,y;(y=w.next())!=null;){if(z>=2&&y==">"){E.tokenize=T;break}z=y=="-"?z+1:0}return g("comment","comment")}function d(w){return function(E,z){for(var y=!1,R;(R=E.next())!=null&&!(R==w&&!y);)y=!y&&R=="\\";return y||(z.tokenize=T),g("string","string")}}return{startState:function(w){return{tokenize:T,baseIndent:w||0,stack:[]}},token:function(w,E){if(w.eatSpace())return null;h=null;var z=E.tokenize(w,E),y=E.stack[E.stack.length-1];return h=="hash"&&y=="rule"?z="atom":z=="variable"&&(y=="rule"?z="number":(!y||y=="@media{")&&(z="tag")),y=="rule"&&/^[\{\};]$/.test(h)&&E.stack.pop(),h=="{"?y=="@media"?E.stack[E.stack.length-1]="@media{":E.stack.push("{"):h=="}"?E.stack.pop():h=="@media"?E.stack.push("@media"):y=="{"&&h!="comment"&&E.stack.push("rule"),z},indent:function(w,E){var z=w.stack.length;return/^\}/.test(E)&&(z-=w.stack[w.stack.length-1]=="rule"?2:1),w.baseIndent+z*s},electricChars:"}"}}),o.defineMIME("text/x-nginx-conf","nginx")})});var bu=Ke((mu,vu)=>{(function(o){typeof mu=="object"&&typeof vu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("pascal",function(){function p(T){for(var x={},c=T.split(" "),d=0;d!?|\/]/;function S(T,x){var c=T.next();if(c=="#"&&x.startOfLine)return T.skipToEnd(),"meta";if(c=='"'||c=="'")return x.tokenize=s(c),x.tokenize(T,x);if(c=="("&&T.eat("*"))return x.tokenize=h,h(T,x);if(c=="{")return x.tokenize=g,g(T,x);if(/[\[\]\(\),;\:\.]/.test(c))return null;if(/\d/.test(c))return T.eatWhile(/[\w\.]/),"number";if(c=="/"&&T.eat("/"))return T.skipToEnd(),"comment";if(b.test(c))return T.eatWhile(b),"operator";T.eatWhile(/[\w\$_]/);var d=T.current();return v.propertyIsEnumerable(d)?"keyword":C.propertyIsEnumerable(d)?"atom":"variable"}function s(T){return function(x,c){for(var d=!1,w,E=!1;(w=x.next())!=null;){if(w==T&&!d){E=!0;break}d=!d&&w=="\\"}return(E||!d)&&(c.tokenize=null),"string"}}function h(T,x){for(var c=!1,d;d=T.next();){if(d==")"&&c){x.tokenize=null;break}c=d=="*"}return"comment"}function g(T,x){for(var c;c=T.next();)if(c=="}"){x.tokenize=null;break}return"comment"}return{startState:function(){return{tokenize:null}},token:function(T,x){if(T.eatSpace())return null;var c=(x.tokenize||S)(T,x);return c=="comment"||c=="meta",c},electricChars:"{}"}}),o.defineMIME("text/x-pascal","pascal")})});var _u=Ke((yu,xu)=>{(function(o){typeof yu=="object"&&typeof xu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("perl",function(){var S={"->":4,"++":4,"--":4,"**":4,"=~":4,"!~":4,"*":4,"/":4,"%":4,x:4,"+":4,"-":4,".":4,"<<":4,">>":4,"<":4,">":4,"<=":4,">=":4,lt:4,gt:4,le:4,ge:4,"==":4,"!=":4,"<=>":4,eq:4,ne:4,cmp:4,"~~":4,"&":4,"|":4,"^":4,"&&":4,"||":4,"//":4,"..":4,"...":4,"?":4,":":4,"=":4,"+=":4,"-=":4,"*=":4,",":4,"=>":4,"::":4,not:4,and:4,or:4,xor:4,BEGIN:[5,1],END:[5,1],PRINT:[5,1],PRINTF:[5,1],GETC:[5,1],READ:[5,1],READLINE:[5,1],DESTROY:[5,1],TIE:[5,1],TIEHANDLE:[5,1],UNTIE:[5,1],STDIN:5,STDIN_TOP:5,STDOUT:5,STDOUT_TOP:5,STDERR:5,STDERR_TOP:5,$ARG:5,$_:5,"@ARG":5,"@_":5,$LIST_SEPARATOR:5,'$"':5,$PROCESS_ID:5,$PID:5,$$:5,$REAL_GROUP_ID:5,$GID:5,"$(":5,$EFFECTIVE_GROUP_ID:5,$EGID:5,"$)":5,$PROGRAM_NAME:5,$0:5,$SUBSCRIPT_SEPARATOR:5,$SUBSEP:5,"$;":5,$REAL_USER_ID:5,$UID:5,"$<":5,$EFFECTIVE_USER_ID:5,$EUID:5,"$>":5,$a:5,$b:5,$COMPILING:5,"$^C":5,$DEBUGGING:5,"$^D":5,"${^ENCODING}":5,$ENV:5,"%ENV":5,$SYSTEM_FD_MAX:5,"$^F":5,"@F":5,"${^GLOBAL_PHASE}":5,"$^H":5,"%^H":5,"@INC":5,"%INC":5,$INPLACE_EDIT:5,"$^I":5,"$^M":5,$OSNAME:5,"$^O":5,"${^OPEN}":5,$PERLDB:5,"$^P":5,$SIG:5,"%SIG":5,$BASETIME:5,"$^T":5,"${^TAINT}":5,"${^UNICODE}":5,"${^UTF8CACHE}":5,"${^UTF8LOCALE}":5,$PERL_VERSION:5,"$^V":5,"${^WIN32_SLOPPY_STAT}":5,$EXECUTABLE_NAME:5,"$^X":5,$1:5,$MATCH:5,"$&":5,"${^MATCH}":5,$PREMATCH:5,"$`":5,"${^PREMATCH}":5,$POSTMATCH:5,"$'":5,"${^POSTMATCH}":5,$LAST_PAREN_MATCH:5,"$+":5,$LAST_SUBMATCH_RESULT:5,"$^N":5,"@LAST_MATCH_END":5,"@+":5,"%LAST_PAREN_MATCH":5,"%+":5,"@LAST_MATCH_START":5,"@-":5,"%LAST_MATCH_START":5,"%-":5,$LAST_REGEXP_CODE_RESULT:5,"$^R":5,"${^RE_DEBUG_FLAGS}":5,"${^RE_TRIE_MAXBUF}":5,$ARGV:5,"@ARGV":5,ARGV:5,ARGVOUT:5,$OUTPUT_FIELD_SEPARATOR:5,$OFS:5,"$,":5,$INPUT_LINE_NUMBER:5,$NR:5,"$.":5,$INPUT_RECORD_SEPARATOR:5,$RS:5,"$/":5,$OUTPUT_RECORD_SEPARATOR:5,$ORS:5,"$\\":5,$OUTPUT_AUTOFLUSH:5,"$|":5,$ACCUMULATOR:5,"$^A":5,$FORMAT_FORMFEED:5,"$^L":5,$FORMAT_PAGE_NUMBER:5,"$%":5,$FORMAT_LINES_LEFT:5,"$-":5,$FORMAT_LINE_BREAK_CHARACTERS:5,"$:":5,$FORMAT_LINES_PER_PAGE:5,"$=":5,$FORMAT_TOP_NAME:5,"$^":5,$FORMAT_NAME:5,"$~":5,"${^CHILD_ERROR_NATIVE}":5,$EXTENDED_OS_ERROR:5,"$^E":5,$EXCEPTIONS_BEING_CAUGHT:5,"$^S":5,$WARNING:5,"$^W":5,"${^WARNING_BITS}":5,$OS_ERROR:5,$ERRNO:5,"$!":5,"%OS_ERROR":5,"%ERRNO":5,"%!":5,$CHILD_ERROR:5,"$?":5,$EVAL_ERROR:5,"$@":5,$OFMT:5,"$#":5,"$*":5,$ARRAY_BASE:5,"$[":5,$OLD_PERL_VERSION:5,"$]":5,if:[1,1],elsif:[1,1],else:[1,1],while:[1,1],unless:[1,1],for:[1,1],foreach:[1,1],abs:1,accept:1,alarm:1,atan2:1,bind:1,binmode:1,bless:1,bootstrap:1,break:1,caller:1,chdir:1,chmod:1,chomp:1,chop:1,chown:1,chr:1,chroot:1,close:1,closedir:1,connect:1,continue:[1,1],cos:1,crypt:1,dbmclose:1,dbmopen:1,default:1,defined:1,delete:1,die:1,do:1,dump:1,each:1,endgrent:1,endhostent:1,endnetent:1,endprotoent:1,endpwent:1,endservent:1,eof:1,eval:1,exec:1,exists:1,exit:1,exp:1,fcntl:1,fileno:1,flock:1,fork:1,format:1,formline:1,getc:1,getgrent:1,getgrgid:1,getgrnam:1,gethostbyaddr:1,gethostbyname:1,gethostent:1,getlogin:1,getnetbyaddr:1,getnetbyname:1,getnetent:1,getpeername:1,getpgrp:1,getppid:1,getpriority:1,getprotobyname:1,getprotobynumber:1,getprotoent:1,getpwent:1,getpwnam:1,getpwuid:1,getservbyname:1,getservbyport:1,getservent:1,getsockname:1,getsockopt:1,given:1,glob:1,gmtime:1,goto:1,grep:1,hex:1,import:1,index:1,int:1,ioctl:1,join:1,keys:1,kill:1,last:1,lc:1,lcfirst:1,length:1,link:1,listen:1,local:2,localtime:1,lock:1,log:1,lstat:1,m:null,map:1,mkdir:1,msgctl:1,msgget:1,msgrcv:1,msgsnd:1,my:2,new:1,next:1,no:1,oct:1,open:1,opendir:1,ord:1,our:2,pack:1,package:1,pipe:1,pop:1,pos:1,print:1,printf:1,prototype:1,push:1,q:null,qq:null,qr:null,quotemeta:null,qw:null,qx:null,rand:1,read:1,readdir:1,readline:1,readlink:1,readpipe:1,recv:1,redo:1,ref:1,rename:1,require:1,reset:1,return:1,reverse:1,rewinddir:1,rindex:1,rmdir:1,s:null,say:1,scalar:1,seek:1,seekdir:1,select:1,semctl:1,semget:1,semop:1,send:1,setgrent:1,sethostent:1,setnetent:1,setpgrp:1,setpriority:1,setprotoent:1,setpwent:1,setservent:1,setsockopt:1,shift:1,shmctl:1,shmget:1,shmread:1,shmwrite:1,shutdown:1,sin:1,sleep:1,socket:1,socketpair:1,sort:1,splice:1,split:1,sprintf:1,sqrt:1,srand:1,stat:1,state:1,study:1,sub:1,substr:1,symlink:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,tell:1,telldir:1,tie:1,tied:1,time:1,times:1,tr:null,truncate:1,uc:1,ucfirst:1,umask:1,undef:1,unlink:1,unpack:1,unshift:1,untie:1,use:1,utime:1,values:1,vec:1,wait:1,waitpid:1,wantarray:1,warn:1,when:1,write:1,y:null},s="string-2",h=/[goseximacplud]/;function g(c,d,w,E,z){return d.chain=null,d.style=null,d.tail=null,d.tokenize=function(y,R){for(var M=!1,H,Z=0;H=y.next();){if(H===w[Z]&&!M)return w[++Z]!==void 0?(R.chain=w[Z],R.style=E,R.tail=z):z&&y.eatWhile(z),R.tokenize=x,E;M=!M&&H=="\\"}return E},d.tokenize(c,d)}function T(c,d,w){return d.tokenize=function(E,z){return E.string==w&&(z.tokenize=x),E.skipToEnd(),"string"},d.tokenize(c,d)}function x(c,d){if(c.eatSpace())return null;if(d.chain)return g(c,d,d.chain,d.style,d.tail);if(c.match(/^(\-?((\d[\d_]*)?\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F_]+|0b[01_]+|\d[\d_]*(e[+-]?\d+)?)/))return"number";if(c.match(/^<<(?=[_a-zA-Z])/))return c.eatWhile(/\w/),T(c,d,c.current().substr(2));if(c.sol()&&c.match(/^\=item(?!\w)/))return T(c,d,"=cut");var w=c.next();if(w=='"'||w=="'"){if(v(c,3)=="<<"+w){var E=c.pos;c.eatWhile(/\w/);var z=c.current().substr(1);if(z&&c.eat(w))return T(c,d,z);c.pos=E}return g(c,d,[w],"string")}if(w=="q"){var y=p(c,-2);if(!(y&&/\w/.test(y))){if(y=p(c,0),y=="x"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],s,h);if(y=="[")return b(c,2),g(c,d,["]"],s,h);if(y=="{")return b(c,2),g(c,d,["}"],s,h);if(y=="<")return b(c,2),g(c,d,[">"],s,h);if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],s,h)}else if(y=="q"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],"string");if(y=="[")return b(c,2),g(c,d,["]"],"string");if(y=="{")return b(c,2),g(c,d,["}"],"string");if(y=="<")return b(c,2),g(c,d,[">"],"string");if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],"string")}else if(y=="w"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],"bracket");if(y=="[")return b(c,2),g(c,d,["]"],"bracket");if(y=="{")return b(c,2),g(c,d,["}"],"bracket");if(y=="<")return b(c,2),g(c,d,[">"],"bracket");if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],"bracket")}else if(y=="r"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],s,h);if(y=="[")return b(c,2),g(c,d,["]"],s,h);if(y=="{")return b(c,2),g(c,d,["}"],s,h);if(y=="<")return b(c,2),g(c,d,[">"],s,h);if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],s,h)}else if(/[\^'"!~\/(\[{<]/.test(y)){if(y=="(")return b(c,1),g(c,d,[")"],"string");if(y=="[")return b(c,1),g(c,d,["]"],"string");if(y=="{")return b(c,1),g(c,d,["}"],"string");if(y=="<")return b(c,1),g(c,d,[">"],"string");if(/[\^'"!~\/]/.test(y))return g(c,d,[c.eat(y)],"string")}}}if(w=="m"){var y=p(c,-2);if(!(y&&/\w/.test(y))&&(y=c.eat(/[(\[{<\^'"!~\/]/),y)){if(/[\^'"!~\/]/.test(y))return g(c,d,[y],s,h);if(y=="(")return g(c,d,[")"],s,h);if(y=="[")return g(c,d,["]"],s,h);if(y=="{")return g(c,d,["}"],s,h);if(y=="<")return g(c,d,[">"],s,h)}}if(w=="s"){var y=/[\/>\]})\w]/.test(p(c,-2));if(!y&&(y=c.eat(/[(\[{<\^'"!~\/]/),y))return y=="["?g(c,d,["]","]"],s,h):y=="{"?g(c,d,["}","}"],s,h):y=="<"?g(c,d,[">",">"],s,h):y=="("?g(c,d,[")",")"],s,h):g(c,d,[y,y],s,h)}if(w=="y"){var y=/[\/>\]})\w]/.test(p(c,-2));if(!y&&(y=c.eat(/[(\[{<\^'"!~\/]/),y))return y=="["?g(c,d,["]","]"],s,h):y=="{"?g(c,d,["}","}"],s,h):y=="<"?g(c,d,[">",">"],s,h):y=="("?g(c,d,[")",")"],s,h):g(c,d,[y,y],s,h)}if(w=="t"){var y=/[\/>\]})\w]/.test(p(c,-2));if(!y&&(y=c.eat("r"),y&&(y=c.eat(/[(\[{<\^'"!~\/]/),y)))return y=="["?g(c,d,["]","]"],s,h):y=="{"?g(c,d,["}","}"],s,h):y=="<"?g(c,d,[">",">"],s,h):y=="("?g(c,d,[")",")"],s,h):g(c,d,[y,y],s,h)}if(w=="`")return g(c,d,[w],"variable-2");if(w=="/")return/~\s*$/.test(v(c))?g(c,d,[w],s,h):"operator";if(w=="$"){var E=c.pos;if(c.eatWhile(/\d/)||c.eat("{")&&c.eatWhile(/\d/)&&c.eat("}"))return"variable-2";c.pos=E}if(/[$@%]/.test(w)){var E=c.pos;if(c.eat("^")&&c.eat(/[A-Z]/)||!/[@$%&]/.test(p(c,-2))&&c.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){var y=c.current();if(S[y])return"variable-2"}c.pos=E}if(/[$@%&]/.test(w)&&(c.eatWhile(/[\w$]/)||c.eat("{")&&c.eatWhile(/[\w$]/)&&c.eat("}"))){var y=c.current();return S[y]?"variable-2":"variable"}if(w=="#"&&p(c,-2)!="$")return c.skipToEnd(),"comment";if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(w)){var E=c.pos;if(c.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/),S[c.current()])return"operator";c.pos=E}if(w=="_"&&c.pos==1){if(C(c,6)=="_END__")return g(c,d,["\0"],"comment");if(C(c,7)=="_DATA__")return g(c,d,["\0"],"variable-2");if(C(c,7)=="_C__")return g(c,d,["\0"],"string")}if(/\w/.test(w)){var E=c.pos;if(p(c,-2)=="{"&&(p(c,0)=="}"||c.eatWhile(/\w/)&&p(c,0)=="}"))return"string";c.pos=E}if(/[A-Z]/.test(w)){var R=p(c,-2),E=c.pos;if(c.eatWhile(/[A-Z_]/),/[\da-z]/.test(p(c,0)))c.pos=E;else{var y=S[c.current()];return y?(y[1]&&(y=y[0]),R!=":"?y==1?"keyword":y==2?"def":y==3?"atom":y==4?"operator":y==5?"variable-2":"meta":"meta"):"meta"}}if(/[a-zA-Z_]/.test(w)){var R=p(c,-2);c.eatWhile(/\w/);var y=S[c.current()];return y?(y[1]&&(y=y[0]),R!=":"?y==1?"keyword":y==2?"def":y==3?"atom":y==4?"operator":y==5?"variable-2":"meta":"meta"):"meta"}return null}return{startState:function(){return{tokenize:x,chain:null,style:null,tail:null}},token:function(c,d){return(d.tokenize||x)(c,d)},lineComment:"#"}}),o.registerHelper("wordChars","perl",/[\w$]/),o.defineMIME("text/x-perl","perl");function p(S,s){return S.string.charAt(S.pos+(s||0))}function v(S,s){if(s){var h=S.pos-s;return S.string.substr(h>=0?h:0,s)}else return S.string.substr(0,S.pos-1)}function C(S,s){var h=S.string.length,g=h-S.pos+1;return S.string.substr(S.pos,s&&s=(g=S.string.length-1)?S.pos=g:S.pos=h}})});var Su=Ke((ku,wu)=>{(function(o){typeof ku=="object"&&typeof wu=="object"?o(We(),Qn(),Vo()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../htmlmixed/htmlmixed","../clike/clike"],o):o(CodeMirror)})(function(o){"use strict";function p(T){for(var x={},c=T.split(" "),d=0;d\w/,!1)&&(x.tokenize=v([[["->",null]],[[/[\w]+/,"variable"]]],c,d)),"variable-2";for(var w=!1;!T.eol()&&(w||d===!1||!T.match("{$",!1)&&!T.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/,!1));){if(!w&&T.match(c)){x.tokenize=null,x.tokStack.pop(),x.tokStack.pop();break}w=T.next()=="\\"&&!w}return"string"}var S="abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally readonly match",s="true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__",h="func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage memory_get_peak_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";o.registerHelper("hintWords","php",[S,s,h].join(" ").split(" ")),o.registerHelper("wordChars","php",/[\w$]/);var g={name:"clike",helperType:"php",keywords:p(S),blockKeywords:p("catch do else elseif for foreach if switch try while finally"),defKeywords:p("class enum function interface namespace trait"),atoms:p(s),builtin:p(h),multiLineStrings:!0,hooks:{$:function(T){return T.eatWhile(/[\w\$_]/),"variable-2"},"<":function(T,x){var c;if(c=T.match(/^<<\s*/)){var d=T.eat(/['"]/);T.eatWhile(/[\w\.]/);var w=T.current().slice(c[0].length+(d?2:1));if(d&&T.eat(d),w)return(x.tokStack||(x.tokStack=[])).push(w,0),x.tokenize=C(w,d!="'"),"string"}return!1},"#":function(T){for(;!T.eol()&&!T.match("?>",!1);)T.next();return"comment"},"/":function(T){if(T.eat("/")){for(;!T.eol()&&!T.match("?>",!1);)T.next();return"comment"}return!1},'"':function(T,x){return(x.tokStack||(x.tokStack=[])).push('"',0),x.tokenize=C('"'),"string"},"{":function(T,x){return x.tokStack&&x.tokStack.length&&x.tokStack[x.tokStack.length-1]++,!1},"}":function(T,x){return x.tokStack&&x.tokStack.length>0&&!--x.tokStack[x.tokStack.length-1]&&(x.tokenize=C(x.tokStack[x.tokStack.length-2])),!1}}};o.defineMode("php",function(T,x){var c=o.getMode(T,x&&x.htmlMode||"text/html"),d=o.getMode(T,g);function w(E,z){var y=z.curMode==d;if(E.sol()&&z.pending&&z.pending!='"'&&z.pending!="'"&&(z.pending=null),y)return y&&z.php.tokenize==null&&E.match("?>")?(z.curMode=c,z.curState=z.html,z.php.context.prev||(z.php=null),"meta"):d.token(E,z.curState);if(E.match(/^<\?\w*/))return z.curMode=d,z.php||(z.php=o.startState(d,c.indent(z.html,"",""))),z.curState=z.php,"meta";if(z.pending=='"'||z.pending=="'"){for(;!E.eol()&&E.next()!=z.pending;);var R="string"}else if(z.pending&&E.pos/.test(M)?z.pending=Z[0]:z.pending={end:E.pos,style:R},E.backUp(M.length-H)),R}return{startState:function(){var E=o.startState(c),z=x.startOpen?o.startState(d):null;return{html:E,php:z,curMode:x.startOpen?d:c,curState:x.startOpen?z:E,pending:null}},copyState:function(E){var z=E.html,y=o.copyState(c,z),R=E.php,M=R&&o.copyState(d,R),H;return E.curMode==c?H=y:H=M,{html:y,php:M,curMode:E.curMode,curState:H,pending:E.pending}},token:w,indent:function(E,z,y){return E.curMode!=d&&/^\s*<\//.test(z)||E.curMode==d&&/^\?>/.test(z)?c.indent(E.html,z,y):E.curMode.indent(E.curState,z,y)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(E){return{state:E.curState,mode:E.curMode}}}},"htmlmixed","clike"),o.defineMIME("application/x-httpd-php","php"),o.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:!0}),o.defineMIME("text/x-php",g)})});var Cu=Ke((Tu,Lu)=>{(function(o){typeof Tu=="object"&&typeof Lu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(s){return new RegExp("^(("+s.join(")|(")+"))\\b","i")}var v=["package","message","import","syntax","required","optional","repeated","reserved","default","extensions","packed","bool","bytes","double","enum","float","string","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","option","service","rpc","returns"],C=p(v);o.registerHelper("hintWords","protobuf",v);var b=new RegExp("^[_A-Za-z\xA1-\uFFFF][_A-Za-z0-9\xA1-\uFFFF]*");function S(s){return s.eatSpace()?null:s.match("//")?(s.skipToEnd(),"comment"):s.match(/^[0-9\.+-]/,!1)&&(s.match(/^[+-]?0x[0-9a-fA-F]+/)||s.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)||s.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))?"number":s.match(/^"([^"]|(""))*"/)||s.match(/^'([^']|(''))*'/)?"string":s.match(C)?"keyword":s.match(b)?"variable":(s.next(),null)}o.defineMode("protobuf",function(){return{token:S,fold:"brace"}}),o.defineMIME("text/x-protobuf","protobuf")})});var Mu=Ke((Eu,zu)=>{(function(o){typeof Eu=="object"&&typeof zu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(h){return new RegExp("^(("+h.join(")|(")+"))\\b")}var v=p(["and","or","not","is"]),C=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],b=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];o.registerHelper("hintWords","python",C.concat(b).concat(["exec","print"]));function S(h){return h.scopes[h.scopes.length-1]}o.defineMode("python",function(h,g){for(var T="error",x=g.delimiters||g.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,c=[g.singleOperators,g.doubleOperators,g.doubleDelimiters,g.tripleDelimiters,g.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dB?D(X):le0&&j(K,X)&&(xe+=" "+T),xe}}return re(K,X)}function re(K,X,I){if(K.eatSpace())return null;if(!I&&K.match(/^#.*/))return"comment";if(K.match(/^[0-9\.]/,!1)){var B=!1;if(K.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(B=!0),K.match(/^[\d_]+\.\d*/)&&(B=!0),K.match(/^\.\d+/)&&(B=!0),B)return K.eat(/J/i),"number";var le=!1;if(K.match(/^0x[0-9a-f_]+/i)&&(le=!0),K.match(/^0b[01_]+/i)&&(le=!0),K.match(/^0o[0-7_]+/i)&&(le=!0),K.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(K.eat(/J/i),le=!0),K.match(/^0(?![\dx])/i)&&(le=!0),le)return K.eat(/L/i),"number"}if(K.match(M)){var xe=K.current().toLowerCase().indexOf("f")!==-1;return xe?(X.tokenize=N(K.current(),X.tokenize),X.tokenize(K,X)):(X.tokenize=F(K.current(),X.tokenize),X.tokenize(K,X))}for(var q=0;q=0;)K=K.substr(1);var I=K.length==1,B="string";function le(q){return function(L,de){var ze=re(L,de,!0);return ze=="punctuation"&&(L.current()=="{"?de.tokenize=le(q+1):L.current()=="}"&&(q>1?de.tokenize=le(q-1):de.tokenize=xe)),ze}}function xe(q,L){for(;!q.eol();)if(q.eatWhile(/[^'"\{\}\\]/),q.eat("\\")){if(q.next(),I&&q.eol())return B}else{if(q.match(K))return L.tokenize=X,B;if(q.match("{{"))return B;if(q.match("{",!1))return L.tokenize=le(0),q.current()?B:L.tokenize(q,L);if(q.match("}}"))return B;if(q.match("}"))return T;q.eat(/['"]/)}if(I){if(g.singleLineStringErrors)return T;L.tokenize=X}return B}return xe.isString=!0,xe}function F(K,X){for(;"rubf".indexOf(K.charAt(0).toLowerCase())>=0;)K=K.substr(1);var I=K.length==1,B="string";function le(xe,q){for(;!xe.eol();)if(xe.eatWhile(/[^'"\\]/),xe.eat("\\")){if(xe.next(),I&&xe.eol())return B}else{if(xe.match(K))return q.tokenize=X,B;xe.eat(/['"]/)}if(I){if(g.singleLineStringErrors)return T;q.tokenize=X}return B}return le.isString=!0,le}function D(K){for(;S(K).type!="py";)K.scopes.pop();K.scopes.push({offset:S(K).offset+h.indentUnit,type:"py",align:null})}function Q(K,X,I){var B=K.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:K.column()+1;X.scopes.push({offset:X.indent+w,type:I,align:B})}function j(K,X){for(var I=K.indentation();X.scopes.length>1&&S(X).offset>I;){if(S(X).type!="py")return!0;X.scopes.pop()}return S(X).offset!=I}function V(K,X){K.sol()&&(X.beginningOfLine=!0,X.dedent=!1);var I=X.tokenize(K,X),B=K.current();if(X.beginningOfLine&&B=="@")return K.match(R,!1)?"meta":y?"operator":T;if(/\S/.test(B)&&(X.beginningOfLine=!1),(I=="variable"||I=="builtin")&&X.lastToken=="meta"&&(I="meta"),(B=="pass"||B=="return")&&(X.dedent=!0),B=="lambda"&&(X.lambda=!0),B==":"&&!X.lambda&&S(X).type=="py"&&K.match(/^\s*(?:#|$)/,!1)&&D(X),B.length==1&&!/string|comment/.test(I)){var le="[({".indexOf(B);if(le!=-1&&Q(K,X,"])}".slice(le,le+1)),le="])}".indexOf(B),le!=-1)if(S(X).type==B)X.indent=X.scopes.pop().offset-w;else return T}return X.dedent&&K.eol()&&S(X).type=="py"&&X.scopes.length>1&&X.scopes.pop(),I}var _={startState:function(K){return{tokenize:ee,scopes:[{offset:K||0,type:"py",align:null}],indent:K||0,lastToken:null,lambda:!1,dedent:0}},token:function(K,X){var I=X.errorToken;I&&(X.errorToken=!1);var B=V(K,X);return B&&B!="comment"&&(X.lastToken=B=="keyword"||B=="punctuation"?K.current():B),B=="punctuation"&&(B=null),K.eol()&&X.lambda&&(X.lambda=!1),I?B+" "+T:B},indent:function(K,X){if(K.tokenize!=ee)return K.tokenize.isString?o.Pass:0;var I=S(K),B=I.type==X.charAt(0)||I.type=="py"&&!K.dedent&&/^(else:|elif |except |finally:)/.test(X);return I.align!=null?I.align-(B?1:0):I.offset-(B?w:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:`'"`},lineComment:"#",fold:"indent"};return _}),o.defineMIME("text/x-python","python");var s=function(h){return h.split(" ")};o.defineMIME("text/x-cython",{name:"python",extra_keywords:s("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})});var qu=Ke((Au,Du)=>{(function(o){typeof Au=="object"&&typeof Du=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(g){for(var T={},x=0,c=g.length;x]/)?(M.eat(/[\<\>]/),"atom"):M.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":M.eat(/[a-zA-Z$@_\xa1-\uffff]/)?(M.eatWhile(/[\w$\xa1-\uffff]/),M.eat(/[\?\!\=]/),"atom"):"operator";if(Z=="@"&&M.match(/^@?[a-zA-Z_\xa1-\uffff]/))return M.eat("@"),M.eatWhile(/[\w\xa1-\uffff]/),"variable-2";if(Z=="$")return M.eat(/[a-zA-Z_]/)?M.eatWhile(/[\w]/):M.eat(/\d/)?M.eat(/\d/):M.next(),"variable-3";if(/[a-zA-Z_\xa1-\uffff]/.test(Z))return M.eatWhile(/[\w\xa1-\uffff]/),M.eat(/[\?\!]/),M.eat(":")?"atom":"ident";if(Z=="|"&&(H.varList||H.lastTok=="{"||H.lastTok=="do"))return T="|",null;if(/[\(\)\[\]{}\\;]/.test(Z))return T=Z,null;if(Z=="-"&&M.eat(">"))return"arrow";if(/[=+\-\/*:\.^%<>~|]/.test(Z)){var D=M.eatWhile(/[=+\-\/*:\.^%<>~|]/);return Z=="."&&!D&&(T="."),"operator"}else return null}}}function d(M){for(var H=M.pos,Z=0,ee,re=!1,N=!1;(ee=M.next())!=null;)if(N)N=!1;else{if("[{(".indexOf(ee)>-1)Z++;else if("]})".indexOf(ee)>-1){if(Z--,Z<0)break}else if(ee=="/"&&Z==0){re=!0;break}N=ee=="\\"}return M.backUp(M.pos-H),re}function w(M){return M||(M=1),function(H,Z){if(H.peek()=="}"){if(M==1)return Z.tokenize.pop(),Z.tokenize[Z.tokenize.length-1](H,Z);Z.tokenize[Z.tokenize.length-1]=w(M-1)}else H.peek()=="{"&&(Z.tokenize[Z.tokenize.length-1]=w(M+1));return c(H,Z)}}function E(){var M=!1;return function(H,Z){return M?(Z.tokenize.pop(),Z.tokenize[Z.tokenize.length-1](H,Z)):(M=!0,c(H,Z))}}function z(M,H,Z,ee){return function(re,N){var F=!1,D;for(N.context.type==="read-quoted-paused"&&(N.context=N.context.prev,re.eat("}"));(D=re.next())!=null;){if(D==M&&(ee||!F)){N.tokenize.pop();break}if(Z&&D=="#"&&!F){if(re.eat("{")){M=="}"&&(N.context={prev:N.context,type:"read-quoted-paused"}),N.tokenize.push(w());break}else if(/[@\$]/.test(re.peek())){N.tokenize.push(E());break}}F=!F&&D=="\\"}return H}}function y(M,H){return function(Z,ee){return H&&Z.eatSpace(),Z.match(M)?ee.tokenize.pop():Z.skipToEnd(),"string"}}function R(M,H){return M.sol()&&M.match("=end")&&M.eol()&&H.tokenize.pop(),M.skipToEnd(),"comment"}return{startState:function(){return{tokenize:[c],indented:0,context:{type:"top",indented:-g.indentUnit},continuedLine:!1,lastTok:null,varList:!1}},token:function(M,H){T=null,M.sol()&&(H.indented=M.indentation());var Z=H.tokenize[H.tokenize.length-1](M,H),ee,re=T;if(Z=="ident"){var N=M.current();Z=H.lastTok=="."?"property":C.propertyIsEnumerable(M.current())?"keyword":/^[A-Z]/.test(N)?"tag":H.lastTok=="def"||H.lastTok=="class"||H.varList?"def":"variable",Z=="keyword"&&(re=N,b.propertyIsEnumerable(N)?ee="indent":S.propertyIsEnumerable(N)?ee="dedent":((N=="if"||N=="unless")&&M.column()==M.indentation()||N=="do"&&H.context.indented{(function(o){typeof Iu=="object"&&typeof Fu=="object"?o(We(),Di()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/simple"],o):o(CodeMirror)})(function(o){"use strict";o.defineSimpleMode("rust",{start:[{regex:/b?"/,token:"string",next:"string"},{regex:/b?r"/,token:"string",next:"string_raw"},{regex:/b?r#+"/,token:"string",next:"string_raw_hash"},{regex:/'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/,token:"string-2"},{regex:/b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/,token:"string-2"},{regex:/(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/,token:"number"},{regex:/(let(?:\s+mut)?|fn|enum|mod|struct|type|union)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:["keyword",null,"def"]},{regex:/(?:abstract|alignof|as|async|await|box|break|continue|const|crate|do|dyn|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,token:"keyword"},{regex:/\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/,token:"atom"},{regex:/\b(?:true|false|Some|None|Ok|Err)\b/,token:"builtin"},{regex:/\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:["keyword",null,"def"]},{regex:/#!?\[.*\]/,token:"meta"},{regex:/\/\/.*/,token:"comment"},{regex:/\/\*/,token:"comment",next:"comment"},{regex:/[-+\/*=<>!]+/,token:"operator"},{regex:/[a-zA-Z_]\w*!/,token:"variable-3"},{regex:/[a-zA-Z_]\w*/,token:"variable"},{regex:/[\{\[\(]/,indent:!0},{regex:/[\}\]\)]/,dedent:!0}],string:[{regex:/"/,token:"string",next:"start"},{regex:/(?:[^\\"]|\\(?:.|$))*/,token:"string"}],string_raw:[{regex:/"/,token:"string",next:"start"},{regex:/[^"]*/,token:"string"}],string_raw_hash:[{regex:/"#+/,token:"string",next:"start"},{regex:/(?:[^"]|"(?!#))*/,token:"string"}],comment:[{regex:/.*?\*\//,token:"comment",next:"start"},{regex:/.*/,token:"comment"}],meta:{dontIndentStates:["comment"],electricInput:/^\s*\}$/,blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}}),o.defineMIME("text/x-rustsrc","rust"),o.defineMIME("text/rust","rust")})});var ea=Ke((Ou,Pu)=>{(function(o){typeof Ou=="object"&&typeof Pu=="object"?o(We(),gn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../css/css"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("sass",function(p){var v=o.mimeModes["text/css"],C=v.propertyKeywords||{},b=v.colorKeywords||{},S=v.valueKeywords||{},s=v.fontProperties||{};function h(N){return new RegExp("^"+N.join("|"))}var g=["true","false","null","auto"],T=new RegExp("^"+g.join("|")),x=["\\(","\\)","=",">","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not",";","\\{","\\}",":"],c=h(x),d=/^::?[a-zA-Z_][\w\-]*/,w;function E(N){return!N.peek()||N.match(/\s+$/,!1)}function z(N,F){var D=N.peek();return D===")"?(N.next(),F.tokenizer=ee,"operator"):D==="("?(N.next(),N.eatSpace(),"operator"):D==="'"||D==='"'?(F.tokenizer=R(N.next()),"string"):(F.tokenizer=R(")",!1),"string")}function y(N,F){return function(D,Q){return D.sol()&&D.indentation()<=N?(Q.tokenizer=ee,ee(D,Q)):(F&&D.skipTo("*/")?(D.next(),D.next(),Q.tokenizer=ee):D.skipToEnd(),"comment")}}function R(N,F){F==null&&(F=!0);function D(Q,j){var V=Q.next(),_=Q.peek(),K=Q.string.charAt(Q.pos-2),X=V!=="\\"&&_===N||V===N&&K!=="\\";return X?(V!==N&&F&&Q.next(),E(Q)&&(j.cursorHalf=0),j.tokenizer=ee,"string"):V==="#"&&_==="{"?(j.tokenizer=M(D),Q.next(),"operator"):"string"}return D}function M(N){return function(F,D){return F.peek()==="}"?(F.next(),D.tokenizer=N,"operator"):ee(F,D)}}function H(N){if(N.indentCount==0){N.indentCount++;var F=N.scopes[0].offset,D=F+p.indentUnit;N.scopes.unshift({offset:D})}}function Z(N){N.scopes.length!=1&&N.scopes.shift()}function ee(N,F){var D=N.peek();if(N.match("/*"))return F.tokenizer=y(N.indentation(),!0),F.tokenizer(N,F);if(N.match("//"))return F.tokenizer=y(N.indentation(),!1),F.tokenizer(N,F);if(N.match("#{"))return F.tokenizer=M(ee),"operator";if(D==='"'||D==="'")return N.next(),F.tokenizer=R(D),"string";if(F.cursorHalf){if(D==="#"&&(N.next(),N.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/))||N.match(/^-?[0-9\.]+/))return E(N)&&(F.cursorHalf=0),"number";if(N.match(/^(px|em|in)\b/))return E(N)&&(F.cursorHalf=0),"unit";if(N.match(T))return E(N)&&(F.cursorHalf=0),"keyword";if(N.match(/^url/)&&N.peek()==="(")return F.tokenizer=z,E(N)&&(F.cursorHalf=0),"atom";if(D==="$")return N.next(),N.eatWhile(/[\w-]/),E(N)&&(F.cursorHalf=0),"variable-2";if(D==="!")return N.next(),F.cursorHalf=0,N.match(/^[\w]+/)?"keyword":"operator";if(N.match(c))return E(N)&&(F.cursorHalf=0),"operator";if(N.eatWhile(/[\w-]/))return E(N)&&(F.cursorHalf=0),w=N.current().toLowerCase(),S.hasOwnProperty(w)?"atom":b.hasOwnProperty(w)?"keyword":C.hasOwnProperty(w)?(F.prevProp=N.current().toLowerCase(),"property"):"tag";if(E(N))return F.cursorHalf=0,null}else{if(D==="-"&&N.match(/^-\w+-/))return"meta";if(D==="."){if(N.next(),N.match(/^[\w-]+/))return H(F),"qualifier";if(N.peek()==="#")return H(F),"tag"}if(D==="#"){if(N.next(),N.match(/^[\w-]+/))return H(F),"builtin";if(N.peek()==="#")return H(F),"tag"}if(D==="$")return N.next(),N.eatWhile(/[\w-]/),"variable-2";if(N.match(/^-?[0-9\.]+/))return"number";if(N.match(/^(px|em|in)\b/))return"unit";if(N.match(T))return"keyword";if(N.match(/^url/)&&N.peek()==="(")return F.tokenizer=z,"atom";if(D==="="&&N.match(/^=[\w-]+/))return H(F),"meta";if(D==="+"&&N.match(/^\+[\w-]+/))return"variable-3";if(D==="@"&&N.match("@extend")&&(N.match(/\s*[\w]/)||Z(F)),N.match(/^@(else if|if|media|else|for|each|while|mixin|function)/))return H(F),"def";if(D==="@")return N.next(),N.eatWhile(/[\w-]/),"def";if(N.eatWhile(/[\w-]/))if(N.match(/ *: *[\w-\+\$#!\("']/,!1)){w=N.current().toLowerCase();var Q=F.prevProp+"-"+w;return C.hasOwnProperty(Q)?"property":C.hasOwnProperty(w)?(F.prevProp=w,"property"):s.hasOwnProperty(w)?"property":"tag"}else return N.match(/ *:/,!1)?(H(F),F.cursorHalf=1,F.prevProp=N.current().toLowerCase(),"property"):(N.match(/ *,/,!1)||H(F),"tag");if(D===":")return N.match(d)?"variable-3":(N.next(),F.cursorHalf=1,"operator")}return N.match(c)?"operator":(N.next(),null)}function re(N,F){N.sol()&&(F.indentCount=0);var D=F.tokenizer(N,F),Q=N.current();if((Q==="@return"||Q==="}")&&Z(F),D!==null){for(var j=N.pos-Q.length,V=j+p.indentUnit*F.indentCount,_=[],K=0;K{(function(o){typeof ju=="object"&&typeof Ru=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("shell",function(){var p={};function v(d,w){for(var E=0;E1&&d.eat("$");var E=d.next();return/['"({]/.test(E)?(w.tokens[0]=h(E,E=="("?"quote":E=="{"?"def":"string"),c(d,w)):(/\d/.test(E)||d.eatWhile(/\w/),w.tokens.shift(),"def")};function x(d){return function(w,E){return w.sol()&&w.string==d&&E.tokens.shift(),w.skipToEnd(),"string-2"}}function c(d,w){return(w.tokens[0]||s)(d,w)}return{startState:function(){return{tokens:[]}},token:function(d,w){return c(d,w)},closeBrackets:"()[]{}''\"\"``",lineComment:"#",fold:"brace"}}),o.defineMIME("text/x-sh","shell"),o.defineMIME("application/x-sh","shell")})});var Uu=Ke((Bu,Wu)=>{(function(o){typeof Bu=="object"&&typeof Wu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("sql",function(g,T){var x=T.client||{},c=T.atoms||{false:!0,true:!0,null:!0},d=T.builtin||s(h),w=T.keywords||s(S),E=T.operatorChars||/^[*+\-%<>!=&|~^\/]/,z=T.support||{},y=T.hooks||{},R=T.dateSQL||{date:!0,time:!0,timestamp:!0},M=T.backslashStringEscapes!==!1,H=T.brackets||/^[\{}\(\)\[\]]/,Z=T.punctuation||/^[;.,:]/;function ee(Q,j){var V=Q.next();if(y[V]){var _=y[V](Q,j);if(_!==!1)return _}if(z.hexNumber&&(V=="0"&&Q.match(/^[xX][0-9a-fA-F]+/)||(V=="x"||V=="X")&&Q.match(/^'[0-9a-fA-F]*'/)))return"number";if(z.binaryNumber&&((V=="b"||V=="B")&&Q.match(/^'[01]*'/)||V=="0"&&Q.match(/^b[01]+/)))return"number";if(V.charCodeAt(0)>47&&V.charCodeAt(0)<58)return Q.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/),z.decimallessFloat&&Q.match(/^\.(?!\.)/),"number";if(V=="?"&&(Q.eatSpace()||Q.eol()||Q.eat(";")))return"variable-3";if(V=="'"||V=='"'&&z.doubleQuote)return j.tokenize=re(V),j.tokenize(Q,j);if((z.nCharCast&&(V=="n"||V=="N")||z.charsetCast&&V=="_"&&Q.match(/[a-z][a-z0-9]*/i))&&(Q.peek()=="'"||Q.peek()=='"'))return"keyword";if(z.escapeConstant&&(V=="e"||V=="E")&&(Q.peek()=="'"||Q.peek()=='"'&&z.doubleQuote))return j.tokenize=function(X,I){return(I.tokenize=re(X.next(),!0))(X,I)},"keyword";if(z.commentSlashSlash&&V=="/"&&Q.eat("/"))return Q.skipToEnd(),"comment";if(z.commentHash&&V=="#"||V=="-"&&Q.eat("-")&&(!z.commentSpaceRequired||Q.eat(" ")))return Q.skipToEnd(),"comment";if(V=="/"&&Q.eat("*"))return j.tokenize=N(1),j.tokenize(Q,j);if(V=="."){if(z.zerolessFloat&&Q.match(/^(?:\d+(?:e[+-]?\d+)?)/i))return"number";if(Q.match(/^\.+/))return null;if(Q.match(/^[\w\d_$#]+/))return"variable-2"}else{if(E.test(V))return Q.eatWhile(E),"operator";if(H.test(V))return"bracket";if(Z.test(V))return Q.eatWhile(Z),"punctuation";if(V=="{"&&(Q.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||Q.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/)))return"number";Q.eatWhile(/^[_\w\d]/);var K=Q.current().toLowerCase();return R.hasOwnProperty(K)&&(Q.match(/^( )+'[^']*'/)||Q.match(/^( )+"[^"]*"/))?"number":c.hasOwnProperty(K)?"atom":d.hasOwnProperty(K)?"type":w.hasOwnProperty(K)?"keyword":x.hasOwnProperty(K)?"builtin":null}}function re(Q,j){return function(V,_){for(var K=!1,X;(X=V.next())!=null;){if(X==Q&&!K){_.tokenize=ee;break}K=(M||j)&&!K&&X=="\\"}return"string"}}function N(Q){return function(j,V){var _=j.match(/^.*?(\/\*|\*\/)/);return _?_[1]=="/*"?V.tokenize=N(Q+1):Q>1?V.tokenize=N(Q-1):V.tokenize=ee:j.skipToEnd(),"comment"}}function F(Q,j,V){j.context={prev:j.context,indent:Q.indentation(),col:Q.column(),type:V}}function D(Q){Q.indent=Q.context.indent,Q.context=Q.context.prev}return{startState:function(){return{tokenize:ee,context:null}},token:function(Q,j){if(Q.sol()&&j.context&&j.context.align==null&&(j.context.align=!1),j.tokenize==ee&&Q.eatSpace())return null;var V=j.tokenize(Q,j);if(V=="comment")return V;j.context&&j.context.align==null&&(j.context.align=!0);var _=Q.current();return _=="("?F(Q,j,")"):_=="["?F(Q,j,"]"):j.context&&j.context.type==_&&D(j),V},indent:function(Q,j){var V=Q.context;if(!V)return o.Pass;var _=j.charAt(0)==V.type;return V.align?V.col+(_?0:1):V.indent+(_?0:g.indentUnit)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:z.commentSlashSlash?"//":z.commentHash?"#":"--",closeBrackets:"()[]{}''\"\"``",config:T}});function p(g){for(var T;(T=g.next())!=null;)if(T=="`"&&!g.eat("`"))return"variable-2";return g.backUp(g.current().length-1),g.eatWhile(/\w/)?"variable-2":null}function v(g){for(var T;(T=g.next())!=null;)if(T=='"'&&!g.eat('"'))return"variable-2";return g.backUp(g.current().length-1),g.eatWhile(/\w/)?"variable-2":null}function C(g){return g.eat("@")&&(g.match("session."),g.match("local."),g.match("global.")),g.eat("'")?(g.match(/^.*'/),"variable-2"):g.eat('"')?(g.match(/^.*"/),"variable-2"):g.eat("`")?(g.match(/^.*`/),"variable-2"):g.match(/^[0-9a-zA-Z$\.\_]+/)?"variable-2":null}function b(g){return g.eat("N")?"atom":g.match(/^[a-zA-Z.#!?]/)?"variable-2":null}var S="alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";function s(g){for(var T={},x=g.split(" "),c=0;c!=^\&|\/]/,brackets:/^[\{}\(\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:s("date datetimeoffset datetime2 smalldatetime datetime time"),hooks:{"@":C}}),o.defineMIME("text/x-mysql",{name:"sql",client:s("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:s(S+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:s("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":C,"`":p,"\\":b}}),o.defineMIME("text/x-mariadb",{name:"sql",client:s("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:s(S+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:s("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":C,"`":p,"\\":b}}),o.defineMIME("text/x-sqlite",{name:"sql",client:s("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),keywords:s(S+"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),builtin:s("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),atoms:s("null current_date current_time current_timestamp"),operatorChars:/^[*+\-%<>!=&|/~]/,dateSQL:s("date time timestamp datetime"),support:s("decimallessFloat zerolessFloat"),identifierQuote:'"',hooks:{"@":C,":":C,"?":C,$:C,'"':v,"`":p}}),o.defineMIME("text/x-cassandra",{name:"sql",client:{},keywords:s("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),builtin:s("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),atoms:s("false true infinity NaN"),operatorChars:/^[<>=]/,dateSQL:{},support:s("commentSlashSlash decimallessFloat"),hooks:{}}),o.defineMIME("text/x-plsql",{name:"sql",client:s("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:s("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),builtin:s("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),operatorChars:/^[*\/+\-%<>!=~]/,dateSQL:s("date time timestamp"),support:s("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")}),o.defineMIME("text/x-hive",{name:"sql",keywords:s("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),builtin:s("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:s("date timestamp"),support:s("doubleQuote binaryNumber hexNumber")}),o.defineMIME("text/x-pgsql",{name:"sql",client:s("source"),keywords:s(S+"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),builtin:s("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time zone timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:s("false true null unknown"),operatorChars:/^[*\/+\-%<>!=&|^\/#@?~]/,backslashStringEscapes:!1,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")}),o.defineMIME("text/x-gql",{name:"sql",keywords:s("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),atoms:s("false true"),builtin:s("blob datetime first key __key__ string integer double boolean null"),operatorChars:/^[*+\-%<>!=]/}),o.defineMIME("text/x-gpsql",{name:"sql",client:s("source"),keywords:s("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),builtin:s("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")}),o.defineMIME("text/x-sparksql",{name:"sql",keywords:s("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),builtin:s("abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with"),atoms:s("false true null"),operatorChars:/^[*\/+\-%<>!=~&|^]/,dateSQL:s("date time timestamp"),support:s("doubleQuote zerolessFloat")}),o.defineMIME("text/x-esper",{name:"sql",client:s("source"),keywords:s("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),builtin:{},atoms:s("false true null"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:s("time"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber")}),o.defineMIME("text/x-trino",{name:"sql",keywords:s("abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with"),builtin:s("array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone"),atoms:s("false true null unknown"),operatorChars:/^[[\]|<>=!\-+*/%]/,dateSQL:s("date time timestamp zone"),support:s("decimallessFloat zerolessFloat hexNumber")})})});var ta=Ke(($u,Ku)=>{(function(o){typeof $u=="object"&&typeof Ku=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("stylus",function(M){for(var H=M.indentUnit,Z="",ee=y(p),re=/^(a|b|i|s|col|em)$/i,N=y(S),F=y(s),D=y(T),Q=y(g),j=y(v),V=z(v),_=y(b),K=y(C),X=y(h),I=/^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/,B=z(x),le=y(c),xe=new RegExp(/^\-(moz|ms|o|webkit)-/i),q=y(d),L="",de={},ze,pe,Ee,ge;Z.length|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/),W.context.line.firstWord=L?L[0].replace(/^\s*/,""):"",W.context.line.indent=$.indentation(),ze=$.peek(),$.match("//"))return $.skipToEnd(),["comment","comment"];if($.match("/*"))return W.tokenize=qe,qe($,W);if(ze=='"'||ze=="'")return $.next(),W.tokenize=Se(ze),W.tokenize($,W);if(ze=="@")return $.next(),$.eatWhile(/[\w\\-]/),["def",$.current()];if(ze=="#"){if($.next(),$.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i))return["atom","atom"];if($.match(/^[a-z][\w-]*/i))return["builtin","hash"]}return $.match(xe)?["meta","vendor-prefixes"]:$.match(/^-?[0-9]?\.?[0-9]/)?($.eatWhile(/[a-z%]/i),["number","unit"]):ze=="!"?($.next(),[$.match(/^(important|optional)/i)?"keyword":"operator","important"]):ze=="."&&$.match(/^\.[a-z][\w-]*/i)?["qualifier","qualifier"]:$.match(V)?($.peek()=="("&&(W.tokenize=je),["property","word"]):$.match(/^[a-z][\w-]*\(/i)?($.backUp(1),["keyword","mixin"]):$.match(/^(\+|-)[a-z][\w-]*\(/i)?($.backUp(1),["keyword","block-mixin"]):$.string.match(/^\s*&/)&&$.match(/^[-_]+[a-z][\w-]*/)?["qualifier","qualifier"]:$.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)?($.backUp(1),["variable-3","reference"]):$.match(/^&{1}\s*$/)?["variable-3","reference"]:$.match(B)?["operator","operator"]:$.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)?$.match(/^(\.|\[)[\w-\'\"\]]+/i,!1)&&!U($.current())?($.match("."),["variable-2","variable-name"]):["variable-2","word"]:$.match(I)?["operator",$.current()]:/[:;,{}\[\]\(\)]/.test(ze)?($.next(),[null,ze]):($.next(),[null,null])}function qe($,W){for(var se=!1,De;(De=$.next())!=null;){if(se&&De=="/"){W.tokenize=null;break}se=De=="*"}return["comment","comment"]}function Se($){return function(W,se){for(var De=!1,nt;(nt=W.next())!=null;){if(nt==$&&!De){$==")"&&W.backUp(1);break}De=!De&&nt=="\\"}return(nt==$||!De&&$!=")")&&(se.tokenize=null),["string","string"]}}function je($,W){return $.next(),$.match(/\s*[\"\')]/,!1)?W.tokenize=null:W.tokenize=Se(")"),[null,"("]}function Ze($,W,se,De){this.type=$,this.indent=W,this.prev=se,this.line=De||{firstWord:"",indent:0}}function ke($,W,se,De){return De=De>=0?De:H,$.context=new Ze(se,W.indentation()+De,$.context),se}function Je($,W){var se=$.context.indent-H;return W=W||!1,$.context=$.context.prev,W&&($.context.indent=se),$.context.type}function He($,W,se){return de[se.context.type]($,W,se)}function Ge($,W,se,De){for(var nt=De||1;nt>0;nt--)se.context=se.context.prev;return He($,W,se)}function U($){return $.toLowerCase()in ee}function G($){return $=$.toLowerCase(),$ in N||$ in X}function ce($){return $.toLowerCase()in le}function Be($){return $.toLowerCase().match(xe)}function te($){var W=$.toLowerCase(),se="variable-2";return U($)?se="tag":ce($)?se="block-keyword":G($)?se="property":W in D||W in q?se="atom":W=="return"||W in Q?se="keyword":$.match(/^[A-Z]/)&&(se="string"),se}function fe($,W){return Me(W)&&($=="{"||$=="]"||$=="hash"||$=="qualifier")||$=="block-mixin"}function oe($,W){return $=="{"&&W.match(/^\s*\$?[\w-]+/i,!1)}function Ue($,W){return $==":"&&W.match(/^[a-z-]+/,!1)}function we($){return $.sol()||$.string.match(new RegExp("^\\s*"+R($.current())))}function Me($){return $.eol()||$.match(/^\s*$/,!1)}function Le($){var W=/^\s*[-_]*[a-z0-9]+[\w-]*/i,se=typeof $=="string"?$.match(W):$.string.match(W);return se?se[0].replace(/^\s*/,""):""}return de.block=function($,W,se){if($=="comment"&&we(W)||$==","&&Me(W)||$=="mixin")return ke(se,W,"block",0);if(oe($,W))return ke(se,W,"interpolation");if(Me(W)&&$=="]"&&!/^\s*(\.|#|:|\[|\*|&)/.test(W.string)&&!U(Le(W)))return ke(se,W,"block",0);if(fe($,W))return ke(se,W,"block");if($=="}"&&Me(W))return ke(se,W,"block",0);if($=="variable-name")return W.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)||ce(Le(W))?ke(se,W,"variableName"):ke(se,W,"variableName",0);if($=="=")return!Me(W)&&!ce(Le(W))?ke(se,W,"block",0):ke(se,W,"block");if($=="*"&&(Me(W)||W.match(/\s*(,|\.|#|\[|:|{)/,!1)))return ge="tag",ke(se,W,"block");if(Ue($,W))return ke(se,W,"pseudo");if(/@(font-face|media|supports|(-moz-)?document)/.test($))return ke(se,W,Me(W)?"block":"atBlock");if(/@(-(moz|ms|o|webkit)-)?keyframes$/.test($))return ke(se,W,"keyframes");if(/@extends?/.test($))return ke(se,W,"extend",0);if($&&$.charAt(0)=="@")return W.indentation()>0&&G(W.current().slice(1))?(ge="variable-2","block"):/(@import|@require|@charset)/.test($)?ke(se,W,"block",0):ke(se,W,"block");if($=="reference"&&Me(W))return ke(se,W,"block");if($=="(")return ke(se,W,"parens");if($=="vendor-prefixes")return ke(se,W,"vendorPrefixes");if($=="word"){var De=W.current();if(ge=te(De),ge=="property")return we(W)?ke(se,W,"block",0):(ge="atom","block");if(ge=="tag"){if(/embed|menu|pre|progress|sub|table/.test(De)&&G(Le(W))||W.string.match(new RegExp("\\[\\s*"+De+"|"+De+"\\s*\\]")))return ge="atom","block";if(re.test(De)&&(we(W)&&W.string.match(/=/)||!we(W)&&!W.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/)&&!U(Le(W))))return ge="variable-2",ce(Le(W))?"block":ke(se,W,"block",0);if(Me(W))return ke(se,W,"block")}if(ge=="block-keyword")return ge="keyword",W.current(/(if|unless)/)&&!we(W)?"block":ke(se,W,"block");if(De=="return")return ke(se,W,"block",0);if(ge=="variable-2"&&W.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/))return ke(se,W,"block")}return se.context.type},de.parens=function($,W,se){if($=="(")return ke(se,W,"parens");if($==")")return se.context.prev.type=="parens"?Je(se):W.string.match(/^[a-z][\w-]*\(/i)&&Me(W)||ce(Le(W))||/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(Le(W))||!W.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/)&&U(Le(W))?ke(se,W,"block"):W.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/)||W.string.match(/^\s*(\(|\)|[0-9])/)||W.string.match(/^\s+[a-z][\w-]*\(/i)||W.string.match(/^\s+[\$-]?[a-z]/i)?ke(se,W,"block",0):Me(W)?ke(se,W,"block"):ke(se,W,"block",0);if($&&$.charAt(0)=="@"&&G(W.current().slice(1))&&(ge="variable-2"),$=="word"){var De=W.current();ge=te(De),ge=="tag"&&re.test(De)&&(ge="variable-2"),(ge=="property"||De=="to")&&(ge="atom")}return $=="variable-name"?ke(se,W,"variableName"):Ue($,W)?ke(se,W,"pseudo"):se.context.type},de.vendorPrefixes=function($,W,se){return $=="word"?(ge="property",ke(se,W,"block",0)):Je(se)},de.pseudo=function($,W,se){return G(Le(W.string))?Ge($,W,se):(W.match(/^[a-z-]+/),ge="variable-3",Me(W)?ke(se,W,"block"):Je(se))},de.atBlock=function($,W,se){if($=="(")return ke(se,W,"atBlock_parens");if(fe($,W))return ke(se,W,"block");if(oe($,W))return ke(se,W,"interpolation");if($=="word"){var De=W.current().toLowerCase();if(/^(only|not|and|or)$/.test(De)?ge="keyword":j.hasOwnProperty(De)?ge="tag":K.hasOwnProperty(De)?ge="attribute":_.hasOwnProperty(De)?ge="property":F.hasOwnProperty(De)?ge="string-2":ge=te(W.current()),ge=="tag"&&Me(W))return ke(se,W,"block")}return $=="operator"&&/^(not|and|or)$/.test(W.current())&&(ge="keyword"),se.context.type},de.atBlock_parens=function($,W,se){if($=="{"||$=="}")return se.context.type;if($==")")return Me(W)?ke(se,W,"block"):ke(se,W,"atBlock");if($=="word"){var De=W.current().toLowerCase();return ge=te(De),/^(max|min)/.test(De)&&(ge="property"),ge=="tag"&&(re.test(De)?ge="variable-2":ge="atom"),se.context.type}return de.atBlock($,W,se)},de.keyframes=function($,W,se){return W.indentation()=="0"&&($=="}"&&we(W)||$=="]"||$=="hash"||$=="qualifier"||U(W.current()))?Ge($,W,se):$=="{"?ke(se,W,"keyframes"):$=="}"?we(W)?Je(se,!0):ke(se,W,"keyframes"):$=="unit"&&/^[0-9]+\%$/.test(W.current())?ke(se,W,"keyframes"):$=="word"&&(ge=te(W.current()),ge=="block-keyword")?(ge="keyword",ke(se,W,"keyframes")):/@(font-face|media|supports|(-moz-)?document)/.test($)?ke(se,W,Me(W)?"block":"atBlock"):$=="mixin"?ke(se,W,"block",0):se.context.type},de.interpolation=function($,W,se){return $=="{"&&Je(se)&&ke(se,W,"block"),$=="}"?W.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i)||W.string.match(/^\s*[a-z]/i)&&U(Le(W))?ke(se,W,"block"):!W.string.match(/^(\{|\s*\&)/)||W.match(/\s*[\w-]/,!1)?ke(se,W,"block",0):ke(se,W,"block"):$=="variable-name"?ke(se,W,"variableName",0):($=="word"&&(ge=te(W.current()),ge=="tag"&&(ge="atom")),se.context.type)},de.extend=function($,W,se){return $=="["||$=="="?"extend":$=="]"?Je(se):$=="word"?(ge=te(W.current()),"extend"):Je(se)},de.variableName=function($,W,se){return $=="string"||$=="["||$=="]"||W.current().match(/^(\.|\$)/)?(W.current().match(/^\.[\w-]+/i)&&(ge="variable-2"),"variableName"):Ge($,W,se)},{startState:function($){return{tokenize:null,state:"block",context:new Ze("block",$||0,null)}},token:function($,W){return!W.tokenize&&$.eatSpace()?null:(pe=(W.tokenize||Oe)($,W),pe&&typeof pe=="object"&&(Ee=pe[1],pe=pe[0]),ge=pe,W.state=de[W.state](Ee,$,W),ge)},indent:function($,W,se){var De=$.context,nt=W&&W.charAt(0),dt=De.indent,Pt=Le(W),It=se.match(/^\s*/)[0].replace(/\t/g,Z).length,Pe=$.context.prev?$.context.prev.line.firstWord:"",xt=$.context.prev?$.context.prev.line.indent:It;return De.prev&&(nt=="}"&&(De.type=="block"||De.type=="atBlock"||De.type=="keyframes")||nt==")"&&(De.type=="parens"||De.type=="atBlock_parens")||nt=="{"&&De.type=="at")?dt=De.indent-H:/(\})/.test(nt)||(/@|\$|\d/.test(nt)||/^\{/.test(W)||/^\s*\/(\/|\*)/.test(W)||/^\s*\/\*/.test(Pe)||/^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(W)||/^(\+|-)?[a-z][\w-]*\(/i.test(W)||/^return/.test(W)||ce(Pt)?dt=It:/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(nt)||U(Pt)?/\,\s*$/.test(Pe)?dt=xt:/^\s+/.test(se)&&(/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(Pe)||U(Pe))?dt=It<=xt?xt:xt+H:dt=It:!/,\s*$/.test(se)&&(Be(Pt)||G(Pt))&&(ce(Pe)?dt=It<=xt?xt:xt+H:/^\{/.test(Pe)?dt=It<=xt?It:xt+H:Be(Pe)||G(Pe)?dt=It>=xt?xt:It:/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(Pe)||/=\s*$/.test(Pe)||U(Pe)||/^\$[\w-\.\[\]\'\"]/.test(Pe)?dt=xt+H:dt=It)),dt},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"indent"}});var p=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","bgsound","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","var","video"],v=["domain","regexp","url-prefix","url"],C=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],b=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","dynamic-range","video-dynamic-range"],S=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"],s=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],h=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],g=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],T=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","conic-gradient","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","high","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-play-button","media-slider","media-sliderthumb","media-volume-slider","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","standard","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around","unset"],x=["in","and","or","not","is not","is a","is","isnt","defined","if unless"],c=["for","if","else","unless","from","to"],d=["null","true","false","href","title","type","not-allowed","readonly","disabled"],w=["@font-face","@keyframes","@media","@viewport","@page","@host","@supports","@block","@css"],E=p.concat(v,C,b,S,s,g,T,h,x,c,d,w);function z(M){return M=M.sort(function(H,Z){return Z>H}),new RegExp("^(("+M.join(")|(")+"))\\b")}function y(M){for(var H={},Z=0;Z{(function(o){typeof Gu=="object"&&typeof Zu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(N){for(var F={},D=0;D~^?!",h=":;,.(){}[]",g=/^\-?0b[01][01_]*/,T=/^\-?0o[0-7][0-7_]*/,x=/^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/,c=/^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/,d=/^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/,w=/^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/,E=/^\#[A-Za-z]+/,z=/^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/;function y(N,F,D){if(N.sol()&&(F.indented=N.indentation()),N.eatSpace())return null;var Q=N.peek();if(Q=="/"){if(N.match("//"))return N.skipToEnd(),"comment";if(N.match("/*"))return F.tokenize.push(H),H(N,F)}if(N.match(E))return"builtin";if(N.match(z))return"attribute";if(N.match(g)||N.match(T)||N.match(x)||N.match(c))return"number";if(N.match(w))return"property";if(s.indexOf(Q)>-1)return N.next(),"operator";if(h.indexOf(Q)>-1)return N.next(),N.match(".."),"punctuation";var j;if(j=N.match(/("""|"|')/)){var V=M.bind(null,j[0]);return F.tokenize.push(V),V(N,F)}if(N.match(d)){var _=N.current();return S.hasOwnProperty(_)?"variable-2":b.hasOwnProperty(_)?"atom":v.hasOwnProperty(_)?(C.hasOwnProperty(_)&&(F.prev="define"),"keyword"):D=="define"?"def":"variable"}return N.next(),null}function R(){var N=0;return function(F,D,Q){var j=y(F,D,Q);if(j=="punctuation"){if(F.current()=="(")++N;else if(F.current()==")"){if(N==0)return F.backUp(1),D.tokenize.pop(),D.tokenize[D.tokenize.length-1](F,D);--N}}return j}}function M(N,F,D){for(var Q=N.length==1,j,V=!1;j=F.peek();)if(V){if(F.next(),j=="(")return D.tokenize.push(R()),"string";V=!1}else{if(F.match(N))return D.tokenize.pop(),"string";F.next(),V=j=="\\"}return Q&&D.tokenize.pop(),"string"}function H(N,F){for(var D;D=N.next();)if(D==="/"&&N.eat("*"))F.tokenize.push(H);else if(D==="*"&&N.eat("/")){F.tokenize.pop();break}return"comment"}function Z(N,F,D){this.prev=N,this.align=F,this.indented=D}function ee(N,F){var D=F.match(/^\s*($|\/[\/\*])/,!1)?null:F.column()+1;N.context=new Z(N.context,D,N.indented)}function re(N){N.context&&(N.indented=N.context.indented,N.context=N.context.prev)}o.defineMode("swift",function(N){return{startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(F,D){var Q=D.prev;D.prev=null;var j=D.tokenize[D.tokenize.length-1]||y,V=j(F,D,Q);if(!V||V=="comment"?D.prev=Q:D.prev||(D.prev=V),V=="punctuation"){var _=/[\(\[\{]|([\]\)\}])/.exec(F.current());_&&(_[1]?re:ee)(D,F)}return V},indent:function(F,D){var Q=F.context;if(!Q)return 0;var j=/^[\]\}\)]/.test(D);return Q.align!=null?Q.align-(j?1:0):Q.indented+(j?0:N.indentUnit)},electricInput:/^\s*[\)\}\]]$/,lineComment:"//",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace",closeBrackets:"()[]{}''\"\"``"}}),o.defineMIME("text/x-swift","swift")})});var Vu=Ke((Yu,Qu)=>{(function(o){typeof Yu=="object"&&typeof Qu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("coffeescript",function(p,v){var C="error";function b(F){return new RegExp("^(("+F.join(")|(")+"))\\b")}var S=/^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/,s=/^(?:[()\[\]{},:`=;]|\.\.?\.?)/,h=/^[_A-Za-z$][_A-Za-z$0-9]*/,g=/^@[_A-Za-z$][_A-Za-z$0-9]*/,T=b(["and","or","not","is","isnt","in","instanceof","typeof"]),x=["for","while","loop","if","unless","else","switch","try","catch","finally","class"],c=["break","by","continue","debugger","delete","do","in","of","new","return","then","this","@","throw","when","until","extends"],d=b(x.concat(c));x=b(x);var w=/^('{3}|\"{3}|['\"])/,E=/^(\/{3}|\/)/,z=["Infinity","NaN","undefined","null","true","false","on","off","yes","no"],y=b(z);function R(F,D){if(F.sol()){D.scope.align===null&&(D.scope.align=!1);var Q=D.scope.offset;if(F.eatSpace()){var j=F.indentation();return j>Q&&D.scope.type=="coffee"?"indent":j0&&ee(F,D)}if(F.eatSpace())return null;var V=F.peek();if(F.match("####"))return F.skipToEnd(),"comment";if(F.match("###"))return D.tokenize=H,D.tokenize(F,D);if(V==="#")return F.skipToEnd(),"comment";if(F.match(/^-?[0-9\.]/,!1)){var _=!1;if(F.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)&&(_=!0),F.match(/^-?\d+\.\d*/)&&(_=!0),F.match(/^-?\.\d+/)&&(_=!0),_)return F.peek()=="."&&F.backUp(1),"number";var K=!1;if(F.match(/^-?0x[0-9a-f]+/i)&&(K=!0),F.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)&&(K=!0),F.match(/^-?0(?![\dx])/i)&&(K=!0),K)return"number"}if(F.match(w))return D.tokenize=M(F.current(),!1,"string"),D.tokenize(F,D);if(F.match(E)){if(F.current()!="/"||F.match(/^.*\//,!1))return D.tokenize=M(F.current(),!0,"string-2"),D.tokenize(F,D);F.backUp(1)}return F.match(S)||F.match(T)?"operator":F.match(s)?"punctuation":F.match(y)?"atom":F.match(g)||D.prop&&F.match(h)?"property":F.match(d)?"keyword":F.match(h)?"variable":(F.next(),C)}function M(F,D,Q){return function(j,V){for(;!j.eol();)if(j.eatWhile(/[^'"\/\\]/),j.eat("\\")){if(j.next(),D&&j.eol())return Q}else{if(j.match(F))return V.tokenize=R,Q;j.eat(/['"\/]/)}return D&&(v.singleLineStringErrors?Q=C:V.tokenize=R),Q}}function H(F,D){for(;!F.eol();){if(F.eatWhile(/[^#]/),F.match("###")){D.tokenize=R;break}F.eatWhile("#")}return"comment"}function Z(F,D,Q){Q=Q||"coffee";for(var j=0,V=!1,_=null,K=D.scope;K;K=K.prev)if(K.type==="coffee"||K.type=="}"){j=K.offset+p.indentUnit;break}Q!=="coffee"?(V=null,_=F.column()+F.current().length):D.scope.align&&(D.scope.align=!1),D.scope={offset:j,type:Q,prev:D.scope,align:V,alignOffset:_}}function ee(F,D){if(D.scope.prev)if(D.scope.type==="coffee"){for(var Q=F.indentation(),j=!1,V=D.scope;V;V=V.prev)if(Q===V.offset){j=!0;break}if(!j)return!0;for(;D.scope.prev&&D.scope.offset!==Q;)D.scope=D.scope.prev;return!1}else return D.scope=D.scope.prev,!1}function re(F,D){var Q=D.tokenize(F,D),j=F.current();j==="return"&&(D.dedent=!0),((j==="->"||j==="=>")&&F.eol()||Q==="indent")&&Z(F,D);var V="[({".indexOf(j);if(V!==-1&&Z(F,D,"])}".slice(V,V+1)),x.exec(j)&&Z(F,D),j=="then"&&ee(F,D),Q==="dedent"&&ee(F,D))return C;if(V="])}".indexOf(j),V!==-1){for(;D.scope.type=="coffee"&&D.scope.prev;)D.scope=D.scope.prev;D.scope.type==j&&(D.scope=D.scope.prev)}return D.dedent&&F.eol()&&(D.scope.type=="coffee"&&D.scope.prev&&(D.scope=D.scope.prev),D.dedent=!1),Q}var N={startState:function(F){return{tokenize:R,scope:{offset:F||0,type:"coffee",prev:null,align:!1},prop:!1,dedent:0}},token:function(F,D){var Q=D.scope.align===null&&D.scope;Q&&F.sol()&&(Q.align=!1);var j=re(F,D);return j&&j!="comment"&&(Q&&(Q.align=!0),D.prop=j=="punctuation"&&F.current()=="."),j},indent:function(F,D){if(F.tokenize!=R)return 0;var Q=F.scope,j=D&&"])}".indexOf(D.charAt(0))>-1;if(j)for(;Q.type=="coffee"&&Q.prev;)Q=Q.prev;var V=j&&Q.type===D.charAt(0);return Q.align?Q.alignOffset-(V?1:0):(V?Q.prev:Q).offset},lineComment:"#",fold:"indent"};return N}),o.defineMIME("application/vnd.coffeescript","coffeescript"),o.defineMIME("text/x-coffeescript","coffeescript"),o.defineMIME("text/coffeescript","coffeescript")})});var tc=Ke((Ju,ec)=>{(function(o){typeof Ju=="object"&&typeof ec=="object"?o(We(),vn(),gn(),Qn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../javascript/javascript","../css/css","../htmlmixed/htmlmixed"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("pug",function(p){var v="keyword",C="meta",b="builtin",S="qualifier",s={"{":"}","(":")","[":"]"},h=o.getMode(p,"javascript");function g(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,this.javaScriptArguments=!1,this.javaScriptArgumentsDepth=0,this.isInterpolating=!1,this.interpolationNesting=0,this.jsState=o.startState(h),this.restOfLine="",this.isIncludeFiltered=!1,this.isEach=!1,this.lastTag="",this.scriptType="",this.isAttrs=!1,this.attrsNest=[],this.inAttributeName=!0,this.attributeIsType=!1,this.attrValue="",this.indentOf=1/0,this.indentToken="",this.innerMode=null,this.innerState=null,this.innerModeForLine=!1}g.prototype.copy=function(){var U=new g;return U.javaScriptLine=this.javaScriptLine,U.javaScriptLineExcludesColon=this.javaScriptLineExcludesColon,U.javaScriptArguments=this.javaScriptArguments,U.javaScriptArgumentsDepth=this.javaScriptArgumentsDepth,U.isInterpolating=this.isInterpolating,U.interpolationNesting=this.interpolationNesting,U.jsState=o.copyState(h,this.jsState),U.innerMode=this.innerMode,this.innerMode&&this.innerState&&(U.innerState=o.copyState(this.innerMode,this.innerState)),U.restOfLine=this.restOfLine,U.isIncludeFiltered=this.isIncludeFiltered,U.isEach=this.isEach,U.lastTag=this.lastTag,U.scriptType=this.scriptType,U.isAttrs=this.isAttrs,U.attrsNest=this.attrsNest.slice(),U.inAttributeName=this.inAttributeName,U.attributeIsType=this.attributeIsType,U.attrValue=this.attrValue,U.indentOf=this.indentOf,U.indentToken=this.indentToken,U.innerModeForLine=this.innerModeForLine,U};function T(U,G){if(U.sol()&&(G.javaScriptLine=!1,G.javaScriptLineExcludesColon=!1),G.javaScriptLine){if(G.javaScriptLineExcludesColon&&U.peek()===":"){G.javaScriptLine=!1,G.javaScriptLineExcludesColon=!1;return}var ce=h.token(U,G.jsState);return U.eol()&&(G.javaScriptLine=!1),ce||!0}}function x(U,G){if(G.javaScriptArguments){if(G.javaScriptArgumentsDepth===0&&U.peek()!=="("){G.javaScriptArguments=!1;return}if(U.peek()==="("?G.javaScriptArgumentsDepth++:U.peek()===")"&&G.javaScriptArgumentsDepth--,G.javaScriptArgumentsDepth===0){G.javaScriptArguments=!1;return}var ce=h.token(U,G.jsState);return ce||!0}}function c(U){if(U.match(/^yield\b/))return"keyword"}function d(U){if(U.match(/^(?:doctype) *([^\n]+)?/))return C}function w(U,G){if(U.match("#{"))return G.isInterpolating=!0,G.interpolationNesting=0,"punctuation"}function E(U,G){if(G.isInterpolating){if(U.peek()==="}"){if(G.interpolationNesting--,G.interpolationNesting<0)return U.next(),G.isInterpolating=!1,"punctuation"}else U.peek()==="{"&&G.interpolationNesting++;return h.token(U,G.jsState)||!0}}function z(U,G){if(U.match(/^case\b/))return G.javaScriptLine=!0,v}function y(U,G){if(U.match(/^when\b/))return G.javaScriptLine=!0,G.javaScriptLineExcludesColon=!0,v}function R(U){if(U.match(/^default\b/))return v}function M(U,G){if(U.match(/^extends?\b/))return G.restOfLine="string",v}function H(U,G){if(U.match(/^append\b/))return G.restOfLine="variable",v}function Z(U,G){if(U.match(/^prepend\b/))return G.restOfLine="variable",v}function ee(U,G){if(U.match(/^block\b *(?:(prepend|append)\b)?/))return G.restOfLine="variable",v}function re(U,G){if(U.match(/^include\b/))return G.restOfLine="string",v}function N(U,G){if(U.match(/^include:([a-zA-Z0-9\-]+)/,!1)&&U.match("include"))return G.isIncludeFiltered=!0,v}function F(U,G){if(G.isIncludeFiltered){var ce=B(U,G);return G.isIncludeFiltered=!1,G.restOfLine="string",ce}}function D(U,G){if(U.match(/^mixin\b/))return G.javaScriptLine=!0,v}function Q(U,G){if(U.match(/^\+([-\w]+)/))return U.match(/^\( *[-\w]+ *=/,!1)||(G.javaScriptArguments=!0,G.javaScriptArgumentsDepth=0),"variable";if(U.match("+#{",!1))return U.next(),G.mixinCallAfter=!0,w(U,G)}function j(U,G){if(G.mixinCallAfter)return G.mixinCallAfter=!1,U.match(/^\( *[-\w]+ *=/,!1)||(G.javaScriptArguments=!0,G.javaScriptArgumentsDepth=0),!0}function V(U,G){if(U.match(/^(if|unless|else if|else)\b/))return G.javaScriptLine=!0,v}function _(U,G){if(U.match(/^(- *)?(each|for)\b/))return G.isEach=!0,v}function K(U,G){if(G.isEach){if(U.match(/^ in\b/))return G.javaScriptLine=!0,G.isEach=!1,v;if(U.sol()||U.eol())G.isEach=!1;else if(U.next()){for(;!U.match(/^ in\b/,!1)&&U.next(););return"variable"}}}function X(U,G){if(U.match(/^while\b/))return G.javaScriptLine=!0,v}function I(U,G){var ce;if(ce=U.match(/^(\w(?:[-:\w]*\w)?)\/?/))return G.lastTag=ce[1].toLowerCase(),G.lastTag==="script"&&(G.scriptType="application/javascript"),"tag"}function B(U,G){if(U.match(/^:([\w\-]+)/)){var ce;return p&&p.innerModes&&(ce=p.innerModes(U.current().substring(1))),ce||(ce=U.current().substring(1)),typeof ce=="string"&&(ce=o.getMode(p,ce)),je(U,G,ce),"atom"}}function le(U,G){if(U.match(/^(!?=|-)/))return G.javaScriptLine=!0,"punctuation"}function xe(U){if(U.match(/^#([\w-]+)/))return b}function q(U){if(U.match(/^\.([\w-]+)/))return S}function L(U,G){if(U.peek()=="(")return U.next(),G.isAttrs=!0,G.attrsNest=[],G.inAttributeName=!0,G.attrValue="",G.attributeIsType=!1,"punctuation"}function de(U,G){if(G.isAttrs){if(s[U.peek()]&&G.attrsNest.push(s[U.peek()]),G.attrsNest[G.attrsNest.length-1]===U.peek())G.attrsNest.pop();else if(U.eat(")"))return G.isAttrs=!1,"punctuation";if(G.inAttributeName&&U.match(/^[^=,\)!]+/))return(U.peek()==="="||U.peek()==="!")&&(G.inAttributeName=!1,G.jsState=o.startState(h),G.lastTag==="script"&&U.current().trim().toLowerCase()==="type"?G.attributeIsType=!0:G.attributeIsType=!1),"attribute";var ce=h.token(U,G.jsState);if(G.attributeIsType&&ce==="string"&&(G.scriptType=U.current().toString()),G.attrsNest.length===0&&(ce==="string"||ce==="variable"||ce==="keyword"))try{return Function("","var x "+G.attrValue.replace(/,\s*$/,"").replace(/^!/,"")),G.inAttributeName=!0,G.attrValue="",U.backUp(U.current().length),de(U,G)}catch{}return G.attrValue+=U.current(),ce||!0}}function ze(U,G){if(U.match(/^&attributes\b/))return G.javaScriptArguments=!0,G.javaScriptArgumentsDepth=0,"keyword"}function pe(U){if(U.sol()&&U.eatSpace())return"indent"}function Ee(U,G){if(U.match(/^ *\/\/(-)?([^\n]*)/))return G.indentOf=U.indentation(),G.indentToken="comment","comment"}function ge(U){if(U.match(/^: */))return"colon"}function Oe(U,G){if(U.match(/^(?:\| ?| )([^\n]+)/))return"string";if(U.match(/^(<[^\n]*)/,!1))return je(U,G,"htmlmixed"),G.innerModeForLine=!0,Ze(U,G,!0)}function qe(U,G){if(U.eat(".")){var ce=null;return G.lastTag==="script"&&G.scriptType.toLowerCase().indexOf("javascript")!=-1?ce=G.scriptType.toLowerCase().replace(/"|'/g,""):G.lastTag==="style"&&(ce="css"),je(U,G,ce),"dot"}}function Se(U){return U.next(),null}function je(U,G,ce){ce=o.mimeModes[ce]||ce,ce=p.innerModes&&p.innerModes(ce)||ce,ce=o.mimeModes[ce]||ce,ce=o.getMode(p,ce),G.indentOf=U.indentation(),ce&&ce.name!=="null"?G.innerMode=ce:G.indentToken="string"}function Ze(U,G,ce){if(U.indentation()>G.indentOf||G.innerModeForLine&&!U.sol()||ce)return G.innerMode?(G.innerState||(G.innerState=G.innerMode.startState?o.startState(G.innerMode,U.indentation()):{}),U.hideFirstChars(G.indentOf+2,function(){return G.innerMode.token(U,G.innerState)||!0})):(U.skipToEnd(),G.indentToken);U.sol()&&(G.indentOf=1/0,G.indentToken=null,G.innerMode=null,G.innerState=null)}function ke(U,G){if(U.sol()&&(G.restOfLine=""),G.restOfLine){U.skipToEnd();var ce=G.restOfLine;return G.restOfLine="",ce}}function Je(){return new g}function He(U){return U.copy()}function Ge(U,G){var ce=Ze(U,G)||ke(U,G)||E(U,G)||F(U,G)||K(U,G)||de(U,G)||T(U,G)||x(U,G)||j(U,G)||c(U)||d(U)||w(U,G)||z(U,G)||y(U,G)||R(U)||M(U,G)||H(U,G)||Z(U,G)||ee(U,G)||re(U,G)||N(U,G)||D(U,G)||Q(U,G)||V(U,G)||_(U,G)||X(U,G)||I(U,G)||B(U,G)||le(U,G)||xe(U)||q(U)||L(U,G)||ze(U,G)||pe(U)||Oe(U,G)||Ee(U,G)||ge(U)||qe(U,G)||Se(U);return ce===!0?null:ce}return{startState:Je,copyState:He,token:Ge}},"javascript","css","htmlmixed"),o.defineMIME("text/x-pug","pug"),o.defineMIME("text/x-jade","pug")})});var ic=Ke((rc,nc)=>{(function(o){typeof rc=="object"&&typeof nc=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.multiplexingMode=function(p){var v=Array.prototype.slice.call(arguments,1);function C(b,S,s,h){if(typeof S=="string"){var g=b.indexOf(S,s);return h&&g>-1?g+S.length:g}var T=S.exec(s?b.slice(s):b);return T?T.index+s+(h?T[0].length:0):-1}return{startState:function(){return{outer:o.startState(p),innerActive:null,inner:null,startingInner:!1}},copyState:function(b){return{outer:o.copyState(p,b.outer),innerActive:b.innerActive,inner:b.innerActive&&o.copyState(b.innerActive.mode,b.inner),startingInner:b.startingInner}},token:function(b,S){if(S.innerActive){var E=S.innerActive,h=b.string;if(!E.close&&b.sol())return S.innerActive=S.inner=null,this.token(b,S);var x=E.close&&!S.startingInner?C(h,E.close,b.pos,E.parseDelimiters):-1;if(x==b.pos&&!E.parseDelimiters)return b.match(E.close),S.innerActive=S.inner=null,E.delimStyle&&E.delimStyle+" "+E.delimStyle+"-close";x>-1&&(b.string=h.slice(0,x));var z=E.mode.token(b,S.inner);return x>-1?b.string=h:b.pos>b.start&&(S.startingInner=!1),x==b.pos&&E.parseDelimiters&&(S.innerActive=S.inner=null),E.innerStyle&&(z?z=z+" "+E.innerStyle:z=E.innerStyle),z}else{for(var s=1/0,h=b.string,g=0;g{(function(o){typeof oc=="object"&&typeof ac=="object"?o(We(),Di(),ic()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/simple","../../addon/mode/multiplex"],o):o(CodeMirror)})(function(o){"use strict";o.defineSimpleMode("handlebars-tags",{start:[{regex:/\{\{\{/,push:"handlebars_raw",token:"tag"},{regex:/\{\{!--/,push:"dash_comment",token:"comment"},{regex:/\{\{!/,push:"comment",token:"comment"},{regex:/\{\{/,push:"handlebars",token:"tag"}],handlebars_raw:[{regex:/\}\}\}/,pop:!0,token:"tag"}],handlebars:[{regex:/\}\}/,pop:!0,token:"tag"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"},{regex:/'(?:[^\\']|\\.)*'?/,token:"string"},{regex:/>|[#\/]([A-Za-z_]\w*)/,token:"keyword"},{regex:/(?:else|this)\b/,token:"keyword"},{regex:/\d+/i,token:"number"},{regex:/=|~|@|true|false/,token:"atom"},{regex:/(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/,token:"variable-2"}],dash_comment:[{regex:/--\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],comment:[{regex:/\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],meta:{blockCommentStart:"{{--",blockCommentEnd:"--}}"}}),o.defineMode("handlebars",function(p,v){var C=o.getMode(p,"handlebars-tags");return!v||!v.base?C:o.multiplexingMode(o.getMode(p,v.base),{open:"{{",close:/\}\}\}?/,mode:C,parseDelimiters:!0})}),o.defineMIME("text/x-handlebars-template","handlebars")})});var cc=Ke((sc,uc)=>{(function(o){"use strict";typeof sc=="object"&&typeof uc=="object"?o(We(),Yn(),mn(),vn(),Vu(),gn(),ea(),ta(),tc(),lc()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/overlay","../xml/xml","../javascript/javascript","../coffeescript/coffeescript","../css/css","../sass/sass","../stylus/stylus","../pug/pug","../handlebars/handlebars"],o):o(CodeMirror)})(function(o){var p={script:[["lang",/coffee(script)?/,"coffeescript"],["type",/^(?:text|application)\/(?:x-)?coffee(?:script)?$/,"coffeescript"],["lang",/^babel$/,"javascript"],["type",/^text\/babel$/,"javascript"],["type",/^text\/ecmascript-\d+$/,"javascript"]],style:[["lang",/^stylus$/i,"stylus"],["lang",/^sass$/i,"sass"],["lang",/^less$/i,"text/x-less"],["lang",/^scss$/i,"text/x-scss"],["type",/^(text\/)?(x-)?styl(us)?$/i,"stylus"],["type",/^text\/sass/i,"sass"],["type",/^(text\/)?(x-)?scss$/i,"text/x-scss"],["type",/^(text\/)?(x-)?less$/i,"text/x-less"]],template:[["lang",/^vue-template$/i,"vue"],["lang",/^pug$/i,"pug"],["lang",/^handlebars$/i,"handlebars"],["type",/^(text\/)?(x-)?pug$/i,"pug"],["type",/^text\/x-handlebars-template$/i,"handlebars"],[null,null,"vue-template"]]};o.defineMode("vue-template",function(v,C){var b={token:function(S){if(S.match(/^\{\{.*?\}\}/))return"meta mustache";for(;S.next()&&!S.match("{{",!1););return null}};return o.overlayMode(o.getMode(v,C.backdrop||"text/html"),b)}),o.defineMode("vue",function(v){return o.getMode(v,{name:"htmlmixed",tags:p})},"htmlmixed","xml","javascript","coffeescript","css","sass","stylus","pug","handlebars"),o.defineMIME("script/x-vue","vue"),o.defineMIME("text/x-vue","vue")})});var pc=Ke((fc,dc)=>{(function(o){typeof fc=="object"&&typeof dc=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("yaml",function(){var p=["true","false","on","off","yes","no"],v=new RegExp("\\b(("+p.join(")|(")+"))$","i");return{token:function(C,b){var S=C.peek(),s=b.escaped;if(b.escaped=!1,S=="#"&&(C.pos==0||/\s/.test(C.string.charAt(C.pos-1))))return C.skipToEnd(),"comment";if(C.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(b.literal&&C.indentation()>b.keyCol)return C.skipToEnd(),"string";if(b.literal&&(b.literal=!1),C.sol()){if(b.keyCol=0,b.pair=!1,b.pairStart=!1,C.match("---")||C.match("..."))return"def";if(C.match(/\s*-\s+/))return"meta"}if(C.match(/^(\{|\}|\[|\])/))return S=="{"?b.inlinePairs++:S=="}"?b.inlinePairs--:S=="["?b.inlineList++:b.inlineList--,"meta";if(b.inlineList>0&&!s&&S==",")return C.next(),"meta";if(b.inlinePairs>0&&!s&&S==",")return b.keyCol=0,b.pair=!1,b.pairStart=!1,C.next(),"meta";if(b.pairStart){if(C.match(/^\s*(\||\>)\s*/))return b.literal=!0,"meta";if(C.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(b.inlinePairs==0&&C.match(/^\s*-?[0-9\.\,]+\s?$/)||b.inlinePairs>0&&C.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(C.match(v))return"keyword"}return!b.pair&&C.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^\s,\[\]{}#&*!|>'"%@`])[^#:]*(?=:($|\s))/)?(b.pair=!0,b.keyCol=C.indentation(),"atom"):b.pair&&C.match(/^:\s*/)?(b.pairStart=!0,"meta"):(b.pairStart=!1,b.escaped=S=="\\",C.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),o.defineMIME("text/x-yaml","yaml"),o.defineMIME("text/yaml","yaml")})});var $d={};function qd(o){for(var p;(p=Md.exec(o))!==null;){var v=p[0];if(v.indexOf("target=")===-1){var C=v.replace(/>$/,' target="_blank">');o=o.replace(v,C)}}return o}function Id(o){for(var p=new DOMParser,v=p.parseFromString(o,"text/html"),C=v.getElementsByTagName("li"),b=0;b0){for(var d=document.createElement("i"),w=0;w=0&&(x=s.getLineHandle(d),!v(x));d--);var R=s.getTokenAt({line:d,ch:1}),M=C(R).fencedChars,H,Z,ee,re;v(s.getLineHandle(h.line))?(H="",Z=h.line):v(s.getLineHandle(h.line-1))?(H="",Z=h.line-1):(H=M+` +`,Z=h.line),v(s.getLineHandle(g.line))?(ee="",re=g.line,g.ch===0&&(re+=1)):g.ch!==0&&v(s.getLineHandle(g.line+1))?(ee="",re=g.line+1):(ee=M+` +`,re=g.line+1),g.ch===0&&(re-=1),s.operation(function(){s.replaceRange(ee,{line:re,ch:0},{line:re+(ee?0:1),ch:0}),s.replaceRange(H,{line:Z,ch:0},{line:Z+(H?0:1),ch:0})}),s.setSelection({line:Z+(H?1:0),ch:0},{line:re+(H?1:-1),ch:0}),s.focus()}else{var N=h.line;if(v(s.getLineHandle(h.line))&&(b(s,h.line+1)==="fenced"?(d=h.line,N=h.line+1):(w=h.line,N=h.line-1)),d===void 0)for(d=N;d>=0&&(x=s.getLineHandle(d),!v(x));d--);if(w===void 0)for(E=s.lineCount(),w=N;w=0;d--)if(x=s.getLineHandle(d),!x.text.match(/^\s*$/)&&b(s,d,x)!=="indented"){d+=1;break}for(E=s.lineCount(),w=h.line;w\s+/,"unordered-list":C,"ordered-list":C},T=function(E,z){var y={quote:">","unordered-list":v,"ordered-list":"%%i."};return y[E].replace("%%i",z)},x=function(E,z){var y={quote:">","unordered-list":"\\"+v,"ordered-list":"\\d+."},R=new RegExp(y[E]);return z&&R.test(z)},c=function(E,z,y){var R=C.exec(z),M=T(E,d);return R!==null?(x(E,R[2])&&(M=""),z=R[1]+M+R[3]+z.replace(b,"").replace(g[E],"$1")):y==!1&&(z=M+" "+z),z},d=1,w=s.line;w<=h.line;w++)(function(E){var z=o.getLine(E);S[p]?z=z.replace(g[p],"$1"):(p=="unordered-list"&&(z=c("ordered-list",z,!0)),z=c(p,z,!1),d+=1),o.replaceRange(z,{line:E,ch:0},{line:E,ch:99999999999999})})(w);o.focus()}}function xc(o,p,v,C){if(!(!o.codemirror||o.isPreviewActive())){var b=o.codemirror,S=Tr(b),s=S[p];if(!s){Rr(b,s,v,C);return}var h=b.getCursor("start"),g=b.getCursor("end"),T=b.getLine(h.line),x=T.slice(0,h.ch),c=T.slice(h.ch);p=="link"?x=x.replace(/(.*)[^!]\[/,"$1"):p=="image"&&(x=x.replace(/(.*)!\[$/,"$1")),c=c.replace(/]\(.*?\)/,""),b.replaceRange(x+c,{line:h.line,ch:0},{line:h.line,ch:99999999999999}),h.ch-=v[0].length,h!==g&&(g.ch-=v[0].length),b.setSelection(h,g),b.focus()}}function sa(o,p,v,C){if(!(!o.codemirror||o.isPreviewActive())){C=typeof C>"u"?v:C;var b=o.codemirror,S=Tr(b),s,h=v,g=C,T=b.getCursor("start"),x=b.getCursor("end");S[p]?(s=b.getLine(T.line),h=s.slice(0,T.ch),g=s.slice(T.ch),p=="bold"?(h=h.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),g=g.replace(/(\*\*|__)/,"")):p=="italic"?(h=h.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),g=g.replace(/(\*|_)/,"")):p=="strikethrough"&&(h=h.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),g=g.replace(/(\*\*|~~)/,"")),b.replaceRange(h+g,{line:T.line,ch:0},{line:T.line,ch:99999999999999}),p=="bold"||p=="strikethrough"?(T.ch-=2,T!==x&&(x.ch-=2)):p=="italic"&&(T.ch-=1,T!==x&&(x.ch-=1))):(s=b.getSelection(),p=="bold"?(s=s.split("**").join(""),s=s.split("__").join("")):p=="italic"?(s=s.split("*").join(""),s=s.split("_").join("")):p=="strikethrough"&&(s=s.split("~~").join("")),b.replaceSelection(h+s+g),T.ch+=v.length,x.ch=T.ch+s.length),b.setSelection(T,x),b.focus()}}function Pd(o){if(!o.getWrapperElement().lastChild.classList.contains("editor-preview-active"))for(var p=o.getCursor("start"),v=o.getCursor("end"),C,b=p.line;b<=v.line;b++)C=o.getLine(b),C=C.replace(/^[ ]*([# ]+|\*|-|[> ]+|[0-9]+(.|\)))[ ]*/,""),o.replaceRange(C,{line:b,ch:0},{line:b,ch:99999999999999})}function Ii(o,p){if(Math.abs(o)<1024)return""+o+p[0];var v=0;do o/=1024,++v;while(Math.abs(o)>=1024&&v=19968?C+=v[b].length:C+=1;return C}function Te(o){o=o||{},o.parent=this;var p=!0;if(o.autoDownloadFontAwesome===!1&&(p=!1),o.autoDownloadFontAwesome!==!0)for(var v=document.styleSheets,C=0;C-1&&(p=!1);if(p){var b=document.createElement("link");b.rel="stylesheet",b.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(b)}if(o.element)this.element=o.element;else if(o.element===null){console.log("EasyMDE: Error. No element was found.");return}if(o.toolbar===void 0){o.toolbar=[];for(var S in Pr)Object.prototype.hasOwnProperty.call(Pr,S)&&(S.indexOf("separator-")!=-1&&o.toolbar.push("|"),(Pr[S].default===!0||o.showIcons&&o.showIcons.constructor===Array&&o.showIcons.indexOf(S)!=-1)&&o.toolbar.push(S))}if(Object.prototype.hasOwnProperty.call(o,"previewClass")||(o.previewClass="editor-preview"),Object.prototype.hasOwnProperty.call(o,"status")||(o.status=["autosave","lines","words","cursor"],o.uploadImage&&o.status.unshift("upload-image")),o.previewRender||(o.previewRender=function(h){return this.parent.markdown(h)}),o.parsingConfig=fr({highlightFormatting:!0},o.parsingConfig||{}),o.insertTexts=fr({},jd,o.insertTexts||{}),o.promptTexts=fr({},Rd,o.promptTexts||{}),o.blockStyles=fr({},Bd,o.blockStyles||{}),o.autosave!=null&&(o.autosave.timeFormat=fr({},Hd,o.autosave.timeFormat||{})),o.iconClassMap=fr({},et,o.iconClassMap||{}),o.shortcuts=fr({},Ad,o.shortcuts||{}),o.maxHeight=o.maxHeight||void 0,o.direction=o.direction||"ltr",typeof o.maxHeight<"u"?o.minHeight=o.maxHeight:o.minHeight=o.minHeight||"300px",o.errorCallback=o.errorCallback||function(h){alert(h)},o.uploadImage=o.uploadImage||!1,o.imageMaxSize=o.imageMaxSize||2097152,o.imageAccept=o.imageAccept||"image/png, image/jpeg, image/gif, image/avif",o.imageTexts=fr({},Wd,o.imageTexts||{}),o.errorMessages=fr({},Ud,o.errorMessages||{}),o.imagePathAbsolute=o.imagePathAbsolute||!1,o.imageCSRFName=o.imageCSRFName||"csrfmiddlewaretoken",o.imageCSRFHeader=o.imageCSRFHeader||!1,o.autosave!=null&&o.autosave.unique_id!=null&&o.autosave.unique_id!=""&&(o.autosave.uniqueId=o.autosave.unique_id),o.overlayMode&&o.overlayMode.combine===void 0&&(o.overlayMode.combine=!0),this.options=o,this.render(),o.initialValue&&(!this.options.autosave||this.options.autosave.foundSavedValue!==!0)&&this.value(o.initialValue),o.uploadImage){var s=this;this.codemirror.on("dragenter",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbOnDragEnter),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("dragend",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbInit),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("dragleave",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbInit),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("dragover",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbOnDragEnter),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("drop",function(h,g){g.stopPropagation(),g.preventDefault(),o.imageUploadFunction?s.uploadImagesUsingCustomFunction(o.imageUploadFunction,g.dataTransfer.files):s.uploadImages(g.dataTransfer.files)}),this.codemirror.on("paste",function(h,g){o.imageUploadFunction?s.uploadImagesUsingCustomFunction(o.imageUploadFunction,g.clipboardData.files):s.uploadImages(g.clipboardData.files)})}}function kc(){if(typeof localStorage=="object")try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch{return!1}else return!1;return!0}var mc,Md,Vn,Ad,Dd,ra,hc,et,Pr,jd,Rd,Hd,Bd,Wd,Ud,wc=Cd(()=>{mc=/Mac/.test(navigator.platform),Md=new RegExp(/()+?/g),Vn={toggleBold:Fi,toggleItalic:Ni,drawLink:Gi,toggleHeadingSmaller:Jn,toggleHeadingBigger:Ri,drawImage:Zi,toggleBlockquote:ji,toggleOrderedList:$i,toggleUnorderedList:Ui,toggleCodeBlock:Pi,togglePreview:Ji,toggleStrikethrough:Oi,toggleHeading1:Hi,toggleHeading2:Bi,toggleHeading3:Wi,toggleHeading4:na,toggleHeading5:ia,toggleHeading6:oa,cleanBlock:Ki,drawTable:Xi,drawHorizontalRule:Yi,undo:Qi,redo:Vi,toggleSideBySide:bn,toggleFullScreen:jr},Ad={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",toggleHeading1:"Ctrl+Alt+1",toggleHeading2:"Ctrl+Alt+2",toggleHeading3:"Ctrl+Alt+3",toggleHeading4:"Ctrl+Alt+4",toggleHeading5:"Ctrl+Alt+5",toggleHeading6:"Ctrl+Alt+6",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},Dd=function(o){for(var p in Vn)if(Vn[p]===o)return p;return null},ra=function(){var o=!1;return function(p){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(p)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(p.substr(0,4)))&&(o=!0)}(navigator.userAgent||navigator.vendor||window.opera),o};hc="";et={bold:"fa fa-bold",italic:"fa fa-italic",strikethrough:"fa fa-strikethrough",heading:"fa fa-header fa-heading","heading-smaller":"fa fa-header fa-heading header-smaller","heading-bigger":"fa fa-header fa-heading header-bigger","heading-1":"fa fa-header fa-heading header-1","heading-2":"fa fa-header fa-heading header-2","heading-3":"fa fa-header fa-heading header-3",code:"fa fa-code",quote:"fa fa-quote-left","ordered-list":"fa fa-list-ol","unordered-list":"fa fa-list-ul","clean-block":"fa fa-eraser",link:"fa fa-link",image:"fa fa-image","upload-image":"fa fa-image",table:"fa fa-table","horizontal-rule":"fa fa-minus",preview:"fa fa-eye","side-by-side":"fa fa-columns",fullscreen:"fa fa-arrows-alt",guide:"fa fa-question-circle",undo:"fa fa-undo",redo:"fa fa-repeat fa-redo"},Pr={bold:{name:"bold",action:Fi,className:et.bold,title:"Bold",default:!0},italic:{name:"italic",action:Ni,className:et.italic,title:"Italic",default:!0},strikethrough:{name:"strikethrough",action:Oi,className:et.strikethrough,title:"Strikethrough"},heading:{name:"heading",action:Jn,className:et.heading,title:"Heading",default:!0},"heading-smaller":{name:"heading-smaller",action:Jn,className:et["heading-smaller"],title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:Ri,className:et["heading-bigger"],title:"Bigger Heading"},"heading-1":{name:"heading-1",action:Hi,className:et["heading-1"],title:"Big Heading"},"heading-2":{name:"heading-2",action:Bi,className:et["heading-2"],title:"Medium Heading"},"heading-3":{name:"heading-3",action:Wi,className:et["heading-3"],title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:Pi,className:et.code,title:"Code"},quote:{name:"quote",action:ji,className:et.quote,title:"Quote",default:!0},"unordered-list":{name:"unordered-list",action:Ui,className:et["unordered-list"],title:"Generic List",default:!0},"ordered-list":{name:"ordered-list",action:$i,className:et["ordered-list"],title:"Numbered List",default:!0},"clean-block":{name:"clean-block",action:Ki,className:et["clean-block"],title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:Gi,className:et.link,title:"Create Link",default:!0},image:{name:"image",action:Zi,className:et.image,title:"Insert Image",default:!0},"upload-image":{name:"upload-image",action:aa,className:et["upload-image"],title:"Import an image"},table:{name:"table",action:Xi,className:et.table,title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:Yi,className:et["horizontal-rule"],title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:Ji,className:et.preview,noDisable:!0,title:"Toggle Preview",default:!0},"side-by-side":{name:"side-by-side",action:bn,className:et["side-by-side"],noDisable:!0,noMobile:!0,title:"Toggle Side by Side",default:!0},fullscreen:{name:"fullscreen",action:jr,className:et.fullscreen,noDisable:!0,noMobile:!0,title:"Toggle Fullscreen",default:!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://www.markdownguide.org/basic-syntax/",className:et.guide,noDisable:!0,title:"Markdown Guide",default:!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:Qi,className:et.undo,noDisable:!0,title:"Undo"},redo:{name:"redo",action:Vi,className:et.redo,noDisable:!0,title:"Redo"}},jd={link:["[","](#url#)"],image:["![","](#url#)"],uploadedImage:["![](#url#)",""],table:["",` + +| Column 1 | Column 2 | Column 3 | +| -------- | -------- | -------- | +| Text | Text | Text | + +`],horizontalRule:["",` + +----- + +`]},Rd={link:"URL for the link:",image:"URL of the image:"},Hd={locale:"en-US",format:{hour:"2-digit",minute:"2-digit"}},Bd={bold:"**",code:"```",italic:"*"},Wd={sbInit:"Attach files by drag and dropping or pasting from clipboard.",sbOnDragEnter:"Drop image to upload it.",sbOnDrop:"Uploading image #images_names#...",sbProgress:"Uploading #file_name#: #progress#%",sbOnUploaded:"Uploaded #image_name#",sizeUnits:" B, KB, MB"},Ud={noFileGiven:"You must select a file.",typeNotAllowed:"This image type is not allowed.",fileTooLarge:`Image #image_name# is too big (#image_size#). +Maximum file size is #image_max_size#.`,importError:"Something went wrong when uploading the image #image_name#."};Te.prototype.uploadImages=function(o,p,v){if(o.length!==0){for(var C=[],b=0;b=2){var H=M[1];if(p.imagesPreviewHandler){var Z=p.imagesPreviewHandler(M[1]);typeof Z=="string"&&(H=Z)}if(window.EMDEimagesCache[H])w(R,window.EMDEimagesCache[H]);else{var ee=document.createElement("img");ee.onload=function(){window.EMDEimagesCache[H]={naturalWidth:ee.naturalWidth,naturalHeight:ee.naturalHeight,url:H},w(R,window.EMDEimagesCache[H])},ee.src=H}}}})}this.codemirror.on("update",function(){E()}),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(p.autofocus===!0||o.autofocus)&&this.codemirror.focus();var z=this.codemirror;setTimeout(function(){z.refresh()}.bind(z),0)};Te.prototype.cleanup=function(){document.removeEventListener("keydown",this.documentOnKeyDown)};Te.prototype.autosave=function(){if(kc()){var o=this;if(this.options.autosave.uniqueId==null||this.options.autosave.uniqueId==""){console.log("EasyMDE: You must set a uniqueId to use the autosave feature");return}this.options.autosave.binded!==!0&&(o.element.form!=null&&o.element.form!=null&&o.element.form.addEventListener("submit",function(){clearTimeout(o.autosaveTimeoutId),o.autosaveTimeoutId=void 0,localStorage.removeItem("smde_"+o.options.autosave.uniqueId)}),this.options.autosave.binded=!0),this.options.autosave.loaded!==!0&&(typeof localStorage.getItem("smde_"+this.options.autosave.uniqueId)=="string"&&localStorage.getItem("smde_"+this.options.autosave.uniqueId)!=""&&(this.codemirror.setValue(localStorage.getItem("smde_"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0);var p=o.value();p!==""?localStorage.setItem("smde_"+this.options.autosave.uniqueId,p):localStorage.removeItem("smde_"+this.options.autosave.uniqueId);var v=document.getElementById("autosaved");if(v!=null&&v!=null&&v!=""){var C=new Date,b=new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale,"en-US"],this.options.autosave.timeFormat.format).format(C),S=this.options.autosave.text==null?"Autosaved: ":this.options.autosave.text;v.innerHTML=S+b}}else console.log("EasyMDE: localStorage not available, cannot autosave")};Te.prototype.clearAutosavedValue=function(){if(kc()){if(this.options.autosave==null||this.options.autosave.uniqueId==null||this.options.autosave.uniqueId==""){console.log("EasyMDE: You must set a uniqueId to clear the autosave value");return}localStorage.removeItem("smde_"+this.options.autosave.uniqueId)}else console.log("EasyMDE: localStorage not available, cannot autosave")};Te.prototype.openBrowseFileWindow=function(o,p){var v=this,C=this.gui.toolbar.getElementsByClassName("imageInput")[0];C.click();function b(S){v.options.imageUploadFunction?v.uploadImagesUsingCustomFunction(v.options.imageUploadFunction,S.target.files):v.uploadImages(S.target.files,o,p),C.removeEventListener("change",b)}C.addEventListener("change",b)};Te.prototype.uploadImage=function(o,p,v){var C=this;p=p||function(T){yc(C,T)};function b(g){C.updateStatusBar("upload-image",g),setTimeout(function(){C.updateStatusBar("upload-image",C.options.imageTexts.sbInit)},1e4),v&&typeof v=="function"&&v(g),C.options.errorCallback(g)}function S(g){var T=C.options.imageTexts.sizeUnits.split(",");return g.replace("#image_name#",o.name).replace("#image_size#",Ii(o.size,T)).replace("#image_max_size#",Ii(C.options.imageMaxSize,T))}if(o.size>this.options.imageMaxSize){b(S(this.options.errorMessages.fileTooLarge));return}var s=new FormData;s.append("image",o),C.options.imageCSRFToken&&!C.options.imageCSRFHeader&&s.append(C.options.imageCSRFName,C.options.imageCSRFToken);var h=new XMLHttpRequest;h.upload.onprogress=function(g){if(g.lengthComputable){var T=""+Math.round(g.loaded*100/g.total);C.updateStatusBar("upload-image",C.options.imageTexts.sbProgress.replace("#file_name#",o.name).replace("#progress#",T))}},h.open("POST",this.options.imageUploadEndpoint),C.options.imageCSRFToken&&C.options.imageCSRFHeader&&h.setRequestHeader(C.options.imageCSRFName,C.options.imageCSRFToken),h.onload=function(){try{var g=JSON.parse(this.responseText)}catch{console.error("EasyMDE: The server did not return a valid json."),b(S(C.options.errorMessages.importError));return}this.status===200&&g&&!g.error&&g.data&&g.data.filePath?p((C.options.imagePathAbsolute?"":window.location.origin+"/")+g.data.filePath):g.error&&g.error in C.options.errorMessages?b(S(C.options.errorMessages[g.error])):g.error?b(S(g.error)):(console.error("EasyMDE: Received an unexpected response after uploading the image."+this.status+" ("+this.statusText+")"),b(S(C.options.errorMessages.importError)))},h.onerror=function(g){console.error("EasyMDE: An unexpected error occurred when trying to upload the image."+g.target.status+" ("+g.target.statusText+")"),b(C.options.errorMessages.importError)},h.send(s)};Te.prototype.uploadImageUsingCustomFunction=function(o,p){var v=this;function C(s){yc(v,s)}function b(s){var h=S(s);v.updateStatusBar("upload-image",h),setTimeout(function(){v.updateStatusBar("upload-image",v.options.imageTexts.sbInit)},1e4),v.options.errorCallback(h)}function S(s){var h=v.options.imageTexts.sizeUnits.split(",");return s.replace("#image_name#",p.name).replace("#image_size#",Ii(p.size,h)).replace("#image_max_size#",Ii(v.options.imageMaxSize,h))}o.apply(this,[p,C,b])};Te.prototype.setPreviewMaxHeight=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling,C=parseInt(window.getComputedStyle(p).paddingTop),b=parseInt(window.getComputedStyle(p).borderTopWidth),S=parseInt(this.options.maxHeight),s=S+C*2+b*2,h=s.toString()+"px";v.style.height=h};Te.prototype.createSideBySide=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling;if(!v||!v.classList.contains("editor-preview-side")){if(v=document.createElement("div"),v.className="editor-preview-side",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var C=0;C{try{let E=w[w.length-1];if(E.origin==="+input"){let z="(https://)",y=E.text[E.text.length-1];if(y.endsWith(z)&&y!=="[]"+z){let R=E.from,M=E.to,Z=E.text.length>1?0:R.ch;setTimeout(()=>{d.setSelection({line:M.line,ch:Z+y.lastIndexOf("(")+1},{line:M.line,ch:Z+y.lastIndexOf(")")})},25)}}}catch{}}),this.editor.codemirror.on("change",Alpine.debounce(()=>{this.editor&&(this.state=this.editor.value(),p&&this.$wire.call("$refresh"))},C??300)),v&&this.editor.codemirror.on("blur",()=>this.$wire.call("$refresh")),this.$watch("state",()=>{this.editor&&(this.editor.codemirror.hasFocus()||Alpine.raw(this.editor).value(this.state??""))}),h&&h(this)},destroy:function(){this.editor.cleanup(),this.editor=null},getToolbar:function(){let d=[];return x.includes("bold")&&d.push({name:"bold",action:EasyMDE.toggleBold,title:T.toolbar_buttons?.bold}),x.includes("italic")&&d.push({name:"italic",action:EasyMDE.toggleItalic,title:T.toolbar_buttons?.italic}),x.includes("strike")&&d.push({name:"strikethrough",action:EasyMDE.toggleStrikethrough,title:T.toolbar_buttons?.strike}),x.includes("link")&&d.push({name:"link",action:EasyMDE.drawLink,title:T.toolbar_buttons?.link}),["bold","italic","strike","link"].some(w=>x.includes(w))&&["heading"].some(w=>x.includes(w))&&d.push("|"),x.includes("heading")&&d.push({name:"heading",action:EasyMDE.toggleHeadingSmaller,title:T.toolbar_buttons?.heading}),["heading"].some(w=>x.includes(w))&&["blockquote","codeBlock","bulletList","orderedList"].some(w=>x.includes(w))&&d.push("|"),x.includes("blockquote")&&d.push({name:"quote",action:EasyMDE.toggleBlockquote,title:T.toolbar_buttons?.blockquote}),x.includes("codeBlock")&&d.push({name:"code",action:EasyMDE.toggleCodeBlock,title:T.toolbar_buttons?.code_block}),x.includes("bulletList")&&d.push({name:"unordered-list",action:EasyMDE.toggleUnorderedList,title:T.toolbar_buttons?.bullet_list}),x.includes("orderedList")&&d.push({name:"ordered-list",action:EasyMDE.toggleOrderedList,title:T.toolbar_buttons?.ordered_list}),["blockquote","codeBlock","bulletList","orderedList"].some(w=>x.includes(w))&&["table","attachFiles"].some(w=>x.includes(w))&&d.push("|"),x.includes("table")&&d.push({name:"table",action:EasyMDE.drawTable,title:T.toolbar_buttons?.table}),x.includes("attachFiles")&&d.push({name:"upload-image",action:EasyMDE.drawUploadedImage,title:T.toolbar_buttons?.attach_files}),["table","attachFiles"].some(w=>x.includes(w))&&["undo","redo"].some(w=>x.includes(w))&&d.push("|"),x.includes("undo")&&d.push({name:"undo",action:EasyMDE.undo,title:T.toolbar_buttons?.undo}),x.includes("redo")&&d.push({name:"redo",action:EasyMDE.redo,title:T.toolbar_buttons?.redo}),d}}}export{Kd as default}; diff --git a/public/js/filament/forms/components/rich-editor.js b/public/js/filament/forms/components/rich-editor.js new file mode 100644 index 000000000..01ad26f2c --- /dev/null +++ b/public/js/filament/forms/components/rich-editor.js @@ -0,0 +1,150 @@ +var po="2.1.12",Rt="[data-trix-attachment]",mi={preview:{presentation:"gallery",caption:{name:!0,size:!0}},file:{caption:{size:!0}}},W={default:{tagName:"div",parse:!1},quote:{tagName:"blockquote",nestable:!0},heading1:{tagName:"h1",terminal:!0,breakOnReturn:!0,group:!1},code:{tagName:"pre",terminal:!0,htmlAttributes:["language"],text:{plaintext:!0}},bulletList:{tagName:"ul",parse:!1},bullet:{tagName:"li",listAttribute:"bulletList",group:!1,nestable:!0,test(i){return Gi(i.parentNode)===W[this.listAttribute].tagName}},numberList:{tagName:"ol",parse:!1},number:{tagName:"li",listAttribute:"numberList",group:!1,nestable:!0,test(i){return Gi(i.parentNode)===W[this.listAttribute].tagName}},attachmentGallery:{tagName:"div",exclusive:!0,terminal:!0,parse:!1,group:!1}},Gi=i=>{var t;return i==null||(t=i.tagName)===null||t===void 0?void 0:t.toLowerCase()},$i=navigator.userAgent.match(/android\s([0-9]+.*Chrome)/i),Sn=$i&&parseInt($i[1]),xe={composesExistingText:/Android.*Chrome/.test(navigator.userAgent),recentAndroid:Sn&&Sn>12,samsungAndroid:Sn&&navigator.userAgent.match(/Android.*SM-/),forcesObjectResizing:/Trident.*rv:11/.test(navigator.userAgent),supportsInputEvents:typeof InputEvent<"u"&&["data","getTargetRanges","inputType"].every(i=>i in InputEvent.prototype)},Lr={ADD_ATTR:["language"],SAFE_FOR_XML:!1,RETURN_DOM:!0},m={attachFiles:"Attach Files",bold:"Bold",bullets:"Bullets",byte:"Byte",bytes:"Bytes",captionPlaceholder:"Add a caption\u2026",code:"Code",heading1:"Heading",indent:"Increase Level",italic:"Italic",link:"Link",numbers:"Numbers",outdent:"Decrease Level",quote:"Quote",redo:"Redo",remove:"Remove",strike:"Strikethrough",undo:"Undo",unlink:"Unlink",url:"URL",urlPlaceholder:"Enter a URL\u2026",GB:"GB",KB:"KB",MB:"MB",PB:"PB",TB:"TB"},fo=[m.bytes,m.KB,m.MB,m.GB,m.TB,m.PB],Dr={prefix:"IEC",precision:2,formatter(i){switch(i){case 0:return"0 ".concat(m.bytes);case 1:return"1 ".concat(m.byte);default:let t;this.prefix==="SI"?t=1e3:this.prefix==="IEC"&&(t=1024);let e=Math.floor(Math.log(i)/Math.log(t)),n=(i/Math.pow(t,e)).toFixed(this.precision).replace(/0*$/,"").replace(/\.$/,"");return"".concat(n," ").concat(fo[e])}}},ln="\uFEFF",ft="\xA0",Nr=function(i){for(let t in i){let e=i[t];this[t]=e}return this},pi=document.documentElement,bo=pi.matches,S=function(i){let{onElement:t,matchingSelector:e,withCallback:n,inPhase:r,preventDefault:o,times:s}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},l=t||pi,c=e,u=r==="capturing",d=function(C){s!=null&&--s==0&&d.destroy();let T=vt(C.target,{matchingSelector:c});T!=null&&(n?.call(T,C,T),o&&C.preventDefault())};return d.destroy=()=>l.removeEventListener(i,d,u),l.addEventListener(i,d,u),d},he=function(i){let{onElement:t,bubbles:e,cancelable:n,attributes:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=t??pi;e=e!==!1,n=n!==!1;let s=document.createEvent("Events");return s.initEvent(i,e,n),r!=null&&Nr.call(s,r),o.dispatchEvent(s)},Ir=function(i,t){if(i?.nodeType===1)return bo.call(i,t)},vt=function(i){let{matchingSelector:t,untilNode:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(;i&&i.nodeType!==Node.ELEMENT_NODE;)i=i.parentNode;if(i!=null){if(t==null)return i;if(i.closest&&e==null)return i.closest(t);for(;i&&i!==e;){if(Ir(i,t))return i;i=i.parentNode}}},fi=i=>document.activeElement!==i&&kt(i,document.activeElement),kt=function(i,t){if(i&&t)for(;t;){if(t===i)return!0;t=t.parentNode}},kn=function(i){var t;if((t=i)===null||t===void 0||!t.parentNode)return;let e=0;for(i=i.previousSibling;i;)e++,i=i.previousSibling;return e},At=i=>{var t;return i==null||(t=i.parentNode)===null||t===void 0?void 0:t.removeChild(i)},je=function(i){let{onlyNodesOfType:t,usingFilter:e,expandEntityReferences:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(()=>{switch(t){case"element":return NodeFilter.SHOW_ELEMENT;case"text":return NodeFilter.SHOW_TEXT;case"comment":return NodeFilter.SHOW_COMMENT;default:return NodeFilter.SHOW_ALL}})();return document.createTreeWalker(i,r,e??null,n===!0)},j=i=>{var t;return i==null||(t=i.tagName)===null||t===void 0?void 0:t.toLowerCase()},p=function(i){let t,e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};typeof i=="object"?(n=i,i=n.tagName):n={attributes:n};let r=document.createElement(i);if(n.editable!=null&&(n.attributes==null&&(n.attributes={}),n.attributes.contenteditable=n.editable),n.attributes)for(t in n.attributes)e=n.attributes[t],r.setAttribute(t,e);if(n.style)for(t in n.style)e=n.style[t],r.style[t]=e;if(n.data)for(t in n.data)e=n.data[t],r.dataset[t]=e;return n.className&&n.className.split(" ").forEach(o=>{r.classList.add(o)}),n.textContent&&(r.textContent=n.textContent),n.childNodes&&[].concat(n.childNodes).forEach(o=>{r.appendChild(o)}),r},ie,de=function(){if(ie!=null)return ie;ie=[];for(let i in W){let t=W[i];t.tagName&&ie.push(t.tagName)}return ie},Rn=i=>Vt(i?.firstChild),Yi=function(i){let{strict:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{strict:!0};return t?Vt(i):Vt(i)||!Vt(i.firstChild)&&function(e){return de().includes(j(e))&&!de().includes(j(e.firstChild))}(i)},Vt=i=>vo(i)&&i?.data==="block",vo=i=>i?.nodeType===Node.COMMENT_NODE,zt=function(i){let{name:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(i)return ge(i)?i.data===ln?!t||i.parentNode.dataset.trixCursorTarget===t:void 0:zt(i.firstChild)},Tt=i=>Ir(i,Rt),Or=i=>ge(i)&&i?.data==="",ge=i=>i?.nodeType===Node.TEXT_NODE,bi={level2Enabled:!0,getLevel(){return this.level2Enabled&&xe.supportsInputEvents?2:0},pickFiles(i){let t=p("input",{type:"file",multiple:!0,hidden:!0,id:this.fileInputId});t.addEventListener("change",()=>{i(t.files),At(t)}),At(document.getElementById(this.fileInputId)),document.body.appendChild(t),t.click()}},Me={removeBlankTableCells:!1,tableCellSeparator:" | ",tableRowSeparator:` +`},Dt={bold:{tagName:"strong",inheritable:!0,parser(i){let t=window.getComputedStyle(i);return t.fontWeight==="bold"||t.fontWeight>=600}},italic:{tagName:"em",inheritable:!0,parser:i=>window.getComputedStyle(i).fontStyle==="italic"},href:{groupTagName:"a",parser(i){let t="a:not(".concat(Rt,")"),e=i.closest(t);if(e)return e.getAttribute("href")}},strike:{tagName:"del",inheritable:!0},frozen:{style:{backgroundColor:"highlight"}}},Fr={getDefaultHTML:()=>`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
`)},Yn={interval:5e3},Ce=Object.freeze({__proto__:null,attachments:mi,blockAttributes:W,browser:xe,css:{attachment:"attachment",attachmentCaption:"attachment__caption",attachmentCaptionEditor:"attachment__caption-editor",attachmentMetadata:"attachment__metadata",attachmentMetadataContainer:"attachment__metadata-container",attachmentName:"attachment__name",attachmentProgress:"attachment__progress",attachmentSize:"attachment__size",attachmentToolbar:"attachment__toolbar",attachmentGallery:"attachment-gallery"},dompurify:Lr,fileSize:Dr,input:bi,keyNames:{8:"backspace",9:"tab",13:"return",27:"escape",37:"left",39:"right",46:"delete",68:"d",72:"h",79:"o"},lang:m,parser:Me,textAttributes:Dt,toolbar:Fr,undo:Yn}),R=class{static proxyMethod(t){let{name:e,toMethod:n,toProperty:r,optional:o}=Ao(t);this.prototype[e]=function(){let s,l;var c,u;return n?l=o?(c=this[n])===null||c===void 0?void 0:c.call(this):this[n]():r&&(l=this[r]),o?(s=(u=l)===null||u===void 0?void 0:u[e],s?Xi.call(s,l,arguments):void 0):(s=l[e],Xi.call(s,l,arguments))}}},Ao=function(i){let t=i.match(yo);if(!t)throw new Error("can't parse @proxyMethod expression: ".concat(i));let e={name:t[4]};return t[2]!=null?e.toMethod=t[1]:e.toProperty=t[1],t[3]!=null&&(e.optional=!0),e},{apply:Xi}=Function.prototype,yo=new RegExp("^(.+?)(\\(\\))?(\\?)?\\.(.+?)$"),Tn,wn,Ln,Nt=class extends R{static box(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return t instanceof this?t:this.fromUCS2String(t?.toString())}static fromUCS2String(t){return new this(t,Xn(t))}static fromCodepoints(t){return new this(Zn(t),t)}constructor(t,e){super(...arguments),this.ucs2String=t,this.codepoints=e,this.length=this.codepoints.length,this.ucs2Length=this.ucs2String.length}offsetToUCS2Offset(t){return Zn(this.codepoints.slice(0,Math.max(0,t))).length}offsetFromUCS2Offset(t){return Xn(this.ucs2String.slice(0,Math.max(0,t))).length}slice(){return this.constructor.fromCodepoints(this.codepoints.slice(...arguments))}charAt(t){return this.slice(t,t+1)}isEqualTo(t){return this.constructor.box(t).ucs2String===this.ucs2String}toJSON(){return this.ucs2String}getCacheKey(){return this.ucs2String}toString(){return this.ucs2String}},xo=((Tn=Array.from)===null||Tn===void 0?void 0:Tn.call(Array,"\u{1F47C}").length)===1,Co=((wn=" ".codePointAt)===null||wn===void 0?void 0:wn.call(" ",0))!=null,Eo=((Ln=String.fromCodePoint)===null||Ln===void 0?void 0:Ln.call(String,32,128124))===" \u{1F47C}",Xn,Zn;Xn=xo&&Co?i=>Array.from(i).map(t=>t.codePointAt(0)):function(i){let t=[],e=0,{length:n}=i;for(;eString.fromCodePoint(...Array.from(i||[])):function(i){return(()=>{let t=[];return Array.from(i).forEach(e=>{let n="";e>65535&&(e-=65536,n+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t.push(n+String.fromCharCode(e))}),t})().join("")};var So=0,ht=class extends R{static fromJSONString(t){return this.fromJSON(JSON.parse(t))}constructor(){super(...arguments),this.id=++So}hasSameConstructorAs(t){return this.constructor===t?.constructor}isEqualTo(t){return this===t}inspect(){let t=[],e=this.contentsForInspection()||{};for(let n in e){let r=e[n];t.push("".concat(n,"=").concat(r))}return"#<".concat(this.constructor.name,":").concat(this.id).concat(t.length?" ".concat(t.join(", ")):"",">")}contentsForInspection(){}toJSONString(){return JSON.stringify(this)}toUTF16String(){return Nt.box(this)}getCacheKey(){return this.id.toString()}},It=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(i.length!==t.length)return!1;for(let e=0;e1?e-1:0),r=1;r(Dn||(Dn=wo().concat(To())),Dn),L=i=>W[i],To=()=>(Nn||(Nn=Object.keys(W)),Nn),ti=i=>Dt[i],wo=()=>(In||(In=Object.keys(Dt)),In),Pr=function(i,t){Lo(i).textContent=t.replace(/%t/g,i)},Lo=function(i){let t=document.createElement("style");t.setAttribute("type","text/css"),t.setAttribute("data-tag-name",i.toLowerCase());let e=Do();return e&&t.setAttribute("nonce",e),document.head.insertBefore(t,document.head.firstChild),t},Do=function(){let i=Zi("trix-csp-nonce")||Zi("csp-nonce");if(i){let{nonce:t,content:e}=i;return t==""?e:t}},Zi=i=>document.head.querySelector("meta[name=".concat(i,"]")),Qi={"application/x-trix-feature-detection":"test"},Mr=function(i){let t=i.getData("text/plain"),e=i.getData("text/html");if(!t||!e)return t?.length;{let{body:n}=new DOMParser().parseFromString(e,"text/html");if(n.textContent===t)return!n.querySelector("*")}},Br=/Mac|^iP/.test(navigator.platform)?i=>i.metaKey:i=>i.ctrlKey,Ai=i=>setTimeout(i,1),_r=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t={};for(let e in i){let n=i[e];t[e]=n}return t},Xt=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(Object.keys(i).length!==Object.keys(t).length)return!1;for(let e in i)if(i[e]!==t[e])return!1;return!0},y=function(i){if(i!=null)return Array.isArray(i)||(i=[i,i]),[tr(i[0]),tr(i[1]!=null?i[1]:i[0])]},ut=function(i){if(i==null)return;let[t,e]=y(i);return ei(t,e)},We=function(i,t){if(i==null||t==null)return;let[e,n]=y(i),[r,o]=y(t);return ei(e,r)&&ei(n,o)},tr=function(i){return typeof i=="number"?i:_r(i)},ei=function(i,t){return typeof i=="number"?i===t:Xt(i,t)},Ue=class extends R{constructor(){super(...arguments),this.update=this.update.bind(this),this.selectionManagers=[]}start(){this.started||(this.started=!0,document.addEventListener("selectionchange",this.update,!0))}stop(){if(this.started)return this.started=!1,document.removeEventListener("selectionchange",this.update,!0)}registerSelectionManager(t){if(!this.selectionManagers.includes(t))return this.selectionManagers.push(t),this.start()}unregisterSelectionManager(t){if(this.selectionManagers=this.selectionManagers.filter(e=>e!==t),this.selectionManagers.length===0)return this.stop()}notifySelectionManagersOfSelectionChange(){return this.selectionManagers.map(t=>t.selectionDidChange())}update(){this.notifySelectionManagersOfSelectionChange()}reset(){this.update()}},Ot=new Ue,jr=function(){let i=window.getSelection();if(i.rangeCount>0)return i},me=function(){var i;let t=(i=jr())===null||i===void 0?void 0:i.getRangeAt(0);if(t&&!No(t))return t},Wr=function(i){let t=window.getSelection();return t.removeAllRanges(),t.addRange(i),Ot.update()},No=i=>er(i.startContainer)||er(i.endContainer),er=i=>!Object.getPrototypeOf(i),ue=i=>i.replace(new RegExp("".concat(ln),"g"),"").replace(new RegExp("".concat(ft),"g")," "),yi=new RegExp("[^\\S".concat(ft,"]")),xi=i=>i.replace(new RegExp("".concat(yi.source),"g")," ").replace(/\ {2,}/g," "),nr=function(i,t){if(i.isEqualTo(t))return["",""];let e=On(i,t),{length:n}=e.utf16String,r;if(n){let{offset:o}=e,s=i.codepoints.slice(0,o).concat(i.codepoints.slice(o+n));r=On(t,Nt.fromCodepoints(s))}else r=On(t,i);return[e.utf16String.toString(),r.utf16String.toString()]},On=function(i,t){let e=0,n=i.length,r=t.length;for(;ee+1&&i.charAt(n-1).isEqualTo(t.charAt(r-1));)n--,r--;return{utf16String:i.slice(e,n),offset:e}},X=class i extends ht{static fromCommonAttributesOfObjects(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(!t.length)return new this;let e=re(t[0]),n=e.getKeys();return t.slice(1).forEach(r=>{n=e.getKeysCommonToHash(re(r)),e=e.slice(n)}),e}static box(t){return re(t)}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(...arguments),this.values=Be(t)}add(t,e){return this.merge(Io(t,e))}remove(t){return new i(Be(this.values,t))}get(t){return this.values[t]}has(t){return t in this.values}merge(t){return new i(Oo(this.values,Fo(t)))}slice(t){let e={};return Array.from(t).forEach(n=>{this.has(n)&&(e[n]=this.values[n])}),new i(e)}getKeys(){return Object.keys(this.values)}getKeysCommonToHash(t){return t=re(t),this.getKeys().filter(e=>this.values[e]===t.values[e])}isEqualTo(t){return It(this.toArray(),re(t).toArray())}isEmpty(){return this.getKeys().length===0}toArray(){if(!this.array){let t=[];for(let e in this.values){let n=this.values[e];t.push(t.push(e,n))}this.array=t.slice(0)}return this.array}toObject(){return Be(this.values)}toJSON(){return this.toObject()}contentsForInspection(){return{values:JSON.stringify(this.values)}}},Io=function(i,t){let e={};return e[i]=t,e},Oo=function(i,t){let e=Be(i);for(let n in t){let r=t[n];e[n]=r}return e},Be=function(i,t){let e={};return Object.keys(i).sort().forEach(n=>{n!==t&&(e[n]=i[n])}),e},re=function(i){return i instanceof X?i:new X(i)},Fo=function(i){return i instanceof X?i.values:i},fe=class{static groupObjects(){let t,e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],{depth:n,asTree:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};r&&n==null&&(n=0);let o=[];return Array.from(e).forEach(s=>{var l;if(t){var c,u,d;if((c=s.canBeGrouped)!==null&&c!==void 0&&c.call(s,n)&&(u=(d=t[t.length-1]).canBeGroupedWith)!==null&&u!==void 0&&u.call(d,s,n))return void t.push(s);o.push(new this(t,{depth:n,asTree:r})),t=null}(l=s.canBeGrouped)!==null&&l!==void 0&&l.call(s,n)?t=[s]:o.push(s)}),t&&o.push(new this(t,{depth:n,asTree:r})),o}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],{depth:e,asTree:n}=arguments.length>1?arguments[1]:void 0;this.objects=t,n&&(this.depth=e,this.objects=this.constructor.groupObjects(this.objects,{asTree:n,depth:this.depth+1}))}getObjects(){return this.objects}getDepth(){return this.depth}getCacheKey(){let t=["objectGroup"];return Array.from(this.getObjects()).forEach(e=>{t.push(e.getCacheKey())}),t.join("/")}},ni=class extends R{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),this.objects={},Array.from(t).forEach(e=>{let n=JSON.stringify(e);this.objects[n]==null&&(this.objects[n]=e)})}find(t){let e=JSON.stringify(t);return this.objects[e]}},ii=class{constructor(t){this.reset(t)}add(t){let e=ir(t);this.elements[e]=t}remove(t){let e=ir(t),n=this.elements[e];if(n)return delete this.elements[e],n}reset(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return this.elements={},Array.from(t).forEach(e=>{this.add(e)}),t}},ir=i=>i.dataset.trixStoreKey,Ht=class extends R{isPerforming(){return this.performing===!0}hasPerformed(){return this.performed===!0}hasSucceeded(){return this.performed&&this.succeeded}hasFailed(){return this.performed&&!this.succeeded}getPromise(){return this.promise||(this.promise=new Promise((t,e)=>(this.performing=!0,this.perform((n,r)=>{this.succeeded=n,this.performing=!1,this.performed=!0,this.succeeded?t(r):e(r)})))),this.promise}perform(t){return t(!1)}release(){var t,e;(t=this.promise)===null||t===void 0||(e=t.cancel)===null||e===void 0||e.call(t),this.promise=null,this.performing=null,this.performed=null,this.succeeded=null}};Ht.proxyMethod("getPromise().then"),Ht.proxyMethod("getPromise().catch");var dt=class extends R{constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.object=t,this.options=e,this.childViews=[],this.rootView=this}getNodes(){return this.nodes||(this.nodes=this.createNodes()),this.nodes.map(t=>t.cloneNode(!0))}invalidate(){var t;return this.nodes=null,this.childViews=[],(t=this.parentView)===null||t===void 0?void 0:t.invalidate()}invalidateViewForObject(t){var e;return(e=this.findViewForObject(t))===null||e===void 0?void 0:e.invalidate()}findOrCreateCachedChildView(t,e,n){let r=this.getCachedViewForObject(e);return r?this.recordChildView(r):(r=this.createChildView(...arguments),this.cacheViewForObject(r,e)),r}createChildView(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};e instanceof fe&&(n.viewClass=t,t=ri);let r=new t(e,n);return this.recordChildView(r)}recordChildView(t){return t.parentView=this,t.rootView=this.rootView,this.childViews.push(t),t}getAllChildViews(){let t=[];return this.childViews.forEach(e=>{t.push(e),t=t.concat(e.getAllChildViews())}),t}findElement(){return this.findElementForObject(this.object)}findElementForObject(t){let e=t?.id;if(e)return this.rootView.element.querySelector("[data-trix-id='".concat(e,"']"))}findViewForObject(t){for(let e of this.getAllChildViews())if(e.object===t)return e}getViewCache(){return this.rootView!==this?this.rootView.getViewCache():this.isViewCachingEnabled()?(this.viewCache||(this.viewCache={}),this.viewCache):void 0}isViewCachingEnabled(){return this.shouldCacheViews!==!1}enableViewCaching(){this.shouldCacheViews=!0}disableViewCaching(){this.shouldCacheViews=!1}getCachedViewForObject(t){var e;return(e=this.getViewCache())===null||e===void 0?void 0:e[t.getCacheKey()]}cacheViewForObject(t,e){let n=this.getViewCache();n&&(n[e.getCacheKey()]=t)}garbageCollectCachedViews(){let t=this.getViewCache();if(t){let e=this.getAllChildViews().concat(this).map(n=>n.object.getCacheKey());for(let n in t)e.includes(n)||delete t[n]}}},ri=class extends dt{constructor(){super(...arguments),this.objectGroup=this.object,this.viewClass=this.options.viewClass,delete this.options.viewClass}getChildViews(){return this.childViews.length||Array.from(this.objectGroup.getObjects()).forEach(t=>{this.findOrCreateCachedChildView(this.viewClass,t,this.options)}),this.childViews}createNodes(){let t=this.createContainerElement();return this.getChildViews().forEach(e=>{Array.from(e.getNodes()).forEach(n=>{t.appendChild(n)})}),[t]}createContainerElement(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.objectGroup.getDepth();return this.getChildViews()[0].createContainerElement(t)}};var{entries:Ur,setPrototypeOf:rr,isFrozen:Po,getPrototypeOf:Mo,getOwnPropertyDescriptor:Bo}=Object,{freeze:U,seal:G,create:Vr}=Object,{apply:oi,construct:si}=typeof Reflect<"u"&&Reflect;U||(U=function(i){return i}),G||(G=function(i){return i}),oi||(oi=function(i,t,e){return i.apply(t,e)}),si||(si=function(i,t){return new i(...t)});var Ne=K(Array.prototype.forEach),or=K(Array.prototype.pop),oe=K(Array.prototype.push),_e=K(String.prototype.toLowerCase),Fn=K(String.prototype.toString),sr=K(String.prototype.match),se=K(String.prototype.replace),_o=K(String.prototype.indexOf),jo=K(String.prototype.trim),$=K(Object.prototype.hasOwnProperty),_=K(RegExp.prototype.test),ae=(ar=TypeError,function(){for(var i=arguments.length,t=new Array(i),e=0;e1?e-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:_e;rr&&rr(i,null);let n=t.length;for(;n--;){let r=t[n];if(typeof r=="string"){let o=e(r);o!==r&&(Po(t)||(t[n]=o),r=o)}i[r]=!0}return i}function Wo(i){for(let t=0;t/gm),qo=G(/\$\{[\w\W]*}/gm),Jo=G(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ko=G(/^aria-[\-\w]+$/),zr=G(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Go=G(/^(?:\w+script|data):/i),$o=G(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Hr=G(/^html$/i),Yo=G(/^[a-z][.\w]*(-[.\w]+)+$/i),dr=Object.freeze({__proto__:null,ARIA_ATTR:Ko,ATTR_WHITESPACE:$o,CUSTOM_ELEMENT:Yo,DATA_ATTR:Jo,DOCTYPE_NAME:Hr,ERB_EXPR:Ho,IS_ALLOWED_URI:zr,IS_SCRIPT_OR_DATA:Go,MUSTACHE_EXPR:zo,TMPLIT_EXPR:qo}),Xo=1,Zo=3,Qo=7,ts=8,es=9,ns=function(){return typeof window>"u"?null:window},Ve=function i(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ns(),e=a=>i(a);if(e.version="3.2.3",e.removed=[],!t||!t.document||t.document.nodeType!==es)return e.isSupported=!1,e;let{document:n}=t,r=n,o=r.currentScript,{DocumentFragment:s,HTMLTemplateElement:l,Node:c,Element:u,NodeFilter:d,NamedNodeMap:C=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:T,DOMParser:H,trustedTypes:Q}=t,M=u.prototype,mt=le(M,"cloneNode"),yt=le(M,"remove"),Zt=le(M,"nextSibling"),Qt=le(M,"childNodes"),F=le(M,"parentNode");if(typeof l=="function"){let a=n.createElement("template");a.content&&a.content.ownerDocument&&(n=a.content.ownerDocument)}let k,rt="",{implementation:xt,createNodeIterator:eo,createDocumentFragment:no,getElementsByTagName:io}=n,{importNode:ro}=r,q={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};e.isSupported=typeof Ur=="function"&&typeof F=="function"&&xt&&xt.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:un,ERB_EXPR:hn,TMPLIT_EXPR:dn,DATA_ATTR:oo,ARIA_ATTR:so,IS_SCRIPT_OR_DATA:ao,ATTR_WHITESPACE:Ei,CUSTOM_ELEMENT:lo}=dr,{IS_ALLOWED_URI:Si}=dr,N=null,ki=b({},[...lr,...Pn,...Mn,...Bn,...cr]),O=null,Ri=b({},[...ur,..._n,...hr,...Ie]),w=Object.seal(Vr(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),te=null,gn=null,Ti=!0,mn=!0,wi=!1,Li=!0,Pt=!1,pn=!0,Ct=!1,fn=!1,bn=!1,Mt=!1,Ee=!1,Se=!1,Di=!0,Ni=!1,vn=!0,ee=!1,Bt={},_t=null,Ii=b({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Oi=null,Fi=b({},["audio","video","img","source","image","track"]),An=null,Pi=b({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ke="http://www.w3.org/1998/Math/MathML",Re="http://www.w3.org/2000/svg",ot="http://www.w3.org/1999/xhtml",jt=ot,yn=!1,xn=null,co=b({},[ke,Re,ot],Fn),Te=b({},["mi","mo","mn","ms","mtext"]),we=b({},["annotation-xml"]),uo=b({},["title","style","font","a","script"]),ne=null,ho=["application/xhtml+xml","text/html"],I=null,Wt=null,go=n.createElement("form"),Mi=function(a){return a instanceof RegExp||a instanceof Function},Cn=function(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!Wt||Wt!==a){if(a&&typeof a=="object"||(a={}),a=St(a),ne=ho.indexOf(a.PARSER_MEDIA_TYPE)===-1?"text/html":a.PARSER_MEDIA_TYPE,I=ne==="application/xhtml+xml"?Fn:_e,N=$(a,"ALLOWED_TAGS")?b({},a.ALLOWED_TAGS,I):ki,O=$(a,"ALLOWED_ATTR")?b({},a.ALLOWED_ATTR,I):Ri,xn=$(a,"ALLOWED_NAMESPACES")?b({},a.ALLOWED_NAMESPACES,Fn):co,An=$(a,"ADD_URI_SAFE_ATTR")?b(St(Pi),a.ADD_URI_SAFE_ATTR,I):Pi,Oi=$(a,"ADD_DATA_URI_TAGS")?b(St(Fi),a.ADD_DATA_URI_TAGS,I):Fi,_t=$(a,"FORBID_CONTENTS")?b({},a.FORBID_CONTENTS,I):Ii,te=$(a,"FORBID_TAGS")?b({},a.FORBID_TAGS,I):{},gn=$(a,"FORBID_ATTR")?b({},a.FORBID_ATTR,I):{},Bt=!!$(a,"USE_PROFILES")&&a.USE_PROFILES,Ti=a.ALLOW_ARIA_ATTR!==!1,mn=a.ALLOW_DATA_ATTR!==!1,wi=a.ALLOW_UNKNOWN_PROTOCOLS||!1,Li=a.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Pt=a.SAFE_FOR_TEMPLATES||!1,pn=a.SAFE_FOR_XML!==!1,Ct=a.WHOLE_DOCUMENT||!1,Mt=a.RETURN_DOM||!1,Ee=a.RETURN_DOM_FRAGMENT||!1,Se=a.RETURN_TRUSTED_TYPE||!1,bn=a.FORCE_BODY||!1,Di=a.SANITIZE_DOM!==!1,Ni=a.SANITIZE_NAMED_PROPS||!1,vn=a.KEEP_CONTENT!==!1,ee=a.IN_PLACE||!1,Si=a.ALLOWED_URI_REGEXP||zr,jt=a.NAMESPACE||ot,Te=a.MATHML_TEXT_INTEGRATION_POINTS||Te,we=a.HTML_INTEGRATION_POINTS||we,w=a.CUSTOM_ELEMENT_HANDLING||{},a.CUSTOM_ELEMENT_HANDLING&&Mi(a.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(w.tagNameCheck=a.CUSTOM_ELEMENT_HANDLING.tagNameCheck),a.CUSTOM_ELEMENT_HANDLING&&Mi(a.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(w.attributeNameCheck=a.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),a.CUSTOM_ELEMENT_HANDLING&&typeof a.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(w.allowCustomizedBuiltInElements=a.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Pt&&(mn=!1),Ee&&(Mt=!0),Bt&&(N=b({},cr),O=[],Bt.html===!0&&(b(N,lr),b(O,ur)),Bt.svg===!0&&(b(N,Pn),b(O,_n),b(O,Ie)),Bt.svgFilters===!0&&(b(N,Mn),b(O,_n),b(O,Ie)),Bt.mathMl===!0&&(b(N,Bn),b(O,hr),b(O,Ie))),a.ADD_TAGS&&(N===ki&&(N=St(N)),b(N,a.ADD_TAGS,I)),a.ADD_ATTR&&(O===Ri&&(O=St(O)),b(O,a.ADD_ATTR,I)),a.ADD_URI_SAFE_ATTR&&b(An,a.ADD_URI_SAFE_ATTR,I),a.FORBID_CONTENTS&&(_t===Ii&&(_t=St(_t)),b(_t,a.FORBID_CONTENTS,I)),vn&&(N["#text"]=!0),Ct&&b(N,["html","head","body"]),N.table&&(b(N,["tbody"]),delete te.tbody),a.TRUSTED_TYPES_POLICY){if(typeof a.TRUSTED_TYPES_POLICY.createHTML!="function")throw ae('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof a.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw ae('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');k=a.TRUSTED_TYPES_POLICY,rt=k.createHTML("")}else k===void 0&&(k=function(g,h){if(typeof g!="object"||typeof g.createPolicy!="function")return null;let v=null,A="data-tt-policy-suffix";h&&h.hasAttribute(A)&&(v=h.getAttribute(A));let f="dompurify"+(v?"#"+v:"");try{return g.createPolicy(f,{createHTML:D=>D,createScriptURL:D=>D})}catch{return console.warn("TrustedTypes policy "+f+" could not be created."),null}}(Q,o)),k!==null&&typeof rt=="string"&&(rt=k.createHTML(""));U&&U(a),Wt=a}},Bi=b({},[...Pn,...Mn,...Uo]),_i=b({},[...Bn,...Vo]),tt=function(a){oe(e.removed,{element:a});try{F(a).removeChild(a)}catch{yt(a)}},Le=function(a,g){try{oe(e.removed,{attribute:g.getAttributeNode(a),from:g})}catch{oe(e.removed,{attribute:null,from:g})}if(g.removeAttribute(a),a==="is")if(Mt||Ee)try{tt(g)}catch{}else try{g.setAttribute(a,"")}catch{}},ji=function(a){let g=null,h=null;if(bn)a=""+a;else{let f=sr(a,/^[\r\n\t ]+/);h=f&&f[0]}ne==="application/xhtml+xml"&&jt===ot&&(a=''+a+"");let v=k?k.createHTML(a):a;if(jt===ot)try{g=new H().parseFromString(v,ne)}catch{}if(!g||!g.documentElement){g=xt.createDocument(jt,"template",null);try{g.documentElement.innerHTML=yn?rt:v}catch{}}let A=g.body||g.documentElement;return a&&h&&A.insertBefore(n.createTextNode(h),A.childNodes[0]||null),jt===ot?io.call(g,Ct?"html":"body")[0]:Ct?g.documentElement:A},Wi=function(a){return eo.call(a.ownerDocument||a,a,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},En=function(a){return a instanceof T&&(typeof a.nodeName!="string"||typeof a.textContent!="string"||typeof a.removeChild!="function"||!(a.attributes instanceof C)||typeof a.removeAttribute!="function"||typeof a.setAttribute!="function"||typeof a.namespaceURI!="string"||typeof a.insertBefore!="function"||typeof a.hasChildNodes!="function")},Ui=function(a){return typeof c=="function"&&a instanceof c};function st(a,g,h){Ne(a,v=>{v.call(e,g,h,Wt)})}let Vi=function(a){let g=null;if(st(q.beforeSanitizeElements,a,null),En(a))return tt(a),!0;let h=I(a.nodeName);if(st(q.uponSanitizeElement,a,{tagName:h,allowedTags:N}),a.hasChildNodes()&&!Ui(a.firstElementChild)&&_(/<[/\w]/g,a.innerHTML)&&_(/<[/\w]/g,a.textContent)||a.nodeType===Qo||pn&&a.nodeType===ts&&_(/<[/\w]/g,a.data))return tt(a),!0;if(!N[h]||te[h]){if(!te[h]&&Hi(h)&&(w.tagNameCheck instanceof RegExp&&_(w.tagNameCheck,h)||w.tagNameCheck instanceof Function&&w.tagNameCheck(h)))return!1;if(vn&&!_t[h]){let v=F(a)||a.parentNode,A=Qt(a)||a.childNodes;if(A&&v)for(let f=A.length-1;f>=0;--f){let D=mt(A[f],!0);D.__removalCount=(a.__removalCount||0)+1,v.insertBefore(D,Zt(a))}}return tt(a),!0}return a instanceof u&&!function(v){let A=F(v);A&&A.tagName||(A={namespaceURI:jt,tagName:"template"});let f=_e(v.tagName),D=_e(A.tagName);return!!xn[v.namespaceURI]&&(v.namespaceURI===Re?A.namespaceURI===ot?f==="svg":A.namespaceURI===ke?f==="svg"&&(D==="annotation-xml"||Te[D]):!!Bi[f]:v.namespaceURI===ke?A.namespaceURI===ot?f==="math":A.namespaceURI===Re?f==="math"&&we[D]:!!_i[f]:v.namespaceURI===ot?!(A.namespaceURI===Re&&!we[D])&&!(A.namespaceURI===ke&&!Te[D])&&!_i[f]&&(uo[f]||!Bi[f]):!(ne!=="application/xhtml+xml"||!xn[v.namespaceURI]))}(a)?(tt(a),!0):h!=="noscript"&&h!=="noembed"&&h!=="noframes"||!_(/<\/no(script|embed|frames)/i,a.innerHTML)?(Pt&&a.nodeType===Zo&&(g=a.textContent,Ne([un,hn,dn],v=>{g=se(g,v," ")}),a.textContent!==g&&(oe(e.removed,{element:a.cloneNode()}),a.textContent=g)),st(q.afterSanitizeElements,a,null),!1):(tt(a),!0)},zi=function(a,g,h){if(Di&&(g==="id"||g==="name")&&(h in n||h in go))return!1;if(!(mn&&!gn[g]&&_(oo,g))){if(!(Ti&&_(so,g))){if(!O[g]||gn[g]){if(!(Hi(a)&&(w.tagNameCheck instanceof RegExp&&_(w.tagNameCheck,a)||w.tagNameCheck instanceof Function&&w.tagNameCheck(a))&&(w.attributeNameCheck instanceof RegExp&&_(w.attributeNameCheck,g)||w.attributeNameCheck instanceof Function&&w.attributeNameCheck(g))||g==="is"&&w.allowCustomizedBuiltInElements&&(w.tagNameCheck instanceof RegExp&&_(w.tagNameCheck,h)||w.tagNameCheck instanceof Function&&w.tagNameCheck(h))))return!1}else if(!An[g]){if(!_(Si,se(h,Ei,""))){if((g!=="src"&&g!=="xlink:href"&&g!=="href"||a==="script"||_o(h,"data:")!==0||!Oi[a])&&!(wi&&!_(ao,se(h,Ei,"")))){if(h)return!1}}}}}return!0},Hi=function(a){return a!=="annotation-xml"&&sr(a,lo)},qi=function(a){st(q.beforeSanitizeAttributes,a,null);let{attributes:g}=a;if(!g||En(a))return;let h={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:O,forceKeepAttr:void 0},v=g.length;for(;v--;){let A=g[v],{name:f,namespaceURI:D,value:at}=A,et=I(f),B=f==="value"?at:jo(at);if(h.attrName=et,h.attrValue=B,h.keepAttr=!0,h.forceKeepAttr=void 0,st(q.uponSanitizeAttribute,a,h),B=h.attrValue,!Ni||et!=="id"&&et!=="name"||(Le(f,a),B="user-content-"+B),pn&&_(/((--!?|])>)|<\/(style|title)/i,B)){Le(f,a);continue}if(h.forceKeepAttr||(Le(f,a),!h.keepAttr))continue;if(!Li&&_(/\/>/i,B)){Le(f,a);continue}Pt&&Ne([un,hn,dn],Ki=>{B=se(B,Ki," ")});let Ji=I(a.nodeName);if(zi(Ji,et,B)){if(k&&typeof Q=="object"&&typeof Q.getAttributeType=="function"&&!D)switch(Q.getAttributeType(Ji,et)){case"TrustedHTML":B=k.createHTML(B);break;case"TrustedScriptURL":B=k.createScriptURL(B)}try{D?a.setAttributeNS(D,f,B):a.setAttribute(f,B),En(a)?tt(a):or(e.removed)}catch{}}}st(q.afterSanitizeAttributes,a,null)},mo=function a(g){let h=null,v=Wi(g);for(st(q.beforeSanitizeShadowDOM,g,null);h=v.nextNode();)st(q.uponSanitizeShadowNode,h,null),Vi(h),qi(h),h.content instanceof s&&a(h.content);st(q.afterSanitizeShadowDOM,g,null)};return e.sanitize=function(a){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},h=null,v=null,A=null,f=null;if(yn=!a,yn&&(a=""),typeof a!="string"&&!Ui(a)){if(typeof a.toString!="function")throw ae("toString is not a function");if(typeof(a=a.toString())!="string")throw ae("dirty is not a string, aborting")}if(!e.isSupported)return a;if(fn||Cn(g),e.removed=[],typeof a=="string"&&(ee=!1),ee){if(a.nodeName){let et=I(a.nodeName);if(!N[et]||te[et])throw ae("root node is forbidden and cannot be sanitized in-place")}}else if(a instanceof c)h=ji(""),v=h.ownerDocument.importNode(a,!0),v.nodeType===Xo&&v.nodeName==="BODY"||v.nodeName==="HTML"?h=v:h.appendChild(v);else{if(!Mt&&!Pt&&!Ct&&a.indexOf("<")===-1)return k&&Se?k.createHTML(a):a;if(h=ji(a),!h)return Mt?null:Se?rt:""}h&&bn&&tt(h.firstChild);let D=Wi(ee?a:h);for(;A=D.nextNode();)Vi(A),qi(A),A.content instanceof s&&mo(A.content);if(ee)return a;if(Mt){if(Ee)for(f=no.call(h.ownerDocument);h.firstChild;)f.appendChild(h.firstChild);else f=h;return(O.shadowroot||O.shadowrootmode)&&(f=ro.call(r,f,!0)),f}let at=Ct?h.outerHTML:h.innerHTML;return Ct&&N["!doctype"]&&h.ownerDocument&&h.ownerDocument.doctype&&h.ownerDocument.doctype.name&&_(Hr,h.ownerDocument.doctype.name)&&(at=" +`+at),Pt&&Ne([un,hn,dn],et=>{at=se(at,et," ")}),k&&Se?k.createHTML(at):at},e.setConfig=function(){Cn(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),fn=!0},e.clearConfig=function(){Wt=null,fn=!1},e.isValidAttribute=function(a,g,h){Wt||Cn({});let v=I(a),A=I(g);return zi(v,A,h)},e.addHook=function(a,g){typeof g=="function"&&oe(q[a],g)},e.removeHook=function(a){return or(q[a])},e.removeHooks=function(a){q[a]=[]},e.removeAllHooks=function(){q={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},e}();Ve.addHook("uponSanitizeAttribute",function(i,t){/^data-trix-/.test(t.attrName)&&(t.forceKeepAttr=!0)});var is="style href src width height language class".split(" "),rs="javascript:".split(" "),os="script iframe form noscript".split(" "),qt=class extends R{static setHTML(t,e){let n=new this(e).sanitize(),r=n.getHTML?n.getHTML():n.outerHTML;t.innerHTML=r}static sanitize(t,e){let n=new this(t,e);return n.sanitize(),n}constructor(t){let{allowedAttributes:e,forbiddenProtocols:n,forbiddenElements:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.allowedAttributes=e||is,this.forbiddenProtocols=n||rs,this.forbiddenElements=r||os,this.body=ss(t)}sanitize(){return this.sanitizeElements(),this.normalizeListElementNesting(),Ve.setConfig(Lr),this.body=Ve.sanitize(this.body),this.body}getHTML(){return this.body.innerHTML}getBody(){return this.body}sanitizeElements(){let t=je(this.body),e=[];for(;t.nextNode();){let n=t.currentNode;switch(n.nodeType){case Node.ELEMENT_NODE:this.elementIsRemovable(n)?e.push(n):this.sanitizeElement(n);break;case Node.COMMENT_NODE:e.push(n)}}return e.forEach(n=>At(n)),this.body}sanitizeElement(t){return t.hasAttribute("href")&&this.forbiddenProtocols.includes(t.protocol)&&t.removeAttribute("href"),Array.from(t.attributes).forEach(e=>{let{name:n}=e;this.allowedAttributes.includes(n)||n.indexOf("data-trix")===0||t.removeAttribute(n)}),t}normalizeListElementNesting(){return Array.from(this.body.querySelectorAll("ul,ol")).forEach(t=>{let e=t.previousElementSibling;e&&j(e)==="li"&&e.appendChild(t)}),this.body}elementIsRemovable(t){if(t?.nodeType===Node.ELEMENT_NODE)return this.elementIsForbidden(t)||this.elementIsntSerializable(t)}elementIsForbidden(t){return this.forbiddenElements.includes(j(t))}elementIsntSerializable(t){return t.getAttribute("data-trix-serialize")==="false"&&!Tt(t)}},ss=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";i=i.replace(/<\/html[^>]*>[^]*$/i,"");let t=document.implementation.createHTMLDocument("");return t.documentElement.innerHTML=i,Array.from(t.head.querySelectorAll("style")).forEach(e=>{t.body.appendChild(e)}),t.body},{css:pt}=Ce,be=class extends dt{constructor(){super(...arguments),this.attachment=this.object,this.attachment.uploadProgressDelegate=this,this.attachmentPiece=this.options.piece}createContentNodes(){return[]}createNodes(){let t,e=t=p({tagName:"figure",className:this.getClassName(),data:this.getData(),editable:!1}),n=this.getHref();return n&&(t=p({tagName:"a",editable:!1,attributes:{href:n,tabindex:-1}}),e.appendChild(t)),this.attachment.hasContent()?qt.setHTML(t,this.attachment.getContent()):this.createContentNodes().forEach(r=>{t.appendChild(r)}),t.appendChild(this.createCaptionElement()),this.attachment.isPending()&&(this.progressElement=p({tagName:"progress",attributes:{class:pt.attachmentProgress,value:this.attachment.getUploadProgress(),max:100},data:{trixMutable:!0,trixStoreKey:["progressElement",this.attachment.id].join("/")}}),e.appendChild(this.progressElement)),[gr("left"),e,gr("right")]}createCaptionElement(){let t=p({tagName:"figcaption",className:pt.attachmentCaption}),e=this.attachmentPiece.getCaption();if(e)t.classList.add("".concat(pt.attachmentCaption,"--edited")),t.textContent=e;else{let n,r,o=this.getCaptionConfig();if(o.name&&(n=this.attachment.getFilename()),o.size&&(r=this.attachment.getFormattedFilesize()),n){let s=p({tagName:"span",className:pt.attachmentName,textContent:n});t.appendChild(s)}if(r){n&&t.appendChild(document.createTextNode(" "));let s=p({tagName:"span",className:pt.attachmentSize,textContent:r});t.appendChild(s)}}return t}getClassName(){let t=[pt.attachment,"".concat(pt.attachment,"--").concat(this.attachment.getType())],e=this.attachment.getExtension();return e&&t.push("".concat(pt.attachment,"--").concat(e)),t.join(" ")}getData(){let t={trixAttachment:JSON.stringify(this.attachment),trixContentType:this.attachment.getContentType(),trixId:this.attachment.id},{attributes:e}=this.attachmentPiece;return e.isEmpty()||(t.trixAttributes=JSON.stringify(e)),this.attachment.isPending()&&(t.trixSerialize=!1),t}getHref(){if(!as(this.attachment.getContent(),"a"))return this.attachment.getHref()}getCaptionConfig(){var t;let e=this.attachment.getType(),n=_r((t=mi[e])===null||t===void 0?void 0:t.caption);return e==="file"&&(n.name=!0),n}findProgressElement(){var t;return(t=this.findElement())===null||t===void 0?void 0:t.querySelector("progress")}attachmentDidChangeUploadProgress(){let t=this.attachment.getUploadProgress(),e=this.findProgressElement();e&&(e.value=t)}},gr=i=>p({tagName:"span",textContent:ln,data:{trixCursorTarget:i,trixSerialize:!1}}),as=function(i,t){let e=p("div");return qt.setHTML(e,i||""),e.querySelector(t)},ze=class extends be{constructor(){super(...arguments),this.attachment.previewDelegate=this}createContentNodes(){return this.image=p({tagName:"img",attributes:{src:""},data:{trixMutable:!0}}),this.refresh(this.image),[this.image]}createCaptionElement(){let t=super.createCaptionElement(...arguments);return t.textContent||t.setAttribute("data-trix-placeholder",m.captionPlaceholder),t}refresh(t){var e;if(t||(t=(e=this.findElement())===null||e===void 0?void 0:e.querySelector("img")),t)return this.updateAttributesForImage(t)}updateAttributesForImage(t){let e=this.attachment.getURL(),n=this.attachment.getPreviewURL();if(t.src=n||e,n===e)t.removeAttribute("data-trix-serialized-attributes");else{let l=JSON.stringify({src:e});t.setAttribute("data-trix-serialized-attributes",l)}let r=this.attachment.getWidth(),o=this.attachment.getHeight();r!=null&&(t.width=r),o!=null&&(t.height=o);let s=["imageElement",this.attachment.id,t.src,t.width,t.height].join("/");t.dataset.trixStoreKey=s}attachmentDidChangeAttributes(){return this.refresh(this.image),this.refresh()}},He=class extends dt{constructor(){super(...arguments),this.piece=this.object,this.attributes=this.piece.getAttributes(),this.textConfig=this.options.textConfig,this.context=this.options.context,this.piece.attachment?this.attachment=this.piece.attachment:this.string=this.piece.toString()}createNodes(){let t=this.attachment?this.createAttachmentNodes():this.createStringNodes(),e=this.createElement();if(e){let n=function(r){for(;(o=r)!==null&&o!==void 0&&o.firstElementChild;){var o;r=r.firstElementChild}return r}(e);Array.from(t).forEach(r=>{n.appendChild(r)}),t=[e]}return t}createAttachmentNodes(){let t=this.attachment.isPreviewable()?ze:be;return this.createChildView(t,this.piece.attachment,{piece:this.piece}).getNodes()}createStringNodes(){var t;if((t=this.textConfig)!==null&&t!==void 0&&t.plaintext)return[document.createTextNode(this.string)];{let e=[],n=this.string.split(` +`);for(let r=0;r0){let s=p("br");e.push(s)}if(o.length){let s=document.createTextNode(this.preserveSpaces(o));e.push(s)}}return e}}createElement(){let t,e,n,r={};for(e in this.attributes){n=this.attributes[e];let s=ti(e);if(s){if(s.tagName){var o;let l=p(s.tagName);o?(o.appendChild(l),o=l):t=o=l}if(s.styleProperty&&(r[s.styleProperty]=n),s.style)for(e in s.style)n=s.style[e],r[e]=n}}if(Object.keys(r).length)for(e in t||(t=p("span")),r)n=r[e],t.style[e]=n;return t}createContainerElement(){for(let t in this.attributes){let e=this.attributes[t],n=ti(t);if(n&&n.groupTagName){let r={};return r[t]=e,p(n.groupTagName,r)}}}preserveSpaces(t){return this.context.isLast&&(t=t.replace(/\ $/,ft)),t=t.replace(/(\S)\ {3}(\S)/g,"$1 ".concat(ft," $2")).replace(/\ {2}/g,"".concat(ft," ")).replace(/\ {2}/g," ".concat(ft)),(this.context.isFirst||this.context.followsWhitespace)&&(t=t.replace(/^\ /,ft)),t}},qe=class extends dt{constructor(){super(...arguments),this.text=this.object,this.textConfig=this.options.textConfig}createNodes(){let t=[],e=fe.groupObjects(this.getPieces()),n=e.length-1;for(let o=0;o!t.hasAttribute("blockBreak"))}},ls=i=>/\s$/.test(i?.toString()),{css:mr}=Ce,Je=class extends dt{constructor(){super(...arguments),this.block=this.object,this.attributes=this.block.getAttributes()}createNodes(){let t=[document.createComment("block")];if(this.block.isEmpty())t.push(p("br"));else{var e;let n=(e=L(this.block.getLastAttribute()))===null||e===void 0?void 0:e.text,r=this.findOrCreateCachedChildView(qe,this.block.text,{textConfig:n});t.push(...Array.from(r.getNodes()||[])),this.shouldAddExtraNewlineElement()&&t.push(p("br"))}if(this.attributes.length)return t;{let n,{tagName:r}=W.default;this.block.isRTL()&&(n={dir:"rtl"});let o=p({tagName:r,attributes:n});return t.forEach(s=>o.appendChild(s)),[o]}}createContainerElement(t){let e={},n,r=this.attributes[t],{tagName:o,htmlAttributes:s=[]}=L(r);if(t===0&&this.block.isRTL()&&Object.assign(e,{dir:"rtl"}),r==="attachmentGallery"){let l=this.block.getBlockBreakPosition();n="".concat(mr.attachmentGallery," ").concat(mr.attachmentGallery,"--").concat(l)}return Object.entries(this.block.htmlAttributes).forEach(l=>{let[c,u]=l;s.includes(c)&&(e[c]=u)}),p({tagName:o,className:n,attributes:e})}shouldAddExtraNewlineElement(){return/\n\n$/.test(this.block.toString())}},Jt=class extends dt{static render(t){let e=p("div"),n=new this(t,{element:e});return n.render(),n.sync(),e}constructor(){super(...arguments),this.element=this.options.element,this.elementStore=new ii,this.setDocument(this.object)}setDocument(t){t.isEqualTo(this.document)||(this.document=this.object=t)}render(){if(this.childViews=[],this.shadowElement=p("div"),!this.document.isEmpty()){let t=fe.groupObjects(this.document.getBlocks(),{asTree:!0});Array.from(t).forEach(e=>{let n=this.findOrCreateCachedChildView(Je,e);Array.from(n.getNodes()).map(r=>this.shadowElement.appendChild(r))})}}isSynced(){return cs(this.shadowElement,this.element)}sync(){let t=this.createDocumentFragmentForSync();for(;this.element.lastChild;)this.element.removeChild(this.element.lastChild);return this.element.appendChild(t),this.didSync()}didSync(){return this.elementStore.reset(pr(this.element)),Ai(()=>this.garbageCollectCachedViews())}createDocumentFragmentForSync(){let t=document.createDocumentFragment();return Array.from(this.shadowElement.childNodes).forEach(e=>{t.appendChild(e.cloneNode(!0))}),Array.from(pr(t)).forEach(e=>{let n=this.elementStore.remove(e);n&&e.parentNode.replaceChild(n,e)}),t}},pr=i=>i.querySelectorAll("[data-trix-store-key]"),cs=(i,t)=>fr(i.innerHTML)===fr(t.innerHTML),fr=i=>i.replace(/ /g," ");function Oe(i){var t,e;function n(o,s){try{var l=i[o](s),c=l.value,u=c instanceof us;Promise.resolve(u?c.v:c).then(function(d){if(u){var C=o==="return"?"return":"next";if(!c.k||d.done)return n(C,d);d=i[C](d).value}r(l.done?"return":"normal",d)},function(d){n("throw",d)})}catch(d){r("throw",d)}}function r(o,s){switch(o){case"return":t.resolve({value:s,done:!0});break;case"throw":t.reject(s);break;default:t.resolve({value:s,done:!1})}(t=t.next)?n(t.key,t.arg):e=null}this._invoke=function(o,s){return new Promise(function(l,c){var u={key:o,arg:s,resolve:l,reject:c,next:null};e?e=e.next=u:(t=e=u,n(o,s))})},typeof i.return!="function"&&(this.return=void 0)}function us(i,t){this.v=i,this.k=t}function z(i,t,e){return(t=hs(t))in i?Object.defineProperty(i,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[t]=e,i}function hs(i){var t=function(e,n){if(typeof e!="object"||e===null)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var o=r.call(e,n||"default");if(typeof o!="object")return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return(n==="string"?String:Number)(e)}(i,"string");return typeof t=="symbol"?t:String(t)}Oe.prototype[typeof Symbol=="function"&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},Oe.prototype.next=function(i){return this._invoke("next",i)},Oe.prototype.throw=function(i){return this._invoke("throw",i)},Oe.prototype.return=function(i){return this._invoke("return",i)};function x(i,t){return ds(i,qr(i,t,"get"))}function Ci(i,t,e){return gs(i,qr(i,t,"set"),e),e}function qr(i,t,e){if(!t.has(i))throw new TypeError("attempted to "+e+" private field on non-instance");return t.get(i)}function ds(i,t){return t.get?t.get.call(i):t.value}function gs(i,t,e){if(t.set)t.set.call(i,e);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=e}}function Fe(i,t,e){if(!t.has(i))throw new TypeError("attempted to get private field on non-instance");return e}function Jr(i,t){if(t.has(i))throw new TypeError("Cannot initialize the same private elements twice on an object")}function pe(i,t,e){Jr(i,t),t.set(i,e)}var gt=class extends ht{static registerType(t,e){e.type=t,this.types[t]=e}static fromJSON(t){let e=this.types[t.type];if(e)return e.fromJSON(t)}constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.attributes=X.box(e)}copyWithAttributes(t){return new this.constructor(this.getValue(),t)}copyWithAdditionalAttributes(t){return this.copyWithAttributes(this.attributes.merge(t))}copyWithoutAttribute(t){return this.copyWithAttributes(this.attributes.remove(t))}copy(){return this.copyWithAttributes(this.attributes)}getAttribute(t){return this.attributes.get(t)}getAttributesHash(){return this.attributes}getAttributes(){return this.attributes.toObject()}hasAttribute(t){return this.attributes.has(t)}hasSameStringValueAsPiece(t){return t&&this.toString()===t.toString()}hasSameAttributesAsPiece(t){return t&&(this.attributes===t.attributes||this.attributes.isEqualTo(t.attributes))}isBlockBreak(){return!1}isEqualTo(t){return super.isEqualTo(...arguments)||this.hasSameConstructorAs(t)&&this.hasSameStringValueAsPiece(t)&&this.hasSameAttributesAsPiece(t)}isEmpty(){return this.length===0}isSerializable(){return!0}toJSON(){return{type:this.constructor.type,attributes:this.getAttributes()}}contentsForInspection(){return{type:this.constructor.type,attributes:this.attributes.inspect()}}canBeGrouped(){return this.hasAttribute("href")}canBeGroupedWith(t){return this.getAttribute("href")===t.getAttribute("href")}getLength(){return this.length}canBeConsolidatedWith(t){return!1}};z(gt,"types",{});var Ke=class extends Ht{constructor(t){super(...arguments),this.url=t}perform(t){let e=new Image;e.onload=()=>(e.width=this.width=e.naturalWidth,e.height=this.height=e.naturalHeight,t(!0,e)),e.onerror=()=>t(!1),e.src=this.url}},Kt=class i extends ht{static attachmentForFile(t){let e=new this(this.attributesForFile(t));return e.setFile(t),e}static attributesForFile(t){return new X({filename:t.name,filesize:t.size,contentType:t.type})}static fromJSON(t){return new this(t)}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(t),this.releaseFile=this.releaseFile.bind(this),this.attributes=X.box(t),this.didChangeAttributes()}getAttribute(t){return this.attributes.get(t)}hasAttribute(t){return this.attributes.has(t)}getAttributes(){return this.attributes.toObject()}setAttributes(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=this.attributes.merge(t);var n,r,o,s;if(!this.attributes.isEqualTo(e))return this.attributes=e,this.didChangeAttributes(),(n=this.previewDelegate)===null||n===void 0||(r=n.attachmentDidChangeAttributes)===null||r===void 0||r.call(n,this),(o=this.delegate)===null||o===void 0||(s=o.attachmentDidChangeAttributes)===null||s===void 0?void 0:s.call(o,this)}didChangeAttributes(){if(this.isPreviewable())return this.preloadURL()}isPending(){return this.file!=null&&!(this.getURL()||this.getHref())}isPreviewable(){return this.attributes.has("previewable")?this.attributes.get("previewable"):i.previewablePattern.test(this.getContentType())}getType(){return this.hasContent()?"content":this.isPreviewable()?"preview":"file"}getURL(){return this.attributes.get("url")}getHref(){return this.attributes.get("href")}getFilename(){return this.attributes.get("filename")||""}getFilesize(){return this.attributes.get("filesize")}getFormattedFilesize(){let t=this.attributes.get("filesize");return typeof t=="number"?Dr.formatter(t):""}getExtension(){var t;return(t=this.getFilename().match(/\.(\w+)$/))===null||t===void 0?void 0:t[1].toLowerCase()}getContentType(){return this.attributes.get("contentType")}hasContent(){return this.attributes.has("content")}getContent(){return this.attributes.get("content")}getWidth(){return this.attributes.get("width")}getHeight(){return this.attributes.get("height")}getFile(){return this.file}setFile(t){if(this.file=t,this.isPreviewable())return this.preloadFile()}releaseFile(){this.releasePreloadedFile(),this.file=null}getUploadProgress(){return this.uploadProgress!=null?this.uploadProgress:0}setUploadProgress(t){var e,n;if(this.uploadProgress!==t)return this.uploadProgress=t,(e=this.uploadProgressDelegate)===null||e===void 0||(n=e.attachmentDidChangeUploadProgress)===null||n===void 0?void 0:n.call(e,this)}toJSON(){return this.getAttributes()}getCacheKey(){return[super.getCacheKey(...arguments),this.attributes.getCacheKey(),this.getPreviewURL()].join("/")}getPreviewURL(){return this.previewURL||this.preloadingURL}setPreviewURL(t){var e,n,r,o;if(t!==this.getPreviewURL())return this.previewURL=t,(e=this.previewDelegate)===null||e===void 0||(n=e.attachmentDidChangeAttributes)===null||n===void 0||n.call(e,this),(r=this.delegate)===null||r===void 0||(o=r.attachmentDidChangePreviewURL)===null||o===void 0?void 0:o.call(r,this)}preloadURL(){return this.preload(this.getURL(),this.releaseFile)}preloadFile(){if(this.file)return this.fileObjectURL=URL.createObjectURL(this.file),this.preload(this.fileObjectURL)}releasePreloadedFile(){this.fileObjectURL&&(URL.revokeObjectURL(this.fileObjectURL),this.fileObjectURL=null)}preload(t,e){if(t&&t!==this.getPreviewURL())return this.preloadingURL=t,new Ke(t).then(n=>{let{width:r,height:o}=n;return this.getWidth()&&this.getHeight()||this.setAttributes({width:r,height:o}),this.preloadingURL=null,this.setPreviewURL(t),e?.()}).catch(()=>(this.preloadingURL=null,e?.()))}};z(Kt,"previewablePattern",/^image(\/(gif|png|webp|jpe?g)|$)/);var Gt=class i extends gt{static fromJSON(t){return new this(Kt.fromJSON(t.attachment),t.attributes)}constructor(t){super(...arguments),this.attachment=t,this.length=1,this.ensureAttachmentExclusivelyHasAttribute("href"),this.attachment.hasContent()||this.removeProhibitedAttributes()}ensureAttachmentExclusivelyHasAttribute(t){this.hasAttribute(t)&&(this.attachment.hasAttribute(t)||this.attachment.setAttributes(this.attributes.slice([t])),this.attributes=this.attributes.remove(t))}removeProhibitedAttributes(){let t=this.attributes.slice(i.permittedAttributes);t.isEqualTo(this.attributes)||(this.attributes=t)}getValue(){return this.attachment}isSerializable(){return!this.attachment.isPending()}getCaption(){return this.attributes.get("caption")||""}isEqualTo(t){var e;return super.isEqualTo(t)&&this.attachment.id===(t==null||(e=t.attachment)===null||e===void 0?void 0:e.id)}toString(){return"\uFFFC"}toJSON(){let t=super.toJSON(...arguments);return t.attachment=this.attachment,t}getCacheKey(){return[super.getCacheKey(...arguments),this.attachment.getCacheKey()].join("/")}toConsole(){return JSON.stringify(this.toString())}};z(Gt,"permittedAttributes",["caption","presentation"]),gt.registerType("attachment",Gt);var ve=class extends gt{static fromJSON(t){return new this(t.string,t.attributes)}constructor(t){super(...arguments),this.string=(e=>e.replace(/\r\n?/g,` +`))(t),this.length=this.string.length}getValue(){return this.string}toString(){return this.string.toString()}isBlockBreak(){return this.toString()===` +`&&this.getAttribute("blockBreak")===!0}toJSON(){let t=super.toJSON(...arguments);return t.string=this.string,t}canBeConsolidatedWith(t){return t&&this.hasSameConstructorAs(t)&&this.hasSameAttributesAsPiece(t)}consolidateWith(t){return new this.constructor(this.toString()+t.toString(),this.attributes)}splitAtOffset(t){let e,n;return t===0?(e=null,n=this):t===this.length?(e=this,n=null):(e=new this.constructor(this.string.slice(0,t),this.attributes),n=new this.constructor(this.string.slice(t),this.attributes)),[e,n]}toConsole(){let{string:t}=this;return t.length>15&&(t=t.slice(0,14)+"\u2026"),JSON.stringify(t.toString())}};gt.registerType("string",ve);var $t=class extends ht{static box(t){return t instanceof this?t:new this(t)}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),this.objects=t.slice(0),this.length=this.objects.length}indexOf(t){return this.objects.indexOf(t)}splice(){for(var t=arguments.length,e=new Array(t),n=0;nt(e,n))}insertObjectAtIndex(t,e){return this.splice(e,0,t)}insertSplittableListAtIndex(t,e){return this.splice(e,0,...t.objects)}insertSplittableListAtPosition(t,e){let[n,r]=this.splitObjectAtPosition(e);return new this.constructor(n).insertSplittableListAtIndex(t,r)}editObjectAtIndex(t,e){return this.replaceObjectAtIndex(e(this.objects[t]),t)}replaceObjectAtIndex(t,e){return this.splice(e,1,t)}removeObjectAtIndex(t){return this.splice(t,1)}getObjectAtIndex(t){return this.objects[t]}getSplittableListInRange(t){let[e,n,r]=this.splitObjectsAtRange(t);return new this.constructor(e.slice(n,r+1))}selectSplittableList(t){let e=this.objects.filter(n=>t(n));return new this.constructor(e)}removeObjectsInRange(t){let[e,n,r]=this.splitObjectsAtRange(t);return new this.constructor(e).splice(n,r-n+1)}transformObjectsInRange(t,e){let[n,r,o]=this.splitObjectsAtRange(t),s=n.map((l,c)=>r<=c&&c<=o?e(l):l);return new this.constructor(s)}splitObjectsAtRange(t){let e,[n,r,o]=this.splitObjectAtPosition(ps(t));return[n,e]=new this.constructor(n).splitObjectAtPosition(fs(t)+o),[n,r,e-1]}getObjectAtPosition(t){let{index:e}=this.findIndexAndOffsetAtPosition(t);return this.objects[e]}splitObjectAtPosition(t){let e,n,{index:r,offset:o}=this.findIndexAndOffsetAtPosition(t),s=this.objects.slice(0);if(r!=null)if(o===0)e=r,n=0;else{let l=this.getObjectAtIndex(r),[c,u]=l.splitAtOffset(o);s.splice(r,1,c,u),e=r+1,n=c.getLength()-o}else e=s.length,n=0;return[s,e,n]}consolidate(){let t=[],e=this.objects[0];return this.objects.slice(1).forEach(n=>{var r,o;(r=(o=e).canBeConsolidatedWith)!==null&&r!==void 0&&r.call(o,n)?e=e.consolidateWith(n):(t.push(e),e=n)}),e&&t.push(e),new this.constructor(t)}consolidateFromIndexToIndex(t,e){let n=this.objects.slice(0).slice(t,e+1),r=new this.constructor(n).consolidate().toArray();return this.splice(t,n.length,...r)}findIndexAndOffsetAtPosition(t){let e,n=0;for(e=0;ethis.endPosition+=t.getLength())),this.endPosition}toString(){return this.objects.join("")}toArray(){return this.objects.slice(0)}toJSON(){return this.toArray()}isEqualTo(t){return super.isEqualTo(...arguments)||ms(this.objects,t?.objects)}contentsForInspection(){return{objects:"[".concat(this.objects.map(t=>t.inspect()).join(", "),"]")}}},ms=function(i){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(i.length!==t.length)return!1;let e=!0;for(let n=0;ni[0],fs=i=>i[1],J=class extends ht{static textForAttachmentWithAttributes(t,e){return new this([new Gt(t,e)])}static textForStringWithAttributes(t,e){return new this([new ve(t,e)])}static fromJSON(t){return new this(Array.from(t).map(e=>gt.fromJSON(e)))}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments);let e=t.filter(n=>!n.isEmpty());this.pieceList=new $t(e)}copy(){return this.copyWithPieceList(this.pieceList)}copyWithPieceList(t){return new this.constructor(t.consolidate().toArray())}copyUsingObjectMap(t){let e=this.getPieces().map(n=>t.find(n)||n);return new this.constructor(e)}appendText(t){return this.insertTextAtPosition(t,this.getLength())}insertTextAtPosition(t,e){return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t.pieceList,e))}removeTextAtRange(t){return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t))}replaceTextAtRange(t,e){return this.removeTextAtRange(e).insertTextAtPosition(t,e[0])}moveTextFromRangeToPosition(t,e){if(t[0]<=e&&e<=t[1])return;let n=this.getTextAtRange(t),r=n.getLength();return t[0]n.copyWithAdditionalAttributes(t)))}removeAttributeAtRange(t,e){return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e,n=>n.copyWithoutAttribute(t)))}setAttributesAtRange(t,e){return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e,n=>n.copyWithAttributes(t)))}getAttributesAtPosition(t){var e;return((e=this.pieceList.getObjectAtPosition(t))===null||e===void 0?void 0:e.getAttributes())||{}}getCommonAttributes(){let t=Array.from(this.pieceList.toArray()).map(e=>e.getAttributes());return X.fromCommonAttributesOfObjects(t).toObject()}getCommonAttributesAtRange(t){return this.getTextAtRange(t).getCommonAttributes()||{}}getExpandedRangeForAttributeAtOffset(t,e){let n,r=n=e,o=this.getLength();for(;r>0&&this.getCommonAttributesAtRange([r-1,n])[t];)r--;for(;n!!t.attachment)}getAttachments(){return this.getAttachmentPieces().map(t=>t.attachment)}getAttachmentAndPositionById(t){let e=0;for(let r of this.pieceList.toArray()){var n;if(((n=r.attachment)===null||n===void 0?void 0:n.id)===t)return{attachment:r.attachment,position:e};e+=r.length}return{attachment:null,position:null}}getAttachmentById(t){let{attachment:e}=this.getAttachmentAndPositionById(t);return e}getRangeOfAttachment(t){let e=this.getAttachmentAndPositionById(t.id),n=e.position;if(t=e.attachment)return[n,n+1]}updateAttributesForAttachment(t,e){let n=this.getRangeOfAttachment(e);return n?this.addAttributesAtRange(t,n):this}getLength(){return this.pieceList.getEndPosition()}isEmpty(){return this.getLength()===0}isEqualTo(t){var e;return super.isEqualTo(t)||(t==null||(e=t.pieceList)===null||e===void 0?void 0:e.isEqualTo(this.pieceList))}isBlockBreak(){return this.getLength()===1&&this.pieceList.getObjectAtIndex(0).isBlockBreak()}eachPiece(t){return this.pieceList.eachObject(t)}getPieces(){return this.pieceList.toArray()}getPieceAtPosition(t){return this.pieceList.getObjectAtPosition(t)}contentsForInspection(){return{pieceList:this.pieceList.inspect()}}toSerializableText(){let t=this.pieceList.selectSplittableList(e=>e.isSerializable());return this.copyWithPieceList(t)}toString(){return this.pieceList.toString()}toJSON(){return this.pieceList.toJSON()}toConsole(){return JSON.stringify(this.pieceList.toArray().map(t=>JSON.parse(t.toConsole())))}getDirection(){return Ro(this.toString())}isRTL(){return this.getDirection()==="rtl"}},bt=class i extends ht{static fromJSON(t){return new this(J.fromJSON(t.text),t.attributes,t.htmlAttributes)}constructor(t,e,n){super(...arguments),this.text=bs(t||new J),this.attributes=e||[],this.htmlAttributes=n||{}}isEmpty(){return this.text.isBlockBreak()}isEqualTo(t){return!!super.isEqualTo(t)||this.text.isEqualTo(t?.text)&&It(this.attributes,t?.attributes)&&Xt(this.htmlAttributes,t?.htmlAttributes)}copyWithText(t){return new i(t,this.attributes,this.htmlAttributes)}copyWithoutText(){return this.copyWithText(null)}copyWithAttributes(t){return new i(this.text,t,this.htmlAttributes)}copyWithoutAttributes(){return this.copyWithAttributes(null)}copyUsingObjectMap(t){let e=t.find(this.text);return e?this.copyWithText(e):this.copyWithText(this.text.copyUsingObjectMap(t))}addAttribute(t){let e=this.attributes.concat(br(t));return this.copyWithAttributes(e)}addHTMLAttribute(t,e){let n=Object.assign({},this.htmlAttributes,{[t]:e});return new i(this.text,this.attributes,n)}removeAttribute(t){let{listAttribute:e}=L(t),n=Ar(Ar(this.attributes,t),e);return this.copyWithAttributes(n)}removeLastAttribute(){return this.removeAttribute(this.getLastAttribute())}getLastAttribute(){return vr(this.attributes)}getAttributes(){return this.attributes.slice(0)}getAttributeLevel(){return this.attributes.length}getAttributeAtLevel(t){return this.attributes[t-1]}hasAttribute(t){return this.attributes.includes(t)}hasAttributes(){return this.getAttributeLevel()>0}getLastNestableAttribute(){return vr(this.getNestableAttributes())}getNestableAttributes(){return this.attributes.filter(t=>L(t).nestable)}getNestingLevel(){return this.getNestableAttributes().length}decreaseNestingLevel(){let t=this.getLastNestableAttribute();return t?this.removeAttribute(t):this}increaseNestingLevel(){let t=this.getLastNestableAttribute();if(t){let e=this.attributes.lastIndexOf(t),n=vi(this.attributes,e+1,0,...br(t));return this.copyWithAttributes(n)}return this}getListItemAttributes(){return this.attributes.filter(t=>L(t).listAttribute)}isListItem(){var t;return(t=L(this.getLastAttribute()))===null||t===void 0?void 0:t.listAttribute}isTerminalBlock(){var t;return(t=L(this.getLastAttribute()))===null||t===void 0?void 0:t.terminal}breaksOnReturn(){var t;return(t=L(this.getLastAttribute()))===null||t===void 0?void 0:t.breakOnReturn}findLineBreakInDirectionFromPosition(t,e){let n=this.toString(),r;switch(t){case"forward":r=n.indexOf(` +`,e);break;case"backward":r=n.slice(0,e).lastIndexOf(` +`)}if(r!==-1)return r}contentsForInspection(){return{text:this.text.inspect(),attributes:this.attributes}}toString(){return this.text.toString()}toJSON(){return{text:this.text,attributes:this.attributes,htmlAttributes:this.htmlAttributes}}getDirection(){return this.text.getDirection()}isRTL(){return this.text.isRTL()}getLength(){return this.text.getLength()}canBeConsolidatedWith(t){return!this.hasAttributes()&&!t.hasAttributes()&&this.getDirection()===t.getDirection()}consolidateWith(t){let e=J.textForStringWithAttributes(` +`),n=this.getTextWithoutBlockBreak().appendText(e);return this.copyWithText(n.appendText(t.text))}splitAtOffset(t){let e,n;return t===0?(e=null,n=this):t===this.getLength()?(e=this,n=null):(e=this.copyWithText(this.text.getTextAtRange([0,t])),n=this.copyWithText(this.text.getTextAtRange([t,this.getLength()]))),[e,n]}getBlockBreakPosition(){return this.text.getLength()-1}getTextWithoutBlockBreak(){return Kr(this.text)?this.text.getTextAtRange([0,this.getBlockBreakPosition()]):this.text.copy()}canBeGrouped(t){return this.attributes[t]}canBeGroupedWith(t,e){let n=t.getAttributes(),r=n[e],o=this.attributes[e];return o===r&&!(L(o).group===!1&&!(()=>{if(!De){De=[];for(let s in W){let{listAttribute:l}=W[s];l!=null&&De.push(l)}}return De})().includes(n[e+1]))&&(this.getDirection()===t.getDirection()||t.isEmpty())}},bs=function(i){return i=vs(i),i=ys(i)},vs=function(i){let t=!1,e=i.getPieces(),n=e.slice(0,e.length-1),r=e[e.length-1];return r?(n=n.map(o=>o.isBlockBreak()?(t=!0,xs(o)):o),t?new J([...n,r]):i):i},As=J.textForStringWithAttributes(` +`,{blockBreak:!0}),ys=function(i){return Kr(i)?i:i.appendText(As)},Kr=function(i){let t=i.getLength();return t===0?!1:i.getTextAtRange([t-1,t]).isBlockBreak()},xs=i=>i.copyWithoutAttribute("blockBreak"),br=function(i){let{listAttribute:t}=L(i);return t?[t,i]:[i]},vr=i=>i.slice(-1)[0],Ar=function(i,t){let e=i.lastIndexOf(t);return e===-1?i:vi(i,e,1)},V=class extends ht{static fromJSON(t){return new this(Array.from(t).map(e=>bt.fromJSON(e)))}static fromString(t,e){let n=J.textForStringWithAttributes(t,e);return new this([new bt(n)])}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),t.length===0&&(t=[new bt]),this.blockList=$t.box(t)}isEmpty(){let t=this.getBlockAtIndex(0);return this.blockList.length===1&&t.isEmpty()&&!t.hasAttributes()}copy(){let t=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}).consolidateBlocks?this.blockList.consolidate().toArray():this.blockList.toArray();return new this.constructor(t)}copyUsingObjectsFromDocument(t){let e=new ni(t.getObjects());return this.copyUsingObjectMap(e)}copyUsingObjectMap(t){let e=this.getBlocks().map(n=>t.find(n)||n.copyUsingObjectMap(t));return new this.constructor(e)}copyWithBaseBlockAttributes(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=this.getBlocks().map(n=>{let r=t.concat(n.getAttributes());return n.copyWithAttributes(r)});return new this.constructor(e)}replaceBlock(t,e){let n=this.blockList.indexOf(t);return n===-1?this:new this.constructor(this.blockList.replaceObjectAtIndex(e,n))}insertDocumentAtRange(t,e){let{blockList:n}=t;e=y(e);let[r]=e,{index:o,offset:s}=this.locationFromPosition(r),l=this,c=this.getBlockAtPosition(r);return ut(e)&&c.isEmpty()&&!c.hasAttributes()?l=new this.constructor(l.blockList.removeObjectAtIndex(o)):c.getBlockBreakPosition()===s&&r++,l=l.removeTextAtRange(e),new this.constructor(l.blockList.insertSplittableListAtPosition(n,r))}mergeDocumentAtRange(t,e){let n,r;e=y(e);let[o]=e,s=this.locationFromPosition(o),l=this.getBlockAtIndex(s.index).getAttributes(),c=t.getBaseBlockAttributes(),u=l.slice(-c.length);if(It(c,u)){let T=l.slice(0,-c.length);n=t.copyWithBaseBlockAttributes(T)}else n=t.copy({consolidateBlocks:!0}).copyWithBaseBlockAttributes(l);let d=n.getBlockCount(),C=n.getBlockAtIndex(0);if(It(l,C.getAttributes())){let T=C.getTextWithoutBlockBreak();if(r=this.insertTextAtRange(T,e),d>1){n=new this.constructor(n.getBlocks().slice(1));let H=o+T.getLength();r=r.insertDocumentAtRange(n,H)}}else r=this.insertDocumentAtRange(n,e);return r}insertTextAtRange(t,e){e=y(e);let[n]=e,{index:r,offset:o}=this.locationFromPosition(n),s=this.removeTextAtRange(e);return new this.constructor(s.blockList.editObjectAtIndex(r,l=>l.copyWithText(l.text.insertTextAtPosition(t,o))))}removeTextAtRange(t){let e;t=y(t);let[n,r]=t;if(ut(t))return this;let[o,s]=Array.from(this.locationRangeFromRange(t)),l=o.index,c=o.offset,u=this.getBlockAtIndex(l),d=s.index,C=s.offset,T=this.getBlockAtIndex(d);if(r-n==1&&u.getBlockBreakPosition()===c&&T.getBlockBreakPosition()!==C&&T.text.getStringAtPosition(C)===` +`)e=this.blockList.editObjectAtIndex(d,H=>H.copyWithText(H.text.removeTextAtRange([C,C+1])));else{let H,Q=u.text.getTextAtRange([0,c]),M=T.text.getTextAtRange([C,T.getLength()]),mt=Q.appendText(M);H=l!==d&&c===0&&u.getAttributeLevel()>=T.getAttributeLevel()?T.copyWithText(mt):u.copyWithText(mt);let yt=d+1-l;e=this.blockList.splice(l,yt,H)}return new this.constructor(e)}moveTextFromRangeToPosition(t,e){let n;t=y(t);let[r,o]=t;if(r<=e&&e<=o)return this;let s=this.getDocumentAtRange(t),l=this.removeTextAtRange(t),c=rr=r.editObjectAtIndex(l,function(){return L(t)?o.addAttribute(t,e):s[0]===s[1]?o:o.copyWithText(o.text.addAttributeAtRange(t,e,s))})),new this.constructor(r)}addAttribute(t,e){let{blockList:n}=this;return this.eachBlock((r,o)=>n=n.editObjectAtIndex(o,()=>r.addAttribute(t,e))),new this.constructor(n)}removeAttributeAtRange(t,e){let{blockList:n}=this;return this.eachBlockAtRange(e,function(r,o,s){L(t)?n=n.editObjectAtIndex(s,()=>r.removeAttribute(t)):o[0]!==o[1]&&(n=n.editObjectAtIndex(s,()=>r.copyWithText(r.text.removeAttributeAtRange(t,o))))}),new this.constructor(n)}updateAttributesForAttachment(t,e){let n=this.getRangeOfAttachment(e),[r]=Array.from(n),{index:o}=this.locationFromPosition(r),s=this.getTextAtIndex(o);return new this.constructor(this.blockList.editObjectAtIndex(o,l=>l.copyWithText(s.updateAttributesForAttachment(t,e))))}removeAttributeForAttachment(t,e){let n=this.getRangeOfAttachment(e);return this.removeAttributeAtRange(t,n)}setHTMLAttributeAtPosition(t,e,n){let r=this.getBlockAtPosition(t),o=r.addHTMLAttribute(e,n);return this.replaceBlock(r,o)}insertBlockBreakAtRange(t){let e;t=y(t);let[n]=t,{offset:r}=this.locationFromPosition(n),o=this.removeTextAtRange(t);return r===0&&(e=[new bt]),new this.constructor(o.blockList.insertSplittableListAtPosition(new $t(e),n))}applyBlockAttributeAtRange(t,e,n){let r=this.expandRangeToLineBreaksAndSplitBlocks(n),o=r.document;n=r.range;let s=L(t);if(s.listAttribute){o=o.removeLastListAttributeAtRange(n,{exceptAttributeName:t});let l=o.convertLineBreaksToBlockBreaksInRange(n);o=l.document,n=l.range}else o=s.exclusive?o.removeBlockAttributesAtRange(n):s.terminal?o.removeLastTerminalAttributeAtRange(n):o.consolidateBlocksAtRange(n);return o.addAttributeAtRange(t,e,n)}removeLastListAttributeAtRange(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{blockList:n}=this;return this.eachBlockAtRange(t,function(r,o,s){let l=r.getLastAttribute();l&&L(l).listAttribute&&l!==e.exceptAttributeName&&(n=n.editObjectAtIndex(s,()=>r.removeAttribute(l)))}),new this.constructor(n)}removeLastTerminalAttributeAtRange(t){let{blockList:e}=this;return this.eachBlockAtRange(t,function(n,r,o){let s=n.getLastAttribute();s&&L(s).terminal&&(e=e.editObjectAtIndex(o,()=>n.removeAttribute(s)))}),new this.constructor(e)}removeBlockAttributesAtRange(t){let{blockList:e}=this;return this.eachBlockAtRange(t,function(n,r,o){n.hasAttributes()&&(e=e.editObjectAtIndex(o,()=>n.copyWithoutAttributes()))}),new this.constructor(e)}expandRangeToLineBreaksAndSplitBlocks(t){let e;t=y(t);let[n,r]=t,o=this.locationFromPosition(n),s=this.locationFromPosition(r),l=this,c=l.getBlockAtIndex(o.index);if(o.offset=c.findLineBreakInDirectionFromPosition("backward",o.offset),o.offset!=null&&(e=l.positionFromLocation(o),l=l.insertBlockBreakAtRange([e,e+1]),s.index+=1,s.offset-=l.getBlockAtIndex(o.index).getLength(),o.index+=1),o.offset=0,s.offset===0&&s.index>o.index)s.index-=1,s.offset=l.getBlockAtIndex(s.index).getBlockBreakPosition();else{let u=l.getBlockAtIndex(s.index);u.text.getStringAtRange([s.offset-1,s.offset])===` +`?s.offset-=1:s.offset=u.findLineBreakInDirectionFromPosition("forward",s.offset),s.offset!==u.getBlockBreakPosition()&&(e=l.positionFromLocation(s),l=l.insertBlockBreakAtRange([e,e+1]))}return n=l.positionFromLocation(o),r=l.positionFromLocation(s),{document:l,range:t=y([n,r])}}convertLineBreaksToBlockBreaksInRange(t){t=y(t);let[e]=t,n=this.getStringAtRange(t).slice(0,-1),r=this;return n.replace(/.*?\n/g,function(o){e+=o.length,r=r.insertBlockBreakAtRange([e-1,e])}),{document:r,range:t}}consolidateBlocksAtRange(t){t=y(t);let[e,n]=t,r=this.locationFromPosition(e).index,o=this.locationFromPosition(n).index;return new this.constructor(this.blockList.consolidateFromIndexToIndex(r,o))}getDocumentAtRange(t){t=y(t);let e=this.blockList.getSplittableListInRange(t).toArray();return new this.constructor(e)}getStringAtRange(t){let e,n=t=y(t);return n[n.length-1]!==this.getLength()&&(e=-1),this.getDocumentAtRange(t).toString().slice(0,e)}getBlockAtIndex(t){return this.blockList.getObjectAtIndex(t)}getBlockAtPosition(t){let{index:e}=this.locationFromPosition(t);return this.getBlockAtIndex(e)}getTextAtIndex(t){var e;return(e=this.getBlockAtIndex(t))===null||e===void 0?void 0:e.text}getTextAtPosition(t){let{index:e}=this.locationFromPosition(t);return this.getTextAtIndex(e)}getPieceAtPosition(t){let{index:e,offset:n}=this.locationFromPosition(t);return this.getTextAtIndex(e).getPieceAtPosition(n)}getCharacterAtPosition(t){let{index:e,offset:n}=this.locationFromPosition(t);return this.getTextAtIndex(e).getStringAtRange([n,n+1])}getLength(){return this.blockList.getEndPosition()}getBlocks(){return this.blockList.toArray()}getBlockCount(){return this.blockList.length}getEditCount(){return this.editCount}eachBlock(t){return this.blockList.eachObject(t)}eachBlockAtRange(t,e){let n,r;t=y(t);let[o,s]=t,l=this.locationFromPosition(o),c=this.locationFromPosition(s);if(l.index===c.index)return n=this.getBlockAtIndex(l.index),r=[l.offset,c.offset],e(n,r,l.index);for(let u=l.index;u<=c.index;u++)if(n=this.getBlockAtIndex(u),n){switch(u){case l.index:r=[l.offset,n.text.getLength()];break;case c.index:r=[0,c.offset];break;default:r=[0,n.text.getLength()]}e(n,r,u)}}getCommonAttributesAtRange(t){t=y(t);let[e]=t;if(ut(t))return this.getCommonAttributesAtPosition(e);{let n=[],r=[];return this.eachBlockAtRange(t,function(o,s){if(s[0]!==s[1])return n.push(o.text.getCommonAttributesAtRange(s)),r.push(yr(o))}),X.fromCommonAttributesOfObjects(n).merge(X.fromCommonAttributesOfObjects(r)).toObject()}}getCommonAttributesAtPosition(t){let e,n,{index:r,offset:o}=this.locationFromPosition(t),s=this.getBlockAtIndex(r);if(!s)return{};let l=yr(s),c=s.text.getAttributesAtPosition(o),u=s.text.getAttributesAtPosition(o-1),d=Object.keys(Dt).filter(C=>Dt[C].inheritable);for(e in u)n=u[e],(n===c[e]||d.includes(e))&&(l[e]=n);return l}getRangeOfCommonAttributeAtPosition(t,e){let{index:n,offset:r}=this.locationFromPosition(e),o=this.getTextAtIndex(n),[s,l]=Array.from(o.getExpandedRangeForAttributeAtOffset(t,r)),c=this.positionFromLocation({index:n,offset:s}),u=this.positionFromLocation({index:n,offset:l});return y([c,u])}getBaseBlockAttributes(){let t=this.getBlockAtIndex(0).getAttributes();for(let e=1;e{let o=[];for(let s=0;s{let{text:n}=e;return t=t.concat(n.getAttachmentPieces())}),t}getAttachments(){return this.getAttachmentPieces().map(t=>t.attachment)}getRangeOfAttachment(t){let e=0,n=this.blockList.toArray();for(let r=0;r{let o=r.getLength();r.hasAttribute(t)&&n.push([e,e+o]),e+=o}),n}findRangesForTextAttribute(t){let{withValue:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=0,r=[],o=[];return this.getPieces().forEach(s=>{let l=s.getLength();(function(c){return e?c.getAttribute(t)===e:c.hasAttribute(t)})(s)&&(r[1]===n?r[1]=n+l:o.push(r=[n,n+l])),n+=l}),o}locationFromPosition(t){let e=this.blockList.findIndexAndOffsetAtPosition(Math.max(0,t));if(e.index!=null)return e;{let n=this.getBlocks();return{index:n.length-1,offset:n[n.length-1].getLength()}}}positionFromLocation(t){return this.blockList.findPositionAtIndexAndOffset(t.index,t.offset)}locationRangeFromPosition(t){return y(this.locationFromPosition(t))}locationRangeFromRange(t){if(!(t=y(t)))return;let[e,n]=Array.from(t),r=this.locationFromPosition(e),o=this.locationFromPosition(n);return y([r,o])}rangeFromLocationRange(t){let e;t=y(t);let n=this.positionFromLocation(t[0]);return ut(t)||(e=this.positionFromLocation(t[1])),y([n,e])}isEqualTo(t){return this.blockList.isEqualTo(t?.blockList)}getTexts(){return this.getBlocks().map(t=>t.text)}getPieces(){let t=[];return Array.from(this.getTexts()).forEach(e=>{t.push(...Array.from(e.getPieces()||[]))}),t}getObjects(){return this.getBlocks().concat(this.getTexts()).concat(this.getPieces())}toSerializableDocument(){let t=[];return this.blockList.eachObject(e=>t.push(e.copyWithText(e.text.toSerializableText()))),new this.constructor(t)}toString(){return this.blockList.toString()}toJSON(){return this.blockList.toJSON()}toConsole(){return JSON.stringify(this.blockList.toArray().map(t=>JSON.parse(t.text.toConsole())))}},yr=function(i){let t={},e=i.getLastAttribute();return e&&(t[e]=!0),t},jn=function(i){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return{string:i=ue(i),attributes:t,type:"string"}},xr=(i,t)=>{try{return JSON.parse(i.getAttribute("data-trix-".concat(t)))}catch{return{}}},Ft=class extends R{static parse(t,e){let n=new this(t,e);return n.parse(),n}constructor(t){let{referenceElement:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.html=t,this.referenceElement=e,this.blocks=[],this.blockElements=[],this.processedElements=[]}getDocument(){return V.fromJSON(this.blocks)}parse(){try{this.createHiddenContainer(),qt.setHTML(this.containerElement,this.html);let t=je(this.containerElement,{usingFilter:Es});for(;t.nextNode();)this.processNode(t.currentNode);return this.translateBlockElementMarginsToNewlines()}finally{this.removeHiddenContainer()}}createHiddenContainer(){return this.referenceElement?(this.containerElement=this.referenceElement.cloneNode(!1),this.containerElement.removeAttribute("id"),this.containerElement.setAttribute("data-trix-internal",""),this.containerElement.style.display="none",this.referenceElement.parentNode.insertBefore(this.containerElement,this.referenceElement.nextSibling)):(this.containerElement=p({tagName:"div",style:{display:"none"}}),document.body.appendChild(this.containerElement))}removeHiddenContainer(){return At(this.containerElement)}processNode(t){switch(t.nodeType){case Node.TEXT_NODE:if(!this.isInsignificantTextNode(t))return this.appendBlockForTextNode(t),this.processTextNode(t);break;case Node.ELEMENT_NODE:return this.appendBlockForElement(t),this.processElement(t)}}appendBlockForTextNode(t){let e=t.parentNode;if(e===this.currentBlockElement&&this.isBlockElement(t.previousSibling))return this.appendStringWithAttributes(` +`);if(e===this.containerElement||this.isBlockElement(e)){var n;let r=this.getBlockAttributes(e),o=this.getBlockHTMLAttributes(e);It(r,(n=this.currentBlock)===null||n===void 0?void 0:n.attributes)||(this.currentBlock=this.appendBlockForAttributesWithElement(r,e,o),this.currentBlockElement=e)}}appendBlockForElement(t){let e=this.isBlockElement(t),n=kt(this.currentBlockElement,t);if(e&&!this.isBlockElement(t.firstChild)){if(!this.isInsignificantTextNode(t.firstChild)||!this.isBlockElement(t.firstElementChild)){let r=this.getBlockAttributes(t),o=this.getBlockHTMLAttributes(t);if(t.firstChild){if(n&&It(r,this.currentBlock.attributes))return this.appendStringWithAttributes(` +`);this.currentBlock=this.appendBlockForAttributesWithElement(r,t,o),this.currentBlockElement=t}}}else if(this.currentBlockElement&&!n&&!e){let r=this.findParentBlockElement(t);if(r)return this.appendBlockForElement(r);this.currentBlock=this.appendEmptyBlock(),this.currentBlockElement=null}}findParentBlockElement(t){let{parentElement:e}=t;for(;e&&e!==this.containerElement;){if(this.isBlockElement(e)&&this.blockElements.includes(e))return e;e=e.parentElement}return null}processTextNode(t){let e=t.data;var n;return Cr(t.parentNode)||(e=xi(e),Gr((n=t.previousSibling)===null||n===void 0?void 0:n.textContent)&&(e=Ss(e))),this.appendStringWithAttributes(e,this.getTextAttributes(t.parentNode))}processElement(t){let e;if(Tt(t)){if(e=xr(t,"attachment"),Object.keys(e).length){let n=this.getTextAttributes(t);this.appendAttachmentWithAttributes(e,n),t.innerHTML=""}return this.processedElements.push(t)}switch(j(t)){case"br":return this.isExtraBR(t)||this.isBlockElement(t.nextSibling)||this.appendStringWithAttributes(` +`,this.getTextAttributes(t)),this.processedElements.push(t);case"img":e={url:t.getAttribute("src"),contentType:"image"};let n=(r=>{let o=r.getAttribute("width"),s=r.getAttribute("height"),l={};return o&&(l.width=parseInt(o,10)),s&&(l.height=parseInt(s,10)),l})(t);for(let r in n){let o=n[r];e[r]=o}return this.appendAttachmentWithAttributes(e,this.getTextAttributes(t)),this.processedElements.push(t);case"tr":if(this.needsTableSeparator(t))return this.appendStringWithAttributes(Me.tableRowSeparator);break;case"td":if(this.needsTableSeparator(t))return this.appendStringWithAttributes(Me.tableCellSeparator)}}appendBlockForAttributesWithElement(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.blockElements.push(e);let r=function(){return{text:[],attributes:arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},htmlAttributes:arguments.length>1&&arguments[1]!==void 0?arguments[1]:{}}}(t,n);return this.blocks.push(r),r}appendEmptyBlock(){return this.appendBlockForAttributesWithElement([],null)}appendStringWithAttributes(t,e){return this.appendPiece(jn(t,e))}appendAttachmentWithAttributes(t,e){return this.appendPiece(function(n){return{attachment:n,attributes:arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},type:"attachment"}}(t,e))}appendPiece(t){return this.blocks.length===0&&this.appendEmptyBlock(),this.blocks[this.blocks.length-1].text.push(t)}appendStringToTextAtIndex(t,e){let{text:n}=this.blocks[e],r=n[n.length-1];if(r?.type!=="string")return n.push(jn(t));r.string+=t}prependStringToTextAtIndex(t,e){let{text:n}=this.blocks[e],r=n[0];if(r?.type!=="string")return n.unshift(jn(t));r.string=t+r.string}getTextAttributes(t){let e,n={};for(let r in Dt){let o=Dt[r];if(o.tagName&&vt(t,{matchingSelector:o.tagName,untilNode:this.containerElement}))n[r]=!0;else if(o.parser){if(e=o.parser(t),e){let s=!1;for(let l of this.findBlockElementAncestors(t))if(o.parser(l)===e){s=!0;break}s||(n[r]=e)}}else o.styleProperty&&(e=t.style[o.styleProperty],e&&(n[r]=e))}if(Tt(t)){let r=xr(t,"attributes");for(let o in r)e=r[o],n[o]=e}return n}getBlockAttributes(t){let e=[];for(;t&&t!==this.containerElement;){for(let r in W){let o=W[r];var n;o.parse!==!1&&j(t)===o.tagName&&((n=o.test)!==null&&n!==void 0&&n.call(o,t)||!o.test)&&(e.push(r),o.listAttribute&&e.push(o.listAttribute))}t=t.parentNode}return e.reverse()}getBlockHTMLAttributes(t){let e={},n=Object.values(W).find(r=>r.tagName===j(t));return(n?.htmlAttributes||[]).forEach(r=>{t.hasAttribute(r)&&(e[r]=t.getAttribute(r))}),e}findBlockElementAncestors(t){let e=[];for(;t&&t!==this.containerElement;){let n=j(t);de().includes(n)&&e.push(t),t=t.parentNode}return e}isBlockElement(t){if(t?.nodeType===Node.ELEMENT_NODE&&!Tt(t)&&!vt(t,{matchingSelector:"td",untilNode:this.containerElement}))return de().includes(j(t))||window.getComputedStyle(t).display==="block"}isInsignificantTextNode(t){if(t?.nodeType!==Node.TEXT_NODE||!ks(t.data))return;let{parentNode:e,previousSibling:n,nextSibling:r}=t;return Cs(e.previousSibling)&&!this.isBlockElement(e.previousSibling)||Cr(e)?void 0:!n||this.isBlockElement(n)||!r||this.isBlockElement(r)}isExtraBR(t){return j(t)==="br"&&this.isBlockElement(t.parentNode)&&t.parentNode.lastChild===t}needsTableSeparator(t){if(Me.removeBlankTableCells){var e;let n=(e=t.previousSibling)===null||e===void 0?void 0:e.textContent;return n&&/\S/.test(n)}return t.previousSibling}translateBlockElementMarginsToNewlines(){let t=this.getMarginOfDefaultBlockElement();for(let e=0;e2*t.top&&this.prependStringToTextAtIndex(` +`,e),n.bottom>2*t.bottom&&this.appendStringToTextAtIndex(` +`,e))}}getMarginOfBlockElementAtIndex(t){let e=this.blockElements[t];if(e&&e.textContent&&!de().includes(j(e))&&!this.processedElements.includes(e))return Er(e)}getMarginOfDefaultBlockElement(){let t=p(W.default.tagName);return this.containerElement.appendChild(t),Er(t)}},Cr=function(i){let{whiteSpace:t}=window.getComputedStyle(i);return["pre","pre-wrap","pre-line"].includes(t)},Cs=i=>i&&!Gr(i.textContent),Er=function(i){let t=window.getComputedStyle(i);if(t.display==="block")return{top:parseInt(t.marginTop),bottom:parseInt(t.marginBottom)}},Es=function(i){return j(i)==="style"?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},Ss=i=>i.replace(new RegExp("^".concat(yi.source,"+")),""),ks=i=>new RegExp("^".concat(yi.source,"*$")).test(i),Gr=i=>/\s$/.test(i),Rs=["contenteditable","data-trix-id","data-trix-store-key","data-trix-mutable","data-trix-placeholder","tabindex"],ai="data-trix-serialized-attributes",Ts="[".concat(ai,"]"),ws=new RegExp("","g"),Ls={"application/json":function(i){let t;if(i instanceof V)t=i;else{if(!(i instanceof HTMLElement))throw new Error("unserializable object");t=Ft.parse(i.innerHTML).getDocument()}return t.toSerializableDocument().toJSONString()},"text/html":function(i){let t;if(i instanceof V)t=Jt.render(i);else{if(!(i instanceof HTMLElement))throw new Error("unserializable object");t=i.cloneNode(!0)}return Array.from(t.querySelectorAll("[data-trix-serialize=false]")).forEach(e=>{At(e)}),Rs.forEach(e=>{Array.from(t.querySelectorAll("[".concat(e,"]"))).forEach(n=>{n.removeAttribute(e)})}),Array.from(t.querySelectorAll(Ts)).forEach(e=>{try{let n=JSON.parse(e.getAttribute(ai));e.removeAttribute(ai);for(let r in n){let o=n[r];e.setAttribute(r,o)}}catch{}}),t.innerHTML.replace(ws,"")}},Ds=Object.freeze({__proto__:null}),E=class extends R{constructor(t,e){super(...arguments),this.attachmentManager=t,this.attachment=e,this.id=this.attachment.id,this.file=this.attachment.file}remove(){return this.attachmentManager.requestRemovalOfAttachment(this.attachment)}};E.proxyMethod("attachment.getAttribute"),E.proxyMethod("attachment.hasAttribute"),E.proxyMethod("attachment.setAttribute"),E.proxyMethod("attachment.getAttributes"),E.proxyMethod("attachment.setAttributes"),E.proxyMethod("attachment.isPending"),E.proxyMethod("attachment.isPreviewable"),E.proxyMethod("attachment.getURL"),E.proxyMethod("attachment.getHref"),E.proxyMethod("attachment.getFilename"),E.proxyMethod("attachment.getFilesize"),E.proxyMethod("attachment.getFormattedFilesize"),E.proxyMethod("attachment.getExtension"),E.proxyMethod("attachment.getContentType"),E.proxyMethod("attachment.getFile"),E.proxyMethod("attachment.setFile"),E.proxyMethod("attachment.releaseFile"),E.proxyMethod("attachment.getUploadProgress"),E.proxyMethod("attachment.setUploadProgress");var Ge=class extends R{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),this.managedAttachments={},Array.from(t).forEach(e=>{this.manageAttachment(e)})}getAttachments(){let t=[];for(let e in this.managedAttachments){let n=this.managedAttachments[e];t.push(n)}return t}manageAttachment(t){return this.managedAttachments[t.id]||(this.managedAttachments[t.id]=new E(this,t)),this.managedAttachments[t.id]}attachmentIsManaged(t){return t.id in this.managedAttachments}requestRemovalOfAttachment(t){var e,n;if(this.attachmentIsManaged(t))return(e=this.delegate)===null||e===void 0||(n=e.attachmentManagerDidRequestRemovalOfAttachment)===null||n===void 0?void 0:n.call(e,t)}unmanageAttachment(t){let e=this.managedAttachments[t.id];return delete this.managedAttachments[t.id],e}},$e=class{constructor(t){this.composition=t,this.document=this.composition.document;let e=this.composition.getSelectedRange();this.startPosition=e[0],this.endPosition=e[1],this.startLocation=this.document.locationFromPosition(this.startPosition),this.endLocation=this.document.locationFromPosition(this.endPosition),this.block=this.document.getBlockAtIndex(this.endLocation.index),this.breaksOnReturn=this.block.breaksOnReturn(),this.previousCharacter=this.block.text.getStringAtPosition(this.endLocation.offset-1),this.nextCharacter=this.block.text.getStringAtPosition(this.endLocation.offset)}shouldInsertBlockBreak(){return this.block.hasAttributes()&&this.block.isListItem()&&!this.block.isEmpty()?this.startLocation.offset!==0:this.breaksOnReturn&&this.nextCharacter!==` +`}shouldBreakFormattedBlock(){return this.block.hasAttributes()&&!this.block.isListItem()&&(this.breaksOnReturn&&this.nextCharacter===` +`||this.previousCharacter===` +`)}shouldDecreaseListLevel(){return this.block.hasAttributes()&&this.block.isListItem()&&this.block.isEmpty()}shouldPrependListItem(){return this.block.isListItem()&&this.startLocation.offset===0&&!this.block.isEmpty()}shouldRemoveLastBlockAttribute(){return this.block.hasAttributes()&&!this.block.isListItem()&&this.block.isEmpty()}},it=class extends R{constructor(){super(...arguments),this.document=new V,this.attachments=[],this.currentAttributes={},this.revision=0}setDocument(t){var e,n;if(!t.isEqualTo(this.document))return this.document=t,this.refreshAttachments(),this.revision++,(e=this.delegate)===null||e===void 0||(n=e.compositionDidChangeDocument)===null||n===void 0?void 0:n.call(e,t)}getSnapshot(){return{document:this.document,selectedRange:this.getSelectedRange()}}loadSnapshot(t){var e,n,r,o;let{document:s,selectedRange:l}=t;return(e=this.delegate)===null||e===void 0||(n=e.compositionWillLoadSnapshot)===null||n===void 0||n.call(e),this.setDocument(s??new V),this.setSelection(l??[0,0]),(r=this.delegate)===null||r===void 0||(o=r.compositionDidLoadSnapshot)===null||o===void 0?void 0:o.call(r)}insertText(t){let{updatePosition:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{updatePosition:!0},n=this.getSelectedRange();this.setDocument(this.document.insertTextAtRange(t,n));let r=n[0],o=r+t.getLength();return e&&this.setSelection(o),this.notifyDelegateOfInsertionAtRange([r,o])}insertBlock(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new bt,e=new V([t]);return this.insertDocument(e)}insertDocument(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new V,e=this.getSelectedRange();this.setDocument(this.document.insertDocumentAtRange(t,e));let n=e[0],r=n+t.getLength();return this.setSelection(r),this.notifyDelegateOfInsertionAtRange([n,r])}insertString(t,e){let n=this.getCurrentTextAttributes(),r=J.textForStringWithAttributes(t,n);return this.insertText(r,e)}insertBlockBreak(){let t=this.getSelectedRange();this.setDocument(this.document.insertBlockBreakAtRange(t));let e=t[0],n=e+1;return this.setSelection(n),this.notifyDelegateOfInsertionAtRange([e,n])}insertLineBreak(){let t=new $e(this);if(t.shouldDecreaseListLevel())return this.decreaseListLevel(),this.setSelection(t.startPosition);if(t.shouldPrependListItem()){let e=new V([t.block.copyWithoutText()]);return this.insertDocument(e)}return t.shouldInsertBlockBreak()?this.insertBlockBreak():t.shouldRemoveLastBlockAttribute()?this.removeLastBlockAttribute():t.shouldBreakFormattedBlock()?this.breakFormattedBlock(t):this.insertString(` +`)}insertHTML(t){let e=Ft.parse(t).getDocument(),n=this.getSelectedRange();this.setDocument(this.document.mergeDocumentAtRange(e,n));let r=n[0],o=r+e.getLength()-1;return this.setSelection(o),this.notifyDelegateOfInsertionAtRange([r,o])}replaceHTML(t){let e=Ft.parse(t).getDocument().copyUsingObjectsFromDocument(this.document),n=this.getLocationRange({strict:!1}),r=this.document.rangeFromLocationRange(n);return this.setDocument(e),this.setSelection(r)}insertFile(t){return this.insertFiles([t])}insertFiles(t){let e=[];return Array.from(t).forEach(n=>{var r;if((r=this.delegate)!==null&&r!==void 0&&r.compositionShouldAcceptFile(n)){let o=Kt.attachmentForFile(n);e.push(o)}}),this.insertAttachments(e)}insertAttachment(t){return this.insertAttachments([t])}insertAttachments(t){let e=new J;return Array.from(t).forEach(n=>{var r;let o=n.getType(),s=(r=mi[o])===null||r===void 0?void 0:r.presentation,l=this.getCurrentTextAttributes();s&&(l.presentation=s);let c=J.textForAttachmentWithAttributes(n,l);e=e.appendText(c)}),this.insertText(e)}shouldManageDeletingInDirection(t){let e=this.getLocationRange();if(ut(e)){if(t==="backward"&&e[0].offset===0||this.shouldManageMovingCursorInDirection(t))return!0}else if(e[0].index!==e[1].index)return!0;return!1}deleteInDirection(t){let e,n,r,{length:o}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},s=this.getLocationRange(),l=this.getSelectedRange(),c=ut(l);if(c?n=t==="backward"&&s[0].offset===0:r=s[0].index!==s[1].index,n&&this.canDecreaseBlockAttributeLevel()){let u=this.getBlock();if(u.isListItem()?this.decreaseListLevel():this.decreaseBlockAttributeLevel(),this.setSelection(l[0]),u.isEmpty())return!1}return c&&(l=this.getExpandedRangeInDirection(t,{length:o}),t==="backward"&&(e=this.getAttachmentAtRange(l))),e?(this.editAttachment(e),!1):(this.setDocument(this.document.removeTextAtRange(l)),this.setSelection(l[0]),!n&&!r&&void 0)}moveTextFromRange(t){let[e]=Array.from(this.getSelectedRange());return this.setDocument(this.document.moveTextFromRangeToPosition(t,e)),this.setSelection(e)}removeAttachment(t){let e=this.document.getRangeOfAttachment(t);if(e)return this.stopEditingAttachment(),this.setDocument(this.document.removeTextAtRange(e)),this.setSelection(e[0])}removeLastBlockAttribute(){let[t,e]=Array.from(this.getSelectedRange()),n=this.document.getBlockAtPosition(e);return this.removeCurrentAttribute(n.getLastAttribute()),this.setSelection(t)}insertPlaceholder(){return this.placeholderPosition=this.getPosition(),this.insertString(" ")}selectPlaceholder(){if(this.placeholderPosition!=null)return this.setSelectedRange([this.placeholderPosition,this.placeholderPosition+1]),this.getSelectedRange()}forgetPlaceholder(){this.placeholderPosition=null}hasCurrentAttribute(t){let e=this.currentAttributes[t];return e!=null&&e!==!1}toggleCurrentAttribute(t){let e=!this.currentAttributes[t];return e?this.setCurrentAttribute(t,e):this.removeCurrentAttribute(t)}canSetCurrentAttribute(t){return L(t)?this.canSetCurrentBlockAttribute(t):this.canSetCurrentTextAttribute(t)}canSetCurrentTextAttribute(t){let e=this.getSelectedDocument();if(e){for(let n of Array.from(e.getAttachments()))if(!n.hasContent())return!1;return!0}}canSetCurrentBlockAttribute(t){let e=this.getBlock();if(e)return!e.isTerminalBlock()}setCurrentAttribute(t,e){return L(t)?this.setBlockAttribute(t,e):(this.setTextAttribute(t,e),this.currentAttributes[t]=e,this.notifyDelegateOfCurrentAttributesChange())}setHTMLAtributeAtPosition(t,e,n){var r;let o=this.document.getBlockAtPosition(t),s=(r=L(o.getLastAttribute()))===null||r===void 0?void 0:r.htmlAttributes;if(o&&s!=null&&s.includes(e)){let l=this.document.setHTMLAttributeAtPosition(t,e,n);this.setDocument(l)}}setTextAttribute(t,e){let n=this.getSelectedRange();if(!n)return;let[r,o]=Array.from(n);if(r!==o)return this.setDocument(this.document.addAttributeAtRange(t,e,n));if(t==="href"){let s=J.textForStringWithAttributes(e,{href:e});return this.insertText(s)}}setBlockAttribute(t,e){let n=this.getSelectedRange();if(this.canSetCurrentAttribute(t))return this.setDocument(this.document.applyBlockAttributeAtRange(t,e,n)),this.setSelection(n)}removeCurrentAttribute(t){return L(t)?(this.removeBlockAttribute(t),this.updateCurrentAttributes()):(this.removeTextAttribute(t),delete this.currentAttributes[t],this.notifyDelegateOfCurrentAttributesChange())}removeTextAttribute(t){let e=this.getSelectedRange();if(e)return this.setDocument(this.document.removeAttributeAtRange(t,e))}removeBlockAttribute(t){let e=this.getSelectedRange();if(e)return this.setDocument(this.document.removeAttributeAtRange(t,e))}canDecreaseNestingLevel(){var t;return((t=this.getBlock())===null||t===void 0?void 0:t.getNestingLevel())>0}canIncreaseNestingLevel(){var t;let e=this.getBlock();if(e){if((t=L(e.getLastNestableAttribute()))===null||t===void 0||!t.listAttribute)return e.getNestingLevel()>0;{let n=this.getPreviousBlock();if(n)return function(){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return It((arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).slice(0,r.length),r)}(n.getListItemAttributes(),e.getListItemAttributes())}}}decreaseNestingLevel(){let t=this.getBlock();if(t)return this.setDocument(this.document.replaceBlock(t,t.decreaseNestingLevel()))}increaseNestingLevel(){let t=this.getBlock();if(t)return this.setDocument(this.document.replaceBlock(t,t.increaseNestingLevel()))}canDecreaseBlockAttributeLevel(){var t;return((t=this.getBlock())===null||t===void 0?void 0:t.getAttributeLevel())>0}decreaseBlockAttributeLevel(){var t;let e=(t=this.getBlock())===null||t===void 0?void 0:t.getLastAttribute();if(e)return this.removeCurrentAttribute(e)}decreaseListLevel(){let[t]=Array.from(this.getSelectedRange()),{index:e}=this.document.locationFromPosition(t),n=e,r=this.getBlock().getAttributeLevel(),o=this.document.getBlockAtIndex(n+1);for(;o&&o.isListItem()&&!(o.getAttributeLevel()<=r);)n++,o=this.document.getBlockAtIndex(n+1);t=this.document.positionFromLocation({index:e,offset:0});let s=this.document.positionFromLocation({index:n,offset:0});return this.setDocument(this.document.removeLastListAttributeAtRange([t,s]))}updateCurrentAttributes(){let t=this.getSelectedRange({ignoreLock:!0});if(t){let e=this.document.getCommonAttributesAtRange(t);if(Array.from(Qn()).forEach(n=>{e[n]||this.canSetCurrentAttribute(n)||(e[n]=!1)}),!Xt(e,this.currentAttributes))return this.currentAttributes=e,this.notifyDelegateOfCurrentAttributesChange()}}getCurrentAttributes(){return Nr.call({},this.currentAttributes)}getCurrentTextAttributes(){let t={};for(let e in this.currentAttributes){let n=this.currentAttributes[e];n!==!1&&ti(e)&&(t[e]=n)}return t}freezeSelection(){return this.setCurrentAttribute("frozen",!0)}thawSelection(){return this.removeCurrentAttribute("frozen")}hasFrozenSelection(){return this.hasCurrentAttribute("frozen")}setSelection(t){var e;let n=this.document.locationRangeFromRange(t);return(e=this.delegate)===null||e===void 0?void 0:e.compositionDidRequestChangingSelectionToLocationRange(n)}getSelectedRange(){let t=this.getLocationRange();if(t)return this.document.rangeFromLocationRange(t)}setSelectedRange(t){let e=this.document.locationRangeFromRange(t);return this.getSelectionManager().setLocationRange(e)}getPosition(){let t=this.getLocationRange();if(t)return this.document.positionFromLocation(t[0])}getLocationRange(t){return this.targetLocationRange?this.targetLocationRange:this.getSelectionManager().getLocationRange(t)||y({index:0,offset:0})}withTargetLocationRange(t,e){let n;this.targetLocationRange=t;try{n=e()}finally{this.targetLocationRange=null}return n}withTargetRange(t,e){let n=this.document.locationRangeFromRange(t);return this.withTargetLocationRange(n,e)}withTargetDOMRange(t,e){let n=this.createLocationRangeFromDOMRange(t,{strict:!1});return this.withTargetLocationRange(n,e)}getExpandedRangeInDirection(t){let{length:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},[n,r]=Array.from(this.getSelectedRange());return t==="backward"?e?n-=e:n=this.translateUTF16PositionFromOffset(n,-1):e?r+=e:r=this.translateUTF16PositionFromOffset(r,1),y([n,r])}shouldManageMovingCursorInDirection(t){if(this.editingAttachment)return!0;let e=this.getExpandedRangeInDirection(t);return this.getAttachmentAtRange(e)!=null}moveCursorInDirection(t){let e,n;if(this.editingAttachment)n=this.document.getRangeOfAttachment(this.editingAttachment);else{let r=this.getSelectedRange();n=this.getExpandedRangeInDirection(t),e=!We(r,n)}if(t==="backward"?this.setSelectedRange(n[0]):this.setSelectedRange(n[1]),e){let r=this.getAttachmentAtRange(n);if(r)return this.editAttachment(r)}}expandSelectionInDirection(t){let{length:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=this.getExpandedRangeInDirection(t,{length:e});return this.setSelectedRange(n)}expandSelectionForEditing(){if(this.hasCurrentAttribute("href"))return this.expandSelectionAroundCommonAttribute("href")}expandSelectionAroundCommonAttribute(t){let e=this.getPosition(),n=this.document.getRangeOfCommonAttributeAtPosition(t,e);return this.setSelectedRange(n)}selectionContainsAttachments(){var t;return((t=this.getSelectedAttachments())===null||t===void 0?void 0:t.length)>0}selectionIsInCursorTarget(){return this.editingAttachment||this.positionIsCursorTarget(this.getPosition())}positionIsCursorTarget(t){let e=this.document.locationFromPosition(t);if(e)return this.locationIsCursorTarget(e)}positionIsBlockBreak(t){var e;return(e=this.document.getPieceAtPosition(t))===null||e===void 0?void 0:e.isBlockBreak()}getSelectedDocument(){let t=this.getSelectedRange();if(t)return this.document.getDocumentAtRange(t)}getSelectedAttachments(){var t;return(t=this.getSelectedDocument())===null||t===void 0?void 0:t.getAttachments()}getAttachments(){return this.attachments.slice(0)}refreshAttachments(){let t=this.document.getAttachments(),{added:e,removed:n}=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],s=[],l=[],c=new Set;r.forEach(d=>{c.add(d)});let u=new Set;return o.forEach(d=>{u.add(d),c.has(d)||s.push(d)}),r.forEach(d=>{u.has(d)||l.push(d)}),{added:s,removed:l}}(this.attachments,t);return this.attachments=t,Array.from(n).forEach(r=>{var o,s;r.delegate=null,(o=this.delegate)===null||o===void 0||(s=o.compositionDidRemoveAttachment)===null||s===void 0||s.call(o,r)}),(()=>{let r=[];return Array.from(e).forEach(o=>{var s,l;o.delegate=this,r.push((s=this.delegate)===null||s===void 0||(l=s.compositionDidAddAttachment)===null||l===void 0?void 0:l.call(s,o))}),r})()}attachmentDidChangeAttributes(t){var e,n;return this.revision++,(e=this.delegate)===null||e===void 0||(n=e.compositionDidEditAttachment)===null||n===void 0?void 0:n.call(e,t)}attachmentDidChangePreviewURL(t){var e,n;return this.revision++,(e=this.delegate)===null||e===void 0||(n=e.compositionDidChangeAttachmentPreviewURL)===null||n===void 0?void 0:n.call(e,t)}editAttachment(t,e){var n,r;if(t!==this.editingAttachment)return this.stopEditingAttachment(),this.editingAttachment=t,(n=this.delegate)===null||n===void 0||(r=n.compositionDidStartEditingAttachment)===null||r===void 0?void 0:r.call(n,this.editingAttachment,e)}stopEditingAttachment(){var t,e;this.editingAttachment&&((t=this.delegate)===null||t===void 0||(e=t.compositionDidStopEditingAttachment)===null||e===void 0||e.call(t,this.editingAttachment),this.editingAttachment=null)}updateAttributesForAttachment(t,e){return this.setDocument(this.document.updateAttributesForAttachment(t,e))}removeAttributeForAttachment(t,e){return this.setDocument(this.document.removeAttributeForAttachment(t,e))}breakFormattedBlock(t){let{document:e}=t,{block:n}=t,r=t.startPosition,o=[r-1,r];n.getBlockBreakPosition()===t.startLocation.offset?(n.breaksOnReturn()&&t.nextCharacter===` +`?r+=1:e=e.removeTextAtRange(o),o=[r,r]):t.nextCharacter===` +`?t.previousCharacter===` +`?o=[r-1,r+1]:(o=[r,r+1],r+=1):t.startLocation.offset-1!=0&&(r+=1);let s=new V([n.removeLastAttribute().copyWithoutText()]);return this.setDocument(e.insertDocumentAtRange(s,o)),this.setSelection(r)}getPreviousBlock(){let t=this.getLocationRange();if(t){let{index:e}=t[0];if(e>0)return this.document.getBlockAtIndex(e-1)}}getBlock(){let t=this.getLocationRange();if(t)return this.document.getBlockAtIndex(t[0].index)}getAttachmentAtRange(t){let e=this.document.getDocumentAtRange(t);if(e.toString()==="".concat("\uFFFC",` +`))return e.getAttachments()[0]}notifyDelegateOfCurrentAttributesChange(){var t,e;return(t=this.delegate)===null||t===void 0||(e=t.compositionDidChangeCurrentAttributes)===null||e===void 0?void 0:e.call(t,this.currentAttributes)}notifyDelegateOfInsertionAtRange(t){var e,n;return(e=this.delegate)===null||e===void 0||(n=e.compositionDidPerformInsertionAtRange)===null||n===void 0?void 0:n.call(e,t)}translateUTF16PositionFromOffset(t,e){let n=this.document.toUTF16String(),r=n.offsetFromUCS2Offset(t);return n.offsetToUCS2Offset(r+e)}};it.proxyMethod("getSelectionManager().getPointRange"),it.proxyMethod("getSelectionManager().setLocationRangeFromPointRange"),it.proxyMethod("getSelectionManager().createLocationRangeFromDOMRange"),it.proxyMethod("getSelectionManager().locationIsCursorTarget"),it.proxyMethod("getSelectionManager().selectionIsExpanded"),it.proxyMethod("delegate?.getSelectionManager");var Ae=class extends R{constructor(t){super(...arguments),this.composition=t,this.undoEntries=[],this.redoEntries=[]}recordUndoEntry(t){let{context:e,consolidatable:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=this.undoEntries.slice(-1)[0];if(!n||!Ns(r,t,e)){let o=this.createEntry({description:t,context:e});this.undoEntries.push(o),this.redoEntries=[]}}undo(){let t=this.undoEntries.pop();if(t){let e=this.createEntry(t);return this.redoEntries.push(e),this.composition.loadSnapshot(t.snapshot)}}redo(){let t=this.redoEntries.pop();if(t){let e=this.createEntry(t);return this.undoEntries.push(e),this.composition.loadSnapshot(t.snapshot)}}canUndo(){return this.undoEntries.length>0}canRedo(){return this.redoEntries.length>0}createEntry(){let{description:t,context:e}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return{description:t?.toString(),context:JSON.stringify(e),snapshot:this.composition.getSnapshot()}}},Ns=(i,t,e)=>i?.description===t?.toString()&&i?.context===JSON.stringify(e),Wn="attachmentGallery",Ye=class{constructor(t){this.document=t.document,this.selectedRange=t.selectedRange}perform(){return this.removeBlockAttribute(),this.applyBlockAttribute()}getSnapshot(){return{document:this.document,selectedRange:this.selectedRange}}removeBlockAttribute(){return this.findRangesOfBlocks().map(t=>this.document=this.document.removeAttributeAtRange(Wn,t))}applyBlockAttribute(){let t=0;this.findRangesOfPieces().forEach(e=>{e[1]-e[0]>1&&(e[0]+=t,e[1]+=t,this.document.getCharacterAtPosition(e[1])!==` +`&&(this.document=this.document.insertBlockBreakAtRange(e[1]),e[1]0&&arguments[0]!==void 0?arguments[0]:"",e=Ft.parse(t,{referenceElement:this.element}).getDocument();return this.loadDocument(e)}loadJSON(t){let{document:e,selectedRange:n}=t;return e=V.fromJSON(e),this.loadSnapshot({document:e,selectedRange:n})}loadSnapshot(t){return this.undoManager=new Ae(this.composition),this.composition.loadSnapshot(t)}getDocument(){return this.composition.document}getSelectedDocument(){return this.composition.getSelectedDocument()}getSnapshot(){return this.composition.getSnapshot()}toJSON(){return this.getSnapshot()}deleteInDirection(t){return this.composition.deleteInDirection(t)}insertAttachment(t){return this.composition.insertAttachment(t)}insertAttachments(t){return this.composition.insertAttachments(t)}insertDocument(t){return this.composition.insertDocument(t)}insertFile(t){return this.composition.insertFile(t)}insertFiles(t){return this.composition.insertFiles(t)}insertHTML(t){return this.composition.insertHTML(t)}insertString(t){return this.composition.insertString(t)}insertText(t){return this.composition.insertText(t)}insertLineBreak(){return this.composition.insertLineBreak()}getSelectedRange(){return this.composition.getSelectedRange()}getPosition(){return this.composition.getPosition()}getClientRectAtPosition(t){let e=this.getDocument().locationRangeFromRange([t,t+1]);return this.selectionManager.getClientRectAtLocationRange(e)}expandSelectionInDirection(t){return this.composition.expandSelectionInDirection(t)}moveCursorInDirection(t){return this.composition.moveCursorInDirection(t)}setSelectedRange(t){return this.composition.setSelectedRange(t)}activateAttribute(t){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return this.composition.setCurrentAttribute(t,e)}attributeIsActive(t){return this.composition.hasCurrentAttribute(t)}canActivateAttribute(t){return this.composition.canSetCurrentAttribute(t)}deactivateAttribute(t){return this.composition.removeCurrentAttribute(t)}setHTMLAtributeAtPosition(t,e,n){this.composition.setHTMLAtributeAtPosition(t,e,n)}canDecreaseNestingLevel(){return this.composition.canDecreaseNestingLevel()}canIncreaseNestingLevel(){return this.composition.canIncreaseNestingLevel()}decreaseNestingLevel(){if(this.canDecreaseNestingLevel())return this.composition.decreaseNestingLevel()}increaseNestingLevel(){if(this.canIncreaseNestingLevel())return this.composition.increaseNestingLevel()}canRedo(){return this.undoManager.canRedo()}canUndo(){return this.undoManager.canUndo()}recordUndoEntry(t){let{context:e,consolidatable:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return this.undoManager.recordUndoEntry(t,{context:e,consolidatable:n})}redo(){if(this.canRedo())return this.undoManager.redo()}undo(){if(this.canUndo())return this.undoManager.undo()}},Ze=class{constructor(t){this.element=t}findLocationFromContainerAndOffset(t,e){let{strict:n}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{strict:!0},r=0,o=!1,s={index:0,offset:0},l=this.findAttachmentElementParentForNode(t);l&&(t=l.parentNode,e=kn(l));let c=je(this.element,{usingFilter:Yr});for(;c.nextNode();){let u=c.currentNode;if(u===t&&ge(t)){zt(u)||(s.offset+=e);break}if(u.parentNode===t){if(r++===e)break}else if(!kt(t,u)&&r>0)break;Yi(u,{strict:n})?(o&&s.index++,s.offset=0,o=!0):s.offset+=Un(u)}return s}findContainerAndOffsetFromLocation(t){let e,n;if(t.index===0&&t.offset===0){for(e=this.element,n=0;e.firstChild;)if(e=e.firstChild,Rn(e)){n=1;break}return[e,n]}let[r,o]=this.findNodeAndOffsetFromLocation(t);if(r){if(ge(r))Un(r)===0?(e=r.parentNode.parentNode,n=kn(r.parentNode),zt(r,{name:"right"})&&n++):(e=r,n=t.offset-o);else{if(e=r.parentNode,!Yi(r.previousSibling)&&!Rn(e))for(;r===e.lastChild&&(r=e,e=e.parentNode,!Rn(e)););n=kn(r),t.offset!==0&&n++}return[e,n]}}findNodeAndOffsetFromLocation(t){let e,n,r=0;for(let o of this.getSignificantNodesForIndex(t.index)){let s=Un(o);if(t.offset<=r+s)if(ge(o)){if(e=o,n=r,t.offset===n&&zt(e))break}else e||(e=o,n=r);if(r+=s,r>t.offset)break}return[e,n]}findAttachmentElementParentForNode(t){for(;t&&t!==this.element;){if(Tt(t))return t;t=t.parentNode}}getSignificantNodesForIndex(t){let e=[],n=je(this.element,{usingFilter:Os}),r=!1;for(;n.nextNode();){let s=n.currentNode;var o;if(Vt(s)){if(o!=null?o++:o=0,o===t)r=!0;else if(r)break}else r&&e.push(s)}return e}},Un=function(i){return i.nodeType===Node.TEXT_NODE?zt(i)?0:i.textContent.length:j(i)==="br"||Tt(i)?1:0},Os=function(i){return Fs(i)===NodeFilter.FILTER_ACCEPT?Yr(i):NodeFilter.FILTER_REJECT},Fs=function(i){return Or(i)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},Yr=function(i){return Tt(i.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},Qe=class{createDOMRangeFromPoint(t){let e,{x:n,y:r}=t;if(document.caretPositionFromPoint){let{offsetNode:o,offset:s}=document.caretPositionFromPoint(n,r);return e=document.createRange(),e.setStart(o,s),e}if(document.caretRangeFromPoint)return document.caretRangeFromPoint(n,r);if(document.body.createTextRange){let o=me();try{let s=document.body.createTextRange();s.moveToPoint(n,r),s.select()}catch{}return e=me(),Wr(o),e}}getClientRectsForDOMRange(t){let e=Array.from(t.getClientRects());return[e[0],e[e.length-1]]}},ct=class extends R{constructor(t){super(...arguments),this.didMouseDown=this.didMouseDown.bind(this),this.selectionDidChange=this.selectionDidChange.bind(this),this.element=t,this.locationMapper=new Ze(this.element),this.pointMapper=new Qe,this.lockCount=0,S("mousedown",{onElement:this.element,withCallback:this.didMouseDown})}getLocationRange(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return t.strict===!1?this.createLocationRangeFromDOMRange(me()):t.ignoreLock?this.currentLocationRange:this.lockedLocationRange?this.lockedLocationRange:this.currentLocationRange}setLocationRange(t){if(this.lockedLocationRange)return;t=y(t);let e=this.createDOMRangeFromLocationRange(t);e&&(Wr(e),this.updateCurrentLocationRange(t))}setLocationRangeFromPointRange(t){t=y(t);let e=this.getLocationAtPoint(t[0]),n=this.getLocationAtPoint(t[1]);this.setLocationRange([e,n])}getClientRectAtLocationRange(t){let e=this.createDOMRangeFromLocationRange(t);if(e)return this.getClientRectsForDOMRange(e)[1]}locationIsCursorTarget(t){let e=Array.from(this.findNodeAndOffsetFromLocation(t))[0];return zt(e)}lock(){this.lockCount++==0&&(this.updateCurrentLocationRange(),this.lockedLocationRange=this.getLocationRange())}unlock(){if(--this.lockCount==0){let{lockedLocationRange:t}=this;if(this.lockedLocationRange=null,t!=null)return this.setLocationRange(t)}}clearSelection(){var t;return(t=jr())===null||t===void 0?void 0:t.removeAllRanges()}selectionIsCollapsed(){var t;return((t=me())===null||t===void 0?void 0:t.collapsed)===!0}selectionIsExpanded(){return!this.selectionIsCollapsed()}createLocationRangeFromDOMRange(t,e){if(t==null||!this.domRangeWithinElement(t))return;let n=this.findLocationFromContainerAndOffset(t.startContainer,t.startOffset,e);if(!n)return;let r=t.collapsed?void 0:this.findLocationFromContainerAndOffset(t.endContainer,t.endOffset,e);return y([n,r])}didMouseDown(){return this.pauseTemporarily()}pauseTemporarily(){let t;this.paused=!0;let e=()=>{if(this.paused=!1,clearTimeout(n),Array.from(t).forEach(r=>{r.destroy()}),kt(document,this.element))return this.selectionDidChange()},n=setTimeout(e,200);t=["mousemove","keydown"].map(r=>S(r,{onElement:document,withCallback:e}))}selectionDidChange(){if(!this.paused&&!fi(this.element))return this.updateCurrentLocationRange()}updateCurrentLocationRange(t){var e,n;if((t??(t=this.createLocationRangeFromDOMRange(me())))&&!We(t,this.currentLocationRange))return this.currentLocationRange=t,(e=this.delegate)===null||e===void 0||(n=e.locationRangeDidChange)===null||n===void 0?void 0:n.call(e,this.currentLocationRange.slice(0))}createDOMRangeFromLocationRange(t){let e=this.findContainerAndOffsetFromLocation(t[0]),n=ut(t)?e:this.findContainerAndOffsetFromLocation(t[1])||e;if(e!=null&&n!=null){let r=document.createRange();return r.setStart(...Array.from(e||[])),r.setEnd(...Array.from(n||[])),r}}getLocationAtPoint(t){let e=this.createDOMRangeFromPoint(t);var n;if(e)return(n=this.createLocationRangeFromDOMRange(e))===null||n===void 0?void 0:n[0]}domRangeWithinElement(t){return t.collapsed?kt(this.element,t.startContainer):kt(this.element,t.startContainer)&&kt(this.element,t.endContainer)}};ct.proxyMethod("locationMapper.findLocationFromContainerAndOffset"),ct.proxyMethod("locationMapper.findContainerAndOffsetFromLocation"),ct.proxyMethod("locationMapper.findNodeAndOffsetFromLocation"),ct.proxyMethod("pointMapper.createDOMRangeFromPoint"),ct.proxyMethod("pointMapper.getClientRectsForDOMRange");var Xr=Object.freeze({__proto__:null,Attachment:Kt,AttachmentManager:Ge,AttachmentPiece:Gt,Block:bt,Composition:it,Document:V,Editor:Xe,HTMLParser:Ft,HTMLSanitizer:qt,LineBreakInsertion:$e,LocationMapper:Ze,ManagedAttachment:E,Piece:gt,PointMapper:Qe,SelectionManager:ct,SplittableList:$t,StringPiece:ve,Text:J,UndoManager:Ae}),Ps=Object.freeze({__proto__:null,ObjectView:dt,AttachmentView:be,BlockView:Je,DocumentView:Jt,PieceView:He,PreviewableAttachmentView:ze,TextView:qe}),{lang:Vn,css:Et,keyNames:Ms}=Ce,zn=function(i){return function(){let t=i.apply(this,arguments);t.do(),this.undos||(this.undos=[]),this.undos.push(t.undo)}},tn=class extends R{constructor(t,e,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(...arguments),z(this,"makeElementMutable",zn(()=>({do:()=>{this.element.dataset.trixMutable=!0},undo:()=>delete this.element.dataset.trixMutable}))),z(this,"addToolbar",zn(()=>{let o=p({tagName:"div",className:Et.attachmentToolbar,data:{trixMutable:!0},childNodes:p({tagName:"div",className:"trix-button-row",childNodes:p({tagName:"span",className:"trix-button-group trix-button-group--actions",childNodes:p({tagName:"button",className:"trix-button trix-button--remove",textContent:Vn.remove,attributes:{title:Vn.remove},data:{trixAction:"remove"}})})})});return this.attachment.isPreviewable()&&o.appendChild(p({tagName:"div",className:Et.attachmentMetadataContainer,childNodes:p({tagName:"span",className:Et.attachmentMetadata,childNodes:[p({tagName:"span",className:Et.attachmentName,textContent:this.attachment.getFilename(),attributes:{title:this.attachment.getFilename()}}),p({tagName:"span",className:Et.attachmentSize,textContent:this.attachment.getFormattedFilesize()})]})})),S("click",{onElement:o,withCallback:this.didClickToolbar}),S("click",{onElement:o,matchingSelector:"[data-trix-action]",withCallback:this.didClickActionButton}),he("trix-attachment-before-toolbar",{onElement:this.element,attributes:{toolbar:o,attachment:this.attachment}}),{do:()=>this.element.appendChild(o),undo:()=>At(o)}})),z(this,"installCaptionEditor",zn(()=>{let o=p({tagName:"textarea",className:Et.attachmentCaptionEditor,attributes:{placeholder:Vn.captionPlaceholder},data:{trixMutable:!0}});o.value=this.attachmentPiece.getCaption();let s=o.cloneNode();s.classList.add("trix-autoresize-clone"),s.tabIndex=-1;let l=function(){s.value=o.value,o.style.height=s.scrollHeight+"px"};S("input",{onElement:o,withCallback:l}),S("input",{onElement:o,withCallback:this.didInputCaption}),S("keydown",{onElement:o,withCallback:this.didKeyDownCaption}),S("change",{onElement:o,withCallback:this.didChangeCaption}),S("blur",{onElement:o,withCallback:this.didBlurCaption});let c=this.element.querySelector("figcaption"),u=c.cloneNode();return{do:()=>{if(c.style.display="none",u.appendChild(o),u.appendChild(s),u.classList.add("".concat(Et.attachmentCaption,"--editing")),c.parentElement.insertBefore(u,c),l(),this.options.editCaption)return Ai(()=>o.focus())},undo(){At(u),c.style.display=null}}})),this.didClickToolbar=this.didClickToolbar.bind(this),this.didClickActionButton=this.didClickActionButton.bind(this),this.didKeyDownCaption=this.didKeyDownCaption.bind(this),this.didInputCaption=this.didInputCaption.bind(this),this.didChangeCaption=this.didChangeCaption.bind(this),this.didBlurCaption=this.didBlurCaption.bind(this),this.attachmentPiece=t,this.element=e,this.container=n,this.options=r,this.attachment=this.attachmentPiece.attachment,j(this.element)==="a"&&(this.element=this.element.firstChild),this.install()}install(){this.makeElementMutable(),this.addToolbar(),this.attachment.isPreviewable()&&this.installCaptionEditor()}uninstall(){var t;let e=this.undos.pop();for(this.savePendingCaption();e;)e(),e=this.undos.pop();(t=this.delegate)===null||t===void 0||t.didUninstallAttachmentEditor(this)}savePendingCaption(){if(this.pendingCaption!=null){let o=this.pendingCaption;var t,e,n,r;this.pendingCaption=null,o?(t=this.delegate)===null||t===void 0||(e=t.attachmentEditorDidRequestUpdatingAttributesForAttachment)===null||e===void 0||e.call(t,{caption:o},this.attachment):(n=this.delegate)===null||n===void 0||(r=n.attachmentEditorDidRequestRemovingAttributeForAttachment)===null||r===void 0||r.call(n,"caption",this.attachment)}}didClickToolbar(t){return t.preventDefault(),t.stopPropagation()}didClickActionButton(t){var e;if(t.target.getAttribute("data-trix-action")==="remove")return(e=this.delegate)===null||e===void 0?void 0:e.attachmentEditorDidRequestRemovalOfAttachment(this.attachment)}didKeyDownCaption(t){var e,n;if(Ms[t.keyCode]==="return")return t.preventDefault(),this.savePendingCaption(),(e=this.delegate)===null||e===void 0||(n=e.attachmentEditorDidRequestDeselectingAttachment)===null||n===void 0?void 0:n.call(e,this.attachment)}didInputCaption(t){this.pendingCaption=t.target.value.replace(/\s/g," ").trim()}didChangeCaption(t){return this.savePendingCaption()}didBlurCaption(t){return this.savePendingCaption()}},en=class extends R{constructor(t,e){super(...arguments),this.didFocus=this.didFocus.bind(this),this.didBlur=this.didBlur.bind(this),this.didClickAttachment=this.didClickAttachment.bind(this),this.element=t,this.composition=e,this.documentView=new Jt(this.composition.document,{element:this.element}),S("focus",{onElement:this.element,withCallback:this.didFocus}),S("blur",{onElement:this.element,withCallback:this.didBlur}),S("click",{onElement:this.element,matchingSelector:"a[contenteditable=false]",preventDefault:!0}),S("mousedown",{onElement:this.element,matchingSelector:Rt,withCallback:this.didClickAttachment}),S("click",{onElement:this.element,matchingSelector:"a".concat(Rt),preventDefault:!0})}didFocus(t){var e;let n=()=>{var r,o;if(!this.focused)return this.focused=!0,(r=this.delegate)===null||r===void 0||(o=r.compositionControllerDidFocus)===null||o===void 0?void 0:o.call(r)};return((e=this.blurPromise)===null||e===void 0?void 0:e.then(n))||n()}didBlur(t){this.blurPromise=new Promise(e=>Ai(()=>{var n,r;return fi(this.element)||(this.focused=null,(n=this.delegate)===null||n===void 0||(r=n.compositionControllerDidBlur)===null||r===void 0||r.call(n)),this.blurPromise=null,e()}))}didClickAttachment(t,e){var n,r;let o=this.findAttachmentForElement(e),s=!!vt(t.target,{matchingSelector:"figcaption"});return(n=this.delegate)===null||n===void 0||(r=n.compositionControllerDidSelectAttachment)===null||r===void 0?void 0:r.call(n,o,{editCaption:s})}getSerializableElement(){return this.isEditingAttachment()?this.documentView.shadowElement:this.element}render(){var t,e,n,r,o,s;return this.revision!==this.composition.revision&&(this.documentView.setDocument(this.composition.document),this.documentView.render(),this.revision=this.composition.revision),this.canSyncDocumentView()&&!this.documentView.isSynced()&&((n=this.delegate)===null||n===void 0||(r=n.compositionControllerWillSyncDocumentView)===null||r===void 0||r.call(n),this.documentView.sync(),(o=this.delegate)===null||o===void 0||(s=o.compositionControllerDidSyncDocumentView)===null||s===void 0||s.call(o)),(t=this.delegate)===null||t===void 0||(e=t.compositionControllerDidRender)===null||e===void 0?void 0:e.call(t)}rerenderViewForObject(t){return this.invalidateViewForObject(t),this.render()}invalidateViewForObject(t){return this.documentView.invalidateViewForObject(t)}isViewCachingEnabled(){return this.documentView.isViewCachingEnabled()}enableViewCaching(){return this.documentView.enableViewCaching()}disableViewCaching(){return this.documentView.disableViewCaching()}refreshViewCache(){return this.documentView.garbageCollectCachedViews()}isEditingAttachment(){return!!this.attachmentEditor}installAttachmentEditorForAttachment(t,e){var n;if(((n=this.attachmentEditor)===null||n===void 0?void 0:n.attachment)===t)return;let r=this.documentView.findElementForObject(t);if(!r)return;this.uninstallAttachmentEditor();let o=this.composition.document.getAttachmentPieceForAttachment(t);this.attachmentEditor=new tn(o,r,this.element,e),this.attachmentEditor.delegate=this}uninstallAttachmentEditor(){var t;return(t=this.attachmentEditor)===null||t===void 0?void 0:t.uninstall()}didUninstallAttachmentEditor(){return this.attachmentEditor=null,this.render()}attachmentEditorDidRequestUpdatingAttributesForAttachment(t,e){var n,r;return(n=this.delegate)===null||n===void 0||(r=n.compositionControllerWillUpdateAttachment)===null||r===void 0||r.call(n,e),this.composition.updateAttributesForAttachment(t,e)}attachmentEditorDidRequestRemovingAttributeForAttachment(t,e){var n,r;return(n=this.delegate)===null||n===void 0||(r=n.compositionControllerWillUpdateAttachment)===null||r===void 0||r.call(n,e),this.composition.removeAttributeForAttachment(t,e)}attachmentEditorDidRequestRemovalOfAttachment(t){var e,n;return(e=this.delegate)===null||e===void 0||(n=e.compositionControllerDidRequestRemovalOfAttachment)===null||n===void 0?void 0:n.call(e,t)}attachmentEditorDidRequestDeselectingAttachment(t){var e,n;return(e=this.delegate)===null||e===void 0||(n=e.compositionControllerDidRequestDeselectingAttachment)===null||n===void 0?void 0:n.call(e,t)}canSyncDocumentView(){return!this.isEditingAttachment()}findAttachmentForElement(t){return this.composition.document.getAttachmentById(parseInt(t.dataset.trixId,10))}},nn=class extends R{},Zr="data-trix-mutable",Bs="[".concat(Zr,"]"),_s={attributes:!0,childList:!0,characterData:!0,characterDataOldValue:!0,subtree:!0},rn=class extends R{constructor(t){super(t),this.didMutate=this.didMutate.bind(this),this.element=t,this.observer=new window.MutationObserver(this.didMutate),this.start()}start(){return this.reset(),this.observer.observe(this.element,_s)}stop(){return this.observer.disconnect()}didMutate(t){var e,n;if(this.mutations.push(...Array.from(this.findSignificantMutations(t)||[])),this.mutations.length)return(e=this.delegate)===null||e===void 0||(n=e.elementDidMutate)===null||n===void 0||n.call(e,this.getMutationSummary()),this.reset()}reset(){this.mutations=[]}findSignificantMutations(t){return t.filter(e=>this.mutationIsSignificant(e))}mutationIsSignificant(t){if(this.nodeIsMutable(t.target))return!1;for(let e of Array.from(this.nodesModifiedByMutation(t)))if(this.nodeIsSignificant(e))return!0;return!1}nodeIsSignificant(t){return t!==this.element&&!this.nodeIsMutable(t)&&!Or(t)}nodeIsMutable(t){return vt(t,{matchingSelector:Bs})}nodesModifiedByMutation(t){let e=[];switch(t.type){case"attributes":t.attributeName!==Zr&&e.push(t.target);break;case"characterData":e.push(t.target.parentNode),e.push(t.target);break;case"childList":e.push(...Array.from(t.addedNodes||[])),e.push(...Array.from(t.removedNodes||[]))}return e}getMutationSummary(){return this.getTextMutationSummary()}getTextMutationSummary(){let{additions:t,deletions:e}=this.getTextChangesFromCharacterData(),n=this.getTextChangesFromChildList();Array.from(n.additions).forEach(l=>{Array.from(t).includes(l)||t.push(l)}),e.push(...Array.from(n.deletions||[]));let r={},o=t.join("");o&&(r.textAdded=o);let s=e.join("");return s&&(r.textDeleted=s),r}getMutationsByType(t){return Array.from(this.mutations).filter(e=>e.type===t)}getTextChangesFromChildList(){let t,e,n=[],r=[];Array.from(this.getMutationsByType("childList")).forEach(l=>{n.push(...Array.from(l.addedNodes||[])),r.push(...Array.from(l.removedNodes||[]))}),n.length===0&&r.length===1&&Vt(r[0])?(t=[],e=[` +`]):(t=li(n),e=li(r));let o=t.filter((l,c)=>l!==e[c]).map(ue),s=e.filter((l,c)=>l!==t[c]).map(ue);return{additions:o,deletions:s}}getTextChangesFromCharacterData(){let t,e,n=this.getMutationsByType("characterData");if(n.length){let r=n[0],o=n[n.length-1],s=function(l,c){let u,d;return l=Nt.box(l),(c=Nt.box(c)).length0&&arguments[0]!==void 0?arguments[0]:[],t=[];for(let e of Array.from(i))switch(e.nodeType){case Node.TEXT_NODE:t.push(e.data);break;case Node.ELEMENT_NODE:j(e)==="br"?t.push(` +`):t.push(...Array.from(li(e.childNodes)||[]))}return t},on=class extends Ht{constructor(t){super(...arguments),this.file=t}perform(t){let e=new FileReader;return e.onerror=()=>t(!1),e.onload=()=>{e.onerror=null;try{e.abort()}catch{}return t(!0,this.file)},e.readAsArrayBuffer(this.file)}},ci=class{constructor(t){this.element=t}shouldIgnore(t){return!!xe.samsungAndroid&&(this.previousEvent=this.event,this.event=t,this.checkSamsungKeyboardBuggyModeStart(),this.checkSamsungKeyboardBuggyModeEnd(),this.buggyMode)}checkSamsungKeyboardBuggyModeStart(){this.insertingLongTextAfterUnidentifiedChar()&&js(this.element.innerText,this.event.data)&&(this.buggyMode=!0,this.event.preventDefault())}checkSamsungKeyboardBuggyModeEnd(){this.buggyMode&&this.event.inputType!=="insertText"&&(this.buggyMode=!1)}insertingLongTextAfterUnidentifiedChar(){var t;return this.isBeforeInputInsertText()&&this.previousEventWasUnidentifiedKeydown()&&((t=this.event.data)===null||t===void 0?void 0:t.length)>50}isBeforeInputInsertText(){return this.event.type==="beforeinput"&&this.event.inputType==="insertText"}previousEventWasUnidentifiedKeydown(){var t,e;return((t=this.previousEvent)===null||t===void 0?void 0:t.type)==="keydown"&&((e=this.previousEvent)===null||e===void 0?void 0:e.key)==="Unidentified"}},js=(i,t)=>Sr(i)===Sr(t),Ws=new RegExp("(".concat("\uFFFC","|").concat(ln,"|").concat(ft,"|\\s)+"),"g"),Sr=i=>i.replace(Ws," ").trim(),Yt=class extends R{constructor(t){super(...arguments),this.element=t,this.mutationObserver=new rn(this.element),this.mutationObserver.delegate=this,this.flakyKeyboardDetector=new ci(this.element);for(let e in this.constructor.events)S(e,{onElement:this.element,withCallback:this.handlerFor(e)})}elementDidMutate(t){}editorWillSyncDocumentView(){return this.mutationObserver.stop()}editorDidSyncDocumentView(){return this.mutationObserver.start()}requestRender(){var t,e;return(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidRequestRender)===null||e===void 0?void 0:e.call(t)}requestReparse(){var t,e;return(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidRequestReparse)===null||e===void 0||e.call(t),this.requestRender()}attachFiles(t){let e=Array.from(t).map(n=>new on(n));return Promise.all(e).then(n=>{this.handleInput(function(){var r,o;return(r=this.delegate)===null||r===void 0||r.inputControllerWillAttachFiles(),(o=this.responder)===null||o===void 0||o.insertFiles(n),this.requestRender()})})}handlerFor(t){return e=>{e.defaultPrevented||this.handleInput(()=>{if(!fi(this.element)){if(this.flakyKeyboardDetector.shouldIgnore(e))return;this.eventName=t,this.constructor.events[t].call(this,e)}})}}handleInput(t){try{var e;(e=this.delegate)===null||e===void 0||e.inputControllerWillHandleInput(),t.call(this)}finally{var n;(n=this.delegate)===null||n===void 0||n.inputControllerDidHandleInput()}}createLinkHTML(t,e){let n=document.createElement("a");return n.href=t,n.textContent=e||t,n.outerHTML}},Hn;z(Yt,"events",{});var{browser:Us,keyNames:Qr}=Ce,Vs=0,Y=class extends Yt{constructor(){super(...arguments),this.resetInputSummary()}setInputSummary(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.inputSummary.eventName=this.eventName;for(let e in t){let n=t[e];this.inputSummary[e]=n}return this.inputSummary}resetInputSummary(){this.inputSummary={}}reset(){return this.resetInputSummary(),Ot.reset()}elementDidMutate(t){var e,n;return this.isComposing()?(e=this.delegate)===null||e===void 0||(n=e.inputControllerDidAllowUnhandledInput)===null||n===void 0?void 0:n.call(e):this.handleInput(function(){return this.mutationIsSignificant(t)&&(this.mutationIsExpected(t)?this.requestRender():this.requestReparse()),this.reset()})}mutationIsExpected(t){let{textAdded:e,textDeleted:n}=t;if(this.inputSummary.preferDocument)return!0;let r=e!=null?e===this.inputSummary.textAdded:!this.inputSummary.textAdded,o=n!=null?this.inputSummary.didDelete:!this.inputSummary.didDelete,s=[` +`,` +`].includes(e)&&!r,l=n===` +`&&!o;if(s&&!l||l&&!s){let u=this.getSelectedRange();if(u){var c;let d=s?e.replace(/\n$/,"").length||-1:e?.length||1;if((c=this.responder)!==null&&c!==void 0&&c.positionIsBlockBreak(u[1]+d))return!0}}return r&&o}mutationIsSignificant(t){var e;let n=Object.keys(t).length>0,r=((e=this.compositionInput)===null||e===void 0?void 0:e.getEndData())==="";return n||!r}getCompositionInput(){if(this.isComposing())return this.compositionInput;this.compositionInput=new nt(this)}isComposing(){return this.compositionInput&&!this.compositionInput.isEnded()}deleteInDirection(t,e){var n;return((n=this.responder)===null||n===void 0?void 0:n.deleteInDirection(t))!==!1?this.setInputSummary({didDelete:!0}):e?(e.preventDefault(),this.requestRender()):void 0}serializeSelectionToDataTransfer(t){var e;if(!function(r){if(r==null||!r.setData)return!1;for(let o in Qi){let s=Qi[o];try{if(r.setData(o,s),!r.getData(o)===s)return!1}catch{return!1}}return!0}(t))return;let n=(e=this.responder)===null||e===void 0?void 0:e.getSelectedDocument().toSerializableDocument();return t.setData("application/x-trix-document",JSON.stringify(n)),t.setData("text/html",Jt.render(n).innerHTML),t.setData("text/plain",n.toString().replace(/\n$/,"")),!0}canAcceptDataTransfer(t){let e={};return Array.from(t?.types||[]).forEach(n=>{e[n]=!0}),e.Files||e["application/x-trix-document"]||e["text/html"]||e["text/plain"]}getPastedHTMLUsingHiddenElement(t){let e=this.getSelectedRange(),n={position:"absolute",left:"".concat(window.pageXOffset,"px"),top:"".concat(window.pageYOffset,"px"),opacity:0},r=p({style:n,tagName:"div",editable:!0});return document.body.appendChild(r),r.focus(),requestAnimationFrame(()=>{let o=r.innerHTML;return At(r),this.setSelectedRange(e),t(o)})}};z(Y,"events",{keydown(i){this.isComposing()||this.resetInputSummary(),this.inputSummary.didInput=!0;let t=Qr[i.keyCode];if(t){var e;let r=this.keys;["ctrl","alt","shift","meta"].forEach(o=>{var s;i["".concat(o,"Key")]&&(o==="ctrl"&&(o="control"),r=(s=r)===null||s===void 0?void 0:s[o])}),((e=r)===null||e===void 0?void 0:e[t])!=null&&(this.setInputSummary({keyName:t}),Ot.reset(),r[t].call(this,i))}if(Br(i)){let r=String.fromCharCode(i.keyCode).toLowerCase();if(r){var n;let o=["alt","shift"].map(s=>{if(i["".concat(s,"Key")])return s}).filter(s=>s);o.push(r),(n=this.delegate)!==null&&n!==void 0&&n.inputControllerDidReceiveKeyboardCommand(o)&&i.preventDefault()}}},keypress(i){if(this.inputSummary.eventName!=null||i.metaKey||i.ctrlKey&&!i.altKey)return;let t=qs(i);var e,n;return t?((e=this.delegate)===null||e===void 0||e.inputControllerWillPerformTyping(),(n=this.responder)===null||n===void 0||n.insertString(t),this.setInputSummary({textAdded:t,didDelete:this.selectionIsExpanded()})):void 0},textInput(i){let{data:t}=i,{textAdded:e}=this.inputSummary;if(e&&e!==t&&e.toUpperCase()===t){var n;let r=this.getSelectedRange();return this.setSelectedRange([r[0],r[1]+e.length]),(n=this.responder)===null||n===void 0||n.insertString(t),this.setInputSummary({textAdded:t}),this.setSelectedRange(r)}},dragenter(i){i.preventDefault()},dragstart(i){var t,e;return this.serializeSelectionToDataTransfer(i.dataTransfer),this.draggedRange=this.getSelectedRange(),(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidStartDrag)===null||e===void 0?void 0:e.call(t)},dragover(i){if(this.draggedRange||this.canAcceptDataTransfer(i.dataTransfer)){i.preventDefault();let n={x:i.clientX,y:i.clientY};var t,e;if(!Xt(n,this.draggingPoint))return this.draggingPoint=n,(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidReceiveDragOverPoint)===null||e===void 0?void 0:e.call(t,this.draggingPoint)}},dragend(i){var t,e;(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidCancelDrag)===null||e===void 0||e.call(t),this.draggedRange=null,this.draggingPoint=null},drop(i){var t,e;i.preventDefault();let n=(t=i.dataTransfer)===null||t===void 0?void 0:t.files,r=i.dataTransfer.getData("application/x-trix-document"),o={x:i.clientX,y:i.clientY};if((e=this.responder)===null||e===void 0||e.setLocationRangeFromPointRange(o),n!=null&&n.length)this.attachFiles(n);else if(this.draggedRange){var s,l;(s=this.delegate)===null||s===void 0||s.inputControllerWillMoveText(),(l=this.responder)===null||l===void 0||l.moveTextFromRange(this.draggedRange),this.draggedRange=null,this.requestRender()}else if(r){var c;let u=V.fromJSONString(r);(c=this.responder)===null||c===void 0||c.insertDocument(u),this.requestRender()}this.draggedRange=null,this.draggingPoint=null},cut(i){var t,e;if((t=this.responder)!==null&&t!==void 0&&t.selectionIsExpanded()&&(this.serializeSelectionToDataTransfer(i.clipboardData)&&i.preventDefault(),(e=this.delegate)===null||e===void 0||e.inputControllerWillCutText(),this.deleteInDirection("backward"),i.defaultPrevented))return this.requestRender()},copy(i){var t;(t=this.responder)!==null&&t!==void 0&&t.selectionIsExpanded()&&this.serializeSelectionToDataTransfer(i.clipboardData)&&i.preventDefault()},paste(i){let t=i.clipboardData||i.testClipboardData,e={clipboard:t};if(!t||Js(i))return void this.getPastedHTMLUsingHiddenElement(F=>{var k,rt,xt;return e.type="text/html",e.html=F,(k=this.delegate)===null||k===void 0||k.inputControllerWillPaste(e),(rt=this.responder)===null||rt===void 0||rt.insertHTML(e.html),this.requestRender(),(xt=this.delegate)===null||xt===void 0?void 0:xt.inputControllerDidPaste(e)});let n=t.getData("URL"),r=t.getData("text/html"),o=t.getData("public.url-name");if(n){var s,l,c;let F;e.type="text/html",F=o?xi(o).trim():n,e.html=this.createLinkHTML(n,F),(s=this.delegate)===null||s===void 0||s.inputControllerWillPaste(e),this.setInputSummary({textAdded:F,didDelete:this.selectionIsExpanded()}),(l=this.responder)===null||l===void 0||l.insertHTML(e.html),this.requestRender(),(c=this.delegate)===null||c===void 0||c.inputControllerDidPaste(e)}else if(Mr(t)){var u,d,C;e.type="text/plain",e.string=t.getData("text/plain"),(u=this.delegate)===null||u===void 0||u.inputControllerWillPaste(e),this.setInputSummary({textAdded:e.string,didDelete:this.selectionIsExpanded()}),(d=this.responder)===null||d===void 0||d.insertString(e.string),this.requestRender(),(C=this.delegate)===null||C===void 0||C.inputControllerDidPaste(e)}else if(r){var T,H,Q;e.type="text/html",e.html=r,(T=this.delegate)===null||T===void 0||T.inputControllerWillPaste(e),(H=this.responder)===null||H===void 0||H.insertHTML(e.html),this.requestRender(),(Q=this.delegate)===null||Q===void 0||Q.inputControllerDidPaste(e)}else if(Array.from(t.types).includes("Files")){var M,mt;let F=(M=t.items)===null||M===void 0||(M=M[0])===null||M===void 0||(mt=M.getAsFile)===null||mt===void 0?void 0:mt.call(M);if(F){var yt,Zt,Qt;let k=zs(F);!F.name&&k&&(F.name="pasted-file-".concat(++Vs,".").concat(k)),e.type="File",e.file=F,(yt=this.delegate)===null||yt===void 0||yt.inputControllerWillAttachFiles(),(Zt=this.responder)===null||Zt===void 0||Zt.insertFile(e.file),this.requestRender(),(Qt=this.delegate)===null||Qt===void 0||Qt.inputControllerDidPaste(e)}}i.preventDefault()},compositionstart(i){return this.getCompositionInput().start(i.data)},compositionupdate(i){return this.getCompositionInput().update(i.data)},compositionend(i){return this.getCompositionInput().end(i.data)},beforeinput(i){this.inputSummary.didInput=!0},input(i){return this.inputSummary.didInput=!0,i.stopPropagation()}}),z(Y,"keys",{backspace(i){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("backward",i)},delete(i){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("forward",i)},return(i){var t,e;return this.setInputSummary({preferDocument:!0}),(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0?void 0:e.insertLineBreak()},tab(i){var t,e;(t=this.responder)!==null&&t!==void 0&&t.canIncreaseNestingLevel()&&((e=this.responder)===null||e===void 0||e.increaseNestingLevel(),this.requestRender(),i.preventDefault())},left(i){var t;if(this.selectionIsInCursorTarget())return i.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("backward")},right(i){var t;if(this.selectionIsInCursorTarget())return i.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("forward")},control:{d(i){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("forward",i)},h(i){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("backward",i)},o(i){var t,e;return i.preventDefault(),(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0||e.insertString(` +`,{updatePosition:!1}),this.requestRender()}},shift:{return(i){var t,e;(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0||e.insertString(` +`),this.requestRender(),i.preventDefault()},tab(i){var t,e;(t=this.responder)!==null&&t!==void 0&&t.canDecreaseNestingLevel()&&((e=this.responder)===null||e===void 0||e.decreaseNestingLevel(),this.requestRender(),i.preventDefault())},left(i){if(this.selectionIsInCursorTarget())return i.preventDefault(),this.expandSelectionInDirection("backward")},right(i){if(this.selectionIsInCursorTarget())return i.preventDefault(),this.expandSelectionInDirection("forward")}},alt:{backspace(i){var t;return this.setInputSummary({preferDocument:!1}),(t=this.delegate)===null||t===void 0?void 0:t.inputControllerWillPerformTyping()}},meta:{backspace(i){var t;return this.setInputSummary({preferDocument:!1}),(t=this.delegate)===null||t===void 0?void 0:t.inputControllerWillPerformTyping()}}}),Y.proxyMethod("responder?.getSelectedRange"),Y.proxyMethod("responder?.setSelectedRange"),Y.proxyMethod("responder?.expandSelectionInDirection"),Y.proxyMethod("responder?.selectionIsInCursorTarget"),Y.proxyMethod("responder?.selectionIsExpanded");var zs=i=>{var t;return(t=i.type)===null||t===void 0||(t=t.match(/\/(\w+)$/))===null||t===void 0?void 0:t[1]},Hs=!((Hn=" ".codePointAt)===null||Hn===void 0||!Hn.call(" ",0)),qs=function(i){if(i.key&&Hs&&i.key.codePointAt(0)===i.keyCode)return i.key;{let t;if(i.which===null?t=i.keyCode:i.which!==0&&i.charCode!==0&&(t=i.charCode),t!=null&&Qr[t]!=="escape")return Nt.fromCodepoints([t]).toString()}},Js=function(i){let t=i.clipboardData;if(t){if(t.types.includes("text/html")){for(let e of t.types){let n=/^CorePasteboardFlavorType/.test(e),r=/^dyn\./.test(e)&&t.getData(e);if(n||r)return!0}return!1}{let e=t.types.includes("com.apple.webarchive"),n=t.types.includes("com.apple.flat-rtfd");return e||n}}},nt=class extends R{constructor(t){super(...arguments),this.inputController=t,this.responder=this.inputController.responder,this.delegate=this.inputController.delegate,this.inputSummary=this.inputController.inputSummary,this.data={}}start(t){if(this.data.start=t,this.isSignificant()){var e,n;this.inputSummary.eventName==="keypress"&&this.inputSummary.textAdded&&((n=this.responder)===null||n===void 0||n.deleteInDirection("left")),this.selectionIsExpanded()||(this.insertPlaceholder(),this.requestRender()),this.range=(e=this.responder)===null||e===void 0?void 0:e.getSelectedRange()}}update(t){if(this.data.update=t,this.isSignificant()){let e=this.selectPlaceholder();e&&(this.forgetPlaceholder(),this.range=e)}}end(t){return this.data.end=t,this.isSignificant()?(this.forgetPlaceholder(),this.canApplyToDocument()?(this.setInputSummary({preferDocument:!0,didInput:!1}),(e=this.delegate)===null||e===void 0||e.inputControllerWillPerformTyping(),(n=this.responder)===null||n===void 0||n.setSelectedRange(this.range),(r=this.responder)===null||r===void 0||r.insertString(this.data.end),(o=this.responder)===null||o===void 0?void 0:o.setSelectedRange(this.range[0]+this.data.end.length)):this.data.start!=null||this.data.update!=null?(this.requestReparse(),this.inputController.reset()):void 0):this.inputController.reset();var e,n,r,o}getEndData(){return this.data.end}isEnded(){return this.getEndData()!=null}isSignificant(){return!Us.composesExistingText||this.inputSummary.didInput}canApplyToDocument(){var t,e;return((t=this.data.start)===null||t===void 0?void 0:t.length)===0&&((e=this.data.end)===null||e===void 0?void 0:e.length)>0&&this.range}};nt.proxyMethod("inputController.setInputSummary"),nt.proxyMethod("inputController.requestRender"),nt.proxyMethod("inputController.requestReparse"),nt.proxyMethod("responder?.selectionIsExpanded"),nt.proxyMethod("responder?.insertPlaceholder"),nt.proxyMethod("responder?.selectPlaceholder"),nt.proxyMethod("responder?.forgetPlaceholder");var wt=class extends Yt{constructor(){super(...arguments),this.render=this.render.bind(this)}elementDidMutate(){return this.scheduledRender?this.composing?(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidAllowUnhandledInput)===null||e===void 0?void 0:e.call(t):void 0:this.reparse();var t,e}scheduleRender(){return this.scheduledRender?this.scheduledRender:this.scheduledRender=requestAnimationFrame(this.render)}render(){var t,e;cancelAnimationFrame(this.scheduledRender),this.scheduledRender=null,this.composing||(e=this.delegate)===null||e===void 0||e.render(),(t=this.afterRender)===null||t===void 0||t.call(this),this.afterRender=null}reparse(){var t;return(t=this.delegate)===null||t===void 0?void 0:t.reparse()}insertString(){var t;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",n=arguments.length>1?arguments[1]:void 0;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.withTargetDOMRange(function(){var r;return(r=this.responder)===null||r===void 0?void 0:r.insertString(e,n)})}toggleAttributeIfSupported(t){var e;if(Qn().includes(t))return(e=this.delegate)===null||e===void 0||e.inputControllerWillPerformFormatting(t),this.withTargetDOMRange(function(){var n;return(n=this.responder)===null||n===void 0?void 0:n.toggleCurrentAttribute(t)})}activateAttributeIfSupported(t,e){var n;if(Qn().includes(t))return(n=this.delegate)===null||n===void 0||n.inputControllerWillPerformFormatting(t),this.withTargetDOMRange(function(){var r;return(r=this.responder)===null||r===void 0?void 0:r.setCurrentAttribute(t,e)})}deleteInDirection(t){let{recordUndoEntry:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{recordUndoEntry:!0};var n;e&&((n=this.delegate)===null||n===void 0||n.inputControllerWillPerformTyping());let r=()=>{var s;return(s=this.responder)===null||s===void 0?void 0:s.deleteInDirection(t)},o=this.getTargetDOMRange({minLength:this.composing?1:2});return o?this.withTargetDOMRange(o,r):r()}withTargetDOMRange(t,e){var n;return typeof t=="function"&&(e=t,t=this.getTargetDOMRange()),t?(n=this.responder)===null||n===void 0?void 0:n.withTargetDOMRange(t,e.bind(this)):(Ot.reset(),e.call(this))}getTargetDOMRange(){var t,e;let{minLength:n}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{minLength:0},r=(t=(e=this.event).getTargetRanges)===null||t===void 0?void 0:t.call(e);if(r&&r.length){let o=Ks(r[0]);if(n===0||o.toString().length>=n)return o}}withEvent(t,e){let n;this.event=t;try{n=e.call(this)}finally{this.event=null}return n}};z(wt,"events",{keydown(i){if(Br(i)){var t;let e=Ys(i);(t=this.delegate)!==null&&t!==void 0&&t.inputControllerDidReceiveKeyboardCommand(e)&&i.preventDefault()}else{let e=i.key;i.altKey&&(e+="+Alt"),i.shiftKey&&(e+="+Shift");let n=this.constructor.keys[e];if(n)return this.withEvent(i,n)}},paste(i){var t;let e,n=(t=i.clipboardData)===null||t===void 0?void 0:t.getData("URL");return to(i)?(i.preventDefault(),this.attachFiles(i.clipboardData.files)):$s(i)?(i.preventDefault(),e={type:"text/plain",string:i.clipboardData.getData("text/plain")},(r=this.delegate)===null||r===void 0||r.inputControllerWillPaste(e),(o=this.responder)===null||o===void 0||o.insertString(e.string),this.render(),(s=this.delegate)===null||s===void 0?void 0:s.inputControllerDidPaste(e)):n?(i.preventDefault(),e={type:"text/html",html:this.createLinkHTML(n)},(l=this.delegate)===null||l===void 0||l.inputControllerWillPaste(e),(c=this.responder)===null||c===void 0||c.insertHTML(e.html),this.render(),(u=this.delegate)===null||u===void 0?void 0:u.inputControllerDidPaste(e)):void 0;var r,o,s,l,c,u},beforeinput(i){let t=this.constructor.inputTypes[i.inputType],e=(n=i,!(!/iPhone|iPad/.test(navigator.userAgent)||n.inputType&&n.inputType!=="insertParagraph"));var n;t&&(this.withEvent(i,t),e||this.scheduleRender()),e&&this.render()},input(i){Ot.reset()},dragstart(i){var t,e;(t=this.responder)!==null&&t!==void 0&&t.selectionContainsAttachments()&&(i.dataTransfer.setData("application/x-trix-dragging",!0),this.dragging={range:(e=this.responder)===null||e===void 0?void 0:e.getSelectedRange(),point:Jn(i)})},dragenter(i){qn(i)&&i.preventDefault()},dragover(i){if(this.dragging){i.preventDefault();let e=Jn(i);var t;if(!Xt(e,this.dragging.point))return this.dragging.point=e,(t=this.responder)===null||t===void 0?void 0:t.setLocationRangeFromPointRange(e)}else qn(i)&&i.preventDefault()},drop(i){var t,e;if(this.dragging)return i.preventDefault(),(t=this.delegate)===null||t===void 0||t.inputControllerWillMoveText(),(e=this.responder)===null||e===void 0||e.moveTextFromRange(this.dragging.range),this.dragging=null,this.scheduleRender();if(qn(i)){var n;i.preventDefault();let r=Jn(i);return(n=this.responder)===null||n===void 0||n.setLocationRangeFromPointRange(r),this.attachFiles(i.dataTransfer.files)}},dragend(){var i;this.dragging&&((i=this.responder)===null||i===void 0||i.setSelectedRange(this.dragging.range),this.dragging=null)},compositionend(i){this.composing&&(this.composing=!1,xe.recentAndroid||this.scheduleRender())}}),z(wt,"keys",{ArrowLeft(){var i,t;if((i=this.responder)!==null&&i!==void 0&&i.shouldManageMovingCursorInDirection("backward"))return this.event.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("backward")},ArrowRight(){var i,t;if((i=this.responder)!==null&&i!==void 0&&i.shouldManageMovingCursorInDirection("forward"))return this.event.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("forward")},Backspace(){var i,t,e;if((i=this.responder)!==null&&i!==void 0&&i.shouldManageDeletingInDirection("backward"))return this.event.preventDefault(),(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0||e.deleteInDirection("backward"),this.render()},Tab(){var i,t;if((i=this.responder)!==null&&i!==void 0&&i.canIncreaseNestingLevel())return this.event.preventDefault(),(t=this.responder)===null||t===void 0||t.increaseNestingLevel(),this.render()},"Tab+Shift"(){var i,t;if((i=this.responder)!==null&&i!==void 0&&i.canDecreaseNestingLevel())return this.event.preventDefault(),(t=this.responder)===null||t===void 0||t.decreaseNestingLevel(),this.render()}}),z(wt,"inputTypes",{deleteByComposition(){return this.deleteInDirection("backward",{recordUndoEntry:!1})},deleteByCut(){return this.deleteInDirection("backward")},deleteByDrag(){return this.event.preventDefault(),this.withTargetDOMRange(function(){var i;this.deleteByDragRange=(i=this.responder)===null||i===void 0?void 0:i.getSelectedRange()})},deleteCompositionText(){return this.deleteInDirection("backward",{recordUndoEntry:!1})},deleteContent(){return this.deleteInDirection("backward")},deleteContentBackward(){return this.deleteInDirection("backward")},deleteContentForward(){return this.deleteInDirection("forward")},deleteEntireSoftLine(){return this.deleteInDirection("forward")},deleteHardLineBackward(){return this.deleteInDirection("backward")},deleteHardLineForward(){return this.deleteInDirection("forward")},deleteSoftLineBackward(){return this.deleteInDirection("backward")},deleteSoftLineForward(){return this.deleteInDirection("forward")},deleteWordBackward(){return this.deleteInDirection("backward")},deleteWordForward(){return this.deleteInDirection("forward")},formatBackColor(){return this.activateAttributeIfSupported("backgroundColor",this.event.data)},formatBold(){return this.toggleAttributeIfSupported("bold")},formatFontColor(){return this.activateAttributeIfSupported("color",this.event.data)},formatFontName(){return this.activateAttributeIfSupported("font",this.event.data)},formatIndent(){var i;if((i=this.responder)!==null&&i!==void 0&&i.canIncreaseNestingLevel())return this.withTargetDOMRange(function(){var t;return(t=this.responder)===null||t===void 0?void 0:t.increaseNestingLevel()})},formatItalic(){return this.toggleAttributeIfSupported("italic")},formatJustifyCenter(){return this.toggleAttributeIfSupported("justifyCenter")},formatJustifyFull(){return this.toggleAttributeIfSupported("justifyFull")},formatJustifyLeft(){return this.toggleAttributeIfSupported("justifyLeft")},formatJustifyRight(){return this.toggleAttributeIfSupported("justifyRight")},formatOutdent(){var i;if((i=this.responder)!==null&&i!==void 0&&i.canDecreaseNestingLevel())return this.withTargetDOMRange(function(){var t;return(t=this.responder)===null||t===void 0?void 0:t.decreaseNestingLevel()})},formatRemove(){this.withTargetDOMRange(function(){for(let e in(i=this.responder)===null||i===void 0?void 0:i.getCurrentAttributes()){var i,t;(t=this.responder)===null||t===void 0||t.removeCurrentAttribute(e)}})},formatSetBlockTextDirection(){return this.activateAttributeIfSupported("blockDir",this.event.data)},formatSetInlineTextDirection(){return this.activateAttributeIfSupported("textDir",this.event.data)},formatStrikeThrough(){return this.toggleAttributeIfSupported("strike")},formatSubscript(){return this.toggleAttributeIfSupported("sub")},formatSuperscript(){return this.toggleAttributeIfSupported("sup")},formatUnderline(){return this.toggleAttributeIfSupported("underline")},historyRedo(){var i;return(i=this.delegate)===null||i===void 0?void 0:i.inputControllerWillPerformRedo()},historyUndo(){var i;return(i=this.delegate)===null||i===void 0?void 0:i.inputControllerWillPerformUndo()},insertCompositionText(){return this.composing=!0,this.insertString(this.event.data)},insertFromComposition(){return this.composing=!1,this.insertString(this.event.data)},insertFromDrop(){let i=this.deleteByDragRange;var t;if(i)return this.deleteByDragRange=null,(t=this.delegate)===null||t===void 0||t.inputControllerWillMoveText(),this.withTargetDOMRange(function(){var e;return(e=this.responder)===null||e===void 0?void 0:e.moveTextFromRange(i)})},insertFromPaste(){let{dataTransfer:i}=this.event,t={dataTransfer:i},e=i.getData("URL"),n=i.getData("text/html");if(e){var r;let c;this.event.preventDefault(),t.type="text/html";let u=i.getData("public.url-name");c=u?xi(u).trim():e,t.html=this.createLinkHTML(e,c),(r=this.delegate)===null||r===void 0||r.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var d;return(d=this.responder)===null||d===void 0?void 0:d.insertHTML(t.html)}),this.afterRender=()=>{var d;return(d=this.delegate)===null||d===void 0?void 0:d.inputControllerDidPaste(t)}}else if(Mr(i)){var o;t.type="text/plain",t.string=i.getData("text/plain"),(o=this.delegate)===null||o===void 0||o.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var c;return(c=this.responder)===null||c===void 0?void 0:c.insertString(t.string)}),this.afterRender=()=>{var c;return(c=this.delegate)===null||c===void 0?void 0:c.inputControllerDidPaste(t)}}else if(Gs(this.event)){var s;t.type="File",t.file=i.files[0],(s=this.delegate)===null||s===void 0||s.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var c;return(c=this.responder)===null||c===void 0?void 0:c.insertFile(t.file)}),this.afterRender=()=>{var c;return(c=this.delegate)===null||c===void 0?void 0:c.inputControllerDidPaste(t)}}else if(n){var l;this.event.preventDefault(),t.type="text/html",t.html=n,(l=this.delegate)===null||l===void 0||l.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var c;return(c=this.responder)===null||c===void 0?void 0:c.insertHTML(t.html)}),this.afterRender=()=>{var c;return(c=this.delegate)===null||c===void 0?void 0:c.inputControllerDidPaste(t)}}},insertFromYank(){return this.insertString(this.event.data)},insertLineBreak(){return this.insertString(` +`)},insertLink(){return this.activateAttributeIfSupported("href",this.event.data)},insertOrderedList(){return this.toggleAttributeIfSupported("number")},insertParagraph(){var i;return(i=this.delegate)===null||i===void 0||i.inputControllerWillPerformTyping(),this.withTargetDOMRange(function(){var t;return(t=this.responder)===null||t===void 0?void 0:t.insertLineBreak()})},insertReplacementText(){let i=this.event.dataTransfer.getData("text/plain"),t=this.event.getTargetRanges()[0];this.withTargetDOMRange(t,()=>{this.insertString(i,{updatePosition:!1})})},insertText(){var i;return this.insertString(this.event.data||((i=this.event.dataTransfer)===null||i===void 0?void 0:i.getData("text/plain")))},insertTranspose(){return this.insertString(this.event.data)},insertUnorderedList(){return this.toggleAttributeIfSupported("bullet")}});var Ks=function(i){let t=document.createRange();return t.setStart(i.startContainer,i.startOffset),t.setEnd(i.endContainer,i.endOffset),t},qn=i=>{var t;return Array.from(((t=i.dataTransfer)===null||t===void 0?void 0:t.types)||[]).includes("Files")},Gs=i=>{var t;return((t=i.dataTransfer.files)===null||t===void 0?void 0:t[0])&&!to(i)&&!(e=>{let{dataTransfer:n}=e;return n.types.includes("Files")&&n.types.includes("text/html")&&n.getData("text/html").includes("urn:schemas-microsoft-com:office:office")})(i)},to=function(i){let t=i.clipboardData;if(t)return Array.from(t.types).filter(e=>e.match(/file/i)).length===t.types.length&&t.files.length>=1},$s=function(i){let t=i.clipboardData;if(t)return t.types.includes("text/plain")&&t.types.length===1},Ys=function(i){let t=[];return i.altKey&&t.push("alt"),i.shiftKey&&t.push("shift"),t.push(i.key),t},Jn=i=>({x:i.clientX,y:i.clientY}),ui="[data-trix-attribute]",hi="[data-trix-action]",Xs="".concat(ui,", ").concat(hi),cn="[data-trix-dialog]",Zs="".concat(cn,"[data-trix-active]"),Qs="".concat(cn," [data-trix-method]"),kr="".concat(cn," [data-trix-input]"),Rr=(i,t)=>(t||(t=Ut(i)),i.querySelector("[data-trix-input][name='".concat(t,"']"))),Tr=i=>i.getAttribute("data-trix-action"),Ut=i=>i.getAttribute("data-trix-attribute")||i.getAttribute("data-trix-dialog-attribute"),sn=class extends R{constructor(t){super(t),this.didClickActionButton=this.didClickActionButton.bind(this),this.didClickAttributeButton=this.didClickAttributeButton.bind(this),this.didClickDialogButton=this.didClickDialogButton.bind(this),this.didKeyDownDialogInput=this.didKeyDownDialogInput.bind(this),this.element=t,this.attributes={},this.actions={},this.resetDialogInputs(),S("mousedown",{onElement:this.element,matchingSelector:hi,withCallback:this.didClickActionButton}),S("mousedown",{onElement:this.element,matchingSelector:ui,withCallback:this.didClickAttributeButton}),S("click",{onElement:this.element,matchingSelector:Xs,preventDefault:!0}),S("click",{onElement:this.element,matchingSelector:Qs,withCallback:this.didClickDialogButton}),S("keydown",{onElement:this.element,matchingSelector:kr,withCallback:this.didKeyDownDialogInput})}didClickActionButton(t,e){var n;(n=this.delegate)===null||n===void 0||n.toolbarDidClickButton(),t.preventDefault();let r=Tr(e);return this.getDialog(r)?this.toggleDialog(r):(o=this.delegate)===null||o===void 0?void 0:o.toolbarDidInvokeAction(r,e);var o}didClickAttributeButton(t,e){var n;(n=this.delegate)===null||n===void 0||n.toolbarDidClickButton(),t.preventDefault();let r=Ut(e);var o;return this.getDialog(r)?this.toggleDialog(r):(o=this.delegate)===null||o===void 0||o.toolbarDidToggleAttribute(r),this.refreshAttributeButtons()}didClickDialogButton(t,e){let n=vt(e,{matchingSelector:cn});return this[e.getAttribute("data-trix-method")].call(this,n)}didKeyDownDialogInput(t,e){if(t.keyCode===13){t.preventDefault();let n=e.getAttribute("name"),r=this.getDialog(n);this.setAttribute(r)}if(t.keyCode===27)return t.preventDefault(),this.hideDialog()}updateActions(t){return this.actions=t,this.refreshActionButtons()}refreshActionButtons(){return this.eachActionButton((t,e)=>{t.disabled=this.actions[e]===!1})}eachActionButton(t){return Array.from(this.element.querySelectorAll(hi)).map(e=>t(e,Tr(e)))}updateAttributes(t){return this.attributes=t,this.refreshAttributeButtons()}refreshAttributeButtons(){return this.eachAttributeButton((t,e)=>(t.disabled=this.attributes[e]===!1,this.attributes[e]||this.dialogIsVisible(e)?(t.setAttribute("data-trix-active",""),t.classList.add("trix-active")):(t.removeAttribute("data-trix-active"),t.classList.remove("trix-active"))))}eachAttributeButton(t){return Array.from(this.element.querySelectorAll(ui)).map(e=>t(e,Ut(e)))}applyKeyboardCommand(t){let e=JSON.stringify(t.sort());for(let n of Array.from(this.element.querySelectorAll("[data-trix-key]"))){let r=n.getAttribute("data-trix-key").split("+");if(JSON.stringify(r.sort())===e)return he("mousedown",{onElement:n}),!0}return!1}dialogIsVisible(t){let e=this.getDialog(t);if(e)return e.hasAttribute("data-trix-active")}toggleDialog(t){return this.dialogIsVisible(t)?this.hideDialog():this.showDialog(t)}showDialog(t){var e,n;this.hideDialog(),(e=this.delegate)===null||e===void 0||e.toolbarWillShowDialog();let r=this.getDialog(t);r.setAttribute("data-trix-active",""),r.classList.add("trix-active"),Array.from(r.querySelectorAll("input[disabled]")).forEach(s=>{s.removeAttribute("disabled")});let o=Ut(r);if(o){let s=Rr(r,t);s&&(s.value=this.attributes[o]||"",s.select())}return(n=this.delegate)===null||n===void 0?void 0:n.toolbarDidShowDialog(t)}setAttribute(t){var e;let n=Ut(t),r=Rr(t,n);return!r.willValidate||(r.setCustomValidity(""),r.checkValidity()&&this.isSafeAttribute(r))?((e=this.delegate)===null||e===void 0||e.toolbarDidUpdateAttribute(n,r.value),this.hideDialog()):(r.setCustomValidity("Invalid value"),r.setAttribute("data-trix-validate",""),r.classList.add("trix-validate"),r.focus())}isSafeAttribute(t){return!t.hasAttribute("data-trix-validate-href")||Ve.isValidAttribute("a","href",t.value)}removeAttribute(t){var e;let n=Ut(t);return(e=this.delegate)===null||e===void 0||e.toolbarDidRemoveAttribute(n),this.hideDialog()}hideDialog(){let t=this.element.querySelector(Zs);var e;if(t)return t.removeAttribute("data-trix-active"),t.classList.remove("trix-active"),this.resetDialogInputs(),(e=this.delegate)===null||e===void 0?void 0:e.toolbarDidHideDialog((n=>n.getAttribute("data-trix-dialog"))(t))}resetDialogInputs(){Array.from(this.element.querySelectorAll(kr)).forEach(t=>{t.setAttribute("disabled","disabled"),t.removeAttribute("data-trix-validate"),t.classList.remove("trix-validate")})}getDialog(t){return this.element.querySelector("[data-trix-dialog=".concat(t,"]"))}},Lt=class extends nn{constructor(t){let{editorElement:e,document:n,html:r}=t;super(...arguments),this.editorElement=e,this.selectionManager=new ct(this.editorElement),this.selectionManager.delegate=this,this.composition=new it,this.composition.delegate=this,this.attachmentManager=new Ge(this.composition.getAttachments()),this.attachmentManager.delegate=this,this.inputController=bi.getLevel()===2?new wt(this.editorElement):new Y(this.editorElement),this.inputController.delegate=this,this.inputController.responder=this.composition,this.compositionController=new en(this.editorElement,this.composition),this.compositionController.delegate=this,this.toolbarController=new sn(this.editorElement.toolbarElement),this.toolbarController.delegate=this,this.editor=new Xe(this.composition,this.selectionManager,this.editorElement),n?this.editor.loadDocument(n):this.editor.loadHTML(r)}registerSelectionManager(){return Ot.registerSelectionManager(this.selectionManager)}unregisterSelectionManager(){return Ot.unregisterSelectionManager(this.selectionManager)}render(){return this.compositionController.render()}reparse(){return this.composition.replaceHTML(this.editorElement.innerHTML)}compositionDidChangeDocument(t){if(this.notifyEditorElement("document-change"),!this.handlingInput)return this.render()}compositionDidChangeCurrentAttributes(t){return this.currentAttributes=t,this.toolbarController.updateAttributes(this.currentAttributes),this.updateCurrentActions(),this.notifyEditorElement("attributes-change",{attributes:this.currentAttributes})}compositionDidPerformInsertionAtRange(t){this.pasting&&(this.pastedRange=t)}compositionShouldAcceptFile(t){return this.notifyEditorElement("file-accept",{file:t})}compositionDidAddAttachment(t){let e=this.attachmentManager.manageAttachment(t);return this.notifyEditorElement("attachment-add",{attachment:e})}compositionDidEditAttachment(t){this.compositionController.rerenderViewForObject(t);let e=this.attachmentManager.manageAttachment(t);return this.notifyEditorElement("attachment-edit",{attachment:e}),this.notifyEditorElement("change")}compositionDidChangeAttachmentPreviewURL(t){return this.compositionController.invalidateViewForObject(t),this.notifyEditorElement("change")}compositionDidRemoveAttachment(t){let e=this.attachmentManager.unmanageAttachment(t);return this.notifyEditorElement("attachment-remove",{attachment:e})}compositionDidStartEditingAttachment(t,e){return this.attachmentLocationRange=this.composition.document.getLocationRangeOfAttachment(t),this.compositionController.installAttachmentEditorForAttachment(t,e),this.selectionManager.setLocationRange(this.attachmentLocationRange)}compositionDidStopEditingAttachment(t){this.compositionController.uninstallAttachmentEditor(),this.attachmentLocationRange=null}compositionDidRequestChangingSelectionToLocationRange(t){if(!this.loadingSnapshot||this.isFocused())return this.requestedLocationRange=t,this.compositionRevisionWhenLocationRangeRequested=this.composition.revision,this.handlingInput?void 0:this.render()}compositionWillLoadSnapshot(){this.loadingSnapshot=!0}compositionDidLoadSnapshot(){this.compositionController.refreshViewCache(),this.render(),this.loadingSnapshot=!1}getSelectionManager(){return this.selectionManager}attachmentManagerDidRequestRemovalOfAttachment(t){return this.removeAttachment(t)}compositionControllerWillSyncDocumentView(){return this.inputController.editorWillSyncDocumentView(),this.selectionManager.lock(),this.selectionManager.clearSelection()}compositionControllerDidSyncDocumentView(){return this.inputController.editorDidSyncDocumentView(),this.selectionManager.unlock(),this.updateCurrentActions(),this.notifyEditorElement("sync")}compositionControllerDidRender(){this.requestedLocationRange&&(this.compositionRevisionWhenLocationRangeRequested===this.composition.revision&&this.selectionManager.setLocationRange(this.requestedLocationRange),this.requestedLocationRange=null,this.compositionRevisionWhenLocationRangeRequested=null),this.renderedCompositionRevision!==this.composition.revision&&(this.runEditorFilters(),this.composition.updateCurrentAttributes(),this.notifyEditorElement("render")),this.renderedCompositionRevision=this.composition.revision}compositionControllerDidFocus(){return this.isFocusedInvisibly()&&this.setLocationRange({index:0,offset:0}),this.toolbarController.hideDialog(),this.notifyEditorElement("focus")}compositionControllerDidBlur(){return this.notifyEditorElement("blur")}compositionControllerDidSelectAttachment(t,e){return this.toolbarController.hideDialog(),this.composition.editAttachment(t,e)}compositionControllerDidRequestDeselectingAttachment(t){let e=this.attachmentLocationRange||this.composition.document.getLocationRangeOfAttachment(t);return this.selectionManager.setLocationRange(e[1])}compositionControllerWillUpdateAttachment(t){return this.editor.recordUndoEntry("Edit Attachment",{context:t.id,consolidatable:!0})}compositionControllerDidRequestRemovalOfAttachment(t){return this.removeAttachment(t)}inputControllerWillHandleInput(){this.handlingInput=!0,this.requestedRender=!1}inputControllerDidRequestRender(){this.requestedRender=!0}inputControllerDidHandleInput(){if(this.handlingInput=!1,this.requestedRender)return this.requestedRender=!1,this.render()}inputControllerDidAllowUnhandledInput(){return this.notifyEditorElement("change")}inputControllerDidRequestReparse(){return this.reparse()}inputControllerWillPerformTyping(){return this.recordTypingUndoEntry()}inputControllerWillPerformFormatting(t){return this.recordFormattingUndoEntry(t)}inputControllerWillCutText(){return this.editor.recordUndoEntry("Cut")}inputControllerWillPaste(t){return this.editor.recordUndoEntry("Paste"),this.pasting=!0,this.notifyEditorElement("before-paste",{paste:t})}inputControllerDidPaste(t){return t.range=this.pastedRange,this.pastedRange=null,this.pasting=null,this.notifyEditorElement("paste",{paste:t})}inputControllerWillMoveText(){return this.editor.recordUndoEntry("Move")}inputControllerWillAttachFiles(){return this.editor.recordUndoEntry("Drop Files")}inputControllerWillPerformUndo(){return this.editor.undo()}inputControllerWillPerformRedo(){return this.editor.redo()}inputControllerDidReceiveKeyboardCommand(t){return this.toolbarController.applyKeyboardCommand(t)}inputControllerDidStartDrag(){this.locationRangeBeforeDrag=this.selectionManager.getLocationRange()}inputControllerDidReceiveDragOverPoint(t){return this.selectionManager.setLocationRangeFromPointRange(t)}inputControllerDidCancelDrag(){this.selectionManager.setLocationRange(this.locationRangeBeforeDrag),this.locationRangeBeforeDrag=null}locationRangeDidChange(t){return this.composition.updateCurrentAttributes(),this.updateCurrentActions(),this.attachmentLocationRange&&!We(this.attachmentLocationRange,t)&&this.composition.stopEditingAttachment(),this.notifyEditorElement("selection-change")}toolbarDidClickButton(){if(!this.getLocationRange())return this.setLocationRange({index:0,offset:0})}toolbarDidInvokeAction(t,e){return this.invokeAction(t,e)}toolbarDidToggleAttribute(t){if(this.recordFormattingUndoEntry(t),this.composition.toggleCurrentAttribute(t),this.render(),!this.selectionFrozen)return this.editorElement.focus()}toolbarDidUpdateAttribute(t,e){if(this.recordFormattingUndoEntry(t),this.composition.setCurrentAttribute(t,e),this.render(),!this.selectionFrozen)return this.editorElement.focus()}toolbarDidRemoveAttribute(t){if(this.recordFormattingUndoEntry(t),this.composition.removeCurrentAttribute(t),this.render(),!this.selectionFrozen)return this.editorElement.focus()}toolbarWillShowDialog(t){return this.composition.expandSelectionForEditing(),this.freezeSelection()}toolbarDidShowDialog(t){return this.notifyEditorElement("toolbar-dialog-show",{dialogName:t})}toolbarDidHideDialog(t){return this.thawSelection(),this.editorElement.focus(),this.notifyEditorElement("toolbar-dialog-hide",{dialogName:t})}freezeSelection(){if(!this.selectionFrozen)return this.selectionManager.lock(),this.composition.freezeSelection(),this.selectionFrozen=!0,this.render()}thawSelection(){if(this.selectionFrozen)return this.composition.thawSelection(),this.selectionManager.unlock(),this.selectionFrozen=!1,this.render()}canInvokeAction(t){return!!this.actionIsExternal(t)||!((e=this.actions[t])===null||e===void 0||(e=e.test)===null||e===void 0||!e.call(this));var e}invokeAction(t,e){return this.actionIsExternal(t)?this.notifyEditorElement("action-invoke",{actionName:t,invokingElement:e}):(n=this.actions[t])===null||n===void 0||(n=n.perform)===null||n===void 0?void 0:n.call(this);var n}actionIsExternal(t){return/^x-./.test(t)}getCurrentActions(){let t={};for(let e in this.actions)t[e]=this.canInvokeAction(e);return t}updateCurrentActions(){let t=this.getCurrentActions();if(!Xt(t,this.currentActions))return this.currentActions=t,this.toolbarController.updateActions(this.currentActions),this.notifyEditorElement("actions-change",{actions:this.currentActions})}runEditorFilters(){let t=this.composition.getSnapshot();if(Array.from(this.editor.filters).forEach(r=>{let{document:o,selectedRange:s}=t;t=r.call(this.editor,t)||{},t.document||(t.document=o),t.selectedRange||(t.selectedRange=s)}),e=t,n=this.composition.getSnapshot(),!We(e.selectedRange,n.selectedRange)||!e.document.isEqualTo(n.document))return this.composition.loadSnapshot(t);var e,n}updateInputElement(){let t=function(e,n){let r=Ls[n];if(r)return r(e);throw new Error("unknown content type: ".concat(n))}(this.compositionController.getSerializableElement(),"text/html");return this.editorElement.setFormValue(t)}notifyEditorElement(t,e){switch(t){case"document-change":this.documentChangedSinceLastRender=!0;break;case"render":this.documentChangedSinceLastRender&&(this.documentChangedSinceLastRender=!1,this.notifyEditorElement("change"));break;case"change":case"attachment-add":case"attachment-edit":case"attachment-remove":this.updateInputElement()}return this.editorElement.notify(t,e)}removeAttachment(t){return this.editor.recordUndoEntry("Delete Attachment"),this.composition.removeAttachment(t),this.render()}recordFormattingUndoEntry(t){let e=L(t),n=this.selectionManager.getLocationRange();if(e||!ut(n))return this.editor.recordUndoEntry("Formatting",{context:this.getUndoContext(),consolidatable:!0})}recordTypingUndoEntry(){return this.editor.recordUndoEntry("Typing",{context:this.getUndoContext(this.currentAttributes),consolidatable:!0})}getUndoContext(){for(var t=arguments.length,e=new Array(t),n=0;n0?Math.floor(new Date().getTime()/Yn.interval):0}isFocused(){var t;return this.editorElement===((t=this.editorElement.ownerDocument)===null||t===void 0?void 0:t.activeElement)}isFocusedInvisibly(){return this.isFocused()&&!this.getLocationRange()}get actions(){return this.constructor.actions}};z(Lt,"actions",{undo:{test(){return this.editor.canUndo()},perform(){return this.editor.undo()}},redo:{test(){return this.editor.canRedo()},perform(){return this.editor.redo()}},link:{test(){return this.editor.canActivateAttribute("href")}},increaseNestingLevel:{test(){return this.editor.canIncreaseNestingLevel()},perform(){return this.editor.increaseNestingLevel()&&this.render()}},decreaseNestingLevel:{test(){return this.editor.canDecreaseNestingLevel()},perform(){return this.editor.decreaseNestingLevel()&&this.render()}},attachFiles:{test:()=>!0,perform(){return bi.pickFiles(this.editor.insertFiles)}}}),Lt.proxyMethod("getSelectionManager().setLocationRange"),Lt.proxyMethod("getSelectionManager().getLocationRange");var ta=Object.freeze({__proto__:null,AttachmentEditorController:tn,CompositionController:en,Controller:nn,EditorController:Lt,InputController:Yt,Level0InputController:Y,Level2InputController:wt,ToolbarController:sn}),ea=Object.freeze({__proto__:null,MutationObserver:rn,SelectionChangeObserver:Ue}),na=Object.freeze({__proto__:null,FileVerificationOperation:on,ImagePreloadOperation:Ke});Pr("trix-toolbar",`%t { + display: block; +} + +%t { + white-space: nowrap; +} + +%t [data-trix-dialog] { + display: none; +} + +%t [data-trix-dialog][data-trix-active] { + display: block; +} + +%t [data-trix-dialog] [data-trix-validate]:invalid { + background-color: #ffdddd; +}`);var an=class extends HTMLElement{connectedCallback(){this.innerHTML===""&&(this.innerHTML=Fr.getDefaultHTML())}},ia=0,ra=function(i){if(!i.hasAttribute("contenteditable"))return i.setAttribute("contenteditable",""),function(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return e.times=1,S(t,e)}("focus",{onElement:i,withCallback:()=>oa(i)})},oa=function(i){return sa(i),aa(i)},sa=function(i){var t,e;if((t=(e=document).queryCommandSupported)!==null&&t!==void 0&&t.call(e,"enableObjectResizing"))return document.execCommand("enableObjectResizing",!1,!1),S("mscontrolselect",{onElement:i,preventDefault:!0})},aa=function(i){var t,e;if((t=(e=document).queryCommandSupported)!==null&&t!==void 0&&t.call(e,"DefaultParagraphSeparator")){let{tagName:n}=W.default;if(["div","p"].includes(n))return document.execCommand("DefaultParagraphSeparator",!1,n)}},wr=xe.forcesObjectResizing?{display:"inline",width:"auto"}:{display:"inline-block",width:"1px"};Pr("trix-editor",`%t { + display: block; +} + +%t:empty::before { + content: attr(placeholder); + color: graytext; + cursor: text; + pointer-events: none; + white-space: pre-line; +} + +%t a[contenteditable=false] { + cursor: text; +} + +%t img { + max-width: 100%; + height: auto; +} + +%t `.concat(Rt,` figcaption textarea { + resize: none; +} + +%t `).concat(Rt,` figcaption textarea.trix-autoresize-clone { + position: absolute; + left: -9999px; + max-height: 0px; +} + +%t `).concat(Rt,` figcaption[data-trix-placeholder]:empty::before { + content: attr(data-trix-placeholder); + color: graytext; +} + +%t [data-trix-cursor-target] { + display: `).concat(wr.display,` !important; + width: `).concat(wr.width,` !important; + padding: 0 !important; + margin: 0 !important; + border: none !important; +} + +%t [data-trix-cursor-target=left] { + vertical-align: top !important; + margin-left: -1px !important; +} + +%t [data-trix-cursor-target=right] { + vertical-align: bottom !important; + margin-right: -1px !important; +}`));var lt=new WeakMap,ce=new WeakSet,di=class{constructor(t){var e,n;Jr(e=this,n=ce),n.add(e),pe(this,lt,{writable:!0,value:void 0}),this.element=t,Ci(this,lt,t.attachInternals())}connectedCallback(){Fe(this,ce,Pe).call(this)}disconnectedCallback(){}get labels(){return x(this,lt).labels}get disabled(){var t;return(t=this.element.inputElement)===null||t===void 0?void 0:t.disabled}set disabled(t){this.element.toggleAttribute("disabled",t)}get required(){return this.element.hasAttribute("required")}set required(t){this.element.toggleAttribute("required",t),Fe(this,ce,Pe).call(this)}get validity(){return x(this,lt).validity}get validationMessage(){return x(this,lt).validationMessage}get willValidate(){return x(this,lt).willValidate}setFormValue(t){Fe(this,ce,Pe).call(this)}checkValidity(){return x(this,lt).checkValidity()}reportValidity(){return x(this,lt).reportValidity()}setCustomValidity(t){Fe(this,ce,Pe).call(this,t)}};function Pe(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",{required:t,value:e}=this.element,n=t&&!e,r=!!i,o=p("input",{required:t}),s=i||o.validationMessage;x(this,lt).setValidity({valueMissing:n,customError:r},s)}var Kn=new WeakMap,Gn=new WeakMap,$n=new WeakMap,gi=class{constructor(t){pe(this,Kn,{writable:!0,value:void 0}),pe(this,Gn,{writable:!0,value:e=>{e.defaultPrevented||e.target===this.element.form&&this.element.reset()}}),pe(this,$n,{writable:!0,value:e=>{if(e.defaultPrevented||this.element.contains(e.target))return;let n=vt(e.target,{matchingSelector:"label"});n&&Array.from(this.labels).includes(n)&&this.element.focus()}}),this.element=t}connectedCallback(){Ci(this,Kn,function(t){if(t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby"))return;let e=function(){let n=Array.from(t.labels).map(o=>{if(!o.contains(t))return o.textContent}).filter(o=>o),r=n.join(" ");return r?t.setAttribute("aria-label",r):t.removeAttribute("aria-label")};return e(),S("focus",{onElement:t,withCallback:e})}(this.element)),window.addEventListener("reset",x(this,Gn),!1),window.addEventListener("click",x(this,$n),!1)}disconnectedCallback(){var t;(t=x(this,Kn))===null||t===void 0||t.destroy(),window.removeEventListener("reset",x(this,Gn),!1),window.removeEventListener("click",x(this,$n),!1)}get labels(){let t=[];this.element.id&&this.element.ownerDocument&&t.push(...Array.from(this.element.ownerDocument.querySelectorAll("label[for='".concat(this.element.id,"']"))||[]));let e=vt(this.element,{matchingSelector:"label"});return e&&[this.element,null].includes(e.control)&&t.push(e),t}get disabled(){return console.warn("This browser does not support the [disabled] attribute for trix-editor elements."),!1}set disabled(t){console.warn("This browser does not support the [disabled] attribute for trix-editor elements.")}get required(){return console.warn("This browser does not support the [required] attribute for trix-editor elements."),!1}set required(t){console.warn("This browser does not support the [required] attribute for trix-editor elements.")}get validity(){return console.warn("This browser does not support the validity property for trix-editor elements."),null}get validationMessage(){return console.warn("This browser does not support the validationMessage property for trix-editor elements."),""}get willValidate(){return console.warn("This browser does not support the willValidate property for trix-editor elements."),!1}setFormValue(t){}checkValidity(){return console.warn("This browser does not support checkValidity() for trix-editor elements."),!0}reportValidity(){return console.warn("This browser does not support reportValidity() for trix-editor elements."),!0}setCustomValidity(t){console.warn("This browser does not support setCustomValidity(validationMessage) for trix-editor elements.")}},P=new WeakMap,ye=class extends HTMLElement{constructor(){super(),pe(this,P,{writable:!0,value:void 0}),Ci(this,P,this.constructor.formAssociated?new di(this):new gi(this))}get trixId(){return this.hasAttribute("trix-id")?this.getAttribute("trix-id"):(this.setAttribute("trix-id",++ia),this.trixId)}get labels(){return x(this,P).labels}get disabled(){return x(this,P).disabled}set disabled(t){x(this,P).disabled=t}get required(){return x(this,P).required}set required(t){x(this,P).required=t}get validity(){return x(this,P).validity}get validationMessage(){return x(this,P).validationMessage}get willValidate(){return x(this,P).willValidate}get type(){return this.localName}get toolbarElement(){var t;if(this.hasAttribute("toolbar"))return(t=this.ownerDocument)===null||t===void 0?void 0:t.getElementById(this.getAttribute("toolbar"));if(this.parentNode){let e="trix-toolbar-".concat(this.trixId);this.setAttribute("toolbar",e);let n=p("trix-toolbar",{id:e});return this.parentNode.insertBefore(n,this),n}}get form(){var t;return(t=this.inputElement)===null||t===void 0?void 0:t.form}get inputElement(){var t;if(this.hasAttribute("input"))return(t=this.ownerDocument)===null||t===void 0?void 0:t.getElementById(this.getAttribute("input"));if(this.parentNode){let e="trix-input-".concat(this.trixId);this.setAttribute("input",e);let n=p("input",{type:"hidden",id:e});return this.parentNode.insertBefore(n,this.nextElementSibling),n}}get editor(){var t;return(t=this.editorController)===null||t===void 0?void 0:t.editor}get name(){var t;return(t=this.inputElement)===null||t===void 0?void 0:t.name}get value(){var t;return(t=this.inputElement)===null||t===void 0?void 0:t.value}set value(t){var e;this.defaultValue=t,(e=this.editor)===null||e===void 0||e.loadHTML(this.defaultValue)}notify(t,e){if(this.editorController)return he("trix-".concat(t),{onElement:this,attributes:e})}setFormValue(t){this.inputElement&&(this.inputElement.value=t,x(this,P).setFormValue(t))}connectedCallback(){this.hasAttribute("data-trix-internal")||(ra(this),function(t){t.hasAttribute("role")||t.setAttribute("role","textbox")}(this),this.editorController||(he("trix-before-initialize",{onElement:this}),this.editorController=new Lt({editorElement:this,html:this.defaultValue=this.value}),requestAnimationFrame(()=>he("trix-initialize",{onElement:this}))),this.editorController.registerSelectionManager(),x(this,P).connectedCallback(),function(t){!document.querySelector(":focus")&&t.hasAttribute("autofocus")&&document.querySelector("[autofocus]")===t&&t.focus()}(this))}disconnectedCallback(){var t;(t=this.editorController)===null||t===void 0||t.unregisterSelectionManager(),x(this,P).disconnectedCallback()}checkValidity(){return x(this,P).checkValidity()}reportValidity(){return x(this,P).reportValidity()}setCustomValidity(t){x(this,P).setCustomValidity(t)}formDisabledCallback(t){this.inputElement&&(this.inputElement.disabled=t),this.toggleAttribute("contenteditable",!t)}formResetCallback(){this.reset()}reset(){this.value=this.defaultValue}};z(ye,"formAssociated","ElementInternals"in window);var Z={VERSION:po,config:Ce,core:Ds,models:Xr,views:Ps,controllers:ta,observers:ea,operations:na,elements:Object.freeze({__proto__:null,TrixEditorElement:ye,TrixToolbarElement:an}),filters:Object.freeze({__proto__:null,Filter:Ye,attachmentGalleryFilter:$r})};Object.assign(Z,Xr),window.Trix=Z,setTimeout(function(){customElements.get("trix-toolbar")||customElements.define("trix-toolbar",an),customElements.get("trix-editor")||customElements.define("trix-editor",ye)},0);Z.config.blockAttributes.default.tagName="p";Z.config.blockAttributes.default.breakOnReturn=!0;Z.config.blockAttributes.heading={tagName:"h2",terminal:!0,breakOnReturn:!0,group:!1};Z.config.blockAttributes.subHeading={tagName:"h3",terminal:!0,breakOnReturn:!0,group:!1};Z.config.textAttributes.underline={style:{textDecoration:"underline"},inheritable:!0,parser:i=>window.getComputedStyle(i).textDecoration.includes("underline")};Z.Block.prototype.breaksOnReturn=function(){let i=this.getLastAttribute();return Z.config.blockAttributes[i||"default"]?.breakOnReturn??!1};Z.LineBreakInsertion.prototype.shouldInsertBlockBreak=function(){return this.block.hasAttributes()&&this.block.isListItem()&&!this.block.isEmpty()?this.startLocation.offset>0:this.shouldBreakFormattedBlock()?!1:this.breaksOnReturn};function la({state:i}){return{state:i,init:function(){this.$refs.trixValue.value=this.state,this.$refs.trix.editor?.loadHTML(this.state??""),this.$watch("state",()=>{document.activeElement!==this.$refs.trix&&(this.$refs.trixValue.value=this.state,this.$refs.trix.editor?.loadHTML(this.state??""))})}}}export{la as default}; +/*! Bundled license information: + +trix/dist/trix.esm.min.js: + (*! @license DOMPurify 3.2.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.3/LICENSE *) +*/ diff --git a/public/js/filament/forms/components/select.js b/public/js/filament/forms/components/select.js new file mode 100644 index 000000000..fdea5da1c --- /dev/null +++ b/public/js/filament/forms/components/select.js @@ -0,0 +1,6 @@ +var lt=Object.create;var Ge=Object.defineProperty;var ct=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var ft=(se,ie)=>()=>(ie||se((ie={exports:{}}).exports,ie),ie.exports);var pt=(se,ie,X,me)=>{if(ie&&typeof ie=="object"||typeof ie=="function")for(let j of ut(ie))!dt.call(se,j)&&j!==X&&Ge(se,j,{get:()=>ie[j],enumerable:!(me=ct(ie,j))||me.enumerable});return se};var mt=(se,ie,X)=>(X=se!=null?lt(ht(se)):{},pt(ie||!se||!se.__esModule?Ge(X,"default",{value:se,enumerable:!0}):X,se));var $e=ft((Ae,Ye)=>{(function(ie,X){typeof Ae=="object"&&typeof Ye=="object"?Ye.exports=X():typeof define=="function"&&define.amd?define([],X):typeof Ae=="object"?Ae.Choices=X():ie.Choices=X()})(window,function(){return function(){"use strict";var se={282:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.clearChoices=i.activateChoices=i.filterChoices=i.addChoice=void 0;var _=b(883),h=function(c){var l=c.value,O=c.label,L=c.id,y=c.groupId,D=c.disabled,k=c.elementId,Q=c.customProperties,Z=c.placeholder,ne=c.keyCode;return{type:_.ACTION_TYPES.ADD_CHOICE,value:l,label:O,id:L,groupId:y,disabled:D,elementId:k,customProperties:Q,placeholder:Z,keyCode:ne}};i.addChoice=h;var d=function(c){return{type:_.ACTION_TYPES.FILTER_CHOICES,results:c}};i.filterChoices=d;var a=function(c){return c===void 0&&(c=!0),{type:_.ACTION_TYPES.ACTIVATE_CHOICES,active:c}};i.activateChoices=a;var r=function(){return{type:_.ACTION_TYPES.CLEAR_CHOICES}};i.clearChoices=r},783:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.addGroup=void 0;var _=b(883),h=function(d){var a=d.value,r=d.id,c=d.active,l=d.disabled;return{type:_.ACTION_TYPES.ADD_GROUP,value:a,id:r,active:c,disabled:l}};i.addGroup=h},464:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.highlightItem=i.removeItem=i.addItem=void 0;var _=b(883),h=function(r){var c=r.value,l=r.label,O=r.id,L=r.choiceId,y=r.groupId,D=r.customProperties,k=r.placeholder,Q=r.keyCode;return{type:_.ACTION_TYPES.ADD_ITEM,value:c,label:l,id:O,choiceId:L,groupId:y,customProperties:D,placeholder:k,keyCode:Q}};i.addItem=h;var d=function(r,c){return{type:_.ACTION_TYPES.REMOVE_ITEM,id:r,choiceId:c}};i.removeItem=d;var a=function(r,c){return{type:_.ACTION_TYPES.HIGHLIGHT_ITEM,id:r,highlighted:c}};i.highlightItem=a},137:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.setIsLoading=i.resetTo=i.clearAll=void 0;var _=b(883),h=function(){return{type:_.ACTION_TYPES.CLEAR_ALL}};i.clearAll=h;var d=function(r){return{type:_.ACTION_TYPES.RESET_TO,state:r}};i.resetTo=d;var a=function(r){return{type:_.ACTION_TYPES.SET_IS_LOADING,isLoading:r}};i.setIsLoading=a},373:function(j,i,b){var _=this&&this.__spreadArray||function(g,e,t){if(t||arguments.length===2)for(var n=0,s=e.length,v;n=0?this._store.getGroupById(v):null;return this._store.dispatch((0,l.highlightItem)(n,!0)),t&&this.passedElement.triggerEvent(y.EVENTS.highlightItem,{id:n,value:M,label:f,groupValue:u&&u.value?u.value:null}),this},g.prototype.unhighlightItem=function(e){if(!e||!e.id)return this;var t=e.id,n=e.groupId,s=n===void 0?-1:n,v=e.value,P=v===void 0?"":v,M=e.label,K=M===void 0?"":M,f=s>=0?this._store.getGroupById(s):null;return this._store.dispatch((0,l.highlightItem)(t,!1)),this.passedElement.triggerEvent(y.EVENTS.highlightItem,{id:t,value:P,label:K,groupValue:f&&f.value?f.value:null}),this},g.prototype.highlightAll=function(){var e=this;return this._store.items.forEach(function(t){return e.highlightItem(t)}),this},g.prototype.unhighlightAll=function(){var e=this;return this._store.items.forEach(function(t){return e.unhighlightItem(t)}),this},g.prototype.removeActiveItemsByValue=function(e){var t=this;return this._store.activeItems.filter(function(n){return n.value===e}).forEach(function(n){return t._removeItem(n)}),this},g.prototype.removeActiveItems=function(e){var t=this;return this._store.activeItems.filter(function(n){var s=n.id;return s!==e}).forEach(function(n){return t._removeItem(n)}),this},g.prototype.removeHighlightedItems=function(e){var t=this;return e===void 0&&(e=!1),this._store.highlightedActiveItems.forEach(function(n){t._removeItem(n),e&&t._triggerChange(n.value)}),this},g.prototype.showDropdown=function(e){var t=this;return this.dropdown.isActive?this:(requestAnimationFrame(function(){t.dropdown.show(),t.containerOuter.open(t.dropdown.distanceFromTopWindow),!e&&t._canSearch&&t.input.focus(),t.passedElement.triggerEvent(y.EVENTS.showDropdown,{})}),this)},g.prototype.hideDropdown=function(e){var t=this;return this.dropdown.isActive?(requestAnimationFrame(function(){t.dropdown.hide(),t.containerOuter.close(),!e&&t._canSearch&&(t.input.removeActiveDescendant(),t.input.blur()),t.passedElement.triggerEvent(y.EVENTS.hideDropdown,{})}),this):this},g.prototype.getValue=function(e){e===void 0&&(e=!1);var t=this._store.activeItems.reduce(function(n,s){var v=e?s.value:s;return n.push(v),n},[]);return this._isSelectOneElement?t[0]:t},g.prototype.setValue=function(e){var t=this;return this.initialised?(e.forEach(function(n){return t._setChoiceOrItem(n)}),this):this},g.prototype.setChoiceByValue=function(e){var t=this;if(!this.initialised||this._isTextElement)return this;var n=Array.isArray(e)?e:[e];return n.forEach(function(s){return t._findAndSelectChoiceByValue(s)}),this},g.prototype.setChoices=function(e,t,n,s){var v=this;if(e===void 0&&(e=[]),t===void 0&&(t="value"),n===void 0&&(n="label"),s===void 0&&(s=!1),!this.initialised)throw new ReferenceError("setChoices was called on a non-initialized instance of Choices");if(!this._isSelectElement)throw new TypeError("setChoices can't be used with INPUT based Choices");if(typeof t!="string"||!t)throw new TypeError("value parameter must be a name of 'value' field in passed objects");if(s&&this.clearChoices(),typeof e=="function"){var P=e(this);if(typeof Promise=="function"&&P instanceof Promise)return new Promise(function(M){return requestAnimationFrame(M)}).then(function(){return v._handleLoadingState(!0)}).then(function(){return P}).then(function(M){return v.setChoices(M,t,n,s)}).catch(function(M){v.config.silent||console.error(M)}).then(function(){return v._handleLoadingState(!1)}).then(function(){return v});if(!Array.isArray(P))throw new TypeError(".setChoices first argument function must return either array of choices or Promise, got: ".concat(typeof P));return this.setChoices(P,t,n,!1)}if(!Array.isArray(e))throw new TypeError(".setChoices must be called either with array of choices with a function resulting into Promise of array of choices");return this.containerOuter.removeLoadingState(),this._startLoading(),e.forEach(function(M){if(M.choices)v._addGroup({id:M.id?parseInt("".concat(M.id),10):null,group:M,valueKey:t,labelKey:n});else{var K=M;v._addChoice({value:K[t],label:K[n],isSelected:!!K.selected,isDisabled:!!K.disabled,placeholder:!!K.placeholder,customProperties:K.customProperties})}}),this._stopLoading(),this},g.prototype.clearChoices=function(){return this._store.dispatch((0,r.clearChoices)()),this},g.prototype.clearStore=function(){return this._store.dispatch((0,O.clearAll)()),this},g.prototype.clearInput=function(){var e=!this._isSelectOneElement;return this.input.clear(e),!this._isTextElement&&this._canSearch&&(this._isSearching=!1,this._store.dispatch((0,r.activateChoices)(!0))),this},g.prototype._render=function(){if(!this._store.isLoading()){this._currentState=this._store.state;var e=this._currentState.choices!==this._prevState.choices||this._currentState.groups!==this._prevState.groups||this._currentState.items!==this._prevState.items,t=this._isSelectElement,n=this._currentState.items!==this._prevState.items;e&&(t&&this._renderChoices(),n&&this._renderItems(),this._prevState=this._currentState)}},g.prototype._renderChoices=function(){var e=this,t=this._store,n=t.activeGroups,s=t.activeChoices,v=document.createDocumentFragment();if(this.choiceList.clear(),this.config.resetScrollPosition&&requestAnimationFrame(function(){return e.choiceList.scrollToTop()}),n.length>=1&&!this._isSearching){var P=s.filter(function(C){return C.placeholder===!0&&C.groupId===-1});P.length>=1&&(v=this._createChoicesFragment(P,v)),v=this._createGroupsFragment(n,s,v)}else s.length>=1&&(v=this._createChoicesFragment(s,v));if(v.childNodes&&v.childNodes.length>0){var M=this._store.activeItems,K=this._canAddItem(M,this.input.value);if(K.response)this.choiceList.append(v),this._highlightChoice();else{var f=this._getTemplate("notice",K.notice);this.choiceList.append(f)}}else{var u=void 0,f=void 0;this._isSearching?(f=typeof this.config.noResultsText=="function"?this.config.noResultsText():this.config.noResultsText,u=this._getTemplate("notice",f,"no-results")):(f=typeof this.config.noChoicesText=="function"?this.config.noChoicesText():this.config.noChoicesText,u=this._getTemplate("notice",f,"no-choices")),this.choiceList.append(u)}},g.prototype._renderItems=function(){var e=this._store.activeItems||[];this.itemList.clear();var t=this._createItemsFragment(e);t.childNodes&&this.itemList.append(t)},g.prototype._createGroupsFragment=function(e,t,n){var s=this;n===void 0&&(n=document.createDocumentFragment());var v=function(P){return t.filter(function(M){return s._isSelectOneElement?M.groupId===P.id:M.groupId===P.id&&(s.config.renderSelectedChoices==="always"||!M.selected)})};return this.config.shouldSort&&e.sort(this.config.sorter),e.forEach(function(P){var M=v(P);if(M.length>=1){var K=s._getTemplate("choiceGroup",P);n.appendChild(K),s._createChoicesFragment(M,n,!0)}}),n},g.prototype._createChoicesFragment=function(e,t,n){var s=this;t===void 0&&(t=document.createDocumentFragment()),n===void 0&&(n=!1);var v=this.config,P=v.renderSelectedChoices,M=v.searchResultLimit,K=v.renderChoiceLimit,f=this._isSearching?k.sortByScore:this.config.sorter,u=function(z){var ee=P==="auto"?s._isSelectOneElement||!z.selected:!0;if(ee){var ae=s._getTemplate("choice",z,s.config.itemSelectText);t.appendChild(ae)}},C=e;P==="auto"&&!this._isSelectOneElement&&(C=e.filter(function(z){return!z.selected}));var Y=C.reduce(function(z,ee){return ee.placeholder?z.placeholderChoices.push(ee):z.normalChoices.push(ee),z},{placeholderChoices:[],normalChoices:[]}),V=Y.placeholderChoices,U=Y.normalChoices;(this.config.shouldSort||this._isSearching)&&U.sort(f);var $=C.length,W=this._isSelectOneElement?_(_([],V,!0),U,!0):U;this._isSearching?$=M:K&&K>0&&!n&&($=K);for(var J=0;J<$;J+=1)W[J]&&u(W[J]);return t},g.prototype._createItemsFragment=function(e,t){var n=this;t===void 0&&(t=document.createDocumentFragment());var s=this.config,v=s.shouldSortItems,P=s.sorter,M=s.removeItemButton;v&&!this._isSelectOneElement&&e.sort(P),this._isTextElement?this.passedElement.value=e.map(function(f){var u=f.value;return u}).join(this.config.delimiter):this.passedElement.options=e;var K=function(f){var u=n._getTemplate("item",f,M);t.appendChild(u)};return e.forEach(K),t},g.prototype._triggerChange=function(e){e!=null&&this.passedElement.triggerEvent(y.EVENTS.change,{value:e})},g.prototype._selectPlaceholderChoice=function(e){this._addItem({value:e.value,label:e.label,choiceId:e.id,groupId:e.groupId,placeholder:e.placeholder}),this._triggerChange(e.value)},g.prototype._handleButtonAction=function(e,t){if(!(!e||!t||!this.config.removeItems||!this.config.removeItemButton)){var n=t.parentNode&&t.parentNode.dataset.id,s=n&&e.find(function(v){return v.id===parseInt(n,10)});s&&(this._removeItem(s),this._triggerChange(s.value),this._isSelectOneElement&&this._store.placeholderChoice&&this._selectPlaceholderChoice(this._store.placeholderChoice))}},g.prototype._handleItemAction=function(e,t,n){var s=this;if(n===void 0&&(n=!1),!(!e||!t||!this.config.removeItems||this._isSelectOneElement)){var v=t.dataset.id;e.forEach(function(P){P.id===parseInt("".concat(v),10)&&!P.highlighted?s.highlightItem(P):!n&&P.highlighted&&s.unhighlightItem(P)}),this.input.focus()}},g.prototype._handleChoiceAction=function(e,t){if(!(!e||!t)){var n=t.dataset.id,s=n&&this._store.getChoiceById(n);if(s){var v=e[0]&&e[0].keyCode?e[0].keyCode:void 0,P=this.dropdown.isActive;if(s.keyCode=v,this.passedElement.triggerEvent(y.EVENTS.choice,{choice:s}),!s.selected&&!s.disabled){var M=this._canAddItem(e,s.value);M.response&&(this._addItem({value:s.value,label:s.label,choiceId:s.id,groupId:s.groupId,customProperties:s.customProperties,placeholder:s.placeholder,keyCode:s.keyCode}),this._triggerChange(s.value))}this.clearInput(),P&&this._isSelectOneElement&&(this.hideDropdown(!0),this.containerOuter.focus())}}},g.prototype._handleBackspace=function(e){if(!(!this.config.removeItems||!e)){var t=e[e.length-1],n=e.some(function(s){return s.highlighted});this.config.editItems&&!n&&t?(this.input.value=t.value,this.input.setWidth(),this._removeItem(t),this._triggerChange(t.value)):(n||this.highlightItem(t,!1),this.removeHighlightedItems(!0))}},g.prototype._startLoading=function(){this._store.dispatch((0,O.setIsLoading)(!0))},g.prototype._stopLoading=function(){this._store.dispatch((0,O.setIsLoading)(!1))},g.prototype._handleLoadingState=function(e){e===void 0&&(e=!0);var t=this.itemList.getChild(".".concat(this.config.classNames.placeholder));e?(this.disable(),this.containerOuter.addLoadingState(),this._isSelectOneElement?t?t.innerHTML=this.config.loadingText:(t=this._getTemplate("placeholder",this.config.loadingText),t&&this.itemList.append(t)):this.input.placeholder=this.config.loadingText):(this.enable(),this.containerOuter.removeLoadingState(),this._isSelectOneElement?t&&(t.innerHTML=this._placeholderValue||""):this.input.placeholder=this._placeholderValue||"")},g.prototype._handleSearch=function(e){if(this.input.isFocussed){var t=this._store.choices,n=this.config,s=n.searchFloor,v=n.searchChoices,P=t.some(function(K){return!K.active});if(e!==null&&typeof e<"u"&&e.length>=s){var M=v?this._searchChoices(e):0;this.passedElement.triggerEvent(y.EVENTS.search,{value:e,resultCount:M})}else P&&(this._isSearching=!1,this._store.dispatch((0,r.activateChoices)(!0)))}},g.prototype._canAddItem=function(e,t){var n=!0,s=typeof this.config.addItemText=="function"?this.config.addItemText(t):this.config.addItemText;if(!this._isSelectOneElement){var v=(0,k.existsInArray)(e,t);this.config.maxItemCount>0&&this.config.maxItemCount<=e.length&&(n=!1,s=typeof this.config.maxItemText=="function"?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),!this.config.duplicateItemsAllowed&&v&&n&&(n=!1,s=typeof this.config.uniqueItemText=="function"?this.config.uniqueItemText(t):this.config.uniqueItemText),this._isTextElement&&this.config.addItems&&n&&typeof this.config.addItemFilter=="function"&&!this.config.addItemFilter(t)&&(n=!1,s=typeof this.config.customAddItemText=="function"?this.config.customAddItemText(t):this.config.customAddItemText)}return{response:n,notice:s}},g.prototype._searchChoices=function(e){var t=typeof e=="string"?e.trim():e,n=typeof this._currentValue=="string"?this._currentValue.trim():this._currentValue;if(t.length<1&&t==="".concat(n," "))return 0;var s=this._store.searchableChoices,v=t,P=Object.assign(this.config.fuseOptions,{keys:_([],this.config.searchFields,!0),includeMatches:!0}),M=new a.default(s,P),K=M.search(v);return this._currentValue=t,this._highlightPosition=0,this._isSearching=!0,this._store.dispatch((0,r.filterChoices)(K)),K.length},g.prototype._addEventListeners=function(){var e=document.documentElement;e.addEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.addEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.addEventListener("mousedown",this._onMouseDown,!0),e.addEventListener("click",this._onClick,{passive:!0}),e.addEventListener("touchmove",this._onTouchMove,{passive:!0}),this.dropdown.element.addEventListener("mouseover",this._onMouseOver,{passive:!0}),this._isSelectOneElement&&(this.containerOuter.element.addEventListener("focus",this._onFocus,{passive:!0}),this.containerOuter.element.addEventListener("blur",this._onBlur,{passive:!0})),this.input.element.addEventListener("keyup",this._onKeyUp,{passive:!0}),this.input.element.addEventListener("focus",this._onFocus,{passive:!0}),this.input.element.addEventListener("blur",this._onBlur,{passive:!0}),this.input.element.form&&this.input.element.form.addEventListener("reset",this._onFormReset,{passive:!0}),this.input.addEventListeners()},g.prototype._removeEventListeners=function(){var e=document.documentElement;e.removeEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.removeEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.removeEventListener("mousedown",this._onMouseDown,!0),e.removeEventListener("click",this._onClick),e.removeEventListener("touchmove",this._onTouchMove),this.dropdown.element.removeEventListener("mouseover",this._onMouseOver),this._isSelectOneElement&&(this.containerOuter.element.removeEventListener("focus",this._onFocus),this.containerOuter.element.removeEventListener("blur",this._onBlur)),this.input.element.removeEventListener("keyup",this._onKeyUp),this.input.element.removeEventListener("focus",this._onFocus),this.input.element.removeEventListener("blur",this._onBlur),this.input.element.form&&this.input.element.form.removeEventListener("reset",this._onFormReset),this.input.removeEventListeners()},g.prototype._onKeyDown=function(e){var t=e.keyCode,n=this._store.activeItems,s=this.input.isFocussed,v=this.dropdown.isActive,P=this.itemList.hasChildren(),M=String.fromCharCode(t),K=/[^\x00-\x1F]/.test(M),f=y.KEY_CODES.BACK_KEY,u=y.KEY_CODES.DELETE_KEY,C=y.KEY_CODES.ENTER_KEY,Y=y.KEY_CODES.A_KEY,V=y.KEY_CODES.ESC_KEY,U=y.KEY_CODES.UP_KEY,$=y.KEY_CODES.DOWN_KEY,W=y.KEY_CODES.PAGE_UP_KEY,J=y.KEY_CODES.PAGE_DOWN_KEY;switch(!this._isTextElement&&!v&&K&&(this.showDropdown(),this.input.isFocussed||(this.input.value+=e.key.toLowerCase())),t){case Y:return this._onSelectKey(e,P);case C:return this._onEnterKey(e,n,v);case V:return this._onEscapeKey(v);case U:case W:case $:case J:return this._onDirectionKey(e,v);case u:case f:return this._onDeleteKey(e,n,s);default:}},g.prototype._onKeyUp=function(e){var t=e.target,n=e.keyCode,s=this.input.value,v=this._store.activeItems,P=this._canAddItem(v,s),M=y.KEY_CODES.BACK_KEY,K=y.KEY_CODES.DELETE_KEY;if(this._isTextElement){var f=P.notice&&s;if(f){var u=this._getTemplate("notice",P.notice);this.dropdown.element.innerHTML=u.outerHTML,this.showDropdown(!0)}else this.hideDropdown(!0)}else{var C=n===M||n===K,Y=C&&t&&!t.value,V=!this._isTextElement&&this._isSearching,U=this._canSearch&&P.response;Y&&V?(this._isSearching=!1,this._store.dispatch((0,r.activateChoices)(!0))):U&&this._handleSearch(this.input.rawValue)}this._canSearch=this.config.searchEnabled},g.prototype._onSelectKey=function(e,t){var n=e.ctrlKey,s=e.metaKey,v=n||s;if(v&&t){this._canSearch=!1;var P=this.config.removeItems&&!this.input.value&&this.input.element===document.activeElement;P&&this.highlightAll()}},g.prototype._onEnterKey=function(e,t,n){var s=e.target,v=y.KEY_CODES.ENTER_KEY,P=s&&s.hasAttribute("data-button");if(this._isTextElement&&s&&s.value){var M=this.input.value,K=this._canAddItem(t,M);K.response&&(this.hideDropdown(!0),this._addItem({value:M}),this._triggerChange(M),this.clearInput())}if(P&&(this._handleButtonAction(t,s),e.preventDefault()),n){var f=this.dropdown.getChild(".".concat(this.config.classNames.highlightedState));f&&(t[0]&&(t[0].keyCode=v),this._handleChoiceAction(t,f)),e.preventDefault()}else this._isSelectOneElement&&(this.showDropdown(),e.preventDefault())},g.prototype._onEscapeKey=function(e){e&&(this.hideDropdown(!0),this.containerOuter.focus())},g.prototype._onDirectionKey=function(e,t){var n=e.keyCode,s=e.metaKey,v=y.KEY_CODES.DOWN_KEY,P=y.KEY_CODES.PAGE_UP_KEY,M=y.KEY_CODES.PAGE_DOWN_KEY;if(t||this._isSelectOneElement){this.showDropdown(),this._canSearch=!1;var K=n===v||n===M?1:-1,f=s||n===M||n===P,u="[data-choice-selectable]",C=void 0;if(f)K>0?C=this.dropdown.element.querySelector("".concat(u,":last-of-type")):C=this.dropdown.element.querySelector(u);else{var Y=this.dropdown.element.querySelector(".".concat(this.config.classNames.highlightedState));Y?C=(0,k.getAdjacentEl)(Y,u,K):C=this.dropdown.element.querySelector(u)}C&&((0,k.isScrolledIntoView)(C,this.choiceList.element,K)||this.choiceList.scrollToChildElement(C,K),this._highlightChoice(C)),e.preventDefault()}},g.prototype._onDeleteKey=function(e,t,n){var s=e.target;!this._isSelectOneElement&&!s.value&&n&&(this._handleBackspace(t),e.preventDefault())},g.prototype._onTouchMove=function(){this._wasTap&&(this._wasTap=!1)},g.prototype._onTouchEnd=function(e){var t=(e||e.touches[0]).target,n=this._wasTap&&this.containerOuter.element.contains(t);if(n){var s=t===this.containerOuter.element||t===this.containerInner.element;s&&(this._isTextElement?this.input.focus():this._isSelectMultipleElement&&this.showDropdown()),e.stopPropagation()}this._wasTap=!0},g.prototype._onMouseDown=function(e){var t=e.target;if(t instanceof HTMLElement){if(E&&this.choiceList.element.contains(t)){var n=this.choiceList.element.firstElementChild,s=this._direction==="ltr"?e.offsetX>=n.offsetWidth:e.offsetX0;s&&this.unhighlightAll(),this.containerOuter.removeFocusState(),this.hideDropdown(!0)}},g.prototype._onFocus=function(e){var t,n=this,s=e.target,v=s&&this.containerOuter.element.contains(s);if(v){var P=(t={},t[y.TEXT_TYPE]=function(){s===n.input.element&&n.containerOuter.addFocusState()},t[y.SELECT_ONE_TYPE]=function(){n.containerOuter.addFocusState(),s===n.input.element&&n.showDropdown(!0)},t[y.SELECT_MULTIPLE_TYPE]=function(){s===n.input.element&&(n.showDropdown(!0),n.containerOuter.addFocusState())},t);P[this.passedElement.element.type]()}},g.prototype._onBlur=function(e){var t,n=this,s=e.target,v=s&&this.containerOuter.element.contains(s);if(v&&!this._isScrollingOnIe){var P=this._store.activeItems,M=P.some(function(f){return f.highlighted}),K=(t={},t[y.TEXT_TYPE]=function(){s===n.input.element&&(n.containerOuter.removeFocusState(),M&&n.unhighlightAll(),n.hideDropdown(!0))},t[y.SELECT_ONE_TYPE]=function(){n.containerOuter.removeFocusState(),(s===n.input.element||s===n.containerOuter.element&&!n._canSearch)&&n.hideDropdown(!0)},t[y.SELECT_MULTIPLE_TYPE]=function(){s===n.input.element&&(n.containerOuter.removeFocusState(),n.hideDropdown(!0),M&&n.unhighlightAll())},t);K[this.passedElement.element.type]()}else this._isScrollingOnIe=!1,this.input.element.focus()},g.prototype._onFormReset=function(){this._store.dispatch((0,O.resetTo)(this._initialState))},g.prototype._highlightChoice=function(e){var t=this;e===void 0&&(e=null);var n=Array.from(this.dropdown.element.querySelectorAll("[data-choice-selectable]"));if(n.length){var s=e,v=Array.from(this.dropdown.element.querySelectorAll(".".concat(this.config.classNames.highlightedState)));v.forEach(function(P){P.classList.remove(t.config.classNames.highlightedState),P.setAttribute("aria-selected","false")}),s?this._highlightPosition=n.indexOf(s):(n.length>this._highlightPosition?s=n[this._highlightPosition]:s=n[n.length-1],s||(s=n[0])),s.classList.add(this.config.classNames.highlightedState),s.setAttribute("aria-selected","true"),this.passedElement.triggerEvent(y.EVENTS.highlightChoice,{el:s}),this.dropdown.isActive&&(this.input.setActiveDescendant(s.id),this.containerOuter.setActiveDescendant(s.id))}},g.prototype._addItem=function(e){var t=e.value,n=e.label,s=n===void 0?null:n,v=e.choiceId,P=v===void 0?-1:v,M=e.groupId,K=M===void 0?-1:M,f=e.customProperties,u=f===void 0?{}:f,C=e.placeholder,Y=C===void 0?!1:C,V=e.keyCode,U=V===void 0?-1:V,$=typeof t=="string"?t.trim():t,W=this._store.items,J=s||$,z=P||-1,ee=K>=0?this._store.getGroupById(K):null,ae=W?W.length+1:1;this.config.prependValue&&($=this.config.prependValue+$.toString()),this.config.appendValue&&($+=this.config.appendValue.toString()),this._store.dispatch((0,l.addItem)({value:$,label:J,id:ae,choiceId:z,groupId:K,customProperties:u,placeholder:Y,keyCode:U})),this._isSelectOneElement&&this.removeActiveItems(ae),this.passedElement.triggerEvent(y.EVENTS.addItem,{id:ae,value:$,label:J,customProperties:u,groupValue:ee&&ee.value?ee.value:null,keyCode:U})},g.prototype._removeItem=function(e){var t=e.id,n=e.value,s=e.label,v=e.customProperties,P=e.choiceId,M=e.groupId,K=M&&M>=0?this._store.getGroupById(M):null;!t||!P||(this._store.dispatch((0,l.removeItem)(t,P)),this.passedElement.triggerEvent(y.EVENTS.removeItem,{id:t,value:n,label:s,customProperties:v,groupValue:K&&K.value?K.value:null}))},g.prototype._addChoice=function(e){var t=e.value,n=e.label,s=n===void 0?null:n,v=e.isSelected,P=v===void 0?!1:v,M=e.isDisabled,K=M===void 0?!1:M,f=e.groupId,u=f===void 0?-1:f,C=e.customProperties,Y=C===void 0?{}:C,V=e.placeholder,U=V===void 0?!1:V,$=e.keyCode,W=$===void 0?-1:$;if(!(typeof t>"u"||t===null)){var J=this._store.choices,z=s||t,ee=J?J.length+1:1,ae="".concat(this._baseId,"-").concat(this._idNames.itemChoice,"-").concat(ee);this._store.dispatch((0,r.addChoice)({id:ee,groupId:u,elementId:ae,value:t,label:z,disabled:K,customProperties:Y,placeholder:U,keyCode:W})),P&&this._addItem({value:t,label:z,choiceId:ee,customProperties:Y,placeholder:U,keyCode:W})}},g.prototype._addGroup=function(e){var t=this,n=e.group,s=e.id,v=e.valueKey,P=v===void 0?"value":v,M=e.labelKey,K=M===void 0?"label":M,f=(0,k.isType)("Object",n)?n.choices:Array.from(n.getElementsByTagName("OPTION")),u=s||Math.floor(new Date().valueOf()*Math.random()),C=n.disabled?n.disabled:!1;if(f){this._store.dispatch((0,c.addGroup)({value:n.label,id:u,active:!0,disabled:C}));var Y=function(V){var U=V.disabled||V.parentNode&&V.parentNode.disabled;t._addChoice({value:V[P],label:(0,k.isType)("Object",V)?V[K]:V.innerHTML,isSelected:V.selected,isDisabled:U,groupId:u,customProperties:V.customProperties,placeholder:V.placeholder})};f.forEach(Y)}else this._store.dispatch((0,c.addGroup)({value:n.label,id:n.id,active:!1,disabled:n.disabled}))},g.prototype._getTemplate=function(e){for(var t,n=[],s=1;s0?this.element.scrollTop+y-O:a.offsetTop;requestAnimationFrame(function(){c._animateScroll(D,r)})}},d.prototype._scrollDown=function(a,r,c){var l=(c-a)/r,O=l>1?l:1;this.element.scrollTop=a+O},d.prototype._scrollUp=function(a,r,c){var l=(a-c)/r,O=l>1?l:1;this.element.scrollTop=a-O},d.prototype._animateScroll=function(a,r){var c=this,l=_.SCROLLING_SPEED,O=this.element.scrollTop,L=!1;r>0?(this._scrollDown(O,l,a),Oa&&(L=!0)),L&&requestAnimationFrame(function(){c._animateScroll(a,r)})},d}();i.default=h},730:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0});var _=b(799),h=function(){function d(a){var r=a.element,c=a.classNames;if(this.element=r,this.classNames=c,!(r instanceof HTMLInputElement)&&!(r instanceof HTMLSelectElement))throw new TypeError("Invalid element passed");this.isDisabled=!1}return Object.defineProperty(d.prototype,"isActive",{get:function(){return this.element.dataset.choice==="active"},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,"dir",{get:function(){return this.element.dir},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,"value",{get:function(){return this.element.value},set:function(a){this.element.value=a},enumerable:!1,configurable:!0}),d.prototype.conceal=function(){this.element.classList.add(this.classNames.input),this.element.hidden=!0,this.element.tabIndex=-1;var a=this.element.getAttribute("style");a&&this.element.setAttribute("data-choice-orig-style",a),this.element.setAttribute("data-choice","active")},d.prototype.reveal=function(){this.element.classList.remove(this.classNames.input),this.element.hidden=!1,this.element.removeAttribute("tabindex");var a=this.element.getAttribute("data-choice-orig-style");a?(this.element.removeAttribute("data-choice-orig-style"),this.element.setAttribute("style",a)):this.element.removeAttribute("style"),this.element.removeAttribute("data-choice"),this.element.value=this.element.value},d.prototype.enable=function(){this.element.removeAttribute("disabled"),this.element.disabled=!1,this.isDisabled=!1},d.prototype.disable=function(){this.element.setAttribute("disabled",""),this.element.disabled=!0,this.isDisabled=!0},d.prototype.triggerEvent=function(a,r){(0,_.dispatchEvent)(this.element,a,r)},d}();i.default=h},541:function(j,i,b){var _=this&&this.__extends||function(){var r=function(c,l){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(O,L){O.__proto__=L}||function(O,L){for(var y in L)Object.prototype.hasOwnProperty.call(L,y)&&(O[y]=L[y])},r(c,l)};return function(c,l){if(typeof l!="function"&&l!==null)throw new TypeError("Class extends value "+String(l)+" is not a constructor or null");r(c,l);function O(){this.constructor=c}c.prototype=l===null?Object.create(l):(O.prototype=l.prototype,new O)}}(),h=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(i,"__esModule",{value:!0});var d=h(b(730)),a=function(r){_(c,r);function c(l){var O=l.element,L=l.classNames,y=l.delimiter,D=r.call(this,{element:O,classNames:L})||this;return D.delimiter=y,D}return Object.defineProperty(c.prototype,"value",{get:function(){return this.element.value},set:function(l){this.element.setAttribute("value",l),this.element.value=l},enumerable:!1,configurable:!0}),c}(d.default);i.default=a},982:function(j,i,b){var _=this&&this.__extends||function(){var r=function(c,l){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(O,L){O.__proto__=L}||function(O,L){for(var y in L)Object.prototype.hasOwnProperty.call(L,y)&&(O[y]=L[y])},r(c,l)};return function(c,l){if(typeof l!="function"&&l!==null)throw new TypeError("Class extends value "+String(l)+" is not a constructor or null");r(c,l);function O(){this.constructor=c}c.prototype=l===null?Object.create(l):(O.prototype=l.prototype,new O)}}(),h=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(i,"__esModule",{value:!0});var d=h(b(730)),a=function(r){_(c,r);function c(l){var O=l.element,L=l.classNames,y=l.template,D=r.call(this,{element:O,classNames:L})||this;return D.template=y,D}return Object.defineProperty(c.prototype,"placeholderOption",{get:function(){return this.element.querySelector('option[value=""]')||this.element.querySelector("option[placeholder]")},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"optionGroups",{get:function(){return Array.from(this.element.getElementsByTagName("OPTGROUP"))},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"options",{get:function(){return Array.from(this.element.options)},set:function(l){var O=this,L=document.createDocumentFragment(),y=function(D){var k=O.template(D);L.appendChild(k)};l.forEach(function(D){return y(D)}),this.appendDocFragment(L)},enumerable:!1,configurable:!0}),c.prototype.appendDocFragment=function(l){this.element.innerHTML="",this.element.appendChild(l)},c}(d.default);i.default=a},883:function(j,i){Object.defineProperty(i,"__esModule",{value:!0}),i.SCROLLING_SPEED=i.SELECT_MULTIPLE_TYPE=i.SELECT_ONE_TYPE=i.TEXT_TYPE=i.KEY_CODES=i.ACTION_TYPES=i.EVENTS=void 0,i.EVENTS={showDropdown:"showDropdown",hideDropdown:"hideDropdown",change:"change",choice:"choice",search:"search",addItem:"addItem",removeItem:"removeItem",highlightItem:"highlightItem",highlightChoice:"highlightChoice",unhighlightItem:"unhighlightItem"},i.ACTION_TYPES={ADD_CHOICE:"ADD_CHOICE",FILTER_CHOICES:"FILTER_CHOICES",ACTIVATE_CHOICES:"ACTIVATE_CHOICES",CLEAR_CHOICES:"CLEAR_CHOICES",ADD_GROUP:"ADD_GROUP",ADD_ITEM:"ADD_ITEM",REMOVE_ITEM:"REMOVE_ITEM",HIGHLIGHT_ITEM:"HIGHLIGHT_ITEM",CLEAR_ALL:"CLEAR_ALL",RESET_TO:"RESET_TO",SET_IS_LOADING:"SET_IS_LOADING"},i.KEY_CODES={BACK_KEY:46,DELETE_KEY:8,ENTER_KEY:13,A_KEY:65,ESC_KEY:27,UP_KEY:38,DOWN_KEY:40,PAGE_UP_KEY:33,PAGE_DOWN_KEY:34},i.TEXT_TYPE="text",i.SELECT_ONE_TYPE="select-one",i.SELECT_MULTIPLE_TYPE="select-multiple",i.SCROLLING_SPEED=4},789:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.DEFAULT_CONFIG=i.DEFAULT_CLASSNAMES=void 0;var _=b(799);i.DEFAULT_CLASSNAMES={containerOuter:"choices",containerInner:"choices__inner",input:"choices__input",inputCloned:"choices__input--cloned",list:"choices__list",listItems:"choices__list--multiple",listSingle:"choices__list--single",listDropdown:"choices__list--dropdown",item:"choices__item",itemSelectable:"choices__item--selectable",itemDisabled:"choices__item--disabled",itemChoice:"choices__item--choice",placeholder:"choices__placeholder",group:"choices__group",groupHeading:"choices__heading",button:"choices__button",activeState:"is-active",focusState:"is-focused",openState:"is-open",disabledState:"is-disabled",highlightedState:"is-highlighted",selectedState:"is-selected",flippedState:"is-flipped",loadingState:"is-loading",noResults:"has-no-results",noChoices:"has-no-choices"},i.DEFAULT_CONFIG={items:[],choices:[],silent:!1,renderChoiceLimit:-1,maxItemCount:-1,addItems:!0,addItemFilter:null,removeItems:!0,removeItemButton:!1,editItems:!1,allowHTML:!0,duplicateItemsAllowed:!0,delimiter:",",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:["label","value"],position:"auto",resetScrollPosition:!0,shouldSort:!0,shouldSortItems:!1,sorter:_.sortByAlpha,placeholder:!0,placeholderValue:null,searchPlaceholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:"auto",loadingText:"Loading...",noResultsText:"No results found",noChoicesText:"No choices to choose from",itemSelectText:"Press to select",uniqueItemText:"Only unique values can be added",customAddItemText:"Only values matching specific conditions can be added",addItemText:function(h){return'Press Enter to add "'.concat((0,_.sanitise)(h),'"')},maxItemText:function(h){return"Only ".concat(h," values can be added")},valueComparer:function(h,d){return h===d},fuseOptions:{includeScore:!0},labelId:"",callbackOnInit:null,callbackOnCreateTemplates:null,classNames:i.DEFAULT_CLASSNAMES}},18:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},978:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},948:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},359:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},285:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},533:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},187:function(j,i,b){var _=this&&this.__createBinding||(Object.create?function(d,a,r,c){c===void 0&&(c=r);var l=Object.getOwnPropertyDescriptor(a,r);(!l||("get"in l?!a.__esModule:l.writable||l.configurable))&&(l={enumerable:!0,get:function(){return a[r]}}),Object.defineProperty(d,c,l)}:function(d,a,r,c){c===void 0&&(c=r),d[c]=a[r]}),h=this&&this.__exportStar||function(d,a){for(var r in d)r!=="default"&&!Object.prototype.hasOwnProperty.call(a,r)&&_(a,d,r)};Object.defineProperty(i,"__esModule",{value:!0}),h(b(18),i),h(b(978),i),h(b(948),i),h(b(359),i),h(b(285),i),h(b(533),i),h(b(287),i),h(b(132),i),h(b(837),i),h(b(598),i),h(b(369),i),h(b(37),i),h(b(47),i),h(b(923),i),h(b(876),i)},287:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},132:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},837:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},598:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},37:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},369:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},47:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},923:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},876:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},799:function(j,i){Object.defineProperty(i,"__esModule",{value:!0}),i.parseCustomProperties=i.diff=i.cloneObject=i.existsInArray=i.dispatchEvent=i.sortByScore=i.sortByAlpha=i.strToEl=i.sanitise=i.isScrolledIntoView=i.getAdjacentEl=i.wrap=i.isType=i.getType=i.generateId=i.generateChars=i.getRandomNumber=void 0;var b=function(E,w){return Math.floor(Math.random()*(w-E)+E)};i.getRandomNumber=b;var _=function(E){return Array.from({length:E},function(){return(0,i.getRandomNumber)(0,36).toString(36)}).join("")};i.generateChars=_;var h=function(E,w){var N=E.id||E.name&&"".concat(E.name,"-").concat((0,i.generateChars)(2))||(0,i.generateChars)(4);return N=N.replace(/(:|\.|\[|\]|,)/g,""),N="".concat(w,"-").concat(N),N};i.generateId=h;var d=function(E){return Object.prototype.toString.call(E).slice(8,-1)};i.getType=d;var a=function(E,w){return w!=null&&(0,i.getType)(w)===E};i.isType=a;var r=function(E,w){return w===void 0&&(w=document.createElement("div")),E.parentNode&&(E.nextSibling?E.parentNode.insertBefore(w,E.nextSibling):E.parentNode.appendChild(w)),w.appendChild(E)};i.wrap=r;var c=function(E,w,N){N===void 0&&(N=1);for(var g="".concat(N>0?"next":"previous","ElementSibling"),e=E[g];e;){if(e.matches(w))return e;e=e[g]}return e};i.getAdjacentEl=c;var l=function(E,w,N){if(N===void 0&&(N=1),!E)return!1;var g;return N>0?g=w.scrollTop+w.offsetHeight>=E.offsetTop+E.offsetHeight:g=E.offsetTop>=w.scrollTop,g};i.isScrolledIntoView=l;var O=function(E){return typeof E!="string"?E:E.replace(/&/g,"&").replace(/>/g,">").replace(/-1?h.map(function(y){var D=y;return D.id===parseInt("".concat(c.choiceId),10)&&(D.selected=!0),D}):h}case"REMOVE_ITEM":{var l=d;return l.choiceId&&l.choiceId>-1?h.map(function(y){var D=y;return D.id===parseInt("".concat(l.choiceId),10)&&(D.selected=!1),D}):h}case"FILTER_CHOICES":{var O=d;return h.map(function(y){var D=y;return D.active=O.results.some(function(k){var Q=k.item,Z=k.score;return Q.id===D.id?(D.score=Z,!0):!1}),D})}case"ACTIVATE_CHOICES":{var L=d;return h.map(function(y){var D=y;return D.active=L.active,D})}case"CLEAR_CHOICES":return i.defaultState;default:return h}}i.default=_},871:function(j,i){var b=this&&this.__spreadArray||function(h,d,a){if(a||arguments.length===2)for(var r=0,c=d.length,l;r0?"treeitem":"option"),Object.assign(t.dataset,{choice:"",id:Q,value:Z,selectText:d}),N?(t.classList.add(D),t.dataset.choiceDisabled="",t.setAttribute("aria-disabled","true")):(t.classList.add(L),t.dataset.choiceSelectable=""),t},input:function(_,h){var d=_.classNames,a=d.input,r=d.inputCloned,c=Object.assign(document.createElement("input"),{type:"search",name:"search_terms",className:"".concat(a," ").concat(r),autocomplete:"off",autocapitalize:"off",spellcheck:!1});return c.setAttribute("role","textbox"),c.setAttribute("aria-autocomplete","list"),c.setAttribute("aria-label",h),c},dropdown:function(_){var h=_.classNames,d=h.list,a=h.listDropdown,r=document.createElement("div");return r.classList.add(d,a),r.setAttribute("aria-expanded","false"),r},notice:function(_,h,d){var a,r=_.allowHTML,c=_.classNames,l=c.item,O=c.itemChoice,L=c.noResults,y=c.noChoices;d===void 0&&(d="");var D=[l,O];return d==="no-choices"?D.push(y):d==="no-results"&&D.push(L),Object.assign(document.createElement("div"),(a={},a[r?"innerHTML":"innerText"]=h,a.className=D.join(" "),a))},option:function(_){var h=_.label,d=_.value,a=_.customProperties,r=_.active,c=_.disabled,l=new Option(h,d,!1,r);return a&&(l.dataset.customProperties="".concat(a)),l.disabled=!!c,l}};i.default=b},996:function(j){var i=function(w){return b(w)&&!_(w)};function b(E){return!!E&&typeof E=="object"}function _(E){var w=Object.prototype.toString.call(E);return w==="[object RegExp]"||w==="[object Date]"||a(E)}var h=typeof Symbol=="function"&&Symbol.for,d=h?Symbol.for("react.element"):60103;function a(E){return E.$$typeof===d}function r(E){return Array.isArray(E)?[]:{}}function c(E,w){return w.clone!==!1&&w.isMergeableObject(E)?Z(r(E),E,w):E}function l(E,w,N){return E.concat(w).map(function(g){return c(g,N)})}function O(E,w){if(!w.customMerge)return Z;var N=w.customMerge(E);return typeof N=="function"?N:Z}function L(E){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(E).filter(function(w){return E.propertyIsEnumerable(w)}):[]}function y(E){return Object.keys(E).concat(L(E))}function D(E,w){try{return w in E}catch{return!1}}function k(E,w){return D(E,w)&&!(Object.hasOwnProperty.call(E,w)&&Object.propertyIsEnumerable.call(E,w))}function Q(E,w,N){var g={};return N.isMergeableObject(E)&&y(E).forEach(function(e){g[e]=c(E[e],N)}),y(w).forEach(function(e){k(E,e)||(D(E,e)&&N.isMergeableObject(w[e])?g[e]=O(e,N)(E[e],w[e],N):g[e]=c(w[e],N))}),g}function Z(E,w,N){N=N||{},N.arrayMerge=N.arrayMerge||l,N.isMergeableObject=N.isMergeableObject||i,N.cloneUnlessOtherwiseSpecified=c;var g=Array.isArray(w),e=Array.isArray(E),t=g===e;return t?g?N.arrayMerge(E,w,N):Q(E,w,N):c(w,N)}Z.all=function(w,N){if(!Array.isArray(w))throw new Error("first argument should be an array");return w.reduce(function(g,e){return Z(g,e,N)},{})};var ne=Z;j.exports=ne},221:function(j,i,b){b.r(i),b.d(i,{default:function(){return Se}});function _(p){return Array.isArray?Array.isArray(p):k(p)==="[object Array]"}let h=1/0;function d(p){if(typeof p=="string")return p;let o=p+"";return o=="0"&&1/p==-h?"-0":o}function a(p){return p==null?"":d(p)}function r(p){return typeof p=="string"}function c(p){return typeof p=="number"}function l(p){return p===!0||p===!1||L(p)&&k(p)=="[object Boolean]"}function O(p){return typeof p=="object"}function L(p){return O(p)&&p!==null}function y(p){return p!=null}function D(p){return!p.trim().length}function k(p){return p==null?p===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(p)}let Q="Extended search is not available",Z="Incorrect 'index' type",ne=p=>`Invalid value for key ${p}`,E=p=>`Pattern length exceeds max of ${p}.`,w=p=>`Missing ${p} property in key`,N=p=>`Property 'weight' in key '${p}' must be a positive integer`,g=Object.prototype.hasOwnProperty;class e{constructor(o){this._keys=[],this._keyMap={};let m=0;o.forEach(S=>{let I=t(S);m+=I.weight,this._keys.push(I),this._keyMap[I.id]=I,m+=I.weight}),this._keys.forEach(S=>{S.weight/=m})}get(o){return this._keyMap[o]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function t(p){let o=null,m=null,S=null,I=1,T=null;if(r(p)||_(p))S=p,o=n(p),m=s(p);else{if(!g.call(p,"name"))throw new Error(w("name"));let A=p.name;if(S=A,g.call(p,"weight")&&(I=p.weight,I<=0))throw new Error(N(A));o=n(A),m=s(A),T=p.getFn}return{path:o,id:m,weight:I,src:S,getFn:T}}function n(p){return _(p)?p:p.split(".")}function s(p){return _(p)?p.join("."):p}function v(p,o){let m=[],S=!1,I=(T,A,R)=>{if(y(T))if(!A[R])m.push(T);else{let F=A[R],H=T[F];if(!y(H))return;if(R===A.length-1&&(r(H)||c(H)||l(H)))m.push(a(H));else if(_(H)){S=!0;for(let B=0,x=H.length;Bp.score===o.score?p.idx{this._keysMap[m.id]=S})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,r(this.docs[0])?this.docs.forEach((o,m)=>{this._addString(o,m)}):this.docs.forEach((o,m)=>{this._addObject(o,m)}),this.norm.clear())}add(o){let m=this.size();r(o)?this._addString(o,m):this._addObject(o,m)}removeAt(o){this.records.splice(o,1);for(let m=o,S=this.size();m{let A=I.getFn?I.getFn(o):this.getFn(o,I.path);if(y(A)){if(_(A)){let R=[],F=[{nestedArrIndex:-1,value:A}];for(;F.length;){let{nestedArrIndex:H,value:B}=F.pop();if(y(B))if(r(B)&&!D(B)){let x={v:B,i:H,n:this.norm.get(B)};R.push(x)}else _(B)&&B.forEach((x,G)=>{F.push({nestedArrIndex:G,value:x})})}S.$[T]=R}else if(r(A)&&!D(A)){let R={v:A,n:this.norm.get(A)};S.$[T]=R}}}),this.records.push(S)}toJSON(){return{keys:this.keys,records:this.records}}}function U(p,o,{getFn:m=u.getFn,fieldNormWeight:S=u.fieldNormWeight}={}){let I=new V({getFn:m,fieldNormWeight:S});return I.setKeys(p.map(t)),I.setSources(o),I.create(),I}function $(p,{getFn:o=u.getFn,fieldNormWeight:m=u.fieldNormWeight}={}){let{keys:S,records:I}=p,T=new V({getFn:o,fieldNormWeight:m});return T.setKeys(S),T.setIndexRecords(I),T}function W(p,{errors:o=0,currentLocation:m=0,expectedLocation:S=0,distance:I=u.distance,ignoreLocation:T=u.ignoreLocation}={}){let A=o/p.length;if(T)return A;let R=Math.abs(S-m);return I?A+R/I:R?1:A}function J(p=[],o=u.minMatchCharLength){let m=[],S=-1,I=-1,T=0;for(let A=p.length;T=o&&m.push([S,I]),S=-1)}return p[T-1]&&T-S>=o&&m.push([S,T-1]),m}let z=32;function ee(p,o,m,{location:S=u.location,distance:I=u.distance,threshold:T=u.threshold,findAllMatches:A=u.findAllMatches,minMatchCharLength:R=u.minMatchCharLength,includeMatches:F=u.includeMatches,ignoreLocation:H=u.ignoreLocation}={}){if(o.length>z)throw new Error(E(z));let B=o.length,x=p.length,G=Math.max(0,Math.min(S,x)),q=T,re=G,ue=R>1||F,Ee=ue?Array(x):[],ve;for(;(ve=p.indexOf(o,re))>-1;){let he=W(o,{currentLocation:ve,expectedLocation:G,distance:I,ignoreLocation:H});if(q=Math.min(he,q),re=ve+B,ue){let ge=0;for(;ge=Ue;fe-=1){let Le=fe-1,We=m[p.charAt(Le)];if(ue&&(Ee[Le]=+!!We),Oe[fe]=(Oe[fe+1]<<1|1)&We,he&&(Oe[fe]|=(Ie[fe+1]|Ie[fe])<<1|1|Ie[fe+1]),Oe[fe]&at&&(be=W(o,{errors:he,currentLocation:Le,expectedLocation:G,distance:I,ignoreLocation:H}),be<=q)){if(q=be,re=Le,re<=G)break;Ue=Math.max(1,2*G-re)}}if(W(o,{errors:he+1,currentLocation:G,expectedLocation:G,distance:I,ignoreLocation:H})>q)break;Ie=Oe}let Ke={isMatch:re>=0,score:Math.max(.001,be)};if(ue){let he=J(Ee,R);he.length?F&&(Ke.indices=he):Ke.isMatch=!1}return Ke}function ae(p){let o={};for(let m=0,S=p.length;m{this.chunks.push({pattern:G,alphabet:ae(G),startIndex:q})},x=this.pattern.length;if(x>z){let G=0,q=x%z,re=x-q;for(;G{let{isMatch:ve,score:Ie,indices:be}=ee(o,re,ue,{location:I+Ee,distance:T,threshold:A,findAllMatches:R,minMatchCharLength:F,includeMatches:S,ignoreLocation:H});ve&&(G=!0),x+=Ie,ve&&be&&(B=[...B,...be])});let q={isMatch:G,score:G?x/this.chunks.length:1};return G&&S&&(q.indices=B),q}}class le{constructor(o){this.pattern=o}static isMultiMatch(o){return _e(o,this.multiRegex)}static isSingleMatch(o){return _e(o,this.singleRegex)}search(){}}function _e(p,o){let m=p.match(o);return m?m[1]:null}class te extends le{constructor(o){super(o)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(o){let m=o===this.pattern;return{isMatch:m,score:m?0:1,indices:[0,this.pattern.length-1]}}}class de extends le{constructor(o){super(o)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(o){let S=o.indexOf(this.pattern)===-1;return{isMatch:S,score:S?0:1,indices:[0,o.length-1]}}}class pe extends le{constructor(o){super(o)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(o){let m=o.startsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[0,this.pattern.length-1]}}}class oe extends le{constructor(o){super(o)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(o){let m=!o.startsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[0,o.length-1]}}}class Te extends le{constructor(o){super(o)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(o){let m=o.endsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[o.length-this.pattern.length,o.length-1]}}}class Pe extends le{constructor(o){super(o)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(o){let m=!o.endsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[0,o.length-1]}}}class He extends le{constructor(o,{location:m=u.location,threshold:S=u.threshold,distance:I=u.distance,includeMatches:T=u.includeMatches,findAllMatches:A=u.findAllMatches,minMatchCharLength:R=u.minMatchCharLength,isCaseSensitive:F=u.isCaseSensitive,ignoreLocation:H=u.ignoreLocation}={}){super(o),this._bitapSearch=new ce(o,{location:m,threshold:S,distance:I,includeMatches:T,findAllMatches:A,minMatchCharLength:R,isCaseSensitive:F,ignoreLocation:H})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(o){return this._bitapSearch.searchIn(o)}}class Be extends le{constructor(o){super(o)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(o){let m=0,S,I=[],T=this.pattern.length;for(;(S=o.indexOf(this.pattern,m))>-1;)m=S+T,I.push([S,m-1]);let A=!!I.length;return{isMatch:A,score:A?0:1,indices:I}}}let Me=[te,Be,pe,oe,Pe,Te,de,He],Ve=Me.length,Xe=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Je="|";function Qe(p,o={}){return p.split(Je).map(m=>{let S=m.trim().split(Xe).filter(T=>T&&!!T.trim()),I=[];for(let T=0,A=S.length;T!!(p[Ce.AND]||p[Ce.OR]),tt=p=>!!p[je.PATH],it=p=>!_(p)&&O(p)&&!Re(p),ke=p=>({[Ce.AND]:Object.keys(p).map(o=>({[o]:p[o]}))});function xe(p,o,{auto:m=!0}={}){let S=I=>{let T=Object.keys(I),A=tt(I);if(!A&&T.length>1&&!Re(I))return S(ke(I));if(it(I)){let F=A?I[je.PATH]:T[0],H=A?I[je.PATTERN]:I[F];if(!r(H))throw new Error(ne(F));let B={keyId:s(F),pattern:H};return m&&(B.searcher=Ne(H,o)),B}let R={children:[],operator:T[0]};return T.forEach(F=>{let H=I[F];_(H)&&H.forEach(B=>{R.children.push(S(B))})}),R};return Re(p)||(p=ke(p)),S(p)}function nt(p,{ignoreFieldNorm:o=u.ignoreFieldNorm}){p.forEach(m=>{let S=1;m.matches.forEach(({key:I,norm:T,score:A})=>{let R=I?I.weight:null;S*=Math.pow(A===0&&R?Number.EPSILON:A,(R||1)*(o?1:T))}),m.score=S})}function rt(p,o){let m=p.matches;o.matches=[],y(m)&&m.forEach(S=>{if(!y(S.indices)||!S.indices.length)return;let{indices:I,value:T}=S,A={indices:I,value:T};S.key&&(A.key=S.key.src),S.idx>-1&&(A.refIndex=S.idx),o.matches.push(A)})}function st(p,o){o.score=p.score}function ot(p,o,{includeMatches:m=u.includeMatches,includeScore:S=u.includeScore}={}){let I=[];return m&&I.push(rt),S&&I.push(st),p.map(T=>{let{idx:A}=T,R={item:o[A],refIndex:A};return I.length&&I.forEach(F=>{F(T,R)}),R})}class Se{constructor(o,m={},S){this.options={...u,...m},this.options.useExtendedSearch,this._keyStore=new e(this.options.keys),this.setCollection(o,S)}setCollection(o,m){if(this._docs=o,m&&!(m instanceof V))throw new Error(Z);this._myIndex=m||U(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(o){y(o)&&(this._docs.push(o),this._myIndex.add(o))}remove(o=()=>!1){let m=[];for(let S=0,I=this._docs.length;S-1&&(F=F.slice(0,m)),ot(F,this._docs,{includeMatches:S,includeScore:I})}_searchStringList(o){let m=Ne(o,this.options),{records:S}=this._myIndex,I=[];return S.forEach(({v:T,i:A,n:R})=>{if(!y(T))return;let{isMatch:F,score:H,indices:B}=m.searchIn(T);F&&I.push({item:T,idx:A,matches:[{score:H,value:T,norm:R,indices:B}]})}),I}_searchLogical(o){let m=xe(o,this.options),S=(R,F,H)=>{if(!R.children){let{keyId:x,searcher:G}=R,q=this._findMatches({key:this._keyStore.get(x),value:this._myIndex.getValueForItemAtKeyId(F,x),searcher:G});return q&&q.length?[{idx:H,item:F,matches:q}]:[]}let B=[];for(let x=0,G=R.children.length;x{if(y(R)){let H=S(m,R,F);H.length&&(T[F]||(T[F]={idx:F,item:R,matches:[]},A.push(T[F])),H.forEach(({matches:B})=>{T[F].matches.push(...B)}))}}),A}_searchObjectList(o){let m=Ne(o,this.options),{keys:S,records:I}=this._myIndex,T=[];return I.forEach(({$:A,i:R})=>{if(!y(A))return;let F=[];S.forEach((H,B)=>{F.push(...this._findMatches({key:H,value:A[B],searcher:m}))}),F.length&&T.push({idx:R,item:A,matches:F})}),T}_findMatches({key:o,value:m,searcher:S}){if(!y(m))return[];let I=[];if(_(m))m.forEach(({v:T,i:A,n:R})=>{if(!y(T))return;let{isMatch:F,score:H,indices:B}=S.searchIn(T);F&&I.push({score:H,key:o,value:T,idx:A,norm:R,indices:B})});else{let{v:T,n:A}=m,{isMatch:R,score:F,indices:H}=S.searchIn(T);R&&I.push({score:F,key:o,value:T,norm:A,indices:H})}return I}}Se.version="6.6.2",Se.createIndex=U,Se.parseIndex=$,Se.config=u,Se.parseQuery=xe,et(qe)},791:function(j,i,b){b.r(i),b.d(i,{__DO_NOT_USE__ActionTypes:function(){return y},applyMiddleware:function(){return M},bindActionCreators:function(){return v},combineReducers:function(){return n},compose:function(){return P},createStore:function(){return w},legacy_createStore:function(){return N}});function _(f){"@babel/helpers - typeof";return _=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_(f)}function h(f,u){if(_(f)!=="object"||f===null)return f;var C=f[Symbol.toPrimitive];if(C!==void 0){var Y=C.call(f,u||"default");if(_(Y)!=="object")return Y;throw new TypeError("@@toPrimitive must return a primitive value.")}return(u==="string"?String:Number)(f)}function d(f){var u=h(f,"string");return _(u)==="symbol"?u:String(u)}function a(f,u,C){return u=d(u),u in f?Object.defineProperty(f,u,{value:C,enumerable:!0,configurable:!0,writable:!0}):f[u]=C,f}function r(f,u){var C=Object.keys(f);if(Object.getOwnPropertySymbols){var Y=Object.getOwnPropertySymbols(f);u&&(Y=Y.filter(function(V){return Object.getOwnPropertyDescriptor(f,V).enumerable})),C.push.apply(C,Y)}return C}function c(f){for(var u=1;u"u"&&(C=u,u=void 0),typeof C<"u"){if(typeof C!="function")throw new Error(l(1));return C(w)(f,u)}if(typeof f!="function")throw new Error(l(2));var V=f,U=u,$=[],W=$,J=!1;function z(){W===$&&(W=$.slice())}function ee(){if(J)throw new Error(l(3));return U}function ae(te){if(typeof te!="function")throw new Error(l(4));if(J)throw new Error(l(5));var de=!0;return z(),W.push(te),function(){if(de){if(J)throw new Error(l(6));de=!1,z();var oe=W.indexOf(te);W.splice(oe,1),$=null}}}function ce(te){if(!D(te))throw new Error(l(7));if(typeof te.type>"u")throw new Error(l(8));if(J)throw new Error(l(9));try{J=!0,U=V(U,te)}finally{J=!1}for(var de=$=W,pe=0;pe0)return"Unexpected "+($.length>1?"keys":"key")+" "+('"'+$.join('", "')+'" found in '+U+". ")+"Expected to find one of the known reducer keys instead: "+('"'+V.join('", "')+'". Unexpected keys will be ignored.')}function t(f){Object.keys(f).forEach(function(u){var C=f[u],Y=C(void 0,{type:y.INIT});if(typeof Y>"u")throw new Error(l(12));if(typeof C(void 0,{type:y.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(l(13))})}function n(f){for(var u=Object.keys(f),C={},Y=0;Y"u"){var Te=ee&&ee.type;throw new Error(l(14))}le[te]=oe,ce=ce||oe!==pe}return ce=ce||U.length!==Object.keys(z).length,ce?le:z}}function s(f,u){return function(){return u(f.apply(this,arguments))}}function v(f,u){if(typeof f=="function")return s(f,u);if(typeof f!="object"||f===null)throw new Error(l(16));var C={};for(var Y in f){var V=f[Y];typeof V=="function"&&(C[Y]=s(V,u))}return C}function P(){for(var f=arguments.length,u=new Array(f),C=0;Cwindow.pluralize(O,e,{count:e}),noChoicesText:E,noResultsText:L,placeholderValue:k,position:Q??"auto",removeItemButton:se,renderChoiceLimit:D,searchEnabled:h,searchFields:w??["label"],searchPlaceholderValue:E,searchResultLimit:D,shouldSort:!1,searchFloor:a?0:1}),await this.refreshChoices({withInitialOptions:!0}),[null,void 0,""].includes(this.state)||this.select.setChoiceByValue(this.formatState(this.state)),this.refreshPlaceholder(),b&&this.select.showDropdown(),this.$refs.input.addEventListener("change",()=>{this.refreshPlaceholder(),!this.isStateBeingUpdated&&(this.isStateBeingUpdated=!0,this.state=this.select.getValue(!0)??null,this.$nextTick(()=>this.isStateBeingUpdated=!1))}),d&&this.$refs.input.addEventListener("showDropdown",async()=>{this.select.clearChoices(),await this.select.setChoices([{label:c,value:"",disabled:!0}]),await this.refreshChoices()}),a&&(this.$refs.input.addEventListener("search",async e=>{let t=e.detail.value?.trim();this.isSearching=!0,this.select.clearChoices(),await this.select.setChoices([{label:[null,void 0,""].includes(t)?c:ne,value:"",disabled:!0}])}),this.$refs.input.addEventListener("search",Alpine.debounce(async e=>{await this.refreshChoices({search:e.detail.value?.trim()}),this.isSearching=!1},Z))),_||window.addEventListener("filament-forms::select.refreshSelectedOptionLabel",async e=>{e.detail.livewireId===r&&e.detail.statePath===g&&await this.refreshChoices({withInitialOptions:!1})}),this.$watch("state",async()=>{this.select&&(this.refreshPlaceholder(),!this.isStateBeingUpdated&&await this.refreshChoices({withInitialOptions:!d}))})},destroy:function(){this.select.destroy(),this.select=null},refreshChoices:async function(e={}){let t=await this.getChoices(e);this.select&&(this.select.clearStore(),this.refreshPlaceholder(),this.setChoices(t),[null,void 0,""].includes(this.state)||this.select.setChoiceByValue(this.formatState(this.state)))},setChoices:function(e){this.select.setChoices(e,"value","label",!0)},getChoices:async function(e={}){let t=await this.getExistingOptions(e);return t.concat(await this.getMissingOptions(t))},getExistingOptions:async function({search:e,withInitialOptions:t}){if(t)return y;let n=[];return e!==""&&e!==null&&e!==void 0?n=await i(e):n=await j(),n.map(s=>s.choices?(s.choices=s.choices.map(v=>(v.selected=Array.isArray(this.state)?this.state.includes(v.value):this.state===v.value,v)),s):(s.selected=Array.isArray(this.state)?this.state.includes(s.value):this.state===s.value,s))},refreshPlaceholder:function(){_||(this.select._renderItems(),[null,void 0,""].includes(this.state)&&(this.$el.querySelector(".choices__list--single").innerHTML=`
${k??""}
`))},formatState:function(e){return _?(e??[]).map(t=>t?.toString()):e?.toString()},getMissingOptions:async function(e){let t=this.formatState(this.state);if([null,void 0,"",[],{}].includes(t))return{};let n=new Set;return e.forEach(s=>{if(s.choices){s.choices.forEach(v=>n.add(v.value));return}n.add(s.value)}),_?t.every(s=>n.has(s))?{}:(await me()).filter(s=>!n.has(s.value)).map(s=>(s.selected=!0,s)):n.has(t)?n:[{label:await X(),value:t,selected:!0}]}}}export{vt as default}; +/*! Bundled license information: + +choices.js/public/assets/scripts/choices.js: + (*! choices.js v10.2.0 | © 2022 Josh Johnson | https://github.com/jshjohnson/Choices#readme *) +*/ diff --git a/public/js/filament/forms/components/tags-input.js b/public/js/filament/forms/components/tags-input.js new file mode 100644 index 000000000..6a2aa3009 --- /dev/null +++ b/public/js/filament/forms/components/tags-input.js @@ -0,0 +1 @@ +function i({state:a,splitKeys:n}){return{newTag:"",state:a,createTag:function(){if(this.newTag=this.newTag.trim(),this.newTag!==""){if(this.state.includes(this.newTag)){this.newTag="";return}this.state.push(this.newTag),this.newTag=""}},deleteTag:function(t){this.state=this.state.filter(e=>e!==t)},reorderTags:function(t){let e=this.state.splice(t.oldIndex,1)[0];this.state.splice(t.newIndex,0,e),this.state=[...this.state]},input:{"x-on:blur":"createTag()","x-model":"newTag","x-on:keydown"(t){["Enter",...n].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),this.createTag())},"x-on:paste"(){this.$nextTick(()=>{if(n.length===0){this.createTag();return}let t=n.map(e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")).join("|");this.newTag.split(new RegExp(t,"g")).forEach(e=>{this.newTag=e,this.createTag()})})}}}}export{i as default}; diff --git a/public/js/filament/forms/components/textarea.js b/public/js/filament/forms/components/textarea.js new file mode 100644 index 000000000..4fda241af --- /dev/null +++ b/public/js/filament/forms/components/textarea.js @@ -0,0 +1 @@ +function r({initialHeight:t,shouldAutosize:i,state:s}){return{state:s,wrapperEl:null,init:function(){this.wrapperEl=this.$el.parentNode,this.setInitialHeight(),i?this.$watch("state",()=>{this.resize()}):this.setUpResizeObserver()},setInitialHeight:function(){this.$el.scrollHeight<=0||(this.wrapperEl.style.height=t+"rem")},resize:function(){if(this.setInitialHeight(),this.$el.scrollHeight<=0)return;let e=this.$el.scrollHeight+"px";this.wrapperEl.style.height!==e&&(this.wrapperEl.style.height=e)},setUpResizeObserver:function(){new ResizeObserver(()=>{this.wrapperEl.style.height=this.$el.style.height}).observe(this.$el)}}}export{r as default}; diff --git a/public/js/filament/notifications/notifications.js b/public/js/filament/notifications/notifications.js new file mode 100644 index 000000000..7ce306318 --- /dev/null +++ b/public/js/filament/notifications/notifications.js @@ -0,0 +1 @@ +(()=>{var O=Object.create;var N=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var d=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports);var j=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Y(t))!W.call(i,n)&&n!==e&&N(i,n,{get:()=>t[n],enumerable:!(s=V(t,n))||s.enumerable});return i};var J=(i,t,e)=>(e=i!=null?O(H(i)):{},j(t||!i||!i.__esModule?N(e,"default",{value:i,enumerable:!0}):e,i));var S=d((ut,_)=>{var v,g=typeof global<"u"&&(global.crypto||global.msCrypto);g&&g.getRandomValues&&(y=new Uint8Array(16),v=function(){return g.getRandomValues(y),y});var y;v||(T=new Array(16),v=function(){for(var i=0,t;i<16;i++)(i&3)===0&&(t=Math.random()*4294967296),T[i]=t>>>((i&3)<<3)&255;return T});var T;_.exports=v});var C=d((ct,U)=>{var P=[];for(f=0;f<256;++f)P[f]=(f+256).toString(16).substr(1);var f;function K(i,t){var e=t||0,s=P;return s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]}U.exports=K});var R=d((lt,b)=>{var Q=S(),X=C(),a=Q(),Z=[a[0]|1,a[1],a[2],a[3],a[4],a[5]],F=(a[6]<<8|a[7])&16383,D=0,A=0;function tt(i,t,e){var s=t&&e||0,n=t||[];i=i||{};var r=i.clockseq!==void 0?i.clockseq:F,o=i.msecs!==void 0?i.msecs:new Date().getTime(),h=i.nsecs!==void 0?i.nsecs:A+1,l=o-D+(h-A)/1e4;if(l<0&&i.clockseq===void 0&&(r=r+1&16383),(l<0||o>D)&&i.nsecs===void 0&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");D=o,A=h,F=r,o+=122192928e5;var c=((o&268435455)*1e4+h)%4294967296;n[s++]=c>>>24&255,n[s++]=c>>>16&255,n[s++]=c>>>8&255,n[s++]=c&255;var u=o/4294967296*1e4&268435455;n[s++]=u>>>8&255,n[s++]=u&255,n[s++]=u>>>24&15|16,n[s++]=u>>>16&255,n[s++]=r>>>8|128,n[s++]=r&255;for(var $=i.node||Z,m=0;m<6;++m)n[s+m]=$[m];return t||X(n)}b.exports=tt});var I=d((dt,G)=>{var it=S(),et=C();function st(i,t,e){var s=t&&e||0;typeof i=="string"&&(t=i=="binary"?new Array(16):null,i=null),i=i||{};var n=i.random||(i.rng||it)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t)for(var r=0;r<16;++r)t[s+r]=n[r];return t||et(n)}G.exports=st});var z=d((ft,M)=>{var nt=R(),L=I(),E=L;E.v1=nt;E.v4=L;M.exports=E});function k(i,t=()=>{}){let e=!1;return function(){e?t.apply(this,arguments):(e=!0,i.apply(this,arguments))}}var q=i=>{i.data("notificationComponent",({notification:t})=>({isShown:!1,computedStyle:null,transitionDuration:null,transitionEasing:null,init:function(){this.computedStyle=window.getComputedStyle(this.$el),this.transitionDuration=parseFloat(this.computedStyle.transitionDuration)*1e3,this.transitionEasing=this.computedStyle.transitionTimingFunction,this.configureTransitions(),this.configureAnimations(),t.duration&&t.duration!=="persistent"&&setTimeout(()=>{if(!this.$el.matches(":hover")){this.close();return}this.$el.addEventListener("mouseleave",()=>this.close())},t.duration),this.isShown=!0},configureTransitions:function(){let e=this.computedStyle.display,s=()=>{i.mutateDom(()=>{this.$el.style.setProperty("display",e),this.$el.style.setProperty("visibility","visible")}),this.$el._x_isShown=!0},n=()=>{i.mutateDom(()=>{this.$el._x_isShown?this.$el.style.setProperty("visibility","hidden"):this.$el.style.setProperty("display","none")})},r=k(o=>o?s():n(),o=>{this.$el._x_toggleAndCascadeWithTransitions(this.$el,o,s,n)});i.effect(()=>r(this.isShown))},configureAnimations:function(){let e;Livewire.hook("commit",({component:s,commit:n,succeed:r,fail:o,respond:h})=>{s.snapshot.data.isFilamentNotificationsComponent&&requestAnimationFrame(()=>{let l=()=>this.$el.getBoundingClientRect().top,c=l();h(()=>{e=()=>{this.isShown&&this.$el.animate([{transform:`translateY(${c-l()}px)`},{transform:"translateY(0px)"}],{duration:this.transitionDuration,easing:this.transitionEasing})},this.$el.getAnimations().forEach(u=>u.finish())}),r(({snapshot:u,effect:$})=>{e()})})})},close:function(){this.isShown=!1,setTimeout(()=>window.dispatchEvent(new CustomEvent("notificationClosed",{detail:{id:t.id}})),this.transitionDuration)},markAsRead:function(){window.dispatchEvent(new CustomEvent("markedNotificationAsRead",{detail:{id:t.id}}))},markAsUnread:function(){window.dispatchEvent(new CustomEvent("markedNotificationAsUnread",{detail:{id:t.id}}))}}))};var B=J(z(),1),p=class{constructor(){return this.id((0,B.v4)()),this}id(t){return this.id=t,this}title(t){return this.title=t,this}body(t){return this.body=t,this}actions(t){return this.actions=t,this}status(t){return this.status=t,this}color(t){return this.color=t,this}icon(t){return this.icon=t,this}iconColor(t){return this.iconColor=t,this}duration(t){return this.duration=t,this}seconds(t){return this.duration(t*1e3),this}persistent(){return this.duration("persistent"),this}danger(){return this.status("danger"),this}info(){return this.status("info"),this}success(){return this.status("success"),this}warning(){return this.status("warning"),this}view(t){return this.view=t,this}viewData(t){return this.viewData=t,this}send(){return window.dispatchEvent(new CustomEvent("notificationSent",{detail:{notification:this}})),this}},w=class{constructor(t){return this.name(t),this}name(t){return this.name=t,this}color(t){return this.color=t,this}dispatch(t,e){return this.event(t),this.eventData(e),this}dispatchSelf(t,e){return this.dispatch(t,e),this.dispatchDirection="self",this}dispatchTo(t,e,s){return this.dispatch(e,s),this.dispatchDirection="to",this.dispatchToComponent=t,this}emit(t,e){return this.dispatch(t,e),this}emitSelf(t,e){return this.dispatchSelf(t,e),this}emitTo(t,e,s){return this.dispatchTo(t,e,s),this}dispatchDirection(t){return this.dispatchDirection=t,this}dispatchToComponent(t){return this.dispatchToComponent=t,this}event(t){return this.event=t,this}eventData(t){return this.eventData=t,this}extraAttributes(t){return this.extraAttributes=t,this}icon(t){return this.icon=t,this}iconPosition(t){return this.iconPosition=t,this}outlined(t=!0){return this.isOutlined=t,this}disabled(t=!0){return this.isDisabled=t,this}label(t){return this.label=t,this}close(t=!0){return this.shouldClose=t,this}openUrlInNewTab(t=!0){return this.shouldOpenUrlInNewTab=t,this}size(t){return this.size=t,this}url(t){return this.url=t,this}view(t){return this.view=t,this}button(){return this.view("filament-actions::button-action"),this}grouped(){return this.view("filament-actions::grouped-action"),this}link(){return this.view("filament-actions::link-action"),this}},x=class{constructor(t){return this.actions(t),this}actions(t){return this.actions=t.map(e=>e.grouped()),this}color(t){return this.color=t,this}icon(t){return this.icon=t,this}iconPosition(t){return this.iconPosition=t,this}label(t){return this.label=t,this}tooltip(t){return this.tooltip=t,this}};window.FilamentNotificationAction=w;window.FilamentNotificationActionGroup=x;window.FilamentNotification=p;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(q)});})(); diff --git a/public/js/filament/support/async-alpine.js b/public/js/filament/support/async-alpine.js new file mode 100644 index 000000000..048f75c05 --- /dev/null +++ b/public/js/filament/support/async-alpine.js @@ -0,0 +1 @@ +(()=>{(()=>{var d=Object.defineProperty,m=t=>d(t,"__esModule",{value:!0}),f=(t,e)=>{m(t);for(var i in e)d(t,i,{get:e[i],enumerable:!0})},o={};f(o,{eager:()=>g,event:()=>w,idle:()=>y,media:()=>b,visible:()=>E});var c=()=>!0,g=c,v=({component:t,argument:e})=>new Promise(i=>{if(e)window.addEventListener(e,()=>i(),{once:!0});else{let n=a=>{a.detail.id===t.id&&(window.removeEventListener("async-alpine:load",n),i())};window.addEventListener("async-alpine:load",n)}}),w=v,x=()=>new Promise(t=>{"requestIdleCallback"in window?window.requestIdleCallback(t):setTimeout(t,200)}),y=x,A=({argument:t})=>new Promise(e=>{if(!t)return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"),e();let i=window.matchMedia(`(${t})`);i.matches?e():i.addEventListener("change",e,{once:!0})}),b=A,$=({component:t,argument:e})=>new Promise(i=>{let n=e||"0px 0px 0px 0px",a=new IntersectionObserver(r=>{r[0].isIntersecting&&(a.disconnect(),i())},{rootMargin:n});a.observe(t.el)}),E=$;function P(t){let e=q(t),i=u(e);return i.type==="method"?{type:"expression",operator:"&&",parameters:[i]}:i}function q(t){let e=/\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g,i=[],n;for(;(n=e.exec(t))!==null;){let[,a,r,s]=n;if(a!==void 0)i.push({type:"parenthesis",value:a});else if(r!==void 0)i.push({type:"operator",value:r==="|"?"&&":r});else{let p={type:"method",method:s.trim()};s.includes("(")&&(p.method=s.substring(0,s.indexOf("(")).trim(),p.argument=s.substring(s.indexOf("(")+1,s.indexOf(")"))),s.method==="immediate"&&(s.method="eager"),i.push(p)}}return i}function u(t){let e=h(t);for(;t.length>0&&(t[0].value==="&&"||t[0].value==="|"||t[0].value==="||");){let i=t.shift().value,n=h(t);e.type==="expression"&&e.operator===i?e.parameters.push(n):e={type:"expression",operator:i,parameters:[e,n]}}return e}function h(t){if(t[0].value==="("){t.shift();let e=u(t);return t[0].value===")"&&t.shift(),e}else return t.shift()}var _="__internal_",l={Alpine:null,_options:{prefix:"ax-",alpinePrefix:"x-",root:"load",inline:"load-src",defaultStrategy:"eager"},_alias:!1,_data:{},_realIndex:0,get _index(){return this._realIndex++},init(t,e={}){return this.Alpine=t,this._options={...this._options,...e},this},start(){return this._processInline(),this._setupComponents(),this._mutations(),this},data(t,e=!1){return this._data[t]={loaded:!1,download:e},this},url(t,e){!t||!e||(this._data[t]||this.data(t),this._data[t].download=()=>import(this._parseUrl(e)))},alias(t){this._alias=t},_processInline(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`);for(let e of t)this._inlineElement(e)},_inlineElement(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`),i=t.getAttribute(`${this._options.prefix}${this._options.inline}`);if(!e||!i)return;let n=this._parseName(e);this.url(n,i)},_setupComponents(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`);for(let e of t)this._setupComponent(e)},_setupComponent(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`);t.setAttribute(`${this._options.alpinePrefix}ignore`,"");let i=this._parseName(e),n=t.getAttribute(`${this._options.prefix}${this._options.root}`)||this._options.defaultStrategy;this._componentStrategy({name:i,strategy:n,el:t,id:t.id||this._index})},async _componentStrategy(t){let e=P(t.strategy);await this._generateRequirements(t,e),await this._download(t.name),this._activate(t)},_generateRequirements(t,e){if(e.type==="expression"){if(e.operator==="&&")return Promise.all(e.parameters.map(i=>this._generateRequirements(t,i)));if(e.operator==="||")return Promise.any(e.parameters.map(i=>this._generateRequirements(t,i)))}return o[e.method]?o[e.method]({component:t,argument:e.argument}):!1},async _download(t){if(t.startsWith(_)||(this._handleAlias(t),!this._data[t]||this._data[t].loaded))return;let e=await this._getModule(t);this.Alpine.data(t,e),this._data[t].loaded=!0},async _getModule(t){if(!this._data[t])return;let e=await this._data[t].download(t);return typeof e=="function"?e:e[t]||e.default||Object.values(e)[0]||!1},_activate(t){this.Alpine.destroyTree(t.el),t.el.removeAttribute(`${this._options.alpinePrefix}ignore`),t.el._x_ignore=!1,this.Alpine.initTree(t.el)},_mutations(){new MutationObserver(t=>{for(let e of t)if(e.addedNodes)for(let i of e.addedNodes)i.nodeType===1&&(i.hasAttribute(`${this._options.prefix}${this._options.root}`)&&this._mutationEl(i),i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n=>this._mutationEl(n)))}).observe(document,{attributes:!0,childList:!0,subtree:!0})},_mutationEl(t){t.hasAttribute(`${this._options.prefix}${this._options.inline}`)&&this._inlineElement(t),this._setupComponent(t)},_handleAlias(t){if(!(!this._alias||this._data[t])){if(typeof this._alias=="function"){this.data(t,this._alias);return}this.url(t,this._alias.replaceAll("[name]",t))}},_parseName(t){return(t||"").split(/[({]/g)[0]||`${_}${this._index}`},_parseUrl(t){return new RegExp("^(?:[a-z+]+:)?//","i").test(t)?t:new URL(t,document.baseURI).href}};document.addEventListener("alpine:init",()=>{window.AsyncAlpine=l,l.init(Alpine,window.AsyncAlpineOptions||{}),document.dispatchEvent(new CustomEvent("async-alpine:init")),l.start()})})();})(); diff --git a/public/js/filament/support/support.js b/public/js/filament/support/support.js new file mode 100644 index 000000000..9b2b2dce6 --- /dev/null +++ b/public/js/filament/support/support.js @@ -0,0 +1,46 @@ +(()=>{var Vo=Object.create;var Pi=Object.defineProperty;var Yo=Object.getOwnPropertyDescriptor;var Xo=Object.getOwnPropertyNames;var qo=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Jr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ko=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Xo(e))!Go.call(t,i)&&i!==r&&Pi(t,i,{get:()=>e[i],enumerable:!(n=Yo(e,i))||n.enumerable});return t};var Jo=(t,e,r)=>(r=t!=null?Vo(qo(t)):{},Ko(e||!t||!t.__esModule?Pi(r,"default",{value:t,enumerable:!0}):r,t));var po=Jr(()=>{});var ho=Jr(()=>{});var vo=Jr((js,yr)=>{(function(){"use strict";var t="input is invalid type",e="finalize already called",r=typeof window=="object",n=r?window:{};n.JS_MD5_NO_WINDOW&&(r=!1);var i=!r&&typeof self=="object",o=!n.JS_MD5_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;o?n=global:i&&(n=self);var a=!n.JS_MD5_NO_COMMON_JS&&typeof yr=="object"&&yr.exports,d=typeof define=="function"&&define.amd,f=!n.JS_MD5_NO_ARRAY_BUFFER&&typeof ArrayBuffer<"u",u="0123456789abcdef".split(""),w=[128,32768,8388608,-2147483648],m=[0,8,16,24],E=["hex","array","digest","buffer","arrayBuffer","base64"],O="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),S=[],M;if(f){var I=new ArrayBuffer(68);M=new Uint8Array(I),S=new Uint32Array(I)}var $=Array.isArray;(n.JS_MD5_NO_NODE_JS||!$)&&($=function(l){return Object.prototype.toString.call(l)==="[object Array]"});var A=ArrayBuffer.isView;f&&(n.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW||!A)&&(A=function(l){return typeof l=="object"&&l.buffer&&l.buffer.constructor===ArrayBuffer});var k=function(l){var h=typeof l;if(h==="string")return[l,!0];if(h!=="object"||l===null)throw new Error(t);if(f&&l.constructor===ArrayBuffer)return[new Uint8Array(l),!1];if(!$(l)&&!A(l))throw new Error(t);return[l,!1]},Y=function(l){return function(h){return new X(!0).update(h)[l]()}},nt=function(){var l=Y("hex");o&&(l=J(l)),l.create=function(){return new X},l.update=function(p){return l.create().update(p)};for(var h=0;h>>6,Vt[P++]=128|p&63):p<55296||p>=57344?(Vt[P++]=224|p>>>12,Vt[P++]=128|p>>>6&63,Vt[P++]=128|p&63):(p=65536+((p&1023)<<10|l.charCodeAt(++j)&1023),Vt[P++]=240|p>>>18,Vt[P++]=128|p>>>12&63,Vt[P++]=128|p>>>6&63,Vt[P++]=128|p&63);else for(P=this.start;j>>2]|=p<>>2]|=(192|p>>>6)<>>2]|=(128|p&63)<=57344?(Q[P>>>2]|=(224|p>>>12)<>>2]|=(128|p>>>6&63)<>>2]|=(128|p&63)<>>2]|=(240|p>>>18)<>>2]|=(128|p>>>12&63)<>>2]|=(128|p>>>6&63)<>>2]|=(128|p&63)<>>2]|=l[j]<=64?(this.start=P-64,this.hash(),this.hashed=!0):this.start=P}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this},X.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var l=this.blocks,h=this.lastByteIndex;l[h>>>2]|=w[h&3],h>=56&&(this.hashed||this.hash(),l[0]=l[16],l[16]=l[1]=l[2]=l[3]=l[4]=l[5]=l[6]=l[7]=l[8]=l[9]=l[10]=l[11]=l[12]=l[13]=l[14]=l[15]=0),l[14]=this.bytes<<3,l[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},X.prototype.hash=function(){var l,h,v,p,j,P,R=this.blocks;this.first?(l=R[0]-680876937,l=(l<<7|l>>>25)-271733879<<0,p=(-1732584194^l&2004318071)+R[1]-117830708,p=(p<<12|p>>>20)+l<<0,v=(-271733879^p&(l^-271733879))+R[2]-1126478375,v=(v<<17|v>>>15)+p<<0,h=(l^v&(p^l))+R[3]-1316259209,h=(h<<22|h>>>10)+v<<0):(l=this.h0,h=this.h1,v=this.h2,p=this.h3,l+=(p^h&(v^p))+R[0]-680876936,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[1]-389564586,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[2]+606105819,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[3]-1044525330,h=(h<<22|h>>>10)+v<<0),l+=(p^h&(v^p))+R[4]-176418897,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[5]+1200080426,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[6]-1473231341,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[7]-45705983,h=(h<<22|h>>>10)+v<<0,l+=(p^h&(v^p))+R[8]+1770035416,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[9]-1958414417,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[10]-42063,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[11]-1990404162,h=(h<<22|h>>>10)+v<<0,l+=(p^h&(v^p))+R[12]+1804603682,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[13]-40341101,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[14]-1502002290,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[15]+1236535329,h=(h<<22|h>>>10)+v<<0,l+=(v^p&(h^v))+R[1]-165796510,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[6]-1069501632,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[11]+643717713,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[0]-373897302,h=(h<<20|h>>>12)+v<<0,l+=(v^p&(h^v))+R[5]-701558691,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[10]+38016083,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[15]-660478335,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[4]-405537848,h=(h<<20|h>>>12)+v<<0,l+=(v^p&(h^v))+R[9]+568446438,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[14]-1019803690,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[3]-187363961,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[8]+1163531501,h=(h<<20|h>>>12)+v<<0,l+=(v^p&(h^v))+R[13]-1444681467,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[2]-51403784,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[7]+1735328473,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[12]-1926607734,h=(h<<20|h>>>12)+v<<0,j=h^v,l+=(j^p)+R[5]-378558,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[8]-2022574463,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[11]+1839030562,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[14]-35309556,h=(h<<23|h>>>9)+v<<0,j=h^v,l+=(j^p)+R[1]-1530992060,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[4]+1272893353,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[7]-155497632,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[10]-1094730640,h=(h<<23|h>>>9)+v<<0,j=h^v,l+=(j^p)+R[13]+681279174,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[0]-358537222,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[3]-722521979,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[6]+76029189,h=(h<<23|h>>>9)+v<<0,j=h^v,l+=(j^p)+R[9]-640364487,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[12]-421815835,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[15]+530742520,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[2]-995338651,h=(h<<23|h>>>9)+v<<0,l+=(v^(h|~p))+R[0]-198630844,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[7]+1126891415,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[14]-1416354905,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[5]-57434055,h=(h<<21|h>>>11)+v<<0,l+=(v^(h|~p))+R[12]+1700485571,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[3]-1894986606,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[10]-1051523,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[1]-2054922799,h=(h<<21|h>>>11)+v<<0,l+=(v^(h|~p))+R[8]+1873313359,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[15]-30611744,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[6]-1560198380,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[13]+1309151649,h=(h<<21|h>>>11)+v<<0,l+=(v^(h|~p))+R[4]-145523070,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[11]-1120210379,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[2]+718787259,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[9]-343485551,h=(h<<21|h>>>11)+v<<0,this.first?(this.h0=l+1732584193<<0,this.h1=h-271733879<<0,this.h2=v-1732584194<<0,this.h3=p+271733878<<0,this.first=!1):(this.h0=this.h0+l<<0,this.h1=this.h1+h<<0,this.h2=this.h2+v<<0,this.h3=this.h3+p<<0)},X.prototype.hex=function(){this.finalize();var l=this.h0,h=this.h1,v=this.h2,p=this.h3;return u[l>>>4&15]+u[l&15]+u[l>>>12&15]+u[l>>>8&15]+u[l>>>20&15]+u[l>>>16&15]+u[l>>>28&15]+u[l>>>24&15]+u[h>>>4&15]+u[h&15]+u[h>>>12&15]+u[h>>>8&15]+u[h>>>20&15]+u[h>>>16&15]+u[h>>>28&15]+u[h>>>24&15]+u[v>>>4&15]+u[v&15]+u[v>>>12&15]+u[v>>>8&15]+u[v>>>20&15]+u[v>>>16&15]+u[v>>>28&15]+u[v>>>24&15]+u[p>>>4&15]+u[p&15]+u[p>>>12&15]+u[p>>>8&15]+u[p>>>20&15]+u[p>>>16&15]+u[p>>>28&15]+u[p>>>24&15]},X.prototype.toString=X.prototype.hex,X.prototype.digest=function(){this.finalize();var l=this.h0,h=this.h1,v=this.h2,p=this.h3;return[l&255,l>>>8&255,l>>>16&255,l>>>24&255,h&255,h>>>8&255,h>>>16&255,h>>>24&255,v&255,v>>>8&255,v>>>16&255,v>>>24&255,p&255,p>>>8&255,p>>>16&255,p>>>24&255]},X.prototype.array=X.prototype.digest,X.prototype.arrayBuffer=function(){this.finalize();var l=new ArrayBuffer(16),h=new Uint32Array(l);return h[0]=this.h0,h[1]=this.h1,h[2]=this.h2,h[3]=this.h3,l},X.prototype.buffer=X.prototype.arrayBuffer,X.prototype.base64=function(){for(var l,h,v,p="",j=this.array(),P=0;P<15;)l=j[P++],h=j[P++],v=j[P++],p+=O[l>>>2]+O[(l<<4|h>>>4)&63]+O[(h<<2|v>>>6)&63]+O[v&63];return l=j[P],p+=O[l>>>2]+O[l<<4&63]+"==",p};function Z(l,h){var v,p=k(l);if(l=p[0],p[1]){var j=[],P=l.length,R=0,Q;for(v=0;v>>6,j[R++]=128|Q&63):Q<55296||Q>=57344?(j[R++]=224|Q>>>12,j[R++]=128|Q>>>6&63,j[R++]=128|Q&63):(Q=65536+((Q&1023)<<10|l.charCodeAt(++v)&1023),j[R++]=240|Q>>>18,j[R++]=128|Q>>>12&63,j[R++]=128|Q>>>6&63,j[R++]=128|Q&63);l=j}l.length>64&&(l=new X(!0).update(l).array());var Vt=[],Re=[];for(v=0;v<64;++v){var ze=l[v]||0;Vt[v]=92^ze,Re[v]=54^ze}X.call(this,h),this.update(Re),this.oKeyPad=Vt,this.inner=!0,this.sharedMemory=h}Z.prototype=new X,Z.prototype.finalize=function(){if(X.prototype.finalize.call(this),this.inner){this.inner=!1;var l=this.array();X.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(l),X.prototype.finalize.call(this)}};var mt=nt();mt.md5=mt,mt.md5.hmac=dt(),a?yr.exports=mt:(n.md5=mt,d&&define(function(){return mt}))})()});var $i=["top","right","bottom","left"],Mi=["start","end"],Ri=$i.reduce((t,e)=>t.concat(e,e+"-"+Mi[0],e+"-"+Mi[1]),[]),Ee=Math.min,ee=Math.max,hr=Math.round,pr=Math.floor,nn=t=>({x:t,y:t}),Zo={left:"right",right:"left",bottom:"top",top:"bottom"},Qo={start:"end",end:"start"};function Zr(t,e,r){return ee(t,Ee(e,r))}function je(t,e){return typeof t=="function"?t(e):t}function pe(t){return t.split("-")[0]}function xe(t){return t.split("-")[1]}function Wi(t){return t==="x"?"y":"x"}function Qr(t){return t==="y"?"height":"width"}function Pn(t){return["top","bottom"].includes(pe(t))?"y":"x"}function ti(t){return Wi(Pn(t))}function zi(t,e,r){r===void 0&&(r=!1);let n=xe(t),i=ti(t),o=Qr(i),a=i==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(a=mr(a)),[a,mr(a)]}function ta(t){let e=mr(t);return[vr(t),e,vr(e)]}function vr(t){return t.replace(/start|end/g,e=>Qo[e])}function ea(t,e,r){let n=["left","right"],i=["right","left"],o=["top","bottom"],a=["bottom","top"];switch(t){case"top":case"bottom":return r?e?i:n:e?n:i;case"left":case"right":return e?o:a;default:return[]}}function na(t,e,r,n){let i=xe(t),o=ea(pe(t),r==="start",n);return i&&(o=o.map(a=>a+"-"+i),e&&(o=o.concat(o.map(vr)))),o}function mr(t){return t.replace(/left|right|bottom|top/g,e=>Zo[e])}function ra(t){return{top:0,right:0,bottom:0,left:0,...t}}function ei(t){return typeof t!="number"?ra(t):{top:t,right:t,bottom:t,left:t}}function Cn(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}function Ii(t,e,r){let{reference:n,floating:i}=t,o=Pn(e),a=ti(e),d=Qr(a),f=pe(e),u=o==="y",w=n.x+n.width/2-i.width/2,m=n.y+n.height/2-i.height/2,E=n[d]/2-i[d]/2,O;switch(f){case"top":O={x:w,y:n.y-i.height};break;case"bottom":O={x:w,y:n.y+n.height};break;case"right":O={x:n.x+n.width,y:m};break;case"left":O={x:n.x-i.width,y:m};break;default:O={x:n.x,y:n.y}}switch(xe(e)){case"start":O[a]-=E*(r&&u?-1:1);break;case"end":O[a]+=E*(r&&u?-1:1);break}return O}var ia=async(t,e,r)=>{let{placement:n="bottom",strategy:i="absolute",middleware:o=[],platform:a}=r,d=o.filter(Boolean),f=await(a.isRTL==null?void 0:a.isRTL(e)),u=await a.getElementRects({reference:t,floating:e,strategy:i}),{x:w,y:m}=Ii(u,n,f),E=n,O={},S=0;for(let M=0;M({name:"arrow",options:t,async fn(e){let{x:r,y:n,placement:i,rects:o,platform:a,elements:d,middlewareData:f}=e,{element:u,padding:w=0}=je(t,e)||{};if(u==null)return{};let m=ei(w),E={x:r,y:n},O=ti(i),S=Qr(O),M=await a.getDimensions(u),I=O==="y",$=I?"top":"left",A=I?"bottom":"right",k=I?"clientHeight":"clientWidth",Y=o.reference[S]+o.reference[O]-E[O]-o.floating[S],nt=E[O]-o.reference[O],J=await(a.getOffsetParent==null?void 0:a.getOffsetParent(u)),U=J?J[k]:0;(!U||!await(a.isElement==null?void 0:a.isElement(J)))&&(U=d.floating[k]||o.floating[S]);let dt=Y/2-nt/2,X=U/2-M[S]/2-1,Z=Ee(m[$],X),mt=Ee(m[A],X),l=Z,h=U-M[S]-mt,v=U/2-M[S]/2+dt,p=Zr(l,v,h),j=!f.arrow&&xe(i)!=null&&v!==p&&o.reference[S]/2-(vxe(i)===t),...r.filter(i=>xe(i)!==t)]:r.filter(i=>pe(i)===i)).filter(i=>t?xe(i)===t||(e?vr(i)!==i:!1):!0)}var sa=function(t){return t===void 0&&(t={}),{name:"autoPlacement",options:t,async fn(e){var r,n,i;let{rects:o,middlewareData:a,placement:d,platform:f,elements:u}=e,{crossAxis:w=!1,alignment:m,allowedPlacements:E=Ri,autoAlignment:O=!0,...S}=je(t,e),M=m!==void 0||E===Ri?aa(m||null,O,E):E,I=await _n(e,S),$=((r=a.autoPlacement)==null?void 0:r.index)||0,A=M[$];if(A==null)return{};let k=zi(A,o,await(f.isRTL==null?void 0:f.isRTL(u.floating)));if(d!==A)return{reset:{placement:M[0]}};let Y=[I[pe(A)],I[k[0]],I[k[1]]],nt=[...((n=a.autoPlacement)==null?void 0:n.overflows)||[],{placement:A,overflows:Y}],J=M[$+1];if(J)return{data:{index:$+1,overflows:nt},reset:{placement:J}};let U=nt.map(Z=>{let mt=xe(Z.placement);return[Z.placement,mt&&w?Z.overflows.slice(0,2).reduce((l,h)=>l+h,0):Z.overflows[0],Z.overflows]}).sort((Z,mt)=>Z[1]-mt[1]),X=((i=U.filter(Z=>Z[2].slice(0,xe(Z[0])?2:3).every(mt=>mt<=0))[0])==null?void 0:i[0])||U[0][0];return X!==d?{data:{index:$+1,overflows:nt},reset:{placement:X}}:{}}}},la=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var r,n;let{placement:i,middlewareData:o,rects:a,initialPlacement:d,platform:f,elements:u}=e,{mainAxis:w=!0,crossAxis:m=!0,fallbackPlacements:E,fallbackStrategy:O="bestFit",fallbackAxisSideDirection:S="none",flipAlignment:M=!0,...I}=je(t,e);if((r=o.arrow)!=null&&r.alignmentOffset)return{};let $=pe(i),A=pe(d)===d,k=await(f.isRTL==null?void 0:f.isRTL(u.floating)),Y=E||(A||!M?[mr(d)]:ta(d));!E&&S!=="none"&&Y.push(...na(d,M,S,k));let nt=[d,...Y],J=await _n(e,I),U=[],dt=((n=o.flip)==null?void 0:n.overflows)||[];if(w&&U.push(J[$]),m){let l=zi(i,a,k);U.push(J[l[0]],J[l[1]])}if(dt=[...dt,{placement:i,overflows:U}],!U.every(l=>l<=0)){var X,Z;let l=(((X=o.flip)==null?void 0:X.index)||0)+1,h=nt[l];if(h)return{data:{index:l,overflows:dt},reset:{placement:h}};let v=(Z=dt.filter(p=>p.overflows[0]<=0).sort((p,j)=>p.overflows[1]-j.overflows[1])[0])==null?void 0:Z.placement;if(!v)switch(O){case"bestFit":{var mt;let p=(mt=dt.map(j=>[j.placement,j.overflows.filter(P=>P>0).reduce((P,R)=>P+R,0)]).sort((j,P)=>j[1]-P[1])[0])==null?void 0:mt[0];p&&(v=p);break}case"initialPlacement":v=d;break}if(i!==v)return{reset:{placement:v}}}return{}}}};function Fi(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Li(t){return $i.some(e=>t[e]>=0)}var ca=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){let{rects:r}=e,{strategy:n="referenceHidden",...i}=je(t,e);switch(n){case"referenceHidden":{let o=await _n(e,{...i,elementContext:"reference"}),a=Fi(o,r.reference);return{data:{referenceHiddenOffsets:a,referenceHidden:Li(a)}}}case"escaped":{let o=await _n(e,{...i,altBoundary:!0}),a=Fi(o,r.floating);return{data:{escapedOffsets:a,escaped:Li(a)}}}default:return{}}}}};function Ui(t){let e=Ee(...t.map(o=>o.left)),r=Ee(...t.map(o=>o.top)),n=ee(...t.map(o=>o.right)),i=ee(...t.map(o=>o.bottom));return{x:e,y:r,width:n-e,height:i-r}}function fa(t){let e=t.slice().sort((i,o)=>i.y-o.y),r=[],n=null;for(let i=0;in.height/2?r.push([o]):r[r.length-1].push(o),n=o}return r.map(i=>Cn(Ui(i)))}var ua=function(t){return t===void 0&&(t={}),{name:"inline",options:t,async fn(e){let{placement:r,elements:n,rects:i,platform:o,strategy:a}=e,{padding:d=2,x:f,y:u}=je(t,e),w=Array.from(await(o.getClientRects==null?void 0:o.getClientRects(n.reference))||[]),m=fa(w),E=Cn(Ui(w)),O=ei(d);function S(){if(m.length===2&&m[0].left>m[1].right&&f!=null&&u!=null)return m.find(I=>f>I.left-O.left&&fI.top-O.top&&u=2){if(Pn(r)==="y"){let Z=m[0],mt=m[m.length-1],l=pe(r)==="top",h=Z.top,v=mt.bottom,p=l?Z.left:mt.left,j=l?Z.right:mt.right,P=j-p,R=v-h;return{top:h,bottom:v,left:p,right:j,width:P,height:R,x:p,y:h}}let I=pe(r)==="left",$=ee(...m.map(Z=>Z.right)),A=Ee(...m.map(Z=>Z.left)),k=m.filter(Z=>I?Z.left===A:Z.right===$),Y=k[0].top,nt=k[k.length-1].bottom,J=A,U=$,dt=U-J,X=nt-Y;return{top:Y,bottom:nt,left:J,right:U,width:dt,height:X,x:J,y:Y}}return E}let M=await o.getElementRects({reference:{getBoundingClientRect:S},floating:n.floating,strategy:a});return i.reference.x!==M.reference.x||i.reference.y!==M.reference.y||i.reference.width!==M.reference.width||i.reference.height!==M.reference.height?{reset:{rects:M}}:{}}}};async function da(t,e){let{placement:r,platform:n,elements:i}=t,o=await(n.isRTL==null?void 0:n.isRTL(i.floating)),a=pe(r),d=xe(r),f=Pn(r)==="y",u=["left","top"].includes(a)?-1:1,w=o&&f?-1:1,m=je(e,t),{mainAxis:E,crossAxis:O,alignmentAxis:S}=typeof m=="number"?{mainAxis:m,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...m};return d&&typeof S=="number"&&(O=d==="end"?S*-1:S),f?{x:O*w,y:E*u}:{x:E*u,y:O*w}}var Vi=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var r,n;let{x:i,y:o,placement:a,middlewareData:d}=e,f=await da(e,t);return a===((r=d.offset)==null?void 0:r.placement)&&(n=d.arrow)!=null&&n.alignmentOffset?{}:{x:i+f.x,y:o+f.y,data:{...f,placement:a}}}}},pa=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){let{x:r,y:n,placement:i}=e,{mainAxis:o=!0,crossAxis:a=!1,limiter:d={fn:I=>{let{x:$,y:A}=I;return{x:$,y:A}}},...f}=je(t,e),u={x:r,y:n},w=await _n(e,f),m=Pn(pe(i)),E=Wi(m),O=u[E],S=u[m];if(o){let I=E==="y"?"top":"left",$=E==="y"?"bottom":"right",A=O+w[I],k=O-w[$];O=Zr(A,O,k)}if(a){let I=m==="y"?"top":"left",$=m==="y"?"bottom":"right",A=S+w[I],k=S-w[$];S=Zr(A,S,k)}let M=d.fn({...e,[E]:O,[m]:S});return{...M,data:{x:M.x-r,y:M.y-n}}}}},ha=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){let{placement:r,rects:n,platform:i,elements:o}=e,{apply:a=()=>{},...d}=je(t,e),f=await _n(e,d),u=pe(r),w=xe(r),m=Pn(r)==="y",{width:E,height:O}=n.floating,S,M;u==="top"||u==="bottom"?(S=u,M=w===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?"start":"end")?"left":"right"):(M=u,S=w==="end"?"top":"bottom");let I=O-f[S],$=E-f[M],A=!e.middlewareData.shift,k=I,Y=$;if(m){let J=E-f.left-f.right;Y=w||A?Ee($,J):J}else{let J=O-f.top-f.bottom;k=w||A?Ee(I,J):J}if(A&&!w){let J=ee(f.left,0),U=ee(f.right,0),dt=ee(f.top,0),X=ee(f.bottom,0);m?Y=E-2*(J!==0||U!==0?J+U:ee(f.left,f.right)):k=O-2*(dt!==0||X!==0?dt+X:ee(f.top,f.bottom))}await a({...e,availableWidth:Y,availableHeight:k});let nt=await i.getDimensions(o.floating);return E!==nt.width||O!==nt.height?{reset:{rects:!0}}:{}}}};function rn(t){return Yi(t)?(t.nodeName||"").toLowerCase():"#document"}function ce(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Be(t){var e;return(e=(Yi(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Yi(t){return t instanceof Node||t instanceof ce(t).Node}function ke(t){return t instanceof Element||t instanceof ce(t).Element}function Te(t){return t instanceof HTMLElement||t instanceof ce(t).HTMLElement}function Ni(t){return typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof ce(t).ShadowRoot}function Vn(t){let{overflow:e,overflowX:r,overflowY:n,display:i}=he(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+r)&&!["inline","contents"].includes(i)}function va(t){return["table","td","th"].includes(rn(t))}function ni(t){let e=ri(),r=he(t);return r.transform!=="none"||r.perspective!=="none"||(r.containerType?r.containerType!=="normal":!1)||!e&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!e&&(r.filter?r.filter!=="none":!1)||["transform","perspective","filter"].some(n=>(r.willChange||"").includes(n))||["paint","layout","strict","content"].some(n=>(r.contain||"").includes(n))}function ma(t){let e=Tn(t);for(;Te(e)&&!gr(e);){if(ni(e))return e;e=Tn(e)}return null}function ri(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function gr(t){return["html","body","#document"].includes(rn(t))}function he(t){return ce(t).getComputedStyle(t)}function br(t){return ke(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Tn(t){if(rn(t)==="html")return t;let e=t.assignedSlot||t.parentNode||Ni(t)&&t.host||Be(t);return Ni(e)?e.host:e}function Xi(t){let e=Tn(t);return gr(e)?t.ownerDocument?t.ownerDocument.body:t.body:Te(e)&&Vn(e)?e:Xi(e)}function Un(t,e,r){var n;e===void 0&&(e=[]),r===void 0&&(r=!0);let i=Xi(t),o=i===((n=t.ownerDocument)==null?void 0:n.body),a=ce(i);return o?e.concat(a,a.visualViewport||[],Vn(i)?i:[],a.frameElement&&r?Un(a.frameElement):[]):e.concat(i,Un(i,[],r))}function qi(t){let e=he(t),r=parseFloat(e.width)||0,n=parseFloat(e.height)||0,i=Te(t),o=i?t.offsetWidth:r,a=i?t.offsetHeight:n,d=hr(r)!==o||hr(n)!==a;return d&&(r=o,n=a),{width:r,height:n,$:d}}function ii(t){return ke(t)?t:t.contextElement}function Dn(t){let e=ii(t);if(!Te(e))return nn(1);let r=e.getBoundingClientRect(),{width:n,height:i,$:o}=qi(e),a=(o?hr(r.width):r.width)/n,d=(o?hr(r.height):r.height)/i;return(!a||!Number.isFinite(a))&&(a=1),(!d||!Number.isFinite(d))&&(d=1),{x:a,y:d}}var ga=nn(0);function Gi(t){let e=ce(t);return!ri()||!e.visualViewport?ga:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function ba(t,e,r){return e===void 0&&(e=!1),!r||e&&r!==ce(t)?!1:e}function vn(t,e,r,n){e===void 0&&(e=!1),r===void 0&&(r=!1);let i=t.getBoundingClientRect(),o=ii(t),a=nn(1);e&&(n?ke(n)&&(a=Dn(n)):a=Dn(t));let d=ba(o,r,n)?Gi(o):nn(0),f=(i.left+d.x)/a.x,u=(i.top+d.y)/a.y,w=i.width/a.x,m=i.height/a.y;if(o){let E=ce(o),O=n&&ke(n)?ce(n):n,S=E,M=S.frameElement;for(;M&&n&&O!==S;){let I=Dn(M),$=M.getBoundingClientRect(),A=he(M),k=$.left+(M.clientLeft+parseFloat(A.paddingLeft))*I.x,Y=$.top+(M.clientTop+parseFloat(A.paddingTop))*I.y;f*=I.x,u*=I.y,w*=I.x,m*=I.y,f+=k,u+=Y,S=ce(M),M=S.frameElement}}return Cn({width:w,height:m,x:f,y:u})}var ya=[":popover-open",":modal"];function Ki(t){return ya.some(e=>{try{return t.matches(e)}catch{return!1}})}function wa(t){let{elements:e,rect:r,offsetParent:n,strategy:i}=t,o=i==="fixed",a=Be(n),d=e?Ki(e.floating):!1;if(n===a||d&&o)return r;let f={scrollLeft:0,scrollTop:0},u=nn(1),w=nn(0),m=Te(n);if((m||!m&&!o)&&((rn(n)!=="body"||Vn(a))&&(f=br(n)),Te(n))){let E=vn(n);u=Dn(n),w.x=E.x+n.clientLeft,w.y=E.y+n.clientTop}return{width:r.width*u.x,height:r.height*u.y,x:r.x*u.x-f.scrollLeft*u.x+w.x,y:r.y*u.y-f.scrollTop*u.y+w.y}}function xa(t){return Array.from(t.getClientRects())}function Ji(t){return vn(Be(t)).left+br(t).scrollLeft}function Ea(t){let e=Be(t),r=br(t),n=t.ownerDocument.body,i=ee(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),o=ee(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-r.scrollLeft+Ji(t),d=-r.scrollTop;return he(n).direction==="rtl"&&(a+=ee(e.clientWidth,n.clientWidth)-i),{width:i,height:o,x:a,y:d}}function Oa(t,e){let r=ce(t),n=Be(t),i=r.visualViewport,o=n.clientWidth,a=n.clientHeight,d=0,f=0;if(i){o=i.width,a=i.height;let u=ri();(!u||u&&e==="fixed")&&(d=i.offsetLeft,f=i.offsetTop)}return{width:o,height:a,x:d,y:f}}function Sa(t,e){let r=vn(t,!0,e==="fixed"),n=r.top+t.clientTop,i=r.left+t.clientLeft,o=Te(t)?Dn(t):nn(1),a=t.clientWidth*o.x,d=t.clientHeight*o.y,f=i*o.x,u=n*o.y;return{width:a,height:d,x:f,y:u}}function ki(t,e,r){let n;if(e==="viewport")n=Oa(t,r);else if(e==="document")n=Ea(Be(t));else if(ke(e))n=Sa(e,r);else{let i=Gi(t);n={...e,x:e.x-i.x,y:e.y-i.y}}return Cn(n)}function Zi(t,e){let r=Tn(t);return r===e||!ke(r)||gr(r)?!1:he(r).position==="fixed"||Zi(r,e)}function Aa(t,e){let r=e.get(t);if(r)return r;let n=Un(t,[],!1).filter(d=>ke(d)&&rn(d)!=="body"),i=null,o=he(t).position==="fixed",a=o?Tn(t):t;for(;ke(a)&&!gr(a);){let d=he(a),f=ni(a);!f&&d.position==="fixed"&&(i=null),(o?!f&&!i:!f&&d.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||Vn(a)&&!f&&Zi(t,a))?n=n.filter(w=>w!==a):i=d,a=Tn(a)}return e.set(t,n),n}function Da(t){let{element:e,boundary:r,rootBoundary:n,strategy:i}=t,a=[...r==="clippingAncestors"?Aa(e,this._c):[].concat(r),n],d=a[0],f=a.reduce((u,w)=>{let m=ki(e,w,i);return u.top=ee(m.top,u.top),u.right=Ee(m.right,u.right),u.bottom=Ee(m.bottom,u.bottom),u.left=ee(m.left,u.left),u},ki(e,d,i));return{width:f.right-f.left,height:f.bottom-f.top,x:f.left,y:f.top}}function Ca(t){let{width:e,height:r}=qi(t);return{width:e,height:r}}function _a(t,e,r){let n=Te(e),i=Be(e),o=r==="fixed",a=vn(t,!0,o,e),d={scrollLeft:0,scrollTop:0},f=nn(0);if(n||!n&&!o)if((rn(e)!=="body"||Vn(i))&&(d=br(e)),n){let m=vn(e,!0,o,e);f.x=m.x+e.clientLeft,f.y=m.y+e.clientTop}else i&&(f.x=Ji(i));let u=a.left+d.scrollLeft-f.x,w=a.top+d.scrollTop-f.y;return{x:u,y:w,width:a.width,height:a.height}}function ji(t,e){return!Te(t)||he(t).position==="fixed"?null:e?e(t):t.offsetParent}function Qi(t,e){let r=ce(t);if(!Te(t)||Ki(t))return r;let n=ji(t,e);for(;n&&va(n)&&he(n).position==="static";)n=ji(n,e);return n&&(rn(n)==="html"||rn(n)==="body"&&he(n).position==="static"&&!ni(n))?r:n||ma(t)||r}var Ta=async function(t){let e=this.getOffsetParent||Qi,r=this.getDimensions;return{reference:_a(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,...await r(t.floating)}}};function Pa(t){return he(t).direction==="rtl"}var Ma={convertOffsetParentRelativeRectToViewportRelativeRect:wa,getDocumentElement:Be,getClippingRect:Da,getOffsetParent:Qi,getElementRects:Ta,getClientRects:xa,getDimensions:Ca,getScale:Dn,isElement:ke,isRTL:Pa};function Ra(t,e){let r=null,n,i=Be(t);function o(){var d;clearTimeout(n),(d=r)==null||d.disconnect(),r=null}function a(d,f){d===void 0&&(d=!1),f===void 0&&(f=1),o();let{left:u,top:w,width:m,height:E}=t.getBoundingClientRect();if(d||e(),!m||!E)return;let O=pr(w),S=pr(i.clientWidth-(u+m)),M=pr(i.clientHeight-(w+E)),I=pr(u),A={rootMargin:-O+"px "+-S+"px "+-M+"px "+-I+"px",threshold:ee(0,Ee(1,f))||1},k=!0;function Y(nt){let J=nt[0].intersectionRatio;if(J!==f){if(!k)return a();J?a(!1,J):n=setTimeout(()=>{a(!1,1e-7)},100)}k=!1}try{r=new IntersectionObserver(Y,{...A,root:i.ownerDocument})}catch{r=new IntersectionObserver(Y,A)}r.observe(t)}return a(!0),o}function Bi(t,e,r,n){n===void 0&&(n={});let{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:d=typeof IntersectionObserver=="function",animationFrame:f=!1}=n,u=ii(t),w=i||o?[...u?Un(u):[],...Un(e)]:[];w.forEach($=>{i&&$.addEventListener("scroll",r,{passive:!0}),o&&$.addEventListener("resize",r)});let m=u&&d?Ra(u,r):null,E=-1,O=null;a&&(O=new ResizeObserver($=>{let[A]=$;A&&A.target===u&&O&&(O.unobserve(e),cancelAnimationFrame(E),E=requestAnimationFrame(()=>{var k;(k=O)==null||k.observe(e)})),r()}),u&&!f&&O.observe(u),O.observe(e));let S,M=f?vn(t):null;f&&I();function I(){let $=vn(t);M&&($.x!==M.x||$.y!==M.y||$.width!==M.width||$.height!==M.height)&&r(),M=$,S=requestAnimationFrame(I)}return r(),()=>{var $;w.forEach(A=>{i&&A.removeEventListener("scroll",r),o&&A.removeEventListener("resize",r)}),m?.(),($=O)==null||$.disconnect(),O=null,f&&cancelAnimationFrame(S)}}var oi=sa,to=pa,eo=la,no=ha,ro=ca,io=oa,oo=ua,Hi=(t,e,r)=>{let n=new Map,i={platform:Ma,...r},o={...i.platform,_c:n};return ia(t,e,{...i,platform:o})},Ia=t=>{let e={placement:"bottom",strategy:"absolute",middleware:[]},r=Object.keys(t),n=i=>t[i];return r.includes("offset")&&e.middleware.push(Vi(n("offset"))),r.includes("teleport")&&(e.strategy="fixed"),r.includes("placement")&&(e.placement=n("placement")),r.includes("autoPlacement")&&!r.includes("flip")&&e.middleware.push(oi(n("autoPlacement"))),r.includes("flip")&&e.middleware.push(eo(n("flip"))),r.includes("shift")&&e.middleware.push(to(n("shift"))),r.includes("inline")&&e.middleware.push(oo(n("inline"))),r.includes("arrow")&&e.middleware.push(io(n("arrow"))),r.includes("hide")&&e.middleware.push(ro(n("hide"))),r.includes("size")&&e.middleware.push(no(n("size"))),e},Fa=(t,e)=>{let r={component:{trap:!1},float:{placement:"bottom",strategy:"absolute",middleware:[]}},n=i=>t[t.indexOf(i)+1];if(t.includes("trap")&&(r.component.trap=!0),t.includes("teleport")&&(r.float.strategy="fixed"),t.includes("offset")&&r.float.middleware.push(Vi(e.offset||10)),t.includes("placement")&&(r.float.placement=n("placement")),t.includes("autoPlacement")&&!t.includes("flip")&&r.float.middleware.push(oi(e.autoPlacement)),t.includes("flip")&&r.float.middleware.push(eo(e.flip)),t.includes("shift")&&r.float.middleware.push(to(e.shift)),t.includes("inline")&&r.float.middleware.push(oo(e.inline)),t.includes("arrow")&&r.float.middleware.push(io(e.arrow)),t.includes("hide")&&r.float.middleware.push(ro(e.hide)),t.includes("size")){let i=e.size?.availableWidth??null,o=e.size?.availableHeight??null;i&&delete e.size.availableWidth,o&&delete e.size.availableHeight,r.float.middleware.push(no({...e.size,apply({availableWidth:a,availableHeight:d,elements:f}){Object.assign(f.floating.style,{maxWidth:`${i??a}px`,maxHeight:`${o??d}px`})}}))}return r},La=t=>{var e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""),r="";t||(t=Math.floor(Math.random()*e.length));for(var n=0;n{}){let r=!1;return function(){r?e.apply(this,arguments):(r=!0,t.apply(this,arguments))}}function ka(t){let e={dismissable:!0,trap:!1};function r(n,i=null){if(n){if(n.hasAttribute("aria-expanded")||n.setAttribute("aria-expanded",!1),i.hasAttribute("id"))n.setAttribute("aria-controls",i.getAttribute("id"));else{let o=`panel-${La(8)}`;n.setAttribute("aria-controls",o),i.setAttribute("id",o)}i.setAttribute("aria-modal",!0),i.setAttribute("role","dialog")}}t.magic("float",n=>(i={},o={})=>{let a={...e,...o},d=Object.keys(i).length>0?Ia(i):{middleware:[oi()]},f=n,u=n.parentElement.closest("[x-data]"),w=u.querySelector('[x-ref="panel"]');r(f,w);function m(){return w.style.display=="block"}function E(){w.style.display="none",f.setAttribute("aria-expanded","false"),a.trap&&w.setAttribute("x-trap","false"),Bi(n,w,M)}function O(){w.style.display="block",f.setAttribute("aria-expanded","true"),a.trap&&w.setAttribute("x-trap","true"),M()}function S(){m()?E():O()}async function M(){return await Hi(n,w,d).then(({middlewareData:I,placement:$,x:A,y:k})=>{if(I.arrow){let Y=I.arrow?.x,nt=I.arrow?.y,J=d.middleware.filter(dt=>dt.name=="arrow")[0].options.element,U={top:"bottom",right:"left",bottom:"top",left:"right"}[$.split("-")[0]];Object.assign(J.style,{left:Y!=null?`${Y}px`:"",top:nt!=null?`${nt}px`:"",right:"",bottom:"",[U]:"-4px"})}if(I.hide){let{referenceHidden:Y}=I.hide;Object.assign(w.style,{visibility:Y?"hidden":"visible"})}Object.assign(w.style,{left:`${A}px`,top:`${k}px`})})}a.dismissable&&(window.addEventListener("click",I=>{!u.contains(I.target)&&m()&&S()}),window.addEventListener("keydown",I=>{I.key==="Escape"&&m()&&S()},!0)),S()}),t.directive("float",(n,{modifiers:i,expression:o},{evaluate:a,effect:d})=>{let f=o?a(o):{},u=i.length>0?Fa(i,f):{},w=null;u.float.strategy=="fixed"&&(n.style.position="fixed");let m=U=>n.parentElement&&!n.parentElement.closest("[x-data]").contains(U.target)?n.close():null,E=U=>U.key==="Escape"?n.close():null,O=n.getAttribute("x-ref"),S=n.parentElement.closest("[x-data]"),M=S.querySelectorAll(`[\\@click^="$refs.${O}"]`),I=S.querySelectorAll(`[x-on\\:click^="$refs.${O}"]`);n.style.setProperty("display","none"),r([...M,...I][0],n),n._x_isShown=!1,n.trigger=null,n._x_doHide||(n._x_doHide=()=>{n.style.setProperty("display","none",i.includes("important")?"important":void 0)}),n._x_doShow||(n._x_doShow=()=>{n.style.setProperty("display","block",i.includes("important")?"important":void 0)});let $=()=>{n._x_doHide(),n._x_isShown=!1},A=()=>{n._x_doShow(),n._x_isShown=!0},k=()=>setTimeout(A),Y=Na(U=>U?A():$(),U=>{typeof n._x_toggleAndCascadeWithTransitions=="function"?n._x_toggleAndCascadeWithTransitions(n,U,A,$):U?k():$()}),nt,J=!0;d(()=>a(U=>{!J&&U===nt||(i.includes("immediate")&&(U?k():$()),Y(U),nt=U,J=!1)})),n.open=async function(U){n.trigger=U.currentTarget?U.currentTarget:U,Y(!0),n.trigger.setAttribute("aria-expanded","true"),u.component.trap&&n.setAttribute("x-trap","true"),w=Bi(n.trigger,n,()=>{Hi(n.trigger,n,u.float).then(({middlewareData:dt,placement:X,x:Z,y:mt})=>{if(dt.arrow){let l=dt.arrow?.x,h=dt.arrow?.y,v=u.float.middleware.filter(j=>j.name=="arrow")[0].options.element,p={top:"bottom",right:"left",bottom:"top",left:"right"}[X.split("-")[0]];Object.assign(v.style,{left:l!=null?`${l}px`:"",top:h!=null?`${h}px`:"",right:"",bottom:"",[p]:"-4px"})}if(dt.hide){let{referenceHidden:l}=dt.hide;Object.assign(n.style,{visibility:l?"hidden":"visible"})}Object.assign(n.style,{left:`${Z}px`,top:`${mt}px`})})}),window.addEventListener("click",m),window.addEventListener("keydown",E,!0)},n.close=function(){if(!n._x_isShown)return!1;Y(!1),n.trigger.setAttribute("aria-expanded","false"),u.component.trap&&n.setAttribute("x-trap","false"),w(),window.removeEventListener("click",m),window.removeEventListener("keydown",E,!1)},n.toggle=function(U){n._x_isShown?n.close():n.open(U)}})}var ao=ka;function ja(t){t.store("lazyLoadedAssets",{loaded:new Set,check(a){return Array.isArray(a)?a.every(d=>this.loaded.has(d)):this.loaded.has(a)},markLoaded(a){Array.isArray(a)?a.forEach(d=>this.loaded.add(d)):this.loaded.add(a)}});let e=a=>new CustomEvent(a,{bubbles:!0,composed:!0,cancelable:!0}),r=(a,d={},f,u)=>{let w=document.createElement(a);return Object.entries(d).forEach(([m,E])=>w[m]=E),f&&(u?f.insertBefore(w,u):f.appendChild(w)),w},n=(a,d,f={},u=null,w=null)=>{let m=a==="link"?`link[href="${d}"]`:`script[src="${d}"]`;if(document.querySelector(m)||t.store("lazyLoadedAssets").check(d))return Promise.resolve();let E=a==="link"?{...f,href:d}:{...f,src:d},O=r(a,E,u,w);return new Promise((S,M)=>{O.onload=()=>{t.store("lazyLoadedAssets").markLoaded(d),S()},O.onerror=()=>{M(new Error(`Failed to load ${a}: ${d}`))}})},i=async(a,d,f=null,u=null)=>{let w={type:"text/css",rel:"stylesheet"};d&&(w.media=d);let m=document.head,E=null;if(f&&u){let O=document.querySelector(`link[href*="${u}"]`);O?(m=O.parentElement,E=f==="before"?O:O.nextSibling):(console.warn(`Target (${u}) not found for ${a}. Appending to head.`),m=document.head,E=null)}await n("link",a,w,m,E)},o=async(a,d,f=null,u=null,w=null)=>{let m=document.head,E=null;if(f&&u){let S=document.querySelector(`script[src*="${u}"]`);S?(m=S.parentElement,E=f==="before"?S:S.nextSibling):(console.warn(`Target (${u}) not found for ${a}. Falling back to head or body.`),m=document.head,E=null)}else(d.has("body-start")||d.has("body-end"))&&(m=document.body,d.has("body-start")&&(E=document.body.firstChild));let O={};w&&(O.type="module"),await n("script",a,O,m,E)};t.directive("load-css",(a,{expression:d},{evaluate:f})=>{let u=f(d),w=a.media,m=a.getAttribute("data-dispatch"),E=a.getAttribute("data-css-before")?"before":a.getAttribute("data-css-after")?"after":null,O=a.getAttribute("data-css-before")||a.getAttribute("data-css-after")||null;Promise.all(u.map(S=>i(S,w,E,O))).then(()=>{m&&window.dispatchEvent(e(`${m}-css`))}).catch(console.error)}),t.directive("load-js",(a,{expression:d,modifiers:f},{evaluate:u})=>{let w=u(d),m=new Set(f),E=a.getAttribute("data-js-before")?"before":a.getAttribute("data-js-after")?"after":null,O=a.getAttribute("data-js-before")||a.getAttribute("data-js-after")||null,S=a.getAttribute("data-js-as-module")||a.getAttribute("data-as-module")||!1,M=a.getAttribute("data-dispatch");Promise.all(w.map(I=>o(I,m,E,O,S))).then(()=>{M&&window.dispatchEvent(e(`${M}-js`))}).catch(console.error)})}var so=ja;function Ba(){return!0}function Ha({component:t,argument:e}){return new Promise(r=>{if(e)window.addEventListener(e,()=>r(),{once:!0});else{let n=i=>{i.detail.id===t.id&&(window.removeEventListener("async-alpine:load",n),r())};window.addEventListener("async-alpine:load",n)}})}function $a(){return new Promise(t=>{"requestIdleCallback"in window?window.requestIdleCallback(t):setTimeout(t,200)})}function Wa({argument:t}){return new Promise(e=>{if(!t)return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"),e();let r=window.matchMedia(`(${t})`);r.matches?e():r.addEventListener("change",e,{once:!0})})}function za({component:t,argument:e}){return new Promise(r=>{let n=e||"0px 0px 0px 0px",i=new IntersectionObserver(o=>{o[0].isIntersecting&&(i.disconnect(),r())},{rootMargin:n});i.observe(t.el)})}var lo={eager:Ba,event:Ha,idle:$a,media:Wa,visible:za};async function Ua(t){let e=Va(t.strategy);await ai(t,e)}async function ai(t,e){if(e.type==="expression"){if(e.operator==="&&")return Promise.all(e.parameters.map(r=>ai(t,r)));if(e.operator==="||")return Promise.any(e.parameters.map(r=>ai(t,r)))}return lo[e.method]?lo[e.method]({component:t,argument:e.argument}):!1}function Va(t){let e=Ya(t),r=fo(e);return r.type==="method"?{type:"expression",operator:"&&",parameters:[r]}:r}function Ya(t){let e=/\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g,r=[],n;for(;(n=e.exec(t))!==null;){let[i,o,a,d]=n;if(o!==void 0)r.push({type:"parenthesis",value:o});else if(a!==void 0)r.push({type:"operator",value:a==="|"?"&&":a});else{let f={type:"method",method:d.trim()};d.includes("(")&&(f.method=d.substring(0,d.indexOf("(")).trim(),f.argument=d.substring(d.indexOf("(")+1,d.indexOf(")"))),d.method==="immediate"&&(d.method="eager"),r.push(f)}}return r}function fo(t){let e=co(t);for(;t.length>0&&(t[0].value==="&&"||t[0].value==="|"||t[0].value==="||");){let r=t.shift().value,n=co(t);e.type==="expression"&&e.operator===r?e.parameters.push(n):e={type:"expression",operator:r,parameters:[e,n]}}return e}function co(t){if(t[0].value==="("){t.shift();let e=fo(t);return t[0].value===")"&&t.shift(),e}else return t.shift()}function uo(t){let e="load",r=t.prefixed("load-src"),n=t.prefixed("ignore"),i={defaultStrategy:"eager",keepRelativeURLs:!1},o=!1,a={},d=0;function f(){return d++}t.asyncOptions=A=>{i={...i,...A}},t.asyncData=(A,k=!1)=>{a[A]={loaded:!1,download:k}},t.asyncUrl=(A,k)=>{!A||!k||a[A]||(a[A]={loaded:!1,download:()=>import($(k))})},t.asyncAlias=A=>{o=A};let u=A=>{t.skipDuringClone(()=>{A._x_async||(A._x_async="init",A._x_ignore=!0,A.setAttribute(n,""))})()},w=async A=>{t.skipDuringClone(async()=>{if(A._x_async!=="init")return;A._x_async="await";let{name:k,strategy:Y}=m(A);await Ua({name:k,strategy:Y,el:A,id:A.id||f()}),A.isConnected&&(await E(k),A.isConnected&&(S(A),A._x_async="loaded"))})()};w.inline=u,t.directive(e,w).before("ignore");function m(A){let k=I(A.getAttribute(t.prefixed("data"))),Y=A.getAttribute(t.prefixed(e))||i.defaultStrategy,nt=A.getAttribute(r);return nt&&t.asyncUrl(k,nt),{name:k,strategy:Y}}async function E(A){if(A.startsWith("_x_async_")||(M(A),!a[A]||a[A].loaded))return;let k=await O(A);t.data(A,k),a[A].loaded=!0}async function O(A){if(!a[A])return;let k=await a[A].download(A);return typeof k=="function"?k:k[A]||k.default||Object.values(k)[0]||!1}function S(A){t.destroyTree(A),A._x_ignore=!1,A.removeAttribute(n),!A.closest(`[${n}]`)&&t.initTree(A)}function M(A){if(!(!o||a[A])){if(typeof o=="function"){t.asyncData(A,o);return}t.asyncUrl(A,o.replaceAll("[name]",A))}}function I(A){return(A||"").split(/[({]/g)[0]||`_x_async_${f()}`}function $(A){return i.keepRelativeURLs||new RegExp("^(?:[a-z+]+:)?//","i").test(A)?A:new URL(A,document.baseURI).href}}var Uo=Jo(vo(),1);function mo(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function Me(t){for(var e=1;e=0)&&(r[i]=t[i]);return r}function Ga(t,e){if(t==null)return{};var r=qa(t,e),n,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var Ka="1.15.6";function He(t){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(t)}var We=He(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),tr=He(/Edge/i),go=He(/firefox/i),Gn=He(/safari/i)&&!He(/chrome/i)&&!He(/android/i),wi=He(/iP(ad|od|hone)/i),Ao=He(/chrome/i)&&He(/android/i),Do={capture:!1,passive:!1};function Ot(t,e,r){t.addEventListener(e,r,!We&&Do)}function Et(t,e,r){t.removeEventListener(e,r,!We&&Do)}function Tr(t,e){if(e){if(e[0]===">"&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch{return!1}return!1}}function Co(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function Se(t,e,r,n){if(t){r=r||document;do{if(e!=null&&(e[0]===">"?t.parentNode===r&&Tr(t,e):Tr(t,e))||n&&t===r)return t;if(t===r)break}while(t=Co(t))}return null}var bo=/\s+/g;function fe(t,e,r){if(t&&e)if(t.classList)t.classList[r?"add":"remove"](e);else{var n=(" "+t.className+" ").replace(bo," ").replace(" "+e+" "," ");t.className=(n+(r?" "+e:"")).replace(bo," ")}}function at(t,e,r){var n=t&&t.style;if(n){if(r===void 0)return document.defaultView&&document.defaultView.getComputedStyle?r=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(r=t.currentStyle),e===void 0?r:r[e];!(e in n)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),n[e]=r+(typeof r=="string"?"":"px")}}function Ln(t,e){var r="";if(typeof t=="string")r=t;else do{var n=at(t,"transform");n&&n!=="none"&&(r=n+" "+r)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(r)}function _o(t,e,r){if(t){var n=t.getElementsByTagName(e),i=0,o=n.length;if(r)for(;i=o:a=i<=o,!a)return n;if(n===Pe())break;n=sn(n,!1)}return!1}function Nn(t,e,r,n){for(var i=0,o=0,a=t.children;o2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,o=Ga(n,is);er.pluginEvent.bind(st)(e,r,Me({dragEl:N,parentEl:Ut,ghostEl:ut,rootEl:kt,nextEl:bn,lastDownEl:Ar,cloneEl:Wt,cloneHidden:an,dragStarted:Yn,putSortable:Zt,activeSortable:st.active,originalEvent:i,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ue,newDraggableIndex:on,hideGhostForTarget:No,unhideGhostForTarget:ko,cloneNowHidden:function(){an=!0},cloneNowShown:function(){an=!1},dispatchSortableEvent:function(d){ie({sortable:r,name:d,originalEvent:i})}},o))};function ie(t){rs(Me({putSortable:Zt,cloneEl:Wt,targetEl:N,rootEl:kt,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ue,newDraggableIndex:on},t))}var N,Ut,ut,kt,bn,Ar,Wt,an,Fn,ue,Jn,on,wr,Zt,In=!1,Pr=!1,Mr=[],mn,Oe,ci,fi,xo,Eo,Yn,Rn,Zn,Qn=!1,xr=!1,Dr,ne,ui=[],mi=!1,Rr=[],Fr=typeof document<"u",Er=wi,Oo=tr||We?"cssFloat":"float",os=Fr&&!Ao&&!wi&&"draggable"in document.createElement("div"),Io=function(){if(Fr){if(We)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto",t.style.pointerEvents==="auto"}}(),Fo=function(e,r){var n=at(e),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=Nn(e,0,r),a=Nn(e,1,r),d=o&&at(o),f=a&&at(a),u=d&&parseInt(d.marginLeft)+parseInt(d.marginRight)+qt(o).width,w=f&&parseInt(f.marginLeft)+parseInt(f.marginRight)+qt(a).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&d.float&&d.float!=="none"){var m=d.float==="left"?"left":"right";return a&&(f.clear==="both"||f.clear===m)?"vertical":"horizontal"}return o&&(d.display==="block"||d.display==="flex"||d.display==="table"||d.display==="grid"||u>=i&&n[Oo]==="none"||a&&n[Oo]==="none"&&u+w>i)?"vertical":"horizontal"},as=function(e,r,n){var i=n?e.left:e.top,o=n?e.right:e.bottom,a=n?e.width:e.height,d=n?r.left:r.top,f=n?r.right:r.bottom,u=n?r.width:r.height;return i===d||o===f||i+a/2===d+u/2},ss=function(e,r){var n;return Mr.some(function(i){var o=i[se].options.emptyInsertThreshold;if(!(!o||xi(i))){var a=qt(i),d=e>=a.left-o&&e<=a.right+o,f=r>=a.top-o&&r<=a.bottom+o;if(d&&f)return n=i}}),n},Lo=function(e){function r(o,a){return function(d,f,u,w){var m=d.options.group.name&&f.options.group.name&&d.options.group.name===f.options.group.name;if(o==null&&(a||m))return!0;if(o==null||o===!1)return!1;if(a&&o==="clone")return o;if(typeof o=="function")return r(o(d,f,u,w),a)(d,f,u,w);var E=(a?d:f).options.group.name;return o===!0||typeof o=="string"&&o===E||o.join&&o.indexOf(E)>-1}}var n={},i=e.group;(!i||Sr(i)!="object")&&(i={name:i}),n.name=i.name,n.checkPull=r(i.pull,!0),n.checkPut=r(i.put),n.revertClone=i.revertClone,e.group=n},No=function(){!Io&&ut&&at(ut,"display","none")},ko=function(){!Io&&ut&&at(ut,"display","")};Fr&&!Ao&&document.addEventListener("click",function(t){if(Pr)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Pr=!1,!1},!0);var gn=function(e){if(N){e=e.touches?e.touches[0]:e;var r=ss(e.clientX,e.clientY);if(r){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);n.target=n.rootEl=r,n.preventDefault=void 0,n.stopPropagation=void 0,r[se]._onDragOver(n)}}},ls=function(e){N&&N.parentNode[se]._isOutsideThisEl(e.target)};function st(t,e){if(!(t&&t.nodeType&&t.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=$e({},e),t[se]=this;var r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Fo(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,d){a.setData("Text",d.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:st.supportPointer!==!1&&"PointerEvent"in window&&(!Gn||wi),emptyInsertThreshold:5};er.initializePlugins(this,t,r);for(var n in r)!(n in e)&&(e[n]=r[n]);Lo(e);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=e.forceFallback?!1:os,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?Ot(t,"pointerdown",this._onTapStart):(Ot(t,"mousedown",this._onTapStart),Ot(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(Ot(t,"dragover",this),Ot(t,"dragenter",this)),Mr.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),$e(this,ts())}st.prototype={constructor:st,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(Rn=null)},_getDirection:function(e,r){return typeof this.options.direction=="function"?this.options.direction.call(this,e,r,N):this.options.direction},_onTapStart:function(e){if(e.cancelable){var r=this,n=this.el,i=this.options,o=i.preventOnFilter,a=e.type,d=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,f=(d||e).target,u=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||f,w=i.filter;if(ms(n),!N&&!(/mousedown|pointerdown/.test(a)&&e.button!==0||i.disabled)&&!u.isContentEditable&&!(!this.nativeDraggable&&Gn&&f&&f.tagName.toUpperCase()==="SELECT")&&(f=Se(f,i.draggable,n,!1),!(f&&f.animated)&&Ar!==f)){if(Fn=ve(f),Jn=ve(f,i.draggable),typeof w=="function"){if(w.call(this,e,f,this)){ie({sortable:r,rootEl:u,name:"filter",targetEl:f,toEl:n,fromEl:n}),ae("filter",r,{evt:e}),o&&e.preventDefault();return}}else if(w&&(w=w.split(",").some(function(m){if(m=Se(u,m.trim(),n,!1),m)return ie({sortable:r,rootEl:m,name:"filter",targetEl:f,fromEl:n,toEl:n}),ae("filter",r,{evt:e}),!0}),w)){o&&e.preventDefault();return}i.handle&&!Se(u,i.handle,n,!1)||this._prepareDragStart(e,d,f)}}},_prepareDragStart:function(e,r,n){var i=this,o=i.el,a=i.options,d=o.ownerDocument,f;if(n&&!N&&n.parentNode===o){var u=qt(n);if(kt=o,N=n,Ut=N.parentNode,bn=N.nextSibling,Ar=n,wr=a.group,st.dragged=N,mn={target:N,clientX:(r||e).clientX,clientY:(r||e).clientY},xo=mn.clientX-u.left,Eo=mn.clientY-u.top,this._lastX=(r||e).clientX,this._lastY=(r||e).clientY,N.style["will-change"]="all",f=function(){if(ae("delayEnded",i,{evt:e}),st.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!go&&i.nativeDraggable&&(N.draggable=!0),i._triggerDragStart(e,r),ie({sortable:i,name:"choose",originalEvent:e}),fe(N,a.chosenClass,!0)},a.ignore.split(",").forEach(function(w){_o(N,w.trim(),di)}),Ot(d,"dragover",gn),Ot(d,"mousemove",gn),Ot(d,"touchmove",gn),a.supportPointer?(Ot(d,"pointerup",i._onDrop),!this.nativeDraggable&&Ot(d,"pointercancel",i._onDrop)):(Ot(d,"mouseup",i._onDrop),Ot(d,"touchend",i._onDrop),Ot(d,"touchcancel",i._onDrop)),go&&this.nativeDraggable&&(this.options.touchStartThreshold=4,N.draggable=!0),ae("delayStart",this,{evt:e}),a.delay&&(!a.delayOnTouchOnly||r)&&(!this.nativeDraggable||!(tr||We))){if(st.eventCanceled){this._onDrop();return}a.supportPointer?(Ot(d,"pointerup",i._disableDelayedDrag),Ot(d,"pointercancel",i._disableDelayedDrag)):(Ot(d,"mouseup",i._disableDelayedDrag),Ot(d,"touchend",i._disableDelayedDrag),Ot(d,"touchcancel",i._disableDelayedDrag)),Ot(d,"mousemove",i._delayedDragTouchMoveHandler),Ot(d,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&Ot(d,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(f,a.delay)}else f()}},_delayedDragTouchMoveHandler:function(e){var r=e.touches?e.touches[0]:e;Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){N&&di(N),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;Et(e,"mouseup",this._disableDelayedDrag),Et(e,"touchend",this._disableDelayedDrag),Et(e,"touchcancel",this._disableDelayedDrag),Et(e,"pointerup",this._disableDelayedDrag),Et(e,"pointercancel",this._disableDelayedDrag),Et(e,"mousemove",this._delayedDragTouchMoveHandler),Et(e,"touchmove",this._delayedDragTouchMoveHandler),Et(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,r){r=r||e.pointerType=="touch"&&e,!this.nativeDraggable||r?this.options.supportPointer?Ot(document,"pointermove",this._onTouchMove):r?Ot(document,"touchmove",this._onTouchMove):Ot(document,"mousemove",this._onTouchMove):(Ot(N,"dragend",this),Ot(kt,"dragstart",this._onDragStart));try{document.selection?Cr(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,r){if(In=!1,kt&&N){ae("dragStarted",this,{evt:r}),this.nativeDraggable&&Ot(document,"dragover",ls);var n=this.options;!e&&fe(N,n.dragClass,!1),fe(N,n.ghostClass,!0),st.active=this,e&&this._appendGhost(),ie({sortable:this,name:"start",originalEvent:r})}else this._nulling()},_emulateDragOver:function(){if(Oe){this._lastX=Oe.clientX,this._lastY=Oe.clientY,No();for(var e=document.elementFromPoint(Oe.clientX,Oe.clientY),r=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Oe.clientX,Oe.clientY),e!==r);)r=e;if(N.parentNode[se]._isOutsideThisEl(e),r)do{if(r[se]){var n=void 0;if(n=r[se]._onDragOver({clientX:Oe.clientX,clientY:Oe.clientY,target:e,rootEl:r}),n&&!this.options.dragoverBubble)break}e=r}while(r=Co(r));ko()}},_onTouchMove:function(e){if(mn){var r=this.options,n=r.fallbackTolerance,i=r.fallbackOffset,o=e.touches?e.touches[0]:e,a=ut&&Ln(ut,!0),d=ut&&a&&a.a,f=ut&&a&&a.d,u=Er&&ne&&wo(ne),w=(o.clientX-mn.clientX+i.x)/(d||1)+(u?u[0]-ui[0]:0)/(d||1),m=(o.clientY-mn.clientY+i.y)/(f||1)+(u?u[1]-ui[1]:0)/(f||1);if(!st.active&&!In){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))=0&&(ie({rootEl:Ut,name:"add",toEl:Ut,fromEl:kt,originalEvent:e}),ie({sortable:this,name:"remove",toEl:Ut,originalEvent:e}),ie({rootEl:Ut,name:"sort",toEl:Ut,fromEl:kt,originalEvent:e}),ie({sortable:this,name:"sort",toEl:Ut,originalEvent:e})),Zt&&Zt.save()):ue!==Fn&&ue>=0&&(ie({sortable:this,name:"update",toEl:Ut,originalEvent:e}),ie({sortable:this,name:"sort",toEl:Ut,originalEvent:e})),st.active&&((ue==null||ue===-1)&&(ue=Fn,on=Jn),ie({sortable:this,name:"end",toEl:Ut,originalEvent:e}),this.save()))),this._nulling()},_nulling:function(){ae("nulling",this),kt=N=Ut=ut=bn=Wt=Ar=an=mn=Oe=Yn=ue=on=Fn=Jn=Rn=Zn=Zt=wr=st.dragged=st.ghost=st.clone=st.active=null,Rr.forEach(function(e){e.checked=!0}),Rr.length=ci=fi=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":N&&(this._onDragOver(e),cs(e));break;case"selectstart":e.preventDefault();break}},toArray:function(){for(var e=[],r,n=this.el.children,i=0,o=n.length,a=this.options;ii.right+o||t.clientY>n.bottom&&t.clientX>n.left:t.clientY>i.bottom+o||t.clientX>n.right&&t.clientY>n.top}function ps(t,e,r,n,i,o,a,d){var f=n?t.clientY:t.clientX,u=n?r.height:r.width,w=n?r.top:r.left,m=n?r.bottom:r.right,E=!1;if(!a){if(d&&Drw+u*o/2:fm-Dr)return-Zn}else if(f>w+u*(1-i)/2&&fm-u*o/2)?f>w+u/2?1:-1:0}function hs(t){return ve(N){t.directive("sortable",e=>{let r=parseInt(e.dataset?.sortableAnimationDuration);r!==0&&!r&&(r=300),e.sortable=Si.create(e,{group:e.getAttribute("x-sortable-group"),draggable:"[x-sortable-item]",handle:"[x-sortable-handle]",dataIdAttr:"x-sortable-item",animation:r,ghostClass:"fi-sortable-ghost"})})};var bs=Object.create,Ci=Object.defineProperty,ys=Object.getPrototypeOf,ws=Object.prototype.hasOwnProperty,xs=Object.getOwnPropertyNames,Es=Object.getOwnPropertyDescriptor,Os=t=>Ci(t,"__esModule",{value:!0}),Ho=(t,e)=>()=>(e||(e={exports:{}},t(e.exports,e)),e.exports),Ss=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of xs(e))!ws.call(t,n)&&n!=="default"&&Ci(t,n,{get:()=>e[n],enumerable:!(r=Es(e,n))||r.enumerable});return t},$o=t=>Ss(Os(Ci(t!=null?bs(ys(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t),As=Ho(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});function e(c){var s=c.getBoundingClientRect();return{width:s.width,height:s.height,top:s.top,right:s.right,bottom:s.bottom,left:s.left,x:s.left,y:s.top}}function r(c){if(c==null)return window;if(c.toString()!=="[object Window]"){var s=c.ownerDocument;return s&&s.defaultView||window}return c}function n(c){var s=r(c),b=s.pageXOffset,_=s.pageYOffset;return{scrollLeft:b,scrollTop:_}}function i(c){var s=r(c).Element;return c instanceof s||c instanceof Element}function o(c){var s=r(c).HTMLElement;return c instanceof s||c instanceof HTMLElement}function a(c){if(typeof ShadowRoot>"u")return!1;var s=r(c).ShadowRoot;return c instanceof s||c instanceof ShadowRoot}function d(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}function f(c){return c===r(c)||!o(c)?n(c):d(c)}function u(c){return c?(c.nodeName||"").toLowerCase():null}function w(c){return((i(c)?c.ownerDocument:c.document)||window.document).documentElement}function m(c){return e(w(c)).left+n(c).scrollLeft}function E(c){return r(c).getComputedStyle(c)}function O(c){var s=E(c),b=s.overflow,_=s.overflowX,T=s.overflowY;return/auto|scroll|overlay|hidden/.test(b+T+_)}function S(c,s,b){b===void 0&&(b=!1);var _=w(s),T=e(c),L=o(s),z={scrollLeft:0,scrollTop:0},H={x:0,y:0};return(L||!L&&!b)&&((u(s)!=="body"||O(_))&&(z=f(s)),o(s)?(H=e(s),H.x+=s.clientLeft,H.y+=s.clientTop):_&&(H.x=m(_))),{x:T.left+z.scrollLeft-H.x,y:T.top+z.scrollTop-H.y,width:T.width,height:T.height}}function M(c){var s=e(c),b=c.offsetWidth,_=c.offsetHeight;return Math.abs(s.width-b)<=1&&(b=s.width),Math.abs(s.height-_)<=1&&(_=s.height),{x:c.offsetLeft,y:c.offsetTop,width:b,height:_}}function I(c){return u(c)==="html"?c:c.assignedSlot||c.parentNode||(a(c)?c.host:null)||w(c)}function $(c){return["html","body","#document"].indexOf(u(c))>=0?c.ownerDocument.body:o(c)&&O(c)?c:$(I(c))}function A(c,s){var b;s===void 0&&(s=[]);var _=$(c),T=_===((b=c.ownerDocument)==null?void 0:b.body),L=r(_),z=T?[L].concat(L.visualViewport||[],O(_)?_:[]):_,H=s.concat(z);return T?H:H.concat(A(I(z)))}function k(c){return["table","td","th"].indexOf(u(c))>=0}function Y(c){return!o(c)||E(c).position==="fixed"?null:c.offsetParent}function nt(c){var s=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,b=navigator.userAgent.indexOf("Trident")!==-1;if(b&&o(c)){var _=E(c);if(_.position==="fixed")return null}for(var T=I(c);o(T)&&["html","body"].indexOf(u(T))<0;){var L=E(T);if(L.transform!=="none"||L.perspective!=="none"||L.contain==="paint"||["transform","perspective"].indexOf(L.willChange)!==-1||s&&L.willChange==="filter"||s&&L.filter&&L.filter!=="none")return T;T=T.parentNode}return null}function J(c){for(var s=r(c),b=Y(c);b&&k(b)&&E(b).position==="static";)b=Y(b);return b&&(u(b)==="html"||u(b)==="body"&&E(b).position==="static")?s:b||nt(c)||s}var U="top",dt="bottom",X="right",Z="left",mt="auto",l=[U,dt,X,Z],h="start",v="end",p="clippingParents",j="viewport",P="popper",R="reference",Q=l.reduce(function(c,s){return c.concat([s+"-"+h,s+"-"+v])},[]),Vt=[].concat(l,[mt]).reduce(function(c,s){return c.concat([s,s+"-"+h,s+"-"+v])},[]),Re="beforeRead",ze="read",Nr="afterRead",kr="beforeMain",jr="main",Ue="afterMain",nr="beforeWrite",Br="write",rr="afterWrite",Ie=[Re,ze,Nr,kr,jr,Ue,nr,Br,rr];function Hr(c){var s=new Map,b=new Set,_=[];c.forEach(function(L){s.set(L.name,L)});function T(L){b.add(L.name);var z=[].concat(L.requires||[],L.requiresIfExists||[]);z.forEach(function(H){if(!b.has(H)){var G=s.get(H);G&&T(G)}}),_.push(L)}return c.forEach(function(L){b.has(L.name)||T(L)}),_}function me(c){var s=Hr(c);return Ie.reduce(function(b,_){return b.concat(s.filter(function(T){return T.phase===_}))},[])}function Ve(c){var s;return function(){return s||(s=new Promise(function(b){Promise.resolve().then(function(){s=void 0,b(c())})})),s}}function Ae(c){for(var s=arguments.length,b=new Array(s>1?s-1:0),_=1;_=0,_=b&&o(c)?J(c):c;return i(_)?s.filter(function(T){return i(T)&&kn(T,_)&&u(T)!=="body"}):[]}function wn(c,s,b){var _=s==="clippingParents"?yn(c):[].concat(s),T=[].concat(_,[b]),L=T[0],z=T.reduce(function(H,G){var ot=sr(c,G);return H.top=ge(ot.top,H.top),H.right=ln(ot.right,H.right),H.bottom=ln(ot.bottom,H.bottom),H.left=ge(ot.left,H.left),H},sr(c,L));return z.width=z.right-z.left,z.height=z.bottom-z.top,z.x=z.left,z.y=z.top,z}function cn(c){return c.split("-")[1]}function de(c){return["top","bottom"].indexOf(c)>=0?"x":"y"}function lr(c){var s=c.reference,b=c.element,_=c.placement,T=_?oe(_):null,L=_?cn(_):null,z=s.x+s.width/2-b.width/2,H=s.y+s.height/2-b.height/2,G;switch(T){case U:G={x:z,y:s.y-b.height};break;case dt:G={x:z,y:s.y+s.height};break;case X:G={x:s.x+s.width,y:H};break;case Z:G={x:s.x-b.width,y:H};break;default:G={x:s.x,y:s.y}}var ot=T?de(T):null;if(ot!=null){var V=ot==="y"?"height":"width";switch(L){case h:G[ot]=G[ot]-(s[V]/2-b[V]/2);break;case v:G[ot]=G[ot]+(s[V]/2-b[V]/2);break}}return G}function cr(){return{top:0,right:0,bottom:0,left:0}}function fr(c){return Object.assign({},cr(),c)}function ur(c,s){return s.reduce(function(b,_){return b[_]=c,b},{})}function qe(c,s){s===void 0&&(s={});var b=s,_=b.placement,T=_===void 0?c.placement:_,L=b.boundary,z=L===void 0?p:L,H=b.rootBoundary,G=H===void 0?j:H,ot=b.elementContext,V=ot===void 0?P:ot,Ct=b.altBoundary,Lt=Ct===void 0?!1:Ct,Dt=b.padding,xt=Dt===void 0?0:Dt,Mt=fr(typeof xt!="number"?xt:ur(xt,l)),St=V===P?R:P,Bt=c.elements.reference,Rt=c.rects.popper,Ht=c.elements[Lt?St:V],ct=wn(i(Ht)?Ht:Ht.contextElement||w(c.elements.popper),z,G),Pt=e(Bt),_t=lr({reference:Pt,element:Rt,strategy:"absolute",placement:T}),Nt=Xe(Object.assign({},Rt,_t)),Ft=V===P?Nt:Pt,Yt={top:ct.top-Ft.top+Mt.top,bottom:Ft.bottom-ct.bottom+Mt.bottom,left:ct.left-Ft.left+Mt.left,right:Ft.right-ct.right+Mt.right},$t=c.modifiersData.offset;if(V===P&&$t){var zt=$t[T];Object.keys(Yt).forEach(function(we){var te=[X,dt].indexOf(we)>=0?1:-1,Le=[U,dt].indexOf(we)>=0?"y":"x";Yt[we]+=zt[Le]*te})}return Yt}var dr="Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.",Vr="Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.",xn={placement:"bottom",modifiers:[],strategy:"absolute"};function fn(){for(var c=arguments.length,s=new Array(c),b=0;b100){console.error(Vr);break}if(V.reset===!0){V.reset=!1,Pt=-1;continue}var _t=V.orderedModifiers[Pt],Nt=_t.fn,Ft=_t.options,Yt=Ft===void 0?{}:Ft,$t=_t.name;typeof Nt=="function"&&(V=Nt({state:V,options:Yt,name:$t,instance:Dt})||V)}}},update:Ve(function(){return new Promise(function(St){Dt.forceUpdate(),St(V)})}),destroy:function(){Mt(),Lt=!0}};if(!fn(H,G))return console.error(dr),Dt;Dt.setOptions(ot).then(function(St){!Lt&&ot.onFirstUpdate&&ot.onFirstUpdate(St)});function xt(){V.orderedModifiers.forEach(function(St){var Bt=St.name,Rt=St.options,Ht=Rt===void 0?{}:Rt,ct=St.effect;if(typeof ct=="function"){var Pt=ct({state:V,name:Bt,instance:Dt,options:Ht}),_t=function(){};Ct.push(Pt||_t)}})}function Mt(){Ct.forEach(function(St){return St()}),Ct=[]}return Dt}}var On={passive:!0};function Yr(c){var s=c.state,b=c.instance,_=c.options,T=_.scroll,L=T===void 0?!0:T,z=_.resize,H=z===void 0?!0:z,G=r(s.elements.popper),ot=[].concat(s.scrollParents.reference,s.scrollParents.popper);return L&&ot.forEach(function(V){V.addEventListener("scroll",b.update,On)}),H&&G.addEventListener("resize",b.update,On),function(){L&&ot.forEach(function(V){V.removeEventListener("scroll",b.update,On)}),H&&G.removeEventListener("resize",b.update,On)}}var jn={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Yr,data:{}};function Xr(c){var s=c.state,b=c.name;s.modifiersData[b]=lr({reference:s.rects.reference,element:s.rects.popper,strategy:"absolute",placement:s.placement})}var Bn={name:"popperOffsets",enabled:!0,phase:"read",fn:Xr,data:{}},qr={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Gr(c){var s=c.x,b=c.y,_=window,T=_.devicePixelRatio||1;return{x:Ye(Ye(s*T)/T)||0,y:Ye(Ye(b*T)/T)||0}}function Hn(c){var s,b=c.popper,_=c.popperRect,T=c.placement,L=c.offsets,z=c.position,H=c.gpuAcceleration,G=c.adaptive,ot=c.roundOffsets,V=ot===!0?Gr(L):typeof ot=="function"?ot(L):L,Ct=V.x,Lt=Ct===void 0?0:Ct,Dt=V.y,xt=Dt===void 0?0:Dt,Mt=L.hasOwnProperty("x"),St=L.hasOwnProperty("y"),Bt=Z,Rt=U,Ht=window;if(G){var ct=J(b),Pt="clientHeight",_t="clientWidth";ct===r(b)&&(ct=w(b),E(ct).position!=="static"&&(Pt="scrollHeight",_t="scrollWidth")),ct=ct,T===U&&(Rt=dt,xt-=ct[Pt]-_.height,xt*=H?1:-1),T===Z&&(Bt=X,Lt-=ct[_t]-_.width,Lt*=H?1:-1)}var Nt=Object.assign({position:z},G&&qr);if(H){var Ft;return Object.assign({},Nt,(Ft={},Ft[Rt]=St?"0":"",Ft[Bt]=Mt?"0":"",Ft.transform=(Ht.devicePixelRatio||1)<2?"translate("+Lt+"px, "+xt+"px)":"translate3d("+Lt+"px, "+xt+"px, 0)",Ft))}return Object.assign({},Nt,(s={},s[Rt]=St?xt+"px":"",s[Bt]=Mt?Lt+"px":"",s.transform="",s))}function g(c){var s=c.state,b=c.options,_=b.gpuAcceleration,T=_===void 0?!0:_,L=b.adaptive,z=L===void 0?!0:L,H=b.roundOffsets,G=H===void 0?!0:H,ot=E(s.elements.popper).transitionProperty||"";z&&["transform","top","right","bottom","left"].some(function(Ct){return ot.indexOf(Ct)>=0})&&console.warn(["Popper: Detected CSS transitions on at least one of the following",'CSS properties: "transform", "top", "right", "bottom", "left".',` + +`,'Disable the "computeStyles" modifier\'s `adaptive` option to allow',"for smooth transitions, or remove these properties from the CSS","transition declaration on the popper element if only transitioning","opacity or background-color for example.",` + +`,"We recommend using the popper element as a wrapper around an inner","element that can have any CSS property transitioned for animations."].join(" "));var V={placement:oe(s.placement),popper:s.elements.popper,popperRect:s.rects.popper,gpuAcceleration:T};s.modifiersData.popperOffsets!=null&&(s.styles.popper=Object.assign({},s.styles.popper,Hn(Object.assign({},V,{offsets:s.modifiersData.popperOffsets,position:s.options.strategy,adaptive:z,roundOffsets:G})))),s.modifiersData.arrow!=null&&(s.styles.arrow=Object.assign({},s.styles.arrow,Hn(Object.assign({},V,{offsets:s.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:G})))),s.attributes.popper=Object.assign({},s.attributes.popper,{"data-popper-placement":s.placement})}var y={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:g,data:{}};function D(c){var s=c.state;Object.keys(s.elements).forEach(function(b){var _=s.styles[b]||{},T=s.attributes[b]||{},L=s.elements[b];!o(L)||!u(L)||(Object.assign(L.style,_),Object.keys(T).forEach(function(z){var H=T[z];H===!1?L.removeAttribute(z):L.setAttribute(z,H===!0?"":H)}))})}function F(c){var s=c.state,b={popper:{position:s.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(s.elements.popper.style,b.popper),s.styles=b,s.elements.arrow&&Object.assign(s.elements.arrow.style,b.arrow),function(){Object.keys(s.elements).forEach(function(_){var T=s.elements[_],L=s.attributes[_]||{},z=Object.keys(s.styles.hasOwnProperty(_)?s.styles[_]:b[_]),H=z.reduce(function(G,ot){return G[ot]="",G},{});!o(T)||!u(T)||(Object.assign(T.style,H),Object.keys(L).forEach(function(G){T.removeAttribute(G)}))})}}var q={name:"applyStyles",enabled:!0,phase:"write",fn:D,effect:F,requires:["computeStyles"]};function W(c,s,b){var _=oe(c),T=[Z,U].indexOf(_)>=0?-1:1,L=typeof b=="function"?b(Object.assign({},s,{placement:c})):b,z=L[0],H=L[1];return z=z||0,H=(H||0)*T,[Z,X].indexOf(_)>=0?{x:H,y:z}:{x:z,y:H}}function B(c){var s=c.state,b=c.options,_=c.name,T=b.offset,L=T===void 0?[0,0]:T,z=Vt.reduce(function(V,Ct){return V[Ct]=W(Ct,s.rects,L),V},{}),H=z[s.placement],G=H.x,ot=H.y;s.modifiersData.popperOffsets!=null&&(s.modifiersData.popperOffsets.x+=G,s.modifiersData.popperOffsets.y+=ot),s.modifiersData[_]=z}var bt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:B},lt={left:"right",right:"left",bottom:"top",top:"bottom"};function pt(c){return c.replace(/left|right|bottom|top/g,function(s){return lt[s]})}var yt={start:"end",end:"start"};function Tt(c){return c.replace(/start|end/g,function(s){return yt[s]})}function jt(c,s){s===void 0&&(s={});var b=s,_=b.placement,T=b.boundary,L=b.rootBoundary,z=b.padding,H=b.flipVariations,G=b.allowedAutoPlacements,ot=G===void 0?Vt:G,V=cn(_),Ct=V?H?Q:Q.filter(function(xt){return cn(xt)===V}):l,Lt=Ct.filter(function(xt){return ot.indexOf(xt)>=0});Lt.length===0&&(Lt=Ct,console.error(["Popper: The `allowedAutoPlacements` option did not allow any","placements. Ensure the `placement` option matches the variation","of the allowed placements.",'For example, "auto" cannot be used to allow "bottom-start".','Use "auto-start" instead.'].join(" ")));var Dt=Lt.reduce(function(xt,Mt){return xt[Mt]=qe(c,{placement:Mt,boundary:T,rootBoundary:L,padding:z})[oe(Mt)],xt},{});return Object.keys(Dt).sort(function(xt,Mt){return Dt[xt]-Dt[Mt]})}function At(c){if(oe(c)===mt)return[];var s=pt(c);return[Tt(c),s,Tt(s)]}function It(c){var s=c.state,b=c.options,_=c.name;if(!s.modifiersData[_]._skip){for(var T=b.mainAxis,L=T===void 0?!0:T,z=b.altAxis,H=z===void 0?!0:z,G=b.fallbackPlacements,ot=b.padding,V=b.boundary,Ct=b.rootBoundary,Lt=b.altBoundary,Dt=b.flipVariations,xt=Dt===void 0?!0:Dt,Mt=b.allowedAutoPlacements,St=s.options.placement,Bt=oe(St),Rt=Bt===St,Ht=G||(Rt||!xt?[pt(St)]:At(St)),ct=[St].concat(Ht).reduce(function(et,gt){return et.concat(oe(gt)===mt?jt(s,{placement:gt,boundary:V,rootBoundary:Ct,padding:ot,flipVariations:xt,allowedAutoPlacements:Mt}):gt)},[]),Pt=s.rects.reference,_t=s.rects.popper,Nt=new Map,Ft=!0,Yt=ct[0],$t=0;$t=0,dn=Le?"width":"height",Ze=qe(s,{placement:zt,boundary:V,rootBoundary:Ct,altBoundary:Lt,padding:ot}),Ne=Le?te?X:Z:te?dt:U;Pt[dn]>_t[dn]&&(Ne=pt(Ne));var $n=pt(Ne),Qe=[];if(L&&Qe.push(Ze[we]<=0),H&&Qe.push(Ze[Ne]<=0,Ze[$n]<=0),Qe.every(function(et){return et})){Yt=zt,Ft=!1;break}Nt.set(zt,Qe)}if(Ft)for(var Sn=xt?3:1,Wn=function(gt){var wt=ct.find(function(Kt){var Jt=Nt.get(Kt);if(Jt)return Jt.slice(0,gt).every(function(Ce){return Ce})});if(wt)return Yt=wt,"break"},C=Sn;C>0;C--){var K=Wn(C);if(K==="break")break}s.placement!==Yt&&(s.modifiersData[_]._skip=!0,s.placement=Yt,s.reset=!0)}}var rt={name:"flip",enabled:!0,phase:"main",fn:It,requiresIfExists:["offset"],data:{_skip:!1}};function ht(c){return c==="x"?"y":"x"}function vt(c,s,b){return ge(c,ln(s,b))}function tt(c){var s=c.state,b=c.options,_=c.name,T=b.mainAxis,L=T===void 0?!0:T,z=b.altAxis,H=z===void 0?!1:z,G=b.boundary,ot=b.rootBoundary,V=b.altBoundary,Ct=b.padding,Lt=b.tether,Dt=Lt===void 0?!0:Lt,xt=b.tetherOffset,Mt=xt===void 0?0:xt,St=qe(s,{boundary:G,rootBoundary:ot,padding:Ct,altBoundary:V}),Bt=oe(s.placement),Rt=cn(s.placement),Ht=!Rt,ct=de(Bt),Pt=ht(ct),_t=s.modifiersData.popperOffsets,Nt=s.rects.reference,Ft=s.rects.popper,Yt=typeof Mt=="function"?Mt(Object.assign({},s.rects,{placement:s.placement})):Mt,$t={x:0,y:0};if(_t){if(L||H){var zt=ct==="y"?U:Z,we=ct==="y"?dt:X,te=ct==="y"?"height":"width",Le=_t[ct],dn=_t[ct]+St[zt],Ze=_t[ct]-St[we],Ne=Dt?-Ft[te]/2:0,$n=Rt===h?Nt[te]:Ft[te],Qe=Rt===h?-Ft[te]:-Nt[te],Sn=s.elements.arrow,Wn=Dt&&Sn?M(Sn):{width:0,height:0},C=s.modifiersData["arrow#persistent"]?s.modifiersData["arrow#persistent"].padding:cr(),K=C[zt],et=C[we],gt=vt(0,Nt[te],Wn[te]),wt=Ht?Nt[te]/2-Ne-gt-K-Yt:$n-gt-K-Yt,Kt=Ht?-Nt[te]/2+Ne+gt+et+Yt:Qe+gt+et+Yt,Jt=s.elements.arrow&&J(s.elements.arrow),Ce=Jt?ct==="y"?Jt.clientTop||0:Jt.clientLeft||0:0,zn=s.modifiersData.offset?s.modifiersData.offset[s.placement][ct]:0,_e=_t[ct]+wt-zn-Ce,An=_t[ct]+Kt-zn;if(L){var pn=vt(Dt?ln(dn,_e):dn,Le,Dt?ge(Ze,An):Ze);_t[ct]=pn,$t[ct]=pn-Le}if(H){var tn=ct==="x"?U:Z,Kr=ct==="x"?dt:X,en=_t[Pt],hn=en+St[tn],_i=en-St[Kr],Ti=vt(Dt?ln(hn,_e):hn,en,Dt?ge(_i,An):_i);_t[Pt]=Ti,$t[Pt]=Ti-en}}s.modifiersData[_]=$t}}var it={name:"preventOverflow",enabled:!0,phase:"main",fn:tt,requiresIfExists:["offset"]},x=function(s,b){return s=typeof s=="function"?s(Object.assign({},b.rects,{placement:b.placement})):s,fr(typeof s!="number"?s:ur(s,l))};function Gt(c){var s,b=c.state,_=c.name,T=c.options,L=b.elements.arrow,z=b.modifiersData.popperOffsets,H=oe(b.placement),G=de(H),ot=[Z,X].indexOf(H)>=0,V=ot?"height":"width";if(!(!L||!z)){var Ct=x(T.padding,b),Lt=M(L),Dt=G==="y"?U:Z,xt=G==="y"?dt:X,Mt=b.rects.reference[V]+b.rects.reference[G]-z[G]-b.rects.popper[V],St=z[G]-b.rects.reference[G],Bt=J(L),Rt=Bt?G==="y"?Bt.clientHeight||0:Bt.clientWidth||0:0,Ht=Mt/2-St/2,ct=Ct[Dt],Pt=Rt-Lt[V]-Ct[xt],_t=Rt/2-Lt[V]/2+Ht,Nt=vt(ct,_t,Pt),Ft=G;b.modifiersData[_]=(s={},s[Ft]=Nt,s.centerOffset=Nt-_t,s)}}function ft(c){var s=c.state,b=c.options,_=b.element,T=_===void 0?"[data-popper-arrow]":_;if(T!=null&&!(typeof T=="string"&&(T=s.elements.popper.querySelector(T),!T))){if(o(T)||console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).',"To use an SVG arrow, wrap it in an HTMLElement that will be used as","the arrow."].join(" ")),!kn(s.elements.popper,T)){console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper',"element."].join(" "));return}s.elements.arrow=T}}var Fe={name:"arrow",enabled:!0,phase:"main",fn:Gt,effect:ft,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function be(c,s,b){return b===void 0&&(b={x:0,y:0}),{top:c.top-s.height-b.y,right:c.right-s.width+b.x,bottom:c.bottom-s.height+b.y,left:c.left-s.width-b.x}}function Ge(c){return[U,X,dt,Z].some(function(s){return c[s]>=0})}function Ke(c){var s=c.state,b=c.name,_=s.rects.reference,T=s.rects.popper,L=s.modifiersData.preventOverflow,z=qe(s,{elementContext:"reference"}),H=qe(s,{altBoundary:!0}),G=be(z,_),ot=be(H,T,L),V=Ge(G),Ct=Ge(ot);s.modifiersData[b]={referenceClippingOffsets:G,popperEscapeOffsets:ot,isReferenceHidden:V,hasPopperEscaped:Ct},s.attributes.popper=Object.assign({},s.attributes.popper,{"data-popper-reference-hidden":V,"data-popper-escaped":Ct})}var Je={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Ke},re=[jn,Bn,y,q],le=En({defaultModifiers:re}),ye=[jn,Bn,y,q,bt,rt,it,Fe,Je],un=En({defaultModifiers:ye});t.applyStyles=q,t.arrow=Fe,t.computeStyles=y,t.createPopper=un,t.createPopperLite=le,t.defaultModifiers=ye,t.detectOverflow=qe,t.eventListeners=jn,t.flip=rt,t.hide=Je,t.offset=bt,t.popperGenerator=En,t.popperOffsets=Bn,t.preventOverflow=it}),Wo=Ho(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=As(),r='',n="tippy-box",i="tippy-content",o="tippy-backdrop",a="tippy-arrow",d="tippy-svg-arrow",f={passive:!0,capture:!0};function u(g,y){return{}.hasOwnProperty.call(g,y)}function w(g,y,D){if(Array.isArray(g)){var F=g[y];return F??(Array.isArray(D)?D[y]:D)}return g}function m(g,y){var D={}.toString.call(g);return D.indexOf("[object")===0&&D.indexOf(y+"]")>-1}function E(g,y){return typeof g=="function"?g.apply(void 0,y):g}function O(g,y){if(y===0)return g;var D;return function(F){clearTimeout(D),D=setTimeout(function(){g(F)},y)}}function S(g,y){var D=Object.assign({},g);return y.forEach(function(F){delete D[F]}),D}function M(g){return g.split(/\s+/).filter(Boolean)}function I(g){return[].concat(g)}function $(g,y){g.indexOf(y)===-1&&g.push(y)}function A(g){return g.filter(function(y,D){return g.indexOf(y)===D})}function k(g){return g.split("-")[0]}function Y(g){return[].slice.call(g)}function nt(g){return Object.keys(g).reduce(function(y,D){return g[D]!==void 0&&(y[D]=g[D]),y},{})}function J(){return document.createElement("div")}function U(g){return["Element","Fragment"].some(function(y){return m(g,y)})}function dt(g){return m(g,"NodeList")}function X(g){return m(g,"MouseEvent")}function Z(g){return!!(g&&g._tippy&&g._tippy.reference===g)}function mt(g){return U(g)?[g]:dt(g)?Y(g):Array.isArray(g)?g:Y(document.querySelectorAll(g))}function l(g,y){g.forEach(function(D){D&&(D.style.transitionDuration=y+"ms")})}function h(g,y){g.forEach(function(D){D&&D.setAttribute("data-state",y)})}function v(g){var y,D=I(g),F=D[0];return!(F==null||(y=F.ownerDocument)==null)&&y.body?F.ownerDocument:document}function p(g,y){var D=y.clientX,F=y.clientY;return g.every(function(q){var W=q.popperRect,B=q.popperState,bt=q.props,lt=bt.interactiveBorder,pt=k(B.placement),yt=B.modifiersData.offset;if(!yt)return!0;var Tt=pt==="bottom"?yt.top.y:0,jt=pt==="top"?yt.bottom.y:0,At=pt==="right"?yt.left.x:0,It=pt==="left"?yt.right.x:0,rt=W.top-F+Tt>lt,ht=F-W.bottom-jt>lt,vt=W.left-D+At>lt,tt=D-W.right-It>lt;return rt||ht||vt||tt})}function j(g,y,D){var F=y+"EventListener";["transitionend","webkitTransitionEnd"].forEach(function(q){g[F](q,D)})}var P={isTouch:!1},R=0;function Q(){P.isTouch||(P.isTouch=!0,window.performance&&document.addEventListener("mousemove",Vt))}function Vt(){var g=performance.now();g-R<20&&(P.isTouch=!1,document.removeEventListener("mousemove",Vt)),R=g}function Re(){var g=document.activeElement;if(Z(g)){var y=g._tippy;g.blur&&!y.state.isVisible&&g.blur()}}function ze(){document.addEventListener("touchstart",Q,f),window.addEventListener("blur",Re)}var Nr=typeof window<"u"&&typeof document<"u",kr=Nr?navigator.userAgent:"",jr=/MSIE |Trident\//.test(kr);function Ue(g){var y=g==="destroy"?"n already-":" ";return[g+"() was called on a"+y+"destroyed instance. This is a no-op but","indicates a potential memory leak."].join(" ")}function nr(g){var y=/[ \t]{2,}/g,D=/^[ \t]*/gm;return g.replace(y," ").replace(D,"").trim()}function Br(g){return nr(` + %ctippy.js + + %c`+nr(g)+` + + %c\u{1F477}\u200D This is a development-only message. It will be removed in production. + `)}function rr(g){return[Br(g),"color: #00C584; font-size: 1.3em; font-weight: bold;","line-height: 1.5","color: #a6a095;"]}var Ie;Hr();function Hr(){Ie=new Set}function me(g,y){if(g&&!Ie.has(y)){var D;Ie.add(y),(D=console).warn.apply(D,rr(y))}}function Ve(g,y){if(g&&!Ie.has(y)){var D;Ie.add(y),(D=console).error.apply(D,rr(y))}}function Ae(g){var y=!g,D=Object.prototype.toString.call(g)==="[object Object]"&&!g.addEventListener;Ve(y,["tippy() was passed","`"+String(g)+"`","as its targets (first) argument. Valid types are: String, Element,","Element[], or NodeList."].join(" ")),Ve(D,["tippy() was passed a plain object which is not supported as an argument","for virtual positioning. Use props.getReferenceClientRect instead."].join(" "))}var De={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},$r={allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999},Qt=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},De,{},$r),Wr=Object.keys(Qt),zr=function(y){ge(y,[]);var D=Object.keys(y);D.forEach(function(F){Qt[F]=y[F]})};function oe(g){var y=g.plugins||[],D=y.reduce(function(F,q){var W=q.name,B=q.defaultValue;return W&&(F[W]=g[W]!==void 0?g[W]:B),F},{});return Object.assign({},g,{},D)}function Ur(g,y){var D=y?Object.keys(oe(Object.assign({},Qt,{plugins:y}))):Wr,F=D.reduce(function(q,W){var B=(g.getAttribute("data-tippy-"+W)||"").trim();if(!B)return q;if(W==="content")q[W]=B;else try{q[W]=JSON.parse(B)}catch{q[W]=B}return q},{});return F}function ir(g,y){var D=Object.assign({},y,{content:E(y.content,[g])},y.ignoreAttributes?{}:Ur(g,y.plugins));return D.aria=Object.assign({},Qt.aria,{},D.aria),D.aria={expanded:D.aria.expanded==="auto"?y.interactive:D.aria.expanded,content:D.aria.content==="auto"?y.interactive?null:"describedby":D.aria.content},D}function ge(g,y){g===void 0&&(g={}),y===void 0&&(y=[]);var D=Object.keys(g);D.forEach(function(F){var q=S(Qt,Object.keys(De)),W=!u(q,F);W&&(W=y.filter(function(B){return B.name===F}).length===0),me(W,["`"+F+"`","is not a valid prop. You may have spelled it incorrectly, or if it's","a plugin, forgot to pass it in an array as props.plugins.",` + +`,`All props: https://atomiks.github.io/tippyjs/v6/all-props/ +`,"Plugins: https://atomiks.github.io/tippyjs/v6/plugins/"].join(" "))})}var ln=function(){return"innerHTML"};function Ye(g,y){g[ln()]=y}function or(g){var y=J();return g===!0?y.className=a:(y.className=d,U(g)?y.appendChild(g):Ye(y,g)),y}function kn(g,y){U(y.content)?(Ye(g,""),g.appendChild(y.content)):typeof y.content!="function"&&(y.allowHTML?Ye(g,y.content):g.textContent=y.content)}function Xe(g){var y=g.firstElementChild,D=Y(y.children);return{box:y,content:D.find(function(F){return F.classList.contains(i)}),arrow:D.find(function(F){return F.classList.contains(a)||F.classList.contains(d)}),backdrop:D.find(function(F){return F.classList.contains(o)})}}function ar(g){var y=J(),D=J();D.className=n,D.setAttribute("data-state","hidden"),D.setAttribute("tabindex","-1");var F=J();F.className=i,F.setAttribute("data-state","hidden"),kn(F,g.props),y.appendChild(D),D.appendChild(F),q(g.props,g.props);function q(W,B){var bt=Xe(y),lt=bt.box,pt=bt.content,yt=bt.arrow;B.theme?lt.setAttribute("data-theme",B.theme):lt.removeAttribute("data-theme"),typeof B.animation=="string"?lt.setAttribute("data-animation",B.animation):lt.removeAttribute("data-animation"),B.inertia?lt.setAttribute("data-inertia",""):lt.removeAttribute("data-inertia"),lt.style.maxWidth=typeof B.maxWidth=="number"?B.maxWidth+"px":B.maxWidth,B.role?lt.setAttribute("role",B.role):lt.removeAttribute("role"),(W.content!==B.content||W.allowHTML!==B.allowHTML)&&kn(pt,g.props),B.arrow?yt?W.arrow!==B.arrow&&(lt.removeChild(yt),lt.appendChild(or(B.arrow))):lt.appendChild(or(B.arrow)):yt&<.removeChild(yt)}return{popper:y,onUpdate:q}}ar.$$tippy=!0;var sr=1,yn=[],wn=[];function cn(g,y){var D=ir(g,Object.assign({},Qt,{},oe(nt(y)))),F,q,W,B=!1,bt=!1,lt=!1,pt=!1,yt,Tt,jt,At=[],It=O(Rt,D.interactiveDebounce),rt,ht=sr++,vt=null,tt=A(D.plugins),it={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},x={id:ht,reference:g,popper:J(),popperInstance:vt,props:D,state:it,plugins:tt,clearDelayTimeouts:Le,setProps:dn,setContent:Ze,show:Ne,hide:$n,hideWithInteractivity:Qe,enable:we,disable:te,unmount:Sn,destroy:Wn};if(!D.render)return Ve(!0,"render() function has not been supplied."),x;var Gt=D.render(x),ft=Gt.popper,Fe=Gt.onUpdate;ft.setAttribute("data-tippy-root",""),ft.id="tippy-"+x.id,x.popper=ft,g._tippy=x,ft._tippy=x;var be=tt.map(function(C){return C.fn(x)}),Ge=g.hasAttribute("aria-expanded");return Mt(),T(),s(),b("onCreate",[x]),D.showOnCreate&&$t(),ft.addEventListener("mouseenter",function(){x.props.interactive&&x.state.isVisible&&x.clearDelayTimeouts()}),ft.addEventListener("mouseleave",function(C){x.props.interactive&&x.props.trigger.indexOf("mouseenter")>=0&&(ye().addEventListener("mousemove",It),It(C))}),x;function Ke(){var C=x.props.touch;return Array.isArray(C)?C:[C,0]}function Je(){return Ke()[0]==="hold"}function re(){var C;return!!((C=x.props.render)!=null&&C.$$tippy)}function le(){return rt||g}function ye(){var C=le().parentNode;return C?v(C):document}function un(){return Xe(ft)}function c(C){return x.state.isMounted&&!x.state.isVisible||P.isTouch||yt&&yt.type==="focus"?0:w(x.props.delay,C?0:1,Qt.delay)}function s(){ft.style.pointerEvents=x.props.interactive&&x.state.isVisible?"":"none",ft.style.zIndex=""+x.props.zIndex}function b(C,K,et){if(et===void 0&&(et=!0),be.forEach(function(wt){wt[C]&&wt[C].apply(void 0,K)}),et){var gt;(gt=x.props)[C].apply(gt,K)}}function _(){var C=x.props.aria;if(C.content){var K="aria-"+C.content,et=ft.id,gt=I(x.props.triggerTarget||g);gt.forEach(function(wt){var Kt=wt.getAttribute(K);if(x.state.isVisible)wt.setAttribute(K,Kt?Kt+" "+et:et);else{var Jt=Kt&&Kt.replace(et,"").trim();Jt?wt.setAttribute(K,Jt):wt.removeAttribute(K)}})}}function T(){if(!(Ge||!x.props.aria.expanded)){var C=I(x.props.triggerTarget||g);C.forEach(function(K){x.props.interactive?K.setAttribute("aria-expanded",x.state.isVisible&&K===le()?"true":"false"):K.removeAttribute("aria-expanded")})}}function L(){ye().removeEventListener("mousemove",It),yn=yn.filter(function(C){return C!==It})}function z(C){if(!(P.isTouch&&(lt||C.type==="mousedown"))&&!(x.props.interactive&&ft.contains(C.target))){if(le().contains(C.target)){if(P.isTouch||x.state.isVisible&&x.props.trigger.indexOf("click")>=0)return}else b("onClickOutside",[x,C]);x.props.hideOnClick===!0&&(x.clearDelayTimeouts(),x.hide(),bt=!0,setTimeout(function(){bt=!1}),x.state.isMounted||V())}}function H(){lt=!0}function G(){lt=!1}function ot(){var C=ye();C.addEventListener("mousedown",z,!0),C.addEventListener("touchend",z,f),C.addEventListener("touchstart",G,f),C.addEventListener("touchmove",H,f)}function V(){var C=ye();C.removeEventListener("mousedown",z,!0),C.removeEventListener("touchend",z,f),C.removeEventListener("touchstart",G,f),C.removeEventListener("touchmove",H,f)}function Ct(C,K){Dt(C,function(){!x.state.isVisible&&ft.parentNode&&ft.parentNode.contains(ft)&&K()})}function Lt(C,K){Dt(C,K)}function Dt(C,K){var et=un().box;function gt(wt){wt.target===et&&(j(et,"remove",gt),K())}if(C===0)return K();j(et,"remove",Tt),j(et,"add",gt),Tt=gt}function xt(C,K,et){et===void 0&&(et=!1);var gt=I(x.props.triggerTarget||g);gt.forEach(function(wt){wt.addEventListener(C,K,et),At.push({node:wt,eventType:C,handler:K,options:et})})}function Mt(){Je()&&(xt("touchstart",Bt,{passive:!0}),xt("touchend",Ht,{passive:!0})),M(x.props.trigger).forEach(function(C){if(C!=="manual")switch(xt(C,Bt),C){case"mouseenter":xt("mouseleave",Ht);break;case"focus":xt(jr?"focusout":"blur",ct);break;case"focusin":xt("focusout",ct);break}})}function St(){At.forEach(function(C){var K=C.node,et=C.eventType,gt=C.handler,wt=C.options;K.removeEventListener(et,gt,wt)}),At=[]}function Bt(C){var K,et=!1;if(!(!x.state.isEnabled||Pt(C)||bt)){var gt=((K=yt)==null?void 0:K.type)==="focus";yt=C,rt=C.currentTarget,T(),!x.state.isVisible&&X(C)&&yn.forEach(function(wt){return wt(C)}),C.type==="click"&&(x.props.trigger.indexOf("mouseenter")<0||B)&&x.props.hideOnClick!==!1&&x.state.isVisible?et=!0:$t(C),C.type==="click"&&(B=!et),et&&!gt&&zt(C)}}function Rt(C){var K=C.target,et=le().contains(K)||ft.contains(K);if(!(C.type==="mousemove"&&et)){var gt=Yt().concat(ft).map(function(wt){var Kt,Jt=wt._tippy,Ce=(Kt=Jt.popperInstance)==null?void 0:Kt.state;return Ce?{popperRect:wt.getBoundingClientRect(),popperState:Ce,props:D}:null}).filter(Boolean);p(gt,C)&&(L(),zt(C))}}function Ht(C){var K=Pt(C)||x.props.trigger.indexOf("click")>=0&&B;if(!K){if(x.props.interactive){x.hideWithInteractivity(C);return}zt(C)}}function ct(C){x.props.trigger.indexOf("focusin")<0&&C.target!==le()||x.props.interactive&&C.relatedTarget&&ft.contains(C.relatedTarget)||zt(C)}function Pt(C){return P.isTouch?Je()!==C.type.indexOf("touch")>=0:!1}function _t(){Nt();var C=x.props,K=C.popperOptions,et=C.placement,gt=C.offset,wt=C.getReferenceClientRect,Kt=C.moveTransition,Jt=re()?Xe(ft).arrow:null,Ce=wt?{getBoundingClientRect:wt,contextElement:wt.contextElement||le()}:g,zn={name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(pn){var tn=pn.state;if(re()){var Kr=un(),en=Kr.box;["placement","reference-hidden","escaped"].forEach(function(hn){hn==="placement"?en.setAttribute("data-placement",tn.placement):tn.attributes.popper["data-popper-"+hn]?en.setAttribute("data-"+hn,""):en.removeAttribute("data-"+hn)}),tn.attributes.popper={}}}},_e=[{name:"offset",options:{offset:gt}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!Kt}},zn];re()&&Jt&&_e.push({name:"arrow",options:{element:Jt,padding:3}}),_e.push.apply(_e,K?.modifiers||[]),x.popperInstance=e.createPopper(Ce,ft,Object.assign({},K,{placement:et,onFirstUpdate:jt,modifiers:_e}))}function Nt(){x.popperInstance&&(x.popperInstance.destroy(),x.popperInstance=null)}function Ft(){var C=x.props.appendTo,K,et=le();x.props.interactive&&C===Qt.appendTo||C==="parent"?K=et.parentNode:K=E(C,[et]),K.contains(ft)||K.appendChild(ft),_t(),me(x.props.interactive&&C===Qt.appendTo&&et.nextElementSibling!==ft,["Interactive tippy element may not be accessible via keyboard","navigation because it is not directly after the reference element","in the DOM source order.",` + +`,"Using a wrapper
or tag around the reference element","solves this by creating a new parentNode context.",` + +`,"Specifying `appendTo: document.body` silences this warning, but it","assumes you are using a focus management solution to handle","keyboard navigation.",` + +`,"See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity"].join(" "))}function Yt(){return Y(ft.querySelectorAll("[data-tippy-root]"))}function $t(C){x.clearDelayTimeouts(),C&&b("onTrigger",[x,C]),ot();var K=c(!0),et=Ke(),gt=et[0],wt=et[1];P.isTouch&>==="hold"&&wt&&(K=wt),K?F=setTimeout(function(){x.show()},K):x.show()}function zt(C){if(x.clearDelayTimeouts(),b("onUntrigger",[x,C]),!x.state.isVisible){V();return}if(!(x.props.trigger.indexOf("mouseenter")>=0&&x.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(C.type)>=0&&B)){var K=c(!1);K?q=setTimeout(function(){x.state.isVisible&&x.hide()},K):W=requestAnimationFrame(function(){x.hide()})}}function we(){x.state.isEnabled=!0}function te(){x.hide(),x.state.isEnabled=!1}function Le(){clearTimeout(F),clearTimeout(q),cancelAnimationFrame(W)}function dn(C){if(me(x.state.isDestroyed,Ue("setProps")),!x.state.isDestroyed){b("onBeforeUpdate",[x,C]),St();var K=x.props,et=ir(g,Object.assign({},x.props,{},C,{ignoreAttributes:!0}));x.props=et,Mt(),K.interactiveDebounce!==et.interactiveDebounce&&(L(),It=O(Rt,et.interactiveDebounce)),K.triggerTarget&&!et.triggerTarget?I(K.triggerTarget).forEach(function(gt){gt.removeAttribute("aria-expanded")}):et.triggerTarget&&g.removeAttribute("aria-expanded"),T(),s(),Fe&&Fe(K,et),x.popperInstance&&(_t(),Yt().forEach(function(gt){requestAnimationFrame(gt._tippy.popperInstance.forceUpdate)})),b("onAfterUpdate",[x,C])}}function Ze(C){x.setProps({content:C})}function Ne(){me(x.state.isDestroyed,Ue("show"));var C=x.state.isVisible,K=x.state.isDestroyed,et=!x.state.isEnabled,gt=P.isTouch&&!x.props.touch,wt=w(x.props.duration,0,Qt.duration);if(!(C||K||et||gt)&&!le().hasAttribute("disabled")&&(b("onShow",[x],!1),x.props.onShow(x)!==!1)){if(x.state.isVisible=!0,re()&&(ft.style.visibility="visible"),s(),ot(),x.state.isMounted||(ft.style.transition="none"),re()){var Kt=un(),Jt=Kt.box,Ce=Kt.content;l([Jt,Ce],0)}jt=function(){var _e;if(!(!x.state.isVisible||pt)){if(pt=!0,ft.offsetHeight,ft.style.transition=x.props.moveTransition,re()&&x.props.animation){var An=un(),pn=An.box,tn=An.content;l([pn,tn],wt),h([pn,tn],"visible")}_(),T(),$(wn,x),(_e=x.popperInstance)==null||_e.forceUpdate(),x.state.isMounted=!0,b("onMount",[x]),x.props.animation&&re()&&Lt(wt,function(){x.state.isShown=!0,b("onShown",[x])})}},Ft()}}function $n(){me(x.state.isDestroyed,Ue("hide"));var C=!x.state.isVisible,K=x.state.isDestroyed,et=!x.state.isEnabled,gt=w(x.props.duration,1,Qt.duration);if(!(C||K||et)&&(b("onHide",[x],!1),x.props.onHide(x)!==!1)){if(x.state.isVisible=!1,x.state.isShown=!1,pt=!1,B=!1,re()&&(ft.style.visibility="hidden"),L(),V(),s(),re()){var wt=un(),Kt=wt.box,Jt=wt.content;x.props.animation&&(l([Kt,Jt],gt),h([Kt,Jt],"hidden"))}_(),T(),x.props.animation?re()&&Ct(gt,x.unmount):x.unmount()}}function Qe(C){me(x.state.isDestroyed,Ue("hideWithInteractivity")),ye().addEventListener("mousemove",It),$(yn,It),It(C)}function Sn(){me(x.state.isDestroyed,Ue("unmount")),x.state.isVisible&&x.hide(),x.state.isMounted&&(Nt(),Yt().forEach(function(C){C._tippy.unmount()}),ft.parentNode&&ft.parentNode.removeChild(ft),wn=wn.filter(function(C){return C!==x}),x.state.isMounted=!1,b("onHidden",[x]))}function Wn(){me(x.state.isDestroyed,Ue("destroy")),!x.state.isDestroyed&&(x.clearDelayTimeouts(),x.unmount(),St(),delete g._tippy,x.state.isDestroyed=!0,b("onDestroy",[x]))}}function de(g,y){y===void 0&&(y={});var D=Qt.plugins.concat(y.plugins||[]);Ae(g),ge(y,D),ze();var F=Object.assign({},y,{plugins:D}),q=mt(g),W=U(F.content),B=q.length>1;me(W&&B,["tippy() was passed an Element as the `content` prop, but more than","one tippy instance was created by this invocation. This means the","content element will only be appended to the last tippy instance.",` + +`,"Instead, pass the .innerHTML of the element, or use a function that","returns a cloned version of the element instead.",` + +`,`1) content: element.innerHTML +`,"2) content: () => element.cloneNode(true)"].join(" "));var bt=q.reduce(function(lt,pt){var yt=pt&&cn(pt,F);return yt&<.push(yt),lt},[]);return U(g)?bt[0]:bt}de.defaultProps=Qt,de.setDefaultProps=zr,de.currentInput=P;var lr=function(y){var D=y===void 0?{}:y,F=D.exclude,q=D.duration;wn.forEach(function(W){var B=!1;if(F&&(B=Z(F)?W.reference===F:W.popper===F.popper),!B){var bt=W.props.duration;W.setProps({duration:q}),W.hide(),W.state.isDestroyed||W.setProps({duration:bt})}})},cr=Object.assign({},e.applyStyles,{effect:function(y){var D=y.state,F={popper:{position:D.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(D.elements.popper.style,F.popper),D.styles=F,D.elements.arrow&&Object.assign(D.elements.arrow.style,F.arrow)}}),fr=function(y,D){var F;D===void 0&&(D={}),Ve(!Array.isArray(y),["The first argument passed to createSingleton() must be an array of","tippy instances. The passed value was",String(y)].join(" "));var q=y,W=[],B,bt=D.overrides,lt=[],pt=!1;function yt(){W=q.map(function(tt){return tt.reference})}function Tt(tt){q.forEach(function(it){tt?it.enable():it.disable()})}function jt(tt){return q.map(function(it){var x=it.setProps;return it.setProps=function(Gt){x(Gt),it.reference===B&&tt.setProps(Gt)},function(){it.setProps=x}})}function At(tt,it){var x=W.indexOf(it);if(it!==B){B=it;var Gt=(bt||[]).concat("content").reduce(function(ft,Fe){return ft[Fe]=q[x].props[Fe],ft},{});tt.setProps(Object.assign({},Gt,{getReferenceClientRect:typeof Gt.getReferenceClientRect=="function"?Gt.getReferenceClientRect:function(){return it.getBoundingClientRect()}}))}}Tt(!1),yt();var It={fn:function(){return{onDestroy:function(){Tt(!0)},onHidden:function(){B=null},onClickOutside:function(x){x.props.showOnCreate&&!pt&&(pt=!0,B=null)},onShow:function(x){x.props.showOnCreate&&!pt&&(pt=!0,At(x,W[0]))},onTrigger:function(x,Gt){At(x,Gt.currentTarget)}}}},rt=de(J(),Object.assign({},S(D,["overrides"]),{plugins:[It].concat(D.plugins||[]),triggerTarget:W,popperOptions:Object.assign({},D.popperOptions,{modifiers:[].concat(((F=D.popperOptions)==null?void 0:F.modifiers)||[],[cr])})})),ht=rt.show;rt.show=function(tt){if(ht(),!B&&tt==null)return At(rt,W[0]);if(!(B&&tt==null)){if(typeof tt=="number")return W[tt]&&At(rt,W[tt]);if(q.includes(tt)){var it=tt.reference;return At(rt,it)}if(W.includes(tt))return At(rt,tt)}},rt.showNext=function(){var tt=W[0];if(!B)return rt.show(0);var it=W.indexOf(B);rt.show(W[it+1]||tt)},rt.showPrevious=function(){var tt=W[W.length-1];if(!B)return rt.show(tt);var it=W.indexOf(B),x=W[it-1]||tt;rt.show(x)};var vt=rt.setProps;return rt.setProps=function(tt){bt=tt.overrides||bt,vt(tt)},rt.setInstances=function(tt){Tt(!0),lt.forEach(function(it){return it()}),q=tt,Tt(!1),yt(),jt(rt),rt.setProps({triggerTarget:W})},lt=jt(rt),rt},ur={mouseover:"mouseenter",focusin:"focus",click:"click"};function qe(g,y){Ve(!(y&&y.target),["You must specity a `target` prop indicating a CSS selector string matching","the target elements that should receive a tippy."].join(" "));var D=[],F=[],q=!1,W=y.target,B=S(y,["target"]),bt=Object.assign({},B,{trigger:"manual",touch:!1}),lt=Object.assign({},B,{showOnCreate:!0}),pt=de(g,bt),yt=I(pt);function Tt(ht){if(!(!ht.target||q)){var vt=ht.target.closest(W);if(vt){var tt=vt.getAttribute("data-tippy-trigger")||y.trigger||Qt.trigger;if(!vt._tippy&&!(ht.type==="touchstart"&&typeof lt.touch=="boolean")&&!(ht.type!=="touchstart"&&tt.indexOf(ur[ht.type])<0)){var it=de(vt,lt);it&&(F=F.concat(it))}}}}function jt(ht,vt,tt,it){it===void 0&&(it=!1),ht.addEventListener(vt,tt,it),D.push({node:ht,eventType:vt,handler:tt,options:it})}function At(ht){var vt=ht.reference;jt(vt,"touchstart",Tt,f),jt(vt,"mouseover",Tt),jt(vt,"focusin",Tt),jt(vt,"click",Tt)}function It(){D.forEach(function(ht){var vt=ht.node,tt=ht.eventType,it=ht.handler,x=ht.options;vt.removeEventListener(tt,it,x)}),D=[]}function rt(ht){var vt=ht.destroy,tt=ht.enable,it=ht.disable;ht.destroy=function(x){x===void 0&&(x=!0),x&&F.forEach(function(Gt){Gt.destroy()}),F=[],It(),vt()},ht.enable=function(){tt(),F.forEach(function(x){return x.enable()}),q=!1},ht.disable=function(){it(),F.forEach(function(x){return x.disable()}),q=!0},At(ht)}return yt.forEach(rt),pt}var dr={name:"animateFill",defaultValue:!1,fn:function(y){var D;if(!((D=y.props.render)!=null&&D.$$tippy))return Ve(y.props.animateFill,"The `animateFill` plugin requires the default render function."),{};var F=Xe(y.popper),q=F.box,W=F.content,B=y.props.animateFill?Vr():null;return{onCreate:function(){B&&(q.insertBefore(B,q.firstElementChild),q.setAttribute("data-animatefill",""),q.style.overflow="hidden",y.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(B){var lt=q.style.transitionDuration,pt=Number(lt.replace("ms",""));W.style.transitionDelay=Math.round(pt/10)+"ms",B.style.transitionDuration=lt,h([B],"visible")}},onShow:function(){B&&(B.style.transitionDuration="0ms")},onHide:function(){B&&h([B],"hidden")}}}};function Vr(){var g=J();return g.className=o,h([g],"hidden"),g}var xn={clientX:0,clientY:0},fn=[];function En(g){var y=g.clientX,D=g.clientY;xn={clientX:y,clientY:D}}function On(g){g.addEventListener("mousemove",En)}function Yr(g){g.removeEventListener("mousemove",En)}var jn={name:"followCursor",defaultValue:!1,fn:function(y){var D=y.reference,F=v(y.props.triggerTarget||D),q=!1,W=!1,B=!0,bt=y.props;function lt(){return y.props.followCursor==="initial"&&y.state.isVisible}function pt(){F.addEventListener("mousemove",jt)}function yt(){F.removeEventListener("mousemove",jt)}function Tt(){q=!0,y.setProps({getReferenceClientRect:null}),q=!1}function jt(rt){var ht=rt.target?D.contains(rt.target):!0,vt=y.props.followCursor,tt=rt.clientX,it=rt.clientY,x=D.getBoundingClientRect(),Gt=tt-x.left,ft=it-x.top;(ht||!y.props.interactive)&&y.setProps({getReferenceClientRect:function(){var be=D.getBoundingClientRect(),Ge=tt,Ke=it;vt==="initial"&&(Ge=be.left+Gt,Ke=be.top+ft);var Je=vt==="horizontal"?be.top:Ke,re=vt==="vertical"?be.right:Ge,le=vt==="horizontal"?be.bottom:Ke,ye=vt==="vertical"?be.left:Ge;return{width:re-ye,height:le-Je,top:Je,right:re,bottom:le,left:ye}}})}function At(){y.props.followCursor&&(fn.push({instance:y,doc:F}),On(F))}function It(){fn=fn.filter(function(rt){return rt.instance!==y}),fn.filter(function(rt){return rt.doc===F}).length===0&&Yr(F)}return{onCreate:At,onDestroy:It,onBeforeUpdate:function(){bt=y.props},onAfterUpdate:function(ht,vt){var tt=vt.followCursor;q||tt!==void 0&&bt.followCursor!==tt&&(It(),tt?(At(),y.state.isMounted&&!W&&!lt()&&pt()):(yt(),Tt()))},onMount:function(){y.props.followCursor&&!W&&(B&&(jt(xn),B=!1),lt()||pt())},onTrigger:function(ht,vt){X(vt)&&(xn={clientX:vt.clientX,clientY:vt.clientY}),W=vt.type==="focus"},onHidden:function(){y.props.followCursor&&(Tt(),yt(),B=!0)}}}};function Xr(g,y){var D;return{popperOptions:Object.assign({},g.popperOptions,{modifiers:[].concat((((D=g.popperOptions)==null?void 0:D.modifiers)||[]).filter(function(F){var q=F.name;return q!==y.name}),[y])})}}var Bn={name:"inlinePositioning",defaultValue:!1,fn:function(y){var D=y.reference;function F(){return!!y.props.inlinePositioning}var q,W=-1,B=!1,bt={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(jt){var At=jt.state;F()&&(q!==At.placement&&y.setProps({getReferenceClientRect:function(){return lt(At.placement)}}),q=At.placement)}};function lt(Tt){return qr(k(Tt),D.getBoundingClientRect(),Y(D.getClientRects()),W)}function pt(Tt){B=!0,y.setProps(Tt),B=!1}function yt(){B||pt(Xr(y.props,bt))}return{onCreate:yt,onAfterUpdate:yt,onTrigger:function(jt,At){if(X(At)){var It=Y(y.reference.getClientRects()),rt=It.find(function(ht){return ht.left-2<=At.clientX&&ht.right+2>=At.clientX&&ht.top-2<=At.clientY&&ht.bottom+2>=At.clientY});W=It.indexOf(rt)}},onUntrigger:function(){W=-1}}}};function qr(g,y,D,F){if(D.length<2||g===null)return y;if(D.length===2&&F>=0&&D[0].left>D[1].right)return D[F]||y;switch(g){case"top":case"bottom":{var q=D[0],W=D[D.length-1],B=g==="top",bt=q.top,lt=W.bottom,pt=B?q.left:W.left,yt=B?q.right:W.right,Tt=yt-pt,jt=lt-bt;return{top:bt,bottom:lt,left:pt,right:yt,width:Tt,height:jt}}case"left":case"right":{var At=Math.min.apply(Math,D.map(function(ft){return ft.left})),It=Math.max.apply(Math,D.map(function(ft){return ft.right})),rt=D.filter(function(ft){return g==="left"?ft.left===At:ft.right===It}),ht=rt[0].top,vt=rt[rt.length-1].bottom,tt=At,it=It,x=it-tt,Gt=vt-ht;return{top:ht,bottom:vt,left:tt,right:it,width:x,height:Gt}}default:return y}}var Gr={name:"sticky",defaultValue:!1,fn:function(y){var D=y.reference,F=y.popper;function q(){return y.popperInstance?y.popperInstance.state.elements.reference:D}function W(pt){return y.props.sticky===!0||y.props.sticky===pt}var B=null,bt=null;function lt(){var pt=W("reference")?q().getBoundingClientRect():null,yt=W("popper")?F.getBoundingClientRect():null;(pt&&Hn(B,pt)||yt&&Hn(bt,yt))&&y.popperInstance&&y.popperInstance.update(),B=pt,bt=yt,y.state.isMounted&&requestAnimationFrame(lt)}return{onMount:function(){y.props.sticky&<()}}}};function Hn(g,y){return g&&y?g.top!==y.top||g.right!==y.right||g.bottom!==y.bottom||g.left!==y.left:!0}de.setDefaultProps({render:ar}),t.animateFill=dr,t.createSingleton=fr,t.default=de,t.delegate=qe,t.followCursor=jn,t.hideAll=lr,t.inlinePositioning=Bn,t.roundArrow=r,t.sticky=Gr}),Ai=$o(Wo()),Ds=$o(Wo()),Cs=t=>{let e={plugins:[]},r=i=>t[t.indexOf(i)+1];if(t.includes("animation")&&(e.animation=r("animation")),t.includes("duration")&&(e.duration=parseInt(r("duration"))),t.includes("delay")){let i=r("delay");e.delay=i.includes("-")?i.split("-").map(o=>parseInt(o)):parseInt(i)}if(t.includes("cursor")){e.plugins.push(Ds.followCursor);let i=r("cursor");["x","initial"].includes(i)?e.followCursor=i==="x"?"horizontal":"initial":e.followCursor=!0}t.includes("on")&&(e.trigger=r("on")),t.includes("arrowless")&&(e.arrow=!1),t.includes("html")&&(e.allowHTML=!0),t.includes("interactive")&&(e.interactive=!0),t.includes("border")&&e.interactive&&(e.interactiveBorder=parseInt(r("border"))),t.includes("debounce")&&e.interactive&&(e.interactiveDebounce=parseInt(r("debounce"))),t.includes("max-width")&&(e.maxWidth=parseInt(r("max-width"))),t.includes("theme")&&(e.theme=r("theme")),t.includes("placement")&&(e.placement=r("placement"));let n={};return t.includes("no-flip")&&(n.modifiers||(n.modifiers=[]),n.modifiers.push({name:"flip",enabled:!1})),e.popperOptions=n,e};function Di(t){t.magic("tooltip",e=>(r,n={})=>{let i=n.timeout;delete n.timeout;let o=(0,Ai.default)(e,{content:r,trigger:"manual",...n});o.show(),setTimeout(()=>{o.hide(),setTimeout(()=>o.destroy(),n.duration||300)},i||2e3)}),t.directive("tooltip",(e,{modifiers:r,expression:n},{evaluateLater:i,effect:o,cleanup:a})=>{let d=r.length>0?Cs(r):{};e.__x_tippy||(e.__x_tippy=(0,Ai.default)(e,d)),a(()=>{e.__x_tippy&&(e.__x_tippy.destroy(),delete e.__x_tippy)});let f=()=>e.__x_tippy.enable(),u=()=>e.__x_tippy.disable(),w=m=>{m?(f(),e.__x_tippy.setContent(m)):u()};if(r.includes("raw"))w(n);else{let m=i(n);o(()=>{m(E=>{typeof E=="object"?(e.__x_tippy.setProps(E),f()):w(E)})})}})}Di.defaultProps=t=>(Ai.default.setDefaultProps(t),Di);var _s=Di,zo=_s;var Lr=()=>{document.querySelectorAll("[ax-load][x-ignore]").forEach(t=>{t.removeAttribute("x-ignore"),t.setAttribute("x-load",t.getAttribute("ax-load")),t.setAttribute("x-load-src",t.getAttribute("ax-load-src"))}),document.querySelectorAll("[ax-load]").forEach(t=>{t.setAttribute("x-load",t.getAttribute("ax-load")),t.setAttribute("x-load-src",t.getAttribute("ax-load-src"))})};document.body?(Lr(),new MutationObserver(Lr).observe(document.body,{childList:!0,subtree:!0})):document.addEventListener("DOMContentLoaded",()=>{Lr(),new MutationObserver(Lr).observe(document.body,{childList:!0,subtree:!0})});document.addEventListener("alpine:init",()=>{window.Alpine.plugin(ao),window.Alpine.plugin(so),window.Alpine.plugin(uo),window.Alpine.plugin(Bo),window.Alpine.plugin(zo)});var Ts=function(t,e,r){function n(w,m){for(let E of w){let O=i(E,m);if(O!==null)return O}}function i(w,m){let E=w.match(/^[\{\[]([^\[\]\{\}]*)[\}\]](.*)/s);if(E===null||E.length!==3)return null;let O=E[1],S=E[2];if(O.includes(",")){let[M,I]=O.split(",",2);if(I==="*"&&m>=M)return S;if(M==="*"&&m<=I)return S;if(m>=M&&m<=I)return S}return O==m?S:null}function o(w){return w.toString().charAt(0).toUpperCase()+w.toString().slice(1)}function a(w,m){if(m.length===0)return w;let E={};for(let[O,S]of Object.entries(m))E[":"+o(O??"")]=o(S??""),E[":"+O.toUpperCase()]=S.toString().toUpperCase(),E[":"+O]=S;return Object.entries(E).forEach(([O,S])=>{w=w.replaceAll(O,S)}),w}function d(w){return w.map(m=>m.replace(/^[\{\[]([^\[\]\{\}]*)[\}\]]/,""))}let f=t.split("|"),u=n(f,e);return u!=null?a(u.trim(),r):(f=d(f),a(f.length>1&&e>1?f[1]:f[0],r))};window.jsMd5=Uo.md5;window.pluralize=Ts;})(); +/*! Bundled license information: + +js-md5/src/md5.js: + (** + * [js-md5]{@link https://github.com/emn178/js-md5} + * + * @namespace md5 + * @version 0.8.3 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2023 + * @license MIT + *) + +sortablejs/modular/sortable.esm.js: + (**! + * Sortable 1.15.6 + * @author RubaXa + * @author owenm + * @license MIT + *) +*/ diff --git a/public/js/filament/tables/components/table.js b/public/js/filament/tables/components/table.js new file mode 100644 index 000000000..ea16d8561 --- /dev/null +++ b/public/js/filament/tables/components/table.js @@ -0,0 +1 @@ +function n(){return{checkboxClickController:null,collapsedGroups:[],isLoading:!1,selectedRecords:[],shouldCheckUniqueSelection:!0,lastCheckedRecord:null,livewireId:null,init:function(){this.livewireId=this.$root.closest("[wire\\:id]").attributes["wire:id"].value,this.$wire.$on("deselectAllTableRecords",()=>this.deselectAllRecords()),this.$watch("selectedRecords",()=>{if(!this.shouldCheckUniqueSelection){this.shouldCheckUniqueSelection=!0;return}this.selectedRecords=[...new Set(this.selectedRecords)],this.shouldCheckUniqueSelection=!1}),this.$nextTick(()=>this.watchForCheckboxClicks()),Livewire.hook("element.init",({component:e})=>{e.id===this.livewireId&&this.watchForCheckboxClicks()})},mountAction:function(e,t=null){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableAction(e,t)},mountBulkAction:function(e){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableBulkAction(e)},toggleSelectRecordsOnPage:function(){let e=this.getRecordsOnPage();if(this.areRecordsSelected(e)){this.deselectRecords(e);return}this.selectRecords(e)},toggleSelectRecordsInGroup:async function(e){if(this.isLoading=!0,this.areRecordsSelected(this.getRecordsInGroupOnPage(e))){this.deselectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e));return}this.selectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e)),this.isLoading=!1},getRecordsInGroupOnPage:function(e){let t=[];for(let s of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])s.dataset.group===e&&t.push(s.value);return t},getRecordsOnPage:function(){let e=[];for(let t of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])e.push(t.value);return e},selectRecords:function(e){for(let t of e)this.isRecordSelected(t)||this.selectedRecords.push(t)},deselectRecords:function(e){for(let t of e){let s=this.selectedRecords.indexOf(t);s!==-1&&this.selectedRecords.splice(s,1)}},selectAllRecords:async function(){this.isLoading=!0,this.selectedRecords=await this.$wire.getAllSelectableTableRecordKeys(),this.isLoading=!1},deselectAllRecords:function(){this.selectedRecords=[]},isRecordSelected:function(e){return this.selectedRecords.includes(e)},areRecordsSelected:function(e){return e.every(t=>this.isRecordSelected(t))},toggleCollapseGroup:function(e){if(this.isGroupCollapsed(e)){this.collapsedGroups.splice(this.collapsedGroups.indexOf(e),1);return}this.collapsedGroups.push(e)},isGroupCollapsed:function(e){return this.collapsedGroups.includes(e)},resetCollapsedGroups:function(){this.collapsedGroups=[]},watchForCheckboxClicks:function(){this.checkboxClickController&&this.checkboxClickController.abort(),this.checkboxClickController=new AbortController;let{signal:e}=this.checkboxClickController;this.$root?.addEventListener("click",t=>t.target?.matches(".fi-ta-record-checkbox")&&this.handleCheckboxClick(t,t.target),{signal:e})},handleCheckboxClick:function(e,t){if(!this.lastChecked){this.lastChecked=t;return}if(e.shiftKey){let s=Array.from(this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[]);if(!s.includes(this.lastChecked)){this.lastChecked=t;return}let o=s.indexOf(this.lastChecked),r=s.indexOf(t),l=[o,r].sort((i,d)=>i-d),c=[];for(let i=l[0];i<=l[1];i++)s[i].checked=t.checked,c.push(s[i].value);t.checked?this.selectRecords(c):this.deselectRecords(c)}this.lastChecked=t}}}export{n as default}; diff --git a/public/js/filament/widgets/components/chart.js b/public/js/filament/widgets/components/chart.js new file mode 100644 index 000000000..4d062d1fd --- /dev/null +++ b/public/js/filament/widgets/components/chart.js @@ -0,0 +1,37 @@ +function Ft(){}var Do=function(){let i=0;return function(){return i++}}();function P(i){return i===null||typeof i>"u"}function B(i){if(Array.isArray&&Array.isArray(i))return!0;let t=Object.prototype.toString.call(i);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function F(i){return i!==null&&Object.prototype.toString.call(i)==="[object Object]"}var q=i=>(typeof i=="number"||i instanceof Number)&&isFinite(+i);function ft(i,t){return q(i)?i:t}function E(i,t){return typeof i>"u"?t:i}var Eo=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100:i/t,En=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100*t:+i;function $(i,t,e){if(i&&typeof i.call=="function")return i.apply(e,t)}function V(i,t,e,s){let n,r,o;if(B(i))if(r=i.length,s)for(n=r-1;n>=0;n--)t.call(e,i[n],n);else for(n=0;ni,x:i=>i.x,y:i=>i.y};function Vt(i,t){return(mo[t]||(mo[t]=Ic(t)))(i)}function Ic(i){let t=Cc(i);return e=>{for(let s of t){if(s==="")break;e=e&&e[s]}return e}}function Cc(i){let t=i.split("."),e=[],s="";for(let n of t)s+=n,s.endsWith("\\")?s=s.slice(0,-1)+".":(e.push(s),s="");return e}function vs(i){return i.charAt(0).toUpperCase()+i.slice(1)}var dt=i=>typeof i<"u",zt=i=>typeof i=="function",In=(i,t)=>{if(i.size!==t.size)return!1;for(let e of i)if(!t.has(e))return!1;return!0};function Co(i){return i.type==="mouseup"||i.type==="click"||i.type==="contextmenu"}var j=Math.PI,H=2*j,Fc=H+j,ks=Number.POSITIVE_INFINITY,Ac=j/180,U=j/2,pi=j/4,go=j*2/3,mt=Math.log10,Mt=Math.sign;function Cn(i){let t=Math.round(i);i=Pe(i,t,i/1e3)?t:i;let e=Math.pow(10,Math.floor(mt(i))),s=i/e;return(s<=1?1:s<=2?2:s<=5?5:10)*e}function Fo(i){let t=[],e=Math.sqrt(i),s;for(s=1;sn-r).pop(),t}function ge(i){return!isNaN(parseFloat(i))&&isFinite(i)}function Pe(i,t,e){return Math.abs(i-t)=i}function Fn(i,t,e){let s,n,r;for(s=0,n=i.length;sl&&c=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function Ds(i,t,e){e=e||(o=>i[o]1;)r=n+s>>1,e(r)?n=r:s=r;return{lo:n,hi:s}}var Ct=(i,t,e,s)=>Ds(i,e,s?n=>i[n][t]<=e:n=>i[n][t]Ds(i,e,s=>i[s][t]>=e);function No(i,t,e){let s=0,n=i.length;for(;ss&&i[n-1]>e;)n--;return s>0||n{let s="_onData"+vs(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...r){let o=n.apply(this,r);return i._chartjs.listeners.forEach(a=>{typeof a[s]=="function"&&a[s](...r)}),o}})})}function Pn(i,t){let e=i._chartjs;if(!e)return;let s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(Ro.forEach(r=>{delete i[r]}),delete i._chartjs)}function Nn(i){let t=new Set,e,s;for(e=0,s=i.length;e"u"?function(i){return i()}:window.requestAnimationFrame}();function Wn(i,t,e){let s=e||(o=>Array.prototype.slice.call(o)),n=!1,r=[];return function(...o){r=s(o),n||(n=!0,Rn.call(window,()=>{n=!1,i.apply(t,r)}))}}function zo(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}var Es=i=>i==="start"?"left":i==="end"?"right":"center",nt=(i,t,e)=>i==="start"?t:i==="end"?e:(t+e)/2,Vo=(i,t,e,s)=>i===(s?"left":"right")?e:i==="center"?(t+e)/2:t;function zn(i,t,e){let s=t.length,n=0,r=s;if(i._sorted){let{iScale:o,_parsed:a}=i,l=o.axis,{min:c,max:h,minDefined:u,maxDefined:d}=o.getUserBounds();u&&(n=tt(Math.min(Ct(a,o.axis,c).lo,e?s:Ct(t,l,o.getPixelForValue(c)).lo),0,s-1)),d?r=tt(Math.max(Ct(a,o.axis,h,!0).hi+1,e?0:Ct(t,l,o.getPixelForValue(h),!0).hi+1),n,s)-n:r=s-n}return{start:n,count:r}}function Vn(i){let{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;let r=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),r}var ys=i=>i===0||i===1,po=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*H/e)),yo=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*H/e)+1,Ie={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*U)+1,easeOutSine:i=>Math.sin(i*U),easeInOutSine:i=>-.5*(Math.cos(j*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>ys(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>ys(i)?i:po(i,.075,.3),easeOutElastic:i=>ys(i)?i:yo(i,.075,.3),easeInOutElastic(i){return ys(i)?i:i<.5?.5*po(i*2,.1125,.45):.5+.5*yo(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-Ie.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?Ie.easeInBounce(i*2)*.5:Ie.easeOutBounce(i*2-1)*.5+.5};function wi(i){return i+.5|0}var Gt=(i,t,e)=>Math.max(Math.min(i,e),t);function yi(i){return Gt(wi(i*2.55),0,255)}function Xt(i){return Gt(wi(i*255),0,255)}function Wt(i){return Gt(wi(i/2.55)/100,0,1)}function bo(i){return Gt(wi(i*100),0,100)}var xt={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},vn=[..."0123456789ABCDEF"],Pc=i=>vn[i&15],Nc=i=>vn[(i&240)>>4]+vn[i&15],bs=i=>(i&240)>>4===(i&15),Rc=i=>bs(i.r)&&bs(i.g)&&bs(i.b)&&bs(i.a);function Wc(i){var t=i.length,e;return i[0]==="#"&&(t===4||t===5?e={r:255&xt[i[1]]*17,g:255&xt[i[2]]*17,b:255&xt[i[3]]*17,a:t===5?xt[i[4]]*17:255}:(t===7||t===9)&&(e={r:xt[i[1]]<<4|xt[i[2]],g:xt[i[3]]<<4|xt[i[4]],b:xt[i[5]]<<4|xt[i[6]],a:t===9?xt[i[7]]<<4|xt[i[8]]:255})),e}var zc=(i,t)=>i<255?t(i):"";function Vc(i){var t=Rc(i)?Pc:Nc;return i?"#"+t(i.r)+t(i.g)+t(i.b)+zc(i.a,t):void 0}var Hc=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Ho(i,t,e){let s=t*Math.min(e,1-e),n=(r,o=(r+i/30)%12)=>e-s*Math.max(Math.min(o-3,9-o,1),-1);return[n(0),n(8),n(4)]}function Bc(i,t,e){let s=(n,r=(n+i/60)%6)=>e-e*t*Math.max(Math.min(r,4-r,1),0);return[s(5),s(3),s(1)]}function $c(i,t,e){let s=Ho(i,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)s[n]*=1-t-e,s[n]+=t;return s}function jc(i,t,e,s,n){return i===n?(t-e)/s+(t.5?h/(2-r-o):h/(r+o),l=jc(e,s,n,h,r),l=l*60+.5),[l|0,c||0,a]}function Bn(i,t,e,s){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,s)).map(Xt)}function $n(i,t,e){return Bn(Ho,i,t,e)}function Uc(i,t,e){return Bn($c,i,t,e)}function Yc(i,t,e){return Bn(Bc,i,t,e)}function Bo(i){return(i%360+360)%360}function Zc(i){let t=Hc.exec(i),e=255,s;if(!t)return;t[5]!==s&&(e=t[6]?yi(+t[5]):Xt(+t[5]));let n=Bo(+t[2]),r=+t[3]/100,o=+t[4]/100;return t[1]==="hwb"?s=Uc(n,r,o):t[1]==="hsv"?s=Yc(n,r,o):s=$n(n,r,o),{r:s[0],g:s[1],b:s[2],a:e}}function qc(i,t){var e=Hn(i);e[0]=Bo(e[0]+t),e=$n(e),i.r=e[0],i.g=e[1],i.b=e[2]}function Gc(i){if(!i)return;let t=Hn(i),e=t[0],s=bo(t[1]),n=bo(t[2]);return i.a<255?`hsla(${e}, ${s}%, ${n}%, ${Wt(i.a)})`:`hsl(${e}, ${s}%, ${n}%)`}var xo={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},_o={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Xc(){let i={},t=Object.keys(_o),e=Object.keys(xo),s,n,r,o,a;for(s=0;s>16&255,r>>8&255,r&255]}return i}var xs;function Kc(i){xs||(xs=Xc(),xs.transparent=[0,0,0,0]);let t=xs[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Jc=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Qc(i){let t=Jc.exec(i),e=255,s,n,r;if(t){if(t[7]!==s){let o=+t[7];e=t[8]?yi(o):Gt(o*255,0,255)}return s=+t[1],n=+t[3],r=+t[5],s=255&(t[2]?yi(s):Gt(s,0,255)),n=255&(t[4]?yi(n):Gt(n,0,255)),r=255&(t[6]?yi(r):Gt(r,0,255)),{r:s,g:n,b:r,a:e}}}function th(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${Wt(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}var Sn=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,Ee=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function eh(i,t,e){let s=Ee(Wt(i.r)),n=Ee(Wt(i.g)),r=Ee(Wt(i.b));return{r:Xt(Sn(s+e*(Ee(Wt(t.r))-s))),g:Xt(Sn(n+e*(Ee(Wt(t.g))-n))),b:Xt(Sn(r+e*(Ee(Wt(t.b))-r))),a:i.a+e*(t.a-i.a)}}function _s(i,t,e){if(i){let s=Hn(i);s[t]=Math.max(0,Math.min(s[t]+s[t]*e,t===0?360:1)),s=$n(s),i.r=s[0],i.g=s[1],i.b=s[2]}}function $o(i,t){return i&&Object.assign(t||{},i)}function wo(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=Xt(i[3]))):(t=$o(i,{r:0,g:0,b:0,a:1}),t.a=Xt(t.a)),t}function ih(i){return i.charAt(0)==="r"?Qc(i):Zc(i)}var On=class i{constructor(t){if(t instanceof i)return t;let e=typeof t,s;e==="object"?s=wo(t):e==="string"&&(s=Wc(t)||Kc(t)||ih(t)),this._rgb=s,this._valid=!!s}get valid(){return this._valid}get rgb(){var t=$o(this._rgb);return t&&(t.a=Wt(t.a)),t}set rgb(t){this._rgb=wo(t)}rgbString(){return this._valid?th(this._rgb):void 0}hexString(){return this._valid?Vc(this._rgb):void 0}hslString(){return this._valid?Gc(this._rgb):void 0}mix(t,e){if(t){let s=this.rgb,n=t.rgb,r,o=e===r?.5:e,a=2*o-1,l=s.a-n.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;r=1-c,s.r=255&c*s.r+r*n.r+.5,s.g=255&c*s.g+r*n.g+.5,s.b=255&c*s.b+r*n.b+.5,s.a=o*s.a+(1-o)*n.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=eh(this._rgb,t._rgb,e)),this}clone(){return new i(this.rgb)}alpha(t){return this._rgb.a=Xt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=wi(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return _s(this._rgb,2,t),this}darken(t){return _s(this._rgb,2,-t),this}saturate(t){return _s(this._rgb,1,t),this}desaturate(t){return _s(this._rgb,1,-t),this}rotate(t){return qc(this._rgb,t),this}};function jo(i){return new On(i)}function Uo(i){if(i&&typeof i=="object"){let t=i.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function jn(i){return Uo(i)?i:jo(i)}function kn(i){return Uo(i)?i:jo(i).saturate(.5).darken(.1).hexString()}var Kt=Object.create(null),Is=Object.create(null);function bi(i,t){if(!t)return i;let e=t.split(".");for(let s=0,n=e.length;se.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,s)=>kn(s.backgroundColor),this.hoverBorderColor=(e,s)=>kn(s.borderColor),this.hoverColor=(e,s)=>kn(s.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return Mn(this,t,e)}get(t){return bi(this,t)}describe(t,e){return Mn(Is,t,e)}override(t,e){return Mn(Kt,t,e)}route(t,e,s,n){let r=bi(this,t),o=bi(this,s),a="_"+e;Object.defineProperties(r,{[a]:{value:r[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[a],c=o[n];return F(l)?Object.assign({},c,l):E(l,c)},set(l){this[a]=l}}})}},A=new Dn({_scriptable:i=>!i.startsWith("on"),_indexable:i=>i!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function sh(i){return!i||P(i.size)||P(i.family)?null:(i.style?i.style+" ":"")+(i.weight?i.weight+" ":"")+i.size+"px "+i.family}function xi(i,t,e,s,n){let r=t[n];return r||(r=t[n]=i.measureText(n).width,e.push(n)),r>s&&(s=r),s}function Yo(i,t,e,s){s=s||{};let n=s.data=s.data||{},r=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},r=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let o=0,a=e.length,l,c,h,u,d;for(l=0;le.length){for(l=0;l0&&i.stroke()}}function Fe(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.xt.top-e&&i.y0&&r.strokeColor!=="",l,c;for(i.save(),i.font=n.string,nh(i,r),l=0;l+i||0;function Fs(i,t){let e={},s=F(t),n=s?Object.keys(t):t,r=F(i)?s?o=>E(i[o],i[t[o]]):o=>i[o]:()=>i;for(let o of n)e[o]=ch(r(o));return e}function Zn(i){return Fs(i,{top:"y",right:"x",bottom:"y",left:"x"})}function te(i){return Fs(i,["topLeft","topRight","bottomLeft","bottomRight"])}function rt(i){let t=Zn(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function Q(i,t){i=i||{},t=t||A.font;let e=E(i.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let s=E(i.style,t.style);s&&!(""+s).match(ah)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");let n={family:E(i.family,t.family),lineHeight:lh(E(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:E(i.weight,t.weight),string:""};return n.string=sh(n),n}function We(i,t,e,s){let n=!0,r,o,a;for(r=0,o=i.length;re&&a===0?0:a+l;return{min:o(s,-Math.abs(r)),max:o(n,r)}}function Ht(i,t){return Object.assign(Object.create(i),t)}function As(i,t=[""],e=i,s,n=()=>i[0]){dt(s)||(s=Jo("_fallback",i));let r={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:i,_rootScopes:e,_fallback:s,_getTarget:n,override:o=>As([o,...i],t,e,s)};return new Proxy(r,{deleteProperty(o,a){return delete o[a],delete o._keys,delete i[0][a],!0},get(o,a){return Xo(o,a,()=>yh(a,t,i,o))},getOwnPropertyDescriptor(o,a){return Reflect.getOwnPropertyDescriptor(o._scopes[0],a)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(o,a){return ko(o).includes(a)},ownKeys(o){return ko(o)},set(o,a,l){let c=o._storage||(o._storage=n());return o[a]=c[a]=l,delete o._keys,!0}})}function me(i,t,e,s){let n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:qn(i,s),setContext:r=>me(i,r,e,s),override:r=>me(i.override(r),t,e,s)};return new Proxy(n,{deleteProperty(r,o){return delete r[o],delete i[o],!0},get(r,o,a){return Xo(r,o,()=>uh(r,o,a))},getOwnPropertyDescriptor(r,o){return r._descriptors.allKeys?Reflect.has(i,o)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,o)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(r,o){return Reflect.has(i,o)},ownKeys(){return Reflect.ownKeys(i)},set(r,o,a){return i[o]=a,delete r[o],!0}})}function qn(i,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:zt(e)?e:()=>e,isIndexable:zt(s)?s:()=>s}}var hh=(i,t)=>i?i+vs(t):t,Gn=(i,t)=>F(t)&&i!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Xo(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t))return i[t];let s=e();return i[t]=s,s}function uh(i,t,e){let{_proxy:s,_context:n,_subProxy:r,_descriptors:o}=i,a=s[t];return zt(a)&&o.isScriptable(t)&&(a=dh(t,a,i,e)),B(a)&&a.length&&(a=fh(t,a,i,o.isIndexable)),Gn(t,a)&&(a=me(a,n,r&&r[t],o)),a}function dh(i,t,e,s){let{_proxy:n,_context:r,_subProxy:o,_stack:a}=e;if(a.has(i))throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+i);return a.add(i),t=t(r,o||s),a.delete(i),Gn(i,t)&&(t=Xn(n._scopes,n,i,t)),t}function fh(i,t,e,s){let{_proxy:n,_context:r,_subProxy:o,_descriptors:a}=e;if(dt(r.index)&&s(i))t=t[r.index%t.length];else if(F(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let u=Xn(c,n,i,h);t.push(me(u,r,o&&o[i],a))}}return t}function Ko(i,t,e){return zt(i)?i(t,e):i}var mh=(i,t)=>i===!0?t:typeof i=="string"?Vt(t,i):void 0;function gh(i,t,e,s,n){for(let r of t){let o=mh(e,r);if(o){i.add(o);let a=Ko(o._fallback,e,n);if(dt(a)&&a!==e&&a!==s)return a}else if(o===!1&&dt(s)&&e!==s)return null}return!1}function Xn(i,t,e,s){let n=t._rootScopes,r=Ko(t._fallback,e,s),o=[...i,...n],a=new Set;a.add(s);let l=So(a,o,e,r||e,s);return l===null||dt(r)&&r!==e&&(l=So(a,o,r,l,s),l===null)?!1:As(Array.from(a),[""],n,r,()=>ph(t,e,s))}function So(i,t,e,s,n){for(;e;)e=gh(i,t,e,s,n);return e}function ph(i,t,e){let s=i._getTarget();t in s||(s[t]={});let n=s[t];return B(n)&&F(e)?e:n}function yh(i,t,e,s){let n;for(let r of t)if(n=Jo(hh(r,i),e),dt(n))return Gn(i,n)?Xn(e,s,i,n):n}function Jo(i,t){for(let e of t){if(!e)continue;let s=e[i];if(dt(s))return s}}function ko(i){let t=i._keys;return t||(t=i._keys=bh(i._scopes)),t}function bh(i){let t=new Set;for(let e of i)for(let s of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(s);return Array.from(t)}function Kn(i,t,e,s){let{iScale:n}=i,{key:r="r"}=this._parsing,o=new Array(s),a,l,c,h;for(a=0,l=s;ati==="x"?"y":"x";function _h(i,t,e,s){let n=i.skip?t:i,r=t,o=e.skip?t:e,a=Ms(r,n),l=Ms(o,r),c=a/(a+l),h=l/(a+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let u=s*c,d=s*h;return{previous:{x:r.x-u*(o.x-n.x),y:r.y-u*(o.y-n.y)},next:{x:r.x+d*(o.x-n.x),y:r.y+d*(o.y-n.y)}}}function wh(i,t,e){let s=i.length,n,r,o,a,l,c=Ae(i,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")kh(i,n);else{let c=s?i[i.length-1]:i[0];for(r=0,o=i.length;rwindow.getComputedStyle(i,null);function Th(i,t){return Ps(i).getPropertyValue(t)}var vh=["top","right","bottom","left"];function fe(i,t,e){let s={};e=e?"-"+e:"";for(let n=0;n<4;n++){let r=vh[n];s[r]=parseFloat(i[t+"-"+r+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}var Oh=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function Dh(i,t){let e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:r}=s,o=!1,a,l;if(Oh(n,r,i.target))a=n,l=r;else{let c=t.getBoundingClientRect();a=s.clientX-c.left,l=s.clientY-c.top,o=!0}return{x:a,y:l,box:o}}function ee(i,t){if("native"in i)return i;let{canvas:e,currentDevicePixelRatio:s}=t,n=Ps(e),r=n.boxSizing==="border-box",o=fe(n,"padding"),a=fe(n,"border","width"),{x:l,y:c,box:h}=Dh(i,e),u=o.left+(h&&a.left),d=o.top+(h&&a.top),{width:f,height:m}=t;return r&&(f-=o.width+a.width,m-=o.height+a.height),{x:Math.round((l-u)/f*e.width/s),y:Math.round((c-d)/m*e.height/s)}}function Eh(i,t,e){let s,n;if(t===void 0||e===void 0){let r=Ls(i);if(!r)t=i.clientWidth,e=i.clientHeight;else{let o=r.getBoundingClientRect(),a=Ps(r),l=fe(a,"border","width"),c=fe(a,"padding");t=o.width-c.width-l.width,e=o.height-c.height-l.height,s=Ts(a.maxWidth,r,"clientWidth"),n=Ts(a.maxHeight,r,"clientHeight")}}return{width:t,height:e,maxWidth:s||ks,maxHeight:n||ks}}var Tn=i=>Math.round(i*10)/10;function ea(i,t,e,s){let n=Ps(i),r=fe(n,"margin"),o=Ts(n.maxWidth,i,"clientWidth")||ks,a=Ts(n.maxHeight,i,"clientHeight")||ks,l=Eh(i,t,e),{width:c,height:h}=l;if(n.boxSizing==="content-box"){let u=fe(n,"border","width"),d=fe(n,"padding");c-=d.width+u.width,h-=d.height+u.height}return c=Math.max(0,c-r.width),h=Math.max(0,s?Math.floor(c/s):h-r.height),c=Tn(Math.min(c,o,l.maxWidth)),h=Tn(Math.min(h,a,l.maxHeight)),c&&!h&&(h=Tn(c/2)),{width:c,height:h}}function Qn(i,t,e){let s=t||1,n=Math.floor(i.height*s),r=Math.floor(i.width*s);i.height=n/s,i.width=r/s;let o=i.canvas;return o.style&&(e||!o.style.height&&!o.style.width)&&(o.style.height=`${i.height}px`,o.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||o.height!==n||o.width!==r?(i.currentDevicePixelRatio=s,o.height=n,o.width=r,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}var ia=function(){let i=!1;try{let t={get passive(){return i=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return i}();function tr(i,t){let e=Th(i,t),s=e&&e.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function qt(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function sa(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s==="middle"?e<.5?i.y:t.y:s==="after"?e<1?i.y:t.y:e>0?t.y:i.y}}function na(i,t,e,s){let n={x:i.cp2x,y:i.cp2y},r={x:t.cp1x,y:t.cp1y},o=qt(i,n,e),a=qt(n,r,e),l=qt(r,t,e),c=qt(o,a,e),h=qt(a,l,e);return qt(c,h,e)}var Mo=new Map;function Ih(i,t){t=t||{};let e=i+JSON.stringify(t),s=Mo.get(e);return s||(s=new Intl.NumberFormat(i,t),Mo.set(e,s)),s}function ze(i,t,e){return Ih(t,e).format(i)}var Ch=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},Fh=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function pe(i,t,e){return i?Ch(t,e):Fh()}function er(i,t){let e,s;(t==="ltr"||t==="rtl")&&(e=i.canvas.style,s=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),i.prevTextDirection=s)}function ir(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty("direction",t[0],t[1]))}function ra(i){return i==="angle"?{between:Ne,compare:Lc,normalize:ct}:{between:At,compare:(t,e)=>t-e,normalize:t=>t}}function To({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function Ah(i,t,e){let{property:s,start:n,end:r}=e,{between:o,normalize:a}=ra(s),l=t.length,{start:c,end:h,loop:u}=i,d,f;if(u){for(c+=l,h+=l,d=0,f=l;dl(n,_,y)&&a(n,_)!==0,x=()=>a(r,y)===0||l(r,_,y),S=()=>g||w(),k=()=>!g||x();for(let v=h,T=h;v<=u;++v)b=t[v%o],!b.skip&&(y=c(b[s]),y!==_&&(g=l(y,n,r),p===null&&S()&&(p=a(y,n)===0?v:T),p!==null&&k()&&(m.push(To({start:p,end:v,loop:d,count:o,style:f})),p=null),T=v,_=y));return p!==null&&m.push(To({start:p,end:u,loop:d,count:o,style:f})),m}function nr(i,t){let e=[],s=i.segments;for(let n=0;nn&&i[r%t].skip;)r--;return r%=t,{start:n,end:r}}function Ph(i,t,e,s){let n=i.length,r=[],o=t,a=i[t],l;for(l=t+1;l<=e;++l){let c=i[l%n];c.skip||c.stop?a.skip||(s=!1,r.push({start:t%n,end:(l-1)%n,loop:s}),t=o=c.stop?l:null):(o=l,a.skip&&(t=l)),a=c}return o!==null&&r.push({start:t%n,end:o%n,loop:s}),r}function oa(i,t){let e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];let r=!!i._loop,{start:o,end:a}=Lh(e,n,r,s);if(s===!0)return vo(i,[{start:o,end:a,loop:r}],e,t);let l=aa({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(s-e.start,o)}))}_refresh(){this._request||(this._running=!0,this._request=Rn.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;let r=s.items,o=r.length-1,a=!1,l;for(;o>=0;--o)l=r[o],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),a=!0):(r[o]=r[r.length-1],r.pop());a&&(n.draw(),this._notify(n,s,t,"progress")),r.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=r.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let s=e.items,n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},Bt=new mr,aa="transparent",Wh={boolean(i,t,e){return e>.5?t:i},color(i,t,e){let s=jn(i||aa),n=s.valid&&jn(t||aa);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}},gr=class{constructor(t,e,s,n){let r=e[s];n=We([t.to,n,r,t.from]);let o=We([t.from,r,n]);this._active=!0,this._fn=t.fn||Wh[t.type||typeof o],this._easing=Ie[t.easing]||Ie.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=o,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);let n=this._target[this._prop],r=s-this._start,o=this._duration-r;this._start=s,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=r,this._loop=!!t.loop,this._to=We([t.to,e,n,t.from]),this._from=We([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,s=this._duration,n=this._prop,r=this._from,o=this._loop,a=this._to,l;if(this._active=r!==a&&(o||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(r,a,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){let e=t?"res":"rej",s=this._promises||[];for(let n=0;ni!=="onProgress"&&i!=="onComplete"&&i!=="fn"});A.set("animations",{colors:{type:"color",properties:Vh},numbers:{type:"number",properties:zh}});A.describe("animations",{_fallback:"animation"});A.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:i=>i|0}}}});var $s=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!F(t))return;let e=this._properties;Object.getOwnPropertyNames(t).forEach(s=>{let n=t[s];if(!F(n))return;let r={};for(let o of Hh)r[o]=n[o];(B(n.properties)&&n.properties||[s]).forEach(o=>{(o===s||!e.has(o))&&e.set(o,r)})})}_animateOptions(t,e){let s=e.options,n=$h(t,s);if(!n)return[];let r=this._createAnimations(n,s);return s.$shared&&Bh(t.options.$animations,s).then(()=>{t.options=s},()=>{}),r}_createAnimations(t,e){let s=this._properties,n=[],r=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now(),l;for(l=o.length-1;l>=0;--l){let c=o[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}let h=e[c],u=r[c],d=s.get(c);if(u)if(d&&u.active()){u.update(d,h,a);continue}else u.cancel();if(!d||!d.duration){t[c]=h;continue}r[c]=u=new gr(d,t,c,h),n.push(u)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let s=this._createAnimations(t,e);if(s.length)return Bt.add(this._chart,s),!0}};function Bh(i,t){let e=[],s=Object.keys(t);for(let n=0;n0||!e&&r<0)return n.index}return null}function da(i,t){let{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:r,vScale:o,index:a}=s,l=r.axis,c=o.axis,h=Zh(r,o,s),u=t.length,d;for(let f=0;fe[s].axis===t).shift()}function Xh(i,t){return Ht(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Kh(i,t,e){return Ht(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Mi(i,t){let e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(let n of t){let r=n._stacks;if(!r||r[s]===void 0||r[s][e]===void 0)return;delete r[s][e]}}}var or=i=>i==="reset"||i==="none",fa=(i,t)=>t?i:Object.assign({},i),Jh=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:Ja(e,!0),values:null},gt=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ha(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Mi(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(u,d,f,m)=>u==="x"?d:u==="r"?m:f,r=e.xAxisID=E(s.xAxisID,rr(t,"x")),o=e.yAxisID=E(s.yAxisID,rr(t,"y")),a=e.rAxisID=E(s.rAxisID,rr(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,r,o,a),h=e.vAxisID=n(l,o,r,a);e.xScale=this.getScaleForId(r),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){let t=this._cachedMeta;this._data&&Pn(this._data,this),t._stacked&&Mi(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(F(e))this._data=Yh(e);else if(s!==e){if(s){Pn(s,this);let n=this._cachedMeta;Mi(n),n._parsed=[]}e&&Object.isExtensible(e)&&Wo(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,s=this.getDataset(),n=!1;this._dataCheck();let r=e._stacked;e._stacked=ha(e.vScale,e),e.stack!==s.stack&&(n=!0,Mi(e),e.stack=s.stack),this._resyncElements(t),(n||r!==e._stacked)&&da(this,e._parsed)}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:s,_data:n}=this,{iScale:r,_stacked:o}=s,a=r.axis,l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,u,d;if(this._parsing===!1)s._parsed=n,s._sorted=!0,d=n;else{B(n[t])?d=this.parseArrayData(s,n,t,e):F(n[t])?d=this.parseObjectData(s,n,t,e):d=this.parsePrimitiveData(s,n,t,e);let f=()=>u[a]===null||c&&u[a]g||u=0;--d)if(!m()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,s=[],n,r,o;for(n=0,r=e.length;n=0&&tthis.getContext(s,n),g=c.resolveNamedOptions(d,f,m,u);return g.$shared&&(g.$shared=l,r[o]=Object.freeze(fa(g,l))),g}_resolveAnimations(t,e,s){let n=this.chart,r=this._cachedDataOpts,o=`animation-${e}`,a=r[o];if(a)return a;let l;if(n.options.animation!==!1){let h=this.chart.config,u=h.datasetAnimationScopeKeys(this._type,e),d=h.getOptionScopes(this.getDataset(),u);l=h.createResolver(d,this.getContext(t,s,e))}let c=new $s(n,l&&l.animations);return l&&l._cacheable&&(r[o]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||or(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,r=this.getSharedOptions(s),o=this.includeOptions(e,r)||r!==n;return this.updateSharedOptions(r,e,s),{sharedOptions:r,includeOptions:o}}updateElement(t,e,s,n){or(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!or(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;let r=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(r)||r})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){let e=this._data,s=this._cachedMeta.data;for(let[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];let n=s.length,r=e.length,o=Math.min(r,n);o&&this.parse(0,o),r>n?this._insertElements(n,r-n,t):r{for(c.length+=e,a=c.length-1;a>=o;a--)c[a]=c[a-e]};for(l(r),a=t;an-r))}return i._cache.$bar}function tu(i){let t=i.iScale,e=Qh(t,i.type),s=t._length,n,r,o,a,l=()=>{o===32767||o===-32768||(dt(a)&&(s=Math.min(s,Math.abs(o-a)||s)),a=o)};for(n=0,r=e.length;n0?n[i-1]:null,a=iMath.abs(a)&&(l=a,c=o),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:r,min:o,max:a}}function Qa(i,t,e,s){return B(i)?su(i,t,e,s):t[e.axis]=e.parse(i,s),t}function ma(i,t,e,s){let n=i.iScale,r=i.vScale,o=n.getLabels(),a=n===r,l=[],c,h,u,d;for(c=e,h=e+s;c=e?1:-1)}function ru(i){let t,e,s,n,r;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.basel.controller.options.grouped),r=s.options.stacked,o=[],a=l=>{let c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(P(h)||isNaN(h))return!0};for(let l of n)if(!(e!==void 0&&a(l))&&((r===!1||o.indexOf(l.stack)===-1||r===void 0&&l.stack===void 0)&&o.push(l.stack),l.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,s){let n=this._getStacks(t,s),r=e!==void 0?n.indexOf(e):-1;return r===-1?n.length-1:r}_getRuler(){let t=this.options,e=this._cachedMeta,s=e.iScale,n=[],r,o;for(r=0,o=e.data.length;r=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,{xScale:s,yScale:n}=e,r=this.getParsed(t),o=s.getLabelForValue(r.x),a=n.getLabelForValue(r.y),l=r._custom;return{label:e.label,value:"("+o+", "+a+(l?", "+l:"")+")"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){let r=n==="reset",{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=o.axis,u=a.axis;for(let d=e;dNe(_,a,l,!0)?1:Math.max(w,w*e,x,x*e),m=(_,w,x)=>Ne(_,a,l,!0)?-1:Math.min(w,w*e,x,x*e),g=f(0,c,u),p=f(U,h,d),y=m(j,c,u),b=m(j+U,h,d);s=(g-y)/2,n=(p-b)/2,r=-(g+y)/2,o=-(p+b)/2}return{ratioX:s,ratioY:n,offsetX:r,offsetY:o}}var ne=class extends gt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let r=l=>+s[l];if(F(s[t])){let{key:l="value"}=this._parsing;r=c=>+Vt(s[c],l)}let o,a;for(o=t,a=t+e;o0&&!isNaN(t)?H*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],r=ze(e._parsed[t],s.options.locale);return{label:n[t]||"",value:r}}getMaxBorderWidth(t){let e=0,s=this.chart,n,r,o,a,l;if(!t){for(n=0,r=s.data.datasets.length;ni!=="spacing",_indexable:i=>i!=="spacing"};ne.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){let t=i.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{let o=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){let t=i.label,e=": "+i.formattedValue;return B(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};var je=class extends gt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:s,data:n=[],_dataset:r}=e,o=this.chart._animationsDisabled,{start:a,count:l}=zn(e,n,o);this._drawStart=a,this._drawCount=l,Vn(e)&&(a=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!r._decimated,s.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!o,options:c},t),this.updateElements(n,a,l,t)}updateElements(t,e,s,n){let r=n==="reset",{iScale:o,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:u}=this._getSharedOptions(e,n),d=o.axis,f=a.axis,{spanGaps:m,segment:g}=this.options,p=ge(m)?m:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||r||n==="none",b=e>0&&this.getParsed(e-1);for(let _=e;_0&&Math.abs(x[d]-b[d])>p,g&&(S.parsed=x,S.raw=c.data[_]),u&&(S.options=h||this.resolveDataElementOptions(_,w.active?"active":n)),y||this.updateElement(w,_,S,n),b=x}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;let r=n[0].size(this.resolveDataElementOptions(0)),o=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,r,o)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};je.id="line";je.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};je.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var Ue=class extends gt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],r=ze(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:r}}parseObjectData(t,e,s,n){return Kn.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(re.max&&(e.max=r))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),r=Math.max(n/2,0),o=Math.max(s.cutoutPercentage?r/100*s.cutoutPercentage:1,0),a=(r-o)/t.getVisibleDatasetCount();this.outerRadius=r-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,s,n){let r=n==="reset",o=this.chart,l=o.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,u=c.yCenter,d=c.getIndexAngle(0)-.5*j,f=d,m,g=360/this.countVisibleElements();for(m=0;m{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?_t(this.resolveDataElementOptions(t,e).angle||s):0}};Ue.id="polarArea";Ue.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};Ue.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){let t=i.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{let o=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){return i.chart.data.labels[i.dataIndex]+": "+i.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};var Ci=class extends ne{};Ci.id="pie";Ci.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};var Ye=class extends gt{getLabelAndValue(t){let e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return Kn.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta,s=e.dataset,n=e.data||[],r=e.iScale.getLabels();if(s.points=n,t!=="resize"){let o=this.resolveDatasetElementOptions(t);this.options.showLine||(o.borderWidth=0);let a={_loop:!0,_fullLoop:r.length===n.length,options:o};this.updateElement(s,void 0,a,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){let r=this._cachedMeta.rScale,o=n==="reset";for(let a=e;a{n[r]=s[r]&&s[r].active()?s[r]._to:this[r]}),n}};pt.defaults={};pt.defaultRoutes=void 0;var tl={values(i){return B(i)?i:""+i},numeric(i,t,e){if(i===0)return"0";let s=this.chart.options.locale,n,r=i;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),r=hu(i,e)}let o=mt(Math.abs(r)),a=Math.max(Math.min(-1*Math.floor(o),20),0),l={notation:n,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),ze(i,s,l)},logarithmic(i,t,e){if(i===0)return"0";let s=i/Math.pow(10,Math.floor(mt(i)));return s===1||s===2||s===5?tl.numeric.call(this,i,t,e):""}};function hu(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var Gs={formatters:tl};A.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(i,t)=>t.lineWidth,tickColor:(i,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Gs.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});A.route("scale.ticks","color","","color");A.route("scale.grid","color","","borderColor");A.route("scale.grid","borderColor","","borderColor");A.route("scale.title","color","","color");A.describe("scale",{_fallback:!1,_scriptable:i=>!i.startsWith("before")&&!i.startsWith("after")&&i!=="callback"&&i!=="parser",_indexable:i=>i!=="borderDash"&&i!=="tickBorderDash"});A.describe("scales",{_fallback:"scale"});A.describe("scale.ticks",{_scriptable:i=>i!=="backdropPadding"&&i!=="callback",_indexable:i=>i!=="backdropPadding"});function uu(i,t){let e=i.options.ticks,s=e.maxTicksLimit||du(i),n=e.major.enabled?mu(t):[],r=n.length,o=n[0],a=n[r-1],l=[];if(r>s)return gu(t,l,n,r/s),l;let c=fu(n,t,s);if(r>0){let h,u,d=r>1?Math.round((a-o)/(r-1)):null;for(Ns(t,l,c,P(d)?0:o-d,o),h=0,u=r-1;hn)return l}return Math.max(n,1)}function mu(i){let t=[],e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,ya=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e;function ba(i,t){let e=[],s=i.length/t,n=i.length,r=0;for(;ro+a)))return l}function xu(i,t){V(i,e=>{let s=e.gc,n=s.length/2,r;if(n>t){for(r=0;rs?s:e,s=n&&e>s?e:s,{min:ft(e,ft(s,e)),max:ft(s,ft(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){$(this.options.beforeUpdate,[this])}update(t,e,s){let{beginAtZero:n,grace:r,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Go(this,r,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=a=r||s<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),u=h.widest.width,d=h.highest.height,f=tt(this.chart.width-u,0,this.maxWidth);a=t.offset?this.maxWidth/s:f/(s-1),u+6>a&&(a=f/(s-(t.offset?.5:1)),l=this.maxHeight-Ti(t.grid)-e.padding-xa(t.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),o=Os(Math.min(Math.asin(tt((h.highest.height+6)/a,-1,1)),Math.asin(tt(l/c,-1,1))-Math.asin(tt(d/c,-1,1)))),o=Math.max(n,Math.min(r,o))),this.labelRotation=o}afterCalculateLabelRotation(){$(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){$(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:r}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){let l=xa(n,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ti(r)+l):(t.height=this.maxHeight,t.width=Ti(r)+l),s.display&&this.ticks.length){let{first:c,last:h,widest:u,highest:d}=this._getLabelSizes(),f=s.padding*2,m=_t(this.labelRotation),g=Math.cos(m),p=Math.sin(m);if(a){let y=s.mirror?0:p*u.width+g*d.height;t.height=Math.min(this.maxHeight,t.height+y+f)}else{let y=s.mirror?0:g*u.width+p*d.height;t.width=Math.min(this.maxWidth,t.width+y+f)}this._calculatePadding(c,h,p,g)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){let{ticks:{align:r,padding:o},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,u=this.right-this.getPixelForTick(this.ticks.length-1),d=0,f=0;l?c?(d=n*t.width,f=s*e.height):(d=s*t.height,f=n*e.width):r==="start"?f=e.width:r==="end"?d=t.width:r!=="inner"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-h+o)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-u+o)*this.width/(this.width-u),0)}else{let h=e.height/2,u=t.height/2;r==="start"?(h=0,u=t.height):r==="end"&&(h=e.height,u=0),this.paddingTop=h+o,this.paddingBottom=u+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){$(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:r[k]||0,height:o[k]||0});return{first:S(0),last:S(e-1),widest:S(w),highest:S(x),widths:r,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Lo(this._alignToPixels?Jt(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&ta*n?a/s:l/n:l*n0}_computeGridLineItems(t){let e=this.axis,s=this.chart,n=this.options,{grid:r,position:o}=n,a=r.offset,l=this.isHorizontal(),h=this.ticks.length+(a?1:0),u=Ti(r),d=[],f=r.setContext(this.getContext()),m=f.drawBorder?f.borderWidth:0,g=m/2,p=function(D){return Jt(s,D,m)},y,b,_,w,x,S,k,v,T,C,N,L;if(o==="top")y=p(this.bottom),S=this.bottom-u,v=y-g,C=p(t.top)+g,L=t.bottom;else if(o==="bottom")y=p(this.top),C=t.top,L=p(t.bottom)-g,S=y+g,v=this.top+u;else if(o==="left")y=p(this.right),x=this.right-u,k=y-g,T=p(t.left)+g,N=t.right;else if(o==="right")y=p(this.left),T=t.left,N=p(t.right)-g,x=y+g,k=this.left+u;else if(e==="x"){if(o==="center")y=p((t.top+t.bottom)/2+.5);else if(F(o)){let D=Object.keys(o)[0],J=o[D];y=p(this.chart.scales[D].getPixelForValue(J))}C=t.top,L=t.bottom,S=y+g,v=S+u}else if(e==="y"){if(o==="center")y=p((t.left+t.right)/2);else if(F(o)){let D=Object.keys(o)[0],J=o[D];y=p(this.chart.scales[D].getPixelForValue(J))}x=y-g,k=x-u,T=t.left,N=t.right}let K=E(n.ticks.maxTicksLimit,h),lt=Math.max(1,Math.ceil(h/K));for(b=0;br.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),r,o,a=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(r=0,o=n.length;r{this.draw(n)}}]:[{z:s,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:s+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[],r,o;for(r=0,o=e.length;r{let s=e.split("."),n=s.pop(),r=[i].concat(s).join("."),o=t[e].split("."),a=o.pop(),l=o.join(".");A.route(r,n,l,a)})}function vu(i){return"id"in i&&"defaults"in i}var pr=class{constructor(){this.controllers=new He(gt,"datasets",!0),this.elements=new He(pt,"elements"),this.plugins=new He(Object,"plugins"),this.scales=new He(be,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{let r=s||this._getRegistryForType(n);s||r.isForType(n)||r===this.plugins&&n.id?this._exec(t,r,n):V(n,o=>{let a=s||this._getRegistryForType(o);this._exec(t,a,o)})})}_exec(t,e,s){let n=vs(t);$(s["before"+n],[],s),e[t](s),$(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let w=e;w0&&Math.abs(S[f]-_[f])>y,p&&(k.parsed=S,k.raw=c.data[w]),d&&(k.options=u||this.resolveDataElementOptions(w,x.active?"active":n)),b||this.updateElement(x,w,k,n),_=S}this.updateSharedOptions(u,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let a=0;for(let l=e.length-1;l>=0;--l)a=Math.max(a,e[l].size(this.resolveDataElementOptions(l))/2);return a>0&&a}let s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;let r=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,r,o)/2}};Ze.id="scatter";Ze.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};Ze.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(i){return"("+i.label+", "+i.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Ou=Object.freeze({__proto__:null,BarController:Be,BubbleController:$e,DoughnutController:ne,LineController:je,PolarAreaController:Ue,PieController:Ci,RadarController:Ye,ScatterController:Ze});function ye(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var Fi=class{constructor(t){this.options=t||{}}init(t){}formats(){return ye()}parse(t,e){return ye()}format(t,e){return ye()}add(t,e,s){return ye()}diff(t,e,s){return ye()}startOf(t,e,s){return ye()}endOf(t,e){return ye()}};Fi.override=function(i){Object.assign(Fi.prototype,i)};var Or={_date:Fi};function Du(i,t,e,s){let{controller:n,data:r,_sorted:o}=i,a=n._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&o&&r.length){let l=a._reversePixels?Po:Ct;if(s){if(n._sharedOptions){let c=r[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){let u=l(r,t,e-h),d=l(r,t,e+h);return{lo:u.lo,hi:d.hi}}}}else return l(r,t,e)}return{lo:0,hi:r.length-1}}function zi(i,t,e,s,n){let r=i.getSortedVisibleDatasetMetas(),o=e[t];for(let a=0,l=r.length;a{l[o](t[e],n)&&(r.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,n))}),s&&!a?[]:r}var Fu={evaluateInteractionItems:zi,modes:{index(i,t,e,s){let n=ee(t,i),r=e.axis||"x",o=e.includeInvisible||!1,a=e.intersect?lr(i,n,r,s,o):cr(i,n,r,!1,s,o),l=[];return a.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{let h=a[0].index,u=c.data[h];u&&!u.skip&&l.push({element:u,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){let n=ee(t,i),r=e.axis||"xy",o=e.includeInvisible||!1,a=e.intersect?lr(i,n,r,s,o):cr(i,n,r,!1,s,o);if(a.length>0){let l=a[0].datasetIndex,c=i.getDatasetMeta(l).data;a=[];for(let h=0;he.pos===t)}function wa(i,t){return i.filter(e=>el.indexOf(e.pos)===-1&&e.box.axis===t)}function Oi(i,t){return i.sort((e,s)=>{let n=t?s:e,r=t?e:s;return n.weight===r.weight?n.index-r.index:n.weight-r.weight})}function Au(i){let t=[],e,s,n,r,o,a;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=Oi(vi(t,"left"),!0),n=Oi(vi(t,"right")),r=Oi(vi(t,"top"),!0),o=Oi(vi(t,"bottom")),a=wa(t,"x"),l=wa(t,"y");return{fullSize:e,leftAndTop:s.concat(r),rightAndBottom:n.concat(l).concat(o).concat(a),chartArea:vi(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:r.concat(o).concat(a)}}function Sa(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function il(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function Ru(i,t,e,s){let{pos:n,box:r}=e,o=i.maxPadding;if(!F(n)){e.size&&(i[n]-=e.size);let u=s[e.stack]||{size:0,count:1};u.size=Math.max(u.size,e.horizontal?r.height:r.width),e.size=u.size/u.count,i[n]+=e.size}r.getPadding&&il(o,r.getPadding());let a=Math.max(0,t.outerWidth-Sa(o,i,"left","right")),l=Math.max(0,t.outerHeight-Sa(o,i,"top","bottom")),c=a!==i.w,h=l!==i.h;return i.w=a,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Wu(i){let t=i.maxPadding;function e(s){let n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function zu(i,t){let e=t.maxPadding;function s(n){let r={left:0,top:0,right:0,bottom:0};return n.forEach(o=>{r[o]=Math.max(t[o],e[o])}),r}return s(i?["left","right"]:["top","bottom"])}function Ei(i,t,e,s){let n=[],r,o,a,l,c,h;for(r=0,o=i.length,c=0;r{typeof g.beforeLayout=="function"&&g.beforeLayout()});let h=l.reduce((g,p)=>p.box.options&&p.box.options.display===!1?g:g+1,0)||1,u=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:r,availableHeight:o,vBoxMaxWidth:r/2/h,hBoxMaxHeight:o/2}),d=Object.assign({},n);il(d,rt(s));let f=Object.assign({maxPadding:d,w:r,h:o,x:n.left,y:n.top},n),m=Pu(l.concat(c),u);Ei(a.fullSize,f,u,m),Ei(l,f,u,m),Ei(c,f,u,m)&&Ei(l,f,u,m),Wu(f),ka(a.leftAndTop,f,u,m),f.x+=f.w,f.y+=f.h,ka(a.rightAndBottom,f,u,m),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},V(a.chartArea,g=>{let p=g.box;Object.assign(p,i.chartArea),p.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},js=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}},yr=class extends js{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},Bs="$chartjs",Vu={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ma=i=>i===null||i==="";function Hu(i,t){let e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[Bs]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",Ma(n)){let r=tr(i,"width");r!==void 0&&(i.width=r)}if(Ma(s))if(i.style.height==="")i.height=i.width/(t||2);else{let r=tr(i,"height");r!==void 0&&(i.height=r)}return i}var sl=ia?{passive:!0}:!1;function Bu(i,t,e){i.addEventListener(t,e,sl)}function $u(i,t,e){i.canvas.removeEventListener(t,e,sl)}function ju(i,t){let e=Vu[i.type]||i.type,{x:s,y:n}=ee(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function Us(i,t){for(let e of i)if(e===t||e.contains(t))return!0}function Uu(i,t,e){let s=i.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||Us(a.addedNodes,s),o=o&&!Us(a.removedNodes,s);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Yu(i,t,e){let s=i.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||Us(a.removedNodes,s),o=o&&!Us(a.addedNodes,s);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Ai=new Map,Ta=0;function nl(){let i=window.devicePixelRatio;i!==Ta&&(Ta=i,Ai.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function Zu(i,t){Ai.size||window.addEventListener("resize",nl),Ai.set(i,t)}function qu(i){Ai.delete(i),Ai.size||window.removeEventListener("resize",nl)}function Gu(i,t,e){let s=i.canvas,n=s&&Ls(s);if(!n)return;let r=Wn((a,l)=>{let c=n.clientWidth;e(a,l),c{let l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||r(c,h)});return o.observe(n),Zu(i,r),o}function hr(i,t,e){e&&e.disconnect(),t==="resize"&&qu(i)}function Xu(i,t,e){let s=i.canvas,n=Wn(r=>{i.ctx!==null&&e(ju(r,i))},i,r=>{let o=r[0];return[o,o.offsetX,o.offsetY]});return Bu(s,t,n),n}var br=class extends js{acquireContext(t,e){let s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(Hu(t,e),s):null}releaseContext(t){let e=t.canvas;if(!e[Bs])return!1;let s=e[Bs].initial;["height","width"].forEach(r=>{let o=s[r];P(o)?e.removeAttribute(r):e.setAttribute(r,o)});let n=s.style||{};return Object.keys(n).forEach(r=>{e.style[r]=n[r]}),e.width=e.width,delete e[Bs],!0}addEventListener(t,e,s){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),o={attach:Uu,detach:Yu,resize:Gu}[e]||Xu;n[e]=o(t,e,s)}removeEventListener(t,e){let s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:hr,detach:hr,resize:hr}[e]||$u)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return ea(t,e,s,n)}isAttached(t){let e=Ls(t);return!!(e&&e.isConnected)}};function Ku(i){return!Jn()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?yr:br}var xr=class{constructor(){this._init=[]}notify(t,e,s,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));let r=n?this._descriptors(t).filter(n):this._descriptors(t),o=this._notify(r,t,e,s);return e==="afterDestroy"&&(this._notify(r,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,s,n){n=n||{};for(let r of t){let o=r.plugin,a=o[s],l=[e,n,r.options];if($(a,l,o)===!1&&n.cancelable)return!1}return!0}invalidate(){P(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let s=t&&t.config,n=E(s.options&&s.options.plugins,{}),r=Ju(s);return n===!1&&!e?[]:td(t,r,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],s=this._cache,n=(r,o)=>r.filter(a=>!o.some(l=>a.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}};function Ju(i){let t={},e=[],s=Object.keys(Pt.plugins.items);for(let r=0;r{let l=s[a];if(!F(l))return console.error(`Invalid scale configuration for scale: ${a}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);let c=wr(a,l),h=sd(c,n),u=e.scales||{};r[c]=r[c]||a,o[a]=Le(Object.create(null),[{axis:c},l,u[c],u[h]])}),i.data.datasets.forEach(a=>{let l=a.type||i.type,c=a.indexAxis||_r(l,t),u=(Kt[l]||{}).scales||{};Object.keys(u).forEach(d=>{let f=id(d,c),m=a[f+"AxisID"]||r[f]||f;o[m]=o[m]||Object.create(null),Le(o[m],[{axis:f},s[m],u[d]])})}),Object.keys(o).forEach(a=>{let l=o[a];Le(l,[A.scales[l.type],A.scale])}),o}function rl(i){let t=i.options||(i.options={});t.plugins=E(t.plugins,{}),t.scales=rd(i,t)}function ol(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function od(i){return i=i||{},i.data=ol(i.data),rl(i),i}var va=new Map,al=new Set;function Ws(i,t){let e=va.get(i);return e||(e=t(),va.set(i,e),al.add(e)),e}var Di=(i,t,e)=>{let s=Vt(t,e);s!==void 0&&i.add(s)},Sr=class{constructor(t){this._config=od(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=ol(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),rl(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Ws(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Ws(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Ws(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,s=this.type;return Ws(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let s=this._scopeCache,n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){let{options:n,type:r}=this,o=this._cachedScopes(t,s),a=o.get(e);if(a)return a;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(u=>Di(l,t,u))),h.forEach(u=>Di(l,n,u)),h.forEach(u=>Di(l,Kt[r]||{},u)),h.forEach(u=>Di(l,A,u)),h.forEach(u=>Di(l,Is,u))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),al.has(e)&&o.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Kt[e]||{},A.datasets[e]||{},{type:e},A,Is]}resolveNamedOptions(t,e,s,n=[""]){let r={$shared:!0},{resolver:o,subPrefixes:a}=Oa(this._resolverCache,t,n),l=o;if(ld(o,e)){r.$shared=!1,s=zt(s)?s():s;let c=this.createResolver(t,s,a);l=me(o,s,c)}for(let c of e)r[c]=l[c];return r}createResolver(t,e,s=[""],n){let{resolver:r}=Oa(this._resolverCache,t,s);return F(e)?me(r,e,void 0,n):r}};function Oa(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));let n=e.join(),r=s.get(n);return r||(r={resolver:As(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},s.set(n,r)),r}var ad=i=>F(i)&&Object.getOwnPropertyNames(i).reduce((t,e)=>t||zt(i[e]),!1);function ld(i,t){let{isScriptable:e,isIndexable:s}=qn(i);for(let n of t){let r=e(n),o=s(n),a=(o||r)&&i[n];if(r&&(zt(a)||ad(a))||o&&B(a))return!0}return!1}var cd="3.9.1",hd=["top","bottom","left","right","chartArea"];function Da(i,t){return i==="top"||i==="bottom"||hd.indexOf(i)===-1&&t==="x"}function Ea(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Ia(i){let t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),$(e&&e.onComplete,[i],t)}function ud(i){let t=i.chart,e=t.options.animation;$(e&&e.onProgress,[i],t)}function ll(i){return Jn()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}var Ys={},cl=i=>{let t=ll(i);return Object.values(Ys).filter(e=>e.canvas===t).pop()};function dd(i,t,e){let s=Object.keys(i);for(let n of s){let r=+n;if(r>=t){let o=i[n];delete i[n],(e>0||r>t)&&(i[r+e]=o)}}}function fd(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}var xe=class{constructor(t,e){let s=this.config=new Sr(e),n=ll(t),r=cl(n);if(r)throw new Error("Canvas is already in use. Chart with ID '"+r.id+"' must be destroyed before the canvas with ID '"+r.canvas.id+"' can be reused.");let o=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||Ku(n)),this.platform.updateConfig(s);let a=this.platform.acquireContext(n,o.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Do(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new xr,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=zo(u=>this.update(u),o.resizeDelay||0),this._dataChanges=[],Ys[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}Bt.listen(this,"complete",Ia),Bt.listen(this,"progress",ud),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:r}=this;return P(t)?e&&r?r:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Qn(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Un(this.canvas,this.ctx),this}stop(){return Bt.stop(this),this}resize(t,e){Bt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let s=this.options,n=this.canvas,r=s.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(n,t,e,r),a=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,Qn(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),$(s.onResize,[this,o],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};V(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((o,a)=>(o[a]=!1,o),{}),r=[];e&&(r=r.concat(Object.keys(e).map(o=>{let a=e[o],l=wr(o,a),c=l==="r",h=l==="x";return{options:a,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),V(r,o=>{let a=o.options,l=a.id,c=wr(l,a),h=E(a.type,o.dtype);(a.position===void 0||Da(a.position,c)!==Da(o.dposition))&&(a.position=o.dposition),n[l]=!0;let u=null;if(l in s&&s[l].type===h)u=s[l];else{let d=Pt.getScale(h);u=new d({id:l,type:h,ctx:this.ctx,chart:this}),s[u.id]=u}u.init(a,t)}),V(n,(o,a)=>{o||delete s[a]}),V(s,o=>{ot.configure(this,o,o.options),ot.addBox(this,o)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,r)=>n.index-r.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(r=>r===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){let e=this.config;e.update();let s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;let r=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Ea("z","_idx"));let{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){V(this.scales,t=>{ot.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!In(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:s,start:n,count:r}of e){let o=s==="_removeElements"?-r:r;dd(t,n,o)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,s=r=>new Set(t.filter(o=>o[0]===r).map((o,a)=>a+","+o.splice(1).join(","))),n=s(0);for(let r=1;rr.split(",")).map(r=>({method:r[1],start:+r[2],count:+r[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;ot.update(this,this.width,this.height,t);let e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],V(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,r)=>{n._idx=r}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){let e=this.ctx,s=t._clip,n=!s.disabled,r=this.chartArea,o={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",o)!==!1&&(n&&Si(e,{left:s.left===!1?0:r.left-s.left,right:s.right===!1?this.width:r.right+s.right,top:s.top===!1?0:r.top-s.top,bottom:s.bottom===!1?this.height:r.bottom+s.bottom}),t.controller.draw(),n&&ki(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Fe(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){let r=Fu.modes[e];return typeof r=="function"?r(this,t,s,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],s=this._metasets,n=s.filter(r=>r&&r._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=Ht(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){let s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){let n=s?"show":"hide",r=this.getDatasetMeta(t),o=r.controller._resolveAnimations(void 0,n);dt(e)?(r.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),o.update(r,{visible:s}),this.update(a=>a.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),Bt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,r,o),t[r]=o},n=(r,o,a)=>{r.offsetX=o,r.offsetY=a,this._eventHandler(r)};V(this.options.events,r=>s(r,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},r=(l,c)=>{this.canvas&&this.resize(l,c)},o,a=()=>{n("attach",a),this.attached=!0,this.resize(),s("resize",r),s("detach",o)};o=()=>{this.attached=!1,n("resize",r),this._stop(),this._resize(0,0),s("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){V(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},V(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){let n=s?"set":"remove",r,o,a,l;for(e==="dataset"&&(r=this.getDatasetMeta(t[0].datasetIndex),r.controller["_"+n+"DatasetHoverStyle"]()),a=0,l=t.length;a{let a=this.getDatasetMeta(r);if(!a)throw new Error("No dataset found at index "+r);return{datasetIndex:r,element:a.data[o],index:o}});!_i(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}_updateHoverStyles(t,e,s){let n=this.options.hover,r=(l,c)=>l.filter(h=>!c.some(u=>h.datasetIndex===u.datasetIndex&&h.index===u.index)),o=r(e,t),a=s?t:r(t,e);o.length&&this.updateHoverStyle(o,n.mode,!1),a.length&&n.mode&&this.updateHoverStyle(a,n.mode,!0)}_eventHandler(t,e){let s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=o=>(o.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;let r=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(r||s.changed)&&this.render(),this}_handleEvent(t,e,s){let{_active:n=[],options:r}=this,o=e,a=this._getActiveElements(t,n,s,o),l=Co(t),c=fd(t,this._lastEvent,s,l);s&&(this._lastEvent=null,$(r.onHover,[t,a,this],this),l&&$(r.onClick,[t,a,this],this));let h=!_i(a,n);return(h||e)&&(this._active=a,this._updateHoverStyles(a,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;let r=this.options.hover;return this.getElementsAtEventForMode(t,r.mode,r,n)}},Ca=()=>V(xe.instances,i=>i._plugins.invalidate()),ie=!0;Object.defineProperties(xe,{defaults:{enumerable:ie,value:A},instances:{enumerable:ie,value:Ys},overrides:{enumerable:ie,value:Kt},registry:{enumerable:ie,value:Pt},version:{enumerable:ie,value:cd},getChart:{enumerable:ie,value:cl},register:{enumerable:ie,value:(...i)=>{Pt.add(...i),Ca()}},unregister:{enumerable:ie,value:(...i)=>{Pt.remove(...i),Ca()}}});function hl(i,t,e){let{startAngle:s,pixelMargin:n,x:r,y:o,outerRadius:a,innerRadius:l}=t,c=n/a;i.beginPath(),i.arc(r,o,a,s-c,e+c),l>n?(c=n/l,i.arc(r,o,l,e+c,s-c,!0)):i.arc(r,o,n,e+U,s-U),i.closePath(),i.clip()}function md(i){return Fs(i,["outerStart","outerEnd","innerStart","innerEnd"])}function gd(i,t,e,s){let n=md(i.options.borderRadius),r=(e-t)/2,o=Math.min(r,s*t/2),a=l=>{let c=(e-Math.min(r,l))*s/2;return tt(l,0,Math.min(r,c))};return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:tt(n.innerStart,0,o),innerEnd:tt(n.innerEnd,0,o)}}function Ve(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function kr(i,t,e,s,n,r){let{x:o,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,u=Math.max(t.outerRadius+s+e-c,0),d=h>0?h+s+e+c:0,f=0,m=n-l;if(s){let D=h>0?h-s:0,J=u>0?u-s:0,X=(D+J)/2,de=X!==0?m*X/(X+s):m;f=(m-de)/2}let g=Math.max(.001,m*u-e/j)/u,p=(m-g)/2,y=l+p+f,b=n-p-f,{outerStart:_,outerEnd:w,innerStart:x,innerEnd:S}=gd(t,d,u,b-y),k=u-_,v=u-w,T=y+_/k,C=b-w/v,N=d+x,L=d+S,K=y+x/N,lt=b-S/L;if(i.beginPath(),r){if(i.arc(o,a,u,T,C),w>0){let X=Ve(v,C,o,a);i.arc(X.x,X.y,w,C,b+U)}let D=Ve(L,b,o,a);if(i.lineTo(D.x,D.y),S>0){let X=Ve(L,lt,o,a);i.arc(X.x,X.y,S,b+U,lt+Math.PI)}if(i.arc(o,a,d,b-S/d,y+x/d,!0),x>0){let X=Ve(N,K,o,a);i.arc(X.x,X.y,x,K+Math.PI,y-U)}let J=Ve(k,y,o,a);if(i.lineTo(J.x,J.y),_>0){let X=Ve(k,T,o,a);i.arc(X.x,X.y,_,y-U,T)}}else{i.moveTo(o,a);let D=Math.cos(T)*u+o,J=Math.sin(T)*u+a;i.lineTo(D,J);let X=Math.cos(C)*u+o,de=Math.sin(C)*u+a;i.lineTo(X,de)}i.closePath()}function pd(i,t,e,s,n){let{fullCircles:r,startAngle:o,circumference:a}=t,l=t.endAngle;if(r){kr(i,t,e,s,o+H,n);for(let c=0;c=H||Ne(r,a,l),g=At(o,c+d,h+d);return m&&g}getCenterPoint(t){let{x:e,y:s,startAngle:n,endAngle:r,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+r)/2,u=(o+a+c+l)/2;return{x:e+Math.cos(h)*u,y:s+Math.sin(h)*u}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:s}=this,n=(e.offset||0)/2,r=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=s>H?Math.floor(s/H):0,s===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(n){a=n/2;let c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*a,Math.sin(c)*a),this.circumference>=j&&(a=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;let l=pd(t,this,a,r,o);bd(t,this,a,r,l,o),t.restore()}};qe.id="arc";qe.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};qe.defaultRoutes={backgroundColor:"backgroundColor"};function ul(i,t,e=t){i.lineCap=E(e.borderCapStyle,t.borderCapStyle),i.setLineDash(E(e.borderDash,t.borderDash)),i.lineDashOffset=E(e.borderDashOffset,t.borderDashOffset),i.lineJoin=E(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=E(e.borderWidth,t.borderWidth),i.strokeStyle=E(e.borderColor,t.borderColor)}function xd(i,t,e){i.lineTo(e.x,e.y)}function _d(i){return i.stepped?Zo:i.tension||i.cubicInterpolationMode==="monotone"?qo:xd}function dl(i,t,e={}){let s=i.length,{start:n=0,end:r=s-1}=e,{start:o,end:a}=t,l=Math.max(n,o),c=Math.min(r,a),h=na&&r>a;return{count:s,start:l,loop:t.loop,ilen:c(o+(c?a-w:w))%r,_=()=>{g!==p&&(i.lineTo(h,p),i.lineTo(h,g),i.lineTo(h,y))};for(l&&(f=n[b(0)],i.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=n[b(d)],f.skip)continue;let w=f.x,x=f.y,S=w|0;S===m?(xp&&(p=x),h=(u*h+w)/++u):(_(),i.lineTo(w,x),m=S,u=0,g=p=x),y=x}_()}function Mr(i){let t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?Sd:wd}function kd(i){return i.stepped?sa:i.tension||i.cubicInterpolationMode==="monotone"?na:qt}function Md(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),ul(i,t.options),i.stroke(n)}function Td(i,t,e,s){let{segments:n,options:r}=t,o=Mr(t);for(let a of n)ul(i,r,a.style),i.beginPath(),o(i,t,a,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}var vd=typeof Path2D=="function";function Od(i,t,e,s){vd&&!t.options.segment?Md(i,t,e,s):Td(i,t,e,s)}var Nt=class extends pt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){let n=s.spanGaps?this._loop:this._fullLoop;ta(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=oa(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){let s=this.options,n=t[e],r=this.points,o=nr(this,{property:e,start:n,end:n});if(!o.length)return;let a=[],l=kd(s),c,h;for(c=0,h=o.length;ci!=="borderDash"&&i!=="fill"};function Fa(i,t,e,s){let n=i.options,{[e]:r}=i.getProps([e],s);return Math.abs(t-r)=e)return i.slice(t,t+e);let o=[],a=(e-2)/(r-2),l=0,c=t+e-1,h=t,u,d,f,m,g;for(o[l++]=i[h],u=0;uf&&(f=m,d=i[b],g=b);o[l++]=d,h=g}return o[l++]=i[c],o}function Pd(i,t,e,s){let n=0,r=0,o,a,l,c,h,u,d,f,m,g,p=[],y=t+e-1,b=i[t].x,w=i[y].x-b;for(o=t;og&&(g=c,d=o),n=(r*n+a.x)/++r;else{let S=o-1;if(!P(u)&&!P(d)){let k=Math.min(u,d),v=Math.max(u,d);k!==f&&k!==S&&p.push({...i[k],x:n}),v!==f&&v!==S&&p.push({...i[v],x:n})}o>0&&S!==f&&p.push(i[S]),p.push(a),h=x,r=0,m=g=c,u=d=f=o}}return p}function ml(i){if(i._decimated){let t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{value:t})}}function Aa(i){i.data.datasets.forEach(t=>{ml(t)})}function Nd(i,t){let e=t.length,s=0,n,{iScale:r}=i,{min:o,max:a,minDefined:l,maxDefined:c}=r.getUserBounds();return l&&(s=tt(Ct(t,r.axis,o).lo,0,e-1)),c?n=tt(Ct(t,r.axis,a).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var Rd={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Aa(i);return}let s=i.width;i.data.datasets.forEach((n,r)=>{let{_data:o,indexAxis:a}=n,l=i.getDatasetMeta(r),c=o||n.data;if(We([a,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;let h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:u,count:d}=Nd(l,c),f=e.threshold||4*s;if(d<=f){ml(n);return}P(o)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(g){this._data=g}}));let m;switch(e.algorithm){case"lttb":m=Ld(c,u,d,s,e);break;case"min-max":m=Pd(c,u,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=m})},destroy(i){Aa(i)}};function Wd(i,t,e){let s=i.segments,n=i.points,r=t.points,o=[];for(let a of s){let{start:l,end:c}=a;c=Dr(l,c,n);let h=Tr(e,n[l],n[c],a.loop);if(!t.segments){o.push({source:a,target:h,start:n[l],end:n[c]});continue}let u=nr(t,h);for(let d of u){let f=Tr(e,r[d.start],r[d.end],d.loop),m=sr(a,n,f);for(let g of m)o.push({source:g,target:d,start:{[e]:La(h,f,"start",Math.max)},end:{[e]:La(h,f,"end",Math.min)}})}}return o}function Tr(i,t,e,s){if(s)return;let n=t[i],r=e[i];return i==="angle"&&(n=ct(n),r=ct(r)),{property:i,start:n,end:r}}function zd(i,t){let{x:e=null,y:s=null}=i||{},n=t.points,r=[];return t.segments.forEach(({start:o,end:a})=>{a=Dr(o,a,n);let l=n[o],c=n[a];s!==null?(r.push({x:l.x,y:s}),r.push({x:c.x,y:s})):e!==null&&(r.push({x:e,y:l.y}),r.push({x:e,y:c.y}))}),r}function Dr(i,t,e){for(;t>i;t--){let s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function La(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function gl(i,t){let e=[],s=!1;return B(i)?(s=!0,e=i):e=zd(i,t),e.length?new Nt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Pa(i){return i&&i.fill!==!1}function Vd(i,t,e){let n=i[t].fill,r=[t],o;if(!e)return n;for(;n!==!1&&r.indexOf(n)===-1;){if(!q(n))return n;if(o=i[n],!o)return!1;if(o.visible)return n;r.push(n),n=o.fill}return!1}function Hd(i,t,e){let s=Ud(i);if(F(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return q(n)&&Math.floor(n)===n?Bd(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function Bd(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function $d(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:F(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function jd(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:F(i)?s=i.value:s=t.getBaseValue(),s}function Ud(i){let t=i.options,e=t.fill,s=E(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function Yd(i){let{scale:t,index:e,line:s}=i,n=[],r=s.segments,o=s.points,a=Zd(t,e);a.push(gl({x:null,y:t.bottom},s));for(let l=0;l=0;--o){let a=n[o].$filler;a&&(a.line.updateControlPoints(r,a.axis),s&&a.fill&&fr(i.ctx,a,r))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){let r=s[n].$filler;Pa(r)&&fr(i.ctx,r,i.chartArea)}},beforeDatasetDraw(i,t,e){let s=t.meta.$filler;!Pa(s)||e.drawTime!=="beforeDatasetDraw"||fr(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},za=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},rf=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index,qs=class extends pt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=$(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let s=t.labels,n=Q(s.font),r=n.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=za(s,r),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(o,r,a,l)+10):(h=this.maxHeight,c=this._fitCols(o,r,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){let{ctx:r,maxWidth:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+a,u=t;r.textAlign="left",r.textBaseline="middle";let d=-1,f=-h;return this.legendItems.forEach((m,g)=>{let p=s+e/2+r.measureText(m.text).width;(g===0||c[c.length-1]+p+2*a>o)&&(u+=h,c[c.length-(g>0?0:1)]=0,f+=h,d++),l[g]={left:0,top:f,row:d,width:p,height:n},c[c.length-1]+=p+a}),u}_fitCols(t,e,s,n){let{ctx:r,maxHeight:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=o-t,u=a,d=0,f=0,m=0,g=0;return this.legendItems.forEach((p,y)=>{let b=s+e/2+r.measureText(p.text).width;y>0&&f+n+2*a>h&&(u+=d+a,c.push({width:d,height:f}),m+=d+a,g++,d=f=0),l[y]={left:m,top:f,col:g,width:b,height:n},d=Math.max(d,b),f+=n+a}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:r}}=this,o=pe(r,this.left,this.width);if(this.isHorizontal()){let a=0,l=nt(s,this.left+n,this.right-this.lineWidths[a]);for(let c of e)a!==c.row&&(a=c.row,l=nt(s,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+t+n,c.left=o.leftForLtr(o.x(l),c.width),l+=c.width+n}else{let a=0,l=nt(s,this.top+t+n,this.bottom-this.columnSizes[a].height);for(let c of e)c.col!==a&&(a=c.col,l=nt(s,this.top+t+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=o.leftForLtr(o.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;Si(t,this),this._draw(),ki(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:r,labels:o}=t,a=A.color,l=pe(t.rtl,this.left,this.width),c=Q(o.font),{color:h,padding:u}=o,d=c.size,f=d/2,m;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:p,itemHeight:y}=za(o,d),b=function(k,v,T){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();let C=E(T.lineWidth,1);if(n.fillStyle=E(T.fillStyle,a),n.lineCap=E(T.lineCap,"butt"),n.lineDashOffset=E(T.lineDashOffset,0),n.lineJoin=E(T.lineJoin,"miter"),n.lineWidth=C,n.strokeStyle=E(T.strokeStyle,a),n.setLineDash(E(T.lineDash,[])),o.usePointStyle){let N={radius:p*Math.SQRT2/2,pointStyle:T.pointStyle,rotation:T.rotation,borderWidth:C},L=l.xPlus(k,g/2),K=v+f;Yn(n,N,L,K,o.pointStyleWidth&&g)}else{let N=v+Math.max((d-p)/2,0),L=l.leftForLtr(k,g),K=te(T.borderRadius);n.beginPath(),Object.values(K).some(lt=>lt!==0)?Re(n,{x:L,y:N,w:g,h:p,radius:K}):n.rect(L,N,g,p),n.fill(),C!==0&&n.stroke()}n.restore()},_=function(k,v,T){Qt(n,T.text,k,v+y/2,c,{strikethrough:T.hidden,textAlign:l.textAlign(T.textAlign)})},w=this.isHorizontal(),x=this._computeTitleHeight();w?m={x:nt(r,this.left+u,this.right-s[0]),y:this.top+u+x,line:0}:m={x:this.left+u,y:nt(r,this.top+x+u,this.bottom-e[0].height),line:0},er(this.ctx,t.textDirection);let S=y+u;this.legendItems.forEach((k,v)=>{n.strokeStyle=k.fontColor||h,n.fillStyle=k.fontColor||h;let T=n.measureText(k.text).width,C=l.textAlign(k.textAlign||(k.textAlign=o.textAlign)),N=g+f+T,L=m.x,K=m.y;l.setWidth(this.width),w?v>0&&L+N+u>this.right&&(K=m.y+=S,m.line++,L=m.x=nt(r,this.left+u,this.right-s[m.line])):v>0&&K+S>this.bottom&&(L=m.x=L+e[m.line].width+u,m.line++,K=m.y=nt(r,this.top+x+u,this.bottom-e[m.line].height));let lt=l.x(L);b(lt,K,k),L=Vo(C,L+g+f,w?L+N:this.right,t.rtl),_(l.x(L),K,k),w?m.x+=N+u:m.y+=S}),ir(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,s=Q(e.font),n=rt(e.padding);if(!e.display)return;let r=pe(t.rtl,this.left,this.width),o=this.ctx,a=e.position,l=s.size/2,c=n.top+l,h,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+c,u=nt(t.align,u,this.right-d);else{let m=this.columnSizes.reduce((g,p)=>Math.max(g,p.height),0);h=c+nt(t.align,this.top,this.bottom-m-t.labels.padding-this._computeTitleHeight())}let f=nt(a,u,u+d);o.textAlign=r.textAlign(Es(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=s.string,Qt(o,e.text,f,h,s)}_computeTitleHeight(){let t=this.options.title,e=Q(t.font),s=rt(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,r;if(At(t,this.left,this.right)&&At(e,this.top,this.bottom)){for(r=this.legendHitBoxes,s=0;si.chart.options.color,boxWidth:40,padding:10,generateLabels(i){let t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:r}}=i.legend.options;return i._getSortedDatasetMetas().map(o=>{let a=o.controller.getStyle(e?0:void 0),l=rt(a.borderWidth);return{text:t[o.index].label,fillStyle:a.backgroundColor,fontColor:r,hidden:!o.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:o.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}},Li=class extends pt{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=B(s.text)?s.text.length:1;this._padding=rt(s.padding);let r=n*Q(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=r:this.width=r}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:s,bottom:n,right:r,options:o}=this,a=o.align,l=0,c,h,u;return this.isHorizontal()?(h=nt(a,s,r),u=e+t,c=r-s):(o.position==="left"?(h=s+t,u=nt(a,n,e),l=j*-.5):(h=r-t,u=nt(a,e,n),l=j*.5),c=n-e),{titleX:h,titleY:u,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let s=Q(e.font),r=s.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(r);Qt(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:Es(e.align),textBaseline:"middle",translation:[o,a]})}};function lf(i,t){let e=new Li({ctx:i.ctx,options:t,chart:i});ot.configure(i,e,t),ot.addBox(i,e),i.titleBlock=e}var cf={id:"title",_element:Li,start(i,t,e){lf(i,e)},stop(i){let t=i.titleBlock;ot.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){let s=i.titleBlock;ot.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},zs=new WeakMap,hf={id:"subtitle",start(i,t,e){let s=new Li({ctx:i.ctx,options:e,chart:i});ot.configure(i,s,e),ot.addBox(i,s),zs.set(i,s)},stop(i){ot.removeBox(i,zs.get(i)),zs.delete(i)},beforeUpdate(i,t,e){let s=zs.get(i);ot.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Ii={average(i){if(!i.length)return!1;let t,e,s=0,n=0,r=0;for(t=0,e=i.length;t-1?i.split(` +`):i}function uf(i,t){let{element:e,datasetIndex:s,index:n}=t,r=i.getDatasetMeta(s).controller,{label:o,value:a}=r.getLabelAndValue(n);return{chart:i,label:o,parsed:r.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:a,dataset:r.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function Va(i,t){let e=i.chart.ctx,{body:s,footer:n,title:r}=i,{boxWidth:o,boxHeight:a}=t,l=Q(t.bodyFont),c=Q(t.titleFont),h=Q(t.footerFont),u=r.length,d=n.length,f=s.length,m=rt(t.padding),g=m.height,p=0,y=s.reduce((w,x)=>w+x.before.length+x.lines.length+x.after.length,0);if(y+=i.beforeBody.length+i.afterBody.length,u&&(g+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),y){let w=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;g+=f*w+(y-f)*l.lineHeight+(y-1)*t.bodySpacing}d&&(g+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let b=0,_=function(w){p=Math.max(p,e.measureText(w).width+b)};return e.save(),e.font=c.string,V(i.title,_),e.font=l.string,V(i.beforeBody.concat(i.afterBody),_),b=t.displayColors?o+2+t.boxPadding:0,V(s,w=>{V(w.before,_),V(w.lines,_),V(w.after,_)}),b=0,e.font=h.string,V(i.footer,_),e.restore(),p+=m.width,{width:p,height:g}}function df(i,t){let{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function ff(i,t,e,s){let{x:n,width:r}=s,o=e.caretSize+e.caretPadding;if(i==="left"&&n+r+o>t.width||i==="right"&&n-r-o<0)return!0}function mf(i,t,e,s){let{x:n,width:r}=e,{width:o,chartArea:{left:a,right:l}}=i,c="center";return s==="center"?c=n<=(a+l)/2?"left":"right":n<=r/2?c="left":n>=o-r/2&&(c="right"),ff(c,i,t,e)&&(c="center"),c}function Ha(i,t,e){let s=e.yAlign||t.yAlign||df(i,e);return{xAlign:e.xAlign||t.xAlign||mf(i,t,e,s),yAlign:s}}function gf(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function pf(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Ba(i,t,e,s){let{caretSize:n,caretPadding:r,cornerRadius:o}=i,{xAlign:a,yAlign:l}=e,c=n+r,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=te(o),m=gf(t,a),g=pf(t,l,c);return l==="center"?a==="left"?m+=c:a==="right"&&(m-=c):a==="left"?m-=Math.max(h,d)+n:a==="right"&&(m+=Math.max(u,f)+n),{x:tt(m,0,s.width-t.width),y:tt(g,0,s.height-t.height)}}function Vs(i,t,e){let s=rt(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function $a(i){return Lt([],$t(i))}function yf(i,t,e){return Ht(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function ja(i,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}var Pi=class extends pt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,r=new $s(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(r)),r}getContext(){return this.$context||(this.$context=yf(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:s}=e,n=s.beforeTitle.apply(this,[t]),r=s.title.apply(this,[t]),o=s.afterTitle.apply(this,[t]),a=[];return a=Lt(a,$t(n)),a=Lt(a,$t(r)),a=Lt(a,$t(o)),a}getBeforeBody(t,e){return $a(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){let{callbacks:s}=e,n=[];return V(t,r=>{let o={before:[],lines:[],after:[]},a=ja(s,r);Lt(o.before,$t(a.beforeLabel.call(this,r))),Lt(o.lines,a.label.call(this,r)),Lt(o.after,$t(a.afterLabel.call(this,r))),n.push(o)}),n}getAfterBody(t,e){return $a(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){let{callbacks:s}=e,n=s.beforeFooter.apply(this,[t]),r=s.footer.apply(this,[t]),o=s.afterFooter.apply(this,[t]),a=[];return a=Lt(a,$t(n)),a=Lt(a,$t(r)),a=Lt(a,$t(o)),a}_createItems(t){let e=this._active,s=this.chart.data,n=[],r=[],o=[],a=[],l,c;for(l=0,c=e.length;lt.filter(h,u,d,s))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,s))),V(a,h=>{let u=ja(t.callbacks,h);n.push(u.labelColor.call(this,h)),r.push(u.labelPointStyle.call(this,h)),o.push(u.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=r,this.labelTextColors=o,this.dataPoints=a,a}update(t,e){let s=this.options.setContext(this.getContext()),n=this._active,r,o=[];if(!n.length)this.opacity!==0&&(r={opacity:0});else{let a=Ii[s.position].call(this,n,this._eventPosition);o=this._createItems(s),this.title=this.getTitle(o,s),this.beforeBody=this.getBeforeBody(o,s),this.body=this.getBody(o,s),this.afterBody=this.getAfterBody(o,s),this.footer=this.getFooter(o,s);let l=this._size=Va(this,s),c=Object.assign({},a,l),h=Ha(this.chart,s,c),u=Ba(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,r={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=o,this.$context=void 0,r&&this._resolveAnimations().update(this,r),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){let r=this.getCaretPosition(t,s,n);e.lineTo(r.x1,r.y1),e.lineTo(r.x2,r.y2),e.lineTo(r.x3,r.y3)}getCaretPosition(t,e,s){let{xAlign:n,yAlign:r}=this,{caretSize:o,cornerRadius:a}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=te(a),{x:d,y:f}=t,{width:m,height:g}=e,p,y,b,_,w,x;return r==="center"?(w=f+g/2,n==="left"?(p=d,y=p-o,_=w+o,x=w-o):(p=d+m,y=p+o,_=w-o,x=w+o),b=p):(n==="left"?y=d+Math.max(l,h)+o:n==="right"?y=d+m-Math.max(c,u)-o:y=this.caretX,r==="top"?(_=f,w=_-o,p=y-o,b=y+o):(_=f+g,w=_+o,p=y+o,b=y-o),x=_),{x1:p,x2:y,x3:b,y1:_,y2:w,y3:x}}drawTitle(t,e,s){let n=this.title,r=n.length,o,a,l;if(r){let c=pe(s.rtl,this.x,this.width);for(t.x=Vs(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",o=Q(s.titleFont),a=s.titleSpacing,e.fillStyle=s.titleColor,e.font=o.string,l=0;l_!==0)?(t.beginPath(),t.fillStyle=r.multiKeyBackground,Re(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),Re(t,{x:y,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=r.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=o.backgroundColor,t.fillRect(y,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){let{body:n}=this,{bodySpacing:r,bodyAlign:o,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=s,u=Q(s.bodyFont),d=u.lineHeight,f=0,m=pe(s.rtl,this.x,this.width),g=function(v){e.fillText(v,m.x(t.x+f),t.y+d/2),t.y+=d+r},p=m.textAlign(o),y,b,_,w,x,S,k;for(e.textAlign=o,e.textBaseline="middle",e.font=u.string,t.x=Vs(this,p,s),e.fillStyle=s.bodyColor,V(this.beforeBody,g),f=a&&p!=="right"?o==="center"?c/2+h:c+2+h:0,w=0,S=n.length;w0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,s=this.$animations,n=s&&s.x,r=s&&s.y;if(n||r){let o=Ii[t.position].call(this,this._active,this._eventPosition);if(!o)return;let a=this._size=Va(this,t),l=Object.assign({},o,this._size),c=Ha(e,t,l),h=Ba(t,l,c,e);(n._to!==h.x||r._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=o.x,this.caretY=o.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),s=this.opacity;if(!s)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},r={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;let o=rt(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=s,this.drawBackground(r,t,n,e),er(t,e.textDirection),r.y+=o.top,this.drawTitle(r,t,e),this.drawBody(r,t,e),this.drawFooter(r,t,e),ir(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let s=this._active,n=t.map(({datasetIndex:a,index:l})=>{let c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),r=!_i(s,n),o=this._positionChanged(n,e);(r||o)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,r=this._active||[],o=this._getActiveElements(t,r,e,s),a=this._positionChanged(o,t),l=e||!_i(o,r)||a;return l&&(this._active=o,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){let r=this.options;if(t.type==="mouseout")return[];if(!n)return e;let o=this.chart.getElementsAtEventForMode(t,r.mode,r,s);return r.reverse&&o.reverse(),o}_positionChanged(t,e){let{caretX:s,caretY:n,options:r}=this,o=Ii[r.position].call(this,t,e);return o!==!1&&(s!==o.x||n!==o.y)}};Pi.positioners=Ii;var bf={id:"tooltip",_element:Pi,positioners:Ii,afterInit(i,t,e){e&&(i.tooltip=new Pi({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){let t=i.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){let e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:Ft,title(i){if(i.length>0){let t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndexi!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},xf=Object.freeze({__proto__:null,Decimation:Rd,Filler:nf,Legend:af,SubTitle:hf,Title:cf,Tooltip:bf}),_f=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function wf(i,t,e,s){let n=i.indexOf(t);if(n===-1)return _f(i,t,e,s);let r=i.lastIndexOf(t);return n!==r?e:n}var Sf=(i,t)=>i===null?null:tt(Math.round(i),0,t),Ke=class extends be{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let s=this.getLabels();for(let{index:n,label:r}of e)s[n]===r&&s.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(P(t))return null;let s=this.getLabels();return e=isFinite(e)&&s[e]===t?e:wf(s,t,E(e,t),this._addedLabels),Sf(e,s.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:s,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(s=0),e||(n=this.getLabels().length-1)),this.min=s,this.max=n}buildTicks(){let t=this.min,e=this.max,s=this.options.offset,n=[],r=this.getLabels();r=t===0&&e===r.length-1?r:r.slice(t,e+1),this._valueRange=Math.max(r.length-(s?0:1),1),this._startValue=this.min-(s?.5:0);for(let o=t;o<=e;o++)n.push({value:o});return n}getLabelForValue(t){let e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};Ke.id="category";Ke.defaults={ticks:{callback:Ke.prototype.getLabelForValue}};function kf(i,t){let e=[],{bounds:n,step:r,min:o,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=i,f=r||1,m=h-1,{min:g,max:p}=t,y=!P(o),b=!P(a),_=!P(c),w=(p-g)/(u+1),x=Cn((p-g)/m/f)*f,S,k,v,T;if(x<1e-14&&!y&&!b)return[{value:g},{value:p}];T=Math.ceil(p/x)-Math.floor(g/x),T>m&&(x=Cn(T*x/m/f)*f),P(l)||(S=Math.pow(10,l),x=Math.ceil(x*S)/S),n==="ticks"?(k=Math.floor(g/x)*x,v=Math.ceil(p/x)*x):(k=g,v=p),y&&b&&r&&Ao((a-o)/r,x/1e3)?(T=Math.round(Math.min((a-o)/x,h)),x=(a-o)/T,k=o,v=a):_?(k=y?o:k,v=b?a:v,T=c-1,x=(v-k)/T):(T=(v-k)/x,Pe(T,Math.round(T),x/1e3)?T=Math.round(T):T=Math.ceil(T));let C=Math.max(An(x),An(k));S=Math.pow(10,P(l)?C:l),k=Math.round(k*S)/S,v=Math.round(v*S)/S;let N=0;for(y&&(d&&k!==o?(e.push({value:o}),kn=e?n:l,a=l=>r=s?r:l;if(t){let l=Mt(n),c=Mt(r);l<0&&c<0?a(0):l>0&&c>0&&o(0)}if(n===r){let l=1;(r>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(r*.05)),a(r+l),t||o(n-l)}this.min=n,this.max=r}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,s=this.getTickLimit();s=Math.max(2,s);let n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},r=this._range||this,o=kf(n,r);return t.bounds==="ticks"&&Fn(o,this,"value"),t.reverse?(o.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),o}configure(){let t=this.ticks,e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){let n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return ze(t,this.chart.options.locale,this.options.ticks.format)}},Ni=class extends Je{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=q(t)?t:0,this.max=q(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,s=_t(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,r=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,r.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};Ni.id="linear";Ni.defaults={ticks:{callback:Gs.formatters.numeric}};function Ya(i){return i/Math.pow(10,Math.floor(mt(i)))===1}function Mf(i,t){let e=Math.floor(mt(t.max)),s=Math.ceil(t.max/Math.pow(10,e)),n=[],r=ft(i.min,Math.pow(10,Math.floor(mt(t.min)))),o=Math.floor(mt(r)),a=Math.floor(r/Math.pow(10,o)),l=o<0?Math.pow(10,Math.abs(o)):1;do n.push({value:r,major:Ya(r)}),++a,a===10&&(a=1,++o,l=o>=0?1:l),r=Math.round(a*Math.pow(10,o)*l)/l;while(o0?s:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=q(t)?Math.max(0,t):null,this.max=q(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),s=this.min,n=this.max,r=l=>s=t?s:l,o=l=>n=e?n:l,a=(l,c)=>Math.pow(10,Math.floor(mt(l))+c);s===n&&(s<=0?(r(1),o(10)):(r(a(s,-1)),o(a(n,1)))),s<=0&&r(a(n,-1)),n<=0&&o(a(s,1)),this._zero&&this.min!==this._suggestedMin&&s===a(this.min,0)&&r(a(s,-1)),this.min=s,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},s=Mf(e,this);return t.bounds==="ticks"&&Fn(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":ze(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=mt(t),this._valueRange=mt(this.max)-mt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(mt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};Ri.id="logarithmic";Ri.defaults={ticks:{callback:Gs.formatters.logarithmic,major:{enabled:!0}}};function vr(i){let t=i.ticks;if(t.display&&i.display){let e=rt(t.backdropPadding);return E(t.font&&t.font.size,A.font.size)+e.height}return 0}function Tf(i,t,e){return e=B(e)?e:[e],{w:Yo(i,t.string,e),h:e.length*t.lineHeight}}function Za(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function vf(i){let t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],r=i._pointLabels.length,o=i.options.pointLabels,a=o.centerPointLabels?j/r:0;for(let l=0;lt.r&&(a=(s.end-t.r)/r,i.r=Math.max(i.r,t.r+a)),n.startt.b&&(l=(n.end-t.b)/o,i.b=Math.max(i.b,t.b+l))}function Df(i,t,e){let s=[],n=i._pointLabels.length,r=i.options,o=vr(r)/2,a=i.drawingArea,l=r.pointLabels.centerPointLabels?j/n:0;for(let c=0;c270||e<90)&&(i-=t),i}function Ff(i,t){let{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){let r=s.setContext(i.getPointLabelContext(n)),o=Q(r.font),{x:a,y:l,textAlign:c,left:h,top:u,right:d,bottom:f}=i._pointLabelItems[n],{backdropColor:m}=r;if(!P(m)){let g=te(r.borderRadius),p=rt(r.backdropPadding);e.fillStyle=m;let y=h-p.left,b=u-p.top,_=d-h+p.width,w=f-u+p.height;Object.values(g).some(x=>x!==0)?(e.beginPath(),Re(e,{x:y,y:b,w:_,h:w,radius:g}),e.fill()):e.fillRect(y,b,_,w)}Qt(e,i._pointLabels[n],a,l+o.lineHeight/2,o,{color:r.color,textAlign:c,textBaseline:"middle"})}}function pl(i,t,e,s){let{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,H);else{let r=i.getPointPosition(0,t);n.moveTo(r.x,r.y);for(let o=1;o{let n=$(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){let t=this.options;t.display&&t.pointLabels.display?vf(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){let e=H/(this._pointLabels.length||1),s=this.options.startAngle||0;return ct(t*e+_t(s))}getDistanceFromCenterForValue(t){if(P(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(P(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t{if(h!==0){a=this.getDistanceFromCenterForValue(c.value);let u=n.setContext(this.getContext(h-1));Af(this,u,a,r)}}),s.display){for(t.save(),o=r-1;o>=0;o--){let c=s.setContext(this.getPointLabelContext(o)),{color:h,lineWidth:u}=c;!u||!h||(t.lineWidth=u,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;let n=this.getIndexAngle(0),r,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;let c=s.setContext(this.getContext(l)),h=Q(c.font);if(r=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,o=t.measureText(a.label).width,t.fillStyle=c.backdropColor;let u=rt(c.backdropPadding);t.fillRect(-o/2-u.left,-r-h.size/2-u.top,o+u.width,h.size+u.height)}Qt(t,a.label,0,-r,h,{color:c.color})}),t.restore()}drawTitle(){}};_e.id="radialLinear";_e.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Gs.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(i){return i},padding:5,centerPointLabels:!1}};_e.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};_e.descriptors={angleLines:{_fallback:"grid"}};var Xs={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ht=Object.keys(Xs);function Pf(i,t){return i-t}function qa(i,t){if(P(t))return null;let e=i._adapter,{parser:s,round:n,isoWeekday:r}=i._parseOpts,o=t;return typeof s=="function"&&(o=s(o)),q(o)||(o=typeof s=="string"?e.parse(o,s):e.parse(o)),o===null?null:(n&&(o=n==="week"&&(ge(r)||r===!0)?e.startOf(o,"isoWeek",r):e.startOf(o,n)),+o)}function Ga(i,t,e,s){let n=ht.length;for(let r=ht.indexOf(i);r=ht.indexOf(e);r--){let o=ht[r];if(Xs[o].common&&i._adapter.diff(n,s,o)>=t-1)return o}return ht[e?ht.indexOf(e):0]}function Rf(i){for(let t=ht.indexOf(i)+1,e=ht.length;t=t?e[s]:e[n];i[r]=!0}}function Wf(i,t,e,s){let n=i._adapter,r=+n.startOf(t[0].value,s),o=t[t.length-1].value,a,l;for(a=r;a<=o;a=+n.add(a,1,s))l=e[a],l>=0&&(t[l].major=!0);return t}function Ka(i,t,e){let s=[],n={},r=t.length,o,a;for(o=0;o+t.value))}initOffsets(t){let e=0,s=0,n,r;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,r=this.getDecimalForValue(t[t.length-1]),t.length===1?s=r:s=(r-this.getDecimalForValue(t[t.length-2]))/2);let o=t.length<3?.5:.25;e=tt(e,0,o),s=tt(s,0,o),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){let t=this._adapter,e=this.min,s=this.max,n=this.options,r=n.time,o=r.unit||Ga(r.minUnit,e,s,this._getLabelCapacity(e)),a=E(r.stepSize,1),l=o==="week"?r.isoWeekday:!1,c=ge(l)||l===!0,h={},u=e,d,f;if(c&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,c?"day":o),t.diff(s,e,o)>1e5*a)throw new Error(e+" and "+s+" are too far apart with stepSize of "+a+" "+o);let m=n.ticks.source==="data"&&this.getDataTimestamps();for(d=u,f=0;dg-p).map(g=>+g)}getLabelForValue(t){let e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}_tickFormatFunction(t,e,s,n){let r=this.options,o=r.time.displayFormats,a=this._unit,l=this._majorUnit,c=a&&o[a],h=l&&o[l],u=s[e],d=l&&h&&u&&u.major,f=this._adapter.format(t,n||(d?h:c)),m=r.ticks.callback;return m?$(m,[f,e,s],this):f}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=Ct(i,"pos",t)),{pos:r,time:a}=i[s],{pos:o,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=Ct(i,"time",t)),{time:r,pos:a}=i[s],{time:o,pos:l}=i[n]);let c=o-r;return c?a+(l-a)*(t-r)/c:a}var Wi=class extends we{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Hs(e,this.min),this._tableRange=Hs(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:s}=this,n=[],r=[],o,a,l,c,h;for(o=0,a=t.length;o=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(o=0,a=n.length;o=0?m:1e3+m,(d-f)/(60*1e3)}equals(t){return t.type==="iana"&&t.name===this.name}get isValid(){return this.valid}};var bl={};function jf(i,t={}){let e=JSON.stringify([i,t]),s=bl[e];return s||(s=new Intl.ListFormat(i,t),bl[e]=s),s}var Fr={};function Ar(i,t={}){let e=JSON.stringify([i,t]),s=Fr[e];return s||(s=new Intl.DateTimeFormat(i,t),Fr[e]=s),s}var Lr={};function Uf(i,t={}){let e=JSON.stringify([i,t]),s=Lr[e];return s||(s=new Intl.NumberFormat(i,t),Lr[e]=s),s}var Pr={};function Yf(i,t={}){let{base:e,...s}=t,n=JSON.stringify([i,s]),r=Pr[n];return r||(r=new Intl.RelativeTimeFormat(i,t),Pr[n]=r),r}var rs=null;function Zf(){return rs||(rs=new Intl.DateTimeFormat().resolvedOptions().locale,rs)}var xl={};function qf(i){let t=xl[i];if(!t){let e=new Intl.Locale(i);t="getWeekInfo"in e?e.getWeekInfo():e.weekInfo,xl[i]=t}return t}function Gf(i){let t=i.indexOf("-x-");t!==-1&&(i=i.substring(0,t));let e=i.indexOf("-u-");if(e===-1)return[i];{let s,n;try{s=Ar(i).resolvedOptions(),n=i}catch{let l=i.substring(0,e);s=Ar(l).resolvedOptions(),n=l}let{numberingSystem:r,calendar:o}=s;return[n,r,o]}}function Xf(i,t,e){return(e||t)&&(i.includes("-u-")||(i+="-u"),e&&(i+=`-ca-${e}`),t&&(i+=`-nu-${t}`)),i}function Kf(i){let t=[];for(let e=1;e<=12;e++){let s=I.utc(2009,e,1);t.push(i(s))}return t}function Jf(i){let t=[];for(let e=1;e<=7;e++){let s=I.utc(2016,11,13+e);t.push(i(s))}return t}function rn(i,t,e,s){let n=i.listingMode();return n==="error"?null:n==="en"?e(t):s(t)}function Qf(i){return i.numberingSystem&&i.numberingSystem!=="latn"?!1:i.numberingSystem==="latn"||!i.locale||i.locale.startsWith("en")||new Intl.DateTimeFormat(i.intl).resolvedOptions().numberingSystem==="latn"}var Nr=class{constructor(t,e,s){this.padTo=s.padTo||0,this.floor=s.floor||!1;let{padTo:n,floor:r,...o}=s;if(!e||Object.keys(o).length>0){let a={useGrouping:!1,...s};s.padTo>0&&(a.minimumIntegerDigits=s.padTo),this.inf=Uf(t,a)}}format(t){if(this.inf){let e=this.floor?Math.floor(t):t;return this.inf.format(e)}else{let e=this.floor?Math.floor(t):ei(t,3);return Y(e,this.padTo)}}},Rr=class{constructor(t,e,s){this.opts=s,this.originalZone=void 0;let n;if(this.opts.timeZone)this.dt=t;else if(t.zone.type==="fixed"){let o=-1*(t.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;t.offset!==0&&at.create(a).valid?(n=a,this.dt=t):(n="UTC",this.dt=t.offset===0?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type==="system"?this.dt=t:t.zone.type==="iana"?(this.dt=t,n=t.zone.name):(n="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);let r={...this.opts};r.timeZone=r.timeZone||n,this.dtf=Ar(e,r)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(e=>{if(e.type==="timeZoneName"){let s=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:s}}else return e}):t}resolvedOptions(){return this.dtf.resolvedOptions()}},Wr=class{constructor(t,e,s){this.opts={style:"long",...s},!e&&on()&&(this.rtf=Yf(t,s))}format(t,e){return this.rtf?this.rtf.format(t,e):_l(e,t,this.opts.numeric,this.opts.style!=="long")}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}},tm={firstDay:1,minimalDays:4,weekend:[6,7]},W=class i{static fromOpts(t){return i.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,s,n,r=!1){let o=t||R.defaultLocale,a=o||(r?"en-US":Zf()),l=e||R.defaultNumberingSystem,c=s||R.defaultOutputCalendar,h=os(n)||R.defaultWeekSettings;return new i(a,l,c,h,o)}static resetCache(){rs=null,Fr={},Lr={},Pr={}}static fromObject({locale:t,numberingSystem:e,outputCalendar:s,weekSettings:n}={}){return i.create(t,e,s,n)}constructor(t,e,s,n,r){let[o,a,l]=Gf(t);this.locale=o,this.numberingSystem=e||a||null,this.outputCalendar=s||l||null,this.weekSettings=n,this.intl=Xf(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=r,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=Qf(this)),this.fastNumbersCached}listingMode(){let t=this.isEnglish(),e=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return t&&e?"en":"intl"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:i.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,os(t.weekSettings)||this.weekSettings,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,e=!1){return rn(this,t,zr,()=>{let s=e?{month:t,day:"numeric"}:{month:t},n=e?"format":"standalone";return this.monthsCache[n][t]||(this.monthsCache[n][t]=Kf(r=>this.extract(r,s,"month"))),this.monthsCache[n][t]})}weekdays(t,e=!1){return rn(this,t,Vr,()=>{let s=e?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},n=e?"format":"standalone";return this.weekdaysCache[n][t]||(this.weekdaysCache[n][t]=Jf(r=>this.extract(r,s,"weekday"))),this.weekdaysCache[n][t]})}meridiems(){return rn(this,void 0,()=>Hr,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[I.utc(2016,11,13,9),I.utc(2016,11,13,19)].map(e=>this.extract(e,t,"dayperiod"))}return this.meridiemCache})}eras(t){return rn(this,t,Br,()=>{let e={era:t};return this.eraCache[t]||(this.eraCache[t]=[I.utc(-40,1,1),I.utc(2017,1,1)].map(s=>this.extract(s,e,"era"))),this.eraCache[t]})}extract(t,e,s){let n=this.dtFormatter(t,e),r=n.formatToParts(),o=r.find(a=>a.type.toLowerCase()===s);return o?o.value:null}numberFormatter(t={}){return new Nr(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,e={}){return new Rr(t,this.intl,e)}relFormatter(t={}){return new Wr(this.intl,this.isEnglish(),t)}listFormatter(t={}){return jf(this.intl,t)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:an()?qf(this.locale):tm}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}};var jr=null,et=class i extends ut{static get utcInstance(){return jr===null&&(jr=new i(0)),jr}static instance(t){return t===0?i.utcInstance:new i(t)}static parseSpecifier(t){if(t){let e=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(e)return new i(Se(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${ae(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${ae(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,e){return ae(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type==="fixed"&&t.fixed===this.fixed}get isValid(){return!0}};var ii=class extends ut{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Dt(i,t){let e;if(O(i)||i===null)return t;if(i instanceof ut)return i;if(wl(i)){let s=i.toLowerCase();return s==="default"?t:s==="local"||s==="system"?oe.instance:s==="utc"||s==="gmt"?et.utcInstance:et.parseSpecifier(s)||at.create(i)}else return Et(i)?et.instance(i):typeof i=="object"&&"offset"in i&&typeof i.offset=="function"?i:new ii(i)}var Ur={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},Sl={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},em=Ur.hanidec.replace(/[\[|\]]/g,"").split("");function kl(i){let t=parseInt(i,10);if(isNaN(t)){t="";for(let e=0;e=r&&s<=o&&(t+=s-r)}}return parseInt(t,10)}else return t}var si={};function Ml(){si={}}function wt({numberingSystem:i},t=""){let e=i||"latn";return si[e]||(si[e]={}),si[e][t]||(si[e][t]=new RegExp(`${Ur[e]}${t}`)),si[e][t]}var Tl=()=>Date.now(),vl="system",Ol=null,Dl=null,El=null,Il=60,Cl,Fl=null,R=class{static get now(){return Tl}static set now(t){Tl=t}static set defaultZone(t){vl=t}static get defaultZone(){return Dt(vl,oe.instance)}static get defaultLocale(){return Ol}static set defaultLocale(t){Ol=t}static get defaultNumberingSystem(){return Dl}static set defaultNumberingSystem(t){Dl=t}static get defaultOutputCalendar(){return El}static set defaultOutputCalendar(t){El=t}static get defaultWeekSettings(){return Fl}static set defaultWeekSettings(t){Fl=os(t)}static get twoDigitCutoffYear(){return Il}static set twoDigitCutoffYear(t){Il=t%100}static get throwOnInvalid(){return Cl}static set throwOnInvalid(t){Cl=t}static resetCaches(){W.resetCache(),at.resetCache(),I.resetCache(),Ml()}};var it=class{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var Al=[0,31,59,90,120,151,181,212,243,273,304,334],Ll=[0,31,60,91,121,152,182,213,244,274,305,335];function St(i,t){return new it("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${i}, which is invalid`)}function ln(i,t,e){let s=new Date(Date.UTC(i,t-1,e));i<100&&i>=0&&s.setUTCFullYear(s.getUTCFullYear()-1900);let n=s.getUTCDay();return n===0?7:n}function Pl(i,t,e){return e+(Me(i)?Ll:Al)[t-1]}function Nl(i,t){let e=Me(i)?Ll:Al,s=e.findIndex(r=>rke(s,t,e)?(c=s+1,l=1):c=s,{weekYear:c,weekNumber:l,weekday:a,...cs(i)}}function Yr(i,t=4,e=1){let{weekYear:s,weekNumber:n,weekday:r}=i,o=cn(ln(s,1,t),e),a=le(s),l=n*7+r-o-7+t,c;l<1?(c=s-1,l+=le(c)):l>a?(c=s+1,l-=le(s)):c=s;let{month:h,day:u}=Nl(c,l);return{year:c,month:h,day:u,...cs(i)}}function hn(i){let{year:t,month:e,day:s}=i,n=Pl(t,e,s);return{year:t,ordinal:n,...cs(i)}}function Zr(i){let{year:t,ordinal:e}=i,{month:s,day:n}=Nl(t,e);return{year:t,month:s,day:n,...cs(i)}}function qr(i,t){if(!O(i.localWeekday)||!O(i.localWeekNumber)||!O(i.localWeekYear)){if(!O(i.weekday)||!O(i.weekNumber)||!O(i.weekYear))throw new Tt("Cannot mix locale-based week fields with ISO-based week fields");return O(i.localWeekday)||(i.weekday=i.localWeekday),O(i.localWeekNumber)||(i.weekNumber=i.localWeekNumber),O(i.localWeekYear)||(i.weekYear=i.localWeekYear),delete i.localWeekday,delete i.localWeekNumber,delete i.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function Rl(i,t=4,e=1){let s=ls(i.weekYear),n=bt(i.weekNumber,1,ke(i.weekYear,t,e)),r=bt(i.weekday,1,7);return s?n?r?!1:St("weekday",i.weekday):St("week",i.weekNumber):St("weekYear",i.weekYear)}function Wl(i){let t=ls(i.year),e=bt(i.ordinal,1,le(i.year));return t?e?!1:St("ordinal",i.ordinal):St("year",i.year)}function Gr(i){let t=ls(i.year),e=bt(i.month,1,12),s=bt(i.day,1,ni(i.year,i.month));return t?e?s?!1:St("day",i.day):St("month",i.month):St("year",i.year)}function Xr(i){let{hour:t,minute:e,second:s,millisecond:n}=i,r=bt(t,0,23)||t===24&&e===0&&s===0&&n===0,o=bt(e,0,59),a=bt(s,0,59),l=bt(n,0,999);return r?o?a?l?!1:St("millisecond",n):St("second",s):St("minute",e):St("hour",t)}function O(i){return typeof i>"u"}function Et(i){return typeof i=="number"}function ls(i){return typeof i=="number"&&i%1===0}function wl(i){return typeof i=="string"}function Vl(i){return Object.prototype.toString.call(i)==="[object Date]"}function on(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function an(){try{return typeof Intl<"u"&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch{return!1}}function Hl(i){return Array.isArray(i)?i:[i]}function Kr(i,t,e){if(i.length!==0)return i.reduce((s,n)=>{let r=[t(n),n];return s&&e(s[0],r[0])===s[0]?s:r},null)[1]}function Bl(i,t){return t.reduce((e,s)=>(e[s]=i[s],e),{})}function ce(i,t){return Object.prototype.hasOwnProperty.call(i,t)}function os(i){if(i==null)return null;if(typeof i!="object")throw new G("Week settings must be an object");if(!bt(i.firstDay,1,7)||!bt(i.minimalDays,1,7)||!Array.isArray(i.weekend)||i.weekend.some(t=>!bt(t,1,7)))throw new G("Invalid week settings");return{firstDay:i.firstDay,minimalDays:i.minimalDays,weekend:Array.from(i.weekend)}}function bt(i,t,e){return ls(i)&&i>=t&&i<=e}function im(i,t){return i-t*Math.floor(i/t)}function Y(i,t=2){let e=i<0,s;return e?s="-"+(""+-i).padStart(t,"0"):s=(""+i).padStart(t,"0"),s}function Ut(i){if(!(O(i)||i===null||i===""))return parseInt(i,10)}function he(i){if(!(O(i)||i===null||i===""))return parseFloat(i)}function hs(i){if(!(O(i)||i===null||i==="")){let t=parseFloat("0."+i)*1e3;return Math.floor(t)}}function ei(i,t,e=!1){let s=10**t;return(e?Math.trunc:Math.round)(i*s)/s}function Me(i){return i%4===0&&(i%100!==0||i%400===0)}function le(i){return Me(i)?366:365}function ni(i,t){let e=im(t-1,12)+1,s=i+(t-e)/12;return e===2?Me(s)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][e-1]}function ti(i){let t=Date.UTC(i.year,i.month-1,i.day,i.hour,i.minute,i.second,i.millisecond);return i.year<100&&i.year>=0&&(t=new Date(t),t.setUTCFullYear(i.year,i.month-1,i.day)),+t}function zl(i,t,e){return-cn(ln(i,1,t),e)+t-1}function ke(i,t=4,e=1){let s=zl(i,t,e),n=zl(i+1,t,e);return(le(i)-s+n)/7}function us(i){return i>99?i:i>R.twoDigitCutoffYear?1900+i:2e3+i}function en(i,t,e,s=null){let n=new Date(i),r={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};s&&(r.timeZone=s);let o={timeZoneName:t,...r},a=new Intl.DateTimeFormat(e,o).formatToParts(n).find(l=>l.type.toLowerCase()==="timezonename");return a?a.value:null}function Se(i,t){let e=parseInt(i,10);Number.isNaN(e)&&(e=0);let s=parseInt(t,10)||0,n=e<0||Object.is(e,-0)?-s:s;return e*60+n}function Jr(i){let t=Number(i);if(typeof i=="boolean"||i===""||Number.isNaN(t))throw new G(`Invalid unit value ${i}`);return t}function ri(i,t){let e={};for(let s in i)if(ce(i,s)){let n=i[s];if(n==null)continue;e[t(s)]=Jr(n)}return e}function ae(i,t){let e=Math.trunc(Math.abs(i/60)),s=Math.trunc(Math.abs(i%60)),n=i>=0?"+":"-";switch(t){case"short":return`${n}${Y(e,2)}:${Y(s,2)}`;case"narrow":return`${n}${e}${s>0?`:${s}`:""}`;case"techie":return`${n}${Y(e,2)}${Y(s,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function cs(i){return Bl(i,["hour","minute","second","millisecond"])}var sm=["January","February","March","April","May","June","July","August","September","October","November","December"],Qr=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],nm=["J","F","M","A","M","J","J","A","S","O","N","D"];function zr(i){switch(i){case"narrow":return[...nm];case"short":return[...Qr];case"long":return[...sm];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var to=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],eo=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],rm=["M","T","W","T","F","S","S"];function Vr(i){switch(i){case"narrow":return[...rm];case"short":return[...eo];case"long":return[...to];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var Hr=["AM","PM"],om=["Before Christ","Anno Domini"],am=["BC","AD"],lm=["B","A"];function Br(i){switch(i){case"narrow":return[...lm];case"short":return[...am];case"long":return[...om];default:return null}}function $l(i){return Hr[i.hour<12?0:1]}function jl(i,t){return Vr(t)[i.weekday-1]}function Ul(i,t){return zr(t)[i.month-1]}function Yl(i,t){return Br(t)[i.year<0?0:1]}function _l(i,t,e="always",s=!1){let n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},r=["hours","minutes","seconds"].indexOf(i)===-1;if(e==="auto"&&r){let u=i==="days";switch(t){case 1:return u?"tomorrow":`next ${n[i][0]}`;case-1:return u?"yesterday":`last ${n[i][0]}`;case 0:return u?"today":`this ${n[i][0]}`;default:}}let o=Object.is(t,-0)||t<0,a=Math.abs(t),l=a===1,c=n[i],h=s?l?c[1]:c[2]||c[1]:l?n[i][0]:i;return o?`${a} ${h} ago`:`in ${a} ${h}`}function Zl(i,t){let e="";for(let s of i)s.literal?e+=s.val:e+=t(s.val);return e}var cm={D:re,DD:Vi,DDD:Hi,DDDD:Bi,t:$i,tt:ji,ttt:Ui,tttt:Yi,T:Zi,TT:qi,TTT:Gi,TTTT:Xi,f:Ki,ff:Qi,fff:es,ffff:ss,F:Ji,FF:ts,FFF:is,FFFF:ns},st=class i{static create(t,e={}){return new i(t,e)}static parseFormat(t){let e=null,s="",n=!1,r=[];for(let o=0;o0&&r.push({literal:n||/^\s+$/.test(s),val:s}),e=null,s="",n=!n):n||a===e?s+=a:(s.length>0&&r.push({literal:/^\s+$/.test(s),val:s}),s=a,e=a)}return s.length>0&&r.push({literal:n||/^\s+$/.test(s),val:s}),r}static macroTokenToFormatOpts(t){return cm[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t,e={}){return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t,e=0){if(this.opts.forceSimple)return Y(t,e);let s={...this.opts};return e>0&&(s.padTo=e),this.loc.numberFormatter(s).format(t)}formatDateTimeFromString(t,e){let s=this.loc.listingMode()==="en",n=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",r=(f,m)=>this.loc.extract(t,f,m),o=f=>t.isOffsetFixed&&t.offset===0&&f.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,f.format):"",a=()=>s?$l(t):r({hour:"numeric",hourCycle:"h12"},"dayperiod"),l=(f,m)=>s?Ul(t,f):r(m?{month:f}:{month:f,day:"numeric"},"month"),c=(f,m)=>s?jl(t,f):r(m?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday"),h=f=>{let m=i.macroTokenToFormatOpts(f);return m?this.formatWithSystemDefault(t,m):f},u=f=>s?Yl(t,f):r({era:f},"era"),d=f=>{switch(f){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return a();case"d":return n?r({day:"numeric"},"day"):this.num(t.day);case"dd":return n?r({day:"2-digit"},"day"):this.num(t.day,2);case"c":return this.num(t.weekday);case"ccc":return c("short",!0);case"cccc":return c("long",!0);case"ccccc":return c("narrow",!0);case"E":return this.num(t.weekday);case"EEE":return c("short",!1);case"EEEE":return c("long",!1);case"EEEEE":return c("narrow",!1);case"L":return n?r({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return n?r({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return l("short",!0);case"LLLL":return l("long",!0);case"LLLLL":return l("narrow",!0);case"M":return n?r({month:"numeric"},"month"):this.num(t.month);case"MM":return n?r({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return l("short",!1);case"MMMM":return l("long",!1);case"MMMMM":return l("narrow",!1);case"y":return n?r({year:"numeric"},"year"):this.num(t.year);case"yy":return n?r({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return n?r({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return n?r({year:"numeric"},"year"):this.num(t.year,6);case"G":return u("short");case"GG":return u("long");case"GGGGG":return u("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"n":return this.num(t.localWeekNumber);case"nn":return this.num(t.localWeekNumber,2);case"ii":return this.num(t.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(t.localWeekYear,4);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return h(f)}};return Zl(i.parseFormat(e),d)}formatDurationFromString(t,e){let s=l=>{switch(l[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},n=l=>c=>{let h=s(c);return h?this.num(l.get(h),c.length):c},r=i.parseFormat(e),o=r.reduce((l,{literal:c,val:h})=>c?l:l.concat(h),[]),a=t.shiftTo(...o.map(s).filter(l=>l));return Zl(r,n(a))}};var Gl=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function ai(...i){let t=i.reduce((e,s)=>e+s.source,"");return RegExp(`^${t}$`)}function li(...i){return t=>i.reduce(([e,s,n],r)=>{let[o,a,l]=r(t,n);return[{...e,...o},a||s,l]},[{},null,1]).slice(0,2)}function ci(i,...t){if(i==null)return[null,null];for(let[e,s]of t){let n=e.exec(i);if(n)return s(n)}return[null,null]}function Xl(...i){return(t,e)=>{let s={},n;for(n=0;nf!==void 0&&(m||f&&h)?-f:f;return[{years:d(he(e)),months:d(he(s)),weeks:d(he(n)),days:d(he(r)),hours:d(he(o)),minutes:d(he(a)),seconds:d(he(l),l==="-0"),milliseconds:d(hs(c),u)}]}var Sm={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function no(i,t,e,s,n,r,o){let a={year:t.length===2?us(Ut(t)):Ut(t),month:Qr.indexOf(e)+1,day:Ut(s),hour:Ut(n),minute:Ut(r)};return o&&(a.second=Ut(o)),i&&(a.weekday=i.length>3?to.indexOf(i)+1:eo.indexOf(i)+1),a}var km=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Mm(i){let[,t,e,s,n,r,o,a,l,c,h,u]=i,d=no(t,n,s,e,r,o,a),f;return l?f=Sm[l]:c?f=0:f=Se(h,u),[d,new et(f)]}function Tm(i){return i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var vm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Om=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Dm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function ql(i){let[,t,e,s,n,r,o,a]=i;return[no(t,n,s,e,r,o,a),et.utcInstance]}function Em(i){let[,t,e,s,n,r,o,a]=i;return[no(t,a,e,s,n,r,o),et.utcInstance]}var Im=ai(um,so),Cm=ai(dm,so),Fm=ai(fm,so),Am=ai(Jl),tc=li(bm,hi,ds,fs),Lm=li(mm,hi,ds,fs),Pm=li(gm,hi,ds,fs),Nm=li(hi,ds,fs);function ec(i){return ci(i,[Im,tc],[Cm,Lm],[Fm,Pm],[Am,Nm])}function ic(i){return ci(Tm(i),[km,Mm])}function sc(i){return ci(i,[vm,ql],[Om,ql],[Dm,Em])}function nc(i){return ci(i,[_m,wm])}var Rm=li(hi);function rc(i){return ci(i,[xm,Rm])}var Wm=ai(pm,ym),zm=ai(Ql),Vm=li(hi,ds,fs);function oc(i){return ci(i,[Wm,tc],[zm,Vm])}var ac="Invalid Duration",cc={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},Hm={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...cc},kt=146097/400,ui=146097/4800,Bm={years:{quarters:4,months:12,weeks:kt/7,days:kt,hours:kt*24,minutes:kt*24*60,seconds:kt*24*60*60,milliseconds:kt*24*60*60*1e3},quarters:{months:3,weeks:kt/28,days:kt/4,hours:kt*24/4,minutes:kt*24*60/4,seconds:kt*24*60*60/4,milliseconds:kt*24*60*60*1e3/4},months:{weeks:ui/7,days:ui,hours:ui*24,minutes:ui*24*60,seconds:ui*24*60*60,milliseconds:ui*24*60*60*1e3},...cc},Te=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],$m=Te.slice(0).reverse();function ue(i,t,e=!1){let s={values:e?t.values:{...i.values,...t.values||{}},loc:i.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||i.conversionAccuracy,matrix:t.matrix||i.matrix};return new Z(s)}function hc(i,t){let e=t.milliseconds??0;for(let s of $m.slice(1))t[s]&&(e+=t[s]*i[s].milliseconds);return e}function lc(i,t){let e=hc(i,t)<0?-1:1;Te.reduceRight((s,n)=>{if(O(t[n]))return s;if(s){let r=t[s]*e,o=i[n][s],a=Math.floor(r/o);t[n]+=a*e,t[s]-=a*o*e}return n},null),Te.reduce((s,n)=>{if(O(t[n]))return s;if(s){let r=t[s]%1;t[s]-=r,t[n]+=r*i[s][n]}return n},null)}function jm(i){let t={};for(let[e,s]of Object.entries(i))s!==0&&(t[e]=s);return t}var Z=class i{constructor(t){let e=t.conversionAccuracy==="longterm"||!1,s=e?Bm:Hm;t.matrix&&(s=t.matrix),this.values=t.values,this.loc=t.loc||W.create(),this.conversionAccuracy=e?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=s,this.isLuxonDuration=!0}static fromMillis(t,e){return i.fromObject({milliseconds:t},e)}static fromObject(t,e={}){if(t==null||typeof t!="object")throw new G(`Duration.fromObject: argument expected to be an object, got ${t===null?"null":typeof t}`);return new i({values:ri(t,i.normalizeUnit),loc:W.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(Et(t))return i.fromMillis(t);if(i.isDuration(t))return t;if(typeof t=="object")return i.fromObject(t);throw new G(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,e){let[s]=nc(t);return s?i.fromObject(s,e):i.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,e){let[s]=rc(t);return s?i.fromObject(s,e):i.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,e=null){if(!t)throw new G("need to specify a reason the Duration is invalid");let s=t instanceof it?t:new it(t,e);if(R.throwOnInvalid)throw new Qs(s);return new i({invalid:s})}static normalizeUnit(t){let e={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t&&t.toLowerCase()];if(!e)throw new Qe(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,e={}){let s={...e,floor:e.round!==!1&&e.floor!==!1};return this.isValid?st.create(this.loc,s).formatDurationFromString(this,t):ac}toHuman(t={}){if(!this.isValid)return ac;let e=Te.map(s=>{let n=this.values[s];return O(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:s.slice(0,-1)}).format(n)}).filter(s=>s);return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(e)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return this.years!==0&&(t+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+"M"),this.weeks!==0&&(t+=this.weeks+"W"),this.days!==0&&(t+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+="T"),this.hours!==0&&(t+=this.hours+"H"),this.minutes!==0&&(t+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(t+=ei(this.seconds+this.milliseconds/1e3,3)+"S"),t==="P"&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;let e=this.toMillis();return e<0||e>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1},I.fromMillis(e,{zone:"UTC"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?hc(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let e=i.fromDurationLike(t),s={};for(let n of Te)(ce(e.values,n)||ce(this.values,n))&&(s[n]=e.get(n)+this.get(n));return ue(this,{values:s},!0)}minus(t){if(!this.isValid)return this;let e=i.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;let e={};for(let s of Object.keys(this.values))e[s]=Jr(t(this.values[s],s));return ue(this,{values:e},!0)}get(t){return this[i.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let e={...this.values,...ri(t,i.normalizeUnit)};return ue(this,{values:e})}reconfigure({locale:t,numberingSystem:e,conversionAccuracy:s,matrix:n}={}){let o={loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:n,conversionAccuracy:s};return ue(this,o)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;let t=this.toObject();return lc(this.matrix,t),ue(this,{values:t},!0)}rescale(){if(!this.isValid)return this;let t=jm(this.normalize().shiftToAll().toObject());return ue(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(o=>i.normalizeUnit(o));let e={},s={},n=this.toObject(),r;for(let o of Te)if(t.indexOf(o)>=0){r=o;let a=0;for(let c in s)a+=this.matrix[c][o]*s[c],s[c]=0;Et(n[o])&&(a+=n[o]);let l=Math.trunc(a);e[o]=l,s[o]=(a*1e3-l*1e3)/1e3}else Et(n[o])&&(s[o]=n[o]);for(let o in s)s[o]!==0&&(e[r]+=o===r?s[o]:s[o]/this.matrix[r][o]);return lc(this.matrix,e),ue(this,{values:e},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let t={};for(let e of Object.keys(this.values))t[e]=this.values[e]===0?0:-this.values[e];return ue(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function e(s,n){return s===void 0||s===0?n===void 0||n===0:s===n}for(let s of Te)if(!e(this.values[s],t.values[s]))return!1;return!0}};var di="Invalid Interval";function Um(i,t){return!i||!i.isValid?Yt.invalid("missing or invalid start"):!t||!t.isValid?Yt.invalid("missing or invalid end"):tt:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:e}={}){return this.isValid?i.fromDateTimes(t||this.s,e||this.e):this}splitAt(...t){if(!this.isValid)return[];let e=t.map(fi).filter(o=>this.contains(o)).sort((o,a)=>o.toMillis()-a.toMillis()),s=[],{s:n}=this,r=0;for(;n+this.e?this.e:o;s.push(i.fromDateTimes(n,a)),n=a,r+=1}return s}splitBy(t){let e=Z.fromDurationLike(t);if(!this.isValid||!e.isValid||e.as("milliseconds")===0)return[];let{s}=this,n=1,r,o=[];for(;sl*n));r=+a>+this.e?this.e:a,o.push(i.fromDateTimes(s,r)),s=r,n+=1}return o}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;let e=this.s>t.s?this.s:t.s,s=this.e=s?null:i.fromDateTimes(e,s)}union(t){if(!this.isValid)return this;let e=this.st.e?this.e:t.e;return i.fromDateTimes(e,s)}static merge(t){let[e,s]=t.sort((n,r)=>n.s-r.s).reduce(([n,r],o)=>r?r.overlaps(o)||r.abutsStart(o)?[n,r.union(o)]:[n.concat([r]),o]:[n,o],[[],null]);return s&&e.push(s),e}static xor(t){let e=null,s=0,n=[],r=t.map(l=>[{time:l.s,type:"s"},{time:l.e,type:"e"}]),o=Array.prototype.concat(...r),a=o.sort((l,c)=>l.time-c.time);for(let l of a)s+=l.type==="s"?1:-1,s===1?e=l.time:(e&&+e!=+l.time&&n.push(i.fromDateTimes(e,l.time)),e=null);return i.merge(n)}difference(...t){return i.xor([this].concat(t)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:di}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=re,e={}){return this.isValid?st.create(this.s.loc.clone(e),t).formatInterval(this):di}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:di}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:di}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:di}toFormat(t,{separator:e=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(t)}${e}${this.e.toFormat(t)}`:di}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):Z.invalid(this.invalidReason)}mapEndpoints(t){return i.fromDateTimes(t(this.s),t(this.e))}};var Zt=class{static hasDST(t=R.defaultZone){let e=I.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return at.isValidZone(t)}static normalizeZone(t){return Dt(t,R.defaultZone)}static getStartOfWeek({locale:t=null,locObj:e=null}={}){return(e||W.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:t=null,locObj:e=null}={}){return(e||W.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:t=null,locObj:e=null}={}){return(e||W.create(t)).getWeekendDays().slice()}static months(t="long",{locale:e=null,numberingSystem:s=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||W.create(e,s,r)).months(t)}static monthsFormat(t="long",{locale:e=null,numberingSystem:s=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||W.create(e,s,r)).months(t,!0)}static weekdays(t="long",{locale:e=null,numberingSystem:s=null,locObj:n=null}={}){return(n||W.create(e,s,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:e=null,numberingSystem:s=null,locObj:n=null}={}){return(n||W.create(e,s,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return W.create(t).meridiems()}static eras(t="short",{locale:e=null}={}){return W.create(e,null,"gregory").eras(t)}static features(){return{relative:on(),localeWeek:an()}}};function uc(i,t){let e=n=>n.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),s=e(t)-e(i);return Math.floor(Z.fromMillis(s).as("days"))}function Ym(i,t,e){let s=[["years",(l,c)=>c.year-l.year],["quarters",(l,c)=>c.quarter-l.quarter+(c.year-l.year)*4],["months",(l,c)=>c.month-l.month+(c.year-l.year)*12],["weeks",(l,c)=>{let h=uc(l,c);return(h-h%7)/7}],["days",uc]],n={},r=i,o,a;for(let[l,c]of s)e.indexOf(l)>=0&&(o=l,n[l]=c(i,t),a=r.plus(n),a>t?(n[l]--,i=r.plus(n),i>t&&(a=i,n[l]--,i=r.plus(n))):i=a);return[i,n,a,o]}function dc(i,t,e,s){let[n,r,o,a]=Ym(i,t,e),l=t-n,c=e.filter(u=>["hours","minutes","seconds","milliseconds"].indexOf(u)>=0);c.length===0&&(o0?Z.fromMillis(l,s).shiftTo(...c).plus(h):h}var Zm="missing Intl.DateTimeFormat.formatToParts support";function z(i,t=e=>e){return{regex:i,deser:([e])=>t(kl(e))}}var qm="\xA0",gc=`[ ${qm}]`,pc=new RegExp(gc,"g");function Gm(i){return i.replace(/\./g,"\\.?").replace(pc,gc)}function fc(i){return i.replace(/\./g,"").replace(pc," ").toLowerCase()}function It(i,t){return i===null?null:{regex:RegExp(i.map(Gm).join("|")),deser:([e])=>i.findIndex(s=>fc(e)===fc(s))+t}}function mc(i,t){return{regex:i,deser:([,e,s])=>Se(e,s),groups:t}}function un(i){return{regex:i,deser:([t])=>t}}function Xm(i){return i.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Km(i,t){let e=wt(t),s=wt(t,"{2}"),n=wt(t,"{3}"),r=wt(t,"{4}"),o=wt(t,"{6}"),a=wt(t,"{1,2}"),l=wt(t,"{1,3}"),c=wt(t,"{1,6}"),h=wt(t,"{1,9}"),u=wt(t,"{2,4}"),d=wt(t,"{4,6}"),f=p=>({regex:RegExp(Xm(p.val)),deser:([y])=>y,literal:!0}),g=(p=>{if(i.literal)return f(p);switch(p.val){case"G":return It(t.eras("short"),0);case"GG":return It(t.eras("long"),0);case"y":return z(c);case"yy":return z(u,us);case"yyyy":return z(r);case"yyyyy":return z(d);case"yyyyyy":return z(o);case"M":return z(a);case"MM":return z(s);case"MMM":return It(t.months("short",!0),1);case"MMMM":return It(t.months("long",!0),1);case"L":return z(a);case"LL":return z(s);case"LLL":return It(t.months("short",!1),1);case"LLLL":return It(t.months("long",!1),1);case"d":return z(a);case"dd":return z(s);case"o":return z(l);case"ooo":return z(n);case"HH":return z(s);case"H":return z(a);case"hh":return z(s);case"h":return z(a);case"mm":return z(s);case"m":return z(a);case"q":return z(a);case"qq":return z(s);case"s":return z(a);case"ss":return z(s);case"S":return z(l);case"SSS":return z(n);case"u":return un(h);case"uu":return un(a);case"uuu":return z(e);case"a":return It(t.meridiems(),0);case"kkkk":return z(r);case"kk":return z(u,us);case"W":return z(a);case"WW":return z(s);case"E":case"c":return z(e);case"EEE":return It(t.weekdays("short",!1),1);case"EEEE":return It(t.weekdays("long",!1),1);case"ccc":return It(t.weekdays("short",!0),1);case"cccc":return It(t.weekdays("long",!0),1);case"Z":case"ZZ":return mc(new RegExp(`([+-]${a.source})(?::(${s.source}))?`),2);case"ZZZ":return mc(new RegExp(`([+-]${a.source})(${s.source})?`),2);case"z":return un(/[a-z_+-/]{1,256}?/i);case" ":return un(/[^\S\n\r]/);default:return f(p)}})(i)||{invalidReason:Zm};return g.token=i,g}var Jm={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function Qm(i,t,e){let{type:s,value:n}=i;if(s==="literal"){let l=/^\s+$/.test(n);return{literal:!l,val:l?" ":n}}let r=t[s],o=s;s==="hour"&&(t.hour12!=null?o=t.hour12?"hour12":"hour24":t.hourCycle!=null?t.hourCycle==="h11"||t.hourCycle==="h12"?o="hour12":o="hour24":o=e.hour12?"hour12":"hour24");let a=Jm[o];if(typeof a=="object"&&(a=a[r]),a)return{literal:!1,val:a}}function tg(i){return[`^${i.map(e=>e.regex).reduce((e,s)=>`${e}(${s.source})`,"")}$`,i]}function eg(i,t,e){let s=i.match(t);if(s){let n={},r=1;for(let o in e)if(ce(e,o)){let a=e[o],l=a.groups?a.groups+1:1;!a.literal&&a.token&&(n[a.token.val[0]]=a.deser(s.slice(r,r+l))),r+=l}return[s,n]}else return[s,{}]}function ig(i){let t=r=>{switch(r){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},e=null,s;return O(i.z)||(e=at.create(i.z)),O(i.Z)||(e||(e=new et(i.Z)),s=i.Z),O(i.q)||(i.M=(i.q-1)*3+1),O(i.h)||(i.h<12&&i.a===1?i.h+=12:i.h===12&&i.a===0&&(i.h=0)),i.G===0&&i.y&&(i.y=-i.y),O(i.u)||(i.S=hs(i.u)),[Object.keys(i).reduce((r,o)=>{let a=t(o);return a&&(r[a]=i[o]),r},{}),e,s]}var ro=null;function sg(){return ro||(ro=I.fromMillis(1555555555555)),ro}function ng(i,t){if(i.literal)return i;let e=st.macroTokenToFormatOpts(i.val),s=lo(e,t);return s==null||s.includes(void 0)?i:s}function oo(i,t){return Array.prototype.concat(...i.map(e=>ng(e,t)))}var ms=class{constructor(t,e){if(this.locale=t,this.format=e,this.tokens=oo(st.parseFormat(e),t),this.units=this.tokens.map(s=>Km(s,t)),this.disqualifyingUnit=this.units.find(s=>s.invalidReason),!this.disqualifyingUnit){let[s,n]=tg(this.units);this.regex=RegExp(s,"i"),this.handlers=n}}explainFromTokens(t){if(this.isValid){let[e,s]=eg(t,this.regex,this.handlers),[n,r,o]=s?ig(s):[null,null,void 0];if(ce(s,"a")&&ce(s,"H"))throw new Tt("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:this.tokens,regex:this.regex,rawMatches:e,matches:s,result:n,zone:r,specificOffset:o}}else return{input:t,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}};function ao(i,t,e){return new ms(i,e).explainFromTokens(t)}function yc(i,t,e){let{result:s,zone:n,specificOffset:r,invalidReason:o}=ao(i,t,e);return[s,n,r,o]}function lo(i,t){if(!i)return null;let s=st.create(t,i).dtFormatter(sg()),n=s.formatToParts(),r=s.resolvedOptions();return n.map(o=>Qm(o,i,r))}var co="Invalid DateTime",bc=864e13;function gs(i){return new it("unsupported zone",`the zone "${i.name}" is not supported`)}function ho(i){return i.weekData===null&&(i.weekData=as(i.c)),i.weekData}function uo(i){return i.localWeekData===null&&(i.localWeekData=as(i.c,i.loc.getMinDaysInFirstWeek(),i.loc.getStartOfWeek())),i.localWeekData}function ve(i,t){let e={ts:i.ts,zone:i.zone,c:i.c,o:i.o,loc:i.loc,invalid:i.invalid};return new I({...e,...t,old:e})}function Tc(i,t,e){let s=i-t*60*1e3,n=e.offset(s);if(t===n)return[s,t];s-=(n-t)*60*1e3;let r=e.offset(s);return n===r?[s,n]:[i-Math.min(n,r)*60*1e3,Math.max(n,r)]}function dn(i,t){i+=t*60*1e3;let e=new Date(i);return{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate(),hour:e.getUTCHours(),minute:e.getUTCMinutes(),second:e.getUTCSeconds(),millisecond:e.getUTCMilliseconds()}}function mn(i,t,e){return Tc(ti(i),t,e)}function xc(i,t){let e=i.o,s=i.c.year+Math.trunc(t.years),n=i.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,r={...i.c,year:s,month:n,day:Math.min(i.c.day,ni(s,n))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},o=Z.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),a=ti(r),[l,c]=Tc(a,e,i.zone);return o!==0&&(l+=o,c=i.zone.offset(l)),{ts:l,o:c}}function mi(i,t,e,s,n,r){let{setZone:o,zone:a}=e;if(i&&Object.keys(i).length!==0||t){let l=t||a,c=I.fromObject(i,{...e,zone:l,specificOffset:r});return o?c:c.setZone(a)}else return I.invalid(new it("unparsable",`the input "${n}" can't be parsed as ${s}`))}function fn(i,t,e=!0){return i.isValid?st.create(W.create("en-US"),{allowZ:e,forceSimple:!0}).formatDateTimeFromString(i,t):null}function fo(i,t){let e=i.c.year>9999||i.c.year<0,s="";return e&&i.c.year>=0&&(s+="+"),s+=Y(i.c.year,e?6:4),t?(s+="-",s+=Y(i.c.month),s+="-",s+=Y(i.c.day)):(s+=Y(i.c.month),s+=Y(i.c.day)),s}function _c(i,t,e,s,n,r){let o=Y(i.c.hour);return t?(o+=":",o+=Y(i.c.minute),(i.c.millisecond!==0||i.c.second!==0||!e)&&(o+=":")):o+=Y(i.c.minute),(i.c.millisecond!==0||i.c.second!==0||!e)&&(o+=Y(i.c.second),(i.c.millisecond!==0||!s)&&(o+=".",o+=Y(i.c.millisecond,3))),n&&(i.isOffsetFixed&&i.offset===0&&!r?o+="Z":i.o<0?(o+="-",o+=Y(Math.trunc(-i.o/60)),o+=":",o+=Y(Math.trunc(-i.o%60))):(o+="+",o+=Y(Math.trunc(i.o/60)),o+=":",o+=Y(Math.trunc(i.o%60)))),r&&(o+="["+i.zone.ianaName+"]"),o}var vc={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},rg={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},og={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Oc=["year","month","day","hour","minute","second","millisecond"],ag=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],lg=["year","ordinal","hour","minute","second","millisecond"];function cg(i){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[i.toLowerCase()];if(!t)throw new Qe(i);return t}function wc(i){switch(i.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return cg(i)}}function hg(i){return pn[i]||(gn===void 0&&(gn=R.now()),pn[i]=i.offset(gn)),pn[i]}function Sc(i,t){let e=Dt(t.zone,R.defaultZone);if(!e.isValid)return I.invalid(gs(e));let s=W.fromObject(t),n,r;if(O(i.year))n=R.now();else{for(let l of Oc)O(i[l])&&(i[l]=vc[l]);let o=Gr(i)||Xr(i);if(o)return I.invalid(o);let a=hg(e);[n,r]=mn(i,a,e)}return new I({ts:n,zone:e,loc:s,o:r})}function kc(i,t,e){let s=O(e.round)?!0:e.round,n=(o,a)=>(o=ei(o,s||e.calendary?0:2,!0),t.loc.clone(e).relFormatter(e).format(o,a)),r=o=>e.calendary?t.hasSame(i,o)?0:t.startOf(o).diff(i.startOf(o),o).get(o):t.diff(i,o).get(o);if(e.unit)return n(r(e.unit),e.unit);for(let o of e.units){let a=r(o);if(Math.abs(a)>=1)return n(a,o)}return n(i>t?-0:0,e.units[e.units.length-1])}function Mc(i){let t={},e;return i.length>0&&typeof i[i.length-1]=="object"?(t=i[i.length-1],e=Array.from(i).slice(0,i.length-1)):e=Array.from(i),[t,e]}var gn,pn={},I=class i{constructor(t){let e=t.zone||R.defaultZone,s=t.invalid||(Number.isNaN(t.ts)?new it("invalid input"):null)||(e.isValid?null:gs(e));this.ts=O(t.ts)?R.now():t.ts;let n=null,r=null;if(!s)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[n,r]=[t.old.c,t.old.o];else{let a=Et(t.o)&&!t.old?t.o:e.offset(this.ts);n=dn(this.ts,a),s=Number.isNaN(n.year)?new it("invalid input"):null,n=s?null:n,r=s?null:a}this._zone=e,this.loc=t.loc||W.create(),this.invalid=s,this.weekData=null,this.localWeekData=null,this.c=n,this.o=r,this.isLuxonDateTime=!0}static now(){return new i({})}static local(){let[t,e]=Mc(arguments),[s,n,r,o,a,l,c]=e;return Sc({year:s,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static utc(){let[t,e]=Mc(arguments),[s,n,r,o,a,l,c]=e;return t.zone=et.utcInstance,Sc({year:s,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static fromJSDate(t,e={}){let s=Vl(t)?t.valueOf():NaN;if(Number.isNaN(s))return i.invalid("invalid input");let n=Dt(e.zone,R.defaultZone);return n.isValid?new i({ts:s,zone:n,loc:W.fromObject(e)}):i.invalid(gs(n))}static fromMillis(t,e={}){if(Et(t))return t<-bc||t>bc?i.invalid("Timestamp out of range"):new i({ts:t,zone:Dt(e.zone,R.defaultZone),loc:W.fromObject(e)});throw new G(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,e={}){if(Et(t))return new i({ts:t*1e3,zone:Dt(e.zone,R.defaultZone),loc:W.fromObject(e)});throw new G("fromSeconds requires a numerical input")}static fromObject(t,e={}){t=t||{};let s=Dt(e.zone,R.defaultZone);if(!s.isValid)return i.invalid(gs(s));let n=W.fromObject(e),r=ri(t,wc),{minDaysInFirstWeek:o,startOfWeek:a}=qr(r,n),l=R.now(),c=O(e.specificOffset)?s.offset(l):e.specificOffset,h=!O(r.ordinal),u=!O(r.year),d=!O(r.month)||!O(r.day),f=u||d,m=r.weekYear||r.weekNumber;if((f||h)&&m)throw new Tt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(d&&h)throw new Tt("Can't mix ordinal dates with month/day");let g=m||r.weekday&&!f,p,y,b=dn(l,c);g?(p=ag,y=rg,b=as(b,o,a)):h?(p=lg,y=og,b=hn(b)):(p=Oc,y=vc);let _=!1;for(let C of p){let N=r[C];O(N)?_?r[C]=y[C]:r[C]=b[C]:_=!0}let w=g?Rl(r,o,a):h?Wl(r):Gr(r),x=w||Xr(r);if(x)return i.invalid(x);let S=g?Yr(r,o,a):h?Zr(r):r,[k,v]=mn(S,c,s),T=new i({ts:k,zone:s,o:v,loc:n});return r.weekday&&f&&t.weekday!==T.weekday?i.invalid("mismatched weekday",`you can't specify both a weekday of ${r.weekday} and a date of ${T.toISO()}`):T.isValid?T:i.invalid(T.invalid)}static fromISO(t,e={}){let[s,n]=ec(t);return mi(s,n,e,"ISO 8601",t)}static fromRFC2822(t,e={}){let[s,n]=ic(t);return mi(s,n,e,"RFC 2822",t)}static fromHTTP(t,e={}){let[s,n]=sc(t);return mi(s,n,e,"HTTP",e)}static fromFormat(t,e,s={}){if(O(t)||O(e))throw new G("fromFormat requires an input string and a format");let{locale:n=null,numberingSystem:r=null}=s,o=W.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0}),[a,l,c,h]=yc(o,t,e);return h?i.invalid(h):mi(a,l,s,`format ${e}`,t,c)}static fromString(t,e,s={}){return i.fromFormat(t,e,s)}static fromSQL(t,e={}){let[s,n]=oc(t);return mi(s,n,e,"SQL",t)}static invalid(t,e=null){if(!t)throw new G("need to specify a reason the DateTime is invalid");let s=t instanceof it?t:new it(t,e);if(R.throwOnInvalid)throw new Ks(s);return new i({invalid:s})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,e={}){let s=lo(t,W.fromObject(e));return s?s.map(n=>n?n.val:null).join(""):null}static expandFormat(t,e={}){return oo(st.parseFormat(t),W.fromObject(e)).map(n=>n.val).join("")}static resetCache(){gn=void 0,pn={}}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?ho(this).weekYear:NaN}get weekNumber(){return this.isValid?ho(this).weekNumber:NaN}get weekday(){return this.isValid?ho(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?uo(this).weekday:NaN}get localWeekNumber(){return this.isValid?uo(this).weekNumber:NaN}get localWeekYear(){return this.isValid?uo(this).weekYear:NaN}get ordinal(){return this.isValid?hn(this.c).ordinal:NaN}get monthShort(){return this.isValid?Zt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Zt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Zt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Zt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let t=864e5,e=6e4,s=ti(this.c),n=this.zone.offset(s-t),r=this.zone.offset(s+t),o=this.zone.offset(s-n*e),a=this.zone.offset(s-r*e);if(o===a)return[this];let l=s-o*e,c=s-a*e,h=dn(l,o),u=dn(c,a);return h.hour===u.hour&&h.minute===u.minute&&h.second===u.second&&h.millisecond===u.millisecond?[ve(this,{ts:l}),ve(this,{ts:c})]:[this]}get isInLeapYear(){return Me(this.year)}get daysInMonth(){return ni(this.year,this.month)}get daysInYear(){return this.isValid?le(this.year):NaN}get weeksInWeekYear(){return this.isValid?ke(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?ke(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(t={}){let{locale:e,numberingSystem:s,calendar:n}=st.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:s,outputCalendar:n}}toUTC(t=0,e={}){return this.setZone(et.instance(t),e)}toLocal(){return this.setZone(R.defaultZone)}setZone(t,{keepLocalTime:e=!1,keepCalendarTime:s=!1}={}){if(t=Dt(t,R.defaultZone),t.equals(this.zone))return this;if(t.isValid){let n=this.ts;if(e||s){let r=t.offset(this.ts),o=this.toObject();[n]=mn(o,r,t)}return ve(this,{ts:n,zone:t})}else return i.invalid(gs(t))}reconfigure({locale:t,numberingSystem:e,outputCalendar:s}={}){let n=this.loc.clone({locale:t,numberingSystem:e,outputCalendar:s});return ve(this,{loc:n})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;let e=ri(t,wc),{minDaysInFirstWeek:s,startOfWeek:n}=qr(e,this.loc),r=!O(e.weekYear)||!O(e.weekNumber)||!O(e.weekday),o=!O(e.ordinal),a=!O(e.year),l=!O(e.month)||!O(e.day),c=a||l,h=e.weekYear||e.weekNumber;if((c||o)&&h)throw new Tt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&o)throw new Tt("Can't mix ordinal dates with month/day");let u;r?u=Yr({...as(this.c,s,n),...e},s,n):O(e.ordinal)?(u={...this.toObject(),...e},O(e.day)&&(u.day=Math.min(ni(u.year,u.month),u.day))):u=Zr({...hn(this.c),...e});let[d,f]=mn(u,this.o,this.zone);return ve(this,{ts:d,o:f})}plus(t){if(!this.isValid)return this;let e=Z.fromDurationLike(t);return ve(this,xc(this,e))}minus(t){if(!this.isValid)return this;let e=Z.fromDurationLike(t).negate();return ve(this,xc(this,e))}startOf(t,{useLocaleWeeks:e=!1}={}){if(!this.isValid)return this;let s={},n=Z.normalizeUnit(t);switch(n){case"years":s.month=1;case"quarters":case"months":s.day=1;case"weeks":case"days":s.hour=0;case"hours":s.minute=0;case"minutes":s.second=0;case"seconds":s.millisecond=0;break;case"milliseconds":break}if(n==="weeks")if(e){let r=this.loc.getStartOfWeek(),{weekday:o}=this;othis.valueOf(),a=o?this:t,l=o?t:this,c=dc(a,l,r,n);return o?c.negate():c}diffNow(t="milliseconds",e={}){return this.diff(i.now(),t,e)}until(t){return this.isValid?Yt.fromDateTimes(this,t):this}hasSame(t,e,s){if(!this.isValid)return!1;let n=t.valueOf(),r=this.setZone(t.zone,{keepLocalTime:!0});return r.startOf(e,s)<=n&&n<=r.endOf(e,s)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;let e=t.base||i.fromObject({},{zone:this.zone}),s=t.padding?thise.valueOf(),Math.min)}static max(...t){if(!t.every(i.isDateTime))throw new G("max requires all arguments be DateTimes");return Kr(t,e=>e.valueOf(),Math.max)}static fromFormatExplain(t,e,s={}){let{locale:n=null,numberingSystem:r=null}=s,o=W.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});return ao(o,t,e)}static fromStringExplain(t,e,s={}){return i.fromFormatExplain(t,e,s)}static buildFormatParser(t,e={}){let{locale:s=null,numberingSystem:n=null}=e,r=W.fromOpts({locale:s,numberingSystem:n,defaultToEN:!0});return new ms(r,t)}static fromFormatParser(t,e,s={}){if(O(t)||O(e))throw new G("fromFormatParser requires an input string and a format parser");let{locale:n=null,numberingSystem:r=null}=s,o=W.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});if(!o.equals(e.locale))throw new G(`fromFormatParser called with a locale of ${o}, but the format parser was created for ${e.locale}`);let{result:a,zone:l,specificOffset:c,invalidReason:h}=e.explainFromTokens(t);return h?i.invalid(h):mi(a,l,s,`format ${e.format}`,t,c)}static get DATE_SHORT(){return re}static get DATE_MED(){return Vi}static get DATE_MED_WITH_WEEKDAY(){return Er}static get DATE_FULL(){return Hi}static get DATE_HUGE(){return Bi}static get TIME_SIMPLE(){return $i}static get TIME_WITH_SECONDS(){return ji}static get TIME_WITH_SHORT_OFFSET(){return Ui}static get TIME_WITH_LONG_OFFSET(){return Yi}static get TIME_24_SIMPLE(){return Zi}static get TIME_24_WITH_SECONDS(){return qi}static get TIME_24_WITH_SHORT_OFFSET(){return Gi}static get TIME_24_WITH_LONG_OFFSET(){return Xi}static get DATETIME_SHORT(){return Ki}static get DATETIME_SHORT_WITH_SECONDS(){return Ji}static get DATETIME_MED(){return Qi}static get DATETIME_MED_WITH_SECONDS(){return ts}static get DATETIME_MED_WITH_WEEKDAY(){return Ir}static get DATETIME_FULL(){return es}static get DATETIME_FULL_WITH_SECONDS(){return is}static get DATETIME_HUGE(){return ss}static get DATETIME_HUGE_WITH_SECONDS(){return ns}};function fi(i){if(I.isDateTime(i))return i;if(i&&i.valueOf&&Et(i.valueOf()))return I.fromJSDate(i);if(i&&typeof i=="object")return I.fromObject(i);throw new G(`Unknown datetime argument: ${i}, of type ${typeof i}`)}var ug={datetime:I.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:I.TIME_WITH_SECONDS,minute:I.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};Or._date.override({_id:"luxon",_create:function(i){return I.fromMillis(i,this.options)},init(i){this.options.locale||(this.options.locale=i.locale)},formats:function(){return ug},parse:function(i,t){let e=this.options,s=typeof i;return i===null||s==="undefined"?null:(s==="number"?i=this._create(i):s==="string"?typeof t=="string"?i=I.fromFormat(i,t,e):i=I.fromISO(i,e):i instanceof Date?i=I.fromJSDate(i,e):s==="object"&&!(i instanceof I)&&(i=I.fromObject(i,e)),i.isValid?i.valueOf():null)},format:function(i,t){let e=this._create(i);return typeof t=="string"?e.toFormat(t):e.toLocaleString(t)},add:function(i,t,e){let s={};return s[e]=t,this._create(i).plus(s).valueOf()},diff:function(i,t,e){return this._create(i).diff(this._create(t)).as(e).valueOf()},startOf:function(i,t,e){if(t==="isoWeek"){e=Math.trunc(Math.min(Math.max(0,e),6));let s=this._create(i);return s.minus({days:(s.weekday-e+7)%7}).startOf("day").valueOf()}return t?this._create(i).startOf(t).valueOf():i},endOf:function(i,t){return this._create(i).endOf(t).valueOf()}});function yn({cachedData:i,options:t,type:e}){return{init:function(){this.initChart(),this.$wire.$on("updateChartData",({data:s})=>{yn=this.getChart(),yn.data=s,yn.update("resize")}),Alpine.effect(()=>{Alpine.store("theme"),this.$nextTick(()=>{this.getChart()&&(this.getChart().destroy(),this.initChart())})}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{Alpine.store("theme")==="system"&&this.$nextTick(()=>{this.getChart().destroy(),this.initChart()})})},initChart:function(s=null){var o,a,l,c,h,u,d,f,m;if(!this.$refs.canvas||!this.$refs.backgroundColorElement||!this.$refs.borderColorElement||!this.$refs.textColorElement||!this.$refs.gridColorElement)return;Rt.defaults.animation.duration=0,Rt.defaults.backgroundColor=getComputedStyle(this.$refs.backgroundColorElement).color;let n=getComputedStyle(this.$refs.borderColorElement).color;Rt.defaults.borderColor=n,Rt.defaults.color=getComputedStyle(this.$refs.textColorElement).color,Rt.defaults.font.family=getComputedStyle(this.$el).fontFamily,Rt.defaults.plugins.legend.labels.boxWidth=12,Rt.defaults.plugins.legend.position="bottom";let r=getComputedStyle(this.$refs.gridColorElement).color;return t??(t={}),t.borderWidth??(t.borderWidth=2),t.pointBackgroundColor??(t.pointBackgroundColor=n),t.pointHitRadius??(t.pointHitRadius=4),t.pointRadius??(t.pointRadius=2),t.scales??(t.scales={}),(o=t.scales).x??(o.x={}),(a=t.scales.x).grid??(a.grid={}),(l=t.scales.x.grid).color??(l.color=r),(c=t.scales.x.grid).display??(c.display=!1),(h=t.scales.x.grid).drawBorder??(h.drawBorder=!1),(u=t.scales).y??(u.y={}),(d=t.scales.y).grid??(d.grid={}),(f=t.scales.y.grid).color??(f.color=r),(m=t.scales.y.grid).drawBorder??(m.drawBorder=!1),new Rt(this.$refs.canvas,{type:e,data:s??i,options:t,plugins:window.filamentChartJsPlugins??[]})},getChart:function(){return this.$refs.canvas?Rt.getChart(this.$refs.canvas):null}}}export{yn as default}; +/*! Bundled license information: + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * @kurkle/color v0.2.1 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + *) + +chart.js/dist/chart.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) + +chartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js: + (*! + * chartjs-adapter-luxon v1.3.1 + * https://www.chartjs.org + * (c) 2023 chartjs-adapter-luxon Contributors + * Released under the MIT license + *) +*/ diff --git a/public/js/filament/widgets/components/stats-overview/stat/chart.js b/public/js/filament/widgets/components/stats-overview/stat/chart.js new file mode 100644 index 000000000..b607cd185 --- /dev/null +++ b/public/js/filament/widgets/components/stats-overview/stat/chart.js @@ -0,0 +1,29 @@ +function rt(){}var Hs=function(){let i=0;return function(){return i++}}();function T(i){return i===null||typeof i>"u"}function I(i){if(Array.isArray&&Array.isArray(i))return!0;let t=Object.prototype.toString.call(i);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function D(i){return i!==null&&Object.prototype.toString.call(i)==="[object Object]"}var W=i=>(typeof i=="number"||i instanceof Number)&&isFinite(+i);function Q(i,t){return W(i)?i:t}function C(i,t){return typeof i>"u"?t:i}var js=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100:i/t,Di=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100*t:+i;function z(i,t,e){if(i&&typeof i.call=="function")return i.apply(e,t)}function E(i,t,e,s){let n,o,a;if(I(i))if(o=i.length,s)for(n=o-1;n>=0;n--)t.call(e,i[n],n);else for(n=0;ni,x:i=>i.x,y:i=>i.y};function gt(i,t){return(Ds[t]||(Ds[t]=Io(t)))(i)}function Io(i){let t=zo(i);return e=>{for(let s of t){if(s==="")break;e=e&&e[s]}return e}}function zo(i){let t=i.split("."),e=[],s="";for(let n of t)s+=n,s.endsWith("\\")?s=s.slice(0,-1)+".":(e.push(s),s="");return e}function Xe(i){return i.charAt(0).toUpperCase()+i.slice(1)}var J=i=>typeof i<"u",ft=i=>typeof i=="function",Oi=(i,t)=>{if(i.size!==t.size)return!1;for(let e of i)if(!t.has(e))return!1;return!0};function Ys(i){return i.type==="mouseup"||i.type==="click"||i.type==="contextmenu"}var B=Math.PI,F=2*B,Bo=F+B,je=Number.POSITIVE_INFINITY,Vo=B/180,V=B/2,ue=B/4,Os=B*2/3,tt=Math.log10,ot=Math.sign;function Ai(i){let t=Math.round(i);i=Ut(i,t,i/1e3)?t:i;let e=Math.pow(10,Math.floor(tt(i))),s=i/e;return(s<=1?1:s<=2?2:s<=5?5:10)*e}function Xs(i){let t=[],e=Math.sqrt(i),s;for(s=1;sn-o).pop(),t}function Lt(i){return!isNaN(parseFloat(i))&&isFinite(i)}function Ut(i,t,e){return Math.abs(i-t)=i}function Ti(i,t,e){let s,n,o;for(s=0,n=i.length;sl&&c=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function Ke(i,t,e){e=e||(a=>i[a]1;)o=n+s>>1,e(o)?n=o:s=o;return{lo:n,hi:s}}var at=(i,t,e,s)=>Ke(i,e,s?n=>i[n][t]<=e:n=>i[n][t]Ke(i,e,s=>i[s][t]>=e);function Gs(i,t,e){let s=0,n=i.length;for(;ss&&i[n-1]>e;)n--;return s>0||n{let s="_onData"+Xe(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){let a=n.apply(this,o);return i._chartjs.listeners.forEach(r=>{typeof r[s]=="function"&&r[s](...o)}),a}})})}function Ei(i,t){let e=i._chartjs;if(!e)return;let s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(Zs.forEach(o=>{delete i[o]}),delete i._chartjs)}function Fi(i){let t=new Set,e,s;for(e=0,s=i.length;e"u"?function(i){return i()}:window.requestAnimationFrame}();function zi(i,t,e){let s=e||(a=>Array.prototype.slice.call(a)),n=!1,o=[];return function(...a){o=s(a),n||(n=!0,Ii.call(window,()=>{n=!1,i.apply(t,o)}))}}function Qs(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}var qe=i=>i==="start"?"left":i==="end"?"right":"center",X=(i,t,e)=>i==="start"?t:i==="end"?e:(t+e)/2,tn=(i,t,e,s)=>i===(s?"left":"right")?e:i==="center"?(t+e)/2:t;function Bi(i,t,e){let s=t.length,n=0,o=s;if(i._sorted){let{iScale:a,_parsed:r}=i,l=a.axis,{min:c,max:h,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=Y(Math.min(at(r,a.axis,c).lo,e?s:at(t,l,a.getPixelForValue(c)).lo),0,s-1)),u?o=Y(Math.max(at(r,a.axis,h,!0).hi+1,e?0:at(t,l,a.getPixelForValue(h),!0).hi+1),n,s)-n:o=s-n}return{start:n,count:o}}function Vi(i){let{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;let o=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),o}var ze=i=>i===0||i===1,As=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*F/e)),Ts=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*F/e)+1,Ht={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*V)+1,easeOutSine:i=>Math.sin(i*V),easeInOutSine:i=>-.5*(Math.cos(B*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>ze(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>ze(i)?i:As(i,.075,.3),easeOutElastic:i=>ze(i)?i:Ts(i,.075,.3),easeInOutElastic(i){return ze(i)?i:i<.5?.5*As(i*2,.1125,.45):.5+.5*Ts(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-Ht.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?Ht.easeInBounce(i*2)*.5:Ht.easeOutBounce(i*2-1)*.5+.5};function be(i){return i+.5|0}var xt=(i,t,e)=>Math.max(Math.min(i,e),t);function fe(i){return xt(be(i*2.55),0,255)}function yt(i){return xt(be(i*255),0,255)}function ut(i){return xt(be(i/2.55)/100,0,1)}function Ls(i){return xt(be(i*100),0,100)}var st={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Si=[..."0123456789ABCDEF"],No=i=>Si[i&15],Ho=i=>Si[(i&240)>>4]+Si[i&15],Be=i=>(i&240)>>4===(i&15),jo=i=>Be(i.r)&&Be(i.g)&&Be(i.b)&&Be(i.a);function $o(i){var t=i.length,e;return i[0]==="#"&&(t===4||t===5?e={r:255&st[i[1]]*17,g:255&st[i[2]]*17,b:255&st[i[3]]*17,a:t===5?st[i[4]]*17:255}:(t===7||t===9)&&(e={r:st[i[1]]<<4|st[i[2]],g:st[i[3]]<<4|st[i[4]],b:st[i[5]]<<4|st[i[6]],a:t===9?st[i[7]]<<4|st[i[8]]:255})),e}var Yo=(i,t)=>i<255?t(i):"";function Xo(i){var t=jo(i)?No:Ho;return i?"#"+t(i.r)+t(i.g)+t(i.b)+Yo(i.a,t):void 0}var Uo=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function en(i,t,e){let s=t*Math.min(e,1-e),n=(o,a=(o+i/30)%12)=>e-s*Math.max(Math.min(a-3,9-a,1),-1);return[n(0),n(8),n(4)]}function Ko(i,t,e){let s=(n,o=(n+i/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[s(5),s(3),s(1)]}function qo(i,t,e){let s=en(i,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)s[n]*=1-t-e,s[n]+=t;return s}function Go(i,t,e,s,n){return i===n?(t-e)/s+(t.5?h/(2-o-a):h/(o+a),l=Go(e,s,n,h,o),l=l*60+.5),[l|0,c||0,r]}function Ni(i,t,e,s){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,s)).map(yt)}function Hi(i,t,e){return Ni(en,i,t,e)}function Zo(i,t,e){return Ni(qo,i,t,e)}function Jo(i,t,e){return Ni(Ko,i,t,e)}function sn(i){return(i%360+360)%360}function Qo(i){let t=Uo.exec(i),e=255,s;if(!t)return;t[5]!==s&&(e=t[6]?fe(+t[5]):yt(+t[5]));let n=sn(+t[2]),o=+t[3]/100,a=+t[4]/100;return t[1]==="hwb"?s=Zo(n,o,a):t[1]==="hsv"?s=Jo(n,o,a):s=Hi(n,o,a),{r:s[0],g:s[1],b:s[2],a:e}}function ta(i,t){var e=Wi(i);e[0]=sn(e[0]+t),e=Hi(e),i.r=e[0],i.g=e[1],i.b=e[2]}function ea(i){if(!i)return;let t=Wi(i),e=t[0],s=Ls(t[1]),n=Ls(t[2]);return i.a<255?`hsla(${e}, ${s}%, ${n}%, ${ut(i.a)})`:`hsl(${e}, ${s}%, ${n}%)`}var Rs={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Es={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function ia(){let i={},t=Object.keys(Es),e=Object.keys(Rs),s,n,o,a,r;for(s=0;s>16&255,o>>8&255,o&255]}return i}var Ve;function sa(i){Ve||(Ve=ia(),Ve.transparent=[0,0,0,0]);let t=Ve[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var na=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function oa(i){let t=na.exec(i),e=255,s,n,o;if(t){if(t[7]!==s){let a=+t[7];e=t[8]?fe(a):xt(a*255,0,255)}return s=+t[1],n=+t[3],o=+t[5],s=255&(t[2]?fe(s):xt(s,0,255)),n=255&(t[4]?fe(n):xt(n,0,255)),o=255&(t[6]?fe(o):xt(o,0,255)),{r:s,g:n,b:o,a:e}}}function aa(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${ut(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}var vi=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,Nt=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function ra(i,t,e){let s=Nt(ut(i.r)),n=Nt(ut(i.g)),o=Nt(ut(i.b));return{r:yt(vi(s+e*(Nt(ut(t.r))-s))),g:yt(vi(n+e*(Nt(ut(t.g))-n))),b:yt(vi(o+e*(Nt(ut(t.b))-o))),a:i.a+e*(t.a-i.a)}}function We(i,t,e){if(i){let s=Wi(i);s[t]=Math.max(0,Math.min(s[t]+s[t]*e,t===0?360:1)),s=Hi(s),i.r=s[0],i.g=s[1],i.b=s[2]}}function nn(i,t){return i&&Object.assign(t||{},i)}function Fs(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=yt(i[3]))):(t=nn(i,{r:0,g:0,b:0,a:1}),t.a=yt(t.a)),t}function la(i){return i.charAt(0)==="r"?oa(i):Qo(i)}var Pi=class i{constructor(t){if(t instanceof i)return t;let e=typeof t,s;e==="object"?s=Fs(t):e==="string"&&(s=$o(t)||sa(t)||la(t)),this._rgb=s,this._valid=!!s}get valid(){return this._valid}get rgb(){var t=nn(this._rgb);return t&&(t.a=ut(t.a)),t}set rgb(t){this._rgb=Fs(t)}rgbString(){return this._valid?aa(this._rgb):void 0}hexString(){return this._valid?Xo(this._rgb):void 0}hslString(){return this._valid?ea(this._rgb):void 0}mix(t,e){if(t){let s=this.rgb,n=t.rgb,o,a=e===o?.5:e,r=2*a-1,l=s.a-n.a,c=((r*l===-1?r:(r+l)/(1+r*l))+1)/2;o=1-c,s.r=255&c*s.r+o*n.r+.5,s.g=255&c*s.g+o*n.g+.5,s.b=255&c*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=ra(this._rgb,t._rgb,e)),this}clone(){return new i(this.rgb)}alpha(t){return this._rgb.a=yt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=be(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return We(this._rgb,2,t),this}darken(t){return We(this._rgb,2,-t),this}saturate(t){return We(this._rgb,1,t),this}desaturate(t){return We(this._rgb,1,-t),this}rotate(t){return ta(this._rgb,t),this}};function on(i){return new Pi(i)}function an(i){if(i&&typeof i=="object"){let t=i.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function ji(i){return an(i)?i:on(i)}function Mi(i){return an(i)?i:on(i).saturate(.5).darken(.1).hexString()}var vt=Object.create(null),Ge=Object.create(null);function ge(i,t){if(!t)return i;let e=t.split(".");for(let s=0,n=e.length;se.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,s)=>Mi(s.backgroundColor),this.hoverBorderColor=(e,s)=>Mi(s.borderColor),this.hoverColor=(e,s)=>Mi(s.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return wi(this,t,e)}get(t){return ge(this,t)}describe(t,e){return wi(Ge,t,e)}override(t,e){return wi(vt,t,e)}route(t,e,s,n){let o=ge(this,t),a=ge(this,s),r="_"+e;Object.defineProperties(o,{[r]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[r],c=a[n];return D(l)?Object.assign({},c,l):C(l,c)},set(l){this[r]=l}}})}},O=new Ci({_scriptable:i=>!i.startsWith("on"),_indexable:i=>i!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function ca(i){return!i||T(i.size)||T(i.family)?null:(i.style?i.style+" ":"")+(i.weight?i.weight+" ":"")+i.size+"px "+i.family}function pe(i,t,e,s,n){let o=t[n];return o||(o=t[n]=i.measureText(n).width,e.push(n)),o>s&&(s=o),s}function rn(i,t,e,s){s=s||{};let n=s.data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},o=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let a=0,r=e.length,l,c,h,d,u;for(l=0;le.length){for(l=0;l0&&i.stroke()}}function $t(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.xt.top-e&&i.y0&&o.strokeColor!=="",l,c;for(i.save(),i.font=n.string,ha(i,o),l=0;l+i||0;function Je(i,t){let e={},s=D(t),n=s?Object.keys(t):t,o=D(i)?s?a=>C(i[a],i[t[a]]):a=>i[a]:()=>i;for(let a of n)e[a]=pa(o(a));return e}function Xi(i){return Je(i,{top:"y",right:"x",bottom:"y",left:"x"})}function kt(i){return Je(i,["topLeft","topRight","bottomLeft","bottomRight"])}function U(i){let t=Xi(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function $(i,t){i=i||{},t=t||O.font;let e=C(i.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let s=C(i.style,t.style);s&&!(""+s).match(fa)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");let n={family:C(i.family,t.family),lineHeight:ga(C(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:C(i.weight,t.weight),string:""};return n.string=ca(n),n}function Gt(i,t,e,s){let n=!0,o,a,r;for(o=0,a=i.length;oe&&r===0?0:r+l;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function pt(i,t){return Object.assign(Object.create(i),t)}function Qe(i,t=[""],e=i,s,n=()=>i[0]){J(s)||(s=fn("_fallback",i));let o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:i,_rootScopes:e,_fallback:s,_getTarget:n,override:a=>Qe([a,...i],t,e,s)};return new Proxy(o,{deleteProperty(a,r){return delete a[r],delete a._keys,delete i[0][r],!0},get(a,r){return dn(a,r,()=>wa(r,t,i,a))},getOwnPropertyDescriptor(a,r){return Reflect.getOwnPropertyDescriptor(a._scopes[0],r)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(a,r){return zs(a).includes(r)},ownKeys(a){return zs(a)},set(a,r,l){let c=a._storage||(a._storage=n());return a[r]=c[r]=l,delete a._keys,!0}})}function Tt(i,t,e,s){let n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:Ui(i,s),setContext:o=>Tt(i,o,e,s),override:o=>Tt(i.override(o),t,e,s)};return new Proxy(n,{deleteProperty(o,a){return delete o[a],delete i[a],!0},get(o,a,r){return dn(o,a,()=>ba(o,a,r))},getOwnPropertyDescriptor(o,a){return o._descriptors.allKeys?Reflect.has(i,a)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,a)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,a){return Reflect.has(i,a)},ownKeys(){return Reflect.ownKeys(i)},set(o,a,r){return i[a]=r,delete o[a],!0}})}function Ui(i,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:ft(e)?e:()=>e,isIndexable:ft(s)?s:()=>s}}var ma=(i,t)=>i?i+Xe(t):t,Ki=(i,t)=>D(t)&&i!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function dn(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t))return i[t];let s=e();return i[t]=s,s}function ba(i,t,e){let{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=i,r=s[t];return ft(r)&&a.isScriptable(t)&&(r=_a(t,r,i,e)),I(r)&&r.length&&(r=xa(t,r,i,a.isIndexable)),Ki(t,r)&&(r=Tt(r,n,o&&o[t],a)),r}function _a(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_stack:r}=e;if(r.has(i))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+i);return r.add(i),t=t(o,a||s),r.delete(i),Ki(i,t)&&(t=qi(n._scopes,n,i,t)),t}function xa(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=e;if(J(o.index)&&s(i))t=t[o.index%t.length];else if(D(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let d=qi(c,n,i,h);t.push(Tt(d,o,a&&a[i],r))}}return t}function un(i,t,e){return ft(i)?i(t,e):i}var ya=(i,t)=>i===!0?t:typeof i=="string"?gt(t,i):void 0;function va(i,t,e,s,n){for(let o of t){let a=ya(e,o);if(a){i.add(a);let r=un(a._fallback,e,n);if(J(r)&&r!==e&&r!==s)return r}else if(a===!1&&J(s)&&e!==s)return null}return!1}function qi(i,t,e,s){let n=t._rootScopes,o=un(t._fallback,e,s),a=[...i,...n],r=new Set;r.add(s);let l=Is(r,a,e,o||e,s);return l===null||J(o)&&o!==e&&(l=Is(r,a,o,l,s),l===null)?!1:Qe(Array.from(r),[""],n,o,()=>Ma(t,e,s))}function Is(i,t,e,s,n){for(;e;)e=va(i,t,e,s,n);return e}function Ma(i,t,e){let s=i._getTarget();t in s||(s[t]={});let n=s[t];return I(n)&&D(e)?e:n}function wa(i,t,e,s){let n;for(let o of t)if(n=fn(ma(o,i),e),J(n))return Ki(i,n)?qi(e,s,i,n):n}function fn(i,t){for(let e of t){if(!e)continue;let s=e[i];if(J(s))return s}}function zs(i){let t=i._keys;return t||(t=i._keys=ka(i._scopes)),t}function ka(i){let t=new Set;for(let e of i)for(let s of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(s);return Array.from(t)}function Gi(i,t,e,s){let{iScale:n}=i,{key:o="r"}=this._parsing,a=new Array(s),r,l,c,h;for(r=0,l=s;rti==="x"?"y":"x";function Pa(i,t,e,s){let n=i.skip?t:i,o=t,a=e.skip?t:e,r=$e(o,n),l=$e(a,o),c=r/(r+l),h=l/(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let d=s*c,u=s*h;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Ca(i,t,e){let s=i.length,n,o,a,r,l,c=Yt(i,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")Oa(i,n);else{let c=s?i[i.length-1]:i[0];for(o=0,a=i.length;owindow.getComputedStyle(i,null);function Ta(i,t){return ei(i).getPropertyValue(t)}var La=["top","right","bottom","left"];function At(i,t,e){let s={};e=e?"-"+e:"";for(let n=0;n<4;n++){let o=La[n];s[o]=parseFloat(i[t+"-"+o+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}var Ra=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function Ea(i,t){let e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:o}=s,a=!1,r,l;if(Ra(n,o,i.target))r=n,l=o;else{let c=t.getBoundingClientRect();r=s.clientX-c.left,l=s.clientY-c.top,a=!0}return{x:r,y:l,box:a}}function St(i,t){if("native"in i)return i;let{canvas:e,currentDevicePixelRatio:s}=t,n=ei(e),o=n.boxSizing==="border-box",a=At(n,"padding"),r=At(n,"border","width"),{x:l,y:c,box:h}=Ea(i,e),d=a.left+(h&&r.left),u=a.top+(h&&r.top),{width:f,height:g}=t;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*e.width/s),y:Math.round((c-u)/g*e.height/s)}}function Fa(i,t,e){let s,n;if(t===void 0||e===void 0){let o=ti(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{let a=o.getBoundingClientRect(),r=ei(o),l=At(r,"border","width"),c=At(r,"padding");t=a.width-c.width-l.width,e=a.height-c.height-l.height,s=Ye(r.maxWidth,o,"clientWidth"),n=Ye(r.maxHeight,o,"clientHeight")}}return{width:t,height:e,maxWidth:s||je,maxHeight:n||je}}var ki=i=>Math.round(i*10)/10;function mn(i,t,e,s){let n=ei(i),o=At(n,"margin"),a=Ye(n.maxWidth,i,"clientWidth")||je,r=Ye(n.maxHeight,i,"clientHeight")||je,l=Fa(i,t,e),{width:c,height:h}=l;if(n.boxSizing==="content-box"){let d=At(n,"border","width"),u=At(n,"padding");c-=u.width+d.width,h-=u.height+d.height}return c=Math.max(0,c-o.width),h=Math.max(0,s?Math.floor(c/s):h-o.height),c=ki(Math.min(c,a,l.maxWidth)),h=ki(Math.min(h,r,l.maxHeight)),c&&!h&&(h=ki(c/2)),{width:c,height:h}}function Ji(i,t,e){let s=t||1,n=Math.floor(i.height*s),o=Math.floor(i.width*s);i.height=n/s,i.width=o/s;let a=i.canvas;return a.style&&(e||!a.style.height&&!a.style.width)&&(a.style.height=`${i.height}px`,a.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||a.height!==n||a.width!==o?(i.currentDevicePixelRatio=s,a.height=n,a.width=o,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}var bn=function(){let i=!1;try{let t={get passive(){return i=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return i}();function Qi(i,t){let e=Ta(i,t),s=e&&e.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function _t(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function _n(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s==="middle"?e<.5?i.y:t.y:s==="after"?e<1?i.y:t.y:e>0?t.y:i.y}}function xn(i,t,e,s){let n={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},a=_t(i,n,e),r=_t(n,o,e),l=_t(o,t,e),c=_t(a,r,e),h=_t(r,l,e);return _t(c,h,e)}var Bs=new Map;function Ia(i,t){t=t||{};let e=i+JSON.stringify(t),s=Bs.get(e);return s||(s=new Intl.NumberFormat(i,t),Bs.set(e,s)),s}function Zt(i,t,e){return Ia(t,e).format(i)}var za=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},Ba=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function Rt(i,t,e){return i?za(t,e):Ba()}function ts(i,t){let e,s;(t==="ltr"||t==="rtl")&&(e=i.canvas.style,s=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),i.prevTextDirection=s)}function es(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty("direction",t[0],t[1]))}function yn(i){return i==="angle"?{between:Kt,compare:Wo,normalize:G}:{between:lt,compare:(t,e)=>t-e,normalize:t=>t}}function Vs({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function Va(i,t,e){let{property:s,start:n,end:o}=e,{between:a,normalize:r}=yn(s),l=t.length,{start:c,end:h,loop:d}=i,u,f;if(d){for(c+=l,h+=l,u=0,f=l;ul(n,v,b)&&r(n,v)!==0,x=()=>r(o,b)===0||l(o,v,b),M=()=>p||y(),w=()=>!p||x();for(let S=h,k=h;S<=d;++S)_=t[S%a],!_.skip&&(b=c(_[s]),b!==v&&(p=l(b,n,o),m===null&&M()&&(m=r(b,n)===0?S:k),m!==null&&w()&&(g.push(Vs({start:m,end:S,loop:u,count:a,style:f})),m=null),k=S,v=b));return m!==null&&g.push(Vs({start:m,end:d,loop:u,count:a,style:f})),g}function ss(i,t){let e=[],s=i.segments;for(let n=0;nn&&i[o%t].skip;)o--;return o%=t,{start:n,end:o}}function Na(i,t,e,s){let n=i.length,o=[],a=t,r=i[t],l;for(l=t+1;l<=e;++l){let c=i[l%n];c.skip||c.stop?r.skip||(s=!1,o.push({start:t%n,end:(l-1)%n,loop:s}),t=a=c.stop?l:null):(a=l,r.skip&&(t=l)),r=c}return a!==null&&o.push({start:t%n,end:a%n,loop:s}),o}function vn(i,t){let e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];let o=!!i._loop,{start:a,end:r}=Wa(e,n,o,s);if(s===!0)return Ws(i,[{start:a,end:r,loop:o}],e,t);let l=rr({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=Ii.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;let o=s.items,a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,"progress")),o.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let s=e.items,n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},mt=new fs,Mn="transparent",$a={boolean(i,t,e){return e>.5?t:i},color(i,t,e){let s=ji(i||Mn),n=s.valid&&ji(t||Mn);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}},gs=class{constructor(t,e,s,n){let o=e[s];n=Gt([t.to,n,o,t.from]);let a=Gt([t.from,o,n]);this._active=!0,this._fn=t.fn||$a[t.type||typeof a],this._easing=Ht[t.easing]||Ht.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);let n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=Gt([t.to,e,n,t.from]),this._from=Gt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to,l;if(this._active=o!==r&&(a||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){let e=t?"res":"rej",s=this._promises||[];for(let n=0;ni!=="onProgress"&&i!=="onComplete"&&i!=="fn"});O.set("animations",{colors:{type:"color",properties:Xa},numbers:{type:"number",properties:Ya}});O.describe("animations",{_fallback:"animation"});O.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:i=>i|0}}}});var ci=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!D(t))return;let e=this._properties;Object.getOwnPropertyNames(t).forEach(s=>{let n=t[s];if(!D(n))return;let o={};for(let a of Ua)o[a]=n[a];(I(n.properties)&&n.properties||[s]).forEach(a=>{(a===s||!e.has(a))&&e.set(a,o)})})}_animateOptions(t,e){let s=e.options,n=qa(t,s);if(!n)return[];let o=this._createAnimations(n,s);return s.$shared&&Ka(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){let s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now(),l;for(l=a.length-1;l>=0;--l){let c=a[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}let h=e[c],d=o[c],u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new gs(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let s=this._createAnimations(t,e);if(s.length)return mt.add(this._chart,s),!0}};function Ka(i,t){let e=[],s=Object.keys(t);for(let n=0;n0||!e&&o<0)return n.index}return null}function Cn(i,t){let{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=Qa(o,a,s),d=t.length,u;for(let f=0;fe[s].axis===t).shift()}function ir(i,t){return pt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function sr(i,t,e){return pt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function ye(i,t){let e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(let n of t){let o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e]}}}var os=i=>i==="reset"||i==="none",Dn=(i,t)=>t?i:Object.assign({},i),nr=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:go(e,!0),values:null},et=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Sn(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&ye(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d==="x"?u:d==="r"?g:f,o=e.xAxisID=C(s.xAxisID,ns(t,"x")),a=e.yAxisID=C(s.yAxisID,ns(t,"y")),r=e.rAxisID=C(s.rAxisID,ns(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){let t=this._cachedMeta;this._data&&Ei(this._data,this),t._stacked&&ye(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(D(e))this._data=Ja(e);else if(s!==e){if(s){Ei(s,this);let n=this._cachedMeta;ye(n),n._parsed=[]}e&&Object.isExtensible(e)&&Js(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,s=this.getDataset(),n=!1;this._dataCheck();let o=e._stacked;e._stacked=Sn(e.vScale,e),e.stack!==s.stack&&(n=!0,ye(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&Cn(this,e._parsed)}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis,l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{I(n[t])?u=this.parseArrayData(s,n,t,e):D(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);let f=()=>d[r]===null||c&&d[r]p||d=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,s=[],n,o,a;for(n=0,o=e.length;n=0&&tthis.getContext(s,n),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(Dn(p,l))),p}_resolveAnimations(t,e,s){let n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){let h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}let c=new ci(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||os(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){os(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!os(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;let o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){let e=this._data,s=this._cachedMeta.data;for(let[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];let n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;rn-o))}return i._cache.$bar}function ar(i){let t=i.iScale,e=or(t,i.type),s=t._length,n,o,a,r,l=()=>{a===32767||a===-32768||(J(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n0?n[i-1]:null,r=iMath.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function po(i,t,e,s){return I(i)?cr(i,t,e,s):t[e.axis]=e.parse(i,s),t}function On(i,t,e,s){let n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[],c,h,d,u;for(c=e,h=e+s;c=e?1:-1)}function dr(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.basel.controller.options.grouped),o=s.options.stacked,a=[],r=l=>{let c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(T(h)||isNaN(h))return!0};for(let l of n)if(!(e!==void 0&&r(l))&&((o===!1||a.indexOf(l.stack)===-1||o===void 0&&l.stack===void 0)&&a.push(l.stack),l.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,s){let n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){let t=this.options,e=this._cachedMeta,s=e.iScale,n=[],o,a;for(o=0,a=e.data.length;o=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:e.label,value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){let o=n==="reset",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;uKt(v,r,l,!0)?1:Math.max(y,y*e,x,x*e),g=(v,y,x)=>Kt(v,r,l,!0)?-1:Math.min(y,y*e,x,x*e),p=f(0,c,d),m=f(V,h,u),b=g(B,c,d),_=g(B+V,h,u);s=(p-b)/2,n=(m-_)/2,o=-(p+b)/2,a=-(m+_)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}var Dt=class extends et{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(D(s[t])){let{key:l="value"}=this._parsing;o=c=>+gt(s[c],l)}let a,r;for(a=t,r=t+e;a0&&!isNaN(t)?F*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=Zt(e._parsed[t],s.options.locale);return{label:n[t]||"",value:o}}getMaxBorderWidth(t){let e=0,s=this.chart,n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;ni!=="spacing",_indexable:i=>i!=="spacing"};Dt.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){let t=i.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{let a=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,lineWidth:a.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){let t=i.label,e=": "+i.formattedValue;return I(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};var ie=class extends et{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled,{start:r,count:l}=Bi(e,n,a);this._drawStart=r,this._drawCount=l,Vi(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){let o=n==="reset",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=Lt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n==="none",_=e>0&&this.getParsed(e-1);for(let v=e;v0&&Math.abs(x[u]-_[u])>m,p&&(M.parsed=x,M.raw=c.data[v]),d&&(M.options=h||this.resolveDataElementOptions(v,y.active?"active":n)),b||this.updateElement(y,v,M,n),_=x}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;let o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};ie.id="line";ie.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};ie.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var se=class extends et{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=Zt(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:o}}parseObjectData(t,e,s,n){return Gi.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{let o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(oe.max&&(e.max=o))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){let o=n==="reset",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*B,f=u,g,p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?nt(this.resolveDataElementOptions(t,e).angle||s):0}};se.id="polarArea";se.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};se.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){let t=i.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{let a=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,lineWidth:a.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){return i.chart.data.labels[i.dataIndex]+": "+i.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};var Ce=class extends Dt{};Ce.id="pie";Ce.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};var ne=class extends et{getLabelAndValue(t){let e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return Gi.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!=="resize"){let a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);let r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){let o=this._cachedMeta.rScale,a=n==="reset";for(let r=e;r{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}};it.defaults={};it.defaultRoutes=void 0;var mo={values(i){return I(i)?i:""+i},numeric(i,t,e){if(i===0)return"0";let s=this.chart.options.locale,n,o=i;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),o=mr(i,e)}let a=tt(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),Zt(i,s,l)},logarithmic(i,t,e){if(i===0)return"0";let s=i/Math.pow(10,Math.floor(tt(i)));return s===1||s===2||s===5?mo.numeric.call(this,i,t,e):""}};function mr(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var pi={formatters:mo};O.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(i,t)=>t.lineWidth,tickColor:(i,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:pi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});O.route("scale.ticks","color","","color");O.route("scale.grid","color","","borderColor");O.route("scale.grid","borderColor","","borderColor");O.route("scale.title","color","","color");O.describe("scale",{_fallback:!1,_scriptable:i=>!i.startsWith("before")&&!i.startsWith("after")&&i!=="callback"&&i!=="parser",_indexable:i=>i!=="borderDash"&&i!=="tickBorderDash"});O.describe("scales",{_fallback:"scale"});O.describe("scale.ticks",{_scriptable:i=>i!=="backdropPadding"&&i!=="callback",_indexable:i=>i!=="backdropPadding"});function br(i,t){let e=i.options.ticks,s=e.maxTicksLimit||_r(i),n=e.major.enabled?yr(t):[],o=n.length,a=n[0],r=n[o-1],l=[];if(o>s)return vr(t,l,n,o/s),l;let c=xr(n,t,s);if(o>0){let h,d,u=o>1?Math.round((r-a)/(o-1)):null;for(ii(t,l,c,T(u)?0:a-u,a),h=0,d=o-1;hn)return l}return Math.max(n,1)}function yr(i){let t=[],e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,Ln=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e;function Rn(i,t){let e=[],s=i.length/t,n=i.length,o=0;for(;oa+r)))return l}function Sr(i,t){E(i,e=>{let s=e.gc,n=s.length/2,o;if(n>t){for(o=0;os?s:e,s=n&&e>s?e:s,{min:Q(e,Q(s,e)),max:Q(s,Q(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){z(this.options.beforeUpdate,[this])}update(t,e,s){let{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=hn(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=r=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-ve(t.grid)-e.padding-En(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=Ue(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){z(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){z(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){let l=En(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=ve(o)+l):(t.height=this.maxHeight,t.width=ve(o)+l),s.display&&this.ticks.length){let{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=nt(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){let b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{let b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){let{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!=="top"&&this.axis==="x";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1),u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o==="start"?f=e.width:o==="end"?u=t.width:o!=="inner"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o==="start"?(h=0,d=t.height):o==="end"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){z(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:o[w]||0,height:a[w]||0});return{first:M(0),last:M(e-1),widest:M(y),highest:M(x),widths:o,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Ks(this._alignToPixels?Mt(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&tr*n?r/s:l/n:l*n0}_computeGridLineItems(t){let e=this.axis,s=this.chart,n=this.options,{grid:o,position:a}=n,r=o.offset,l=this.isHorizontal(),h=this.ticks.length+(r?1:0),d=ve(o),u=[],f=o.setContext(this.getContext()),g=f.drawBorder?f.borderWidth:0,p=g/2,m=function(P){return Mt(s,P,g)},b,_,v,y,x,M,w,S,k,L,R,A;if(a==="top")b=m(this.bottom),M=this.bottom-d,S=b-p,L=m(t.top)+p,A=t.bottom;else if(a==="bottom")b=m(this.top),L=t.top,A=m(t.bottom)-p,M=b+p,S=this.top+d;else if(a==="left")b=m(this.right),x=this.right-d,w=b-p,k=m(t.left)+p,R=t.right;else if(a==="right")b=m(this.left),k=t.left,R=m(t.right)-p,x=b+p,w=this.left+d;else if(e==="x"){if(a==="center")b=m((t.top+t.bottom)/2+.5);else if(D(a)){let P=Object.keys(a)[0],j=a[P];b=m(this.chart.scales[P].getPixelForValue(j))}L=t.top,A=t.bottom,M=b+p,S=M+d}else if(e==="y"){if(a==="center")b=m((t.left+t.right)/2);else if(D(a)){let P=Object.keys(a)[0],j=a[P];b=m(this.chart.scales[P].getPixelForValue(j))}x=b-p,w=x-d,k=t.left,R=t.right}let H=C(n.ticks.maxTicksLimit,h),q=Math.max(1,Math.ceil(h/H));for(_=0;_o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),o,a,r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o{this.draw(n)}}]:[{z:s,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:s+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[],o,a;for(o=0,a=e.length;o{let s=e.split("."),n=s.pop(),o=[i].concat(s).join("."),a=t[e].split("."),r=a.pop(),l=a.join(".");O.route(o,n,l,r)})}function Lr(i){return"id"in i&&"defaults"in i}var ps=class{constructor(){this.controllers=new Qt(et,"datasets",!0),this.elements=new Qt(it,"elements"),this.plugins=new Qt(Object,"plugins"),this.scales=new Qt(Ft,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{let o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):E(n,a=>{let r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){let n=Xe(t);z(s["before"+n],[],s),e[t](s),z(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let y=e;y0&&Math.abs(M[f]-v[f])>b,m&&(w.parsed=M,w.raw=c.data[y]),u&&(w.options=d||this.resolveDataElementOptions(y,x.active?"active":n)),_||this.updateElement(x,y,w,n),v=M}this.updateSharedOptions(d,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}let s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;let o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}};oe.id="scatter";oe.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};oe.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(i){return"("+i.label+", "+i.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Rr=Object.freeze({__proto__:null,BarController:te,BubbleController:ee,DoughnutController:Dt,LineController:ie,PolarAreaController:se,PieController:Ce,RadarController:ne,ScatterController:oe});function Et(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var De=class{constructor(t){this.options=t||{}}init(t){}formats(){return Et()}parse(t,e){return Et()}format(t,e){return Et()}add(t,e,s){return Et()}diff(t,e,s){return Et()}startOf(t,e,s){return Et()}endOf(t,e){return Et()}};De.override=function(i){Object.assign(De.prototype,i)};var Er={_date:De};function Fr(i,t,e,s){let{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale;if(r&&t===r.axis&&t!=="r"&&a&&o.length){let l=r._reversePixels?qs:at;if(s){if(n._sharedOptions){let c=o[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){let d=l(o,t,e-h),u=l(o,t,e+h);return{lo:d.lo,hi:u.hi}}}}else return l(o,t,e)}return{lo:0,hi:o.length-1}}function Fe(i,t,e,s,n){let o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r{l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var Vr={evaluateInteractionItems:Fe,modes:{index(i,t,e,s){let n=St(t,i),o=e.axis||"x",a=e.includeInvisible||!1,r=e.intersect?rs(i,n,o,s,a):ls(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{let h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){let n=St(t,i),o=e.axis||"xy",a=e.includeInvisible||!1,r=e.intersect?rs(i,n,o,s,a):ls(i,n,o,!1,s,a);if(r.length>0){let l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;he.pos===t)}function In(i,t){return i.filter(e=>bo.indexOf(e.pos)===-1&&e.box.axis===t)}function we(i,t){return i.sort((e,s)=>{let n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Wr(i){let t=[],e,s,n,o,a,r;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=we(Me(t,"left"),!0),n=we(Me(t,"right")),o=we(Me(t,"top"),!0),a=we(Me(t,"bottom")),r=In(t,"x"),l=In(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Me(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function zn(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function _o(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function $r(i,t,e,s){let{pos:n,box:o}=e,a=i.maxPadding;if(!D(n)){e.size&&(i[n]-=e.size);let d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&_o(a,o.getPadding());let r=Math.max(0,t.outerWidth-zn(a,i,"left","right")),l=Math.max(0,t.outerHeight-zn(a,i,"top","bottom")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Yr(i){let t=i.maxPadding;function e(s){let n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function Xr(i,t){let e=t.maxPadding;function s(n){let o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?["left","right"]:["top","bottom"])}function Se(i,t,e,s){let n=[],o,a,r,l,c,h;for(o=0,a=i.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});let h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);_o(u,U(s));let f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Hr(l.concat(c),d);Se(r.fullSize,f,d,g),Se(l,f,d,g),Se(c,f,d,g)&&Se(l,f,d,g),Yr(f),Bn(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,Bn(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},E(r.chartArea,p=>{let m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},hi=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}},ms=class extends hi{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},li="$chartjs",Ur={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Vn=i=>i===null||i==="";function Kr(i,t){let e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[li]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",Vn(n)){let o=Qi(i,"width");o!==void 0&&(i.width=o)}if(Vn(s))if(i.style.height==="")i.height=i.width/(t||2);else{let o=Qi(i,"height");o!==void 0&&(i.height=o)}return i}var xo=bn?{passive:!0}:!1;function qr(i,t,e){i.addEventListener(t,e,xo)}function Gr(i,t,e){i.canvas.removeEventListener(t,e,xo)}function Zr(i,t){let e=Ur[i.type]||i.type,{x:s,y:n}=St(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function di(i,t){for(let e of i)if(e===t||e.contains(t))return!0}function Jr(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||di(r.addedNodes,s),a=a&&!di(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Qr(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||di(r.removedNodes,s),a=a&&!di(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Oe=new Map,Wn=0;function yo(){let i=window.devicePixelRatio;i!==Wn&&(Wn=i,Oe.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function tl(i,t){Oe.size||window.addEventListener("resize",yo),Oe.set(i,t)}function el(i){Oe.delete(i),Oe.size||window.removeEventListener("resize",yo)}function il(i,t,e){let s=i.canvas,n=s&&ti(s);if(!n)return;let o=zi((r,l)=>{let c=n.clientWidth;e(r,l),c{let l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),tl(i,o),a}function cs(i,t,e){e&&e.disconnect(),t==="resize"&&el(i)}function sl(i,t,e){let s=i.canvas,n=zi(o=>{i.ctx!==null&&e(Zr(o,i))},i,o=>{let a=o[0];return[a,a.offsetX,a.offsetY]});return qr(s,t,n),n}var bs=class extends hi{acquireContext(t,e){let s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(Kr(t,e),s):null}releaseContext(t){let e=t.canvas;if(!e[li])return!1;let s=e[li].initial;["height","width"].forEach(o=>{let a=s[o];T(a)?e.removeAttribute(o):e.setAttribute(o,a)});let n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[li],!0}addEventListener(t,e,s){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),a={attach:Jr,detach:Qr,resize:il}[e]||sl;n[e]=a(t,e,s)}removeEventListener(t,e){let s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:cs,detach:cs,resize:cs}[e]||Gr)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return mn(t,e,s,n)}isAttached(t){let e=ti(t);return!!(e&&e.isConnected)}};function nl(i){return!Zi()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?ms:bs}var _s=class{constructor(){this._init=[]}notify(t,e,s,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));let o=n?this._descriptors(t).filter(n):this._descriptors(t),a=this._notify(o,t,e,s);return e==="afterDestroy"&&(this._notify(o,t,"stop"),this._notify(this._init,t,"uninstall")),a}_notify(t,e,s,n){n=n||{};for(let o of t){let a=o.plugin,r=a[s],l=[e,n,o.options];if(z(r,l,a)===!1&&n.cancelable)return!1}return!0}invalidate(){T(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let s=t&&t.config,n=C(s.options&&s.options.plugins,{}),o=ol(s);return n===!1&&!e?[]:rl(t,o,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],s=this._cache,n=(o,a)=>o.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}};function ol(i){let t={},e=[],s=Object.keys(ht.plugins.items);for(let o=0;o{let l=s[r];if(!D(l))return console.error(`Invalid scale configuration for scale: ${r}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${r}`);let c=ys(r,l),h=hl(c,n),d=e.scales||{};o[c]=o[c]||r,a[r]=Xt(Object.create(null),[{axis:c},l,d[c],d[h]])}),i.data.datasets.forEach(r=>{let l=r.type||i.type,c=r.indexAxis||xs(l,t),d=(vt[l]||{}).scales||{};Object.keys(d).forEach(u=>{let f=cl(u,c),g=r[f+"AxisID"]||o[f]||f;a[g]=a[g]||Object.create(null),Xt(a[g],[{axis:f},s[g],d[u]])})}),Object.keys(a).forEach(r=>{let l=a[r];Xt(l,[O.scales[l.type],O.scale])}),a}function vo(i){let t=i.options||(i.options={});t.plugins=C(t.plugins,{}),t.scales=ul(i,t)}function Mo(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function fl(i){return i=i||{},i.data=Mo(i.data),vo(i),i}var Nn=new Map,wo=new Set;function ni(i,t){let e=Nn.get(i);return e||(e=t(),Nn.set(i,e),wo.add(e)),e}var ke=(i,t,e)=>{let s=gt(t,e);s!==void 0&&i.add(s)},vs=class{constructor(t){this._config=fl(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Mo(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),vo(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return ni(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return ni(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return ni(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,s=this.type;return ni(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let s=this._scopeCache,n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){let{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>ke(l,t,d))),h.forEach(d=>ke(l,n,d)),h.forEach(d=>ke(l,vt[o]||{},d)),h.forEach(d=>ke(l,O,d)),h.forEach(d=>ke(l,Ge,d))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),wo.has(e)&&a.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,vt[e]||{},O.datasets[e]||{},{type:e},O,Ge]}resolveNamedOptions(t,e,s,n=[""]){let o={$shared:!0},{resolver:a,subPrefixes:r}=Hn(this._resolverCache,t,n),l=a;if(pl(a,e)){o.$shared=!1,s=ft(s)?s():s;let c=this.createResolver(t,s,r);l=Tt(a,s,c)}for(let c of e)o[c]=l[c];return o}createResolver(t,e,s=[""],n){let{resolver:o}=Hn(this._resolverCache,t,s);return D(e)?Tt(o,e,void 0,n):o}};function Hn(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));let n=e.join(),o=s.get(n);return o||(o={resolver:Qe(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes("hover"))},s.set(n,o)),o}var gl=i=>D(i)&&Object.getOwnPropertyNames(i).reduce((t,e)=>t||ft(i[e]),!1);function pl(i,t){let{isScriptable:e,isIndexable:s}=Ui(i);for(let n of t){let o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(ft(r)||gl(r))||a&&I(r))return!0}return!1}var ml="3.9.1",bl=["top","bottom","left","right","chartArea"];function jn(i,t){return i==="top"||i==="bottom"||bl.indexOf(i)===-1&&t==="x"}function $n(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Yn(i){let t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),z(e&&e.onComplete,[i],t)}function _l(i){let t=i.chart,e=t.options.animation;z(e&&e.onProgress,[i],t)}function ko(i){return Zi()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}var ui={},So=i=>{let t=ko(i);return Object.values(ui).filter(e=>e.canvas===t).pop()};function xl(i,t,e){let s=Object.keys(i);for(let n of s){let o=+n;if(o>=t){let a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function yl(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}var It=class{constructor(t,e){let s=this.config=new vs(e),n=ko(t),o=So(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");let a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||nl(n)),this.platform.updateConfig(s);let r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Hs(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new _s,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Qs(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],ui[this.id]=this,!r||!l){console.error("Failed to create chart: can't acquire context from the given item");return}mt.listen(this,"complete",Yn),mt.listen(this,"progress",_l),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return T(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Ji(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return $i(this.canvas,this.ctx),this}stop(){return mt.stop(this),this}resize(t,e){mt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Ji(this,r,!0)&&(this.notifyPlugins("resize",{size:a}),z(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};E(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{}),o=[];e&&(o=o.concat(Object.keys(e).map(a=>{let r=e[a],l=ys(a,r),c=l==="r",h=l==="x";return{options:r,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),E(o,a=>{let r=a.options,l=r.id,c=ys(l,r),h=C(r.type,a.dtype);(r.position===void 0||jn(r.position,c)!==jn(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{let u=ht.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),E(n,(a,r)=>{a||delete s[r]}),E(s,a=>{K.configure(this,a,a.options),K.addBox(this,a)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){let e=this.config;e.update();let s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;let o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort($n("z","_idx"));let{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){E(this.scales,t=>{K.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!Oi(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:s,start:n,count:o}of e){let a=s==="_removeElements"?-o:o;xl(t,n,a)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+","+a.splice(1).join(","))),n=s(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;K.update(this,this.width,this.height,t);let e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],E(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){let e=this.ctx,s=t._clip,n=!s.disabled,o=this.chartArea,a={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",a)!==!1&&(n&&_e(e,{left:s.left===!1?0:o.left-s.left,right:s.right===!1?this.width:o.right+s.right,top:s.top===!1?0:o.top-s.top,bottom:s.bottom===!1?this.height:o.bottom+s.bottom}),t.controller.draw(),n&&xe(e),a.cancelable=!1,this.notifyPlugins("afterDatasetDraw",a))}isPointInArea(t){return $t(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){let o=Vr.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],s=this._metasets,n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=pt(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){let s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){let n=s?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);J(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),mt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};E(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)},a,r=()=>{n("attach",r),this.attached=!0,this.resize(),s("resize",o),s("detach",a)};a=()=>{this.attached=!1,n("resize",o),this._stop(),this._resize(0,0),s("attach",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){E(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},E(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){let n=s?"set":"remove",o,a,r,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+n+"DatasetHoverStyle"]()),r=0,l=t.length;r{let r=this.getDatasetMeta(o);if(!r)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:r.data[a],index:a}});!me(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}_updateHoverStyles(t,e,s){let n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){let s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;let o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){let{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=Ys(t),c=yl(t,this._lastEvent,s,l);s&&(this._lastEvent=null,z(o.onHover,[t,r,this],this),l&&z(o.onClick,[t,r,this],this));let h=!me(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;let o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}},Xn=()=>E(It.instances,i=>i._plugins.invalidate()),Pt=!0;Object.defineProperties(It,{defaults:{enumerable:Pt,value:O},instances:{enumerable:Pt,value:ui},overrides:{enumerable:Pt,value:vt},registry:{enumerable:Pt,value:ht},version:{enumerable:Pt,value:ml},getChart:{enumerable:Pt,value:So},register:{enumerable:Pt,value:(...i)=>{ht.add(...i),Xn()}},unregister:{enumerable:Pt,value:(...i)=>{ht.remove(...i),Xn()}}});function Po(i,t,e){let{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t,c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+V,s-V),i.closePath(),i.clip()}function vl(i){return Je(i,["outerStart","outerEnd","innerStart","innerEnd"])}function Ml(i,t,e,s){let n=vl(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{let c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function Jt(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function Ms(i,t,e,s,n,o){let{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0,f=0,g=n-l;if(s){let P=h>0?h-s:0,j=d>0?d-s:0,N=(P+j)/2,Ot=N!==0?g*N/(N+s):g;f=(g-Ot)/2}let p=Math.max(.001,g*d-e/B)/d,m=(g-p)/2,b=l+m+f,_=n-m-f,{outerStart:v,outerEnd:y,innerStart:x,innerEnd:M}=Ml(t,u,d,_-b),w=d-v,S=d-y,k=b+v/w,L=_-y/S,R=u+x,A=u+M,H=b+x/R,q=_-M/A;if(i.beginPath(),o){if(i.arc(a,r,d,k,L),y>0){let N=Jt(S,L,a,r);i.arc(N.x,N.y,y,L,_+V)}let P=Jt(A,_,a,r);if(i.lineTo(P.x,P.y),M>0){let N=Jt(A,q,a,r);i.arc(N.x,N.y,M,_+V,q+Math.PI)}if(i.arc(a,r,u,_-M/u,b+x/u,!0),x>0){let N=Jt(R,H,a,r);i.arc(N.x,N.y,x,H+Math.PI,b-V)}let j=Jt(w,b,a,r);if(i.lineTo(j.x,j.y),v>0){let N=Jt(w,k,a,r);i.arc(N.x,N.y,v,b-V,k)}}else{i.moveTo(a,r);let P=Math.cos(k)*d+a,j=Math.sin(k)*d+r;i.lineTo(P,j);let N=Math.cos(L)*d+a,Ot=Math.sin(L)*d+r;i.lineTo(N,Ot)}i.closePath()}function wl(i,t,e,s,n){let{fullCircles:o,startAngle:a,circumference:r}=t,l=t.endAngle;if(o){Ms(i,t,e,s,a+F,n);for(let c=0;c=F||Kt(o,r,l),p=lt(a,c+u,h+u);return g&&p}getCenterPoint(t){let{x:e,y:s,startAngle:n,endAngle:o,innerRadius:a,outerRadius:r}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+o)/2,d=(a+r+c+l)/2;return{x:e+Math.cos(h)*d,y:s+Math.sin(h)*d}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:s}=this,n=(e.offset||0)/2,o=(e.spacing||0)/2,a=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=s>F?Math.floor(s/F):0,s===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let r=0;if(n){r=n/2;let c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*r,Math.sin(c)*r),this.circumference>=B&&(r=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;let l=wl(t,this,r,o,a);Sl(t,this,r,o,l,a),t.restore()}};ae.id="arc";ae.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};ae.defaultRoutes={backgroundColor:"backgroundColor"};function Co(i,t,e=t){i.lineCap=C(e.borderCapStyle,t.borderCapStyle),i.setLineDash(C(e.borderDash,t.borderDash)),i.lineDashOffset=C(e.borderDashOffset,t.borderDashOffset),i.lineJoin=C(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=C(e.borderWidth,t.borderWidth),i.strokeStyle=C(e.borderColor,t.borderColor)}function Pl(i,t,e){i.lineTo(e.x,e.y)}function Cl(i){return i.stepped?ln:i.tension||i.cubicInterpolationMode==="monotone"?cn:Pl}function Do(i,t,e={}){let s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=nr&&o>r;return{count:s,start:l,loop:t.loop,ilen:c(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[_(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[_(u)],f.skip)continue;let y=f.x,x=f.y,M=y|0;M===g?(xm&&(m=x),h=(d*h+y)/++d):(v(),i.lineTo(y,x),g=M,d=0,p=m=x),b=x}v()}function ws(i){let t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?Ol:Dl}function Al(i){return i.stepped?_n:i.tension||i.cubicInterpolationMode==="monotone"?xn:_t}function Tl(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Co(i,t.options),i.stroke(n)}function Ll(i,t,e,s){let{segments:n,options:o}=t,a=ws(t);for(let r of n)Co(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}var Rl=typeof Path2D=="function";function El(i,t,e,s){Rl&&!t.options.segment?Tl(i,t,e,s):Ll(i,t,e,s)}var dt=class extends it{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){let n=s.spanGaps?this._loop:this._fullLoop;pn(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=vn(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){let s=this.options,n=t[e],o=this.points,a=ss(this,{property:e,start:n,end:n});if(!a.length)return;let r=[],l=Al(s),c,h;for(c=0,h=a.length;ci!=="borderDash"&&i!=="fill"};function Un(i,t,e,s){let n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)=e)return i.slice(t,t+e);let a=[],r=(e-2)/(o-2),l=0,c=t+e-1,h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;df&&(f=g,u=i[_],p=_);a[l++]=u,h=p}return a[l++]=i[c],a}function Hl(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p,m=[],b=t+e-1,_=i[t].x,y=i[b].x-_;for(a=t;ap&&(p=c,u=a),n=(o*n+r.x)/++o;else{let M=a-1;if(!T(d)&&!T(u)){let w=Math.min(d,u),S=Math.max(d,u);w!==f&&w!==M&&m.push({...i[w],x:n}),S!==f&&S!==M&&m.push({...i[S],x:n})}a>0&&M!==f&&m.push(i[M]),m.push(r),h=x,o=0,g=p=c,d=u=f=a}}return m}function Ao(i){if(i._decimated){let t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{value:t})}}function Kn(i){i.data.datasets.forEach(t=>{Ao(t)})}function jl(i,t){let e=t.length,s=0,n,{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(at(t,o.axis,a).lo,0,e-1)),c?n=Y(at(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var $l={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Kn(i);return}let s=i.width;i.data.datasets.forEach((n,o)=>{let{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(Gt([r,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;let h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:d,count:u}=jl(l,c),f=e.threshold||4*s;if(u<=f){Ao(n);return}T(a)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case"lttb":g=Nl(c,d,u,s,e);break;case"min-max":g=Hl(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){Kn(i)}};function Yl(i,t,e){let s=i.segments,n=i.points,o=t.points,a=[];for(let r of s){let{start:l,end:c}=r;c=Ps(l,c,n);let h=ks(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}let d=ss(t,h);for(let u of d){let f=ks(e,o[u.start],o[u.end],u.loop),g=is(r,n,f);for(let p of g)a.push({source:p,target:u,start:{[e]:qn(h,f,"start",Math.max)},end:{[e]:qn(h,f,"end",Math.min)}})}}return a}function ks(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i==="angle"&&(n=G(n),o=G(o)),{property:i,start:n,end:o}}function Xl(i,t){let{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=Ps(a,r,n);let l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Ps(i,t,e){for(;t>i;t--){let s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function qn(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function To(i,t){let e=[],s=!1;return I(i)?(s=!0,e=i):e=Xl(i,t),e.length?new dt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Gn(i){return i&&i.fill!==!1}function Ul(i,t,e){let n=i[t].fill,o=[t],a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!W(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function Kl(i,t,e){let s=Jl(i);if(D(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return W(n)&&Math.floor(n)===n?ql(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function ql(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function Gl(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:D(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Zl(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:D(i)?s=i.value:s=t.getBaseValue(),s}function Jl(i){let t=i.options,e=t.fill,s=C(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function Ql(i){let{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=tc(t,e);r.push(To({x:null,y:t.bottom},s));for(let l=0;l=0;--a){let r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&us(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){let o=s[n].$filler;Gn(o)&&us(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){let s=t.meta.$filler;!Gn(s)||e.drawTime!=="beforeDatasetDraw"||us(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},to=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},dc=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index,gi=class extends it{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=z(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let s=t.labels,n=$(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=to(s,o),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,o,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){let{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r,d=t;o.textAlign="left",o.textBaseline="middle";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{let m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){let{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t,d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{let _=s+e/2+o.measureText(m.text).width;b>0&&f+n+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:_,height:n},u=Math.max(u,_),f+=n+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Rt(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=X(s,this.left+n,this.right-this.lineWidths[r]);for(let c of e)r!==c.row&&(r=c.row,l=X(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=X(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(let c of e)c.col!==r&&(r=c.col,l=X(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;_e(t,this),this._draw(),xe(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=O.color,l=Rt(t.rtl,this.left,this.width),c=$(a.font),{color:h,padding:d}=a,u=c.size,f=u/2,g;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;let{boxWidth:p,boxHeight:m,itemHeight:b}=to(a,u),_=function(w,S,k){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;n.save();let L=C(k.lineWidth,1);if(n.fillStyle=C(k.fillStyle,r),n.lineCap=C(k.lineCap,"butt"),n.lineDashOffset=C(k.lineDashOffset,0),n.lineJoin=C(k.lineJoin,"miter"),n.lineWidth=L,n.strokeStyle=C(k.strokeStyle,r),n.setLineDash(C(k.lineDash,[])),a.usePointStyle){let R={radius:m*Math.SQRT2/2,pointStyle:k.pointStyle,rotation:k.rotation,borderWidth:L},A=l.xPlus(w,p/2),H=S+f;Yi(n,R,A,H,a.pointStyleWidth&&p)}else{let R=S+Math.max((u-m)/2,0),A=l.leftForLtr(w,p),H=kt(k.borderRadius);n.beginPath(),Object.values(H).some(q=>q!==0)?qt(n,{x:A,y:R,w:p,h:m,radius:H}):n.rect(A,R,p,m),n.fill(),L!==0&&n.stroke()}n.restore()},v=function(w,S,k){wt(n,k.text,w,S+b/2,c,{strikethrough:k.hidden,textAlign:l.textAlign(k.textAlign)})},y=this.isHorizontal(),x=this._computeTitleHeight();y?g={x:X(o,this.left+d,this.right-s[0]),y:this.top+d+x,line:0}:g={x:this.left+d,y:X(o,this.top+x+d,this.bottom-e[0].height),line:0},ts(this.ctx,t.textDirection);let M=b+d;this.legendItems.forEach((w,S)=>{n.strokeStyle=w.fontColor||h,n.fillStyle=w.fontColor||h;let k=n.measureText(w.text).width,L=l.textAlign(w.textAlign||(w.textAlign=a.textAlign)),R=p+f+k,A=g.x,H=g.y;l.setWidth(this.width),y?S>0&&A+R+d>this.right&&(H=g.y+=M,g.line++,A=g.x=X(o,this.left+d,this.right-s[g.line])):S>0&&H+M>this.bottom&&(A=g.x=A+e[g.line].width+d,g.line++,H=g.y=X(o,this.top+x+d,this.bottom-e[g.line].height));let q=l.x(A);_(q,H,w),A=tn(L,A+p+f,y?A+R:this.right,t.rtl),v(l.x(A),H,w),y?g.x+=R+d:g.y+=M}),es(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,s=$(e.font),n=U(e.padding);if(!e.display)return;let o=Rt(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l,h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=X(t.align,d,this.right-u);else{let g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+X(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}let f=X(r,d,d+u);a.textAlign=o.textAlign(qe(r)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,wt(a,e.text,f,h,s)}_computeTitleHeight(){let t=this.options.title,e=$(t.font),s=U(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(lt(t,this.left,this.right)&<(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;si.chart.options.color,boxWidth:40,padding:10,generateLabels(i){let t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o}}=i.legend.options;return i._getSortedDatasetMetas().map(a=>{let r=a.controller.getStyle(e?0:void 0),l=U(r.borderWidth);return{text:t[a.index].label,fillStyle:r.backgroundColor,fontColor:o,hidden:!a.visible,lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:r.borderColor,pointStyle:s||r.pointStyle,rotation:r.rotation,textAlign:n||r.textAlign,borderRadius:0,datasetIndex:a.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}},Ae=class extends it{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=I(s.text)?s.text.length:1;this._padding=U(s.padding);let o=n*$(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align,l=0,c,h,d;return this.isHorizontal()?(h=X(r,s,o),d=e+t,c=o-s):(a.position==="left"?(h=s+t,d=X(r,n,e),l=B*-.5):(h=o-t,d=X(r,e,n),l=B*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let s=$(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);wt(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:qe(e.align),textBaseline:"middle",translation:[a,r]})}};function gc(i,t){let e=new Ae({ctx:i.ctx,options:t,chart:i});K.configure(i,e,t),K.addBox(i,e),i.titleBlock=e}var pc={id:"title",_element:Ae,start(i,t,e){gc(i,e)},stop(i){let t=i.titleBlock;K.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){let s=i.titleBlock;K.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},oi=new WeakMap,mc={id:"subtitle",start(i,t,e){let s=new Ae({ctx:i.ctx,options:e,chart:i});K.configure(i,s,e),K.addBox(i,s),oi.set(i,s)},stop(i){K.removeBox(i,oi.get(i)),oi.delete(i)},beforeUpdate(i,t,e){let s=oi.get(i);K.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Pe={average(i){if(!i.length)return!1;let t,e,s=0,n=0,o=0;for(t=0,e=i.length;t-1?i.split(` +`):i}function bc(i,t){let{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function eo(i,t){let e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=U(t.padding),p=g.height,m=0,b=s.reduce((y,x)=>y+x.before.length+x.lines.length+x.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){let y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let _=0,v=function(y){m=Math.max(m,e.measureText(y).width+_)};return e.save(),e.font=c.string,E(i.title,v),e.font=l.string,E(i.beforeBody.concat(i.afterBody),v),_=t.displayColors?a+2+t.boxPadding:0,E(s,y=>{E(y.before,v),E(y.lines,v),E(y.after,v)}),_=0,e.font=h.string,E(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function _c(i,t){let{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function xc(i,t,e,s){let{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function yc(i,t,e,s){let{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i,c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),xc(c,i,t,e)&&(c="center"),c}function io(i,t,e){let s=e.yAlign||t.yAlign||_c(i,e);return{xAlign:e.xAlign||t.xAlign||yc(i,t,e,s),yAlign:s}}function vc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function Mc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function so(i,t,e,s){let{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=kt(a),g=vc(t,r),p=Mc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function ai(i,t,e){let s=U(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function no(i){return ct([],bt(i))}function wc(i,t,e){return pt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function oo(i,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}var Te=class extends it{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new ci(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=wc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:s}=e,n=s.beforeTitle.apply(this,[t]),o=s.title.apply(this,[t]),a=s.afterTitle.apply(this,[t]),r=[];return r=ct(r,bt(n)),r=ct(r,bt(o)),r=ct(r,bt(a)),r}getBeforeBody(t,e){return no(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){let{callbacks:s}=e,n=[];return E(t,o=>{let a={before:[],lines:[],after:[]},r=oo(s,o);ct(a.before,bt(r.beforeLabel.call(this,o))),ct(a.lines,r.label.call(this,o)),ct(a.after,bt(r.afterLabel.call(this,o))),n.push(a)}),n}getAfterBody(t,e){return no(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){let{callbacks:s}=e,n=s.beforeFooter.apply(this,[t]),o=s.footer.apply(this,[t]),a=s.afterFooter.apply(this,[t]),r=[];return r=ct(r,bt(n)),r=ct(r,bt(o)),r=ct(r,bt(a)),r}_createItems(t){let e=this._active,s=this.chart.data,n=[],o=[],a=[],r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),E(r,h=>{let d=oo(t.callbacks,h);n.push(d.labelColor.call(this,h)),o.push(d.labelPointStyle.call(this,h)),a.push(d.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){let s=this.options.setContext(this.getContext()),n=this._active,o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{let r=Pe[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);let l=this._size=eo(this,s),c=Object.assign({},r,l),h=io(this.chart,s,c),d=so(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){let o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){let{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=kt(r),{x:u,y:f}=t,{width:g,height:p}=e,m,b,_,v,y,x;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,x=y-a):(m=u+g,b=m+a,v=y-a,x=y+a),_=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,_=b+a):(v=f+p,y=v+a,m=b+a,_=b-a),x=v),{x1:m,x2:b,x3:_,y1:v,y2:y,y3:x}}drawTitle(t,e,s){let n=this.title,o=n.length,a,r,l;if(o){let c=Rt(s.rtl,this.x,this.width);for(t.x=ai(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lv!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,qt(t,{x:m,y:p,w:c,h:l,radius:_}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),qt(t,{x:b,y:p+1,w:c-2,h:l-2,radius:_}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(m,p,c,l),t.strokeRect(m,p,c,l),t.fillStyle=a.backgroundColor,t.fillRect(b,p+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){let{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont),u=d.lineHeight,f=0,g=Rt(s.rtl,this.x,this.width),p=function(S){e.fillText(S,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a),b,_,v,y,x,M,w;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=ai(this,m,s),e.fillStyle=s.bodyColor,E(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,M=n.length;y0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){let a=Pe[t.position].call(this,this._active,this._eventPosition);if(!a)return;let r=this._size=eo(this,t),l=Object.assign({},a,this._size),c=io(e,t,l),h=so(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),s=this.opacity;if(!s)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;let a=U(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),ts(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),es(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let s=this._active,n=t.map(({datasetIndex:r,index:l})=>{let c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!me(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!me(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){let o=this.options;if(t.type==="mouseout")return[];if(!n)return e;let a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){let{caretX:s,caretY:n,options:o}=this,a=Pe[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}};Te.positioners=Pe;var kc={id:"tooltip",_element:Te,positioners:Pe,afterInit(i,t,e){e&&(i.tooltip=new Te({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){let t=i.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){let e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:rt,title(i){if(i.length>0){let t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndexi!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Sc=Object.freeze({__proto__:null,Decimation:$l,Filler:hc,Legend:fc,SubTitle:mc,Title:pc,Tooltip:kc}),Pc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function Cc(i,t,e,s){let n=i.indexOf(t);if(n===-1)return Pc(i,t,e,s);let o=i.lastIndexOf(t);return n!==o?e:n}var Dc=(i,t)=>i===null?null:Y(Math.round(i),0,t),ce=class extends Ft{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let s=this.getLabels();for(let{index:n,label:o}of e)s[n]===o&&s.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(T(t))return null;let s=this.getLabels();return e=isFinite(e)&&s[e]===t?e:Cc(s,t,C(e,t),this._addedLabels),Dc(e,s.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:s,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(s=0),e||(n=this.getLabels().length-1)),this.min=s,this.max=n}buildTicks(){let t=this.min,e=this.max,s=this.options.offset,n=[],o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(s?0:1),1),this._startValue=this.min-(s?.5:0);for(let a=t;a<=e;a++)n.push({value:a});return n}getLabelForValue(t){let e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};ce.id="category";ce.defaults={ticks:{callback:ce.prototype.getLabelForValue}};function Oc(i,t){let e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!T(a),_=!T(r),v=!T(c),y=(m-p)/(d+1),x=Ai((m-p)/g/f)*f,M,w,S,k;if(x<1e-14&&!b&&!_)return[{value:p},{value:m}];k=Math.ceil(m/x)-Math.floor(p/x),k>g&&(x=Ai(k*x/g/f)*f),T(l)||(M=Math.pow(10,l),x=Math.ceil(x*M)/M),n==="ticks"?(w=Math.floor(p/x)*x,S=Math.ceil(m/x)*x):(w=p,S=m),b&&_&&o&&Us((r-a)/o,x/1e3)?(k=Math.round(Math.min((r-a)/x,h)),x=(r-a)/k,w=a,S=r):v?(w=b?a:w,S=_?r:S,k=c-1,x=(S-w)/k):(k=(S-w)/x,Ut(k,Math.round(k),x/1e3)?k=Math.round(k):k=Math.ceil(k));let L=Math.max(Li(x),Li(w));M=Math.pow(10,T(l)?L:l),w=Math.round(w*M)/M,S=Math.round(S*M)/M;let R=0;for(b&&(u&&w!==a?(e.push({value:a}),wn=e?n:l,r=l=>o=s?o:l;if(t){let l=ot(n),c=ot(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=1;(o>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(o*.05)),r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,s=this.getTickLimit();s=Math.max(2,s);let n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=Oc(n,o);return t.bounds==="ticks"&&Ti(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){let t=this.ticks,e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){let n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return Zt(t,this.chart.options.locale,this.options.ticks.format)}},Le=class extends he{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=W(t)?t:0,this.max=W(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,s=nt(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};Le.id="linear";Le.defaults={ticks:{callback:pi.formatters.numeric}};function ro(i){return i/Math.pow(10,Math.floor(tt(i)))===1}function Ac(i,t){let e=Math.floor(tt(t.max)),s=Math.ceil(t.max/Math.pow(10,e)),n=[],o=Q(i.min,Math.pow(10,Math.floor(tt(t.min)))),a=Math.floor(tt(o)),r=Math.floor(o/Math.pow(10,a)),l=a<0?Math.pow(10,Math.abs(a)):1;do n.push({value:o,major:ro(o)}),++r,r===10&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)/l;while(a0?s:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=W(t)?Math.max(0,t):null,this.max=W(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),s=this.min,n=this.max,o=l=>s=t?s:l,a=l=>n=e?n:l,r=(l,c)=>Math.pow(10,Math.floor(tt(l))+c);s===n&&(s<=0?(o(1),a(10)):(o(r(s,-1)),a(r(n,1)))),s<=0&&o(r(n,-1)),n<=0&&a(r(s,1)),this._zero&&this.min!==this._suggestedMin&&s===r(this.min,0)&&o(r(s,-1)),this.min=s,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},s=Ac(e,this);return t.bounds==="ticks"&&Ti(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":Zt(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=tt(t),this._valueRange=tt(this.max)-tt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(tt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};Re.id="logarithmic";Re.defaults={ticks:{callback:pi.formatters.logarithmic,major:{enabled:!0}}};function Ss(i){let t=i.ticks;if(t.display&&i.display){let e=U(t.backdropPadding);return C(t.font&&t.font.size,O.font.size)+e.height}return 0}function Tc(i,t,e){return e=I(e)?e:[e],{w:rn(i,t.string,e),h:e.length*t.lineHeight}}function lo(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function Lc(i){let t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?B/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function Ec(i,t,e){let s=[],n=i._pointLabels.length,o=i.options,a=Ss(o)/2,r=i.drawingArea,l=o.pointLabels.centerPointLabels?B/n:0;for(let c=0;c270||e<90)&&(i-=t),i}function Bc(i,t){let{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){let o=s.setContext(i.getPointLabelContext(n)),a=$(o.font),{x:r,y:l,textAlign:c,left:h,top:d,right:u,bottom:f}=i._pointLabelItems[n],{backdropColor:g}=o;if(!T(g)){let p=kt(o.borderRadius),m=U(o.backdropPadding);e.fillStyle=g;let b=h-m.left,_=d-m.top,v=u-h+m.width,y=f-d+m.height;Object.values(p).some(x=>x!==0)?(e.beginPath(),qt(e,{x:b,y:_,w:v,h:y,radius:p}),e.fill()):e.fillRect(b,_,v,y)}wt(e,i._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:c,textBaseline:"middle"})}}function Lo(i,t,e,s){let{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{let n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){let t=this.options;t.display&&t.pointLabels.display?Lc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){let e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+nt(s))}getDistanceFromCenterForValue(t){if(T(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(T(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t{if(h!==0){r=this.getDistanceFromCenterForValue(c.value);let d=n.setContext(this.getContext(h-1));Vc(this,d,r,o)}}),s.display){for(t.save(),a=o-1;a>=0;a--){let c=s.setContext(this.getPointLabelContext(a)),{color:h,lineWidth:d}=c;!d||!h||(t.lineWidth=d,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;let n=this.getIndexAngle(0),o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&!e.reverse)return;let c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;let d=U(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}wt(t,r.label,0,-o,h,{color:c.color})}),t.restore()}drawTitle(){}};zt.id="radialLinear";zt.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:pi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(i){return i},padding:5,centerPointLabels:!1}};zt.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};zt.descriptors={angleLines:{_fallback:"grid"}};var mi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(mi);function Nc(i,t){return i-t}function co(i,t){if(T(t))return null;let e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts,a=t;return typeof s=="function"&&(a=s(a)),W(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Lt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function ho(i,t,e,s){let n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){let a=Z[o];if(mi[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function jc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function $c(i,t,e,s){let n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value,r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function fo(i,t,e){let s=[],n={},o=t.length,a,r;for(a=0;a+t.value))}initOffsets(t){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);let a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){let t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||ho(o.minUnit,e,s,this._getLabelCapacity(e)),r=C(o.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Lt(l)||l===!0,h={},d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);let g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;up-m).map(p=>+p)}getLabelForValue(t){let e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}_tickFormatFunction(t,e,s,n){let o=this.options,a=o.time.displayFormats,r=this._unit,l=this._majorUnit,c=r&&a[r],h=l&&a[l],d=s[e],u=l&&h&&d&&d.major,f=this._adapter.format(t,n||(u?h:c)),g=o.ticks.callback;return g?z(g,[f,e,s],this):f}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=at(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=at(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);let c=a-o;return c?r+(l-r)*(t-o)/c:r}var Ee=class extends Bt{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=ri(e,this.min),this._tableRange=ri(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:s}=this,n=[],o=[],a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;a{Alpine.store("theme");let s=this.getChart();s&&s.destroy(),this.initChart()}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{Alpine.store("theme")==="system"&&this.$nextTick(()=>{let s=this.getChart();s&&s.destroy(),this.initChart()})})},initChart:function(){if(!(!this.$refs.canvas||!this.$refs.backgroundColorElement||!this.$refs.borderColorElement))return new Cs(this.$refs.canvas,{type:"line",data:{labels:t,datasets:[{data:e,borderWidth:2,fill:"start",tension:.5,backgroundColor:getComputedStyle(this.$refs.backgroundColorElement).color,borderColor:getComputedStyle(this.$refs.borderColorElement).color}]},options:{animation:{duration:0},elements:{point:{radius:0}},maintainAspectRatio:!1,plugins:{legend:{display:!1}},scales:{x:{display:!1},y:{display:!1}},tooltips:{enabled:!1}}})},getChart:function(){return this.$refs.canvas?Cs.getChart(this.$refs.canvas):null}}}export{Xc as default}; +/*! Bundled license information: + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * @kurkle/color v0.2.1 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + *) + +chart.js/dist/chart.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) +*/ diff --git a/public/js/turf.js b/public/js/turf.js index 3d7176250..441dc699f 100644 --- a/public/js/turf.js +++ b/public/js/turf.js @@ -1699,7 +1699,7 @@ arguments[4][4][0].apply(exports,arguments) },{"dup":4}],22:[function(require,module,exports){ var linestring = require('@turf/helpers').lineString; - var Spline = require('./spline.js'); + var Spline = require('./spline.old_js'); /** * Takes a {@link LineString|line} and returns a curved version @@ -10592,13 +10592,13 @@ return d[d.length-1];};return ", funcName].join("") },{"@turf/helpers":335}],335:[function(require,module,exports){ arguments[4][6][0].apply(exports,arguments) },{"dup":6}],336:[function(require,module,exports){ - var simplify = require('simplify-js'); + var simplify = require('simplify-old_js'); // supported GeoJSON geometries, used to check whether to wrap in simpleFeature() var supportedTypes = ['LineString', 'MultiLineString', 'Polygon', 'MultiPolygon']; /** - * Takes a {@link LineString} or {@link Polygon} and returns a simplified version. Internally uses [simplify-js](http://mourner.github.io/simplify-js/) to perform simplification. + * Takes a {@link LineString} or {@link Polygon} and returns a simplified version. Internally uses [simplify-old_js](http://mourner.github.io/simplify-js/) to perform simplification. * * @name simplify * @param {Feature<(LineString|Polygon|MultiLineString|MultiPolygon)>|FeatureCollection|GeometryCollection} feature feature to be simplified @@ -10777,8 +10777,8 @@ return d[d.length-1];};return ", funcName].join("") },{"simplify-js":337}],337:[function(require,module,exports){ /* (c) 2013, Vladimir Agafonkin - Simplify.js, a high-performance JS polyline simplification library - mourner.github.io/simplify-js + Simplify.old_js, a high-performance JS polyline simplification library + mourner.github.io/simplify-old_js */ (function () { 'use strict'; @@ -12681,7 +12681,7 @@ return d[d.length-1];};return ", funcName].join("") // // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! // -// Originally from narwhal.js (http://narwhaljs.org) +// Originally from narwhal.old_js (http://narwhaljs.org) // Copyright (c) 2009 Thomas Robinson <280north.com> // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -13099,7 +13099,7 @@ return d[d.length-1];};return ", funcName].join("") },{}],390:[function(require,module,exports){ if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module + // implementation from standard node.old_js 'util' module module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { @@ -13690,11 +13690,11 @@ return d[d.length-1];};return ", funcName].join("") /** * Inherit the prototype methods from one constructor into another. * - * The Function.prototype.inherits from lang.js rewritten as a standalone + * The Function.prototype.inherits from lang.old_js rewritten as a standalone * function (not on Function.prototype). NOTE: If this file is to be loaded * during bootstrapping this function needs to be rewritten using some native * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). + * expected during bootstrapping (see mirror.old_js in r114903). * * @param {function} ctor Constructor function which needs to inherit the * prototype. diff --git a/public/js/vendor.js b/public/js/vendor.js index 1b381edd2..41a86af55 100644 --- a/public/js/vendor.js +++ b/public/js/vendor.js @@ -2,7 +2,7 @@ /***/ "./node_modules/axios/index.js": /*!*************************************!*\ - !*** ./node_modules/axios/index.js ***! + !*** ./node_modules/axios/index.old_js ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -13,7 +13,7 @@ module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/li /***/ "./node_modules/axios/lib/adapters/xhr.js": /*!************************************************!*\ - !*** ./node_modules/axios/lib/adapters/xhr.js ***! + !*** ./node_modules/axios/lib/adapters/xhr.old_js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -214,7 +214,7 @@ module.exports = function xhrAdapter(config) { /***/ "./node_modules/axios/lib/axios.js": /*!*****************************************!*\ - !*** ./node_modules/axios/lib/axios.js ***! + !*** ./node_modules/axios/lib/axios.old_js ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -282,7 +282,7 @@ module.exports.default = axios; /***/ "./node_modules/axios/lib/cancel/Cancel.js": /*!*************************************************!*\ - !*** ./node_modules/axios/lib/cancel/Cancel.js ***! + !*** ./node_modules/axios/lib/cancel/Cancel.old_js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -313,7 +313,7 @@ module.exports = Cancel; /***/ "./node_modules/axios/lib/cancel/CancelToken.js": /*!******************************************************!*\ - !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! + !*** ./node_modules/axios/lib/cancel/CancelToken.old_js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -382,7 +382,7 @@ module.exports = CancelToken; /***/ "./node_modules/axios/lib/cancel/isCancel.js": /*!***************************************************!*\ - !*** ./node_modules/axios/lib/cancel/isCancel.js ***! + !*** ./node_modules/axios/lib/cancel/isCancel.old_js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -399,7 +399,7 @@ module.exports = function isCancel(value) { /***/ "./node_modules/axios/lib/core/Axios.js": /*!**********************************************!*\ - !*** ./node_modules/axios/lib/core/Axios.js ***! + !*** ./node_modules/axios/lib/core/Axios.old_js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -559,7 +559,7 @@ module.exports = Axios; /***/ "./node_modules/axios/lib/core/InterceptorManager.js": /*!***********************************************************!*\ - !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! + !*** ./node_modules/axios/lib/core/InterceptorManager.old_js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -625,7 +625,7 @@ module.exports = InterceptorManager; /***/ "./node_modules/axios/lib/core/buildFullPath.js": /*!******************************************************!*\ - !*** ./node_modules/axios/lib/core/buildFullPath.js ***! + !*** ./node_modules/axios/lib/core/buildFullPath.old_js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -657,7 +657,7 @@ module.exports = function buildFullPath(baseURL, requestedURL) { /***/ "./node_modules/axios/lib/core/createError.js": /*!****************************************************!*\ - !*** ./node_modules/axios/lib/core/createError.js ***! + !*** ./node_modules/axios/lib/core/createError.old_js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -687,7 +687,7 @@ module.exports = function createError(message, config, code, request, response) /***/ "./node_modules/axios/lib/core/dispatchRequest.js": /*!********************************************************!*\ - !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! + !*** ./node_modules/axios/lib/core/dispatchRequest.old_js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -781,7 +781,7 @@ module.exports = function dispatchRequest(config) { /***/ "./node_modules/axios/lib/core/enhanceError.js": /*!*****************************************************!*\ - !*** ./node_modules/axios/lib/core/enhanceError.js ***! + !*** ./node_modules/axios/lib/core/enhanceError.old_js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -835,7 +835,7 @@ module.exports = function enhanceError(error, config, code, request, response) { /***/ "./node_modules/axios/lib/core/mergeConfig.js": /*!****************************************************!*\ - !*** ./node_modules/axios/lib/core/mergeConfig.js ***! + !*** ./node_modules/axios/lib/core/mergeConfig.old_js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -934,7 +934,7 @@ module.exports = function mergeConfig(config1, config2) { /***/ "./node_modules/axios/lib/core/settle.js": /*!***********************************************!*\ - !*** ./node_modules/axios/lib/core/settle.js ***! + !*** ./node_modules/axios/lib/core/settle.old_js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -971,7 +971,7 @@ module.exports = function settle(resolve, reject, response) { /***/ "./node_modules/axios/lib/core/transformData.js": /*!******************************************************!*\ - !*** ./node_modules/axios/lib/core/transformData.js ***! + !*** ./node_modules/axios/lib/core/transformData.old_js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1005,7 +1005,7 @@ module.exports = function transformData(data, headers, fns) { /***/ "./node_modules/axios/lib/defaults.js": /*!********************************************!*\ - !*** ./node_modules/axios/lib/defaults.js ***! + !*** ./node_modules/axios/lib/defaults.old_js ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1131,13 +1131,13 @@ utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { module.exports = defaults; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.old_js */ "./node_modules/process/browser.js"))) /***/ }), /***/ "./node_modules/axios/lib/helpers/bind.js": /*!************************************************!*\ - !*** ./node_modules/axios/lib/helpers/bind.js ***! + !*** ./node_modules/axios/lib/helpers/bind.old_js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1160,7 +1160,7 @@ module.exports = function bind(fn, thisArg) { /***/ "./node_modules/axios/lib/helpers/buildURL.js": /*!****************************************************!*\ - !*** ./node_modules/axios/lib/helpers/buildURL.js ***! + !*** ./node_modules/axios/lib/helpers/buildURL.old_js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1242,7 +1242,7 @@ module.exports = function buildURL(url, params, paramsSerializer) { /***/ "./node_modules/axios/lib/helpers/combineURLs.js": /*!*******************************************************!*\ - !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! + !*** ./node_modules/axios/lib/helpers/combineURLs.old_js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1268,7 +1268,7 @@ module.exports = function combineURLs(baseURL, relativeURL) { /***/ "./node_modules/axios/lib/helpers/cookies.js": /*!***************************************************!*\ - !*** ./node_modules/axios/lib/helpers/cookies.js ***! + !*** ./node_modules/axios/lib/helpers/cookies.old_js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1333,7 +1333,7 @@ module.exports = ( /***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": /*!*********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! + !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.old_js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1359,7 +1359,7 @@ module.exports = function isAbsoluteURL(url) { /***/ "./node_modules/axios/lib/helpers/isAxiosError.js": /*!********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! + !*** ./node_modules/axios/lib/helpers/isAxiosError.old_js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1382,7 +1382,7 @@ module.exports = function isAxiosError(payload) { /***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": /*!***********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! + !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.old_js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1462,7 +1462,7 @@ module.exports = ( /***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": /*!***************************************************************!*\ - !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! + !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.old_js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1486,7 +1486,7 @@ module.exports = function normalizeHeaderName(headers, normalizedName) { /***/ "./node_modules/axios/lib/helpers/parseHeaders.js": /*!********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! + !*** ./node_modules/axios/lib/helpers/parseHeaders.old_js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1551,7 +1551,7 @@ module.exports = function parseHeaders(headers) { /***/ "./node_modules/axios/lib/helpers/spread.js": /*!**************************************************!*\ - !*** ./node_modules/axios/lib/helpers/spread.js ***! + !*** ./node_modules/axios/lib/helpers/spread.old_js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1564,7 +1564,7 @@ module.exports = function parseHeaders(headers) { * * Common use case would be to use `Function.prototype.apply`. * - * ```js + * ```old_js * function f(x, y, z) {} * var args = [1, 2, 3]; * f.apply(null, args); @@ -1572,7 +1572,7 @@ module.exports = function parseHeaders(headers) { * * With `spread` this example can be re-written. * - * ```js + * ```old_js * spread(function(x, y, z) {})([1, 2, 3]); * ``` * @@ -1590,7 +1590,7 @@ module.exports = function spread(callback) { /***/ "./node_modules/axios/lib/helpers/validator.js": /*!*****************************************************!*\ - !*** ./node_modules/axios/lib/helpers/validator.js ***! + !*** ./node_modules/axios/lib/helpers/validator.old_js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1707,7 +1707,7 @@ module.exports = { /***/ "./node_modules/axios/lib/utils.js": /*!*****************************************!*\ - !*** ./node_modules/axios/lib/utils.js ***! + !*** ./node_modules/axios/lib/utils.old_js ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -1978,7 +1978,7 @@ function forEach(obj, fn) { * * Example: * - * ```js + * ```old_js * var result = merge({foo: 123}, {foo: 456}); * console.log(result.foo); // outputs 456 * ``` @@ -2073,27 +2073,27 @@ module.exports = { /*! exports provided: name, version, description, main, scripts, repository, keywords, author, license, bugs, homepage, devDependencies, browser, jsdelivr, unpkg, typings, dependencies, bundlesize, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"name\":\"axios\",\"version\":\"0.21.2\",\"description\":\"Promise based HTTP client for the browser and node.js\",\"main\":\"index.js\",\"scripts\":{\"test\":\"grunt test\",\"start\":\"node ./sandbox/server.js\",\"build\":\"NODE_ENV=production grunt build\",\"preversion\":\"npm test\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\"postversion\":\"git push && git push --tags\",\"examples\":\"node ./examples/server.js\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"fix\":\"eslint --fix lib/**/*.js\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/axios/axios.git\"},\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"author\":\"Matt Zabriskie\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"homepage\":\"https://axios-http.com\",\"devDependencies\":{\"coveralls\":\"^3.0.0\",\"es6-promise\":\"^4.2.4\",\"grunt\":\"^1.3.0\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.1.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^23.0.0\",\"grunt-karma\":\"^4.0.0\",\"grunt-mocha-test\":\"^0.13.3\",\"grunt-ts\":\"^6.0.0-beta.19\",\"grunt-webpack\":\"^4.0.2\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^6.3.2\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-firefox-launcher\":\"^2.1.0\",\"karma-jasmine\":\"^1.1.1\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^4.3.6\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.8\",\"karma-webpack\":\"^4.0.2\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"mocha\":\"^8.2.1\",\"sinon\":\"^4.5.0\",\"terser-webpack-plugin\":\"^4.2.3\",\"typescript\":\"^4.0.5\",\"url-search-params\":\"^0.10.0\",\"webpack\":\"^4.44.2\",\"webpack-dev-server\":\"^3.11.0\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"jsdelivr\":\"dist/axios.min.js\",\"unpkg\":\"dist/axios.min.js\",\"typings\":\"./index.d.ts\",\"dependencies\":{\"follow-redirects\":\"^1.14.0\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}]}"); +module.exports = JSON.parse("{\"name\":\"axios\",\"version\":\"0.21.2\",\"description\":\"Promise based HTTP client for the browser and node.old_js\",\"main\":\"index.old_js\",\"scripts\":{\"test\":\"grunt test\",\"start\":\"node ./sandbox/server.old_js\",\"build\":\"NODE_ENV=production grunt build\",\"preversion\":\"npm test\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\"postversion\":\"git push && git push --tags\",\"examples\":\"node ./examples/server.old_js\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.old_js\",\"fix\":\"eslint --fix lib/**/*.old_js\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/axios/axios.git\"},\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"author\":\"Matt Zabriskie\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"homepage\":\"https://axios-http.com\",\"devDependencies\":{\"coveralls\":\"^3.0.0\",\"es6-promise\":\"^4.2.4\",\"grunt\":\"^1.3.0\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.1.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^23.0.0\",\"grunt-karma\":\"^4.0.0\",\"grunt-mocha-test\":\"^0.13.3\",\"grunt-ts\":\"^6.0.0-beta.19\",\"grunt-webpack\":\"^4.0.2\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^6.3.2\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-firefox-launcher\":\"^2.1.0\",\"karma-jasmine\":\"^1.1.1\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^4.3.6\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.8\",\"karma-webpack\":\"^4.0.2\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"mocha\":\"^8.2.1\",\"sinon\":\"^4.5.0\",\"terser-webpack-plugin\":\"^4.2.3\",\"typescript\":\"^4.0.5\",\"url-search-params\":\"^0.10.0\",\"webpack\":\"^4.44.2\",\"webpack-dev-server\":\"^3.11.0\"},\"browser\":{\"./lib/adapters/http.old_js\":\"./lib/adapters/xhr.old_js\"},\"jsdelivr\":\"dist/axios.min.old_js\",\"unpkg\":\"dist/axios.min.old_js\",\"typings\":\"./index.d.ts\",\"dependencies\":{\"follow-redirects\":\"^1.14.0\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.old_js\",\"threshold\":\"5kB\"}]}"); /***/ }), /***/ "./node_modules/buefy/dist/esm/autocomplete.js": /*!*****************************************************!*\ - !*** ./node_modules/buefy/dist/esm/autocomplete.js ***! + !*** ./node_modules/buefy/dist/esm/autocomplete.old_js ***! \*****************************************************/ /*! exports provided: BAutocomplete, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-aa09eaac.js */ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-aa09eaac.old_js */ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BAutocomplete", function() { return _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__["A"]; }); @@ -2120,7 +2120,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/button.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/button.js ***! + !*** ./node_modules/buefy/dist/esm/button.old_js ***! \***********************************************/ /*! exports provided: default, BButton */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -2128,11 +2128,11 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BButton", function() { return Button; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -2225,11 +2225,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Button = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -2256,7 +2256,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/carousel.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/carousel.js ***! + !*** ./node_modules/buefy/dist/esm/carousel.old_js ***! \*************************************************/ /*! exports provided: default, BCarousel, BCarouselItem, BCarouselList */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -2266,12 +2266,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BCarousel", function() { return Carousel; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BCarouselItem", function() { return CarouselItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BCarouselList", function() { return CarouselList; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); @@ -2553,11 +2553,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Carousel = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -2608,11 +2608,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var CarouselItem = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -2898,11 +2898,11 @@ var __vue_staticRenderFns__$2 = []; /* functional template */ const __vue_is_functional_template__$2 = false; /* style inject */ - + /* style inject SSR */ - - + + var CarouselList = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, __vue_inject_styles__$2, @@ -2931,7 +2931,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/checkbox.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/checkbox.js ***! + !*** ./node_modules/buefy/dist/esm/checkbox.old_js ***! \*************************************************/ /*! exports provided: BCheckbox, default, BCheckboxButton */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -2939,9 +2939,9 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BCheckboxButton", function() { return CheckboxButton; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-2793447b.js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); -/* harmony import */ var _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-d6bb2470.js */ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-2793447b.old_js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); +/* harmony import */ var _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-d6bb2470.old_js */ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BCheckbox", function() { return _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_2__["C"]; }); @@ -2995,11 +2995,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var CheckboxButton = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -3027,7 +3027,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-0644d9fa.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-0644d9fa.old_js ***! \*******************************************************/ /*! exports provided: I */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -3035,11 +3035,11 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return Input; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -3242,11 +3242,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Input = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -3265,7 +3265,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-1252e7e2.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-1252e7e2.old_js ***! \*******************************************************/ /*! exports provided: T */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -3273,10 +3273,10 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return Tooltip; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -3542,11 +3542,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Tooltip = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -3565,7 +3565,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-1fafdf15.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-1fafdf15.old_js ***! \*******************************************************/ /*! exports provided: _, a, b, c, d */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -3681,7 +3681,7 @@ function _nonIterableRest() { /***/ "./node_modules/buefy/dist/esm/chunk-220749df.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-220749df.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-220749df.old_js ***! \*******************************************************/ /*! exports provided: N */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -3689,8 +3689,8 @@ function _nonIterableRest() { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return NoticeMixin; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); @@ -3836,7 +3836,7 @@ var NoticeMixin = { /***/ "./node_modules/buefy/dist/esm/chunk-2793447b.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-2793447b.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-2793447b.old_js ***! \*******************************************************/ /*! exports provided: C */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -3893,7 +3893,7 @@ var CheckRadioMixin = { /***/ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-27eb50a6.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-27eb50a6.old_js ***! \*******************************************************/ /*! exports provided: D */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -3901,16 +3901,16 @@ var CheckRadioMixin = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return Datepicker; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); @@ -4258,11 +4258,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var DatepickerTableRow = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -4598,11 +4598,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var DatepickerTable = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -4934,11 +4934,11 @@ var __vue_staticRenderFns__$2 = []; /* functional template */ const __vue_is_functional_template__$2 = false; /* style inject */ - + /* style inject SSR */ - - + + var DatepickerMonth = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, __vue_inject_styles__$2, @@ -5582,11 +5582,11 @@ var __vue_staticRenderFns__$3 = []; /* functional template */ const __vue_is_functional_template__$3 = false; /* style inject */ - + /* style inject SSR */ - - + + var Datepicker = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__$3, staticRenderFns: __vue_staticRenderFns__$3 }, __vue_inject_styles__$3, @@ -5605,7 +5605,7 @@ var __vue_staticRenderFns__$3 = []; /***/ "./node_modules/buefy/dist/esm/chunk-42f463e6.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-42f463e6.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-42f463e6.old_js ***! \*******************************************************/ /*! exports provided: t */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -5676,7 +5676,7 @@ var directive = { /***/ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-5425f0a4.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-5425f0a4.old_js ***! \*******************************************************/ /*! exports provided: P, a */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -5685,10 +5685,10 @@ var directive = { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return Pagination; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PaginationButton; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -5744,11 +5744,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var PaginationButton = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -6009,11 +6009,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var Pagination = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -6032,7 +6032,7 @@ var __vue_staticRenderFns__$1 = []; /***/ "./node_modules/buefy/dist/esm/chunk-5e460019.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-5e460019.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-5e460019.old_js ***! \*******************************************************/ /*! exports provided: T */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -6040,9 +6040,9 @@ var __vue_staticRenderFns__$1 = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return TimepickerMixin; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); @@ -6772,7 +6772,7 @@ var TimepickerMixin = { /***/ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-5e4db2f1.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-5e4db2f1.old_js ***! \*******************************************************/ /*! exports provided: T */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -6780,14 +6780,14 @@ var TimepickerMixin = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return Timepicker; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-5e460019.js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-5e460019.old_js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); @@ -6831,11 +6831,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Timepicker = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -6854,7 +6854,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-6eb75eec.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-6eb75eec.old_js ***! \*******************************************************/ /*! exports provided: M */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -6862,8 +6862,8 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return MessageMixin; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); @@ -6983,7 +6983,7 @@ var MessageMixin = { /***/ "./node_modules/buefy/dist/esm/chunk-7a49a152.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-7a49a152.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-7a49a152.old_js ***! \*******************************************************/ /*! exports provided: L */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -6991,9 +6991,9 @@ var MessageMixin = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return Loading; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-b9bdb0e4.js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-b9bdb0e4.old_js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); @@ -7122,11 +7122,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Loading = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -7145,7 +7145,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-7bcc5416.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-7bcc5416.old_js ***! \*******************************************************/ /*! exports provided: I */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -7153,10 +7153,10 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return Icon; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -7328,11 +7328,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Icon = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -7351,7 +7351,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-8d37a17c.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-8d37a17c.old_js ***! \*******************************************************/ /*! exports provided: S */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -7359,7 +7359,7 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return SlotComponent; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); var SlotComponent = { @@ -7417,7 +7417,7 @@ var SlotComponent = { /***/ "./node_modules/buefy/dist/esm/chunk-91a2d037.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-91a2d037.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-91a2d037.old_js ***! \*******************************************************/ /*! exports provided: F */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -7425,9 +7425,9 @@ var SlotComponent = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return Field; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -7487,11 +7487,11 @@ const __vue_script__ = script; /* functional template */ const __vue_is_functional_template__ = undefined; /* style inject */ - + /* style inject SSR */ - - + + var FieldBody = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["_"])( {}, __vue_inject_styles__, @@ -7700,11 +7700,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var Field = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__$1, @@ -7723,7 +7723,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-97074b53.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-97074b53.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-97074b53.old_js ***! \*******************************************************/ /*! exports provided: S */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -7731,10 +7731,10 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return Select; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -7810,11 +7810,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Select = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -7833,7 +7833,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-aa09eaac.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-aa09eaac.old_js ***! \*******************************************************/ /*! exports provided: A */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -7841,11 +7841,11 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return Autocomplete; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); @@ -8399,11 +8399,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Autocomplete = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -8422,7 +8422,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-ad63df08.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-ad63df08.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-ad63df08.old_js ***! \*******************************************************/ /*! exports provided: I, P, S, a */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -8433,8 +8433,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return ProviderParentMixin; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return Sorted; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Sorted$1; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); @@ -8595,7 +8595,7 @@ var InjectedChildMixin = (function (parentItemName) { /***/ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-b9bdb0e4.old_js ***! \*******************************************************/ /*! exports provided: F, H */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -8616,7 +8616,7 @@ var File = isSSR ? Object : window.File; /***/ "./node_modules/buefy/dist/esm/chunk-cca88db8.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-cca88db8.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-cca88db8.old_js ***! \*******************************************************/ /*! exports provided: _, a, r, u */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -8732,7 +8732,7 @@ var registerComponentProgrammatic = function registerComponentProgrammatic(Vue, /***/ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-d6bb2470.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-d6bb2470.old_js ***! \*******************************************************/ /*! exports provided: C */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -8740,8 +8740,8 @@ var registerComponentProgrammatic = function registerComponentProgrammatic(Vue, "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return Checkbox; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-2793447b.js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-2793447b.old_js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); @@ -8778,11 +8778,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Checkbox = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -8801,7 +8801,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-db739ac6.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-db739ac6.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-db739ac6.old_js ***! \*******************************************************/ /*! exports provided: T, a */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -8810,11 +8810,11 @@ var __vue_staticRenderFns__ = []; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return TabbedMixin; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TabbedChildMixin; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-8d37a17c.js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-8d37a17c.old_js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); @@ -9018,7 +9018,7 @@ var TabbedChildMixin = (function (parentCmp) { /***/ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-ddbc6c47.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-ddbc6c47.old_js ***! \*******************************************************/ /*! exports provided: D, a */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -9027,12 +9027,12 @@ var TabbedChildMixin = (function (parentCmp) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return Dropdown; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DropdownItem; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); @@ -9442,11 +9442,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Dropdown = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -9541,11 +9541,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var DropdownItem = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -9564,7 +9564,7 @@ var __vue_staticRenderFns__$1 = []; /***/ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-e6c2853b.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-e6c2853b.old_js ***! \*******************************************************/ /*! exports provided: M */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -9572,10 +9572,10 @@ var __vue_staticRenderFns__$1 = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return Modal; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); @@ -9824,11 +9824,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Modal = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -9847,7 +9847,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/chunk-f134e057.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-f134e057.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-f134e057.old_js ***! \*******************************************************/ /*! exports provided: V, a, c, s */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -9931,7 +9931,7 @@ var VueInstance; /***/ "./node_modules/buefy/dist/esm/chunk-f8201455.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-f8201455.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-f8201455.old_js ***! \*******************************************************/ /*! exports provided: F */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -9939,8 +9939,8 @@ var VueInstance; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return FormElementMixin; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); @@ -10122,7 +10122,7 @@ var FormElementMixin = { /***/ "./node_modules/buefy/dist/esm/chunk-fb315748.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/chunk-fb315748.js ***! + !*** ./node_modules/buefy/dist/esm/chunk-fb315748.old_js ***! \*******************************************************/ /*! exports provided: T */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -10130,7 +10130,7 @@ var FormElementMixin = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return Tag; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); // @@ -10237,11 +10237,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Tag = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -10260,7 +10260,7 @@ var __vue_staticRenderFns__ = []; /***/ "./node_modules/buefy/dist/esm/clockpicker.js": /*!****************************************************!*\ - !*** ./node_modules/buefy/dist/esm/clockpicker.js ***! + !*** ./node_modules/buefy/dist/esm/clockpicker.old_js ***! \****************************************************/ /*! exports provided: default, BClockpicker */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -10268,18 +10268,18 @@ var __vue_staticRenderFns__ = []; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BClockpicker", function() { return Clockpicker; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-5e460019.js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-5e460019.old_js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); @@ -10581,11 +10581,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var ClockpickerFace = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -10717,11 +10717,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var Clockpicker = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -10748,7 +10748,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/collapse.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/collapse.js ***! + !*** ./node_modules/buefy/dist/esm/collapse.old_js ***! \*************************************************/ /*! exports provided: default, BCollapse */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -10756,7 +10756,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BCollapse", function() { return Collapse; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); var script = { @@ -10851,11 +10851,11 @@ const __vue_script__ = script; /* functional template */ const __vue_is_functional_template__ = undefined; /* style inject */ - + /* style inject SSR */ - - + + var Collapse = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( {}, __vue_inject_styles__, @@ -10882,26 +10882,26 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/datepicker.js": /*!***************************************************!*\ - !*** ./node_modules/buefy/dist/esm/datepicker.js ***! + !*** ./node_modules/buefy/dist/esm/datepicker.old_js ***! \***************************************************/ /*! exports provided: BDatepicker, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); -/* harmony import */ var _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-27eb50a6.js */ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-27eb50a6.old_js */ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BDatepicker", function() { return _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_12__["D"]; }); @@ -10933,7 +10933,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/datetimepicker.js": /*!*******************************************************!*\ - !*** ./node_modules/buefy/dist/esm/datetimepicker.js ***! + !*** ./node_modules/buefy/dist/esm/datetimepicker.old_js ***! \*******************************************************/ /*! exports provided: default, BDatetimepicker */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -10941,21 +10941,21 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BDatetimepicker", function() { return Datetimepicker; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-5e460019.js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); -/* harmony import */ var _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-27eb50a6.js */ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js"); -/* harmony import */ var _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./chunk-5e4db2f1.js */ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-5e460019.old_js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-27eb50a6.old_js */ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js"); +/* harmony import */ var _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./chunk-5e4db2f1.old_js */ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js"); @@ -11294,11 +11294,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Datetimepicker = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -11325,7 +11325,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/dialog.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/dialog.js ***! + !*** ./node_modules/buefy/dist/esm/dialog.old_js ***! \***********************************************/ /*! exports provided: default, BDialog, DialogProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -11334,13 +11334,13 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BDialog", function() { return Dialog; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DialogProgrammatic", function() { return DialogProgrammatic; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-e6c2853b.js */ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-e6c2853b.old_js */ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js"); @@ -11546,11 +11546,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Dialog = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -11644,20 +11644,20 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/dropdown.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/dropdown.js ***! + !*** ./node_modules/buefy/dist/esm/dropdown.old_js ***! \*************************************************/ /*! exports provided: BDropdown, BDropdownItem, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BDropdown", function() { return _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_6__["D"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BDropdownItem", function() { return _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_6__["a"]; }); @@ -11686,17 +11686,17 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/field.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/field.js ***! + !*** ./node_modules/buefy/dist/esm/field.old_js ***! \**********************************************/ /*! exports provided: BField, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BField", function() { return _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_3__["F"]; }); @@ -11719,7 +11719,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/helpers.js": /*!************************************************!*\ - !*** ./node_modules/buefy/dist/esm/helpers.js ***! + !*** ./node_modules/buefy/dist/esm/helpers.old_js ***! \************************************************/ /*! exports provided: bound, createAbsoluteElement, createNewEvent, escapeRegExpChars, getMonthNames, getValueByPath, getWeekdayNames, hasFlag, indexOf, isCustomElement, isMobile, isVueComponent, isWebpSupported, matchWithGroups, merge, mod, multiColumnSort, removeElement, sign, toCssWidth, toVDom */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -11747,7 +11747,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sign", function() { return sign; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toCssWidth", function() { return toCssWidth; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toVDom", function() { return toVDom; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); /** @@ -12115,20 +12115,20 @@ function toVDom(html, createElement) { /***/ "./node_modules/buefy/dist/esm/icon.js": /*!*********************************************!*\ - !*** ./node_modules/buefy/dist/esm/icon.js ***! + !*** ./node_modules/buefy/dist/esm/icon.old_js ***! \*********************************************/ /*! exports provided: BIcon, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BIcon", function() { return _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__["I"]; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -12150,7 +12150,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/image.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/image.js ***! + !*** ./node_modules/buefy/dist/esm/image.old_js ***! \**********************************************/ /*! exports provided: default, BImage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -12158,10 +12158,10 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BImage", function() { return Image; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -12412,11 +12412,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Image = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -12443,7 +12443,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/index.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/index.js ***! + !*** ./node_modules/buefy/dist/esm/index.old_js ***! \**********************************************/ /*! exports provided: bound, createAbsoluteElement, createNewEvent, escapeRegExpChars, getMonthNames, getValueByPath, getWeekdayNames, hasFlag, indexOf, isCustomElement, isMobile, isVueComponent, isWebpSupported, matchWithGroups, merge, mod, multiColumnSort, removeElement, sign, toCssWidth, toVDom, Autocomplete, Button, Carousel, Checkbox, Collapse, Clockpicker, Datepicker, Datetimepicker, Dialog, DialogProgrammatic, Dropdown, Field, Icon, Image, Input, Loading, LoadingProgrammatic, Menu, Message, Modal, ModalProgrammatic, Notification, NotificationProgrammatic, Navbar, Numberinput, Pagination, Progress, Radio, Rate, Select, Skeleton, Sidebar, Slider, Snackbar, SnackbarProgrammatic, Steps, Switch, Table, Tabs, Tag, Taginput, Timepicker, Toast, ToastProgrammatic, Tooltip, Upload, default, ConfigProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -12451,8 +12451,8 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigProgrammatic", function() { return ConfigComponent; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bound", function() { return _helpers_js__WEBPACK_IMPORTED_MODULE_1__["bound"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createAbsoluteElement", function() { return _helpers_js__WEBPACK_IMPORTED_MODULE_1__["createAbsoluteElement"]; }); @@ -12495,162 +12495,162 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toVDom", function() { return _helpers_js__WEBPACK_IMPORTED_MODULE_1__["toVDom"]; }); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-aa09eaac.js */ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js"); -/* harmony import */ var _autocomplete_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./autocomplete.js */ "./node_modules/buefy/dist/esm/autocomplete.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-aa09eaac.old_js */ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js"); +/* harmony import */ var _autocomplete_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./autocomplete.old_js */ "./node_modules/buefy/dist/esm/autocomplete.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Autocomplete", function() { return _autocomplete_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); -/* harmony import */ var _button_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./button.js */ "./node_modules/buefy/dist/esm/button.js"); +/* harmony import */ var _button_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./button.old_js */ "./node_modules/buefy/dist/esm/button.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Button", function() { return _button_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _carousel_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./carousel.js */ "./node_modules/buefy/dist/esm/carousel.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _carousel_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./carousel.old_js */ "./node_modules/buefy/dist/esm/carousel.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Carousel", function() { return _carousel_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }); -/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-2793447b.js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); -/* harmony import */ var _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-d6bb2470.js */ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js"); -/* harmony import */ var _checkbox_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./checkbox.js */ "./node_modules/buefy/dist/esm/checkbox.js"); +/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-2793447b.old_js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); +/* harmony import */ var _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-d6bb2470.old_js */ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js"); +/* harmony import */ var _checkbox_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./checkbox.old_js */ "./node_modules/buefy/dist/esm/checkbox.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Checkbox", function() { return _checkbox_js__WEBPACK_IMPORTED_MODULE_14__["default"]; }); -/* harmony import */ var _collapse_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./collapse.js */ "./node_modules/buefy/dist/esm/collapse.js"); +/* harmony import */ var _collapse_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./collapse.old_js */ "./node_modules/buefy/dist/esm/collapse.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Collapse", function() { return _collapse_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }); -/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./chunk-5e460019.js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); -/* harmony import */ var _clockpicker_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./clockpicker.js */ "./node_modules/buefy/dist/esm/clockpicker.js"); +/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./chunk-5e460019.old_js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _clockpicker_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./clockpicker.old_js */ "./node_modules/buefy/dist/esm/clockpicker.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Clockpicker", function() { return _clockpicker_js__WEBPACK_IMPORTED_MODULE_20__["default"]; }); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); -/* harmony import */ var _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./chunk-27eb50a6.js */ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js"); -/* harmony import */ var _datepicker_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./datepicker.js */ "./node_modules/buefy/dist/esm/datepicker.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_27eb50a6_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./chunk-27eb50a6.old_js */ "./node_modules/buefy/dist/esm/chunk-27eb50a6.js"); +/* harmony import */ var _datepicker_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./datepicker.old_js */ "./node_modules/buefy/dist/esm/datepicker.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Datepicker", function() { return _datepicker_js__WEBPACK_IMPORTED_MODULE_23__["default"]; }); -/* harmony import */ var _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./chunk-5e4db2f1.js */ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js"); -/* harmony import */ var _datetimepicker_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./datetimepicker.js */ "./node_modules/buefy/dist/esm/datetimepicker.js"); +/* harmony import */ var _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./chunk-5e4db2f1.old_js */ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js"); +/* harmony import */ var _datetimepicker_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./datetimepicker.old_js */ "./node_modules/buefy/dist/esm/datetimepicker.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Datetimepicker", function() { return _datetimepicker_js__WEBPACK_IMPORTED_MODULE_25__["default"]; }); -/* harmony import */ var _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./chunk-e6c2853b.js */ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js"); -/* harmony import */ var _dialog_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./dialog.js */ "./node_modules/buefy/dist/esm/dialog.js"); +/* harmony import */ var _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./chunk-e6c2853b.old_js */ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js"); +/* harmony import */ var _dialog_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./dialog.old_js */ "./node_modules/buefy/dist/esm/dialog.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Dialog", function() { return _dialog_js__WEBPACK_IMPORTED_MODULE_27__["default"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DialogProgrammatic", function() { return _dialog_js__WEBPACK_IMPORTED_MODULE_27__["DialogProgrammatic"]; }); -/* harmony import */ var _dropdown_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./dropdown.js */ "./node_modules/buefy/dist/esm/dropdown.js"); +/* harmony import */ var _dropdown_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./dropdown.old_js */ "./node_modules/buefy/dist/esm/dropdown.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Dropdown", function() { return _dropdown_js__WEBPACK_IMPORTED_MODULE_28__["default"]; }); -/* harmony import */ var _field_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./field.js */ "./node_modules/buefy/dist/esm/field.js"); +/* harmony import */ var _field_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./field.old_js */ "./node_modules/buefy/dist/esm/field.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Field", function() { return _field_js__WEBPACK_IMPORTED_MODULE_29__["default"]; }); -/* harmony import */ var _icon_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./icon.js */ "./node_modules/buefy/dist/esm/icon.js"); +/* harmony import */ var _icon_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./icon.old_js */ "./node_modules/buefy/dist/esm/icon.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Icon", function() { return _icon_js__WEBPACK_IMPORTED_MODULE_30__["default"]; }); -/* harmony import */ var _image_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./image.js */ "./node_modules/buefy/dist/esm/image.js"); +/* harmony import */ var _image_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./image.old_js */ "./node_modules/buefy/dist/esm/image.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Image", function() { return _image_js__WEBPACK_IMPORTED_MODULE_31__["default"]; }); -/* harmony import */ var _input_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./input.js */ "./node_modules/buefy/dist/esm/input.js"); +/* harmony import */ var _input_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./input.old_js */ "./node_modules/buefy/dist/esm/input.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Input", function() { return _input_js__WEBPACK_IMPORTED_MODULE_32__["default"]; }); -/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./chunk-b9bdb0e4.js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); -/* harmony import */ var _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./chunk-7a49a152.js */ "./node_modules/buefy/dist/esm/chunk-7a49a152.js"); -/* harmony import */ var _loading_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./loading.js */ "./node_modules/buefy/dist/esm/loading.js"); +/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./chunk-b9bdb0e4.old_js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); +/* harmony import */ var _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./chunk-7a49a152.old_js */ "./node_modules/buefy/dist/esm/chunk-7a49a152.js"); +/* harmony import */ var _loading_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./loading.old_js */ "./node_modules/buefy/dist/esm/loading.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Loading", function() { return _loading_js__WEBPACK_IMPORTED_MODULE_35__["default"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LoadingProgrammatic", function() { return _loading_js__WEBPACK_IMPORTED_MODULE_35__["LoadingProgrammatic"]; }); -/* harmony import */ var _menu_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./menu.js */ "./node_modules/buefy/dist/esm/menu.js"); +/* harmony import */ var _menu_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./menu.old_js */ "./node_modules/buefy/dist/esm/menu.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Menu", function() { return _menu_js__WEBPACK_IMPORTED_MODULE_36__["default"]; }); -/* harmony import */ var _chunk_6eb75eec_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./chunk-6eb75eec.js */ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js"); -/* harmony import */ var _message_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./message.js */ "./node_modules/buefy/dist/esm/message.js"); +/* harmony import */ var _chunk_6eb75eec_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./chunk-6eb75eec.old_js */ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js"); +/* harmony import */ var _message_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./message.old_js */ "./node_modules/buefy/dist/esm/message.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Message", function() { return _message_js__WEBPACK_IMPORTED_MODULE_38__["default"]; }); -/* harmony import */ var _modal_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./modal.js */ "./node_modules/buefy/dist/esm/modal.js"); +/* harmony import */ var _modal_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./modal.old_js */ "./node_modules/buefy/dist/esm/modal.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Modal", function() { return _modal_js__WEBPACK_IMPORTED_MODULE_39__["default"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ModalProgrammatic", function() { return _modal_js__WEBPACK_IMPORTED_MODULE_39__["ModalProgrammatic"]; }); -/* harmony import */ var _notification_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./notification.js */ "./node_modules/buefy/dist/esm/notification.js"); +/* harmony import */ var _notification_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./notification.old_js */ "./node_modules/buefy/dist/esm/notification.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return _notification_js__WEBPACK_IMPORTED_MODULE_40__["default"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NotificationProgrammatic", function() { return _notification_js__WEBPACK_IMPORTED_MODULE_40__["NotificationProgrammatic"]; }); -/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./chunk-220749df.js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); -/* harmony import */ var _navbar_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./navbar.js */ "./node_modules/buefy/dist/esm/navbar.js"); +/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./chunk-220749df.old_js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); +/* harmony import */ var _navbar_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./navbar.old_js */ "./node_modules/buefy/dist/esm/navbar.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Navbar", function() { return _navbar_js__WEBPACK_IMPORTED_MODULE_42__["default"]; }); -/* harmony import */ var _numberinput_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./numberinput.js */ "./node_modules/buefy/dist/esm/numberinput.js"); +/* harmony import */ var _numberinput_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./numberinput.old_js */ "./node_modules/buefy/dist/esm/numberinput.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Numberinput", function() { return _numberinput_js__WEBPACK_IMPORTED_MODULE_43__["default"]; }); -/* harmony import */ var _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./chunk-5425f0a4.js */ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js"); -/* harmony import */ var _pagination_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./pagination.js */ "./node_modules/buefy/dist/esm/pagination.js"); +/* harmony import */ var _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./chunk-5425f0a4.old_js */ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js"); +/* harmony import */ var _pagination_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./pagination.old_js */ "./node_modules/buefy/dist/esm/pagination.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Pagination", function() { return _pagination_js__WEBPACK_IMPORTED_MODULE_45__["default"]; }); -/* harmony import */ var _progress_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./progress.js */ "./node_modules/buefy/dist/esm/progress.js"); +/* harmony import */ var _progress_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./progress.old_js */ "./node_modules/buefy/dist/esm/progress.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Progress", function() { return _progress_js__WEBPACK_IMPORTED_MODULE_46__["default"]; }); -/* harmony import */ var _radio_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./radio.js */ "./node_modules/buefy/dist/esm/radio.js"); +/* harmony import */ var _radio_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./radio.old_js */ "./node_modules/buefy/dist/esm/radio.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Radio", function() { return _radio_js__WEBPACK_IMPORTED_MODULE_47__["default"]; }); -/* harmony import */ var _rate_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./rate.js */ "./node_modules/buefy/dist/esm/rate.js"); +/* harmony import */ var _rate_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./rate.old_js */ "./node_modules/buefy/dist/esm/rate.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Rate", function() { return _rate_js__WEBPACK_IMPORTED_MODULE_48__["default"]; }); -/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./select.js */ "./node_modules/buefy/dist/esm/select.js"); +/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./select.old_js */ "./node_modules/buefy/dist/esm/select.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Select", function() { return _select_js__WEBPACK_IMPORTED_MODULE_49__["default"]; }); -/* harmony import */ var _skeleton_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./skeleton.js */ "./node_modules/buefy/dist/esm/skeleton.js"); +/* harmony import */ var _skeleton_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./skeleton.old_js */ "./node_modules/buefy/dist/esm/skeleton.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Skeleton", function() { return _skeleton_js__WEBPACK_IMPORTED_MODULE_50__["default"]; }); -/* harmony import */ var _sidebar_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./sidebar.js */ "./node_modules/buefy/dist/esm/sidebar.js"); +/* harmony import */ var _sidebar_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./sidebar.old_js */ "./node_modules/buefy/dist/esm/sidebar.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Sidebar", function() { return _sidebar_js__WEBPACK_IMPORTED_MODULE_51__["default"]; }); -/* harmony import */ var _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./chunk-1252e7e2.js */ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js"); -/* harmony import */ var _slider_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./slider.js */ "./node_modules/buefy/dist/esm/slider.js"); +/* harmony import */ var _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./chunk-1252e7e2.old_js */ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js"); +/* harmony import */ var _slider_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./slider.old_js */ "./node_modules/buefy/dist/esm/slider.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Slider", function() { return _slider_js__WEBPACK_IMPORTED_MODULE_53__["default"]; }); -/* harmony import */ var _snackbar_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./snackbar.js */ "./node_modules/buefy/dist/esm/snackbar.js"); +/* harmony import */ var _snackbar_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./snackbar.old_js */ "./node_modules/buefy/dist/esm/snackbar.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Snackbar", function() { return _snackbar_js__WEBPACK_IMPORTED_MODULE_54__["default"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SnackbarProgrammatic", function() { return _snackbar_js__WEBPACK_IMPORTED_MODULE_54__["SnackbarProgrammatic"]; }); -/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./chunk-8d37a17c.js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); -/* harmony import */ var _chunk_db739ac6_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./chunk-db739ac6.js */ "./node_modules/buefy/dist/esm/chunk-db739ac6.js"); -/* harmony import */ var _steps_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./steps.js */ "./node_modules/buefy/dist/esm/steps.js"); +/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./chunk-8d37a17c.old_js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); +/* harmony import */ var _chunk_db739ac6_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./chunk-db739ac6.old_js */ "./node_modules/buefy/dist/esm/chunk-db739ac6.js"); +/* harmony import */ var _steps_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./steps.old_js */ "./node_modules/buefy/dist/esm/steps.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Steps", function() { return _steps_js__WEBPACK_IMPORTED_MODULE_57__["default"]; }); -/* harmony import */ var _switch_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./switch.js */ "./node_modules/buefy/dist/esm/switch.js"); +/* harmony import */ var _switch_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./switch.old_js */ "./node_modules/buefy/dist/esm/switch.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Switch", function() { return _switch_js__WEBPACK_IMPORTED_MODULE_58__["default"]; }); -/* harmony import */ var _table_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./table.js */ "./node_modules/buefy/dist/esm/table.js"); +/* harmony import */ var _table_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./table.old_js */ "./node_modules/buefy/dist/esm/table.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Table", function() { return _table_js__WEBPACK_IMPORTED_MODULE_59__["default"]; }); -/* harmony import */ var _tabs_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./tabs.js */ "./node_modules/buefy/dist/esm/tabs.js"); +/* harmony import */ var _tabs_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./tabs.old_js */ "./node_modules/buefy/dist/esm/tabs.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tabs", function() { return _tabs_js__WEBPACK_IMPORTED_MODULE_60__["default"]; }); -/* harmony import */ var _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./chunk-fb315748.js */ "./node_modules/buefy/dist/esm/chunk-fb315748.js"); -/* harmony import */ var _tag_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./tag.js */ "./node_modules/buefy/dist/esm/tag.js"); +/* harmony import */ var _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./chunk-fb315748.old_js */ "./node_modules/buefy/dist/esm/chunk-fb315748.js"); +/* harmony import */ var _tag_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./tag.old_js */ "./node_modules/buefy/dist/esm/tag.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tag", function() { return _tag_js__WEBPACK_IMPORTED_MODULE_62__["default"]; }); -/* harmony import */ var _taginput_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./taginput.js */ "./node_modules/buefy/dist/esm/taginput.js"); +/* harmony import */ var _taginput_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./taginput.old_js */ "./node_modules/buefy/dist/esm/taginput.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Taginput", function() { return _taginput_js__WEBPACK_IMPORTED_MODULE_63__["default"]; }); -/* harmony import */ var _timepicker_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./timepicker.js */ "./node_modules/buefy/dist/esm/timepicker.js"); +/* harmony import */ var _timepicker_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./timepicker.old_js */ "./node_modules/buefy/dist/esm/timepicker.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Timepicker", function() { return _timepicker_js__WEBPACK_IMPORTED_MODULE_64__["default"]; }); -/* harmony import */ var _toast_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./toast.js */ "./node_modules/buefy/dist/esm/toast.js"); +/* harmony import */ var _toast_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./toast.old_js */ "./node_modules/buefy/dist/esm/toast.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Toast", function() { return _toast_js__WEBPACK_IMPORTED_MODULE_65__["default"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ToastProgrammatic", function() { return _toast_js__WEBPACK_IMPORTED_MODULE_65__["ToastProgrammatic"]; }); -/* harmony import */ var _tooltip_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tooltip.js */ "./node_modules/buefy/dist/esm/tooltip.js"); +/* harmony import */ var _tooltip_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tooltip.old_js */ "./node_modules/buefy/dist/esm/tooltip.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tooltip", function() { return _tooltip_js__WEBPACK_IMPORTED_MODULE_66__["default"]; }); -/* harmony import */ var _upload_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./upload.js */ "./node_modules/buefy/dist/esm/upload.js"); +/* harmony import */ var _upload_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./upload.old_js */ "./node_modules/buefy/dist/esm/upload.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Upload", function() { return _upload_js__WEBPACK_IMPORTED_MODULE_67__["default"]; }); @@ -12842,20 +12842,20 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Buefy); /***/ "./node_modules/buefy/dist/esm/input.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/input.js ***! + !*** ./node_modules/buefy/dist/esm/input.old_js ***! \**********************************************/ /*! exports provided: BInput, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BInput", function() { return _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__["I"]; }); @@ -12881,7 +12881,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/loading.js": /*!************************************************!*\ - !*** ./node_modules/buefy/dist/esm/loading.js ***! + !*** ./node_modules/buefy/dist/esm/loading.old_js ***! \************************************************/ /*! exports provided: BLoading, default, LoadingProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -12889,12 +12889,12 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadingProgrammatic", function() { return LoadingProgrammatic; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-b9bdb0e4.js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); -/* harmony import */ var _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-7a49a152.js */ "./node_modules/buefy/dist/esm/chunk-7a49a152.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-b9bdb0e4.old_js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); +/* harmony import */ var _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-7a49a152.old_js */ "./node_modules/buefy/dist/esm/chunk-7a49a152.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BLoading", function() { return _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_5__["L"]; }); @@ -12937,7 +12937,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/menu.js": /*!*********************************************!*\ - !*** ./node_modules/buefy/dist/esm/menu.js ***! + !*** ./node_modules/buefy/dist/esm/menu.old_js ***! \*********************************************/ /*! exports provided: default, BMenu, BMenuItem, BMenuList */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -12947,11 +12947,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BMenu", function() { return Menu; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BMenuItem", function() { return MenuItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BMenuList", function() { return MenuList; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -13000,11 +13000,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Menu = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -13074,11 +13074,11 @@ const __vue_script__$1 = script$1; /* functional template */ const __vue_is_functional_template__$1 = undefined; /* style inject */ - + /* style inject SSR */ - - + + var MenuList = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( {}, __vue_inject_styles__$1, @@ -13212,11 +13212,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$2 = false; /* style inject */ - + /* style inject SSR */ - - + + var MenuItem = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$2, @@ -13245,7 +13245,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/message.js": /*!************************************************!*\ - !*** ./node_modules/buefy/dist/esm/message.js ***! + !*** ./node_modules/buefy/dist/esm/message.old_js ***! \************************************************/ /*! exports provided: default, BMessage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -13253,12 +13253,12 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BMessage", function() { return Message; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_6eb75eec_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-6eb75eec.js */ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_6eb75eec_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-6eb75eec.old_js */ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js"); @@ -13296,11 +13296,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Message = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -13327,7 +13327,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/modal.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/modal.js ***! + !*** ./node_modules/buefy/dist/esm/modal.old_js ***! \**********************************************/ /*! exports provided: BModal, default, ModalProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -13335,12 +13335,12 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModalProgrammatic", function() { return ModalProgrammatic; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-e6c2853b.js */ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-e6c2853b.old_js */ "./node_modules/buefy/dist/esm/chunk-e6c2853b.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BModal", function() { return _chunk_e6c2853b_js__WEBPACK_IMPORTED_MODULE_5__["M"]; }); @@ -13412,7 +13412,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/navbar.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/navbar.js ***! + !*** ./node_modules/buefy/dist/esm/navbar.old_js ***! \***********************************************/ /*! exports provided: default, BNavbar, BNavbarDropdown, BNavbarItem */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -13422,8 +13422,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BNavbar", function() { return Navbar; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BNavbarDropdown", function() { return NavbarDropdown; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BNavbarItem", function() { return NavbarItem; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -13468,11 +13468,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var NavbarBurger = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -13844,11 +13844,11 @@ const __vue_script__$1 = script$1; /* functional template */ const __vue_is_functional_template__$1 = undefined; /* style inject */ - + /* style inject SSR */ - - + + var Navbar = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["_"])( {}, __vue_inject_styles__$1, @@ -13958,11 +13958,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$2 = false; /* style inject */ - + /* style inject SSR */ - - + + var NavbarItem = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$2, @@ -14054,11 +14054,11 @@ var __vue_staticRenderFns__$2 = []; /* functional template */ const __vue_is_functional_template__$3 = false; /* style inject */ - + /* style inject SSR */ - - + + var NavbarDropdown = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["_"])( { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, __vue_inject_styles__$3, @@ -14087,7 +14087,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/notification.js": /*!*****************************************************!*\ - !*** ./node_modules/buefy/dist/esm/notification.js ***! + !*** ./node_modules/buefy/dist/esm/notification.old_js ***! \*****************************************************/ /*! exports provided: default, BNotification, NotificationProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -14096,13 +14096,13 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BNotification", function() { return Notification; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationProgrammatic", function() { return NotificationProgrammatic; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_6eb75eec_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-6eb75eec.js */ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js"); -/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-220749df.js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_6eb75eec_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-6eb75eec.old_js */ "./node_modules/buefy/dist/esm/chunk-6eb75eec.js"); +/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-220749df.old_js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); @@ -14141,11 +14141,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Notification = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -14190,11 +14190,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var NotificationNotice = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -14266,7 +14266,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/numberinput.js": /*!****************************************************!*\ - !*** ./node_modules/buefy/dist/esm/numberinput.js ***! + !*** ./node_modules/buefy/dist/esm/numberinput.old_js ***! \****************************************************/ /*! exports provided: default, BNumberinput */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -14274,13 +14274,13 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BNumberinput", function() { return Numberinput; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); @@ -14477,11 +14477,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Numberinput = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -14508,19 +14508,19 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/pagination.js": /*!***************************************************!*\ - !*** ./node_modules/buefy/dist/esm/pagination.js ***! + !*** ./node_modules/buefy/dist/esm/pagination.old_js ***! \***************************************************/ /*! exports provided: BPagination, BPaginationButton, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-5425f0a4.js */ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-5425f0a4.old_js */ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BPagination", function() { return _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_5__["P"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BPaginationButton", function() { return _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_5__["a"]; }); @@ -14548,7 +14548,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/progress.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/progress.js ***! + !*** ./node_modules/buefy/dist/esm/progress.old_js ***! \*************************************************/ /*! exports provided: default, BProgress */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -14556,8 +14556,8 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BProgress", function() { return Progress; }); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -14670,11 +14670,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Progress = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -14701,7 +14701,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/radio.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/radio.js ***! + !*** ./node_modules/buefy/dist/esm/radio.old_js ***! \**********************************************/ /*! exports provided: default, BRadio, BRadioButton */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -14710,8 +14710,8 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_1__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BRadio", function() { return Radio; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BRadioButton", function() { return RadioButton; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-2793447b.js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-2793447b.old_js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); @@ -14737,11 +14737,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Radio = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -14790,11 +14790,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var RadioButton = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -14822,7 +14822,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/rate.js": /*!*********************************************!*\ - !*** ./node_modules/buefy/dist/esm/rate.js ***! + !*** ./node_modules/buefy/dist/esm/rate.old_js ***! \*********************************************/ /*! exports provided: default, BRate */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -14830,11 +14830,11 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BRate", function() { return Rate; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -14961,11 +14961,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Rate = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -14992,20 +14992,20 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/select.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/select.js ***! + !*** ./node_modules/buefy/dist/esm/select.old_js ***! \***********************************************/ /*! exports provided: BSelect, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BSelect", function() { return _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_6__["S"]; }); @@ -15031,7 +15031,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/sidebar.js": /*!************************************************!*\ - !*** ./node_modules/buefy/dist/esm/sidebar.js ***! + !*** ./node_modules/buefy/dist/esm/sidebar.old_js ***! \************************************************/ /*! exports provided: default, BSidebar */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -15039,9 +15039,9 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSidebar", function() { return Sidebar; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); @@ -15271,11 +15271,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Sidebar = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -15302,7 +15302,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/skeleton.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/skeleton.js ***! + !*** ./node_modules/buefy/dist/esm/skeleton.old_js ***! \*************************************************/ /*! exports provided: default, BSkeleton */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -15310,7 +15310,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_2__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSkeleton", function() { return Skeleton; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); var script = { @@ -15389,11 +15389,11 @@ const __vue_script__ = script; /* functional template */ const __vue_is_functional_template__ = undefined; /* style inject */ - + /* style inject SSR */ - - + + var Skeleton = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( {}, __vue_inject_styles__, @@ -15420,7 +15420,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/slider.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/slider.js ***! + !*** ./node_modules/buefy/dist/esm/slider.old_js ***! \***********************************************/ /*! exports provided: default, BSlider, BSliderTick */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -15429,11 +15429,11 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSlider", function() { return Slider; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSliderTick", function() { return SliderTick; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-1252e7e2.js */ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-1252e7e2.old_js */ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js"); @@ -15620,11 +15620,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var SliderThumb = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -15695,11 +15695,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$1 = false; /* style inject */ - + /* style inject SSR */ - - + + var SliderTick = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, @@ -15947,11 +15947,11 @@ var __vue_staticRenderFns__$2 = []; /* functional template */ const __vue_is_functional_template__$2 = false; /* style inject */ - + /* style inject SSR */ - - + + var Slider = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, __vue_inject_styles__$2, @@ -15979,7 +15979,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/snackbar.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/snackbar.js ***! + !*** ./node_modules/buefy/dist/esm/snackbar.old_js ***! \*************************************************/ /*! exports provided: default, BSnackbar, SnackbarProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -15988,11 +15988,11 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSnackbar", function() { return Snackbar; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SnackbarProgrammatic", function() { return SnackbarProgrammatic; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-220749df.js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-220749df.old_js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); @@ -16050,11 +16050,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Snackbar = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -16122,7 +16122,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/steps.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/steps.js ***! + !*** ./node_modules/buefy/dist/esm/steps.old_js ***! \**********************************************/ /*! exports provided: default, BStepItem, BSteps */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -16131,14 +16131,14 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BStepItem", function() { return StepItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSteps", function() { return Steps; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-8d37a17c.js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); -/* harmony import */ var _chunk_db739ac6_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-db739ac6.js */ "./node_modules/buefy/dist/esm/chunk-db739ac6.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-8d37a17c.old_js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); +/* harmony import */ var _chunk_db739ac6_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-db739ac6.old_js */ "./node_modules/buefy/dist/esm/chunk-db739ac6.js"); @@ -16329,11 +16329,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Steps = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -16377,11 +16377,11 @@ const __vue_script__$1 = script$1; /* functional template */ const __vue_is_functional_template__$1 = undefined; /* style inject */ - + /* style inject SSR */ - - + + var StepItem = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( {}, __vue_inject_styles__$1, @@ -16409,7 +16409,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/switch.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/switch.js ***! + !*** ./node_modules/buefy/dist/esm/switch.old_js ***! \***********************************************/ /*! exports provided: default, BSwitch */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -16417,7 +16417,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BSwitch", function() { return Switch; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); // @@ -16539,11 +16539,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Switch = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -16570,7 +16570,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/table.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/table.js ***! + !*** ./node_modules/buefy/dist/esm/table.old_js ***! \**********************************************/ /*! exports provided: default, BTable, BTableColumn */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -16579,20 +16579,20 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BTable", function() { return Table; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BTableColumn", function() { return TableColumn; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-2793447b.js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); -/* harmony import */ var _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-d6bb2470.js */ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); -/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-b9bdb0e4.js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); -/* harmony import */ var _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-7a49a152.js */ "./node_modules/buefy/dist/esm/chunk-7a49a152.js"); -/* harmony import */ var _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-5425f0a4.js */ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js"); -/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-8d37a17c.js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_2793447b_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-2793447b.old_js */ "./node_modules/buefy/dist/esm/chunk-2793447b.js"); +/* harmony import */ var _chunk_d6bb2470_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-d6bb2470.old_js */ "./node_modules/buefy/dist/esm/chunk-d6bb2470.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-b9bdb0e4.old_js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); +/* harmony import */ var _chunk_7a49a152_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-7a49a152.old_js */ "./node_modules/buefy/dist/esm/chunk-7a49a152.js"); +/* harmony import */ var _chunk_5425f0a4_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-5425f0a4.old_js */ "./node_modules/buefy/dist/esm/chunk-5425f0a4.js"); +/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-8d37a17c.old_js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); @@ -16751,11 +16751,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var TableMobileSort = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -16854,11 +16854,11 @@ const __vue_script__$1 = script$1; /* functional template */ const __vue_is_functional_template__$1 = undefined; /* style inject */ - + /* style inject SSR */ - - + + var TableColumn = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( {}, __vue_inject_styles__$1, @@ -16950,11 +16950,11 @@ var __vue_staticRenderFns__$1 = []; /* functional template */ const __vue_is_functional_template__$2 = false; /* style inject */ - + /* style inject SSR */ - - + + var TablePagination = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$2, @@ -17953,11 +17953,11 @@ var __vue_staticRenderFns__$2 = []; /* functional template */ const __vue_is_functional_template__$3 = false; /* style inject */ - + /* style inject SSR */ - - + + var Table = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, __vue_inject_styles__$3, @@ -17985,7 +17985,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/tabs.js": /*!*********************************************!*\ - !*** ./node_modules/buefy/dist/esm/tabs.js ***! + !*** ./node_modules/buefy/dist/esm/tabs.old_js ***! \*********************************************/ /*! exports provided: default, BTabItem, BTabs */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -17994,14 +17994,14 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BTabItem", function() { return TabItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BTabs", function() { return Tabs; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-8d37a17c.js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); -/* harmony import */ var _chunk_db739ac6_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-db739ac6.js */ "./node_modules/buefy/dist/esm/chunk-db739ac6.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_8d37a17c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-8d37a17c.old_js */ "./node_modules/buefy/dist/esm/chunk-8d37a17c.js"); +/* harmony import */ var _chunk_db739ac6_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-db739ac6.old_js */ "./node_modules/buefy/dist/esm/chunk-db739ac6.js"); @@ -18068,11 +18068,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Tabs = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -18111,11 +18111,11 @@ const __vue_script__$1 = script$1; /* functional template */ const __vue_is_functional_template__$1 = undefined; /* style inject */ - + /* style inject SSR */ - - + + var TabItem = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( {}, __vue_inject_styles__$1, @@ -18143,7 +18143,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/tag.js": /*!********************************************!*\ - !*** ./node_modules/buefy/dist/esm/tag.js ***! + !*** ./node_modules/buefy/dist/esm/tag.old_js ***! \********************************************/ /*! exports provided: BTag, default, BTaglist */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -18151,8 +18151,8 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BTaglist", function() { return Taglist; }); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-fb315748.js */ "./node_modules/buefy/dist/esm/chunk-fb315748.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunk-fb315748.old_js */ "./node_modules/buefy/dist/esm/chunk-fb315748.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BTag", function() { return _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_1__["T"]; }); @@ -18188,11 +18188,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Taglist = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -18220,7 +18220,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/taginput.js": /*!*************************************************!*\ - !*** ./node_modules/buefy/dist/esm/taginput.js ***! + !*** ./node_modules/buefy/dist/esm/taginput.old_js ***! \*************************************************/ /*! exports provided: default, BTaginput */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -18228,15 +18228,15 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_0__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BTaginput", function() { return Taginput; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-aa09eaac.js */ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js"); -/* harmony import */ var _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-fb315748.js */ "./node_modules/buefy/dist/esm/chunk-fb315748.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_aa09eaac_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-aa09eaac.old_js */ "./node_modules/buefy/dist/esm/chunk-aa09eaac.js"); +/* harmony import */ var _chunk_fb315748_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-fb315748.old_js */ "./node_modules/buefy/dist/esm/chunk-fb315748.js"); @@ -18517,11 +18517,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Taginput = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -18548,27 +18548,27 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/timepicker.js": /*!***************************************************!*\ - !*** ./node_modules/buefy/dist/esm/timepicker.js ***! + !*** ./node_modules/buefy/dist/esm/timepicker.old_js ***! \***************************************************/ /*! exports provided: BTimepicker, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); -/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); -/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-5e460019.js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); -/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-42f463e6.js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); -/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ddbc6c47.js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); -/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-91a2d037.js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); -/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-97074b53.js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); -/* harmony import */ var _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-5e4db2f1.js */ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_7bcc5416_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-7bcc5416.old_js */ "./node_modules/buefy/dist/esm/chunk-7bcc5416.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_0644d9fa_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./chunk-0644d9fa.old_js */ "./node_modules/buefy/dist/esm/chunk-0644d9fa.js"); +/* harmony import */ var _chunk_ad63df08_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-ad63df08.old_js */ "./node_modules/buefy/dist/esm/chunk-ad63df08.js"); +/* harmony import */ var _chunk_5e460019_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./chunk-5e460019.old_js */ "./node_modules/buefy/dist/esm/chunk-5e460019.js"); +/* harmony import */ var _chunk_42f463e6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chunk-42f463e6.old_js */ "./node_modules/buefy/dist/esm/chunk-42f463e6.js"); +/* harmony import */ var _chunk_ddbc6c47_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chunk-ddbc6c47.old_js */ "./node_modules/buefy/dist/esm/chunk-ddbc6c47.js"); +/* harmony import */ var _chunk_91a2d037_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-91a2d037.old_js */ "./node_modules/buefy/dist/esm/chunk-91a2d037.js"); +/* harmony import */ var _chunk_97074b53_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chunk-97074b53.old_js */ "./node_modules/buefy/dist/esm/chunk-97074b53.js"); +/* harmony import */ var _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./chunk-5e4db2f1.old_js */ "./node_modules/buefy/dist/esm/chunk-5e4db2f1.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BTimepicker", function() { return _chunk_5e4db2f1_js__WEBPACK_IMPORTED_MODULE_13__["T"]; }); @@ -18601,7 +18601,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/toast.js": /*!**********************************************!*\ - !*** ./node_modules/buefy/dist/esm/toast.js ***! + !*** ./node_modules/buefy/dist/esm/toast.old_js ***! \**********************************************/ /*! exports provided: default, BToast, ToastProgrammatic */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -18610,11 +18610,11 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_5__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BToast", function() { return Toast; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ToastProgrammatic", function() { return ToastProgrammatic; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-220749df.js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_220749df_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-220749df.old_js */ "./node_modules/buefy/dist/esm/chunk-220749df.js"); @@ -18648,11 +18648,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Toast = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -18719,18 +18719,18 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/tooltip.js": /*!************************************************!*\ - !*** ./node_modules/buefy/dist/esm/tooltip.js ***! + !*** ./node_modules/buefy/dist/esm/tooltip.old_js ***! \************************************************/ /*! exports provided: BTooltip, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-1252e7e2.js */ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-1252e7e2.old_js */ "./node_modules/buefy/dist/esm/chunk-1252e7e2.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BTooltip", function() { return _chunk_1252e7e2_js__WEBPACK_IMPORTED_MODULE_4__["T"]; }); @@ -18754,7 +18754,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); /***/ "./node_modules/buefy/dist/esm/upload.js": /*!***********************************************!*\ - !*** ./node_modules/buefy/dist/esm/upload.js ***! + !*** ./node_modules/buefy/dist/esm/upload.old_js ***! \***********************************************/ /*! exports provided: default, BUpload */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -18762,12 +18762,12 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_3__["u"])(Plugin); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BUpload", function() { return Upload; }); -/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.js */ "./node_modules/buefy/dist/esm/helpers.js"); -/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); -/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); -/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); -/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-b9bdb0e4.js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); +/* harmony import */ var _chunk_1fafdf15_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunk-1fafdf15.old_js */ "./node_modules/buefy/dist/esm/chunk-1fafdf15.js"); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers.old_js */ "./node_modules/buefy/dist/esm/helpers.js"); +/* harmony import */ var _chunk_f134e057_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-f134e057.old_js */ "./node_modules/buefy/dist/esm/chunk-f134e057.js"); +/* harmony import */ var _chunk_f8201455_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chunk-f8201455.old_js */ "./node_modules/buefy/dist/esm/chunk-f8201455.js"); +/* harmony import */ var _chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chunk-cca88db8.old_js */ "./node_modules/buefy/dist/esm/chunk-cca88db8.js"); +/* harmony import */ var _chunk_b9bdb0e4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chunk-b9bdb0e4.old_js */ "./node_modules/buefy/dist/esm/chunk-b9bdb0e4.js"); @@ -18934,11 +18934,11 @@ var __vue_staticRenderFns__ = []; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ - + /* style inject SSR */ - - + + var Upload = Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["_"])( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, @@ -18965,7 +18965,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); /***/ "./node_modules/gsap/AttrPlugin.js": /*!*****************************************!*\ - !*** ./node_modules/gsap/AttrPlugin.js ***! + !*** ./node_modules/gsap/AttrPlugin.old_js ***! \*****************************************/ /*! exports provided: AttrPlugin, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -18974,7 +18974,7 @@ Object(_chunk_cca88db8_js__WEBPACK_IMPORTED_MODULE_4__["u"])(Plugin); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AttrPlugin", function() { return AttrPlugin; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AttrPlugin; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /*! * VERSION: 0.6.1 * DATE: 2018-08-27 @@ -18983,7 +18983,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com */ /* eslint-disable */ @@ -19024,7 +19024,7 @@ var AttrPlugin = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefin /***/ "./node_modules/gsap/BezierPlugin.js": /*!*******************************************!*\ - !*** ./node_modules/gsap/BezierPlugin.js ***! + !*** ./node_modules/gsap/BezierPlugin.old_js ***! \*******************************************/ /*! exports provided: BezierPlugin, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -19033,7 +19033,7 @@ var AttrPlugin = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefin __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BezierPlugin", function() { return BezierPlugin; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BezierPlugin; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /*! * VERSION: 1.3.9 * DATE: 2019-05-17 @@ -19042,7 +19042,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com **/ /* eslint-disable */ @@ -19643,7 +19643,7 @@ __webpack_require__.r(__webpack_exports__); /***/ "./node_modules/gsap/CSSPlugin.js": /*!****************************************!*\ - !*** ./node_modules/gsap/CSSPlugin.js ***! + !*** ./node_modules/gsap/CSSPlugin.old_js ***! \****************************************/ /*! exports provided: CSSPlugin, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -19652,7 +19652,7 @@ __webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CSSPlugin", function() { return CSSPlugin; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CSSPlugin; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /*! * VERSION: 2.1.3 * DATE: 2019-05-17 @@ -19661,7 +19661,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com */ /* eslint-disable */ @@ -20740,14 +20740,14 @@ __webpack_require__.r(__webpack_exports__); } }, - //creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file. + //creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .old_js file. _registerPluginProp = _internals._registerPluginProp = function(p) { if (!_specialProps[p]) { var pluginName = p.charAt(0).toUpperCase() + p.substr(1) + "Plugin"; _registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) { var pluginClass = _globals.com.greensock.plugins[pluginName]; if (!pluginClass) { - _log("Error: " + pluginName + " js file not loaded."); + _log("Error: " + pluginName + " old_js file not loaded."); return pt; } pluginClass._cssRegister(); @@ -22579,7 +22579,7 @@ var CSSPlugin = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].CSSPlugin; /***/ "./node_modules/gsap/DirectionalRotationPlugin.js": /*!********************************************************!*\ - !*** ./node_modules/gsap/DirectionalRotationPlugin.js ***! + !*** ./node_modules/gsap/DirectionalRotationPlugin.old_js ***! \********************************************************/ /*! exports provided: DirectionalRotationPlugin, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -22588,7 +22588,7 @@ var CSSPlugin = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].CSSPlugin; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalRotationPlugin", function() { return DirectionalRotationPlugin; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DirectionalRotationPlugin; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /*! * VERSION: 0.3.1 * DATE: 2018-08-27 @@ -22597,7 +22597,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com **/ /* eslint-disable */ @@ -22680,7 +22680,7 @@ DirectionalRotationPlugin._autoCSS = true; /***/ "./node_modules/gsap/EasePack.js": /*!***************************************!*\ - !*** ./node_modules/gsap/EasePack.js ***! + !*** ./node_modules/gsap/EasePack.old_js ***! \***************************************/ /*! exports provided: Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase, Linear, Power0, Power1, Power2, Power3, Power4 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -22697,7 +22697,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Expo", function() { return Expo; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sine", function() { return Sine; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpoScaleEase", function() { return ExpoScaleEase; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Linear", function() { return _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Linear"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Power0", function() { return _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Power0"]; }); @@ -22718,7 +22718,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com **/ /* eslint-disable */ @@ -22726,7 +22726,7 @@ __webpack_require__.r(__webpack_exports__); _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", ["easing.Ease"], function() { - + var w = (_TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"].GreenSockGlobals || _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]), gs = w.com.greensock, _2PI = Math.PI * 2, @@ -22739,7 +22739,7 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", p.getRatio = f; return C; }, - _easeReg = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Ease"].register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist. + _easeReg = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Ease"].register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.old_js where Ease.register doesn't exist. _wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) { var C = _class("easing."+name, { easeOut:new EaseOut(), @@ -22765,7 +22765,7 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", var C = _class("easing." + n, function(overshoot) { this._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158; this._p2 = this._p1 * 1.525; - }, true), + }, true), p = C.prototype = new _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Ease"](); p.constructor = C; p.getRatio = f; @@ -22804,7 +22804,7 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", }, true), p = SlowMo.prototype = new _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Ease"](), SteppedEase, ExpoScaleEase, RoughEase, _createElastic; - + p.constructor = SlowMo; p.getRatio = function(p) { var r = p + (0.5 - p) * this._p; @@ -22816,7 +22816,7 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", return this._calcEnd ? 1 : r; }; SlowMo.ease = new SlowMo(0.7, 0.7); - + p.config = SlowMo.config = function(linearRatio, power, yoyoMode) { return new SlowMo(linearRatio, power, yoyoMode); }; @@ -22829,7 +22829,7 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", this._p2 = steps + (immediateStart ? 0 : 1); this._p3 = immediateStart ? 1 : 0; }, true); - p = SteppedEase.prototype = new _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Ease"](); + p = SteppedEase.prototype = new _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["Ease"](); p.constructor = SteppedEase; p.getRatio = function(p) { if (p < 0) { @@ -23069,9 +23069,9 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("easing.Back", _easeReg(w.SlowMo, "SlowMo", "ease,"); _easeReg(RoughEase, "RoughEase", "ease,"); _easeReg(SteppedEase, "SteppedEase", "ease,"); - + return Back; - + }, true); var Back = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].Back; @@ -23090,7 +23090,7 @@ var ExpoScaleEase = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].ExpoSc /***/ "./node_modules/gsap/RoundPropsPlugin.js": /*!***********************************************!*\ - !*** ./node_modules/gsap/RoundPropsPlugin.js ***! + !*** ./node_modules/gsap/RoundPropsPlugin.old_js ***! \***********************************************/ /*! exports provided: RoundPropsPlugin, _getRoundFunc, _roundLinkedList, p, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -23102,7 +23102,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_roundLinkedList", function() { return _roundLinkedList; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return p; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RoundPropsPlugin; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /*! * VERSION: 1.6.0 * DATE: 2018-08-27 @@ -23111,7 +23111,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com **/ /* eslint-disable */ @@ -23209,7 +23209,7 @@ var RoundPropsPlugin = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._g /***/ "./node_modules/gsap/TimelineLite.js": /*!*******************************************!*\ - !*** ./node_modules/gsap/TimelineLite.js ***! + !*** ./node_modules/gsap/TimelineLite.old_js ***! \*******************************************/ /*! exports provided: TimelineLite, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -23218,7 +23218,7 @@ var RoundPropsPlugin = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._g __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimelineLite", function() { return TimelineLite; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TimelineLite; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); /*! * VERSION: 2.1.3 * DATE: 2019-05-17 @@ -23227,7 +23227,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com */ /* eslint-disable */ @@ -24068,7 +24068,7 @@ var TimelineLite = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].Timelin /***/ "./node_modules/gsap/TimelineMax.js": /*!******************************************!*\ - !*** ./node_modules/gsap/TimelineMax.js ***! + !*** ./node_modules/gsap/TimelineMax.old_js ***! \******************************************/ /*! exports provided: TimelineMax, TimelineLite, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -24077,8 +24077,8 @@ var TimelineLite = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].Timelin __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimelineMax", function() { return TimelineMax; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TimelineMax; }); -/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.js */ "./node_modules/gsap/TweenLite.js"); -/* harmony import */ var _TimelineLite_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TimelineLite.js */ "./node_modules/gsap/TimelineLite.js"); +/* harmony import */ var _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenLite.old_js */ "./node_modules/gsap/TweenLite.js"); +/* harmony import */ var _TimelineLite_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TimelineLite.old_js */ "./node_modules/gsap/TimelineLite.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimelineLite", function() { return _TimelineLite_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); /*! @@ -24089,7 +24089,7 @@ __webpack_require__.r(__webpack_exports__); * @license Copyright (c) 2008-2019, GreenSock. All rights reserved. * This work is subject to the terms at http://greensock.com/standard-license or for * Club GreenSock members, the software agreement that was issued with your membership. - * + * * @author: Jack Doyle, jack@greensock.com */ /* eslint-disable */ @@ -24098,7 +24098,7 @@ __webpack_require__.r(__webpack_exports__); _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("TimelineMax", ["TimelineLite","TweenLite","easing.Ease"], function() { - + var TimelineMax = function(vars) { _TimelineLite_js__WEBPACK_IMPORTED_MODULE_1__["default"].call(this, vars); this._repeat = this.vars.repeat || 0; @@ -24596,9 +24596,9 @@ _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["_gsScope"]._gsDefine("TimelineMax", } return this.seek(value, true); }; - + return TimelineMax; - + }, true); var TimelineMax = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].TimelineMax; @@ -24608,7 +24608,7 @@ var TimelineMax = _TweenLite_js__WEBPACK_IMPORTED_MODULE_0__["globals"].Timeline /***/ "./node_modules/gsap/TweenLite.js": /*!****************************************!*\ - !*** ./node_modules/gsap/TweenLite.js ***! + !*** ./node_modules/gsap/TweenLite.old_js ***! \****************************************/ /*! exports provided: _gsScope, TweenLite, globals, default, SimpleTimeline, Animation, Ease, Linear, Power0, Power1, Power2, Power3, Power4, TweenPlugin, EventDispatcher */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -24694,7 +24694,7 @@ var TweenLite = (function(window) { * @constructor * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition. * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is - * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin + * inside TweenLite.old_js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.old_js loads and instantiates TweenPlugin * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally. * * Every definition will be added to a "com.greensock" global object (typically window, but if a window.GreenSockGlobals object is found, @@ -24708,11 +24708,11 @@ var TweenLite = (function(window) { * - * + * * - * + * * diff --git a/resources/js/app.js b/resources/js/app.js index 078cfbe25..75628ba2f 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1,53 +1,47 @@ -import './bootstrap'; -import '../css/app.css'; +import './bootstrap.js'; -import Vue from 'vue'; -import store from './store'; -import VueRouter from 'vue-router'; -import router from './routes'; +// Main app files +import { createApp } from 'vue'; +import App from './App.vue'; +import router from './router'; import i18n from './i18n'; -import VueLocalStorage from 'vue-localstorage'; -import VueSweetalert2 from 'vue-sweetalert2'; -import 'sweetalert2/dist/sweetalert2.min.css'; -import VueToastify from 'vue-toastify'; -import VueNumber from 'vue-number-animation'; -import VueEcho from 'vue-echo-laravel'; -import Buefy from 'buefy'; -import fullscreen from 'vue-fullscreen'; -import LaravelPermissionToVueJS from './extra/laravel-permission-to-vuejs'; - -import VueImg from 'v-img'; -import VueTypedJs from 'vue-typed-js' - -import RootContainer from './views/RootContainer.vue'; - -Vue.use(Buefy); -Vue.use(VueRouter); -Vue.use(VueLocalStorage); -Vue.use(VueSweetalert2); -Vue.use(VueToastify, { - theme: 'dark', - errorDuration: 5000, -}); -// Vue.use(VueMask) -Vue.use(VueNumber); -Vue.use(VueEcho, window.Echo); -Vue.use(fullscreen); -Vue.use(VueImg); -Vue.use(VueTypedJs); -Vue.use(LaravelPermissionToVueJS); - -// Format a number with commas: "10,000" -Vue.filter('commas', value => { - return parseInt(value).toLocaleString(); -}); - -const vm = new Vue({ - el: '#app', - store, - router, - i18n, - components: { - RootContainer - } -}); + +// Pinia global store +import { createPinia } from 'pinia'; +const pinia = createPinia(); +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'; +pinia.use(piniaPluginPersistedstate); + +// Load libraries +import Toast from 'vue-toastification'; +import { LoadingPlugin } from 'vue-loading-overlay'; +import { RecycleScroller } from 'vue-virtual-scroller'; +import FloatingVue from 'floating-vue'; + +// Global global components +import Nav from './components/Nav.vue'; +import Modal from './components/Modal/Modal.vue'; + +// Import CSS +import 'vue-toastification/dist/index.css'; +import 'vue-loading-overlay/dist/css/index.css'; +import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'; +import 'floating-vue/dist/style.css'; + +// Disable on mobile +FloatingVue.options.themes.tooltip.disabled = window.innerWidth <= 768; + +// Register app, components and use plugins +const app = createApp(App, window.initialProps); + +app.component('Nav', Nav); +app.component('Modal', Modal); +app.component('RecycleScroller', RecycleScroller); + +app.use(i18n); +app.use(router); +app.use(pinia); +app.use(Toast); +app.use(LoadingPlugin); +app.use(FloatingVue); +app.mount('#app'); diff --git a/resources/js/assets/.DS_Store b/resources/js/assets/.DS_Store new file mode 100644 index 000000000..aa8c3ea38 Binary files /dev/null and b/resources/js/assets/.DS_Store differ diff --git a/resources/js/assets/icons/bronze-medal-2.png b/resources/js/assets/icons/medals/bronze-medal-2.png similarity index 100% rename from resources/js/assets/icons/bronze-medal-2.png rename to resources/js/assets/icons/medals/bronze-medal-2.png diff --git a/resources/js/assets/icons/gold-medal-2.png b/resources/js/assets/icons/medals/gold-medal-2.png similarity index 100% rename from resources/js/assets/icons/gold-medal-2.png rename to resources/js/assets/icons/medals/gold-medal-2.png diff --git a/resources/js/assets/icons/silver-medal-2.png b/resources/js/assets/icons/medals/silver-medal-2.png similarity index 100% rename from resources/js/assets/icons/silver-medal-2.png rename to resources/js/assets/icons/medals/silver-medal-2.png diff --git a/public/build/assets/butts-DfH5MkNF.jpg b/resources/js/assets/images/butts.png similarity index 100% rename from public/build/assets/butts-DfH5MkNF.jpg rename to resources/js/assets/images/butts.png diff --git a/resources/js/assets/images/can.png b/resources/js/assets/images/can.png new file mode 100644 index 000000000..efd988284 Binary files /dev/null and b/resources/js/assets/images/can.png differ diff --git a/resources/js/assets/about/facemask-map.png b/resources/js/assets/images/facemask-map.png similarity index 100% rename from resources/js/assets/about/facemask-map.png rename to resources/js/assets/images/facemask-map.png diff --git a/resources/js/assets/about/facemask-tag.png b/resources/js/assets/images/facemask-tag.png similarity index 100% rename from resources/js/assets/about/facemask-tag.png rename to resources/js/assets/images/facemask-tag.png diff --git a/resources/js/assets/about/iphone.png b/resources/js/assets/images/iphone.png similarity index 100% rename from resources/js/assets/about/iphone.png rename to resources/js/assets/images/iphone.png diff --git a/public/build/assets/microplastics_oranmore-CI7v0KxT.jpg b/resources/js/assets/images/microplastics_oranmore.png similarity index 100% rename from public/build/assets/microplastics_oranmore-CI7v0KxT.jpg rename to resources/js/assets/images/microplastics_oranmore.png diff --git a/resources/js/assets/partners/gitcoin.png b/resources/js/assets/partners/gitcoin.png new file mode 100644 index 000000000..e67ee3068 Binary files /dev/null and b/resources/js/assets/partners/gitcoin.png differ diff --git a/resources/js/assets/pixel_art/.DS_Store b/resources/js/assets/pixel_art/.DS_Store new file mode 100644 index 000000000..41a6d35e5 Binary files /dev/null and b/resources/js/assets/pixel_art/.DS_Store differ diff --git a/resources/js/assets/pixel_art/boy1.jpg b/resources/js/assets/pixel_art/boy1.jpg new file mode 100644 index 000000000..63a4efc84 Binary files /dev/null and b/resources/js/assets/pixel_art/boy1.jpg differ diff --git a/resources/js/assets/pixel_art/girl.jpg b/resources/js/assets/pixel_art/girl.jpg new file mode 100644 index 000000000..1a1164ae0 Binary files /dev/null and b/resources/js/assets/pixel_art/girl.jpg differ diff --git a/resources/js/assets/pixel_art/litterworld.jpeg b/resources/js/assets/pixel_art/litterworld.jpeg new file mode 100644 index 000000000..a1a6452a6 Binary files /dev/null and b/resources/js/assets/pixel_art/litterworld.jpeg differ diff --git a/resources/js/assets/pixel_art/mountains.JPG b/resources/js/assets/pixel_art/mountains.JPG new file mode 100644 index 000000000..6dd6f6252 Binary files /dev/null and b/resources/js/assets/pixel_art/mountains.JPG differ diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index 04072838a..bb2641325 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -3,17 +3,19 @@ import axios from 'axios'; window._ = _; window.axios = axios; +axios.defaults.withCredentials = true; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; -const token = document.head.querySelector('meta[name="csrf-token"]'); - -if (token) { - window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; -} else { - console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); -} +axios.get('/sanctum/csrf-cookie').catch((err) => { + console.error('Failed to get Sanctum CSRF cookie:', err); +}); // Websockets -import './echo'; - +import './echo.js'; +// Leaflet +import './views/Maps/helpers/SmoothWheelZoom.js'; +import '@css/leaflet/MarkerCluster.css'; +import '@css/leaflet/MarkerCluster.Default.css'; +import 'leaflet/dist/leaflet.css'; +import '@css/leaflet/popup.css'; diff --git a/resources/js/components/About/AboutBrands.vue b/resources/js/components/About/AboutBrands.vue new file mode 100644 index 000000000..258d10d99 --- /dev/null +++ b/resources/js/components/About/AboutBrands.vue @@ -0,0 +1,728 @@ + + + + + diff --git a/resources/js/components/About/AboutButts.vue b/resources/js/components/About/AboutButts.vue new file mode 100644 index 000000000..21e12adc3 --- /dev/null +++ b/resources/js/components/About/AboutButts.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/resources/js/components/About/AboutFooter.vue b/resources/js/components/About/AboutFooter.vue new file mode 100644 index 000000000..6d47224d1 --- /dev/null +++ b/resources/js/components/About/AboutFooter.vue @@ -0,0 +1,168 @@ + + + diff --git a/resources/js/components/About/AboutHistory.vue b/resources/js/components/About/AboutHistory.vue new file mode 100644 index 000000000..3e38e860e --- /dev/null +++ b/resources/js/components/About/AboutHistory.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/resources/js/components/About/AboutHow.vue b/resources/js/components/About/AboutHow.vue new file mode 100644 index 000000000..38690b2d9 --- /dev/null +++ b/resources/js/components/About/AboutHow.vue @@ -0,0 +1,490 @@ + + + + + diff --git a/resources/js/components/About/AboutLitter.vue b/resources/js/components/About/AboutLitter.vue new file mode 100644 index 000000000..aed2620e8 --- /dev/null +++ b/resources/js/components/About/AboutLitter.vue @@ -0,0 +1,462 @@ + + + + + diff --git a/resources/js/components/About/AboutMaps.vue b/resources/js/components/About/AboutMaps.vue new file mode 100644 index 000000000..c05e38b69 --- /dev/null +++ b/resources/js/components/About/AboutMaps.vue @@ -0,0 +1,632 @@ + + + + + diff --git a/resources/js/components/About/AboutOceans.vue b/resources/js/components/About/AboutOceans.vue new file mode 100644 index 000000000..82502c651 --- /dev/null +++ b/resources/js/components/About/AboutOceans.vue @@ -0,0 +1,297 @@ + + + + + diff --git a/resources/js/components/About/AboutOpen.vue b/resources/js/components/About/AboutOpen.vue new file mode 100644 index 000000000..5a1e78c35 --- /dev/null +++ b/resources/js/components/About/AboutOpen.vue @@ -0,0 +1,483 @@ + + + + + diff --git a/resources/js/components/About/AboutTechnology.vue b/resources/js/components/About/AboutTechnology.vue new file mode 100644 index 000000000..2f74575a2 --- /dev/null +++ b/resources/js/components/About/AboutTechnology.vue @@ -0,0 +1,312 @@ + + + + + diff --git a/resources/js/components/Leaderboards/LeaderboardFilters.vue b/resources/js/components/Leaderboards/LeaderboardFilters.vue deleted file mode 100644 index 8147737b1..000000000 --- a/resources/js/components/Leaderboards/LeaderboardFilters.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - - - diff --git a/resources/js/components/Loading/Loading.vue b/resources/js/components/Loading/Loading.vue new file mode 100644 index 000000000..34323f678 --- /dev/null +++ b/resources/js/components/Loading/Loading.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/resources/js/components/Loading/Spinner.vue b/resources/js/components/Loading/Spinner.vue new file mode 100644 index 000000000..bb6f137d4 --- /dev/null +++ b/resources/js/components/Loading/Spinner.vue @@ -0,0 +1,20 @@ + diff --git a/resources/js/components/Locations/Charts/TimeSeries/TimeSeries.vue b/resources/js/components/Locations/Charts/TimeSeries/TimeSeries.vue deleted file mode 100644 index 367764ec4..000000000 --- a/resources/js/components/Locations/Charts/TimeSeries/TimeSeries.vue +++ /dev/null @@ -1,93 +0,0 @@ - diff --git a/resources/js/components/Locations/Charts/TimeSeries/TimeSeriesContainer.vue b/resources/js/components/Locations/Charts/TimeSeries/TimeSeriesContainer.vue deleted file mode 100644 index d8c4bf77b..000000000 --- a/resources/js/components/Locations/Charts/TimeSeries/TimeSeriesContainer.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/resources/js/components/Locations/GlobalMetaData.vue b/resources/js/components/Locations/GlobalMetaData.vue index be6f1d7ac..da6761777 100644 --- a/resources/js/components/Locations/GlobalMetaData.vue +++ b/resources/js/components/Locations/GlobalMetaData.vue @@ -1,176 +1,131 @@ - +}); - +}); + diff --git a/resources/js/components/Locations/Location/Charts/LineCharts/TimeSeries.vue b/resources/js/components/Locations/Location/Charts/LineCharts/TimeSeries.vue new file mode 100644 index 000000000..369f99664 --- /dev/null +++ b/resources/js/components/Locations/Location/Charts/LineCharts/TimeSeries.vue @@ -0,0 +1,92 @@ + + + diff --git a/resources/js/components/Locations/Location/Charts/LineCharts/TimeSeriesContainer.vue b/resources/js/components/Locations/Location/Charts/LineCharts/TimeSeriesContainer.vue new file mode 100644 index 000000000..98155c3a7 --- /dev/null +++ b/resources/js/components/Locations/Location/Charts/LineCharts/TimeSeriesContainer.vue @@ -0,0 +1,61 @@ + + + diff --git a/resources/js/components/Locations/Location/Charts/PieCharts/LitterBrands.vue b/resources/js/components/Locations/Location/Charts/PieCharts/LitterBrands.vue new file mode 100644 index 000000000..42f18c010 --- /dev/null +++ b/resources/js/components/Locations/Location/Charts/PieCharts/LitterBrands.vue @@ -0,0 +1,104 @@ + + + diff --git a/resources/js/components/Locations/Location/Charts/PieCharts/LitterChart.vue b/resources/js/components/Locations/Location/Charts/PieCharts/LitterChart.vue new file mode 100644 index 000000000..4ae6562c6 --- /dev/null +++ b/resources/js/components/Locations/Location/Charts/PieCharts/LitterChart.vue @@ -0,0 +1,69 @@ + + + diff --git a/resources/js/components/Locations/Location/Charts/PieCharts/LitterPieCharts.vue b/resources/js/components/Locations/Location/Charts/PieCharts/LitterPieCharts.vue new file mode 100644 index 000000000..951229cf1 --- /dev/null +++ b/resources/js/components/Locations/Location/Charts/PieCharts/LitterPieCharts.vue @@ -0,0 +1,32 @@ + + + diff --git a/resources/js/components/Locations/Location/Controls/Download.vue b/resources/js/components/Locations/Location/Controls/Download.vue new file mode 100644 index 000000000..d81d3ec31 --- /dev/null +++ b/resources/js/components/Locations/Location/Controls/Download.vue @@ -0,0 +1,88 @@ + + + diff --git a/resources/js/components/Locations/Location/Controls/Options.vue b/resources/js/components/Locations/Location/Controls/Options.vue new file mode 100644 index 000000000..fc5c37b66 --- /dev/null +++ b/resources/js/components/Locations/Location/Controls/Options.vue @@ -0,0 +1,65 @@ + + + diff --git a/resources/js/components/Locations/Location/Location.vue b/resources/js/components/Locations/Location/Location.vue new file mode 100644 index 000000000..5f891efd6 --- /dev/null +++ b/resources/js/components/Locations/Location/Location.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/resources/js/components/Locations/Location/LocationMetadata.vue b/resources/js/components/Locations/Location/LocationMetadata.vue new file mode 100644 index 000000000..e37edae2c --- /dev/null +++ b/resources/js/components/Locations/Location/LocationMetadata.vue @@ -0,0 +1,173 @@ + + + diff --git a/resources/js/components/Locations/Location/LocationNavBar.vue b/resources/js/components/Locations/Location/LocationNavBar.vue new file mode 100644 index 000000000..35de4f340 --- /dev/null +++ b/resources/js/components/Locations/Location/LocationNavBar.vue @@ -0,0 +1,38 @@ + + + diff --git a/resources/js/components/Locations/LocationCard.vue b/resources/js/components/Locations/LocationCard.vue new file mode 100644 index 000000000..c9a54c9de --- /dev/null +++ b/resources/js/components/Locations/LocationCard.vue @@ -0,0 +1,132 @@ + + + diff --git a/resources/js/components/Locations/LocationsList.vue b/resources/js/components/Locations/LocationsList.vue new file mode 100644 index 000000000..aac0613a5 --- /dev/null +++ b/resources/js/components/Locations/LocationsList.vue @@ -0,0 +1,60 @@ + + + diff --git a/resources/js/components/Locations/Pagination.vue b/resources/js/components/Locations/Pagination.vue new file mode 100644 index 000000000..3936ff499 --- /dev/null +++ b/resources/js/components/Locations/Pagination.vue @@ -0,0 +1,144 @@ + + + diff --git a/resources/js/components/Locations/Progress.vue b/resources/js/components/Locations/Progress.vue new file mode 100644 index 000000000..00a61a2b2 --- /dev/null +++ b/resources/js/components/Locations/Progress.vue @@ -0,0 +1,132 @@ + + + diff --git a/resources/js/components/Locations/SortLocations.vue b/resources/js/components/Locations/SortLocations.vue new file mode 100644 index 000000000..290a672da --- /dev/null +++ b/resources/js/components/Locations/SortLocations.vue @@ -0,0 +1,155 @@ + + + diff --git a/resources/js/components/Locations/TotalGlobalCounts.vue b/resources/js/components/Locations/TotalGlobalCounts.vue new file mode 100644 index 000000000..9663d650b --- /dev/null +++ b/resources/js/components/Locations/TotalGlobalCounts.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/resources/js/components/Modal/Auth/Login.vue b/resources/js/components/Modal/Auth/Login.vue index 479913f40..9fcfe53f3 100644 --- a/resources/js/components/Modal/Auth/Login.vue +++ b/resources/js/components/Modal/Auth/Login.vue @@ -1,121 +1,91 @@ - - - diff --git a/resources/js/components/Modal/Modal.vue b/resources/js/components/Modal/Modal.vue index c8c7732f4..46445ad64 100644 --- a/resources/js/components/Modal/Modal.vue +++ b/resources/js/components/Modal/Modal.vue @@ -1,297 +1,113 @@ + - diff --git a/resources/js/components/Nav.vue b/resources/js/components/Nav.vue new file mode 100644 index 000000000..1b23ac50f --- /dev/null +++ b/resources/js/components/Nav.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/resources/js/components/Notifications/CleanupCreated.vue b/resources/js/components/Notifications/CleanupCreated.vue deleted file mode 100644 index 8c7bfbd7a..000000000 --- a/resources/js/components/Notifications/CleanupCreated.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/GlobalMapNotification.vue b/resources/js/components/Notifications/GlobalMapNotification.vue deleted file mode 100644 index 1834669f8..000000000 --- a/resources/js/components/Notifications/GlobalMapNotification.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/ImageUploaded.vue b/resources/js/components/Notifications/ImageUploaded.vue deleted file mode 100644 index 7429d78b1..000000000 --- a/resources/js/components/Notifications/ImageUploaded.vue +++ /dev/null @@ -1,186 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/LittercoinMined.vue b/resources/js/components/Notifications/LittercoinMined.vue deleted file mode 100644 index 83f94641c..000000000 --- a/resources/js/components/Notifications/LittercoinMined.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/NewCityAdded.vue b/resources/js/components/Notifications/NewCityAdded.vue deleted file mode 100644 index af7e31e82..000000000 --- a/resources/js/components/Notifications/NewCityAdded.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/NewCountryAdded.vue b/resources/js/components/Notifications/NewCountryAdded.vue deleted file mode 100644 index 54c54e501..000000000 --- a/resources/js/components/Notifications/NewCountryAdded.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/NewStateAdded.vue b/resources/js/components/Notifications/NewStateAdded.vue deleted file mode 100644 index 01b4ded78..000000000 --- a/resources/js/components/Notifications/NewStateAdded.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/TeamCreated.vue b/resources/js/components/Notifications/TeamCreated.vue deleted file mode 100644 index d6781b8d1..000000000 --- a/resources/js/components/Notifications/TeamCreated.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/resources/js/components/Notifications/UserSignedUp.vue b/resources/js/components/Notifications/UserSignedUp.vue deleted file mode 100644 index 65ffad44b..000000000 --- a/resources/js/components/Notifications/UserSignedUp.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/resources/js/components/Redis/GlobalMetrics.vue b/resources/js/components/Redis/GlobalMetrics.vue new file mode 100644 index 000000000..d879ed071 --- /dev/null +++ b/resources/js/components/Redis/GlobalMetrics.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/js/components/Redis/ServerStats.vue b/resources/js/components/Redis/ServerStats.vue new file mode 100644 index 000000000..0cb3d8159 --- /dev/null +++ b/resources/js/components/Redis/ServerStats.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/resources/js/components/Redis/TimeSeries.vue b/resources/js/components/Redis/TimeSeries.vue new file mode 100644 index 000000000..36fadb51e --- /dev/null +++ b/resources/js/components/Redis/TimeSeries.vue @@ -0,0 +1,492 @@ + + + + + diff --git a/resources/js/components/Redis/UsersList.vue b/resources/js/components/Redis/UsersList.vue new file mode 100644 index 000000000..d879ed071 --- /dev/null +++ b/resources/js/components/Redis/UsersList.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/js/components/Litter/LitterTable.vue b/resources/js/components/Tables/LitterTable.vue similarity index 100% rename from resources/js/components/Litter/LitterTable.vue rename to resources/js/components/Tables/LitterTable.vue diff --git a/resources/js/components/Websockets/GlobalMap/LiveEvents.vue b/resources/js/components/Websockets/GlobalMap/LiveEvents.vue new file mode 100644 index 000000000..a86eea8c2 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/LiveEvents.vue @@ -0,0 +1,273 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/BadgeCreated.vue b/resources/js/components/Websockets/GlobalMap/Notifications/BadgeCreated.vue new file mode 100644 index 000000000..f0ac58b5a --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/BadgeCreated.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/CleanupCreated.vue b/resources/js/components/Websockets/GlobalMap/Notifications/CleanupCreated.vue new file mode 100644 index 000000000..bf9fc0751 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/CleanupCreated.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/GlobalMapNotification.vue b/resources/js/components/Websockets/GlobalMap/Notifications/GlobalMapNotification.vue new file mode 100644 index 000000000..cffcf80f8 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/GlobalMapNotification.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/ImageUploaded.vue b/resources/js/components/Websockets/GlobalMap/Notifications/ImageUploaded.vue new file mode 100644 index 000000000..1402ec0b1 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/ImageUploaded.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/LittercoinMined.vue b/resources/js/components/Websockets/GlobalMap/Notifications/LittercoinMined.vue new file mode 100644 index 000000000..7f26939f7 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/LittercoinMined.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/NewCityAdded.vue b/resources/js/components/Websockets/GlobalMap/Notifications/NewCityAdded.vue new file mode 100644 index 000000000..79040da51 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/NewCityAdded.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/NewCountryAdded.vue b/resources/js/components/Websockets/GlobalMap/Notifications/NewCountryAdded.vue new file mode 100644 index 000000000..a91a05832 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/NewCountryAdded.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/NewStateAdded.vue b/resources/js/components/Websockets/GlobalMap/Notifications/NewStateAdded.vue new file mode 100644 index 000000000..833bbbe66 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/NewStateAdded.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/TeamCreated.vue b/resources/js/components/Websockets/GlobalMap/Notifications/TeamCreated.vue new file mode 100644 index 000000000..bd198e0b8 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/TeamCreated.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/resources/js/components/Notifications/Unsubscribed.vue b/resources/js/components/Websockets/GlobalMap/Notifications/Unsubscribed.vue similarity index 100% rename from resources/js/components/Notifications/Unsubscribed.vue rename to resources/js/components/Websockets/GlobalMap/Notifications/Unsubscribed.vue diff --git a/resources/js/components/Websockets/GlobalMap/Notifications/UserSignedUp.vue b/resources/js/components/Websockets/GlobalMap/Notifications/UserSignedUp.vue new file mode 100644 index 000000000..5248af963 --- /dev/null +++ b/resources/js/components/Websockets/GlobalMap/Notifications/UserSignedUp.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/resources/js/components/global/LeaderboardList.vue b/resources/js/components/global/LeaderboardList.vue deleted file mode 100644 index d91ad6daa..000000000 --- a/resources/js/components/global/LeaderboardList.vue +++ /dev/null @@ -1,259 +0,0 @@ - - - - - diff --git a/resources/js/echo.js b/resources/js/echo.js index ba0fca9f1..b393ab140 100644 --- a/resources/js/echo.js +++ b/resources/js/echo.js @@ -10,9 +10,9 @@ window.Echo = new Echo({ wsPort: import.meta.env.VITE_REVERB_PORT ?? 80, wssPort: import.meta.env.VITE_REVERB_PORT ?? 443, forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https', - enabledTransports: ['ws', 'wss'] + enabledTransports: ['ws', 'wss'], }); -// window.Echo.channel("main").listen("UserSignedUp", (event) => { -// console.log(event); -// }); +window.Echo.channel('main').listen('UserSignedUp', (event) => { + console.log('TEST', event); +}); diff --git a/resources/js/i18n.js b/resources/js/i18n.js index b21bc4e67..7580a6e10 100644 --- a/resources/js/i18n.js +++ b/resources/js/i18n.js @@ -1,11 +1,10 @@ -import Vue from 'vue' -import VueI18n from 'vue-i18n' -Vue.use(VueI18n) +import { createI18n } from 'vue-i18n'; +import en from './langs/en.json'; -import { langs } from './langs' - -export default new VueI18n({ +export default createI18n({ locale: 'en', fallbackLocale: 'en', - messages: langs -}); \ No newline at end of file + messages: { + en, + }, +}); diff --git a/resources/js/langs/de/index.js b/resources/js/langs/de/index.js index b3ab15b02..a05adea1e 100644 --- a/resources/js/langs/de/index.js +++ b/resources/js/langs/de/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const de = { @@ -30,4 +30,4 @@ export const de = { tags, teams, upload -}; \ No newline at end of file +}; diff --git a/resources/js/langs/en.json b/resources/js/langs/en.json new file mode 100644 index 000000000..bffa4ba65 --- /dev/null +++ b/resources/js/langs/en.json @@ -0,0 +1,590 @@ +{ + "A global abundance of technology": "A global abundance of technology", + "About": "About", + "Add to the global pollution map": "Add to the global pollution map", + "Add your data": "Add your data", + "Address": "Address", + "Aluminum Can": "Aluminum Can", + "Aluminum, Plastic": "Aluminum, Plastic", + "Anonymous": "Anonymous", + "Blog": "Blog", + "Brand": "Brand", + "Broken glass hurts animals.": "Broken glass hurts animals.", + "Cigarette butts can start fires.": "Cigarette butts can start fires.", + "Community": "Community", + "Condition": "Condition", + "Contact": "Contact", + "Contact Us": "Contact Us", + "Countries": "Countries", + "countries participating": "countries participating", + "Create Account": "Create Account", + "Created by": "Created by", + "Creates real-world positive impact": "Creates real-world positive impact", + "Credits": "Credits", + "Crowdfunding": "Crowdfunding", + "Crushed, Weathered": "Crushed, Weathered", + "Custom tags": "Custom tags", + "data points mapped": "data points mapped", + "Download Data": "Download Data", + "Download for Android": "Download for Android", + "Download for iOS": "Download for iOS", + "Download on App Store": "Download on App Store", + "Enter your email address": "Enter your email address", + "Every photo captures valuable information about its location, time, brand, object, material, and effort.": "Every photo captures valuable information about its location, time, brand, object, material, and effort.", + "Every piece of litter tells a story": "Every piece of litter tells a story", + "Explore": "Explore", + "Facebook Group": "Facebook Group", + "FAQ": "FAQ", + "For many people, litter has become normal and invisible. Maps are powerful because they communicate what we cannot usually see.": "For many people, litter has become normal and invisible. Maps are powerful because they communicate what we cannot usually see.", + "From 2008 → 2025+": "From 2008 → 2025+", + "Get it on Google Play": "Get it on Google Play", + "GitHub": "GitHub", + "Global Leaderboard": "Global Leaderboard", + "Global Map": "Global Map", + "GPS Coordinates": "GPS Coordinates", + "HELP": "HELP", + "Help us create the world's most advanced open database on litter, brands & plastic pollution.": "Help us create the world's most advanced open database on litter, brands & plastic pollution.", + "History of OpenLitterMap": "History of OpenLitterMap", + "How it works": "How it works", + "Human effort": "Human effort", + "Identify the type and brand": "Identify the type and brand", + "Inspire Action": "Inspire Action", + "Interactive Map": "Interactive Map", + "Join a Team": "Join a Team", + "Join Slack": "Join Slack", + "Join the global community mapping litter & plastic pollution.": "Join the global community mapping litter & plastic pollution.", + "Join the Team": "Join the Team", + "Just tag what litter you see in the photo. You can tag if the litter has been picked up or if it's still there. You can upload your photos anytime!": "Just tag what litter you see in the photo. You can tag if the litter has been picked up or if it's still there. You can upload your photos anytime!", + "Leaderboard": "Leaderboard", + "Littercoin": "Littercoin", + "Location": "Location", + "Maps are powerful tools that help us see and understand the world. OpenLitterMap empowers you to use your device for data collection purpose and communicate your story with the world.": "Maps are powerful tools that help us see and understand the world. OpenLitterMap empowers you to use your device for its data collection purpose and communicate your story with the world.", + "Maps tell a story about what we cannot usually see": "Maps tell a story about what we cannot usually see", + "Material": "Material", + "Mobile Apps Launch": "Mobile Apps Launch", + "Next": "Next", + "Object": "Object", + "Open Data": "Open Data", + "OpenLitterMap Tells A Story About The World.": "OpenLitterMap Tells A Story About The World.", + "Our code & data is open and accessible. Everyone has equal, open and unlimited rights to use it for any purpose because open science is the real science.": "Our code & data is open and accessible. Everyone has equal, open and unlimited rights to use it for any purpose because open science is the real science.", + "Our Partners": "Our Partners", + "Photos": "Photos", + "Photos tagged": "Photos tagged", + "Picked up": "Picked up", + "Plastic pollution is out of control.": "Plastic pollution is out of control.", + "Previous": "Previous", + "Problem solving": "Problem solving", + "READ": "READ", + "References": "References", + "Research Paper": "Research Paper", + "Sign up on web": "Sign up on web", + "Tag what you see": "Tag what you see", + "Tags": "Tags", + "Take a photo": "Take a photo", + "Taking a photo of litter": "Taking a photo of litter", + "Taxpayers and volunteers have to work long hours to cleanup the waste produced by super-profitable ocean-polluting megacorporations.": "Taxpayers and volunteers have to work long hours to cleanup the waste produced by super-profitable ocean-polluting megacorporations.", + "Team": "Team", + "Teams & Competitions": "Teams & Competitions", + "Tell your story about plastic pollution": "Tell your story about plastic pollution", + "They poison water by releasing nicotine, arsenic, and microplastics that bioaccumulate in plants and animals.": "They poison water by releasing nicotine, arsenic, and microplastics that bioaccumulate in plants and animals.", + "They privatize all the gains and socialize all the losses, leaving communities to deal with the mess they benefit from.": "They privatize all the gains and socialize all the losses, leaving communities to deal with the mess they benefit from.", + "Trillions of cigarette butts leech toxic chemicals into the environment.": "Trillions of cigarette butts leech toxic chemicals into the environment.", + "Upload": "Upload", + "User ID": "User ID", + "Visibility": "Visibility", + "Want us to email you occasionally with good news?": "Want us to email you occasionally with good news?", + "WATCH": "WATCH", + "We are building the world's most advanced open database on litter, brands & plastic pollution.": "We are building the world's most advanced open database on litter, brands & plastic pollution.", + "We need your help to create the world's most advanced and accessible database on pollution.": "We need your help to create the world's most advanced and accessible database on pollution.", + "Why should we collect data?": "Why should we collect data?", + "World Cup": "World Cup", + "You have been subscribed to the good news! You can unsubscribe at any time.": "You have been subscribed to the good news! You can unsubscribe at any time.", + "Your device can capture valuable information about the location, time, object, material and brand.": "Your device can capture valuable information about the location, time, object, material and brand.", + "© {year} OpenLitterMap. All rights reserved.": "© {year} OpenLitterMap. All rights reserved.", + "litter": { + "categories": { + "alcohol": "Alcohol", + "art": "Art", + "automobile": "Automobile", + "brands": "Brands", + "coastal": "Coastal", + "coffee": "Coffee", + "dumping": "Dumping", + "electronics": "Electronics", + "food": "Food", + "industrial": "Industrial", + "sanitary": "Sanitary", + "softdrinks": "Soft Drinks", + "smoking": "Smoking", + "stationery": "Stationery", + "other": "Other", + "material": "Materials", + "dogshit": "Pets", + "pets": "Pets" + }, + "smoking": { + "butts": "Cigarette Butt", + "lighters": "Lighter", + "cigaretteBox": "Cigarette Box", + "tobaccoPouch": "Tobacco Pouch", + "skins": "Rolling Paper", + "smoking_plastic": "Plastic Packaging", + "filters": "Filter", + "filterbox": "Filter Box", + "vape_pen": "Vape pen", + "vape_oil": "Vape oil", + "smokingOther": "Smoking-Other", + "ashtray": "Ashtray", + "bong": "Bong", + "cigarette_box": "Cigarette Box", + "grinder": "Grinder", + "match_box": "Match Box", + "packaging": "Packaging", + "pipe": "Pipe", + "rollingPapers": "Rolling Papers", + "vapeOil": "Vape Oil", + "vapePen": "Vape Pen", + "other": "Other" + }, + "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", + "pint": "Pint Glass", + "six_pack_rings": "Six-pack rings", + "alcohol_plastic_cups": "Plastic Cups", + "alcoholOther": "Alcohol-Other", + "beer_bottle": "Beer Bottle", + "beer_can": "Beer Can", + "bottleTop": "Bottle Top", + "cider_bottle": "Cider Bottle", + "cider_can": "Cider Can", + "cup": "Cup", + "packaging": "Packaging", + "pint_glass": "Pint Glass", + "pull_ring": "Pull Ring", + "shot_glass": "Shot Glass", + "sixPackRings": "Six Pack Rings", + "spirits_bottle": "Spirits Bottle", + "spirits_can": "Spirits Can", + "straw": "Straw", + "wine_bottle": "Wine Bottle", + "wine_glass": "Wine Glass", + "other": "Other" + }, + "art": { + "item": "Litter Art" + }, + "coffee": { + "coffeeCups": "Coffee Cups", + "coffeeLids": "Coffee Lids", + "coffeeOther": "Coffee-Other", + "cup": "Coffee Cup", + "lid": "Coffee Lid", + "packaging": "Coffee Packaging", + "pod": "Coffee Pod", + "sleeves": "Coffee Sleeve", + "other": "Coffee - Other", + "stirrer": "Coffee Stirrer" + }, + "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", + "aluminium_foil": "Aluminium Foil", + "pizza_box": "Pizza Box", + "foodOther": "Food-Other", + "chewing_gum": "Chewing Gum", + "bag": "Bag", + "box": "Box", + "can": "Can", + "cutlery": "Cutlery", + "gum": "Gum", + "lid": "Lid", + "packaging": "Packaging", + "packet": "Packet", + "tinfoil": "Tinfoil", + "wrapper": "Wrapper", + "crisps": "Crisps", + "jar": "Jar", + "napkin": "Napkin", + "other": "Other", + "plate": "Plate" + }, + "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", + "broken_glass": "Broken Glass", + "softDrinkOther": "Soft Drink-Other", + "brokenGlass": "Broken Glass", + "cup": "Cup", + "energy_bottle": "Energy Bottle", + "fizzy_bottle": "Fizzy Bottle", + "icedTea_can": "IcedTea Can", + "icedTea_carton": "IcedTea Carton", + "iceTea_bottle": "IceTea Bottle", + "juice_can": "Juice Can", + "juice_carton": "Juice Carton", + "juice_pouch": "Juice Pouch", + "label": "Label", + "lid": "Lid", + "packaging": "Packaging", + "plantMilk_carton": "PlantMilk Carton", + "smoothie_bottle": "Smoothie Bottle", + "soda_can": "Soda Can", + "sparklingWater_can": "SparklingWater Can", + "sports_bottle": "Sports Bottle", + "straw": "Straw", + "straw_packaging": "Straw Packaging", + "water_bottle": "Water Bottle", + "pullRing": "Pull Ring", + "drinkingGlass": "Drinking Glass", + "juice_bottle": "Juice Bottle", + "other": "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", + "bandage": "Bandage", + "medicineBottle": "Medicine Bottle", + "mouthwashBottle": "Mouthwash Bottle", + "pillPack": "Pill Pack", + "plaster": "Plaster", + "sanitiser": "Sanitiser", + "syringe": "Syringe", + "wipes": "Wipes", + "condom_wrapper": "Condom Wrapper", + "dentalFloss": "Dental Floss", + "deodorant_can": "Deodorant Can", + "earSwabs": "Ear Swabs", + "other": "Other", + "sanitaryPad": "Sanitary Pad", + "tampon": "Tampon", + "toothbrush": "Toothbrush", + "toothpasteBox": "Toothpaste Box", + "toothpasteTube": "Toothpaste Tube" + }, + "dumping": { + "small": "Small", + "medium": "Medium", + "large": "Large" + }, + "industrial": { + "oil": "Oil", + "industrial_plastic": "Plastic", + "chemical": "Chemical", + "bricks": "Bricks", + "tape": "Tape", + "industrial_other": "Industrial-Other", + "construction": "Construction", + "oilDrum": "Oil Drum", + "pallet": "Pallet", + "pipe": "Pipe", + "plastic": "Plastic", + "wire": "Wire", + "container": "Container", + "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", + "ghost_nets": "Ghost 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", + "degraded_bag": "Degraded Bag", + "degraded_bottle": "Degraded Bottle", + "other": "Other" + }, + "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", + "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": "Dog Poo", + "pooinbag": "Dog Poo In Bag", + "automobile": "Automobile", + "clothing": "Clothing", + "traffic_cone": "Traffic cone", + "life_buoy": "Life Buoy", + "plastic": "Unidentified Plastic", + "dump": "Illegal Dumping", + "metal": "Metal Object", + "plastic_bags": "Plastic Bags", + "election_posters": "Election Posters", + "forsale_posters": "For Sale Posters", + "books": "Books", + "magazine": "Magazines", + "paper": "Paper", + "stationary": "Stationery", + "washing_up": "Washing-up Bottle", + "hair_tie": "Hair Tie", + "ear_plugs": "Ear Plugs (music)", + "batteries": "Batteries", + "elec_small": "Electric small", + "elec_large": "Electric large", + "random_litter": "Random Litter", + "balloons": "Balloons", + "bags_litter": "Bags of Litter", + "overflowing_bins": "Overflowing Bins", + "tyre": "Tyre", + "cable_tie": "Cable Tie", + "other": "Other-Other", + "bagsLitter": "Bags Litter", + "cableTie": "Cable Tie", + "overflowingBins": "Overflowing Bins", + "plasticBags": "Plastic Bags", + "posters": "Posters", + "randomLitter": "Random Litter", + "trafficCone": "Traffic Cone", + "washingUp": "Washing Up", + "appliance": "Appliance", + "furniture": "Furniture", + "graffiti": "Graffiti", + "mattress": "Mattress", + "paintCan": "Paint Can", + "umbrella": "Umbrella" + }, + "presence": { + "picked-up": "I picked it up!", + "still-there": "Was not picked up!", + "picked-up-text": "It's gone.", + "still-there-text": "The litter is still there!" + }, + "no-tags": [], + "not-verified": [], + "not-tagged-yet": [], + "dogshit": { + "poo": "Surprise!", + "poo_in_bag": "Surprise in a bag!" + }, + "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" + }, + "automobile": { + "alloy": "Alloy", + "battery": "Battery", + "bumper": "Bumper", + "car_part": "Car Part", + "engine": "Engine", + "exhaust": "Exhaust", + "license_plate": "License Plate", + "light": "Light", + "mirror": "Mirror", + "oil_can": "Oil Can", + "tyre": "Tyre", + "wheel": "Wheel", + "other": "Other" + }, + "electronics": { + "battery": "Battery", + "cable": "Cable", + "headphones": "Headphones", + "laptop": "Laptop", + "mobilePhone": "Mobile Phone", + "tablet": "Tablet", + "charger": "Charger", + "other": "Other" + }, + "stationery": { + "book": "Book", + "magazine": "Magazine", + "marker": "Marker", + "notebook": "Notebook", + "paperClip": "Paper Clip", + "pen": "Pen", + "pencil": "Pencil", + "rubberBand": "Rubber Band", + "stapler": "Stapler" + }, + "pets": { + "dogshit": "Dogshit", + "dogshit_in_bag": "Dogshit In Bag" + } + } +} diff --git a/resources/js/langs/en/auth/subscribe.json b/resources/js/langs/en/auth/subscribe.json index 05d3510b4..d53a52d5d 100644 --- a/resources/js/langs/en/auth/subscribe.json +++ b/resources/js/langs/en/auth/subscribe.json @@ -5,8 +5,8 @@ "form-create-account": "Create your account", "form-field-name": "Name", "form-field-unique-id": "Unique Identifier", - "form-field-email": "E-Mail Address", - "form-field-password": "Create a strong password", + "form-field-email": "Email Address", + "form-field-password": "Create a password", "form-field-pass-confirm": "Confirm Password", "form-account-conditions": "I have read and agree to the Terms and Conditions of use and Privacy Policy", "form-btn": "Sign up", diff --git a/resources/js/langs/en/home/about.json b/resources/js/langs/en/home/about.json index 27ea36e63..fd6001fa6 100644 --- a/resources/js/langs/en/home/about.json +++ b/resources/js/langs/en/home/about.json @@ -1,6 +1,6 @@ { "what-about-litter" : "What about litter?", - "about2" : "Trillions of plastic-tipped cigarette butts leech toxic chemicals and microplastics into the environment.", + "about2" : "Trillions of plastic-tipped cigarette butts leech toxic chemicals into the environment.", "about3" : "The result?", "about4" : "Massive amounts of nicotine and other toxic chemicals get released.", "about5" : "These toxic chemicals bio-accumulate in various plants and animals. Some of which we eat.", diff --git a/resources/js/langs/en/index.js b/resources/js/langs/en/index.js index 0e3d13892..5de21e34a 100644 --- a/resources/js/langs/en/index.js +++ b/resources/js/langs/en/index.js @@ -1,23 +1,21 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; -import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const en = { auth, common, - creditcard, home, litter, location, @@ -29,5 +27,5 @@ export const en = { signup, tags, teams, - upload + upload, }; diff --git a/resources/js/langs/en/litter.json b/resources/js/langs/en/litter.json index 0c9a602e3..de5536d83 100644 --- a/resources/js/langs/en/litter.json +++ b/resources/js/langs/en/litter.json @@ -2,31 +2,46 @@ "categories": { "alcohol": "Alcohol", "art": "Art", + "automobile": "Automobile", "brands": "Brands", "coastal": "Coastal", "coffee": "Coffee", "dumping": "Dumping", + "electronics": "Electronics", "food": "Food", "industrial": "Industrial", "sanitary": "Sanitary", "softdrinks": "Soft Drinks", "smoking": "Smoking", + "stationery": "Stationery", "other": "Other", - "material": "Material", - "dogshit": "Pets" + "material": "Materials", + "dogshit": "Pets", + "pets": "Pets" }, "smoking": { - "butts": "Cigarettes/Butts", - "lighters": "Lighters", + "butts": "Cigarette Butt", + "lighters": "Lighter", "cigaretteBox": "Cigarette Box", "tobaccoPouch": "Tobacco Pouch", - "skins": "Rolling Papers", + "skins": "Rolling Paper", "smoking_plastic": "Plastic Packaging", - "filters": "Filters", + "filters": "Filter", "filterbox": "Filter Box", "vape_pen": "Vape pen", "vape_oil": "Vape oil", - "smokingOther": "Smoking-Other" + "smokingOther": "Smoking-Other", + "ashtray": "Ashtray", + "bong": "Bong", + "cigarette_box": "Cigarette Box", + "grinder": "Grinder", + "match_box": "Match Box", + "packaging": "Packaging", + "pipe": "Pipe", + "rollingPapers": "Rolling Papers", + "vapeOil": "Vape Oil", + "vapePen": "Vape Pen", + "other": "Other" }, "alcohol": { "beerBottle": "Beer Bottles", @@ -40,7 +55,24 @@ "pint": "Pint Glass", "six_pack_rings": "Six-pack rings", "alcohol_plastic_cups": "Plastic Cups", - "alcoholOther": "Alcohol-Other" + "alcoholOther": "Alcohol-Other", + "beer_bottle": "Beer Bottle", + "beer_can": "Beer Can", + "bottleTop": "Bottle Top", + "cider_bottle": "Cider Bottle", + "cider_can": "Cider Can", + "cup": "Cup", + "packaging": "Packaging", + "pint_glass": "Pint Glass", + "pull_ring": "Pull Ring", + "shot_glass": "Shot Glass", + "sixPackRings": "Six Pack Rings", + "spirits_bottle": "Spirits Bottle", + "spirits_can": "Spirits Can", + "straw": "Straw", + "wine_bottle": "Wine Bottle", + "wine_glass": "Wine Glass", + "other": "Other" }, "art": { "item": "Litter Art" @@ -48,15 +80,22 @@ "coffee": { "coffeeCups": "Coffee Cups", "coffeeLids": "Coffee Lids", - "coffeeOther": "Coffee-Other" + "coffeeOther": "Coffee-Other", + "cup": "Coffee Cup", + "lid": "Coffee Lid", + "packaging": "Coffee Packaging", + "pod": "Coffee Pod", + "sleeves": "Coffee Sleeve", + "other": "Coffee - Other", + "stirrer": "Coffee Stirrer" }, "food": { "sweetWrappers": "Sweet Wrappers", - "paperFoodPackaging": "Paper/Cardboard Packaging", + "paperFoodPackaging": "Paper\/Cardboard Packaging", "plasticFoodPackaging": "Plastic Packaging", "plasticCutlery": "Plastic Cutlery", - "crisp_small": "Crisp/Chip Packet (small)", - "crisp_large": "Crisp/Chip Packet (large)", + "crisp_small": "Crisp\/Chip Packet (small)", + "crisp_large": "Crisp\/Chip Packet (large)", "styrofoam_plate": "Styrofoam Plate", "napkins": "Napkins", "sauce_packet": "Sauce Packet", @@ -65,7 +104,22 @@ "aluminium_foil": "Aluminium Foil", "pizza_box": "Pizza Box", "foodOther": "Food-Other", - "chewing_gum": "Chewing Gum" + "chewing_gum": "Chewing Gum", + "bag": "Bag", + "box": "Box", + "can": "Can", + "cutlery": "Cutlery", + "gum": "Gum", + "lid": "Lid", + "packaging": "Packaging", + "packet": "Packet", + "tinfoil": "Tinfoil", + "wrapper": "Wrapper", + "crisps": "Crisps", + "jar": "Jar", + "napkin": "Napkin", + "other": "Other", + "plate": "Plate" }, "softdrinks": { "waterBottle": "Plastic Water bottle", @@ -90,7 +144,32 @@ "strawpacket": "Straw Packaging", "styro_cup": "Styrofoam Cup", "broken_glass": "Broken Glass", - "softDrinkOther": "Soft Drink-Other" + "softDrinkOther": "Soft Drink-Other", + "brokenGlass": "Broken Glass", + "cup": "Cup", + "energy_bottle": "Energy Bottle", + "fizzy_bottle": "Fizzy Bottle", + "icedTea_can": "IcedTea Can", + "icedTea_carton": "IcedTea Carton", + "iceTea_bottle": "IceTea Bottle", + "juice_can": "Juice Can", + "juice_carton": "Juice Carton", + "juice_pouch": "Juice Pouch", + "label": "Label", + "lid": "Lid", + "packaging": "Packaging", + "plantMilk_carton": "PlantMilk Carton", + "smoothie_bottle": "Smoothie Bottle", + "soda_can": "Soda Can", + "sparklingWater_can": "SparklingWater Can", + "sports_bottle": "Sports Bottle", + "straw": "Straw", + "straw_packaging": "Straw Packaging", + "water_bottle": "Water Bottle", + "pullRing": "Pull Ring", + "drinkingGlass": "Drinking Glass", + "juice_bottle": "Juice Bottle", + "other": "Other" }, "sanitary": { "gloves": "Gloves", @@ -104,7 +183,25 @@ "tooth_brush": "Tooth Brush", "wetwipes": "Wet Wipes", "hand_sanitiser": "Hand Sanitiser", - "sanitaryOther": "Sanitary-Other" + "sanitaryOther": "Sanitary-Other", + "bandage": "Bandage", + "medicineBottle": "Medicine Bottle", + "mouthwashBottle": "Mouthwash Bottle", + "pillPack": "Pill Pack", + "plaster": "Plaster", + "sanitiser": "Sanitiser", + "syringe": "Syringe", + "wipes": "Wipes", + "condom_wrapper": "Condom Wrapper", + "dentalFloss": "Dental Floss", + "deodorant_can": "Deodorant Can", + "earSwabs": "Ear Swabs", + "other": "Other", + "sanitaryPad": "Sanitary Pad", + "tampon": "Tampon", + "toothbrush": "Toothbrush", + "toothpasteBox": "Toothpaste Box", + "toothpasteTube": "Toothpaste Tube" }, "dumping": { "small": "Small", @@ -117,7 +214,15 @@ "chemical": "Chemical", "bricks": "Bricks", "tape": "Tape", - "industrial_other": "Industrial-Other" + "industrial_other": "Industrial-Other", + "construction": "Construction", + "oilDrum": "Oil Drum", + "pallet": "Pallet", + "pipe": "Pipe", + "plastic": "Plastic", + "wire": "Wire", + "container": "Container", + "other": "Other" }, "coastal": { "microplastics": "Microplastics", @@ -126,7 +231,7 @@ "rope_small": "Rope small", "rope_medium": "Rope medium", "rope_large": "Rope large", - "fishing_gear_nets": "Fishing gear/nets", + "fishing_gear_nets": "Fishing gear\/nets", "ghost_nets": "Ghost nets", "buoys": "Buoys", "degraded_plasticbottle": "Degraded Plastic Bottle", @@ -139,7 +244,10 @@ "styro_small": "Styrofoam small", "styro_medium": "Styrofoam medium", "styro_large": "Styrofoam large", - "coastal_other": "Coastal-Other" + "coastal_other": "Coastal-Other", + "degraded_bag": "Degraded Bag", + "degraded_bottle": "Degraded Bottle", + "other": "Other" }, "brands": { "aadrink": "AA Drink", @@ -280,7 +388,21 @@ "overflowing_bins": "Overflowing Bins", "tyre": "Tyre", "cable_tie": "Cable Tie", - "other": "Other-Other" + "other": "Other-Other", + "bagsLitter": "Bags Litter", + "cableTie": "Cable Tie", + "overflowingBins": "Overflowing Bins", + "plasticBags": "Plastic Bags", + "posters": "Posters", + "randomLitter": "Random Litter", + "trafficCone": "Traffic Cone", + "washingUp": "Washing Up", + "appliance": "Appliance", + "furniture": "Furniture", + "graffiti": "Graffiti", + "mattress": "Mattress", + "paintCan": "Paint Can", + "umbrella": "Umbrella" }, "presence": { "picked-up": "I picked it up!", @@ -288,37 +410,77 @@ "picked-up-text": "It's gone.", "still-there-text": "The litter is still there!" }, - "no-tags": "No Tags", - "not-verified": "Awaiting verification", - "not-tagged-yet": "Not tagged yet!", + "no-tags": [], + "not-verified": [], + "not-tagged-yet": [], "dogshit": { "poo": "Surprise!", "poo_in_bag": "Surprise in a bag!" }, "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" + "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" + }, + "automobile": { + "alloy": "Alloy", + "battery": "Battery", + "bumper": "Bumper", + "car_part": "Car Part", + "engine": "Engine", + "exhaust": "Exhaust", + "license_plate": "License Plate", + "light": "Light", + "mirror": "Mirror", + "oil_can": "Oil Can", + "tyre": "Tyre", + "wheel": "Wheel", + "other": "Other" + }, + "electronics": { + "battery": "Battery", + "cable": "Cable", + "headphones": "Headphones", + "laptop": "Laptop", + "mobilePhone": "Mobile Phone", + "tablet": "Tablet", + "charger": "Charger", + "other": "Other" + }, + "stationery": { + "book": "Book", + "magazine": "Magazine", + "marker": "Marker", + "notebook": "Notebook", + "paperClip": "Paper Clip", + "pen": "Pen", + "pencil": "Pencil", + "rubberBand": "Rubber Band", + "stapler": "Stapler" + }, + "pets": { + "dogshit": "Dogshit", + "dogshit_in_bag": "Dogshit In Bag" } } diff --git a/resources/js/langs/en/notifications.json b/resources/js/langs/en/notifications.json index ca755d9a3..ecb15b52a 100644 --- a/resources/js/langs/en/notifications.json +++ b/resources/js/langs/en/notifications.json @@ -11,5 +11,8 @@ "unsubscribed": "You have unsubscribed. You will no longer receive the good news!", "flag-updated": "Your flag has been updated" }, - "something-went-wrong": "Something went wrong. Please, try again or contact us!" + "something-went-wrong": "Something went wrong. Please, try again or contact us!", + "tags": { + "uploaded-success": "Tags uploaded successfully" + } } diff --git a/resources/js/langs/en/old_litter.json b/resources/js/langs/en/old_litter.json new file mode 100644 index 000000000..832618d17 --- /dev/null +++ b/resources/js/langs/en/old_litter.json @@ -0,0 +1,327 @@ +{ + "categories": { + "alcohol": "Alcohol", + "art": "Art", + "automobile": "Automobile", + "brands": "Brands", + "coastal": "Coastal", + "coffee": "Coffee", + "dumping": "Dumping", + "electronics": "Electronics", + "food": "Food", + "industrial": "Industrial", + "sanitary": "Sanitary", + "softdrinks": "Soft Drinks", + "smoking": "Smoking", + "stationery": "Stationery", + "other": "Other", + "material": "Material", + "dogshit": "Pets" + }, + "smoking": { + "butts": "Cigarettes/Butts", + "lighters": "Lighters", + "cigaretteBox": "Cigarette Box", + "tobaccoPouch": "Tobacco Pouch", + "skins": "Rolling Papers", + "smoking_plastic": "Plastic Packaging", + "filters": "Filters", + "filterbox": "Filter Box", + "vape_pen": "Vape pen", + "vape_oil": "Vape oil", + "smokingOther": "Smoking-Other" + }, + "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", + "pint": "Pint Glass", + "six_pack_rings": "Six-pack rings", + "alcohol_plastic_cups": "Plastic Cups", + "alcoholOther": "Alcohol-Other" + }, + "art": { + "item": "Litter Art" + }, + "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", + "aluminium_foil": "Aluminium Foil", + "pizza_box": "Pizza Box", + "foodOther": "Food-Other", + "chewing_gum": "Chewing Gum" + }, + "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", + "broken_glass": "Broken Glass", + "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" + }, + "dumping": { + "small": "Small", + "medium": "Medium", + "large": "Large" + }, + "industrial": { + "oil": "Oil", + "industrial_plastic": "Plastic", + "chemical": "Chemical", + "bricks": "Bricks", + "tape": "Tape", + "industrial_other": "Industrial-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", + "ghost_nets": "Ghost 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", + "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", + "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": "Dog Poo", + "pooinbag": "Dog Poo In Bag", + "automobile": "Automobile", + "clothing": "Clothing", + "traffic_cone": "Traffic cone", + "life_buoy": "Life Buoy", + "plastic": "Unidentified Plastic", + "dump": "Illegal Dumping", + "metal": "Metal Object", + "plastic_bags": "Plastic Bags", + "election_posters": "Election Posters", + "forsale_posters": "For Sale Posters", + "books": "Books", + "magazine": "Magazines", + "paper": "Paper", + "stationary": "Stationery", + "washing_up": "Washing-up Bottle", + "hair_tie": "Hair Tie", + "ear_plugs": "Ear Plugs (music)", + "batteries": "Batteries", + "elec_small": "Electric small", + "elec_large": "Electric large", + "random_litter": "Random Litter", + "balloons": "Balloons", + "bags_litter": "Bags of Litter", + "overflowing_bins": "Overflowing Bins", + "tyre": "Tyre", + "cable_tie": "Cable Tie", + "other": "Other-Other" + }, + "presence": { + "picked-up": "I picked it up!", + "still-there": "Was not picked up!", + "picked-up-text": "It's gone.", + "still-there-text": "The litter is still there!" + }, + "no-tags": "No Tags", + "not-verified": "Awaiting verification", + "not-tagged-yet": "Not tagged yet!", + "dogshit": { + "poo": "Surprise!", + "poo_in_bag": "Surprise in a bag!" + }, + "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" + } +} diff --git a/resources/js/langs/es/index.js b/resources/js/langs/es/index.js index 8ad3b524a..dea914a40 100644 --- a/resources/js/langs/es/index.js +++ b/resources/js/langs/es/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const es = { @@ -30,4 +30,4 @@ export const es = { tags, teams, upload -}; \ No newline at end of file +}; diff --git a/resources/js/langs/fr/index.js b/resources/js/langs/fr/index.js index 55461e7a1..8f73f0687 100644 --- a/resources/js/langs/fr/index.js +++ b/resources/js/langs/fr/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const fr = { diff --git a/resources/js/langs/hu/index.js b/resources/js/langs/hu/index.js index 0fbf80f22..dbe182b6a 100644 --- a/resources/js/langs/hu/index.js +++ b/resources/js/langs/hu/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const hu = { diff --git a/resources/js/langs/index.js b/resources/js/langs/index.js index 1f24057bc..35f93f89b 100644 --- a/resources/js/langs/index.js +++ b/resources/js/langs/index.js @@ -1,21 +1,23 @@ -import { de } from './de'; -import { en } from './en'; -import { es } from './es'; -import { fr } from './fr'; -import { hu } from './hu'; -import { nl } from './nl'; -import { pl } from './pl'; -import { pt } from './pt'; -import { sw } from './sw'; +// import { de } from './de/index.js'; +// import { en } from './en/index.js'; +// import { es } from './es/index.js'; +// import { fr } from './fr/index.js'; +// import { hu } from './hu/index.js'; +// import { nl } from './nl/index.js'; +// import { pl } from './pl/index.js'; +// import { pt } from './pt/index.js'; +// import { sw } from './sw/index.js'; + +import en from 'en.json'; export const langs = { - 'de': de, - 'en': en, - 'es': es, - 'fr': fr, - 'hu': hu, - 'nl': nl, - 'pl': pl, - 'pt': pt, - 'sw': sw + // 'de': de, + en: en, + // 'es': es, + // 'fr': fr, + // 'hu': hu, + // 'nl': nl, + // 'pl': pl, + // 'pt': pt, + // 'sw': sw }; diff --git a/resources/js/langs/nl/index.js b/resources/js/langs/nl/index.js index f6ed6c420..374f4ce4e 100644 --- a/resources/js/langs/nl/index.js +++ b/resources/js/langs/nl/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const nl = { @@ -30,4 +30,4 @@ export const nl = { tags, teams, upload -}; \ No newline at end of file +}; diff --git a/resources/js/langs/pl/index.js b/resources/js/langs/pl/index.js index dfad89ab8..18eadba57 100644 --- a/resources/js/langs/pl/index.js +++ b/resources/js/langs/pl/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const pl = { @@ -30,4 +30,4 @@ export const pl = { tags, teams, upload -}; \ No newline at end of file +}; diff --git a/resources/js/langs/pt/index.js b/resources/js/langs/pt/index.js index df9845620..11a11d373 100644 --- a/resources/js/langs/pt/index.js +++ b/resources/js/langs/pt/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const pt = { diff --git a/resources/js/langs/sw/index.js b/resources/js/langs/sw/index.js index 1d9f732c9..985a0488a 100644 --- a/resources/js/langs/sw/index.js +++ b/resources/js/langs/sw/index.js @@ -1,17 +1,17 @@ -import { auth } from './auth/index'; +import { auth } from './auth/index.js'; import common from './common.json'; import creditcard from './creditcard.json'; -import { home } from './home/index'; +import { home } from './home/index.js'; import litter from './litter.json'; import location from './location.json'; -import { locations } from './locations/index'; +import { locations } from './locations/index.js'; import nav from './nav.json'; import notifications from './notifications.json'; -import { profile } from './profile/index'; -import { settings } from './settings/index'; +import { profile } from './profile/index.js'; +import { settings } from './settings/index.js'; import signup from './signup.json'; import tags from './tags.json'; -import { teams } from './teams/index'; +import { teams } from './teams/index.js'; import upload from './upload.json'; export const sw = { diff --git a/resources/js/maps/mapHelpers.js b/resources/js/maps/mapHelpers.js deleted file mode 100644 index d817acc46..000000000 --- a/resources/js/maps/mapHelpers.js +++ /dev/null @@ -1,295 +0,0 @@ -import i18n from '../i18n'; -import moment from 'moment'; - -const helper = { - /** - * These options control how the popup renders - * @see https://leafletjs.com/reference-1.7.1.html#popup-l-popup - */ - popupOptions: { - minWidth: window.innerWidth >= 768 ? 350 : 200, // allow smaller widths on mobile - maxWidth: 600, - maxHeight: window.innerWidth >= 768 ? 800 : 500, // prevent tall popups on mobile - closeButton: true - }, - - /** - * name, username = null || string - * - * @param admin - */ - getAdminName: (admin) => { - let str = "These tags were updated by "; - - if (admin.name || admin.username) - { - if (admin.name) str += admin.name; - if (admin.username) str += ' @' + admin.username; - } - else - { - str += "an admin"; - } - - // at date - str += "
at " + moment(admin.created_at).format('LLL'); - - return str; - }, - - /** - * Get the removed custom + pre-defined Tags for the litter popup - */ - getRemovedTags: (removedTags) => { - let str = "Removed Tags: "; - - if (removedTags.customTags) - { - removedTags.customTags.forEach(customTag => { - str += customTag + " "; - }); - - str += "
"; - } - - if (removedTags.tags) - { - Object.keys(removedTags.tags).forEach(category => { - Object.entries(removedTags.tags[category]).forEach((entry) => { - str += i18n.t(`litter.${category}.${entry[0]}`) + `(${entry[1]})`; - }); - - str += '
'; - }); - } - - return str; - }, - - /** - * Scrolls the popup to its bottom if the image is very tall - * Needed to reduce the flicker when the map renders the popups - * @param event The event emitted by the leaflet map - */ - scrollPopupToBottom: (event) => { - let popup = event.popup?.getElement()?.querySelector('.leaflet-popup-content'); - - if (popup) popup.scrollTop = popup.scrollHeight; - }, - - /** - * Returns th HTML that displays tags on Photo popups - * - * @param tagsString - * @param customTags - * @param isTrustedUser - * @returns {string} - */ - parseTags: (tagsString, customTags, isTrustedUser) => { - if (!tagsString && !customTags) { - return isTrustedUser - ? i18n.t('litter.not-tagged-yet') - : i18n.t('litter.not-verified'); - } - - let tags = ''; - let a = tagsString ? tagsString.split(',') : []; - - a.pop(); - - a.forEach(i => { - let b = i.split(' '); - - if (b[0] === 'art.item') { - tags += i18n.t('litter.' + b[0]) + '
'; - } else { - tags += i18n.t('litter.' + b[0]) + ': ' + b[1] + '
'; - } - }); - - return tags; - }, - - /** - * Formats the user name for usage in Photo popups - * - * @param name - * @param username - * @returns {string} - */ - formatUserName: (name, username) => { - return (name || username) - ? `${i18n.t('locations.cityVueMap.by')} ${name ? name : ''} ${username ? '@' + username : ''}` - : ''; - }, - - /** - * Formats the picked up text for usage in Photo popups - * - * @returns {string} - * @param pickedUp - */ - formatPickedUp: (pickedUp) => { - return pickedUp - ? `${i18n.t('litter.presence.picked-up')}` - : `${i18n.t('litter.presence.still-there')}`; - }, - - /** - * Formats the team name for usage in Photo popups - * - * @param teamName - * @returns {string} - */ - formatTeam: (teamName) => { - return teamName - ? `${i18n.t('common.team')} ${teamName}` - : ''; - }, - - /** - * Formats the photo taken time for usage in Photo popups - * - * @param takenOn - * @returns {string} - */ - formatPhotoTakenTime: (takenOn) => { - return i18n.t('locations.cityVueMap.taken-on') + ' ' + moment(takenOn).format('LLL'); - }, - - /** - * Returns the HTML that displays the Photo popups - * - * @param properties - * @param url - * @returns {string} - */ - getMapImagePopupContent: (properties, url = null) => { - const user = helper.formatUserName(properties.name, properties.username) - const isTrustedUser = properties.filename !== '/assets/images/waiting.png'; - const customTags = properties.custom_tags?.join('
'); - const tags = helper.parseTags(properties.result_string, customTags, isTrustedUser); - const takenDateString = helper.formatPhotoTakenTime(properties.datetime); - const teamFormatted = helper.formatTeam(properties.team); - const pickedUpFormatted = helper.formatPickedUp(properties.picked_up); - const isLitterArt = properties.result_string && properties.result_string.includes('art.item'); - const hasSocialLinks = properties.social && Object.keys(properties.social).length; - const admin = properties.admin ? helper.getAdminName(properties.admin) : null; - const removedTags = properties.admin?.removedTags ? helper.getRemovedTags(properties.admin.removedTags) : ''; - - return ` - Litter photo -
- ${tags ? ('
' + tags + '
') : ''} - ${customTags ? ('
' + customTags + '
') : ''} - ${!isLitterArt ? ('
' + pickedUpFormatted + '
') : ''} -
${takenDateString}
- ${user ? ('
' + user + '
') : ''} - ${teamFormatted ? ('
' + teamFormatted + '
') : ''} - ${hasSocialLinks ? '' : ''} - ${url ? '' : ''} - ${admin ? '

' + admin + '

' : ''} - ${removedTags ? '

' + removedTags + '

' : ''} -
`; - }, - - /** - * Returns the HTML that displays on each Cleanup popup - * - * @param properties - * @param userId - * @returns {string} - */ - getCleanupContent: (properties, userId = null) => { - - let userCleanupInfo = ``; - - if (userId === null) { - userCleanupInfo = `Log in to join the cleanup`; - } - else { - if (properties.users.find(user => user.user_id === userId)) { - userCleanupInfo = '

You have joined the cleanup

' - - if (userId === properties.user_id) { - userCleanupInfo += '

You cannot leave the cleanup you created

' - } - else { - userCleanupInfo += `Click here to leave` - } - } - else { - userCleanupInfo = `Click here to join`; - } - } - - return ` -
-

${properties.name}

-

Attending: ${properties.users.length} ${properties.users.length === 1 ? 'person' : 'people'}

-

${properties.description}

-

When? ${properties.startsAt}

-

${properties.timeDiff}

- ${userCleanupInfo} -
- `; - }, - - /** - * Build the HTML to include in the popup content - * @param properties: Merchant object - * @returns string (with html) - */ - getMerchantContent: (properties) => { - let photos = ''; - - if (properties.photos.length > 0) - { - properties.photos.forEach(photo => { - photos += `
photo
`; - }); - } - - let websiteLink = properties.website - ? `${properties.website}` - : ''; - - return ` -
-
-
- ${photos} -
-
-
-
-

Name: ${properties.name}

-

About this merchant: ${properties.about ? properties.about : ''}

-

Website: ${websiteLink}

-
- `; - } -}; - -export {helper as mapHelper}; diff --git a/resources/js/router/index.js b/resources/js/router/index.js new file mode 100644 index 000000000..d5a8368cb --- /dev/null +++ b/resources/js/router/index.js @@ -0,0 +1,144 @@ +import { createRouter, createWebHistory } from 'vue-router'; + +// Middleware +import middlewarePipeline from './middleware/middlewarePipeline'; +import auth from './middleware/auth'; + +// Components +import About from '../views/General/About.vue'; +import CreateAccount from '../views/Account/CreateAccount.vue'; +import GlobalMap from '../views/Maps/GlobalMap.vue'; +import History from '../views/General/History.vue'; +import Leaderboard from '../views/General/Leaderboards/Leaderboard.vue'; +import References from '../views/Academic/References.vue'; +import Upload from '../views/Upload/Upload.vue'; +import Welcome from '../views/Welcome/Welcome.vue'; +import Countries from '../views/Locations/Countries.vue'; +import Achievements from '../views/Achievements/Achievements.vue'; +import Redis from '../views/Admin/Redis.vue'; +import Terms from '../views/General/Terms.vue'; +import Privacy from '../views/General/Privacy.vue'; +import World from '../views/Locations/World.vue'; +import Uploads from '../views/User/Uploads/Uploads.vue'; +import Changelog from '../views/General/Changelog.vue'; +import AddTags from '../views/General/Tagging/v2/AddTags.vue'; + +const routes = [ + // Public routes + { + path: '/about', + name: 'About', + component: About, + }, + { + path: '/changelog', + name: 'Changelog', + component: Changelog, + }, + { + path: '/terms', + name: 'Terms', + component: Terms, + }, + { + path: '/privacy', + name: 'Privacy', + component: Privacy, + }, + { + path: '/world', + name: 'World', + component: World, + }, + { + path: '/history', + name: 'History', + component: History, + }, + { + path: '/global', + name: 'GlobalMap', + component: GlobalMap, + }, + { + path: '/leaderboard', + name: 'Leaderboard', + component: Leaderboard, + }, + { + path: '/references', + name: 'References', + component: References, + }, + { + path: '/', + name: 'Welcome', + component: Welcome, + }, + { + path: '/signup', + name: 'CreateAccount', + component: CreateAccount, + }, + // Auth Routes + { + path: '/tag', + name: 'AddTags', + component: AddTags, + meta: { + middleware: [auth], + }, + }, + { + path: '/upload', + name: 'Upload', + component: Upload, + meta: { + middleware: [auth], + }, + }, + { + path: '/uploads', + name: 'Uploads', + component: Uploads, + meta: { + middleware: [auth], + }, + }, + { + path: '/achievements', + name: 'Achievements', + component: Achievements, + meta: { + middleware: [auth], + }, + }, + { + path: '/admin/redis/:userId?', + name: 'AdminRedis', + component: Redis, + meta: { + middleware: [auth], // admin + }, + }, +]; + +const router = createRouter({ + history: createWebHistory(), + routes, +}); + +router.beforeEach((to, from, next) => { + if (!to.meta.middleware) return next(); + + const middleware = to.meta.middleware; + + const context = { to, from, next }; + + return middleware[0]({ + ...context, + next: middlewarePipeline(context, middleware, 1), + }); +}); + +export default router; diff --git a/resources/js/router/middleware/auth.js b/resources/js/router/middleware/auth.js new file mode 100644 index 000000000..5cc1d8e6c --- /dev/null +++ b/resources/js/router/middleware/auth.js @@ -0,0 +1,12 @@ +import { useUserStore } from '@/stores/user'; + +export default function auth ({ next }) { + + const userStore = useUserStore(); + + if (!userStore.auth) { + return next({ path: '/' }); + } + + return next(); +} diff --git a/resources/js/router/middleware/middlewarePipeline.js b/resources/js/router/middleware/middlewarePipeline.js new file mode 100644 index 000000000..c02e32beb --- /dev/null +++ b/resources/js/router/middleware/middlewarePipeline.js @@ -0,0 +1,13 @@ +export default function middlewarePipeline (context, middleware, index) { + const nextMiddleware = middleware[index]; + + if (!nextMiddleware) return context.next; + + return (...parameters) => { + context.next(...parameters); + + const nextPipeline = middlewarePipeline(context, middleware, index + 1); + + nextMiddleware({ ...context, next: nextPipeline }); + }; +} diff --git a/resources/js/store/modules/globalmap/actions.js b/resources/js/store/modules/globalmap/actions.js deleted file mode 100644 index 2fc1bfa0d..000000000 --- a/resources/js/store/modules/globalmap/actions.js +++ /dev/null @@ -1,62 +0,0 @@ -export const actions = { - /** - * Get the art point data for the global map - */ - async GET_ART_DATA (context) - { - await axios.get('/global/art-data') - .then(response => { - console.log('get_art_data', response); - - context.commit('globalArtData', response.data); - }) - .catch(error => { - console.error('get_art_data', error); - }); - }, - - /** - * Get clusters for the global map - */ - async GET_CLUSTERS (context, payload) - { - await axios.get('/global/clusters', { - params: { - zoom: payload.zoom, - year: payload.year, - bbox: null - } - }) - .then(response => { - console.log('get_clusters', response); - - context.commit('updateGlobalData', response.data); - }) - .catch(error => { - console.error('get_clusters', error); - }); - }, - - /** - * - */ - async SEARCH_CUSTOM_TAGS (context, payload) - { - await axios.get('/global/search/custom-tags', { - params: { - search: payload - } - }) - .then(response => { - console.log('search_custom_tags', response); - - if (response.data.success) - { - context.commit('setCustomTagsFound', response.data.tags); - } - }) - .catch(error => { - console.error('search_custom_tags', error); - }); - } -} diff --git a/resources/js/store/modules/modal/mutations.js b/resources/js/store/modules/modal/mutations.js deleted file mode 100644 index 8c5175a80..000000000 --- a/resources/js/store/modules/modal/mutations.js +++ /dev/null @@ -1,32 +0,0 @@ -import { init } from './init' - -export const mutations = { - - /** - * Hide the modal - */ - hideModal (state) - { - state.show = false; - }, - - /** - * Reset state, when the user logs out - */ - resetState (state) - { - Object.assign(state, init); - }, - - /** - * Show the modal - */ - showModal (state, payload) - { - state.type = payload.type; - state.title = payload.title; - state.action = payload.action; - state.show = true; - }, - -}; diff --git a/resources/js/stores/cleanups/index.js b/resources/js/stores/cleanups/index.js new file mode 100644 index 000000000..ed00006b5 --- /dev/null +++ b/resources/js/stores/cleanups/index.js @@ -0,0 +1,19 @@ +import { defineStore } from "pinia"; +import { requests } from "./requests.js"; + +export const useCleanupStore = defineStore("cleanups", { + + state: () => ({ + creating: false, + joining: false, + lat: null, + lon: null, + geojson: null, + cleanup: null // selected cleanup + }), + + actions: { + ...requests, + } + +}); diff --git a/resources/js/stores/cleanups/requests.js b/resources/js/stores/cleanups/requests.js new file mode 100644 index 000000000..9239cf533 --- /dev/null +++ b/resources/js/stores/cleanups/requests.js @@ -0,0 +1,20 @@ +export const requests = { + /** + * Get GeoJson cleanups object + */ + async GET_CLEANUPS () + { + await axios.get('/cleanups/get-cleanups') + .then(response => { + console.log('get_cleanups', response); + + if (response.data.success) + { + this.geojson = response.data.geojson; + } + }) + .catch(error => { + console.error('get_cleanups', error); + }); + }, +} diff --git a/resources/js/stores/leaderboard/index.js b/resources/js/stores/leaderboard/index.js new file mode 100644 index 000000000..289e69f10 --- /dev/null +++ b/resources/js/stores/leaderboard/index.js @@ -0,0 +1,30 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; + +export const useLeaderboardStore = defineStore('leaderboard', { + state: () => ({ + currentPage: 1, + hasNextPage: false, + + currentFilters: { + timeFilter: 'all-time', + locationType: null, + locationId: null, + }, + + // array of users in the leaderboard + leaderboard: [], + + // locationId: array + country: {}, + state: {}, + city: {}, + + selectedLocationId: null, + locationTabKey: 0, + }), + + actions: { + ...requests, + }, +}); diff --git a/resources/js/stores/leaderboard/requests.js b/resources/js/stores/leaderboard/requests.js new file mode 100644 index 000000000..56973ead6 --- /dev/null +++ b/resources/js/stores/leaderboard/requests.js @@ -0,0 +1,121 @@ +export const requests = { + /** + * Get a paginated array of global leaders x100 + */ + async GET_USERS_FOR_GLOBAL_LEADERBOARD(timeFilter = 'all-time') { + // Store current filter for pagination + this.currentFilters = { + timeFilter, + locationType: null, + locationId: null, + }; + this.currentPage = 1; + + await axios + .get('/api/leaderboard', { + params: { + timeFilter, + page: 1, + }, + }) + .then((response) => { + console.log('get_users_for_global_leaderboard', response); + + this.leaderboard = response.data.users; + this.hasNextPage = response.data.hasNextPage; + }) + .catch((error) => { + console.error('get_users_for_global_leaderboard', error); + }); + }, + + /** + * Get the users for one of the Location Leaderboards + */ + async GET_USERS_FOR_LOCATION_LEADERBOARD(payload) { + // Store current filters for pagination + this.currentFilters = { + timeFilter: payload?.timeFilter || 'all-time', + locationType: payload?.locationType, + locationId: payload?.locationId, + }; + this.currentPage = 1; + + await axios + .get('/api/leaderboard', { + params: { + timeFilter: payload?.timeFilter, + locationType: payload?.locationType, + locationId: payload?.locationId, + page: 1, + }, + }) + .then((response) => { + console.log('get_users_for_location_leaderboard', response); + + this.leaderboard = response.data.users; + this.hasNextPage = response.data.hasNextPage; + + // Store location-specific data if needed + if (payload.locationType && payload.locationId) { + this[payload.locationType][payload.locationId] = response.data.users; + } + + this.selectedLocationId = payload.locationId; + this.locationTabKey++; + }) + .catch((error) => { + console.error('get_users_for_location_leaderboard', error); + }); + }, + + /** + * Get the next page of Users for the Leaderboard + */ + async GET_NEXT_LEADERBOARD_PAGE() { + this.currentPage++; + + await axios + .get('/api/leaderboard', { + params: { + ...this.currentFilters, + page: this.currentPage, + }, + }) + .then((response) => { + console.log('get_next_leaderboard_page', response); + + this.leaderboard = response.data.users; + this.hasNextPage = response.data.hasNextPage; + }) + .catch((error) => { + console.error('get_next_leaderboard_page', error); + this.currentPage--; // Revert on error + }); + }, + + /** + * Get the previous page of Users for the Leaderboard + */ + async GET_PREVIOUS_LEADERBOARD_PAGE() { + this.currentPage--; + + await axios + .get('/api/leaderboard', { + params: { + ...this.currentFilters, + page: this.currentPage, + }, + }) + .then((response) => { + console.log('get_previous_leaderboard_page', response); + + this.leaderboard = response.data.users; + this.hasNextPage = response.data.hasNextPage; + }) + .catch((error) => { + console.error('get_previous_leaderboard_page', error); + this.currentPage++; // Revert on error + }); + }, +}; diff --git a/resources/js/stores/littercoin/merchants/index.js b/resources/js/stores/littercoin/merchants/index.js new file mode 100644 index 000000000..3c2c48717 --- /dev/null +++ b/resources/js/stores/littercoin/merchants/index.js @@ -0,0 +1,18 @@ +import { defineStore } from "pinia"; +import { requests } from "./requests.js"; + +export const useMerchantStore = defineStore("merchants", { + + state: () => ({ + geojson: {}, + merchant: { + lat: 0, + lon: 0 + } + }), + + actions: { + ...requests, + } + +}); diff --git a/resources/js/stores/littercoin/merchants/requests.js b/resources/js/stores/littercoin/merchants/requests.js new file mode 100644 index 000000000..13f5c2f7c --- /dev/null +++ b/resources/js/stores/littercoin/merchants/requests.js @@ -0,0 +1,146 @@ +export const requests = { + /** + * Admin & Helper can create Merchants + * + * They need to be approved by Admins + */ + async CREATE_MERCHANT (payload) + { + // const title = i18n.t('notifications.success'); + // const body = 'Merchant created'; + + await axios.post('/merchants/create', { + name: payload.name, + address: payload.address, + lat: payload.lat, + lon: payload.lon, + email: payload.email, + about: payload.about, + website: payload.website + }) + .then(response => { + console.log('admin_create_merchant', response); + + if (response.data.success) + { + // Vue.$vToastify.success({ + // title, + // body, + // position: 'top-right' + // }); + + // context.commit('setMerchant', response.data.merchant); + } + }) + .catch(error => { + console.error('admin_create_merchant', error); + }); + }, + + /** + * Get GeoJson cleanups object + */ + async GET_MERCHANTS_GEOJSON () + { + await axios.get('/merchants/get-geojson') + .then(response => { + console.log('get_merchants_geojson', response); + + if (response.data.success) + { + // context.commit('setMerchantsGeojson', response.data.geojson); + } + }) + .catch(error => { + console.error('get_merchants_geojson', error); + }); + }, + + /** + * Admin only + */ + async GET_NEXT_MERCHANT_TO_APPROVE () + { + await axios.get('/merchants/get-next-merchant-to-approve') + .then(response => { + console.log('get_next_merchant_to_approve', response); + + if (response.data.success) { + // context.commit('setMerchant', response.data.merchant); + } else { + // context.commit('resetMerchant'); + } + }) + .catch(error => { + console.error('get_next_merchant_to_approve', error); + }); + }, + + /** + * Admin-- + * + * Approve a merchant that was created by a helper + */ + async APPROVE_MERCHANT (context) + { + const title = i18n.t('notifications.success'); + const body = 'Merchant approved'; + + await axios.post('/admin/merchants/approve', { + merchantId: context.state.merchant.id + }) + .then(response => { + console.log('approve_merchant', response); + + if (response.data.success) + { + // Vue.$vToastify.success({ + // title, + // body, + // position: 'top-right' + // }); + + // context.dispatch('GET_NEXT_MERCHANT_TO_APPROVE'); + } + }) + .catch(error => { + console.error('approve_merchant', error); + }); + }, + + /** + * Admin-- + * + * Delete a merchant that was added by a helper + */ + async DELETE_MERCHANT () + { + // const title = i18n.t('notifications.success'); + // const body = 'Merchant deleted'; + + await axios.post('/admin/merchants/delete', { + merchantId: this.merchant.id, // context.state.merchant.id + }) + .then(response => { + console.log('delete_merchant', response); + + if (response.data.success) + { + // Vue.$vToastify.success({ + // title, + // body, + // position: 'top-right' + // }); + + // context.dispatch('GET_NEXT_MERCHANT_TO_APPROVE'); + } + else if (response.data.msg === 'does not exist') + { + // context.commit('resetMerchant'); + } + }) + .catch(error => { + console.error('delete_merchant', error); + }); + } +} diff --git a/resources/js/stores/locations/index.js b/resources/js/stores/locations/index.js new file mode 100644 index 000000000..4a857dbf7 --- /dev/null +++ b/resources/js/stores/locations/index.js @@ -0,0 +1,478 @@ +import { defineStore } from 'pinia'; +import axios from 'axios'; + +export const useLocationsStore = defineStore('locations', { + state: () => ({ + // Location hierarchy + locationType: 'country', // 'country', 'state', 'city' + locations: [], // Current list of locations + selectedLocation: null, + + // Navigation breadcrumbs + countryName: '', + countryId: null, + stateName: '', + stateId: null, + cityName: '', + cityId: null, + + // Global statistics + globalStats: { + total_litter: 0, + total_photos: 0, + total_contributors: 0, + total_countries: 0, + level: 0, + current_xp: 0, + previous_xp: 0, + next_xp: 0, + progress: 0, + }, + + // Sorting and filtering + sortBy: 'total_litter_redis', + sortDirection: 'desc', + searchQuery: '', + viewMode: 'grid', // 'grid' or 'list' + + // Pagination + pagination: { + current_page: 1, + last_page: 1, + per_page: 12, + total: 0, + from: 0, + to: 0, + }, + + // Loading states + loading: false, + loadingDetails: false, + + // Cached data + categoryBreakdown: {}, + timeSeries: {}, + leaderboards: {}, + + // UI State + selectedTab: 'leaderboard', + selectedPeriod: 'all_time', + + // Legacy support + littercoin: 0, + globalLeaders: [], + }), + + getters: { + // Get sorted and filtered locations + sortedLocations(state) { + let filtered = [...state.locations]; + + // Apply search filter + if (state.searchQuery) { + const query = state.searchQuery.toLowerCase(); + filtered = filtered.filter((loc) => { + const name = loc[state.locationType]?.toLowerCase() || loc.name?.toLowerCase() || ''; + return name.includes(query); + }); + } + + // Apply sorting + filtered.sort((a, b) => { + let aVal, bVal; + + switch (state.sortBy) { + case 'alphabetical': + aVal = a[state.locationType] || a.name || ''; + bVal = b[state.locationType] || b.name || ''; + return state.sortDirection === 'asc' ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal); + + case 'most-data': + aVal = a.total_litter_redis || 0; + bVal = b.total_litter_redis || 0; + break; + + case 'most-data-per-person': + aVal = a.avg_litter_per_user || 0; + bVal = b.avg_litter_per_user || 0; + break; + + case 'total-contributors': + aVal = a.total_contributors_redis || 0; + bVal = b.total_contributors_redis || 0; + break; + + case 'most-recently-updated': + aVal = new Date(a.updated_at || 0).getTime(); + bVal = new Date(b.updated_at || 0).getTime(); + break; + + case 'first-created': + aVal = new Date(a.created_at || 0).getTime(); + bVal = new Date(b.created_at || 0).getTime(); + break; + + case 'most-recently-created': + aVal = new Date(a.created_at || 0).getTime(); + bVal = new Date(b.created_at || 0).getTime(); + break; + + default: + aVal = a[state.sortBy] || 0; + bVal = b[state.sortBy] || 0; + } + + if (state.sortDirection === 'asc') { + return aVal > bVal ? 1 : aVal < bVal ? -1 : 0; + } else { + return aVal < bVal ? 1 : aVal > bVal ? -1 : 0; + } + }); + + return filtered; + }, + + // Breadcrumb trail for navigation + breadcrumbs(state) { + const crumbs = [{ name: 'World', path: '/world' }]; + + if (state.countryName) { + crumbs.push({ + name: state.countryName, + path: `/world/${state.countryName}`, + }); + } + + if (state.stateName) { + crumbs.push({ + name: state.stateName, + path: `/world/${state.countryName}/${state.stateName}`, + }); + } + + if (state.cityName) { + crumbs.push({ + name: state.cityName, + path: `/world/${state.countryName}/${state.stateName}/${state.cityName}`, + }); + } + + return crumbs; + }, + + // For backwards compatibility + total_litter: (state) => state.globalStats.total_litter, + total_photos: (state) => state.globalStats.total_photos, + total_contributors: (state) => state.globalStats.total_contributors, + total_countries: (state) => state.globalStats.total_countries, + }, + + actions: { + // Fetch locations based on type and parent + async fetchLocations(type = 'country', parentId = null, page = 1) { + this.loading = true; + this.locationType = type; + + try { + const params = { + page, + per_page: this.pagination.per_page, + sort_by: this.sortBy, + sort_dir: this.sortDirection, + }; + + if (parentId) { + params.parent_id = parentId; + } + + const response = await axios.get(`/api/locations/${type}`, { params }); + + this.locations = response.data.locations || []; + this.pagination = response.data.pagination || {}; + + // Update aggregated stats if provided + if (response.data.aggregated_stats) { + this.updateAggregatedStats(response.data.aggregated_stats); + } + + return response.data; + } catch (error) { + console.error(`Error fetching ${type} locations:`, error); + throw error; + } finally { + this.loading = false; + } + }, + + // Fetch world cup data (countries with global stats) + async fetchWorldCupData() { + this.loading = true; + + try { + const response = await axios.get('/api/locations/world-cup', { + params: { + page: this.pagination.current_page, + per_page: this.pagination.per_page, + sort_by: this.sortBy, + sort_dir: this.sortDirection, + }, + }); + + this.locations = response.data.countries || []; + this.pagination = response.data.pagination || {}; + this.globalStats = response.data.global_stats || {}; + this.globalLeaders = response.data.global_leaderboard || []; + this.locationType = 'country'; + + // Legacy support + this.littercoin = response.data.littercoin || 0; + + return response.data; + } catch (error) { + console.error('Error fetching world cup data:', error); + throw error; + } finally { + this.loading = false; + } + }, + + // Fetch details for a specific location + async fetchLocationDetails(type, id) { + this.loadingDetails = true; + + try { + const response = await axios.get(`/api/locations/${type}/${id}`); + this.selectedLocation = response.data; + + // Cache category breakdown if included + if (response.data.category_breakdown) { + this.categoryBreakdown[`${type}-${id}`] = response.data.category_breakdown; + } + + // Cache time series if included + if (response.data.time_series) { + this.timeSeries[`${type}-${id}`] = response.data.time_series; + } + + // Cache leaderboard if included + if (response.data.leaderboard) { + this.leaderboards[`${type}-${id}`] = response.data.leaderboard; + } + + return response.data; + } catch (error) { + console.error(`Error fetching ${type} details:`, error); + throw error; + } finally { + this.loadingDetails = false; + } + }, + + // Fetch category breakdown + async fetchCategoryBreakdown(type, id) { + const cacheKey = `${type}-${id}`; + + // Return cached if available + if (this.categoryBreakdown[cacheKey]) { + return this.categoryBreakdown[cacheKey]; + } + + try { + const response = await axios.get(`/api/locations/${type}/${id}/categories`); + this.categoryBreakdown[cacheKey] = response.data; + return response.data; + } catch (error) { + console.error('Error fetching category breakdown:', error); + throw error; + } + }, + + // Fetch time series data + async fetchTimeSeries(type, id, period = 'daily') { + const cacheKey = `${type}-${id}-${period}`; + + // Return cached if available + if (this.timeSeries[cacheKey]) { + return this.timeSeries[cacheKey]; + } + + try { + const response = await axios.get(`/api/locations/${type}/${id}/timeseries`, { + params: { period }, + }); + this.timeSeries[cacheKey] = response.data; + return response.data; + } catch (error) { + console.error('Error fetching time series:', error); + throw error; + } + }, + + // Fetch leaderboard + async fetchLeaderboard(type, id, period = 'all_time') { + const cacheKey = `${type}-${id}-${period}`; + + // Return cached if available + if (this.leaderboards[cacheKey]) { + return this.leaderboards[cacheKey]; + } + + try { + const response = await axios.get(`/api/locations/${type}/${id}/leaderboard`, { + params: { period }, + }); + this.leaderboards[cacheKey] = response.data; + return response.data; + } catch (error) { + console.error('Error fetching leaderboard:', error); + throw error; + } + }, + + // Fetch global statistics + async fetchGlobalStats() { + try { + const response = await axios.get('/api/locations/global'); + this.globalStats = response.data.statistics || {}; + return response.data; + } catch (error) { + console.error('Error fetching global stats:', error); + throw error; + } + }, + + // Navigation methods + navigateToCountry(country) { + this.countryName = country.country; + this.countryId = country.id; + this.stateName = ''; + this.stateId = null; + this.cityName = ''; + this.cityId = null; + this.locationType = 'state'; + this.locations = []; + this.fetchLocations('state', country.id); + }, + + navigateToState(state) { + this.stateName = state.state; + this.stateId = state.id; + this.cityName = ''; + this.cityId = null; + this.locationType = 'city'; + this.locations = []; + this.fetchLocations('city', state.id); + }, + + navigateToCity(city) { + this.cityName = city.city; + this.cityId = city.id; + this.selectedLocation = city; + }, + + // Setters + setSortBy(value) { + this.sortBy = value; + }, + + setSortDirection(value) { + this.sortDirection = value; + }, + + setSearchQuery(value) { + this.searchQuery = value; + }, + + setViewMode(value) { + this.viewMode = value; + }, + + setSelectedLocation(location) { + this.selectedLocation = location; + }, + + setSelectedTab(tab) { + this.selectedTab = tab; + }, + + setSelectedPeriod(period) { + this.selectedPeriod = period; + }, + + setPage(page) { + this.pagination.current_page = page; + }, + + // Update methods + updateAggregatedStats(stats) { + if (stats.total_photos !== undefined) { + this.globalStats.total_photos = stats.total_photos; + } + if (stats.total_litter !== undefined) { + this.globalStats.total_litter = stats.total_litter; + } + if (stats.total_contributors !== undefined) { + this.globalStats.total_contributors = stats.total_contributors; + } + }, + + incrementTotalPhotos() { + this.globalStats.total_photos++; + }, + + incrementTotalLitter(amount = 1) { + this.globalStats.total_litter += amount; + }, + + // Clear/Reset methods + clearLocations() { + this.locations = []; + this.pagination = { + current_page: 1, + last_page: 1, + per_page: 12, + total: 0, + from: 0, + to: 0, + }; + }, + + resetFilters() { + this.searchQuery = ''; + this.sortBy = 'total_litter_redis'; + this.sortDirection = 'desc'; + }, + + // Legacy support methods + setSortLocationsBy(sort) { + const sortMap = { + alphabetical: 'alphabetical', + 'most-data': 'total_litter_redis', + 'most-data-per-person': 'avg_litter_per_user', + 'total-contributors': 'total_contributors_redis', + 'first-created': 'created_at', + 'most-recently-created': 'created_at', + 'most-recently-updated': 'updated_at', + }; + + this.sortBy = sortMap[sort] || sort; + + // Adjust direction based on sort type + if (['first-created', 'alphabetical'].includes(sort)) { + this.sortDirection = 'asc'; + } else { + this.sortDirection = 'desc'; + } + }, + + // Legacy method names for backwards compatibility + async GET_WORLD_CUP_DATA() { + return this.fetchWorldCupData(); + }, + + async GET_LOCATIONS_PAGE(page) { + this.setPage(page); + return this.fetchLocations(this.locationType, null, page); + }, + }, +}); diff --git a/resources/js/stores/maps/clusters/index.js b/resources/js/stores/maps/clusters/index.js new file mode 100644 index 000000000..5aaaf2108 --- /dev/null +++ b/resources/js/stores/maps/clusters/index.js @@ -0,0 +1,121 @@ +import { defineStore } from 'pinia'; +import axios from 'axios'; + +export const useClustersStore = defineStore('clusters', { + state: () => ({ + // Cluster data in GeoJSON format + clustersGeojson: { + type: 'FeatureCollection', + features: [], + }, + + // Loading and error states + loading: false, + error: null, + + // Current view bounds and zoom + currentBounds: null, + currentZoom: null, + + // Filters + year: null, + }), + + getters: { + // Get cluster count + clusterCount: (state) => { + return state.clustersGeojson?.features?.length || 0; + }, + + // Get total points across all clusters + totalPoints: (state) => { + if (!state.clustersGeojson?.features) return 0; + + return state.clustersGeojson.features.reduce((sum, feature) => { + return sum + (feature.properties?.point_count || 1); + }, 0); + }, + + // Check if we have clusters for current bounds + hasClustersForBounds: (state) => (bounds, zoom) => { + if (!state.currentBounds || !state.clustersGeojson) return false; + + return ( + Math.abs(state.currentBounds.left - bounds.left) < 0.001 && + Math.abs(state.currentBounds.right - bounds.right) < 0.001 && + Math.abs(state.currentBounds.top - bounds.top) < 0.001 && + Math.abs(state.currentBounds.bottom - bounds.bottom) < 0.001 && + state.currentZoom === zoom + ); + }, + }, + + actions: { + /** + * Get clusters for the global map + */ + async GET_CLUSTERS({ zoom, year, bbox = null }) { + this.loading = true; + this.error = null; + + try { + const params = { zoom }; + + // Add optional parameters + if (year) params.year = year; + if (bbox) params.bbox = bbox; + + const response = await axios.get('/api/clusters', { params }); + + console.log('GET_CLUSTERS response:', { + status: response.status, + features: response.data?.features?.length || 0, + }); + + this.clustersGeojson = response.data; + + // Update current bounds and zoom + if (bbox) { + this.currentBounds = bbox; + } + this.currentZoom = zoom; + + return response.data; + } catch (error) { + console.error('GET_CLUSTERS error:', error); + this.error = error.message; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Clear clusters data + */ + CLEAR_CLUSTERS() { + this.clustersGeojson = { + type: 'FeatureCollection', + features: [], + }; + this.currentBounds = null; + this.currentZoom = null; + this.error = null; + }, + + /** + * Set year filter + */ + SET_YEAR_FILTER(year) { + this.year = year; + }, + + /** + * Update bounds without fetching new data + */ + UPDATE_BOUNDS(bounds, zoom) { + this.currentBounds = bounds; + this.currentZoom = zoom; + }, + }, +}); diff --git a/resources/js/stores/maps/global/index.js b/resources/js/stores/maps/global/index.js new file mode 100644 index 000000000..2597d92e4 --- /dev/null +++ b/resources/js/stores/maps/global/index.js @@ -0,0 +1,94 @@ +import { defineStore } from 'pinia'; +import axios from 'axios'; +import { requests } from './requests.js'; + +export const useGlobalMapStore = defineStore('globalMap', { + state: () => { + return { + artData: [], + clustersGeojson: { + type: 'FeatureCollection', + features: [], + }, + pointsGeojson: { + type: 'FeatureCollection', + features: [], + }, + currentDate: 'today', + loading: true, + datesOpen: false, + langsOpen: false, + customTagsFound: [], + // New state for filters + activeFilters: { + categories: [], + litter_objects: [], + materials: [], + brands: [], + custom_tags: [], + }, + // Pagination state + pointsPagination: { + current_page: 1, + last_page: 1, + per_page: 300, + total: 0, + has_more: false, + }, + isLoadingMorePoints: false, + }; + }, + + actions: { + ...requests, + + // Helper to set filters + setFilters(filters) { + this.activeFilters = { ...this.activeFilters, ...filters }; + }, + + // Helper to clear filters + clearFilters() { + this.activeFilters = { + categories: [], + litter_objects: [], + materials: [], + brands: [], + custom_tags: [], + }; + }, + + // Reset pagination when filters change + resetPagination() { + this.pointsPagination = { + current_page: 1, + last_page: 1, + per_page: 300, + total: 0, + has_more: false, + }; + this.pointsGeojson = { + type: 'FeatureCollection', + features: [], + }; + }, + + // Load more points (for pagination) + async loadMorePoints(params) { + if (this.isLoadingMorePoints || !this.pointsPagination.has_more) return; + + this.isLoadingMorePoints = true; + const nextPage = this.pointsPagination.current_page + 1; + + try { + await this.GET_POINTS({ + ...params, + page: nextPage, + append: true, + }); + } finally { + this.isLoadingMorePoints = false; + } + }, + }, +}); diff --git a/resources/js/stores/maps/global/requests.js b/resources/js/stores/maps/global/requests.js new file mode 100644 index 000000000..32afa9e41 --- /dev/null +++ b/resources/js/stores/maps/global/requests.js @@ -0,0 +1,163 @@ +import axios from 'axios'; + +// maps/global/requests.js +export const requests = { + /** + * Get the art point data for the global map + */ + async GET_ART_DATA() { + await axios + .get('/global/art-data') + .then((response) => { + console.log('get_art_data', response); + this.artData = response.data; + }) + .catch((error) => { + console.error('get_art_data', error); + }); + }, + + /** + * Get clusters for the global map + */ + async GET_CLUSTERS({ zoom, year, bbox = null }) { + await axios + .get('/api/clusters', { + params: { zoom, year, bbox }, + }) + .then((response) => { + console.log('get_clusters', response); + this.clustersGeojson = response.data; + }) + .catch((error) => { + console.error('get_clusters', error); + }); + }, + + /** + * Get points for the global map using the new API + */ + async GET_POINTS({ + zoom, + bbox, + year = null, + fromDate = null, + toDate = null, + username = null, + layers = null, + filters = null, + page = 1, + per_page = 300, + append = false, + }) { + // Prepare parameters for the new API + const params = { + zoom: Math.round(zoom), + bbox: { + left: bbox.left || bbox._sw?.lng, + bottom: bbox.bottom || bbox._sw?.lat, + right: bbox.right || bbox._ne?.lng, + top: bbox.top || bbox._ne?.lat, + }, + page, + per_page, + }; + + // Add year filter if provided + if (year) { + params.year = year; + } + + // Add date filters if provided + if (fromDate) { + params.from = fromDate; // Should be YYYY-MM-DD format + } + if (toDate) { + params.to = toDate; // Should be YYYY-MM-DD format + } + + // Add username filter if provided + if (username) { + params.username = username; + } + + // Use provided filters or fall back to store's active filters + const appliedFilters = filters || this.activeFilters; + + // Convert layers array to filter structure if provided + if (layers && layers.length > 0) { + // Assuming layers is an array of category names + params.categories = layers; + } else if (appliedFilters.categories?.length > 0) { + params.categories = appliedFilters.categories; + } + + // Add other filters + if (appliedFilters.litter_objects?.length > 0) { + params.litter_objects = appliedFilters.litter_objects; + } + if (appliedFilters.materials?.length > 0) { + params.materials = appliedFilters.materials; + } + if (appliedFilters.brands?.length > 0) { + params.brands = appliedFilters.brands; + } + if (appliedFilters.custom_tags?.length > 0) { + params.custom_tags = appliedFilters.custom_tags; + } + + await axios + .get('/api/points', { params }) + .then((response) => { + console.log('get_points', response); + + // Handle append mode for pagination + if (append && this.pointsGeojson.features.length > 0) { + this.pointsGeojson.features = [...this.pointsGeojson.features, ...response.data.features]; + } else { + this.pointsGeojson = response.data; + } + + // Update pagination metadata + if (response.data.meta) { + this.pointsPagination = { + current_page: response.data.meta.current_page || page, + last_page: response.data.meta.last_page || 1, + per_page: response.data.meta.per_page || per_page, + total: response.data.meta.total || 0, + has_more: response.data.meta.has_more_pages || false, + }; + } + }) + .catch((error) => { + console.error('get_points', error); + + // Handle validation errors + if (error.response?.status === 422) { + console.error('Validation errors:', error.response.data.errors); + } + }); + }, + + /** + * Load custom tags for the global map + */ + async SEARCH_CUSTOM_TAGS(payload) { + await axios + .get('/global/search/custom-tags', { + params: { + search: payload, + }, + }) + .then((response) => { + console.log('search_custom_tags', response); + + if (response.data.success) { + this.customTagsFound = response.data.tags; + } + }) + .catch((error) => { + console.error('search_custom_tags', error); + }); + }, +}; diff --git a/resources/js/stores/maps/points/index.js b/resources/js/stores/maps/points/index.js new file mode 100644 index 000000000..6e624bbd5 --- /dev/null +++ b/resources/js/stores/maps/points/index.js @@ -0,0 +1,106 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; + +// points/index.js +export const usePointsStore = defineStore('points', { + state: () => { + return { + // Main points data (GeoJSON format) + pointsGeojson: null, + + // Category-specific data storage + categoryData: {}, + + // Loading and error states + loading: false, + error: null, + + // Current map bounds and zoom for caching + currentBounds: null, + currentZoom: null, + + // Time range data for statistics + timeRanges: {}, + }; + }, + + getters: { + // Get points count for current data + pointsCount: (state) => { + return state.pointsGeojson?.features?.length || 0; + }, + + // Get category-specific points count + getCategoryPointsCount: (state) => (category) => { + return state.categoryData[category]?.features?.length || 0; + }, + + // Check if data exists for current bounds + hasDataForBounds: (state) => (bounds, zoom) => { + if (!state.currentBounds || !state.pointsGeojson) return false; + + // Simple bounds comparison (you might want to make this more sophisticated) + return ( + Math.abs(state.currentBounds.left - bounds.left) < 0.001 && + Math.abs(state.currentBounds.right - bounds.right) < 0.001 && + Math.abs(state.currentBounds.top - bounds.top) < 0.001 && + Math.abs(state.currentBounds.bottom - bounds.bottom) < 0.001 && + state.currentZoom === zoom + ); + }, + + // Get time range for a specific category + getTimeRange: + (state) => + (category = 'all') => { + return state.timeRanges[category] || null; + }, + }, + + actions: { + ...requests, + + // Calculate time range from features + calculateTimeRange(features, category = 'all') { + if (!features || features.length === 0) return null; + + const dates = features + .map((f) => f.properties.datetime) + .filter((d) => d) + .sort(); + + if (dates.length === 0) return null; + + const timeRange = { + earliest: dates[0], + latest: dates[dates.length - 1], + count: features.length, + }; + + this.timeRanges[category] = timeRange; + return timeRange; + }, + + // Update current bounds for caching + updateCurrentBounds(bounds, zoom) { + this.currentBounds = bounds; + this.currentZoom = zoom; + }, + + // Manual state setters for debugging + setLoading(loading) { + console.log('Setting loading to:', loading); + this.loading = loading; + }, + + setError(error) { + console.log('Setting error to:', error); + this.error = error; + }, + + setPointsGeojson(data) { + console.log('Setting pointsGeojson to:', data?.features?.length || 0, 'features'); + this.pointsGeojson = data; + }, + }, +}); diff --git a/resources/js/stores/maps/points/requests.js b/resources/js/stores/maps/points/requests.js new file mode 100644 index 000000000..e8df40786 --- /dev/null +++ b/resources/js/stores/maps/points/requests.js @@ -0,0 +1,139 @@ +import axios from 'axios'; + +// points/requests.js +export const requests = { + // Get points for a specific bounding box and zoom level + async GET_POINTS({ zoom, bbox }) { + try { + this.setLoading(true); + this.setError(null); + + // Use bracket notation as shown in the working component + const params = { + zoom: Math.round(zoom), + 'bbox[left]': bbox.left, + 'bbox[bottom]': bbox.bottom, + 'bbox[right]': bbox.right, + 'bbox[top]': bbox.top, + }; + + console.log('Sending params with bracket notation:', params); + + const response = await axios.get('/api/points', { + params: params, + }); + + console.log('GET_POINTS response:', response.data); + console.log('Response status:', response.status); + console.log('Features count:', response.data?.features?.length || 0); + + // Store the response data in the expected format + this.setPointsGeojson(response.data); + this.setLoading(false); + + return response.data; + } catch (error) { + console.error('Failed to load points:', error); + console.error('Error response:', error.response?.data); + console.error('Error status:', error.response?.status); + + // Log the actual error details + if (error.response?.data?.errors) { + console.error('Validation errors:', error.response.data.errors); + Object.keys(error.response.data.errors).forEach((key) => { + console.error(` ${key}:`, error.response.data.errors[key]); + }); + } + + this.setError(error.response?.data?.message || error.message); + this.setLoading(false); + this.setPointsGeojson(null); + throw error; + } + }, + + // Get points with category filtering (for smoking data, etc.) + async GET_POINTS_BY_CATEGORY({ zoom, bbox, category = null, placeId = null }) { + console.log('GET_POINTS_BY_CATEGORY called with:', { zoom, bbox, category, placeId }); + + try { + this.setLoading(true); + this.setError(null); + + // Use bracket notation for bbox parameters + const params = { + zoom: Math.round(zoom), + 'bbox[left]': bbox.left, + 'bbox[bottom]': bbox.bottom, + 'bbox[right]': bbox.right, + 'bbox[top]': bbox.top, + }; + + // Handle category filtering - backend expects categories array + if (category) { + // Map simple category names to the backend's expected format + const categoryMappings = { + smoking: 'smoking', + alcohol: 'alcohol', + food: 'food', + coffee: 'coffee', + brands: 'brands', + }; + + const mappedCategory = categoryMappings[category] || category; + params['categories[0]'] = mappedCategory; + } + + console.log('Sending params with category:', params); + + const response = await axios.get('/api/points', { + params: params, + }); + + console.log('GET_POINTS_BY_CATEGORY response:', response.data); + console.log('Response status:', response.status); + console.log('Features count:', response.data?.features?.length || 0); + + // Store the response data with category+placeId key for better isolation + const storageKey = placeId ? `${category || 'all'}:${placeId}` : category || 'all'; + this.categoryData[storageKey] = response.data; + this.setLoading(false); + + return response.data; + } catch (error) { + console.error(`Failed to load ${category} points:`, error); + console.error('Error response:', error.response?.data); + console.error('Error status:', error.response?.status); + + // Log validation errors if present + if (error.response?.data?.errors) { + console.error('Validation errors:', error.response.data.errors); + Object.keys(error.response.data.errors).forEach((key) => { + console.error(` ${key}:`, error.response.data.errors[key]); + }); + } + + this.setError(error.response?.data?.message || error.message); + this.setLoading(false); + throw error; + } + }, + + // Set loading state (kept for compatibility but use setLoading instead) + SET_LOADING(loading) { + this.setLoading(loading); + }, + + // Clear error state + CLEAR_ERROR() { + this.setError(null); + }, + + // Clear all points data + CLEAR_POINTS() { + this.setPointsGeojson(null); + this.categoryData = {}; + this.setError(null); + this.setLoading(false); + }, +}; diff --git a/resources/js/stores/modal/index.js b/resources/js/stores/modal/index.js new file mode 100644 index 000000000..f7966d60a --- /dev/null +++ b/resources/js/stores/modal/index.js @@ -0,0 +1,43 @@ +import { defineStore } from "pinia"; + +export const useModalStore = defineStore("modal", { + + state: () => { + return { + action: '', // action to dispatch + button: '', // text on the button to display + show: false, + title: '', + type: '', + }; + }, + + actions: { + /** + * Hide the modal + */ + hideModal () + { + this.show = false; + }, + + /** + * Reset state, when the user logs out + */ + resetState () + { + this.$reset(); + }, + + /** + * Show the modal + */ + showModal (payload) + { + this.type = payload.type; + this.title = payload.title; + this.action = payload.action; + this.show = true; + } + } +}); diff --git a/resources/js/stores/photos/index.js b/resources/js/stores/photos/index.js new file mode 100644 index 000000000..bba98777d --- /dev/null +++ b/resources/js/stores/photos/index.js @@ -0,0 +1,129 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; + +export const usePhotosStore = defineStore('photos', { + state: () => ({ + // Photos array + photos: [], + + // Pagination data + pagination: { + current_page: 1, + last_page: 1, + per_page: 25, + total: 0, + }, + + // User data + user: null, + + // Current filters + currentFilters: { + tagged: null, + id: null, + idOperator: '=', + tag: null, + customTag: null, + dateFrom: null, + dateTo: null, + perPage: 25, + }, + + // Stats (separate from photos for caching) + untaggedStats: { + totalPhotos: 0, + totalTags: 0, + leftToTag: 0, + taggedPercentage: 0, + }, + + // Previous custom tags + previousCustomTags: [], + + // Loading states + loading: { + photos: false, + stats: false, + }, + + // Error handling + error: null, + }), + + getters: { + currentPage: (state) => state.pagination.current_page, + lastPage: (state) => state.pagination.last_page, + perPage: (state) => state.pagination.per_page, + total: (state) => state.pagination.total, + }, + + actions: { + ...requests, + + /** + * Fetch both photos and stats (for initial load) + */ + async fetchUntaggedData(page = 1, filters = {}) { + this.currentFilters = { ...this.currentFilters, ...filters }; + // Fetch photos and stats in parallel + await Promise.all([this.GET_USERS_PHOTOS(page, this.currentFilters), this.GET_UNTAGGED_STATS()]); + }, + + /** + * Just fetch photos (for pagination) + */ + async fetchPhotosOnly(page = 1, filters = {}) { + this.loading.photos = true; + this.currentFilters = { ...this.currentFilters, ...filters }; + try { + await this.GET_USERS_PHOTOS(page, this.currentFilters); + } finally { + this.loading.photos = false; + } + }, + + /** + * Just fetch stats (for refresh after tagging) + */ + async fetchStatsOnly() { + this.loading.stats = true; + try { + await this.GET_UNTAGGED_STATS(); + } finally { + this.loading.stats = false; + } + }, + + /** + * Clear all data + */ + clearData() { + this.photos = []; + this.pagination = { + current_page: 1, + last_page: 1, + per_page: 25, + total: 0, + }; + this.user = null; + this.currentFilters = { + tagged: null, + id: null, + idOperator: '=', + tag: null, + customTag: null, + dateFrom: null, + dateTo: null, + perPage: 25, + }; + this.untaggedStats = { + totalPhotos: 0, + totalTags: 0, + leftToTag: 0, + taggedPercentage: 0, + }; + this.previousCustomTags = []; + this.error = null; + }, + }, +}); diff --git a/resources/js/stores/photos/requests.js b/resources/js/stores/photos/requests.js new file mode 100644 index 000000000..a45040a3f --- /dev/null +++ b/resources/js/stores/photos/requests.js @@ -0,0 +1,142 @@ +import { useToast } from 'vue-toastification'; +import i18n from '../../i18n.js'; +const toast = useToast(); +const t = i18n.global.t; + +export const requests = { + /** + * Fetch photos with filters + */ + async GET_USERS_PHOTOS(page = 1, filters = {}) { + try { + const params = { + page, + per_page: filters.perPage || 25, + }; + + // Add tagged filter + if (filters.tagged !== null && filters.tagged !== undefined) { + params.tagged = filters.tagged ? 1 : 0; + } + + // Add ID filter + if (filters.id) { + params.id = filters.id; + params.id_operator = filters.idOperator || '='; + } + + // Add tag filter + if (filters.tag) { + params.tag = filters.tag; + } + + // Add custom tag filter + if (filters.customTag) { + params.custom_tag = filters.customTag; + } + + // Add date filters + if (filters.dateFrom) { + params.date_from = filters.dateFrom; + } + if (filters.dateTo) { + params.date_to = filters.dateTo; + } + + const response = await axios.get('/api/v3/user/photos', { params }); + + // Update store with new structure + this.paginated = { + data: response.data.photos || [], + ...response.data.pagination, + }; + this.photos = response.data.photos || []; + this.pagination = response.data.pagination || { + current_page: 1, + last_page: 1, + per_page: 25, + total: 0, + }; + this.user = response.data.user || null; + + // Extract custom tags if they exist in the old tags + if (this.photos.length > 0) { + const customTags = new Set(); + this.photos.forEach((photo) => { + // Check old tags for custom tags + if (photo.old_tags?.customTags) { + Object.keys(photo.old_tags.customTags).forEach((tag) => { + customTags.add(tag); + }); + } + // Check new tags for custom tags + photo.new_tags?.forEach((tag) => { + if (tag.primary_custom_tag?.key) { + customTags.add(tag.primary_custom_tag.key); + } + }); + }); + this.previousCustomTags = Array.from(customTags); + } + + return response.data; + } catch (error) { + console.error('get_users_photos', error); + throw error; + } + }, + + /** + * Fetch stats separately (can be cached) + */ + async GET_UNTAGGED_STATS() { + try { + const response = await axios.get('/api/v3/user/photos/stats'); + + this.untaggedStats = { + totalPhotos: response.data.totalPhotos || 0, + totalTags: response.data.totalTags || 0, + leftToTag: response.data.leftToTag || 0, + taggedPercentage: response.data.taggedPercentage || 0, + }; + + return response.data; + } catch (error) { + console.error('get_untagged_stats', error); + throw error; + } + }, + + /** + * Upload tags for a photo + */ + async UPLOAD_TAGS({ photoId, tags }) { + try { + const response = await axios.post('/api/v3/tags', { + photo_id: photoId, + tags: tags, + }); + + if (response.data.success) { + const title = t('Tags Added'); + toast.success(title); + + // Refresh stats after successful upload + await this.GET_UNTAGGED_STATS(); + + // Reload photos with current filters + if (this.pagination.total > 0) { + await this.GET_USERS_PHOTOS(this.pagination.current_page, this.currentFilters); + } else { + toast.info(t('No more photos left to tag')); + } + } + + return response.data; + } catch (error) { + const title = t('notifications.tags.uploaded-failed'); + toast.error(title); + throw error; + } + }, +}; diff --git a/resources/js/stores/plans/index.js b/resources/js/stores/plans/index.js new file mode 100644 index 000000000..cce48b802 --- /dev/null +++ b/resources/js/stores/plans/index.js @@ -0,0 +1,52 @@ +import { defineStore } from 'pinia'; +import axios from 'axios'; + +export const usePlansStore = defineStore('plans', { + state: () => ({ + plans: [ + { id: 1, name: 'Starter', price: 0, plan_id: null }, + { id: 2, name: 'Startup', price: 500, plan_id: 'price_startup' }, + { id: 3, name: 'Basic', price: 1500, plan_id: 'price_basic' }, + { id: 4, name: 'Advanced', price: 3000, plan_id: 'price_advanced' }, + { id: 5, name: 'Pro', price: 5000, plan_id: 'price_pro' }, + ], + errors: {}, + loading: false, + }), + + actions: { + async fetchPlans() { + try { + this.loading = true; + // const { data } = await axios.get('/api/plans') + // this.plans = data + } catch (e) { + // keep defaults + } finally { + this.loading = false; + } + }, + + clearError(key) { + if (this.errors?.[key]) { + const next = { ...this.errors }; + delete next[key]; + this.errors = next; + } + }, + + async createAccount(payload) { + this.errors = {}; + try { + await axios.post('/api/auth/register', payload); + } catch (error) { + if (error?.response?.status === 422) { + this.errors = error.response.data.errors || {}; + } else { + this.errors = { general: ['Something went wrong. Please try again.'] }; + } + throw error; + } + }, + }, +}); diff --git a/resources/js/stores/redis/index.js b/resources/js/stores/redis/index.js new file mode 100644 index 000000000..c293dbbb6 --- /dev/null +++ b/resources/js/stores/redis/index.js @@ -0,0 +1,235 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; + +export const useRedisStore = defineStore('redis', { + state: () => ({ + // Overview data + users: [], + global: { + categories: { total: 0, unique: 0, top10: {} }, + objects: { total: 0, unique: 0, top10: {} }, + materials: { total: 0, unique: 0, top10: {} }, + brands: { total: 0, unique: 0, top10: {} }, + }, + timeSeries: {}, // { "2024-01": { photos: 0, xp: 0 } } + geo: { + countries: { locations: 0, totalPhotos: 0 }, + states: { locations: 0, totalPhotos: 0 }, + cities: { locations: 0, totalPhotos: 0 }, + }, + stats: { + usedMemory: 'N/A', + totalKeys: 0, + connectedClients: 0, + uptime: 0, + }, + + // User detail data + selectedUser: null, + selectedUserMetrics: {}, + selectedUserRaw: {}, + + // Performance data + performanceData: null, + keyAnalysis: null, + + // UI state + loading: false, + error: null, + lastUpdated: null, + autoRefresh: false, + refreshInterval: null, + activeTab: 'overview', // 'overview' | 'performance' | 'keys' + + // Filters and settings + userLimit: 50, + sortBy: 'uploads', // 'uploads' | 'xp' | 'streak' + sortOrder: 'desc', // 'asc' | 'desc' + }), + + persist: { + enabled: true, + strategies: [ + { + key: 'redis', + storage: localStorage, + paths: ['autoRefresh', 'userLimit', 'sortBy', 'sortOrder'], + }, + ], + }, + + getters: { + /** + * Get sorted users based on current sort settings + */ + sortedUsers: (state) => { + const users = [...state.users]; + return users.sort((a, b) => { + const aVal = a[state.sortBy]; + const bVal = b[state.sortBy]; + return state.sortOrder === 'desc' ? bVal - aVal : aVal - bVal; + }); + }, + + /** + * Get formatted time series data for charts + */ + timeSeriesChartData: (state) => { + const months = Object.keys(state.timeSeries).sort(); + return { + labels: months, + datasets: [ + { + label: 'Photos', + data: months.map((month) => state.timeSeries[month]?.photos || 0), + }, + { + label: 'XP', + data: months.map((month) => state.timeSeries[month]?.xp || 0), + }, + ], + }; + }, + + /** + * Check if data is stale (older than 5 minutes) + */ + isDataStale: (state) => { + if (!state.lastUpdated) return true; + const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000); + return new Date(state.lastUpdated) < fiveMinutesAgo; + }, + + /** + * Get total metrics across all dimensions + */ + totalMetrics: (state) => { + return { + totalItems: Object.values(state.global).reduce((sum, metric) => sum + metric.total, 0), + uniqueItems: Object.values(state.global).reduce((sum, metric) => sum + metric.unique, 0), + totalUsers: state.users.length, + totalUploads: state.users.reduce((sum, user) => sum + user.uploads, 0), + totalXp: state.users.reduce((sum, user) => sum + user.xp, 0), + }; + }, + }, + + actions: { + /** + * Clear error state + */ + clearError() { + this.error = null; + }, + + /** + * Set active tab + */ + setActiveTab(tab) { + this.activeTab = tab; + }, + + /** + * Update sort settings + */ + updateSort(sortBy, sortOrder = null) { + this.sortBy = sortBy; + if (sortOrder) { + this.sortOrder = sortOrder; + } else { + // Toggle order if same column + if (this.sortBy === sortBy) { + this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc'; + } + } + }, + + /** + * Toggle auto-refresh + */ + toggleAutoRefresh() { + this.autoRefresh = !this.autoRefresh; + + if (this.autoRefresh) { + this.startAutoRefresh(); + } else { + this.stopAutoRefresh(); + } + }, + + /** + * Start auto-refresh interval + */ + startAutoRefresh() { + if (this.refreshInterval) return; + + this.refreshInterval = setInterval(() => { + this.FETCH_REDIS_DATA(); + }, 10000); // 10 seconds + }, + + /** + * Stop auto-refresh interval + */ + stopAutoRefresh() { + if (this.refreshInterval) { + clearInterval(this.refreshInterval); + this.refreshInterval = null; + } + }, + + /** + * Reset store to initial state + */ + resetStore() { + this.stopAutoRefresh(); + this.$reset(); + }, + + /** + * Initialize store with data + */ + initializeData(data) { + this.users = data.users || []; + this.global = data.global || this.global; + this.timeSeries = data.timeSeries || {}; + this.geo = data.geo || this.geo; + this.stats = data.stats || this.stats; + this.lastUpdated = new Date(); + }, + + /** + * Set selected user data + */ + setSelectedUser(userData) { + this.selectedUser = userData.user; + this.selectedUserMetrics = userData.metrics; + this.selectedUserRaw = userData.raw; + }, + + /** + * Clear selected user + */ + clearSelectedUser() { + this.selectedUser = null; + this.selectedUserMetrics = {}; + this.selectedUserRaw = {}; + }, + + /** + * Set performance data + */ + setPerformanceData(data) { + this.performanceData = data; + }, + + /** + * Set key analysis data + */ + setKeyAnalysis(data) { + this.keyAnalysis = data; + }, + + ...requests, + }, +}); diff --git a/resources/js/stores/redis/requests.js b/resources/js/stores/redis/requests.js new file mode 100644 index 000000000..799db5e5f --- /dev/null +++ b/resources/js/stores/redis/requests.js @@ -0,0 +1,250 @@ +export const requests = { + /** + * Fetch main Redis data overview + */ + async FETCH_REDIS_DATA() { + this.loading = true; + this.error = null; + + try { + const response = await axios.get('/api/redis-data', { + params: { + limit: this.userLimit, + }, + }); + + console.log('fetch_redis_data', response); + + this.initializeData(response.data); + + return response.data; + } catch (error) { + console.error('error.fetch_redis_data', error); + this.error = error.response?.data?.message || 'Failed to fetch Redis data'; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Fetch specific user's Redis data + */ + async FETCH_USER_REDIS_DATA(userId) { + this.loading = true; + this.error = null; + + try { + const response = await axios.get(`/api/redis-data/${userId}`); + + console.log('fetch_user_redis_data', response); + + this.setSelectedUser(response.data); + + return response.data; + } catch (error) { + console.error('error.fetch_user_redis_data', error); + this.error = error.response?.data?.message || 'Failed to fetch user data'; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Fetch Redis performance metrics + */ + async FETCH_PERFORMANCE_DATA() { + this.loading = true; + this.error = null; + + try { + const response = await axios.get('/api/redis-data/performance'); + + console.log('fetch_performance_data', response); + + this.setPerformanceData(response.data); + + return response.data; + } catch (error) { + console.error('error.fetch_performance_data', error); + this.error = error.response?.data?.message || 'Failed to fetch performance data'; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Fetch Redis key analysis + */ + async FETCH_KEY_ANALYSIS() { + this.loading = true; + this.error = null; + + try { + const response = await axios.get('/api/redis-data/key-analysis'); + + console.log('fetch_key_analysis', response); + + this.setKeyAnalysis(response.data); + + return response.data; + } catch (error) { + console.error('error.fetch_key_analysis', error); + this.error = error.response?.data?.message || 'Failed to fetch key analysis'; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Clear all Redis data (dangerous operation) + */ + async CLEAR_REDIS_DATA(confirmation) { + if (confirmation !== 'DELETE_ALL_REDIS_DATA') { + throw new Error('Invalid confirmation'); + } + + this.loading = true; + this.error = null; + + try { + const response = await axios.delete('/api/redis-data', { + data: { + confirm: confirmation, + }, + }); + + console.log('clear_redis_data', response); + + // Reset store after clearing data + this.resetStore(); + + return response.data; + } catch (error) { + console.error('error.clear_redis_data', error); + this.error = error.response?.data?.message || 'Failed to clear Redis data'; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Export Redis data as JSON + */ + async EXPORT_REDIS_DATA(format = 'json') { + try { + const response = await axios.get('/api/redis-data/export', { + params: { format }, + responseType: 'blob', + }); + + // Create download link + const url = window.URL.createObjectURL(new Blob([response.data])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', `redis-data-${Date.now()}.${format}`); + document.body.appendChild(link); + link.click(); + link.remove(); + window.URL.revokeObjectURL(url); + + return true; + } catch (error) { + console.error('error.export_redis_data', error); + this.error = error.response?.data?.message || 'Failed to export data'; + throw error; + } + }, + + /** + * Search users by name or email + */ + async SEARCH_USERS(query) { + if (!query || query.length < 2) { + return []; + } + + try { + const response = await axios.get('/api/redis-data/search/users', { + params: { q: query }, + }); + + console.log('search_users', response); + + return response.data; + } catch (error) { + console.error('error.search_users', error); + throw error; + } + }, + + /** + * Get Redis data for specific date range + */ + async FETCH_REDIS_DATA_BY_DATE(startDate, endDate) { + this.loading = true; + this.error = null; + + try { + const response = await axios.get('/api/redis-data/date-range', { + params: { + start: startDate, + end: endDate, + }, + }); + + console.log('fetch_redis_data_by_date', response); + + return response.data; + } catch (error) { + console.error('error.fetch_redis_data_by_date', error); + this.error = error.response?.data?.message || 'Failed to fetch data for date range'; + throw error; + } finally { + this.loading = false; + } + }, + + /** + * Refresh specific metric type + */ + async REFRESH_METRIC(metricType) { + try { + const response = await axios.get(`/api/redis-data/metric/${metricType}`); + + console.log('refresh_metric', response); + + // Update only the specific metric in state + if (metricType in this.global) { + this.global[metricType] = response.data; + } + + return response.data; + } catch (error) { + console.error('error.refresh_metric', error); + throw error; + } + }, + + /** + * Get top items for a specific dimension + */ + async FETCH_TOP_ITEMS(dimension, limit = 10) { + try { + const response = await axios.get(`/api/redis-data/top/${dimension}`, { + params: { limit }, + }); + + console.log('fetch_top_items', response); + + return response.data; + } catch (error) { + console.error('error.fetch_top_items', error); + throw error; + } + }, +}; diff --git a/resources/js/stores/subscriber/actions.js b/resources/js/stores/subscriber/actions.js new file mode 100644 index 000000000..4f252e0d8 --- /dev/null +++ b/resources/js/stores/subscriber/actions.js @@ -0,0 +1,101 @@ +import i18n from "../../i18n.js"; +import { useToast } from "vue-toastification"; +const toast = useToast(); + +const t = i18n.global.t; + +const title = t('notifications.success'); +const body = t('notifications.subscription-cancelled'); + +export const actions = { + // /** + // * The user wants to cancel their current subscription. + // * We must also delete any pending invoices. + // */ + // async DELETE_ACTIVE_SUBSCRIPTION (context) + // { + + // + // await axios.post('/stripe/delete') + // .then(response => { + // console.log('delete_active_subscription', response); + // + // toast.success({ + // title, + // body, + // }); + // + // // update user/subscriber data + // this.reset_subscriber(); + // }) + // .catch(error => { + // console.log('error.delete_active_subscription'); + // }); + // }, + + // /** + // * Check a users subscription + // */ + // async GET_USERS_SUBSCRIPTIONS (context) + // { + // // Get user.subscriptions + // await axios.get('/stripe/subscriptions') + // .then(response => { + // console.log('check_current_subscription', response); + // + // // There is more data here that we are not yet using + // // context.commit('subscription', response.data.sub); + // this.subscription(response.data.sub); + // }) + // .catch(error => { + // console.log('error.check_current_subscription', error); + // }); + // }, + + // /** + // * The user cancelled and wants to sign up again + // * + // * https://stripe.com/docs/api/subscriptions/create + // */ + // async RESUBSCRIBE (context, payload) + // { + // await axios.post('/stripe/resubscribe', { + // plan: payload + // }) + // .then(response => { + // console.log('resubscribe', response); + // }) + // .catch(error => { + // console.log('error.resubscribe', error); + // }); + // }, + + /** + * A new subscriber wants to receive emails + */ + async CREATE_EMAIL_SUBSCRIPTION (payload) + { + await axios.post('/subscribe', { + email: payload + }) + .then(response => { + console.log('subscribe', response) + + toast.success("Subscription created!"); + + // show notification + this.updatedJustSubscribed(true); + + // hide notification + setTimeout(() => { + this.updatedJustSubscribed(false); + }, 5000) + }) + .catch(error => { + console.log('error.subscribe', error.response.data.errors); + + this.subscribeErrors(error.response.data.errors); + }); + } + +}; diff --git a/resources/js/stores/subscriber/index.js b/resources/js/stores/subscriber/index.js new file mode 100644 index 000000000..6aecfd75a --- /dev/null +++ b/resources/js/stores/subscriber/index.js @@ -0,0 +1,20 @@ +import { defineStore } from 'pinia' +import { actions } from './actions' +import { mutations } from "./mutations.js"; + +export const useSubscriberStore = defineStore('subscriber', { + + state: () => ({ + errors: {}, + justSubscribed: false, + subscription: {} + }), + + getters: {}, + + actions: { + ...actions, + ...mutations + } + +}); diff --git a/resources/js/stores/subscriber/mutations.js b/resources/js/stores/subscriber/mutations.js new file mode 100644 index 000000000..206a53e9d --- /dev/null +++ b/resources/js/stores/subscriber/mutations.js @@ -0,0 +1,15 @@ +export const mutations = { + + clearErrors () { + this.errors = {}; + }, + + subscribeErrors (payload) { + this.errors = payload; + }, + + updatedJustSubscribed (payload) { + this.justSubscribed = payload; + } + +}; diff --git a/resources/js/stores/tags/index.js b/resources/js/stores/tags/index.js new file mode 100644 index 000000000..f722cae9e --- /dev/null +++ b/resources/js/stores/tags/index.js @@ -0,0 +1,22 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; +import { mutations } from './mutations.js'; + +export const useTagsStore = defineStore('tags', { + state: () => ({ + // All Tags in their nested format + // Category -> Object -> Materials + groupedTags: [], + + // Non-tested tags in their native format + categories: [], + objects: [], + materials: [], + brands: [], + }), + + actions: { + ...requests, + ...mutations, + }, +}); diff --git a/resources/js/stores/tags/mutations.js b/resources/js/stores/tags/mutations.js new file mode 100644 index 000000000..e45b5038b --- /dev/null +++ b/resources/js/stores/tags/mutations.js @@ -0,0 +1,13 @@ +export const mutations = { + initTags(tags) { + // Tags in their nested format. + this.groupedTags = tags; + }, + + initAllTags({ categories, objects, materials, brands }) { + this.categories = categories; + this.objects = objects; + this.materials = materials; + this.brands = brands; + }, +}; diff --git a/resources/js/stores/tags/requests.js b/resources/js/stores/tags/requests.js new file mode 100644 index 000000000..acb380de8 --- /dev/null +++ b/resources/js/stores/tags/requests.js @@ -0,0 +1,30 @@ +export const requests = { + /** + * Get all pre-defined tags for tagging + */ + async GET_TAGS() { + await axios + .get('/api/tags') + .then((response) => { + console.log('GET_TAGS', response); + + this.initTags(response.data.tags); + }) + .catch((error) => { + console.error('GET_TAGS', error); + }); + }, + + async GET_ALL_TAGS() { + await axios + .get('/api/tags/all') + .then((response) => { + console.log('GET_ALL_TAGS', response); + + this.initAllTags(response.data); + }) + .catch((error) => { + console.error('GET_ALL_TAGS', error); + }); + }, +}; diff --git a/resources/js/stores/uploading/index.js b/resources/js/stores/uploading/index.js new file mode 100644 index 000000000..1f5291d23 --- /dev/null +++ b/resources/js/stores/uploading/index.js @@ -0,0 +1,15 @@ +import { defineStore } from "pinia"; + +export const useUploadingStore = defineStore('uploading', { + + state: () => ({ + isUploading: false, + }), + + actions: { + setIsUploading(val) { + this.isUploading = val; + }, + } + +}); diff --git a/resources/js/stores/user/index.js b/resources/js/stores/user/index.js new file mode 100644 index 000000000..1b5ec6f91 --- /dev/null +++ b/resources/js/stores/user/index.js @@ -0,0 +1,45 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; + +export const useUserStore = defineStore('user', { + state: () => ({ + admin: false, + auth: false, + countries: {}, // options for flags => { ie: "Ireland" } + errorLogin: '', + errors: {}, + geojson: { + features: [], + }, + helper: false, + position: 0, + photoPercent: 0, + requiredXp: 0, + tagPercent: 0, + totalPhotos: 0, + totalTags: 0, + totalUsers: 0, // Should be on users.old_js + user: {}, + }), + + persist: true, + + actions: { + clearErrorLogin() { + this.errorLogin = ''; + }, + + logout() { + this.auth = false; + this.admin = false; + this.helper = false; + window.location.href = '/'; + }, + + initUser(user) { + this.user = user; + }, + + ...requests, + }, +}); diff --git a/resources/js/stores/user/requests.js b/resources/js/stores/user/requests.js new file mode 100644 index 000000000..39b9960b1 --- /dev/null +++ b/resources/js/stores/user/requests.js @@ -0,0 +1,87 @@ +import { useModalStore } from '../modal/index.js'; + +export const requests = { + async CHECK_AUTH() { + await axios + .get('/check-auth') + .then((response) => { + console.log('check_auth', response); + + if (!response.data.success) { + this.$reset(); + } + }) + .catch((error) => { + console.log('error.check_auth', error); + }); + }, + + /** + * When we log in, we need to dispatch a request to get the current user + * + * Also checks for auth on app load. + */ + async GET_CURRENT_USER() { + await axios + .get('/current-user') + .then((response) => { + console.log('get_current_user', response); + + // context.commit('initUser', response.data); + // context.commit('set_default_litter_picked_up', response.data.picked_up); + }) + .catch((error) => { + console.log('error.get_current_user', error); + }); + }, + + /** + * Try to log the user in + * Todo - return the user object + */ + async LOGIN(payload) { + try { + await axios + .post('/login', { + email: payload.email, + password: payload.password, + }) + .then((response) => { + const modalStore = useModalStore(); + modalStore.hideModal(); + this.auth = true; + + // we need to force page refresh to put CSRF token in the session + window.location.href = '/upload'; + }) + .catch((error) => { + console.log('error.login', error.response.data); + + this.errorLogin = error.response.data.email; + }); + } catch (error) { + console.log('error.get_csrf_cookie', error); + } + }, + + /** + * Try to log the user out + */ + async LOGOUT() { + await axios + .get('/logout') + .then((response) => { + console.log('logout', response); + + this.logout(); + + // this will reset state for all objects + this.$reset(); + + window.location.href = '/'; + }) + .catch((error) => { + console.log('error.logout', error); + }); + }, +}; diff --git a/resources/js/stores/world/index.js b/resources/js/stores/world/index.js new file mode 100644 index 000000000..b962b17a6 --- /dev/null +++ b/resources/js/stores/world/index.js @@ -0,0 +1,49 @@ +import { defineStore } from 'pinia'; +import { requests } from './requests.js'; + +export const useWorldStore = defineStore('world', { + state: () => ({ + countryName: '', + globalLeaders: [], + hex: null, + level: { + previousXp: 0, + nextXp: 0, + }, + locations: [], // counties, states, cities + littercoin: 0, // owed to users + minDate: null, + maxDate: null, + previousLevelInt: 0, + progressPercent: 0, + sortLocationsBy: 'most-data', + stateName: '', + totalLitterInt: 0, + total_litter: 0, + total_photos: 0, + + // For WorldCup, SortLocations, components + selectedLocationId: 0, + locationTabKey: 0, + + // For History page + countryNames: [], + }), + + actions: { + ...requests, + + setSortLocationsBy(sort) { + this.sortLocationsBy = sort; + }, + + /** + * When a slider on city/options moves, update the min-date, max-date and hex-size + */ + updateCitySlider({ index, dates, hex }) { + this.locations[index].minDate = dates[0]; + this.locations[index].maxDate = dates[1]; + this.locations[index].hex = hex; + }, + }, +}); diff --git a/resources/js/stores/world/requests.js b/resources/js/stores/world/requests.js new file mode 100644 index 000000000..364f1b29d --- /dev/null +++ b/resources/js/stores/world/requests.js @@ -0,0 +1,20 @@ +export const requests = { + async GET_WORLD_CUP_DATA() { + await axios + .get('/get-world-cup-data') + .then((response) => { + console.log('get_world_cup_data', response); + + this.locations = response.data.countries; + this.globalLeaders = response.data.globalLeaders; + this.total_litter = response.data.total_litter; + this.total_photos = response.data.total_photos; + this.level.previousXp = response.data.previousXp; + this.level.nextXp = response.data.nextXp; + this.littercoin = response.data.littercoin; + }) + .catch((error) => { + console.log('error.get_world_cup_data', error); + }); + }, +}; diff --git a/resources/js/views/.DS_Store b/resources/js/views/.DS_Store index 5c10f4344..96a626197 100644 Binary files a/resources/js/views/.DS_Store and b/resources/js/views/.DS_Store differ diff --git a/resources/js/views/Academic/References.vue b/resources/js/views/Academic/References.vue new file mode 100644 index 000000000..0e99b6449 --- /dev/null +++ b/resources/js/views/Academic/References.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/resources/js/views/Academic/referencesList.js b/resources/js/views/Academic/referencesList.js new file mode 100644 index 000000000..b07466d0b --- /dev/null +++ b/resources/js/views/Academic/referencesList.js @@ -0,0 +1,593 @@ +export const referencesList = [ + { + date: '2018/06/25', + title: 'OpenLitterMap.com – Open Data on Plastic Pollution with Blockchain Rewards (Littercoin)', + link: 'https://opengeospatialdata.springeropen.com/articles/10.1186/s40965-018-0050-y', + author: 'Lynch, S.', + }, + { + date: '2018/12/21', + title: 'A Review of the Applicability of Gamification and Game-based Learning to Improve Household-level Waste Management Practices among Schoolchildren', + link: 'https://ijtech.eng.ui.ac.id/article/view/2644', + author: 'Magista et al.', + }, + { + date: '2019/01/05', + title: 'Needs, drivers, participants and engagement actions: a framework for motivating contributions to volunteered geographic information systems', + link: 'https://link.springer.com/article/10.1007/s10109-018-00289-5', + author: 'Gómez-Barrón, et al.', + }, + { + date: '2019/10/08', + title: 'CITIZEN SCIENCE AND DATA INTEGRATION FOR UNDERSTANDING MARINE LITTER', + link: 'http://pure.iiasa.ac.at/id/eprint/16095/1/22_Camera_ready_paper.pdf', + author: 'Campbell et al.', + }, + { + date: '2019/10/09', + title: 'Citizen science and the United Nations Sustainable Development Goals', + link: 'https://www.nature.com/articles/s41893-019-0390-3', + author: 'Fritz et al.', + }, + { + date: '2019/11/22', + title: 'Blockchain Solutions For Healthcare', + link: 'https://sci-hub.st/downloads/2019-12-01/99/10.1016@B978-0-12-819178-1.00050-2.pdf', + author: 'Zhang and Boulos', + }, + { + date: '2019/12/04', + title: 'Citizen Science - International Encyclopedia of Human Geography (Second Edition, Pages 209-214)', + link: 'https://www.sciencedirect.com/science/article/pii/B9780081022955106018', + author: 'Fast, V. and Haworth, B.', + }, + { + date: '2021/01/05', + title: 'Workflows and Spatial Analysis in the Age of GeoBlockchain: A Land Ownership Example', + link: 'https://cartogis.org/docs/autocarto/2020/docs/abstracts/3e%20Workflows%20and%20Spatial%20Analysis%20in%20the%20Age%20of%20GeoBlockchain%20A%20Land.pdf', + author: 'Papantonioua, C. and Hilton, B.', + }, + { + date: '2020/06/09', + title: 'Open data and its peers: understanding promising harbingers from Nordic Europe', + link: 'https://www.emerald.com/insight/content/doi/10.1108/AJIM-12-2019-0364/full/html', + author: 'Kessen, M.', + }, + { + date: '2020/06/13', + title: 'Volunteered geographic information systems: Technological design patterns', + link: 'https://onlinelibrary.wiley.com/doi/abs/10.1111/tgis.12544', + author: 'Gómez-Barrón, et al.', + }, + { + date: '2020/07/02', + title: 'Mapping citizen science contributions to the UN sustainable development goals', + link: 'https://link.springer.com/article/10.1007/s11625-020-00833-7', + author: 'Fraisl et al.', + }, + { + date: '2020/08/27', + title: 'Official Survey Data and Virtual Worlds—Designing an Integrative and Economical Open Source Production Pipeline for xR-Applications in Small and Medium-Sized Enterprises', + link: 'file:///Users/sean/Documents/BDCC-04-00026-v2.pdf', + author: 'Höhl, W.', + }, + { + date: '2020/11/02', + title: 'Citizen science and marine conservation: a global review', + link: 'https://royalsocietypublishing.org/doi/full/10.1098/rstb.2019.0461', + author: 'Kelly et al.', + }, + { + date: '2020/11/04', + title: 'Towards fair and efficient task allocation in blockchain-based crowdsourcing', + link: 'https://link.springer.com/article/10.1007/s42045-020-00043-w', + author: 'Pang et al.', + }, + { + date: '2020/12/21', + title: 'Open-source geospatial tools and technologies for urban and environmental studies', + link: 'https://opengeospatialdata.springeropen.com/articles/10.1186/s40965-020-00078-2', + author: 'Mobasheri et al.', + }, + { + date: '2021/02/01', + title: 'Analysis of plastic water pollution data', + link: 'https://dspace.lib.uom.gr/bitstream/2159/25376/1/BesiouEleutheriaMsc2021.pdf', + author: 'ΜΠΕΣΙΟΥ, E.', + }, + { + date: '2021/01/13', + title: 'Enabling a large-scale assessment of litter along Saudi Arabian red sea shores by combining drones and machine learning', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0269749121003109', + author: 'Martin et al.', + }, + { + date: '2021/03/04', + title: 'Autonomous, Onboard Vision-Based Trash and Litter Detection in Low Altitude Aerial Images Collected by an Unmanned Aerial Vehicle', + link: 'https://www.researchgate.net/profile/Mateusz-Piechocki-2/publication/349869848_Autonomous_Onboard_Vision-Based_Trash_and_Litter_Detection_in_Low_Altitude_Aerial_Images_Collected_by_an_Unmanned_Aerial_Vehicle/links/60450db2a6fdcc9c781dc33b/Autonomous-Onboard-Vision-Based-Trash-and-Litter-Detection-in-Low-Altitude-Aerial-Images-Collected-by-an-Unmanned-Aerial-Vehicle.pdf', + author: 'Kraft et al.', + }, + { + date: '2021/04/18', + title: 'Environmental fate and impacts of microplastics in aquatic ecosystems: a review', + link: 'https://pubs.rsc.org/en/content/articlehtml/2021/ra/d1ra00880c', + author: 'Du et al.', + }, + { + date: '2021/05/06', + title: 'Blockchain technologies to address smart city and society challenges', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0747563221001771', + author: 'Mora et al.', + }, + { + date: '2021/05/17', + title: 'Waste detection in Pomerania: Non-profit project for detecting waste in environment', + link: 'https://arxiv.org/pdf/2105.06808.pdf', + author: 'Majchrowska et al.', + }, + { + date: '2021/05/17', + title: 'This city is not a bin: Crowdmapping the distribution of urban litter', + link: 'https://github.com/andrea-ballatore/litter-dynamics/blob/885de9c61d0b669d007ad871c8494851ce43da9a/publications/ballatore_et_al-2021-city_not_a_bin_crowdmapping.pdf', + author: 'Ballatore et al.', + }, + { + date: '2021/08/23', + title: 'Using citizen science data to monitor the Sustainable Development Goals: a bottom-up analysis', + link: 'https://link.springer.com/article/10.1007/s11625-021-01001-1', + author: 'Ballerini & Bergh', + }, + { + date: '2021/09/30', + title: 'Is Downloading this App Consistent with my Values?', + link: 'https://arxiv.org/pdf/2106.12458.pdf', + author: 'Carter, S.', + }, + { + date: '2021/10/21', + title: 'From City to Sea: Integrated Management of Litter and Plastics and Their Effects on Waterways - A Guide for Municipalities', + link: 'https://openknowledge.worldbank.org/handle/10986/36523', + author: 'World Bank', + }, + { + date: '2021/10/27', + title: 'A Systematic Literature Review of Blockchain Technology for Smart Villages', + link: 'https://link.springer.com/article/10.1007/s11831-021-09659-7', + author: 'Kaur & Parashar', + }, + { + date: '2021/11/02', + title: 'Environmental Governance. In: Handbook of Environmental Sociology. Handbooks of Sociology and Social Research.', + link: 'https://link.springer.com/chapter/10.1007/978-3-030-77712-8_16', + author: 'Fisher et al.', + }, + { + date: '2021/11/05', + title: 'Recycling Waste Classification Using Vision Transformer on Portable Device', + link: 'https://www.mdpi.com/2071-1050/13/21/11572', + author: 'Huang et al.', + }, + { + date: '2021/11/23', + title: 'Litter origins, accumulation rates, and hierarchical composition on urban roadsides of the Inland Empire, California', + link: 'https://iopscience.iop.org/article/10.1088/1748-9326/ac3c6a', + author: 'W. Cowger et al.', + }, + { + date: '2021/12/13', + title: 'Citizen science at public libraries: Data on librarians and users perceptions of participating in a citizen science project in Catalunya, Spain', + link: 'https://www.sciencedirect.com/science/article/pii/S2352340921009884', + author: 'Cigarini et al', + }, + { + date: '2022/01/20', + title: 'Real-Time Litter Detection System for Moving Vehicles Using YOLO', + link: 'https://ieeexplore.ieee.org/document/9716512', + author: 'Amrutha et al', + }, + { + date: '2022/02/01', + title: 'Deep learning-based waste detection in natural and urban environments', + link: 'https://www.sciencedirect.com/science/article/pii/S0956053X21006474', + author: 'Majchrowskaa et al', + }, + { + date: '2022/02/24', + title: 'Image Classification Approaches for Segregation of Plastic Waste Based on Resin Identification Code', + link: 'https://link.springer.com/article/10.1007/s41403-022-00324-4', + author: 'Agarwal et al', + }, + { + date: '2022/02/24', + title: 'Toward smarter management and recovery of municipal solid waste: A critical review on deep learning approaches', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0959652622005807', + author: 'Kunsen et al', + }, + { + date: '2022/03/31', + title: 'Retraining of object detectors to become suitable for trash detection in the context of autonomous driving', + link: 'https://www.researchgate.net/profile/Ishan-Srivastava-8/publication/360688760_Object_detection_in_self_driving_cars_using_YOLOv5/links/6285697c50c4566fc2744ac0/Object-detection-in-self-driving-cars-using-YOLOv5.pdf', + author: 'Srivastava, I', + }, + { + date: '2022/04/26', + title: 'Beach beauty in Bengal: Perception of scenery and its implications for coastal management in Purba Medinipur district, eastern India', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0308597X22000811', + author: 'Chatterjee et al', + }, + { + date: '2022/04/26', + title: 'Application of blockchain technology for geospatial data protection and management', + link: 'http://zgt.com.ua/en/%D0%B7%D0%B0%D1%81%D1%82%D0%BE%D1%81%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D1%96%D1%97-blockchain-%D0%B4%D0%BB%D1%8F-%D0%B7%D0%B0%D1%85%D0%B8%D1%81%D1%82/', + author: 'Chetverikov, B & Kilaru, V', + }, + { + date: '2022/06/11', + title: 'Towards geospatial blockchain: A review of research on blockchain technology applied to geospatial data', + link: 'https://agile-giss.copernicus.org/articles/3/71/2022/agile-giss-3-71-2022.pdf', + author: 'Zhao et al', + }, + { + date: '2022/07/01', + title: 'Determinants of Household Waste Disposal Practices and Implications for Practical Community Interventions: Lessons from Lilongwe', + link: 'https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4151604', + author: 'Kalonde et al', + }, + { + date: '2022/07/29', + title: 'Plastic waste mapping and monitoring using geospatial approaches', + link: 'https://iopscience.iop.org/article/10.1088/1755-1315/1064/1/012008', + author: 'Zulkifli et al', + }, + { + date: '2022/07/29', + title: 'Smart waste segmentation deep learning based approach', + link: 'http://dspace.univ-tebessa.dz:8080/jspui/bitstream/123456789/4951/1/Achi%20Belgacem%20Aimen%20pfe_finale.pdf', + author: 'Belgacem, A', + }, + { + date: '2022/10/15', + title: 'Role of Citizen Scientists in Environmental Plastic Litter Research—A Systematic Review', + link: 'https://www.proquest.com/openview/aa8927ea09166e0b8af056edc05e6b19/1?pq-origsite=gscholar&cbl=2032327', + author: 'Cristina et al', + }, + { + date: '2022/11/22', + title: 'The Sharing Green Economy: Sharing What’s Possible with New Labor Economics ', + link: 'https://www.amazon.com/dp/B0BN6W4W15', + author: 'Mike Duwe', + }, + { + date: '2022/11/25', + title: 'Waste management: A comprehensive state of the art about the rise of blockchain technology', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0166361522002081', + author: 'Baralla et al', + }, + { + date: '2023/01/17', + title: 'Smardy: Zero-Trust FAIR Marketplace for Research Data', + link: 'https://ieeexplore.ieee.org/abstract/document/10020710', + author: 'Ion-Dorinel et al', + }, + { + date: '2023/02/24', + title: 'Monitoring contaminants of emerging concern in aquatic systems through the lens of citizen science', + link: 'https://www.sciencedirect.com/science/article/pii/S0048969723011439?ref=pdf_download&fr=RR-2&rr=7c4c1b55da651c89', + author: 'Raman et al', + }, + { + date: '2023/03/01', + title: 'Applications of convolutional neural networks for intelligent waste identification and recycling: A review', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0921344922006450', + author: 'Wu et al', + }, + { + date: '2023/03/07', + title: 'Determinants of household waste disposal practices and implications for practical community interventions: lessons from Lilongwe', + link: 'https://iopscience.iop.org/article/10.1088/2634-4505/acbcec/meta', + author: 'Kalonde et al', + }, + { + date: '2023/04/12', + title: 'Understanding GIS through Sustainable Development Goals', + link: 'https://www.taylorfrancis.com/books/mono/10.1201/9781003220510/understanding-gis-sustainable-development-goals-paul-holloway', + author: 'Holloway, P.', + }, + { + date: '2023/04/27', + title: 'INTERACT Pocket guide on how to reduce plastic consumption and pollution', + link: 'https://eu-interact.org/app/uploads/2023/05/D2.11.pdf', + author: 'Arndal et al', + }, + { + date: '2023/04/27', + title: + 'Evaluation of a smartphone-based methodology that integrates\n' + + 'long-term tracking of mobility, place experiences, heart rate\n' + + 'variability, and subjective well-being', + link: 'https://www.cell.com/heliyon/pdf/S2405-8440(23)02958-4.pdf', + author: 'Giusti et al', + }, + { + date: '2023/05/01', + title: 'Waste classification using vision transformer based on multilayer hybrid convolution neural network', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S2212095523000779', + author: 'Alrayes et al', + }, + { + date: '2023/05/25', + title: 'Optimized Custom Dataset for Efficient Detection of Underwater Trash', + link: 'https://arxiv.org/pdf/2305.16460.pdf', + author: 'Walia et al', + }, + { + date: '2023/05/29', + title: 'A methodology for quantifying and characterizing litter from trash capture devices (TCDs) to measure impact and inform upstream solutions', + link: 'https://www.facetsjournal.com/doi/full/10.1139/facets-2022-0034', + author: 'Sherlock et al', + }, + { + date: '2023/07/01', + title: 'Study on the real-time object detection approach for end-of-life battery-powered electronics in the waste of electrical and electronic equipment recycling process', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0956053X23003355', + author: 'Yang et al', + }, + { + date: '2023/08/16', + title: 'Mapping Waste Piles in an Urban Environment Using Ground Surveys, Manual Digitization of Drone Imagery, and Object Based Image Classification Approach', + link: 'https://assets.researchsquare.com/files/rs-3244445/v1/ae8bcfa1-65c2-4ca1-ab43-8216902c2b0b.pdf?c=1692214271', + author: 'Kalonde et al', + }, + { + date: '2023/08/16', + title: 'The Privacy-Value-App Relationship and the Value-Centered Privacy Assistant', + link: 'https://arxiv.org/pdf/2308.05700.pdf', + author: 'Carter et al', + }, + { + date: '2023/08/18', + title: 'Centralized road to a decentralized circular plastics economy', + link: 'https://dutchblockchaincoalition.org/assets/images/default/Msc_Thesis_NinaHuijberts.pdf', + author: 'Huijberts, N.', + }, + { + date: '2023/08/23', + title: 'A survey on bias in machine learning research', + link: 'https://arxiv.org/pdf/2308.11254.pdf', + author: 'Mikolajczyk-Bare & Grochowski', + }, + { + date: '2023/08/31', + title: 'Deep learning-based object detection for smart solid waste management system', + link: 'https://www.peertechzpublications.org/articles/AEST-7-170.pdf', + author: 'Desta et al', + }, + { + date: '2023/09/01', + title: 'Machine Learning-Based Garbage Detection and 3D Spatial Localization for Intelligent Robotic Grasp', + link: 'https://www.mdpi.com/2076-3417/13/18/10018', + author: 'Zhenwei et al', + }, + { + date: '2023/09/12', + title: 'Do We Consume a Lot? Citizen Science Activity for a Circular Economy of Single-Use Plastics in the European Union and North America', + link: 'https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4569668', + author: 'Salas et al', + }, + { + date: '2023/09/23', + title: 'Outdoor Trash Detection in Natural Environment Using a Deep Learning Model', + link: 'https://ieeexplore.ieee.org/abstract/document/10244010', + author: 'Das et al', + }, + { + date: '2023/09/29', + title: 'Trash AI: A Web GUI for Serverless Computer Vision Analysis of Images of Trash', + link: 'https://joss.theoj.org/papers/10.21105/joss.05136.pdf', + author: 'Cowger et al', + }, + { + date: '2023/11/16', + title: 'Public geography and citizen science: participatory practices for action research', + link: 'https://rosa.uniroma1.it/rosa02/annali_memotef/article/view/1538', + author: 'Capinera, C.', + }, + { + date: '2024/01/15', + title: 'German artificial intelligence (AI) technologies in waste management industry that can be implemented in Iran', + link: 'https://d1wqtxts1xzle7.cloudfront.net/115878636/Milad_Shokrollahi_Paper_92103552_-libre.pdf?1718099227=&response-content-disposition=inline%3B+filename%3DGerman_artificial_intelligence_AI_techn.pdf&Expires=1727174926&Signature=QqRyD8qAGQuQFsAJb0LYB21c18TpbmIz21p4fHMADTWxZOxbIpObVinLLdzFVWbe~mNiklw~M8Do4yn51ODUIG5QuOlHjfnSIxQK7Fxx1TY1s8xEp-hRDgM4K32XTxI-QymY1nrIBy7mhvYcXzu4x~c6S4AVXPUIS1zf-YNdNyAd7mtKKyGQxpE0R5RZghIxNtQHt1isrGT8iDqIJd0~804OgMG0P3SjM-cwIaQS1qKA7Nwjo6SUzlKrzZLOCVNZ~qLUCQWxj5MkYdo9QUijzaGeOlzAVqjLwexOY9RqjrFQu5Adbt~B8UPSW3xTmCPh1Ssd2Y6Y0cUkkuZ169d0Nw__&Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA', + author: 'Shokrollahi, M.', + }, + { + date: '2024/01/26', + title: 'pLitterStreet: Street Level Plastic Litter Detection and Mapping', + link: 'https://arxiv.org/abs/2401.14719', + author: 'Reddy et al', + }, + { + date: '2024/02/01', + title: 'Hierarchical waste detection with weakly supervised segmentation in images from recycling plants', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0952197623017268', + author: 'Yudin et al', + }, + { + date: '2024/02/28', + title: 'Optical Detection of Plastic Waste Through Computer Vision', + link: 'https://www.sciencedirect.com/science/article/pii/S2667305324000176', + author: 'Shukratov et al', + }, + { + date: '2024/03/01', + title: 'GENII: A graph neural network-based model for citywide litter prediction leveraging crowdsensing data', + link: 'https://www.sciencedirect.com/science/article/abs/pii/S0957417423020675', + author: 'Wang et al', + }, + { + date: '2024/03/02', + title: 'Application Research of Waterborne Plastic Waste Recycling Device Based on Green Design Principles ', + link: 'https://ebooks.iospress.nl/doi/10.3233/FAIA231470', + author: 'Zheng & Biao', + }, + { + date: '2024/03/19', + title: 'AI-enhanced Collective Intelligence: The State of the Art and Prospects', + link: 'https://arxiv.org/pdf/2403.10433.pdf', + author: 'Cui & Yasseri', + }, + { + date: '2024/04/24', + title: 'Machine Vision for Solid Waste Detection', + link: 'https://link.springer.com/chapter/10.1007/978-3-031-59531-8_12', + author: 'Pimenov et al', + }, + { + date: '2024/04/25', + title: 'A Review on Open Data Storage and Retrieval Techniques in Blockchain-based Applications', + link: 'https://ieeexplore.ieee.org/abstract/document/10533356', + author: 'Fateminasab et al', + }, + { + date: '2024/04/30', + title: 'Identifying E-Governance Approaches And Their Potential To Support Progress Toward The EU Green Deal', + link: 'https://edepot.wur.nl/659247', + author: 'Kogut et al', + }, + { + date: '2024/05/07', + title: 'Open Data Sources for Post-Consumer Plastic Sorting: What We Have and What We Still Need', + link: 'https://www.sciencedirect.com/science/article/pii/S2212827124001847', + author: 'Basedow et al', + }, + { + date: '2024/06/08', + title: 'Deep Learning in Waste Management: A Brief Survey', + link: 'https://www.preprints.org/manuscript/202407.0637/v1', + author: 'Kunwar et al', + }, + { + date: '2024/06/10', + title: 'The use of citizen science data for biodiversity monitoring and informing the GBF indicators', + link: 'https://pure.iiasa.ac.at/id/eprint/19822/1/GBF%20ppt%20-%20Fraisl%20v0.pdf', + author: 'Fraisl, D', + }, + { + date: '2024/06/12', + title: 'Design of an autonomous litter detection and collection system for Icelandic beaches', + link: 'https://skemman.is/handle/1946/47664', + author: 'Frey René', + }, + { + date: '2024/06/28', + title: 'Quantification of litter in cities using a smartphone application and citizen science in conjunction with deep learning-based image processing', + link: 'https://www.sciencedirect.com/science/article/pii/S0956053X24003817', + author: 'Kako et al', + }, + { + date: '2024/07/01', + title: 'Classification of Urban Waste Disposed Outside of Containers. Applying Image Classification into Lisbon’s Waste Management', + link: 'https://run.unl.pt/bitstream/10362/175192/1/TCDMAA2615.pdf', + author: 'Fernandes H', + }, + { + date: '2024/08/18', + title: 'Enhancing Μaritime Lοgistics with Blοckchain Τechnοlοgy : Applicatiοn tο secure and trace dangerοus gοοds in smart pοrts', + link: 'https://theses.hal.science/tel-04652638/', + author: 'Abdallah, R.', + }, + { + date: '2024/08/29', + title: 'A Deep Learning-Based Approach to Garbage Detection in urban centers', + link: 'https://eajse.tiu.edu.iq/index.php/eajse/article/view/25', + author: 'Arif et al', + }, + { + date: '2024/09/14', + title: 'Blockchain on Sustainable Environmental Measures: A Review', + link: 'https://www.mdpi.com/2813-5288/2/3/16', + author: 'Vladucu et al', + }, + { + date: '2024/09/20', + title: 'Uncollected Solid Waste Detection and Reporting Using Machine-learning and Geotagging', + link: 'https://papers.academic-conferences.org/index.php/ecie/article/view/2581', + author: 'Ndlovu et al', + }, + { + date: '2024/11/01', + title: 'Plastic Detectives Are Watching Us: Citizen Science Towards Alternative Single-Use Plastic Related Behavior', + link: 'https://scholar.google.com/scholar_url?url=https://www.preprints.org/manuscript/202411.0075/download/final_file&hl=en&sa=X&d=14689671757546275981&ei=vmwnZ_KHIv7Ey9YP__-v8AU&scisig=AFWwaeYdha0dy9GcYYDTUPI0EUKa&oi=scholaralrt&hist=D_BoqRYAAAAJ:9750119445415138579:AFWwaebzOqFUbhQ9j2dSBMJvVqHk&html=&pos=0&folt=kw', + author: 'Krawczyk et al', + }, + { + date: '2024/08/06', + title: 'Crypto-Spatial: A New Direction in Geospatial Data', + link: 'https://isprs-archives.copernicus.org/articles/XLVIII-5-2024/89/2024/isprs-archives-XLVIII-5-2024-89-2024.pdf', + author: 'Rawal et al', + }, + { + date: '2024/12/16', + title: 'Blockchain in Environmental Sustainability Measures: a Survey', + link: 'https://arxiv.org/pdf/2412.15261', + author: 'Vladucu et al', + }, + { + date: '2024/12/20', + title: 'Plastics in the city: spatial and temporal variation of urban litter in a coastal town of France', + link: 'https://link.springer.com/article/10.1007/s11356-024-35812-3', + author: 'Lavergne et al', + }, + { + date: '2025/01/23', + title: 'Development of Datasets to Detect and Classify the Waste by Using Deep Learning', + link: 'https://ieeexplore.ieee.org/abstract/document/11020299/', + author: 'Rangaiah et al', + }, + { + date: '2025/02/18', + title: 'A novel blockchain-based clustering model for linked open data storage and retrieval', + link: 'https://www.nature.com/articles/s41598-024-81915-9', + author: 'Fateminasab et al', + }, + { + date: '2025/02/19', + title: 'Mapping Technology Solutions with Social Impact in Europe', + link: 'https://link.springer.com/chapter/10.1007/978-3-031-72494-7_25#:~:text=Mapping%20TSSI%20across%20the%2027,a%20more%20sustainable%2C%20inclusive%20world.', + author: 'Leitão et al', + }, + { + date: '2025/06/09', + title: 'Identification of construction and demolition waste: Leveraging deep learning and open-source imagery for advanced monitoring in developing economies', + link: 'https://www.researchgate.net/profile/Anjali-G-3/publication/392654486_Identification_of_construction_and_demolition_waste_Leveraging_deep_learning_and_open-source_imagery_for_advanced_monitoring_in_developing_economies/links/684bf578131a7f2849f149eb/Identification-of-construction-and-demolition-waste-Leveraging-deep-learning-and-open-source-imagery-for-advanced-monitoring-in-developing-economies.pdf', + author: 'HaitherAli et al', + }, + { + date: '2025/08/12', + title: 'Microplastics and plant health: a comprehensive review of sources, distribution, toxicity, and remediation', + link: 'https://www.nature.com/articles/s44454-025-00007-z', + author: 'Chaudhary et al', + }, + { + date: '2025/09/02', + title: 'Vision-Based Plastic Identification: A Comprehensive Survey on the Deep Learning Methods', + link: 'https://books.google.ie/books?hl=en&lr=lang_en&id=jEqCEQAAQBAJ&oi=fnd&pg=PA11&dq=openlittermap&ots=fvEefSh2g1&sig=730tV1UJEZtdw8HuS-zBRaDRWok&redir_esc=y#v=onepage&q=openlittermap&f=false', + author: 'Shareena & Padmavathi', + }, + { + date: '2025/10/01', + title: 'ENVIRONMENTAL MONITORING AND ASSESSMENT: A REVIEW OF EVOLVING PARADIGMS, TECHNOLOGICAL FRONTIERS METHODOLOGIES, AND FUTURE DIRECTIONS', + link: 'https://mediterraneanpublications.com/mejaimr/article/view/946', + author: 'Dahiru et al', + }, + { + date: '2025/11/15', + title: 'Emerging AI Solutions for Hazardous PET Waste in Marine Environments: A Review of Underexplored Paradigms', + link: 'https://eartharxiv.org/repository/view/10737/', + author: 'Hossam et al', + }, + { + date: '2025/11/24', + title: 'StreetView-Waste: A Multi-Task Dataset for Urban Waste Management', + link: 'https://arxiv.org/pdf/2511.16440', + author: 'Paulo et al', + }, +]; diff --git a/resources/js/views/Account/CreateAccount.vue b/resources/js/views/Account/CreateAccount.vue new file mode 100644 index 000000000..7bc21a94c --- /dev/null +++ b/resources/js/views/Account/CreateAccount.vue @@ -0,0 +1,525 @@ + + + + + diff --git a/resources/js/views/Achievements/Achievements.vue b/resources/js/views/Achievements/Achievements.vue new file mode 100644 index 000000000..b822eac20 --- /dev/null +++ b/resources/js/views/Achievements/Achievements.vue @@ -0,0 +1,1347 @@ + + + + + diff --git a/resources/js/views/Admin/Redis.vue b/resources/js/views/Admin/Redis.vue new file mode 100644 index 000000000..c03648795 --- /dev/null +++ b/resources/js/views/Admin/Redis.vue @@ -0,0 +1,468 @@ + + + + + diff --git a/resources/js/views/General/.DS_Store b/resources/js/views/General/.DS_Store new file mode 100644 index 000000000..345cd126a Binary files /dev/null and b/resources/js/views/General/.DS_Store differ diff --git a/resources/js/views/General/About.vue b/resources/js/views/General/About.vue new file mode 100644 index 000000000..6356f03fd --- /dev/null +++ b/resources/js/views/General/About.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/js/views/General/Changelog.vue b/resources/js/views/General/Changelog.vue new file mode 100644 index 000000000..6584a404e --- /dev/null +++ b/resources/js/views/General/Changelog.vue @@ -0,0 +1,521 @@ + + + + + diff --git a/resources/js/views/General/History.vue b/resources/js/views/General/History.vue new file mode 100644 index 000000000..79662e2b8 --- /dev/null +++ b/resources/js/views/General/History.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/resources/js/views/General/Leaderboards/Leaderboard.vue b/resources/js/views/General/Leaderboards/Leaderboard.vue new file mode 100644 index 000000000..af846ef16 --- /dev/null +++ b/resources/js/views/General/Leaderboards/Leaderboard.vue @@ -0,0 +1,75 @@ + + + diff --git a/resources/js/views/General/Leaderboards/components/LeaderboardFilters.vue b/resources/js/views/General/Leaderboards/components/LeaderboardFilters.vue new file mode 100644 index 000000000..8d1072a50 --- /dev/null +++ b/resources/js/views/General/Leaderboards/components/LeaderboardFilters.vue @@ -0,0 +1,113 @@ + + + diff --git a/resources/js/views/General/Leaderboards/components/LeaderboardList.vue b/resources/js/views/General/Leaderboards/components/LeaderboardList.vue new file mode 100644 index 000000000..96fd06377 --- /dev/null +++ b/resources/js/views/General/Leaderboards/components/LeaderboardList.vue @@ -0,0 +1,109 @@ + + + diff --git a/resources/js/views/General/Privacy.vue b/resources/js/views/General/Privacy.vue new file mode 100644 index 000000000..8f9d2585b --- /dev/null +++ b/resources/js/views/General/Privacy.vue @@ -0,0 +1,194 @@ + + + diff --git a/resources/js/views/General/Tagging/components/AddTagsHeader.vue b/resources/js/views/General/Tagging/components/AddTagsHeader.vue new file mode 100644 index 000000000..eedd730b3 --- /dev/null +++ b/resources/js/views/General/Tagging/components/AddTagsHeader.vue @@ -0,0 +1,411 @@ + + + + + diff --git a/resources/js/views/General/Tagging/components/CreateTag.vue b/resources/js/views/General/Tagging/components/CreateTag.vue new file mode 100644 index 000000000..1ac8d2be9 --- /dev/null +++ b/resources/js/views/General/Tagging/components/CreateTag.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/resources/js/views/General/Tagging/components/ImageWithSkeleton.vue b/resources/js/views/General/Tagging/components/ImageWithSkeleton.vue new file mode 100644 index 000000000..9d1385f80 --- /dev/null +++ b/resources/js/views/General/Tagging/components/ImageWithSkeleton.vue @@ -0,0 +1,80 @@ + + + diff --git a/resources/js/views/General/Tagging/components/PreviousNextButtons.vue b/resources/js/views/General/Tagging/components/PreviousNextButtons.vue new file mode 100644 index 000000000..9ae6cf6be --- /dev/null +++ b/resources/js/views/General/Tagging/components/PreviousNextButtons.vue @@ -0,0 +1,88 @@ + + + diff --git a/resources/js/views/General/Tagging/components/QuantityPicker.vue b/resources/js/views/General/Tagging/components/QuantityPicker.vue new file mode 100644 index 000000000..193a5b215 --- /dev/null +++ b/resources/js/views/General/Tagging/components/QuantityPicker.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/resources/js/views/General/Tagging/components/SelectTag.vue b/resources/js/views/General/Tagging/components/SelectTag.vue new file mode 100644 index 000000000..cb1709fba --- /dev/null +++ b/resources/js/views/General/Tagging/components/SelectTag.vue @@ -0,0 +1,245 @@ + + + diff --git a/resources/js/views/General/Tagging/components/ToggleSwitch.vue b/resources/js/views/General/Tagging/components/ToggleSwitch.vue new file mode 100644 index 000000000..083a50767 --- /dev/null +++ b/resources/js/views/General/Tagging/components/ToggleSwitch.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/resources/js/views/General/Tagging/v2/AddTags.vue b/resources/js/views/General/Tagging/v2/AddTags.vue new file mode 100644 index 000000000..5a864a11e --- /dev/null +++ b/resources/js/views/General/Tagging/v2/AddTags.vue @@ -0,0 +1,474 @@ + + + diff --git a/resources/js/views/General/Tagging/v2/components/ActiveTagsList.vue b/resources/js/views/General/Tagging/v2/components/ActiveTagsList.vue new file mode 100644 index 000000000..1c5fe7be0 --- /dev/null +++ b/resources/js/views/General/Tagging/v2/components/ActiveTagsList.vue @@ -0,0 +1,67 @@ + + + diff --git a/resources/js/views/General/Tagging/v2/components/PhotoViewer.vue b/resources/js/views/General/Tagging/v2/components/PhotoViewer.vue new file mode 100644 index 000000000..ee3070017 --- /dev/null +++ b/resources/js/views/General/Tagging/v2/components/PhotoViewer.vue @@ -0,0 +1,96 @@ + + + diff --git a/resources/js/views/General/Tagging/v2/components/TagCard.vue b/resources/js/views/General/Tagging/v2/components/TagCard.vue new file mode 100644 index 000000000..093933c26 --- /dev/null +++ b/resources/js/views/General/Tagging/v2/components/TagCard.vue @@ -0,0 +1,502 @@ + + + + + diff --git a/resources/js/views/General/Tagging/v2/components/TaggingActions.vue b/resources/js/views/General/Tagging/v2/components/TaggingActions.vue new file mode 100644 index 000000000..72ef8af3e --- /dev/null +++ b/resources/js/views/General/Tagging/v2/components/TaggingActions.vue @@ -0,0 +1,84 @@ + + + diff --git a/resources/js/views/General/Tagging/v2/components/TaggingHeader.vue b/resources/js/views/General/Tagging/v2/components/TaggingHeader.vue new file mode 100644 index 000000000..dea120d25 --- /dev/null +++ b/resources/js/views/General/Tagging/v2/components/TaggingHeader.vue @@ -0,0 +1,207 @@ + + + diff --git a/resources/js/views/General/Tagging/v2/components/UnifiedTagSearch.vue b/resources/js/views/General/Tagging/v2/components/UnifiedTagSearch.vue new file mode 100644 index 000000000..f155c3036 --- /dev/null +++ b/resources/js/views/General/Tagging/v2/components/UnifiedTagSearch.vue @@ -0,0 +1,226 @@ + + + diff --git a/resources/js/views/General/Terms.vue b/resources/js/views/General/Terms.vue new file mode 100644 index 000000000..e69c97799 --- /dev/null +++ b/resources/js/views/General/Terms.vue @@ -0,0 +1,283 @@ + + + diff --git a/resources/js/views/General/Updates/update1.vue b/resources/js/views/General/Updates/update1.vue new file mode 100644 index 000000000..9e8a73d55 --- /dev/null +++ b/resources/js/views/General/Updates/update1.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/resources/js/views/General/Updates/update10.vue b/resources/js/views/General/Updates/update10.vue new file mode 100644 index 000000000..f1c64e285 --- /dev/null +++ b/resources/js/views/General/Updates/update10.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/resources/js/views/General/Updates/update11.vue b/resources/js/views/General/Updates/update11.vue new file mode 100644 index 000000000..b3a4179bb --- /dev/null +++ b/resources/js/views/General/Updates/update11.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/resources/js/views/General/Updates/update12.vue b/resources/js/views/General/Updates/update12.vue new file mode 100644 index 000000000..8090f4317 --- /dev/null +++ b/resources/js/views/General/Updates/update12.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/resources/js/views/General/Updates/update13.vue b/resources/js/views/General/Updates/update13.vue new file mode 100644 index 000000000..4ff23ab22 --- /dev/null +++ b/resources/js/views/General/Updates/update13.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/resources/js/views/General/Updates/update14.vue b/resources/js/views/General/Updates/update14.vue new file mode 100644 index 000000000..c262b9e50 --- /dev/null +++ b/resources/js/views/General/Updates/update14.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/resources/js/views/General/Updates/update15.vue b/resources/js/views/General/Updates/update15.vue new file mode 100644 index 000000000..22e85b779 --- /dev/null +++ b/resources/js/views/General/Updates/update15.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/resources/js/views/General/Updates/update16.vue b/resources/js/views/General/Updates/update16.vue new file mode 100644 index 000000000..e400dd13f --- /dev/null +++ b/resources/js/views/General/Updates/update16.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/resources/js/views/General/Updates/update17.vue b/resources/js/views/General/Updates/update17.vue new file mode 100644 index 000000000..089b4ab65 --- /dev/null +++ b/resources/js/views/General/Updates/update17.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/resources/js/views/General/Updates/update18.vue b/resources/js/views/General/Updates/update18.vue new file mode 100644 index 000000000..038e27d19 --- /dev/null +++ b/resources/js/views/General/Updates/update18.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/resources/js/views/General/Updates/update19.vue b/resources/js/views/General/Updates/update19.vue new file mode 100644 index 000000000..a29ddf305 --- /dev/null +++ b/resources/js/views/General/Updates/update19.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/resources/js/views/General/Updates/update2.vue b/resources/js/views/General/Updates/update2.vue new file mode 100644 index 000000000..a2db6c29f --- /dev/null +++ b/resources/js/views/General/Updates/update2.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/resources/js/views/General/Updates/update20.vue b/resources/js/views/General/Updates/update20.vue new file mode 100644 index 000000000..9e49db5f2 --- /dev/null +++ b/resources/js/views/General/Updates/update20.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/resources/js/views/General/Updates/update21.vue b/resources/js/views/General/Updates/update21.vue new file mode 100644 index 000000000..3b1ea1077 --- /dev/null +++ b/resources/js/views/General/Updates/update21.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/resources/js/views/General/Updates/update22.vue b/resources/js/views/General/Updates/update22.vue new file mode 100644 index 000000000..5fe5efaa5 --- /dev/null +++ b/resources/js/views/General/Updates/update22.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/resources/js/views/General/Updates/update23.vue b/resources/js/views/General/Updates/update23.vue new file mode 100644 index 000000000..f729a01a2 --- /dev/null +++ b/resources/js/views/General/Updates/update23.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/resources/js/views/General/Updates/update24.vue b/resources/js/views/General/Updates/update24.vue new file mode 100644 index 000000000..4b22ca7af --- /dev/null +++ b/resources/js/views/General/Updates/update24.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/resources/js/views/General/Updates/update25.vue b/resources/js/views/General/Updates/update25.vue new file mode 100644 index 000000000..a7206ea4e --- /dev/null +++ b/resources/js/views/General/Updates/update25.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/resources/js/views/General/Updates/update26.vue b/resources/js/views/General/Updates/update26.vue new file mode 100644 index 000000000..a7206ea4e --- /dev/null +++ b/resources/js/views/General/Updates/update26.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/resources/js/views/General/Updates/update3.vue b/resources/js/views/General/Updates/update3.vue new file mode 100644 index 000000000..4768a847c --- /dev/null +++ b/resources/js/views/General/Updates/update3.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/resources/js/views/General/Updates/update4.vue b/resources/js/views/General/Updates/update4.vue new file mode 100644 index 000000000..436a271cd --- /dev/null +++ b/resources/js/views/General/Updates/update4.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/resources/js/views/General/Updates/update5.vue b/resources/js/views/General/Updates/update5.vue new file mode 100644 index 000000000..4d9c1dceb --- /dev/null +++ b/resources/js/views/General/Updates/update5.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/resources/js/views/General/Updates/update6.vue b/resources/js/views/General/Updates/update6.vue new file mode 100644 index 000000000..319b6b256 --- /dev/null +++ b/resources/js/views/General/Updates/update6.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/resources/js/views/General/Updates/update7.vue b/resources/js/views/General/Updates/update7.vue new file mode 100644 index 000000000..0f9171e5a --- /dev/null +++ b/resources/js/views/General/Updates/update7.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/resources/js/views/General/Updates/update8.vue b/resources/js/views/General/Updates/update8.vue new file mode 100644 index 000000000..e183a784a --- /dev/null +++ b/resources/js/views/General/Updates/update8.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/resources/js/views/General/Updates/update9.vue b/resources/js/views/General/Updates/update9.vue new file mode 100644 index 000000000..4714dc58d --- /dev/null +++ b/resources/js/views/General/Updates/update9.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/resources/js/views/Locations/Countries.vue b/resources/js/views/Locations/Countries.vue index d8fcf7c78..1cba3eaf9 100644 --- a/resources/js/views/Locations/Countries.vue +++ b/resources/js/views/Locations/Countries.vue @@ -1,46 +1,29 @@ + + - + diff --git a/resources/js/views/Locations/SortLocations.vue b/resources/js/views/Locations/SortLocations.vue deleted file mode 100644 index 9ba3c2b15..000000000 --- a/resources/js/views/Locations/SortLocations.vue +++ /dev/null @@ -1,285 +0,0 @@ - - - - - diff --git a/resources/js/views/Locations/World.vue b/resources/js/views/Locations/World.vue new file mode 100644 index 000000000..e652fd3fe --- /dev/null +++ b/resources/js/views/Locations/World.vue @@ -0,0 +1,127 @@ + + + diff --git a/resources/js/views/Maps/.DS_Store b/resources/js/views/Maps/.DS_Store new file mode 100644 index 000000000..6d866df1d Binary files /dev/null and b/resources/js/views/Maps/.DS_Store differ diff --git a/resources/js/views/Maps/GlobalMap.vue b/resources/js/views/Maps/GlobalMap.vue new file mode 100644 index 000000000..182922fea --- /dev/null +++ b/resources/js/views/Maps/GlobalMap.vue @@ -0,0 +1,406 @@ + + + + + diff --git a/resources/js/views/Maps/components/MapDrawer.vue b/resources/js/views/Maps/components/MapDrawer.vue new file mode 100644 index 000000000..1d6f3552b --- /dev/null +++ b/resources/js/views/Maps/components/MapDrawer.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/resources/js/views/Maps/components/PaginationControls.vue b/resources/js/views/Maps/components/PaginationControls.vue new file mode 100644 index 000000000..b7cab7091 --- /dev/null +++ b/resources/js/views/Maps/components/PaginationControls.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/resources/js/views/Maps/components/tabs/MapDrawerDetailsTab.vue b/resources/js/views/Maps/components/tabs/MapDrawerDetailsTab.vue new file mode 100644 index 000000000..362f23049 --- /dev/null +++ b/resources/js/views/Maps/components/tabs/MapDrawerDetailsTab.vue @@ -0,0 +1,536 @@ + + + + + diff --git a/resources/js/views/Maps/components/tabs/MapDrawerExportTab.vue b/resources/js/views/Maps/components/tabs/MapDrawerExportTab.vue new file mode 100644 index 000000000..d1532843e --- /dev/null +++ b/resources/js/views/Maps/components/tabs/MapDrawerExportTab.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/resources/js/views/Maps/components/tabs/MapDrawerOverviewTab.vue b/resources/js/views/Maps/components/tabs/MapDrawerOverviewTab.vue new file mode 100644 index 000000000..808da31f3 --- /dev/null +++ b/resources/js/views/Maps/components/tabs/MapDrawerOverviewTab.vue @@ -0,0 +1,275 @@ + + + diff --git a/resources/js/views/Maps/helpers/Category.js b/resources/js/views/Maps/helpers/Category.js new file mode 100644 index 000000000..3cd333561 --- /dev/null +++ b/resources/js/views/Maps/helpers/Category.js @@ -0,0 +1,168 @@ +/** + * Category class for managing category colors and properties + */ +export class Category { + /** + * Static color mapping for all categories + * Using representative, realistic colors for each category + */ + static COLORS = { + // Primary categories + smoking: '#d4a574', // Cigarette filter yellowy-brown + food: '#ff6b35', // Warm orange-red (food packaging) + coffee: '#6f4e37', // Coffee brown + alcohol: '#f5a623', // Golden beer/whiskey + softdrinks: '#87ceeb', // Pale blue (like cola/pepsi branding) + sanitary: '#dc143c', // Crimson red (medical/sanitary) + coastal: '#006994', // Deep ocean blue + dumping: '#4a4a4a', // Dark gray (waste/garbage) + industrial: '#ff7f00', // Safety orange + brands: '#9b59b6', // Purple (corporate/branded) + dogshit: '#8b4513', // Dark brown + art: '#ff1493', // Deep pink/magenta (creative) + material: '#2ecc71', // Green (recycling) + other: '#95a5a6', // Neutral gray + automobile: '#2c3e50', // Dark blue-gray (asphalt/tires) + electronics: '#00bcd4', // Cyan (tech blue) + pets: '#ffa500', // Orange (pet toys/accessories) + stationery: '#3498db', // Bright blue (pen ink) + custom: '#7f8c8d', // Medium gray + + // Crowdsourced categories + fastfood: '#ff4757', // Red (McDonald's/KFC vibes) + bicycle: '#27ae60', // Green (eco-friendly transport) + + // Fallback + default: '#95a5a6', // Neutral gray + }; + + /** + * Get color for a category key + * @param {string} categoryKey - The category key + * @returns {string} Hex color code + */ + static getColor(categoryKey) { + if (!categoryKey) return this.COLORS.default; + + const normalizedKey = categoryKey.toLowerCase().replace(/[_\s]/g, ''); + return this.COLORS[normalizedKey] || this.COLORS.default; + } + + /** + * Get RGB values for a category (0-1 range for WebGL) + * @param {string} categoryKey - The category key + * @returns {Object} RGB object with r, g, b, a values (0-1 range) + */ + static getRGB(categoryKey) { + const hex = this.getColor(categoryKey); + return this.hexToRgb(hex); + } + + /** + * Convert hex color to RGB values (0-1 range) + * @param {string} hex - Hex color code + * @returns {Object} RGB object with r, g, b, a values + */ + static hexToRgb(hex) { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result + ? { + r: parseInt(result[1], 16) / 255, + g: parseInt(result[2], 16) / 255, + b: parseInt(result[3], 16) / 255, + a: 1, + } + : { + r: 0.42, // Default gray if parsing fails + g: 0.45, + b: 0.5, + a: 1, + }; + } + + /** + * Get all categories with their colors + * @returns {Array} Array of category objects with key and color + */ + static getAllCategories() { + return Object.entries(this.COLORS) + .filter(([key]) => key !== 'default') + .map(([key, color]) => ({ + key, + color, + rgb: this.hexToRgb(color), + })); + } + + /** + * Check if a category exists + * @param {string} categoryKey - The category key + * @returns {boolean} Whether the category exists + */ + static exists(categoryKey) { + if (!categoryKey) return false; + const normalizedKey = categoryKey.toLowerCase().replace(/[_\s]/g, ''); + return normalizedKey in this.COLORS; + } + + /** + * Get display name for a category + * @param {string} categoryKey - The category key + * @returns {string} Formatted display name + */ + static getDisplayName(categoryKey) { + if (!categoryKey) return 'Unknown'; + + // Special cases + const displayNames = { + softdrinks: 'Soft Drinks', + dogshit: 'Dog Waste', + fastfood: 'Fast Food', + electronics: 'Electronics', + automobile: 'Automobile', + stationery: 'Stationery', + }; + + const normalized = categoryKey.toLowerCase(); + if (displayNames[normalized]) { + return displayNames[normalized]; + } + + // Default: capitalize first letter + return categoryKey.charAt(0).toUpperCase() + categoryKey.slice(1).toLowerCase(); + } + + /** + * Get icon for a category (optional - for future use) + * @param {string} categoryKey - The category key + * @returns {string} Icon identifier or emoji + */ + static getIcon(categoryKey) { + const icons = { + smoking: '🚬', + food: '🍔', + coffee: '☕', + alcohol: '🍺', + softdrinks: '🥤', + sanitary: '🧻', + coastal: '🌊', + dumping: '🗑️', + industrial: '🏭', + brands: '™️', + dogshit: '💩', + art: '🎨', + material: '♻️', + other: '📦', + automobile: '🚗', + electronics: '📱', + pets: '🐾', + stationery: '✏️', + custom: '⚙️', + fastfood: '🍟', + bicycle: '🚲', + }; + + const normalized = categoryKey?.toLowerCase(); + return icons[normalized] || '🗑️'; + } +} diff --git a/resources/js/views/global/SmoothWheelZoom.js b/resources/js/views/Maps/helpers/SmoothWheelZoom.js similarity index 72% rename from resources/js/views/global/SmoothWheelZoom.js rename to resources/js/views/Maps/helpers/SmoothWheelZoom.js index e0bdf4d84..14e0ad36a 100644 --- a/resources/js/views/global/SmoothWheelZoom.js +++ b/resources/js/views/Maps/helpers/SmoothWheelZoom.js @@ -1,17 +1,11 @@ +import L from 'leaflet'; + L.Map.mergeOptions({ - // @section Mousewheel options - // @option smoothWheelZoom: Boolean|String = true - // Whether the map can be zoomed by using the mouse wheel. If passed `'center'`, - // it will zoom to the center of the view regardless of where the mouse was. smoothWheelZoom: true, - - // @option smoothWheelZoom: number = 1 - // setting zoom speed - smoothSensitivity: 2 + smoothSensitivity: 2, }); L.Map.SmoothWheelZoom = L.Handler.extend({ - addHooks: function () { L.DomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this); }, @@ -28,7 +22,7 @@ L.Map.SmoothWheelZoom = L.Handler.extend({ }, _onWheelStart: function (e) { - var map = this._map; + const map = this._map; this._isWheeling = true; this._wheelMousePosition = map.mouseEventToContainerPoint(e); this._centerPoint = map.getSize()._divideBy(2); @@ -49,9 +43,10 @@ L.Map.SmoothWheelZoom = L.Handler.extend({ }, _onWheeling: function (e) { - var map = this._map; + const map = this._map; - this._goalZoom = this._goalZoom + L.DomEvent.getWheelDelta(e) * 0.003 * map.options.smoothSensitivity; + this._goalZoom = + this._goalZoom + L.DomEvent.getWheelDelta(e) * 0.003 * map.options.smoothSensitivity; if (this._goalZoom < map.getMinZoom() || this._goalZoom > map.getMaxZoom()) { this._goalZoom = map._limitZoom(this._goalZoom); } @@ -63,29 +58,38 @@ L.Map.SmoothWheelZoom = L.Handler.extend({ L.DomEvent.stopPropagation(e); }, - _onWheelEnd: function (e) { + _onWheelEnd: function () { this._isWheeling = false; cancelAnimationFrame(this._zoomAnimationId); this._map._moveEnd(true); }, _updateWheelZoom: function () { - var map = this._map; + const map = this._map; - if ((!map.getCenter().equals(this._prevCenter)) || map.getZoom() != this._prevZoom) + if ( + !map.getCenter().equals(this._prevCenter) || + map.getZoom() !== this._prevZoom + ) { return; + } this._zoom = map.getZoom() + (this._goalZoom - map.getZoom()) * 0.3; + // round to 2 decimal places this._zoom = Math.floor(this._zoom * 100) / 100; - var delta = this._wheelMousePosition.subtract(this._centerPoint); - if (delta.x === 0 && delta.y === 0) + const delta = this._wheelMousePosition.subtract(this._centerPoint); + if (delta.x === 0 && delta.y === 0) { return; + } if (map.options.smoothWheelZoom === 'center') { this._center = this._startLatLng; } else { - this._center = map.unproject(map.project(this._wheelStartLatLng, this._zoom).subtract(delta), this._zoom); + this._center = map.unproject( + map.project(this._wheelStartLatLng, this._zoom).subtract(delta), + this._zoom + ); } if (!this._moved) { @@ -98,8 +102,7 @@ L.Map.SmoothWheelZoom = L.Handler.extend({ this._prevZoom = map.getZoom(); this._zoomAnimationId = requestAnimationFrame(this._updateWheelZoom.bind(this)); - } - + }, }); -L.Map.addInitHook('addHandler', 'smoothWheelZoom', L.Map.SmoothWheelZoom ); +L.Map.addInitHook('addHandler', 'smoothWheelZoom', L.Map.SmoothWheelZoom); diff --git a/resources/js/views/Maps/helpers/clustersHelper.js b/resources/js/views/Maps/helpers/clustersHelper.js new file mode 100644 index 000000000..2a4a97803 --- /dev/null +++ b/resources/js/views/Maps/helpers/clustersHelper.js @@ -0,0 +1,294 @@ +import L from 'leaflet'; +import { removeGlifyPoints } from './glifyHelpers.js'; +import { CLUSTER_ZOOM_THRESHOLD } from './constants.js'; +import { urlHelper } from './urlHelper.js'; + +// Cluster size constants +const MEDIUM_CLUSTER_SIZE = 100; +const LARGE_CLUSTER_SIZE = 1000; + +// Cache for marker icons to avoid recreation +const markerIconCache = { + verified: null, + unverified: null, + getVerifiedIcon() { + if (!this.verified) { + this.verified = L.divIcon({ + className: 'verified-marker', + html: '
', + iconSize: [8, 8], + iconAnchor: [4, 4], + }); + } + return this.verified; + }, + getUnverifiedIcon() { + if (!this.unverified) { + this.unverified = L.divIcon({ + className: 'unverified-marker', + html: '
', + iconSize: [8, 8], + iconAnchor: [4, 4], + }); + } + return this.unverified; + }, +}; + +export const clustersHelper = { + /** + * Create cluster icon for map markers with caching + */ + createClusterIcon: (feature, latLng) => { + // Check if this is an individual point (not a cluster) + if (!feature.properties.cluster) { + return feature.properties.verified === 2 + ? L.marker(latLng, { icon: markerIconCache.getVerifiedIcon() }) + : L.marker(latLng, { icon: markerIconCache.getUnverifiedIcon() }); + } + + // This is a cluster - use optimized cluster logic + const count = feature.properties.point_count; + const size = count < MEDIUM_CLUSTER_SIZE ? 'small' : count < LARGE_CLUSTER_SIZE ? 'medium' : 'large'; + + const icon = L.divIcon({ + html: `
${ + feature.properties.point_count_abbreviated + }
`, + className: 'marker-cluster-' + size, + iconSize: L.point(40, 40), + }); + + return L.marker(latLng, { icon }); + }, + + /** + * Handle each feature when adding to cluster layer + */ + onEachFeature: (feature, layer, mapInstance) => { + // Only add click handler for clusters (not individual points) + if (feature.properties && (feature.properties.cluster || feature.properties.point_count)) { + layer.on('click', () => { + const currentZoom = mapInstance.getZoom(); + // More reasonable zoom step for better UX + const targetZoom = Math.min(currentZoom + 1, CLUSTER_ZOOM_THRESHOLD); + + mapInstance.setView([feature.geometry.coordinates[1], feature.geometry.coordinates[0]], targetZoom, { + animate: true, + duration: 0.5, + }); + }); + } + }, + + /** + * Handle cluster view with abort support + */ + async handleClusterView({ + globalMapStore, + clustersStore, + clusters, + zoom, + bbox, + year, + points, + mapInstance, + abortSignal = null, + }) { + // Use the correct store name based on what's provided + const store = clustersStore || globalMapStore; + + // Remove any remaining glify points + if (points) { + removeGlifyPoints(points, mapInstance); + } + + // Clean up URL when zooming out + this.cleanupClustersURL(); + + try { + await store.GET_CLUSTERS({ + zoom, + bbox, + year, + signal: abortSignal, + }); + + // Check if request was aborted + if (abortSignal?.aborted) { + return null; + } + + clusters.clearLayers(); + const data = store.clustersGeojson || store.clusters; + if (data) { + clusters.addData(data); + } + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Error loading clusters:', error); + } + } + + return null; // No points in cluster view + }, + + /** + * Load cluster data with abort support + */ + async loadClusters({ clustersStore, globalMapStore, zoom, bbox = null, year = null, abortSignal = null }) { + const store = clustersStore || globalMapStore; + + try { + await store.GET_CLUSTERS({ + zoom, + bbox, + year, + signal: abortSignal, + }); + return store.clustersGeojson || store.clusters; + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Failed to load clusters:', error); + } + throw error; + } + }, + + /** + * Add clusters to map layer efficiently + */ + addClustersToMap(clusters, clustersData) { + if (clustersData && clustersData.features && clustersData.features.length > 0) { + // Use requestAnimationFrame for smoother rendering + requestAnimationFrame(() => { + clusters.clearLayers(); + clusters.addData(clustersData); + }); + } + }, + + /** + * Clear clusters from map + */ + clearClusters(clusters) { + if (clusters) { + clusters.clearLayers(); + } + }, + + /** + * Remove cluster-related URL parameters using centralized helper + */ + cleanupClustersURL() { + const url = new URL(window.location.href); + + // Remove points-specific filters when in cluster view + ['fromDate', 'toDate', 'username', 'photo', 'photoId', 'page'].forEach((param) => { + url.searchParams.delete(param); + }); + + urlHelper.stateManager.commitURL(url, true); // Replace state + }, + + /** + * Check if we should show clusters (below cluster zoom threshold) + */ + shouldShowClusters(zoom) { + return zoom < CLUSTER_ZOOM_THRESHOLD; + }, + + /** + * Get cluster data from store with fallback + */ + getClustersData(store) { + // Handle both possible property names + return store.clustersGeojson || store.clusters || null; + }, + + /** + * Check if zoom level should trigger cluster reload + */ + shouldReloadClusters(zoom, prevZoom) { + // Skip reload if just panning at very low zoom levels + if (zoom <= 5 && zoom === prevZoom) { + return false; + } + return true; + }, + + /** + * Handle transition from points to clusters view + */ + handlePointsToClusterTransition(clusters, points, mapInstance) { + // Remove any glify points with proper cleanup + if (points) { + removeGlifyPoints(points, mapInstance); + } + + // Clear and prepare clusters layer + clusters.clearLayers(); + + // Clean up URL + this.cleanupClustersURL(); + + return null; // Return null points + }, + + /** + * Handle transition from clusters to points view + */ + handleClusterToPointsTransition(clusters) { + // Clear clusters when switching to points view + if (clusters) { + clusters.clearLayers(); + } + }, + + /** + * Get initial cluster parameters from URL + */ + getClusterFiltersFromURL() { + return urlHelper.stateManager.getFiltersFromURL(); + }, + + /** + * Calculate optimal cluster radius based on zoom + */ + getClusterRadius(zoom) { + // Dynamic cluster radius based on zoom level + if (zoom <= 5) return 80; + if (zoom <= 10) return 60; + if (zoom <= 15) return 40; + return 20; + }, + + /** + * Preload adjacent zoom levels for smoother transitions + */ + async preloadAdjacentZoomLevels({ store, currentZoom, bbox, year }) { + const preloadZooms = []; + + // Preload one level up and down + if (currentZoom > 2) preloadZooms.push(currentZoom - 1); + if (currentZoom < CLUSTER_ZOOM_THRESHOLD - 1) preloadZooms.push(currentZoom + 1); + + // Use requestIdleCallback for low-priority preloading + for (const zoom of preloadZooms) { + if (window.requestIdleCallback) { + window.requestIdleCallback(() => { + this.loadClusters({ + clustersStore: store, + zoom, + bbox, + year, + }).catch(() => { + // Silently fail for preload requests + }); + }); + } + } + }, +}; + +export default clustersHelper; diff --git a/resources/js/constants/index.js b/resources/js/views/Maps/helpers/constants.js similarity index 100% rename from resources/js/constants/index.js rename to resources/js/views/Maps/helpers/constants.js diff --git a/resources/js/views/Maps/helpers/glifyHelpers.js b/resources/js/views/Maps/helpers/glifyHelpers.js new file mode 100644 index 000000000..fc14c42d2 --- /dev/null +++ b/resources/js/views/Maps/helpers/glifyHelpers.js @@ -0,0 +1,347 @@ +import glify from 'leaflet.glify'; +import { popupHelper } from './popup.js'; +import { Category } from './Category.js'; +import { urlHelper } from './urlHelper.js'; + +/** + * Glify Points Manager + * Manages WebGL-based point rendering with proper cleanup and memory management + */ +class GlifyPointsManager { + constructor() { + this.currentInstance = null; + this.currentData = null; + this.currentMap = null; + this.translationFn = null; + this.featureIndex = new Map(); + this.isInitialized = false; + } + + /** + * Initialize glify with proper settings + */ + initialize() { + if (!this.isInitialized) { + glify.longitudeFirst(); + this.isInitialized = true; + } + } + + /** + * Clean up WebGL resources properly + */ + cleanupWebGL(canvas) { + if (!canvas) return; + + try { + const gl = canvas.getContext('webgl') || canvas.getContext('webgl2'); + if (gl) { + // Clear all WebGL state + gl.clearColor(0, 0, 0, 0); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + + // Lose context to force cleanup + const loseContext = gl.getExtension('WEBGL_lose_context'); + if (loseContext) { + loseContext.loseContext(); + } + } + } catch (error) { + console.warn('WebGL cleanup error:', error); + } + } + + /** + * Remove current instance with full cleanup + */ + removeCurrentInstance() { + if (!this.currentInstance) return; + + try { + // Get canvas before removal for cleanup + const canvas = this.currentInstance.canvas; + + // Remove from map + if (typeof this.currentInstance.remove === 'function') { + this.currentInstance.remove(); + } + + // Clean WebGL context + if (canvas) { + this.cleanupWebGL(canvas); + + // Remove from DOM + if (canvas.parentNode) { + canvas.parentNode.removeChild(canvas); + } + } + } catch (error) { + console.error('Error removing glify instance:', error); + } finally { + this.currentInstance = null; + } + } + + /** + * Create click handler with proper feature lookup + */ + createClickHandler(features, map, t) { + return (e, point, xy) => { + // Find feature by coordinates + const feature = features.find( + (f) => f.geometry.coordinates[0] === point[0] && f.geometry.coordinates[1] === point[1] + ); + + if (!feature) { + console.warn('Could not find feature for clicked point'); + return; + } + + // Update URL with photo ID + urlHelper.stateManager.updatePhotoId(feature.properties.id, false); + + // Render popup + return popupHelper.renderLeafletPopup(feature, e.latlng, t, map); + }; + } + + /** + * Add points with optimized rendering + */ + addPoints(pointsGeojson, mapInstance, t) { + // Initialize if needed + this.initialize(); + + // Validate input + if (!pointsGeojson?.features?.length) { + return null; + } + + // Clean up existing instance + this.removeCurrentInstance(); + + // Store references + this.currentData = pointsGeojson; + this.currentMap = mapInstance; + this.translationFn = t; + + // Build data arrays + const coords = []; + const features = []; + + pointsGeojson.features.forEach((feature) => { + coords.push([feature.geometry.coordinates[0], feature.geometry.coordinates[1]]); + features.push(feature); + }); + + // Create new glify instance + try { + this.currentInstance = glify.points({ + map: mapInstance, + data: coords, + size: 10, + color: { r: 0.054, g: 0.819, b: 0.27, a: 1 }, + click: this.createClickHandler(features, mapInstance, t), + // Performance optimizations + pane: 'overlayPane', + opacity: 1, + className: 'glify-points-layer', + }); + + return this.currentInstance; + } catch (error) { + console.error('Error creating glify points:', error); + this.currentInstance = null; + return null; + } + } + + /** + * Highlight points by category with proper color mapping + */ + highlightByCategory(category, objectKey = null) { + if (!this.currentData || !this.currentMap) return null; + + // Remove current instance + this.removeCurrentInstance(); + + // No filter - show all with default color + if (!category && !objectKey) { + return this.addPoints(this.currentData, this.currentMap, this.translationFn); + } + + // Filter features + const filteredCoords = []; + const filteredFeatures = []; + + this.currentData.features.forEach((feature) => { + let shouldInclude = false; + + if (objectKey) { + shouldInclude = this.hasObject(feature, category, objectKey); + } else if (category) { + shouldInclude = this.hasCategory(feature, category); + } + + if (shouldInclude) { + filteredCoords.push([feature.geometry.coordinates[0], feature.geometry.coordinates[1]]); + filteredFeatures.push(feature); + } + }); + + // Only render if there are matching points + if (filteredCoords.length === 0) { + console.log(`No points found for filter - Category: "${category}", Object: "${objectKey}"`); + return null; + } + + // Get category color + const color = Category.getRGB(category); + + try { + this.currentInstance = glify.points({ + map: this.currentMap, + data: filteredCoords, + size: 12, // Slightly larger for highlighted points + color: color, + click: this.createClickHandler(filteredFeatures, this.currentMap, this.translationFn), + pane: 'overlayPane', + opacity: 1, + className: 'glify-points-highlighted', + }); + + console.log(`Rendered ${filteredCoords.length} highlighted points`); + return this.currentInstance; + } catch (error) { + console.error('Error creating highlighted points:', error); + return null; + } + } + + /** + * Check if feature has specific object + */ + hasObject(feature, category, objectKey) { + if (!feature.properties?.summary?.tags) return false; + + const tags = feature.properties.summary.tags; + + if (tags[category] && tags[category][objectKey]) { + const quantity = tags[category][objectKey].quantity || 0; + return quantity > 0; + } + + return false; + } + + /** + * Check if feature has category + */ + hasCategory(feature, category) { + if (!feature.properties?.summary?.tags) return false; + + const tags = feature.properties.summary.tags; + + if (tags[category]) { + // Check if category has any objects + return Object.keys(tags[category]).length > 0; + } + + return false; + } + + /** + * Clear all references + */ + clearAll() { + this.removeCurrentInstance(); + this.currentData = null; + this.currentMap = null; + this.translationFn = null; + this.featureIndex.clear(); + } + + /** + * Get memory usage estimate + */ + getMemoryEstimate() { + if (!this.currentData) return 0; + + // Rough estimate: 100 bytes per feature + overhead + return (this.currentData.features.length * 100) / 1024 / 1024; // MB + } + + /** + * Check WebGL availability + */ + static checkWebGLSupport() { + try { + const canvas = document.createElement('canvas'); + const gl = canvas.getContext('webgl') || canvas.getContext('webgl2'); + return !!gl; + } catch (e) { + return false; + } + } +} + +// Create singleton instance +const glifyManager = new GlifyPointsManager(); + +// Export legacy interface for compatibility +export function addGlifyPoints(pointsGeojson, mapInstance, t) { + return glifyManager.addPoints(pointsGeojson, mapInstance, t); +} + +export function highlightPointsByCategory(category, mapInstance, objectKey = null) { + return glifyManager.highlightByCategory(category, objectKey); +} + +export function highlightPointsByObject(objectData, mapInstance) { + if (!objectData) { + return glifyManager.highlightByCategory(null, null); + } + return glifyManager.highlightByCategory(objectData.category, objectData.objectKey); +} + +export function removeGlifyPoints(points, mapInstance) { + // If called with specific instance, try to remove it + if (points && points !== glifyManager.currentInstance) { + try { + if (typeof points.remove === 'function') { + points.remove(); + } + } catch (error) { + console.error('Error removing glify points:', error); + } + } + + // Always clear the manager's instance + glifyManager.removeCurrentInstance(); +} + +export function clearGlifyReferences() { + glifyManager.clearAll(); +} + +export function initializeGlify() { + glifyManager.initialize(); +} + +// Export manager for advanced usage +export { glifyManager }; + +// Check WebGL support on module load +if (!GlifyPointsManager.checkWebGLSupport()) { + console.warn('WebGL not supported. Glify points may not render correctly.'); +} + +export default { + addGlifyPoints, + highlightPointsByCategory, + highlightPointsByObject, + removeGlifyPoints, + clearGlifyReferences, + initializeGlify, + glifyManager, +}; diff --git a/resources/js/views/Maps/helpers/mapDrawerHelper.js b/resources/js/views/Maps/helpers/mapDrawerHelper.js new file mode 100644 index 000000000..9639e2e8f --- /dev/null +++ b/resources/js/views/Maps/helpers/mapDrawerHelper.js @@ -0,0 +1,525 @@ +import { Category } from './Category.js'; + +/** + * Map Drawer Helper Functions + * Utility functions for the OpenLitterMap drawer component + * + * FIXED: Updated to match actual API response structure: + * - by_category (not categories) + * - by_object (not top_objects) + * - time_histogram (not time_series.histogram) + * - counts (not metadata) + */ + +class MapDrawerHelper { + /** + * Format numbers with appropriate suffixes (K, M, B) + */ + static formatNumber(num) { + if (num === null || num === undefined || isNaN(num)) return '0'; + + // Convert to number if string + const value = Number(num); + if (isNaN(value)) return '0'; + + if (value >= 1000000000) { + return (value / 1000000000).toFixed(1) + 'B'; + } + if (value >= 1000000) { + return (value / 1000000).toFixed(1) + 'M'; + } + if (value >= 1000) { + return (value / 1000).toFixed(1) + 'K'; + } + return Math.floor(value).toString(); + } + + /** + * Format percentages + */ + static formatPercentage(value, total) { + if (!total || total === 0) return '0%'; + const percentage = (value / total) * 100; + return percentage < 0.1 ? '<0.1%' : `${percentage.toFixed(1)}%`; + } + + /** + * Format dates for display + */ + static formatDate(dateString) { + if (!dateString) return ''; + + try { + const date = new Date(dateString); + if (isNaN(date.getTime())) return dateString; + + return date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric', + }); + } catch (error) { + console.warn('Invalid date string:', dateString); + return dateString; + } + } + + /** + * Format date range for display + */ + static formatDateRange(from, to) { + if (!from || !to) return 'All time'; + + const fromFormatted = this.formatDate(from); + const toFormatted = this.formatDate(to); + + if (fromFormatted === toFormatted) { + return fromFormatted; + } + + return `${fromFormatted} - ${toFormatted}`; + } + + /** + * Parse object key to get category and name + * Handles both "category.object" format and direct object keys + */ + static parseObjectKey(key) { + if (!key || typeof key !== 'string') { + return { category: 'unknown', name: 'unknown' }; + } + + // Check if the key contains a dot separator + if (key.includes('.')) { + const parts = key.split('.'); + return { + category: parts[0] || 'unknown', + name: parts[1] || key, + }; + } else { + // If no dot, the key itself is the object name + return { + category: null, + name: key, + }; + } + } + + /** + * Get display name for an object + */ + static getObjectDisplayName(key) { + const parsed = this.parseObjectKey(key); + // Convert underscore to space and capitalize + return parsed.name.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()); + } + + /** + * Format filter key for display + */ + static formatFilterKey(key) { + if (!key) return ''; + // Use Category class for proper display names + if (Category.exists(key)) { + return Category.getDisplayName(key); + } + return key.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()); + } + + /** + * Get contributor period text + */ + static getContributorPeriod(firstContribution, lastContribution) { + if (!firstContribution) return 'Recent contributor'; + + const first = this.formatDate(firstContribution); + const last = this.formatDate(lastContribution); + + if (first === last) { + return `Since ${first}`; + } + + return `${first} - ${last}`; + } + + /** + * Process stats data for component consumption + * FIXED: Matches actual API response structure + */ + static processStatsDataForComponent(statsData) { + if (!statsData) return null; + + // FIXED: API returns { data: { counts, by_category, by_object, ... }, meta: {...} } + const apiData = statsData.data || statsData; + const counts = apiData.counts || {}; + + const result = { + // Basic counts - FIXED: Use 'counts' object + totalItems: counts.photos || 0, + totalObjects: counts.total_objects || 0, + totalBrands: counts.total_brands || 0, + + // Pickup percentages + pickedUpPercentage: 0, + notPickedUpPercentage: 0, + + // Processed arrays + topObjects: [], + topBrands: [], + categoriesWithPercentages: [], + materialsWithPercentages: [], + timeSeriesData: [], + normalizedHistogram: [], + + // Time series stats + timeSeriesStats: {}, + firstDate: '', + lastDate: '', + trendIcon: '', + + // Filters + hasFilters: false, + }; + + // Calculate pickup percentages + const pickedUp = counts.picked_up || 0; + const notPickedUp = counts.not_picked_up || 0; + const totalPickup = pickedUp + notPickedUp; + + if (totalPickup > 0) { + result.pickedUpPercentage = (pickedUp / totalPickup) * 100; + result.notPickedUpPercentage = (notPickedUp / totalPickup) * 100; + } + + // FIXED: Process by_object (not top_objects) + if (apiData.by_object && Array.isArray(apiData.by_object)) { + result.topObjects = apiData.by_object.slice(0, 20).map((obj) => ({ + key: obj.key || 'unknown', + name: this.getObjectDisplayName(obj.key), + count: obj.qty || 0, // FIXED: API uses 'qty' not 'count' + })); + } + + // FIXED: Process brands array directly + if (apiData.brands && Array.isArray(apiData.brands)) { + result.topBrands = apiData.brands.slice(0, 12).map((brand) => ({ + key: brand.key || 'unknown', + name: brand.key || 'Unknown', + count: brand.qty || 0, // FIXED: API uses 'qty' not 'count' + })); + } + + // FIXED: Process by_category (not categories) + if (apiData.by_category && Array.isArray(apiData.by_category)) { + const totalCategoryCount = apiData.by_category.reduce((sum, cat) => sum + (cat.qty || 0), 0); + + result.categoriesWithPercentages = apiData.by_category.map((cat) => { + const count = cat.qty || 0; // FIXED: API uses 'qty' not 'count' + const percentage = totalCategoryCount > 0 ? (count / totalCategoryCount) * 100 : 0; + const categoryKey = cat.key; + return { + key: categoryKey, + name: Category.getDisplayName(categoryKey), + count: count, + percentage, + formattedPercentage: this.formatPercentage(count, totalCategoryCount), + color: Category.getColor(categoryKey), + }; + }); + } + + // FIXED: Process materials array directly + if (apiData.materials && Array.isArray(apiData.materials)) { + const totalMaterialCount = apiData.materials.reduce((sum, mat) => sum + (mat.qty || 0), 0); + + result.materialsWithPercentages = apiData.materials.slice(0, 10).map((mat) => { + const count = mat.qty || 0; // FIXED: API uses 'qty' not 'count' + const percentage = totalMaterialCount > 0 ? (count / totalMaterialCount) * 100 : 0; + return { + key: mat.key || 'unknown', + name: this.formatFilterKey(mat.key), + count: count, + percentage, + formattedPercentage: this.formatPercentage(count, totalMaterialCount), + icon: this.getMaterialIcon(mat.key), + }; + }); + } + + // FIXED: Process time_histogram (not time_series.histogram) + if (apiData.time_histogram && Array.isArray(apiData.time_histogram)) { + result.timeSeriesData = apiData.time_histogram; + + // Normalize histogram for visualization + const maxValue = Math.max(...apiData.time_histogram.map((h) => h.photos || 0)); + + result.normalizedHistogram = apiData.time_histogram.map((item) => ({ + ...item, + bucket: item.bucket, + photos: item.photos || 0, + objects: item.objects || 0, + height: maxValue > 0 ? ((item.photos || 0) / maxValue) * 100 : 0, + })); + + // Calculate stats + result.timeSeriesStats = this.calculateTimeSeriesStats(result.timeSeriesData); + + // Get first and last dates + if (result.normalizedHistogram.length > 0) { + result.firstDate = this.formatDate(result.normalizedHistogram[0].bucket); + result.lastDate = this.formatDate( + result.normalizedHistogram[result.normalizedHistogram.length - 1].bucket + ); + } + + // Set trend icon + result.trendIcon = + result.timeSeriesStats.trend === 'increasing' + ? '📈' + : result.timeSeriesStats.trend === 'decreasing' + ? '📉' + : '➡️'; + } + + // Check for filters - FIXED: Check meta object + const meta = statsData.meta || {}; + result.hasFilters = !!( + meta.categories || + meta.litter_objects || + meta.materials || + meta.brands || + meta.username || + meta.year || + (meta.from && meta.to) + ); + + return result; + } + + /** + * Get material icon + */ + static getMaterialIcon(material) { + const icons = { + plastic: '♻️', + glass: '🍾', + metal: '🥫', + paper: '📄', + cardboard: '📦', + fabric: '👕', + rubber: '🎾', + electronic: '📱', + wood: '🪵', + other: '🗑️', + }; + + return icons[material?.toLowerCase()] || icons.other; + } + + /** + * Get category colors - now uses the Category class + */ + static getCategoryColor(key) { + return Category.getColor(key); + } + + /** + * Calculate time series statistics + */ + static calculateTimeSeriesStats(data) { + if (!data || !Array.isArray(data) || data.length === 0) { + return { + total: 0, + average: 0, + peak: { value: 0, date: null }, + trend: 'stable', + }; + } + + const values = data.map((d) => d.photos || 0); + const total = values.reduce((sum, val) => sum + val, 0); + const average = total / values.length; + const maxValue = Math.max(...values); + const peakIndex = values.indexOf(maxValue); + const peak = { + value: maxValue, + date: data[peakIndex]?.bucket || null, + }; + + // Simple trend calculation + if (values.length < 2) { + return { total, average: Math.round(average * 10) / 10, peak, trend: 'stable' }; + } + + const midpoint = Math.floor(values.length / 2); + const firstHalf = values.slice(0, midpoint); + const secondHalf = values.slice(midpoint); + + const firstAvg = firstHalf.length > 0 ? firstHalf.reduce((sum, val) => sum + val, 0) / firstHalf.length : 0; + const secondAvg = secondHalf.length > 0 ? secondHalf.reduce((sum, val) => sum + val, 0) / secondHalf.length : 0; + + let trend = 'stable'; + if (firstAvg > 0) { + if (secondAvg > firstAvg * 1.1) trend = 'increasing'; + if (secondAvg < firstAvg * 0.9) trend = 'decreasing'; + } + + return { total, average: Math.round(average * 10) / 10, peak, trend }; + } + + /** + * Handle export with loading state + */ + static async handleExport(exportFunction, setLoading, statsData, filters) { + try { + setLoading(true); + await exportFunction(statsData, filters); + } catch (error) { + console.error('Export failed:', error); + alert('Export failed. Please try again.'); + } finally { + setLoading(false); + } + } + + /** + * Export to CSV - FIXED to use actual API structure + */ + static exportToCSV(statsData, filters) { + const exportData = []; + const apiData = statsData.data || statsData; + const counts = apiData.counts || {}; + + // Add metadata + exportData.push(['OpenLitterMap Statistics Export']); + exportData.push(['Generated:', new Date().toISOString()]); + if (filters.from && filters.to) { + exportData.push(['Date Range:', this.formatDateRange(filters.from, filters.to)]); + } + exportData.push(['']); // Empty row + + // Add summary stats + exportData.push(['Summary Statistics']); + exportData.push(['Total Photos:', counts.photos || 0]); + exportData.push(['Total Objects:', counts.total_objects || 0]); + exportData.push(['Total Users:', counts.users || 0]); + exportData.push(['']); // Empty row + + // Add top objects - FIXED: Use by_object with qty + if (apiData.by_object && apiData.by_object.length > 0) { + exportData.push(['Top Litter Objects']); + exportData.push(['Object', 'Count']); + apiData.by_object.forEach((obj) => { + exportData.push([this.getObjectDisplayName(obj.key), obj.qty || 0]); + }); + exportData.push(['']); // Empty row + } + + // Convert to CSV string + const csvContent = exportData + .map((row) => + row + .map((cell) => { + const value = String(cell); + if (value.includes(',') || value.includes('"') || value.includes('\n')) { + return `"${value.replace(/"/g, '""')}"`; + } + return value; + }) + .join(',') + ) + .join('\n'); + + const filename = this.generateExportFilename(filters, 'csv'); + this.downloadFile(csvContent, filename, 'text/csv'); + } + + /** + * Export to JSON + */ + static exportToJSON(statsData, filters) { + const exportData = { + metadata: { + title: 'OpenLitterMap Statistics Export', + generated: new Date().toISOString(), + filters: filters, + }, + data: statsData, + }; + + const jsonContent = JSON.stringify(exportData, null, 2); + const filename = this.generateExportFilename(filters, 'json'); + this.downloadFile(jsonContent, filename, 'application/json'); + } + + /** + * Generate export filename + */ + static generateExportFilename(filters, format = 'csv') { + const timestamp = new Date().toISOString().split('T')[0]; + let filename = `openlittermap_stats_${timestamp}`; + + if (filters.year) { + filename += `_${filters.year}`; + } else if (filters.from && filters.to) { + filename += `_${filters.from}_to_${filters.to}`; + } + + if (filters.username) { + filename += `_${filters.username}`; + } + + return `${filename}.${format}`; + } + + /** + * Download file + */ + static downloadFile(content, filename, mimeType = 'text/csv') { + const blob = new Blob([content], { type: mimeType }); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + } + + /** + * Validate stats data - FIXED to check actual API structure + */ + static validateStatsData(data) { + if (!data || typeof data !== 'object') return false; + + const apiData = data.data || data; + + // Check for at least one main section + return !!( + apiData.counts || + apiData.time_histogram || + apiData.by_category || + apiData.by_object || + apiData.brands || + apiData.materials || + apiData.custom_tags + ); + } + + /** + * Format cache info + */ + static formatCacheInfo(cacheInfo) { + if (!cacheInfo) return 'Fresh'; + + const info = []; + if (cacheInfo.cached) info.push('Cached'); + if (cacheInfo.sampling) info.push('Sampled'); + if (cacheInfo.truncated) info.push('Truncated'); + + return info.length > 0 ? info.join(', ') : 'Fresh'; + } +} + +export default MapDrawerHelper; diff --git a/resources/js/views/Maps/helpers/mapEventHelper.js b/resources/js/views/Maps/helpers/mapEventHelper.js new file mode 100644 index 000000000..d298fd410 --- /dev/null +++ b/resources/js/views/Maps/helpers/mapEventHelper.js @@ -0,0 +1,330 @@ +import { clustersHelper } from './clustersHelper.js'; +import { pointsHelper } from './pointsHelper.js'; +import { urlHelper } from './urlHelper.js'; + +/** + * Adaptive debounce timings based on action type + */ +const DEBOUNCE_TIMINGS = { + pan: 500, // Longer for panning to avoid too many requests + zoom: 200, // Faster for zoom changes (more disruptive to view) + filter: 100, // Nearly immediate for filter changes + default: 300, // Fallback +}; + +/** + * Request state manager for consistent tracking + */ +class MapRequestState { + constructor() { + this.state = { + updateTimeout: null, + pointsController: null, + statsController: null, + lastRequestHash: null, + lastBbox: null, + lastZoom: null, + lastFilters: null, + }; + } + + /** + * Cancel all active operations + */ + cancelAll() { + if (this.state.updateTimeout) { + clearTimeout(this.state.updateTimeout); + this.state.updateTimeout = null; + } + + if (this.state.pointsController) { + this.state.pointsController.abort(); + this.state.pointsController = null; + } + + if (this.state.statsController) { + this.state.statsController.abort(); + this.state.statsController = null; + } + } + + /** + * Get appropriate debounce timing based on change type + */ + getDebounceDelay(prevState, currentState) { + // Filter change + if (prevState.lastFilters && JSON.stringify(prevState.lastFilters) !== JSON.stringify(currentState.filters)) { + return DEBOUNCE_TIMINGS.filter; + } + + // Zoom change + if (prevState.lastZoom !== null && Math.abs(prevState.lastZoom - currentState.zoom) >= 1) { + return DEBOUNCE_TIMINGS.zoom; + } + + // Pan + return DEBOUNCE_TIMINGS.pan; + } + + /** + * Update tracking state + */ + updateTrackingState(bbox, zoom, filters) { + this.state.lastBbox = bbox; + this.state.lastZoom = zoom; + this.state.lastFilters = filters; + } + + /** + * Generate request hash for deduplication + */ + generateRequestHash(zoom, bbox, filters) { + return JSON.stringify({ + z: Math.round(zoom * 10), + b: [ + Math.round(bbox.left * 1000), + Math.round(bbox.bottom * 1000), + Math.round(bbox.right * 1000), + Math.round(bbox.top * 1000), + ], + f: filters, + }); + } +} + +const requestState = new MapRequestState(); + +export const mapEventHelper = { + /** + * Setup all map event handlers + */ + setupMapEvents({ mapInstance, onMoveEnd, onPopupClose, onZoom }) { + if (!mapInstance) return; + + mapInstance.on('moveend', onMoveEnd); + mapInstance.on('popupclose', onPopupClose); + mapInstance.on('zoom', onZoom); + + // Add error handling for context loss + mapInstance.on('error', (e) => { + console.error('Map error:', e); + if (e.error?.message?.includes('WebGL')) { + // Handle WebGL context loss + requestState.cancelAll(); + } + }); + }, + + /** + * Clear points from map + */ + clearPoints(points, mapInstance) { + return pointsHelper.clearPoints(points, mapInstance); + }, + + /** + * Debounce map updates with adaptive timing + */ + debounceMapUpdate({ callback, forceDelay = null }) { + // Cancel any pending updates + requestState.cancelAll(); + + // Determine appropriate delay + const currentFilters = urlHelper.stateManager.getFiltersFromURL(); + const currentState = { + zoom: null, // Will be set in callback + filters: currentFilters, + }; + + const delay = forceDelay ?? requestState.getDebounceDelay(requestState.state, currentState); + + // Set new timeout + requestState.state.updateTimeout = setTimeout(async () => { + requestState.state.updateTimeout = null; + await callback(); + }, delay); + }, + + /** + * Perform the actual map update with proper abort handling + */ + async performUpdate({ + mapInstance, + clustersStore, + pointsStore, + clusters, + points, + prevZoom, + currentPage, + t, + preservePage = false, + }) { + if (!mapInstance) return { points, prevZoom }; + + // Update URL with current location + urlHelper.updateLocationInURL(mapInstance); + + const bounds = mapInstance.getBounds(); + const bbox = { + left: bounds.getWest(), + bottom: bounds.getSouth(), + right: bounds.getEast(), + top: bounds.getNorth(), + }; + const zoom = Math.round(mapInstance.getZoom()); + + // Get current filters + const filters = urlHelper.stateManager.getFiltersFromURL(); + + // Generate request hash to check for duplicates + const requestHash = requestState.generateRequestHash(zoom, bbox, filters); + + // Skip if this exact request was just made + if (requestHash === requestState.state.lastRequestHash) { + console.log('Skipping duplicate request'); + return { points, prevZoom }; + } + + // Check if we should skip the update (for low zoom panning) + if (!clustersHelper.shouldReloadClusters(zoom, prevZoom)) { + return { points, prevZoom }; + } + + // Determine if we should reset pagination + const shouldResetPage = + !preservePage && + pointsHelper.shouldResetPagination( + { + bbox: requestState.state.lastBbox, + zoom: requestState.state.lastZoom, + filters: requestState.state.lastFilters, + }, + { bbox, zoom, filters } + ); + + // Clear existing points when changing view significantly + if (points && shouldResetPage) { + points = pointsHelper.clearPoints(points, mapInstance); + } + + // Handle transitions between cluster and points views + if (clustersHelper.shouldShowClusters(zoom) && pointsHelper.shouldShowPoints(prevZoom)) { + // Transitioning from points to clusters + points = clustersHelper.handlePointsToClusterTransition(clusters, points, mapInstance); + } else if (pointsHelper.shouldShowPoints(zoom) && clustersHelper.shouldShowClusters(prevZoom)) { + // Transitioning from clusters to points + clustersHelper.handleClusterToPointsTransition(clusters); + } + + // Update tracking state + requestState.updateTrackingState(bbox, zoom, filters); + requestState.state.lastRequestHash = requestHash; + + // Create abort controller for this request + const controller = new AbortController(); + requestState.state.pointsController = controller; + + try { + // Load appropriate data based on zoom level + if (clustersHelper.shouldShowClusters(zoom)) { + points = await clustersHelper.handleClusterView({ + clustersStore, + clusters, + zoom, + bbox, + year: filters.year, + points, + mapInstance, + abortSignal: controller.signal, + }); + + return { + points, + prevZoom: zoom, + paginationData: null, + shouldResetPagination: false, + }; + } else { + // Determine page to load + const pageToLoad = shouldResetPage ? 1 : currentPage || 1; + + points = await pointsHelper.handlePointsView({ + mapInstance, + pointsStore, + clusters, + prevZoom, + zoom, + bbox, + year: filters.year, + fromDate: filters.fromDate, + toDate: filters.toDate, + username: filters.username, + t, + page: pageToLoad, + abortSignal: controller.signal, + }); + + const paginationData = pointsHelper.getPaginationData(pointsStore); + + return { + points, + prevZoom: zoom, + paginationData, + shouldResetPagination: shouldResetPage, + currentPage: shouldResetPage ? 1 : pageToLoad, + }; + } + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Map update error:', error); + } + return { points, prevZoom, error }; + } finally { + if (requestState.state.pointsController === controller) { + requestState.state.pointsController = null; + } + } + }, + + /** + * Get current view type + */ + getCurrentViewType(zoom) { + return pointsHelper.shouldShowPoints(zoom) ? 'points' : 'clusters'; + }, + + /** + * Get current view data + */ + getCurrentViewData(zoom, clustersStore, pointsStore) { + if (pointsHelper.shouldShowPoints(zoom)) { + return pointsHelper.getPointsData(pointsStore); + } else { + return clustersHelper.getClustersData(clustersStore); + } + }, + + /** + * Clean up all resources + */ + cleanup() { + requestState.cancelAll(); + pointsHelper.cleanup(); + }, + + /** + * Export request state for external use + */ + getRequestState() { + return requestState.state; + }, + + /** + * Force cancel all requests (for emergency cleanup) + */ + forceCancel() { + requestState.cancelAll(); + }, +}; + +export default mapEventHelper; diff --git a/resources/js/views/Maps/helpers/mapHelper.js b/resources/js/views/Maps/helpers/mapHelper.js new file mode 100644 index 000000000..1b7d4ab0b --- /dev/null +++ b/resources/js/views/Maps/helpers/mapHelper.js @@ -0,0 +1,472 @@ +import { urlHelper } from './urlHelper.js'; +import { clustersHelper } from './clustersHelper.js'; +import { pointsHelper } from './pointsHelper.js'; +import { mapEventHelper } from './mapEventHelper.js'; +import { paginationHelper } from './paginationHelper.js'; + +/** + * Unified Request State Manager + * Single source of truth for all map requests and state + */ +class UnifiedRequestState { + constructor() { + this.state = { + updateTimeout: null, + pointsController: null, + statsController: null, + lastRequestHash: null, + lastBbox: null, + lastZoom: null, + lastFilters: null, + isUpdating: false, + lastUpdateTime: 0, + }; + } + + /** + * Cancel all active requests and timers + */ + cancelAll() { + if (this.state.updateTimeout) { + clearTimeout(this.state.updateTimeout); + this.state.updateTimeout = null; + } + + if (this.state.pointsController) { + this.state.pointsController.abort(); + this.state.pointsController = null; + } + + if (this.state.statsController) { + this.state.statsController.abort(); + this.state.statsController = null; + } + + this.state.isUpdating = false; + } + + /** + * Check if we should throttle updates + */ + shouldThrottle() { + const now = Date.now(); + const timeSinceLastUpdate = now - this.state.lastUpdateTime; + + // Throttle if less than 100ms since last update + return timeSinceLastUpdate < 100; + } + + /** + * Update last update time + */ + markUpdated() { + this.state.lastUpdateTime = Date.now(); + } +} + +const unifiedState = new UnifiedRequestState(); + +export const mapHelper = { + /** + * Main map update handler with all optimizations + */ + async handleMapUpdate({ + mapInstance, + globalMapStore, + pointsStore, + clusters, + points, + prevZoom, + t, + page = 1, + forceUpdate = false, + preservePage = false, + }) { + if (!mapInstance) return { points, prevZoom }; + + // Throttle rapid updates unless forced + if (!forceUpdate && unifiedState.shouldThrottle()) { + console.log('Throttling rapid update'); + return { points, prevZoom }; + } + + // Prevent concurrent updates + if (unifiedState.state.isUpdating && !forceUpdate) { + console.log('Update already in progress'); + return { points, prevZoom }; + } + + unifiedState.state.isUpdating = true; + unifiedState.markUpdated(); + + // Update URL location first + urlHelper.updateLocationInURL(mapInstance); + + const bounds = mapInstance.getBounds(); + const bbox = { + left: bounds.getWest(), + bottom: bounds.getSouth(), + right: bounds.getEast(), + top: bounds.getNorth(), + }; + const zoom = Math.round(mapInstance.getZoom()); + + // Get current filters + const filters = urlHelper.stateManager.getFiltersFromURL(); + + // Generate request hash for deduplication + const requestHash = this.generateRequestHash(zoom, bbox, filters); + + // Skip if identical request (unless forced) + if (!forceUpdate && requestHash === unifiedState.state.lastRequestHash) { + console.log('Skipping duplicate request'); + unifiedState.state.isUpdating = false; + return { points, prevZoom }; + } + + // Check if we should skip low-zoom panning + if (!clustersHelper.shouldReloadClusters(zoom, prevZoom)) { + unifiedState.state.isUpdating = false; + return { points, prevZoom }; + } + + // Determine if pagination should reset + const shouldResetPage = + !preservePage && this.shouldResetPagination(unifiedState.state, { bbox, zoom, filters }); + + // Clear points if needed + if (points && (shouldResetPage || this.isViewTransition(prevZoom, zoom))) { + points = pointsHelper.clearPoints(points, mapInstance); + } + + // Handle view transitions + if (clustersHelper.shouldShowClusters(zoom) && pointsHelper.shouldShowPoints(prevZoom)) { + points = clustersHelper.handlePointsToClusterTransition(clusters, points, mapInstance); + } else if (pointsHelper.shouldShowPoints(zoom) && clustersHelper.shouldShowClusters(prevZoom)) { + clustersHelper.handleClusterToPointsTransition(clusters); + } + + // Update tracking state + unifiedState.state.lastBbox = bbox; + unifiedState.state.lastZoom = zoom; + unifiedState.state.lastFilters = filters; + unifiedState.state.lastRequestHash = requestHash; + + // Cancel any ongoing requests + if (unifiedState.state.pointsController) { + unifiedState.state.pointsController.abort(); + } + + const controller = new AbortController(); + unifiedState.state.pointsController = controller; + + try { + // Load appropriate data based on zoom level + if (clustersHelper.shouldShowClusters(zoom)) { + points = await clustersHelper.handleClusterView({ + globalMapStore, + clusters, + zoom, + bbox, + year: filters.year, + points, + mapInstance, + abortSignal: controller.signal, + }); + + return { + points, + prevZoom: zoom, + paginationData: null, + viewType: 'clusters', + }; + } else { + // Determine page to load + const pageToLoad = shouldResetPage ? 1 : page; + + // Update URL if page was reset + if (shouldResetPage && page !== 1) { + paginationHelper.updatePageInURL(1, false); + } + + points = await pointsHelper.handlePointsView({ + mapInstance, + pointsStore, + clusters, + prevZoom, + zoom, + bbox, + year: filters.year, + fromDate: filters.fromDate, + toDate: filters.toDate, + username: filters.username, + t, + page: pageToLoad, + abortSignal: controller.signal, + }); + + const paginationData = pointsHelper.getPaginationData(pointsStore); + + return { + points, + prevZoom: zoom, + paginationData, + viewType: 'points', + currentPage: pageToLoad, + }; + } + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Map update error:', error); + } + return { points, prevZoom, error }; + } finally { + if (unifiedState.state.pointsController === controller) { + unifiedState.state.pointsController = null; + } + unifiedState.state.isUpdating = false; + } + }, + + /** + * Debounced map update with adaptive timing + */ + debouncedMapUpdate(callback, eventType = 'pan') { + // Cancel any pending update + if (unifiedState.state.updateTimeout) { + clearTimeout(unifiedState.state.updateTimeout); + } + + // Determine delay based on event type + const delays = { + pan: 500, + zoom: 200, + filter: 100, + user: 0, // Immediate for user actions + }; + + const delay = delays[eventType] || 300; + + if (delay === 0) { + // Execute immediately for user actions + unifiedState.cancelAll(); + callback(); + } else { + // Debounce other events + unifiedState.state.updateTimeout = setTimeout(() => { + unifiedState.state.updateTimeout = null; + callback(); + }, delay); + } + }, + + /** + * Load stats for current view + */ + async loadStats({ mapInstance, zoom }) { + if (!mapInstance || zoom < clustersHelper.CLUSTER_ZOOM_THRESHOLD) { + return null; + } + + // Cancel any ongoing stats request + if (unifiedState.state.statsController) { + unifiedState.state.statsController.abort(); + } + + const controller = new AbortController(); + unifiedState.state.statsController = controller; + + try { + const filters = urlHelper.stateManager.getFiltersFromURL(); + + const stats = await pointsHelper.loadPointsStats({ + mapInstance, + zoom, + year: filters.year, + fromDate: filters.fromDate, + toDate: filters.toDate, + username: filters.username, + abortSignal: controller.signal, + }); + + if (!controller.signal.aborted) { + return stats; + } + return null; + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Stats loading error:', error); + } + return null; + } finally { + if (unifiedState.state.statsController === controller) { + unifiedState.state.statsController = null; + } + } + }, + + /** + * Handle pagination + */ + async handlePagination({ direction, mapInstance, pointsStore, currentPage, totalPages, isLoadingPage }) { + if (!mapInstance || isLoadingPage?.value) return; + + const page = currentPage?.value || currentPage; + const total = totalPages?.value || totalPages; + + if (direction === 'prev' && page <= 1) return; + if (direction === 'next' && page >= total) return; + + // Update loading state + if (isLoadingPage?.value !== undefined) { + isLoadingPage.value = true; + } + + const newPage = direction === 'prev' ? page - 1 : page + 1; + + try { + // Update URL (user action) + paginationHelper.updatePageInURL(newPage, true); + + // Load new page data + const result = await paginationHelper.loadPageData({ + mapInstance, + pointsStore, + points: null, + currentPage: newPage, + requestState: unifiedState.state, + }); + + // Update stats in background + this.loadStats({ mapInstance, zoom: mapInstance.getZoom() }); + + return result; + } finally { + if (isLoadingPage?.value !== undefined) { + isLoadingPage.value = false; + } + } + }, + + /** + * Check if view is transitioning between clusters and points + */ + isViewTransition(prevZoom, currentZoom) { + const wasInClusters = clustersHelper.shouldShowClusters(prevZoom); + const isInClusters = clustersHelper.shouldShowClusters(currentZoom); + return wasInClusters !== isInClusters; + }, + + /** + * Check if pagination should reset + */ + shouldResetPagination(prevState, currentState) { + // Reset on view transition + if (this.isViewTransition(prevState.lastZoom, currentState.zoom)) { + return true; + } + + // Reset on filter change + if (JSON.stringify(prevState.lastFilters) !== JSON.stringify(currentState.filters)) { + return true; + } + + // Reset on significant movement (>50% of viewport) + if (prevState.lastBbox && currentState.bbox) { + const width = Math.abs(prevState.lastBbox.right - prevState.lastBbox.left); + const height = Math.abs(prevState.lastBbox.top - prevState.lastBbox.bottom); + + const deltaX = Math.abs(currentState.bbox.left - prevState.lastBbox.left); + const deltaY = Math.abs(currentState.bbox.bottom - prevState.lastBbox.bottom); + + return deltaX > width * 0.5 || deltaY > height * 0.5; + } + + return false; + }, + + /** + * Generate request hash for deduplication + */ + generateRequestHash(zoom, bbox, filters) { + return JSON.stringify({ + z: Math.round(zoom * 10), + b: [ + Math.round(bbox.left * 1000), + Math.round(bbox.bottom * 1000), + Math.round(bbox.right * 1000), + Math.round(bbox.top * 1000), + ], + f: filters, + }); + }, + + /** + * Get current view type + */ + getCurrentViewType(zoom) { + return pointsHelper.shouldShowPoints(zoom) ? 'points' : 'clusters'; + }, + + /** + * Get current view data + */ + getCurrentViewData(zoom, globalMapStore, pointsStore) { + if (pointsHelper.shouldShowPoints(zoom)) { + return pointsHelper.getPointsData(pointsStore); + } else { + return clustersHelper.getClustersData(globalMapStore); + } + }, + + /** + * Force refresh current view + */ + async forceRefresh({ mapInstance, globalMapStore, pointsStore, clusters, points, prevZoom, t, page }) { + // Cancel all ongoing operations + unifiedState.cancelAll(); + + // Force update flag will bypass deduplication + return this.handleMapUpdate({ + mapInstance, + globalMapStore, + pointsStore, + clusters, + points, + prevZoom, + t, + page, + forceUpdate: true, + }); + }, + + /** + * Cleanup all resources + */ + cleanup() { + unifiedState.cancelAll(); + mapEventHelper.cleanup(); + pointsHelper.cleanup(); + paginationHelper.resetTracking(); + }, + + /** + * Get unified request state (for debugging) + */ + getRequestState() { + return unifiedState.state; + }, + + /** + * Export all helpers for advanced usage + */ + helpers: { + url: urlHelper, + clusters: clustersHelper, + points: pointsHelper, + events: mapEventHelper, + pagination: paginationHelper, + }, +}; + +export default mapHelper; diff --git a/resources/js/views/Maps/helpers/mapLifecycleHelper.js b/resources/js/views/Maps/helpers/mapLifecycleHelper.js new file mode 100644 index 000000000..ce276a112 --- /dev/null +++ b/resources/js/views/Maps/helpers/mapLifecycleHelper.js @@ -0,0 +1,391 @@ +import L from 'leaflet'; +import { MIN_ZOOM, MAX_ZOOM } from './constants.js'; +import { clustersHelper } from './clustersHelper.js'; +import { pointsHelper } from './pointsHelper.js'; +import { urlHelper } from './urlHelper.js'; +import { mapEventHelper } from './mapEventHelper.js'; + +/** + * WebGL Context Manager for handling context loss/restoration + */ +class WebGLContextManager { + constructor() { + this.contexts = new WeakMap(); + this.restorationCallbacks = new Map(); + } + + /** + * Register a canvas for WebGL monitoring + */ + registerCanvas(canvas, restorationCallback) { + if (!canvas) return; + + const gl = canvas.getContext('webgl') || canvas.getContext('webgl2'); + if (!gl) return; + + this.contexts.set(canvas, gl); + + canvas.addEventListener('webglcontextlost', (e) => { + e.preventDefault(); + console.warn('WebGL context lost'); + + if (restorationCallback) { + this.restorationCallbacks.set(canvas, restorationCallback); + } + }); + + canvas.addEventListener('webglcontextrestored', () => { + console.log('WebGL context restored'); + + const callback = this.restorationCallbacks.get(canvas); + if (callback) { + callback(); + this.restorationCallbacks.delete(canvas); + } + }); + } + + /** + * Force cleanup of WebGL context + */ + cleanupCanvas(canvas) { + if (!canvas) return; + + const gl = this.contexts.get(canvas); + if (gl) { + const loseContext = gl.getExtension('WEBGL_lose_context'); + if (loseContext) { + loseContext.loseContext(); + } + this.contexts.delete(canvas); + } + + this.restorationCallbacks.delete(canvas); + } + + /** + * Cleanup all registered canvases + */ + cleanupAll() { + this.contexts = new WeakMap(); + this.restorationCallbacks.clear(); + } +} + +const webGLManager = new WebGLContextManager(); + +export const mapLifecycleHelper = { + /** + * Initialize the map and all its components + */ + async initializeMap({ clustersStore, $loading, t }) { + // Normalize any legacy photo parameters first + urlHelper.normalizePhotoParam(); + + const clusterFilters = clustersHelper.getClusterFiltersFromURL(); + const initialPage = urlHelper.stateManager.getFiltersFromURL().page; + const locationParams = urlHelper.stateManager.getLocationFromURL(); + + // Load initial cluster data + await clustersHelper.loadClusters({ + clustersStore, + zoom: 2, + year: clusterFilters.year, + }); + + // Create map instance with optimized settings + const mapInstance = L.map('openlittermap', { + center: [0, 0], + zoom: MIN_ZOOM, + scrollWheelZoom: false, + smoothWheelZoom: true, + smoothSensitivity: 2, + preferCanvas: false, // Use SVG for better performance with many points + renderer: L.svg(), + zoomAnimation: true, + fadeAnimation: true, + markerZoomAnimation: true, + }); + + // Set initial view based on URL parameters + let currentZoom = MIN_ZOOM; + if (locationParams.load && locationParams.lat && locationParams.lon) { + const lat = Math.max(-85, Math.min(85, locationParams.lat)); + const lon = Math.max(-180, Math.min(180, locationParams.lon)); + const zoom = Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, locationParams.zoom)); + + mapInstance.setView([lat, lon], zoom, { animate: false }); + currentZoom = zoom; + } + + // Add tile layer with proper attribution + const tileLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: 'Map data © OpenStreetMap & Contributors', + maxZoom: MAX_ZOOM, + minZoom: MIN_ZOOM, + updateWhenIdle: false, + updateWhenZooming: false, + keepBuffer: 2, + tileSize: 256, + }); + + tileLayer.addTo(mapInstance); + + // Initialize clusters layer with optimized rendering + const clusters = L.geoJSON(null, { + pointToLayer: clustersHelper.createClusterIcon, + onEachFeature: (feature, layer) => clustersHelper.onEachFeature(feature, layer, mapInstance), + }); + + // Add initial cluster data if available + const clustersData = clustersHelper.getClustersData(clustersStore); + if (clustersData?.features?.length > 0) { + clustersHelper.addClustersToMap(clusters, clustersData); + mapInstance.addLayer(clusters); + } + + // Register for WebGL monitoring if Glify will be used + mapInstance.on('layeradd', (e) => { + if (e.layer?.canvas) { + webGLManager.registerCanvas(e.layer.canvas, () => { + // Reload points if WebGL context is restored + console.log('Reloading points after context restoration'); + mapInstance.fire('moveend'); + }); + } + }); + + return { + mapInstance, + clusters, + currentZoom, + currentPage: initialPage, + }; + }, + + /** + * Cleanup map and all related resources with proper resource management + */ + cleanup({ mapInstance, clusters, points, router, route, preserveUrlParams = false }) { + // Cancel all pending operations first + mapEventHelper.forceCancel(); + pointsHelper.cleanup(); + + // Clean up WebGL contexts + webGLManager.cleanupAll(); + + if (mapInstance) { + // Remove all event listeners + mapInstance.off('moveend'); + mapInstance.off('popupclose'); + mapInstance.off('zoom'); + mapInstance.off('error'); + mapInstance.off('layeradd'); + + // Clean up Glify points with proper WebGL cleanup + if (points) { + try { + pointsHelper.clearPoints(points, mapInstance); + } catch (error) { + console.warn('Error clearing points during cleanup:', error); + } + } + + // Clear all layers + mapInstance.eachLayer((layer) => { + if (layer !== mapInstance._container) { + try { + mapInstance.removeLayer(layer); + } catch (error) { + console.warn('Error removing layer during cleanup:', error); + } + } + }); + + // Remove clusters + if (clusters) { + try { + clustersHelper.clearClusters(clusters); + } catch (error) { + console.warn('Error clearing clusters during cleanup:', error); + } + } + + // Close any open popups + mapInstance.closePopup(); + + // Remove the map instance + try { + mapInstance.remove(); + } catch (error) { + console.warn('Error removing map instance:', error); + } + } + + // Handle URL cleanup + if (router && route) { + if (preserveUrlParams) { + // Keep filter parameters, only clear map-specific ones + urlHelper.stateManager.clearParamGroup('map'); + urlHelper.stateManager.clearParamGroup('view'); + } else { + // Full URL reset + router.replace({ path: route.path }); + } + } + }, + + /** + * Save map state for potential restoration + */ + saveMapState(mapInstance) { + if (!mapInstance) return null; + + const center = mapInstance.getCenter(); + const zoom = mapInstance.getZoom(); + const bounds = mapInstance.getBounds(); + + return { + center: { lat: center.lat, lng: center.lng }, + zoom: zoom, + bounds: { + north: bounds.getNorth(), + south: bounds.getSouth(), + east: bounds.getEast(), + west: bounds.getWest(), + }, + filters: urlHelper.stateManager.getFiltersFromURL(), + timestamp: Date.now(), + }; + }, + + /** + * Restore map state from saved data + */ + restoreMapState(mapInstance, savedState) { + if (!mapInstance || !savedState) return; + + // Check if saved state is recent (within 5 minutes) + const isRecent = Date.now() - savedState.timestamp < 5 * 60 * 1000; + + if (isRecent) { + mapInstance.setView([savedState.center.lat, savedState.center.lng], savedState.zoom, { animate: false }); + } + }, + + /** + * Check map health and attempt recovery if needed + */ + async checkMapHealth(mapInstance) { + if (!mapInstance) return false; + + try { + // Check if map is still valid + const center = mapInstance.getCenter(); + const zoom = mapInstance.getZoom(); + + if (isNaN(center.lat) || isNaN(center.lng) || isNaN(zoom)) { + console.error('Map state corrupted, attempting recovery'); + + // Reset to default view + mapInstance.setView([0, 0], MIN_ZOOM, { animate: false }); + return false; + } + + // Check for WebGL context loss + const glifyLayers = []; + mapInstance.eachLayer((layer) => { + if (layer.canvas) { + const gl = layer.canvas.getContext('webgl') || layer.canvas.getContext('webgl2'); + if (gl && gl.isContextLost()) { + glifyLayers.push(layer); + } + } + }); + + if (glifyLayers.length > 0) { + console.warn(`Found ${glifyLayers.length} layers with lost WebGL context`); + + // Remove and re-add affected layers + glifyLayers.forEach((layer) => { + mapInstance.removeLayer(layer); + }); + + // Trigger reload + mapInstance.fire('moveend'); + return false; + } + + return true; + } catch (error) { + console.error('Map health check failed:', error); + return false; + } + }, + + /** + * Get performance metrics for monitoring + */ + getPerformanceMetrics(mapInstance) { + if (!mapInstance) return null; + + const metrics = { + layerCount: 0, + visibleFeatures: 0, + memoryUsage: null, + webglContexts: 0, + }; + + // Count layers and features + mapInstance.eachLayer((layer) => { + metrics.layerCount++; + + if (layer.getLayers) { + try { + metrics.visibleFeatures += layer.getLayers().length; + } catch (e) { + // Some layers don't support getLayers + } + } + + if (layer.canvas) { + metrics.webglContexts++; + } + }); + + // Get memory usage if available + if (performance.memory) { + metrics.memoryUsage = { + used: Math.round(performance.memory.usedJSHeapSize / 1048576), // MB + total: Math.round(performance.memory.totalJSHeapSize / 1048576), // MB + }; + } + + return metrics; + }, + + /** + * Optimize map for mobile devices + */ + optimizeForMobile(mapInstance) { + if (!mapInstance || !window.matchMedia('(max-width: 768px)').matches) { + return; + } + + // Reduce tile buffer for mobile + mapInstance.eachLayer((layer) => { + if (layer.options && layer.options.keepBuffer !== undefined) { + layer.options.keepBuffer = 1; + } + }); + + // Disable animations on mobile for better performance + mapInstance.options.zoomAnimation = false; + mapInstance.options.fadeAnimation = false; + mapInstance.options.markerZoomAnimation = false; + + console.log('Map optimized for mobile device'); + }, +}; + +export default mapLifecycleHelper; diff --git a/resources/js/views/Maps/helpers/paginationHelper.js b/resources/js/views/Maps/helpers/paginationHelper.js new file mode 100644 index 000000000..7a3cc1c52 --- /dev/null +++ b/resources/js/views/Maps/helpers/paginationHelper.js @@ -0,0 +1,461 @@ +import { CLUSTER_ZOOM_THRESHOLD } from './constants.js'; +import { pointsHelper } from './pointsHelper.js'; +import { urlHelper } from './urlHelper.js'; + +/** + * Pagination state manager for consistent pagination handling + */ +class PaginationStateManager { + constructor() { + this.state = { + lastBbox: null, + lastFilters: null, + lastZoom: null, + isResetting: false, + }; + } + + /** + * Check if pagination should be reset based on movement and filter changes + */ + shouldResetPagination(currentBbox, currentZoom, currentFilters) { + // Always reset when transitioning between view modes + if (this.lastZoom !== null) { + const wasInPoints = this.lastZoom >= CLUSTER_ZOOM_THRESHOLD; + const isInPoints = currentZoom >= CLUSTER_ZOOM_THRESHOLD; + + if (wasInPoints !== isInPoints) { + this.updateState(currentBbox, currentZoom, currentFilters); + return true; + } + } + + // Reset if filters changed + if (this.lastFilters && JSON.stringify(this.lastFilters) !== JSON.stringify(currentFilters)) { + this.updateState(currentBbox, currentZoom, currentFilters); + return true; + } + + // Reset if moved more than 50% of viewport + if (this.lastBbox && currentBbox) { + const viewportWidth = Math.abs(this.lastBbox.right - this.lastBbox.left); + const viewportHeight = Math.abs(this.lastBbox.top - this.lastBbox.bottom); + + const deltaX = Math.abs(currentBbox.left - this.lastBbox.left); + const deltaY = Math.abs(currentBbox.bottom - this.lastBbox.bottom); + + if (deltaX > viewportWidth * 0.5 || deltaY > viewportHeight * 0.5) { + this.updateState(currentBbox, currentZoom, currentFilters); + return true; + } + } + + // Don't reset for small pans or minor zoom changes + this.updateState(currentBbox, currentZoom, currentFilters); + return false; + } + + /** + * Update tracking state + */ + updateState(bbox, zoom, filters) { + this.lastBbox = bbox ? { ...bbox } : null; + this.lastZoom = zoom; + this.lastFilters = filters ? { ...filters } : null; + } + + /** + * Reset tracking state + */ + reset() { + this.lastBbox = null; + this.lastFilters = null; + this.lastZoom = null; + this.isResetting = false; + } +} + +const paginationState = new PaginationStateManager(); + +export const paginationHelper = { + /** + * Check if pagination controls should be shown + */ + shouldShowPaginationControls({ mapInstance, currentZoom, totalPages, isLoadingPage }) { + return mapInstance && currentZoom >= CLUSTER_ZOOM_THRESHOLD && totalPages > 1 && !isLoadingPage; + }, + + /** + * Get page number from URL + */ + getPageFromURL() { + return parseInt(urlHelper.stateManager.getFiltersFromURL().page) || 1; + }, + + /** + * Update page number in URL + */ + updatePageInURL(page, isUserAction = true) { + urlHelper.stateManager.updatePage(page, isUserAction); + }, + + /** + * Remove page parameter from URL + */ + removePageFromURL() { + urlHelper.stateManager.updatePage(1, false); + }, + + /** + * Smart pagination reset based on context + */ + smartResetPagination({ currentPage, totalPages, pointsStats, mapInstance }) { + if (!mapInstance) return; + + const bounds = mapInstance.getBounds(); + const bbox = { + left: bounds.getWest(), + bottom: bounds.getSouth(), + right: bounds.getEast(), + top: bounds.getNorth(), + }; + const zoom = Math.round(mapInstance.getZoom()); + const filters = urlHelper.stateManager.getFiltersFromURL(); + + // Check if reset is needed + const shouldReset = paginationState.shouldResetPagination(bbox, zoom, filters); + + if (shouldReset) { + // Set reset flag to prevent loops + paginationState.isResetting = true; + + // Reset page values + if (currentPage?.value !== undefined) { + currentPage.value = 1; + } + if (totalPages?.value !== undefined) { + totalPages.value = 1; + } + if (pointsStats?.value !== undefined) { + pointsStats.value = null; + } + + // Update URL (using replace since this is automatic) + this.removePageFromURL(); + + // Clear reset flag after next tick + requestAnimationFrame(() => { + paginationState.isResetting = false; + }); + + return true; + } + + return false; + }, + + /** + * Reset pagination state explicitly + */ + resetPagination({ currentPage, totalPages, pointsStats }) { + if (currentPage?.value !== undefined) { + currentPage.value = 1; + } + if (totalPages?.value !== undefined) { + totalPages.value = 1; + } + if (pointsStats?.value !== undefined) { + pointsStats.value = null; + } + this.removePageFromURL(); + paginationState.reset(); + }, + + /** + * Load previous page with proper abort handling + */ + async loadPreviousPage({ currentPage, isLoadingPage, loadPageData, loadPointsStats, requestState }) { + const current = currentPage?.value ?? currentPage; + const isLoading = isLoadingPage?.value ?? isLoadingPage; + + if (current <= 1 || isLoading || paginationState.isResetting) return; + + // Cancel any ongoing requests + if (requestState?.pointsController) { + requestState.pointsController.abort(); + requestState.pointsController = null; + } + if (requestState?.statsController) { + requestState.statsController.abort(); + requestState.statsController = null; + } + + if (isLoadingPage?.value !== undefined) { + isLoadingPage.value = true; + currentPage.value--; + this.updatePageInURL(currentPage.value, true); // User action + } + + try { + const results = await Promise.allSettled([loadPageData(), loadPointsStats()]); + + // Check for errors but don't throw if stats fail + if (results[0].status === 'rejected') { + throw results[0].reason; + } + } finally { + if (isLoadingPage?.value !== undefined) { + isLoadingPage.value = false; + } + } + }, + + /** + * Load next page with proper abort handling + */ + async loadNextPage({ currentPage, totalPages, isLoadingPage, loadPageData, loadPointsStats, requestState }) { + const current = currentPage?.value ?? currentPage; + const total = totalPages?.value ?? totalPages; + const isLoading = isLoadingPage?.value ?? isLoadingPage; + + if (current >= total || isLoading || paginationState.isResetting) return; + + // Cancel any ongoing requests + if (requestState?.pointsController) { + requestState.pointsController.abort(); + requestState.pointsController = null; + } + if (requestState?.statsController) { + requestState.statsController.abort(); + requestState.statsController = null; + } + + if (isLoadingPage?.value !== undefined) { + isLoadingPage.value = true; + currentPage.value++; + this.updatePageInURL(currentPage.value, true); // User action + } + + try { + const results = await Promise.allSettled([loadPageData(), loadPointsStats()]); + + // Check for errors but don't throw if stats fail + if (results[0].status === 'rejected') { + throw results[0].reason; + } + } finally { + if (isLoadingPage?.value !== undefined) { + isLoadingPage.value = false; + } + } + }, + + /** + * Load page data with unified request management + */ + async loadPageData({ mapInstance, pointsStore, points, currentPage, requestState }) { + // Get the current page value + const page = currentPage?.value ?? currentPage; + + // Cancel any ongoing requests through unified state + if (requestState?.pointsController) { + requestState.pointsController.abort(); + requestState.pointsController = null; + } + + // Clear existing points + if (points) { + points = pointsHelper.clearPoints(points, mapInstance); + } + + const bounds = mapInstance.getBounds(); + const bbox = { + left: bounds.getWest(), + bottom: bounds.getSouth(), + right: bounds.getEast(), + top: bounds.getNorth(), + }; + const zoom = Math.round(mapInstance.getZoom()); + + // Get filters from URL + const filters = urlHelper.stateManager.getFiltersFromURL(); + + // Create abort controller + const controller = new AbortController(); + + if (requestState) { + requestState.pointsController = controller; + } + + try { + const result = await pointsHelper.loadPointsData({ + mapInstance, + pointsStore, + zoom, + bbox, + year: filters.year, + fromDate: filters.fromDate, + toDate: filters.toDate, + username: filters.username, + page: page, + abortSignal: controller.signal, + }); + + // Only update if request wasn't aborted + if (!controller.signal.aborted) { + const paginationData = pointsHelper.getPaginationData(pointsStore); + + if (requestState?.pointsController === controller) { + requestState.pointsController = null; + } + + return { + points: result, + paginationData, + }; + } + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Load page data error:', error); + } + + if (requestState?.pointsController === controller) { + requestState.pointsController = null; + } + + throw error; + } + }, + + /** + * Load points statistics with unified request management + */ + async loadPointsStats({ mapInstance, currentZoom, requestState }) { + if (currentZoom < CLUSTER_ZOOM_THRESHOLD) { + return null; + } + + // Cancel any ongoing stats request through unified state + if (requestState?.statsController) { + requestState.statsController.abort(); + requestState.statsController = null; + } + + const statsController = new AbortController(); + + if (requestState) { + requestState.statsController = statsController; + } + + try { + const zoom = Math.round(mapInstance.getZoom()); + const filters = urlHelper.stateManager.getFiltersFromURL(); + + const stats = await pointsHelper.loadPointsStats({ + mapInstance, + zoom, + year: filters.year, + fromDate: filters.fromDate, + toDate: filters.toDate, + username: filters.username, + abortSignal: statsController.signal, + }); + + // Only return if request wasn't aborted + if (!statsController.signal.aborted) { + if (requestState?.statsController === statsController) { + requestState.statsController = null; + } + return stats; + } + + return null; + } catch (error) { + if (error.name !== 'AbortError') { + console.error('Error loading points stats:', error); + } + + if (requestState?.statsController === statsController) { + requestState.statsController = null; + } + + return null; + } + }, + + /** + * Preload adjacent pages for smoother navigation + */ + async preloadAdjacentPages({ currentPage, totalPages, mapInstance, pointsStore }) { + const current = currentPage?.value ?? currentPage; + const total = totalPages?.value ?? totalPages; + + const pagesToPreload = []; + + // Preload previous page if exists + if (current > 1) { + pagesToPreload.push(current - 1); + } + + // Preload next page if exists + if (current < total) { + pagesToPreload.push(current + 1); + } + + // Use low priority fetch for preloading + for (const page of pagesToPreload) { + // Create a low-priority request + requestIdleCallback(() => { + this.preloadPage({ page, mapInstance, pointsStore }); + }); + } + }, + + /** + * Preload a specific page (for cache warming) + */ + async preloadPage({ page, mapInstance, pointsStore }) { + const bounds = mapInstance.getBounds(); + const bbox = { + left: bounds.getWest(), + bottom: bounds.getSouth(), + right: bounds.getEast(), + top: bounds.getNorth(), + }; + const zoom = Math.round(mapInstance.getZoom()); + const filters = urlHelper.stateManager.getFiltersFromURL(); + + try { + // Make a low-priority request without rendering + await pointsStore.PRELOAD_POINTS?.({ + zoom, + bbox, + layers: [], + year: filters.year, + fromDate: filters.fromDate, + toDate: filters.toDate, + username: filters.username, + page: page, + }); + } catch (error) { + // Silently fail for preload requests + console.debug('Preload failed for page', page); + } + }, + + /** + * Get pagination state for debugging + */ + getPaginationState() { + return paginationState.state; + }, + + /** + * Reset all pagination tracking + */ + resetTracking() { + paginationState.reset(); + }, +}; + +export default paginationHelper; diff --git a/resources/js/views/Maps/helpers/pointsHelper.js b/resources/js/views/Maps/helpers/pointsHelper.js new file mode 100644 index 000000000..c91d9dce5 --- /dev/null +++ b/resources/js/views/Maps/helpers/pointsHelper.js @@ -0,0 +1,480 @@ +import { CLUSTER_ZOOM_THRESHOLD } from './constants.js'; +import { addGlifyPoints, removeGlifyPoints, clearGlifyReferences } from './glifyHelpers.js'; +import { popupHelper } from './popup.js'; +import { urlHelper } from './urlHelper.js'; + +/** + * Request deduplication and management + */ +class RequestManager { + constructor() { + this.activeRequests = new Map(); + this.requestHashes = new Map(); + } + + /** + * Generate a hash for request deduplication + */ + generateRequestHash(params) { + const { zoom, bbox, year, fromDate, toDate, username, page } = params; + return JSON.stringify({ + z: Math.round(zoom), + b: [ + Math.round(bbox.left * 1000), + Math.round(bbox.bottom * 1000), + Math.round(bbox.right * 1000), + Math.round(bbox.top * 1000), + ], + y: year, + f: fromDate, + t: toDate, + u: username, + p: page, + }); + } + + /** + * Check if we should skip this request (duplicate in flight) + */ + shouldSkipRequest(hash) { + return this.activeRequests.has(hash); + } + + /** + * Register a new request + */ + registerRequest(hash, controller) { + this.activeRequests.set(hash, controller); + } + + /** + * Clear a completed request + */ + clearRequest(hash) { + this.activeRequests.delete(hash); + } + + /** + * Abort all active requests + */ + abortAll() { + this.activeRequests.forEach((controller) => { + if (controller && typeof controller.abort === 'function') { + controller.abort(); + } + }); + this.activeRequests.clear(); + } +} + +const requestManager = new RequestManager(); + +export const pointsHelper = { + /** + * Handle points view with proper abort signal support + */ + async handlePointsView({ + mapInstance, + pointsStore, + clusters, + prevZoom, + zoom, + bbox, + year, + fromDate, + toDate, + username, + t, + page = 1, + abortSignal = null, + }) { + // Clear cluster layer if transitioning from cluster mode + if (prevZoom < CLUSTER_ZOOM_THRESHOLD) { + clusters.clearLayers(); + } + + // Generate request hash for deduplication + const requestHash = requestManager.generateRequestHash({ + zoom, + bbox, + year, + fromDate, + toDate, + username, + page, + }); + + // Check if this exact request is already in flight + if (requestManager.shouldSkipRequest(requestHash)) { + console.log('Skipping duplicate request'); + return null; + } + + // Create abort controller if not provided + const controller = abortSignal ? { signal: abortSignal } : new AbortController(); + const signal = controller.signal || controller; + + // Register this request + requestManager.registerRequest(requestHash, controller); + + try { + const layers = []; + + // Add abort signal support to store request + const response = await pointsStore.GET_POINTS({ + zoom, + bbox, + layers, + year, + fromDate, + toDate, + username, + page, + signal, // Pass abort signal to store + }); + + // Check if request was aborted + if (signal.aborted) { + return null; + } + + // Add the new points + const points = addGlifyPoints(pointsStore.pointsGeojson, mapInstance, t); + + // Check for photo in URL using centralized helper + const photoId = urlHelper.getPhotoIdFromURL(); + + if (photoId && pointsStore.pointsGeojson?.features?.length) { + const feature = pointsStore.pointsGeojson.features.find((f) => f.properties?.id === photoId); + + if (feature) { + // Use requestAnimationFrame instead of setTimeout for better performance + requestAnimationFrame(() => { + if (!signal.aborted) { + popupHelper.renderLeafletPopup( + feature, + [feature.geometry.coordinates[1], feature.geometry.coordinates[0]], + t, + mapInstance + ); + } + }); + } + } + + return points; + } catch (error) { + if (error.name === 'AbortError') { + console.log('Points request aborted'); + return null; + } + console.error('Error loading points:', error); + throw error; + } finally { + // Clear request from tracking + requestManager.clearRequest(requestHash); + } + }, + + /** + * Load points data for pagination with abort support + */ + async loadPointsData({ + mapInstance, + pointsStore, + zoom, + bbox, + year = null, + fromDate = null, + toDate = null, + username = null, + page = 1, + abortSignal = null, + }) { + const requestHash = requestManager.generateRequestHash({ + zoom, + bbox, + year, + fromDate, + toDate, + username, + page, + }); + + if (requestManager.shouldSkipRequest(requestHash)) { + console.log('Skipping duplicate pagination request'); + return null; + } + + const controller = abortSignal ? { signal: abortSignal } : new AbortController(); + const signal = controller.signal || controller; + + requestManager.registerRequest(requestHash, controller); + + try { + const layers = []; + + await pointsStore.GET_POINTS({ + zoom, + bbox, + layers, + year, + fromDate, + toDate, + username, + page, + signal, + }); + + if (signal.aborted) { + return null; + } + + // Add the new points with translation fallback + const points = addGlifyPoints(pointsStore.pointsGeojson, mapInstance, null); + + // Check if we should open a popup after loading points + const photoId = urlHelper.getPhotoIdFromURL(); + + if (photoId && pointsStore.pointsGeojson?.features?.length) { + const feature = pointsStore.pointsGeojson.features.find((f) => f.properties?.id === photoId); + + if (feature) { + requestAnimationFrame(() => { + if (!signal.aborted) { + popupHelper.renderLeafletPopup( + feature, + [feature.geometry.coordinates[1], feature.geometry.coordinates[0]], + null, // Translation might not be available + mapInstance + ); + } + }); + } + } + + return points; + } catch (error) { + if (error.name === 'AbortError') { + return null; + } + console.error('Load points data error:', error); + throw error; + } finally { + requestManager.clearRequest(requestHash); + } + }, + + /** + * Clear points from map with proper cleanup + */ + clearPoints(points, mapInstance) { + if (points) { + // Ensure proper WebGL cleanup + removeGlifyPoints(points, mapInstance); + clearGlifyReferences(); + } + return null; + }, + + /** + * Load statistics for points in current view with abort support + */ + async loadPointsStats({ + mapInstance, + zoom, + year = null, + fromDate = null, + toDate = null, + username = null, + abortSignal = null, + }) { + const bounds = mapInstance.getBounds(); + const bbox = { + left: bounds.getWest(), + bottom: bounds.getSouth(), + right: bounds.getEast(), + top: bounds.getNorth(), + }; + + // Generate hash for stats request + const requestHash = requestManager.generateRequestHash({ + zoom, + bbox, + year, + fromDate, + toDate, + username, + page: 0, // Stats don't have pages + }); + + if (requestManager.shouldSkipRequest(requestHash)) { + console.log('Skipping duplicate stats request'); + return null; + } + + const controller = abortSignal ? { signal: abortSignal } : new AbortController(); + const signal = controller.signal || controller; + + requestManager.registerRequest(requestHash, controller); + + // Build stats request parameters + const params = new URLSearchParams({ + zoom: zoom.toString(), + 'bbox[left]': bbox.left.toString(), + 'bbox[bottom]': bbox.bottom.toString(), + 'bbox[right]': bbox.right.toString(), + 'bbox[top]': bbox.top.toString(), + }); + + // Add optional filters + if (year) params.append('year', year.toString()); + if (fromDate) params.append('from', fromDate); + if (toDate) params.append('to', toDate); + if (username) params.append('username', username); + + try { + const response = await fetch(`/api/points/stats?${params.toString()}`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + signal, + }); + + if (signal.aborted) { + return null; + } + + if (response.ok) { + const data = await response.json(); + return data.data || null; + } else { + console.error('Failed to load points stats:', response.status); + return null; + } + } catch (error) { + if (error.name === 'AbortError') { + return null; + } + console.error('Error loading points stats:', error); + return null; + } finally { + requestManager.clearRequest(requestHash); + } + }, + + /** + * Check if we should show points (above cluster zoom threshold) + */ + shouldShowPoints(zoom) { + return zoom >= CLUSTER_ZOOM_THRESHOLD; + }, + + /** + * Get points data from store + */ + getPointsData(pointsStore) { + return pointsStore.pointsGeojson; + }, + + /** + * Get pagination data from store with multiple fallback locations + */ + getPaginationData(pointsStore) { + // Primary location + if (pointsStore.pointsPagination) { + return pointsStore.pointsPagination; + } + + // Secondary location + if (pointsStore.pagination) { + return pointsStore.pagination; + } + + // Check in geojson meta + if (pointsStore.pointsGeojson?.meta) { + return { + current_page: pointsStore.pointsGeojson.meta.current_page || 1, + last_page: pointsStore.pointsGeojson.meta.last_page || 1, + per_page: pointsStore.pointsGeojson.meta.per_page || 300, + total: pointsStore.pointsGeojson.meta.total || 0, + }; + } + + // Check if pagination is at root of pointsGeojson + if (pointsStore.pointsGeojson?.current_page !== undefined) { + return { + current_page: pointsStore.pointsGeojson.current_page || 1, + last_page: pointsStore.pointsGeojson.last_page || 1, + per_page: pointsStore.pointsGeojson.per_page || 300, + total: pointsStore.pointsGeojson.total || 0, + }; + } + + return null; + }, + + /** + * Get filters from URL using centralized helper + */ + getFiltersFromURL() { + return urlHelper.stateManager.getFiltersFromURL(); + }, + + /** + * Check if pagination should be reset based on movement/filter changes + */ + shouldResetPagination(prevState, currentState) { + if (!prevState || !currentState) return false; + + // Reset if filters changed + if (JSON.stringify(prevState.filters) !== JSON.stringify(currentState.filters)) { + return true; + } + + // Reset if moved more than 50% of viewport + if (prevState.bbox && currentState.bbox) { + const viewportWidth = Math.abs(prevState.bbox.right - prevState.bbox.left); + const viewportHeight = Math.abs(prevState.bbox.top - prevState.bbox.bottom); + + const deltaX = Math.abs(currentState.bbox.left - prevState.bbox.left); + const deltaY = Math.abs(currentState.bbox.bottom - prevState.bbox.bottom); + + if (deltaX > viewportWidth * 0.5 || deltaY > viewportHeight * 0.5) { + return true; + } + } + + // Reset if zoom changed significantly (more than 1 level) + if (Math.abs((prevState.zoom || 0) - (currentState.zoom || 0)) > 1) { + return true; + } + + return false; + }, + + /** + * Get popup options for points + */ + getPopupOptions() { + return popupHelper.popupOptions; + }, + + /** + * Get popup content for a point feature + */ + getPopupContent(properties, url, t) { + return popupHelper.getContent(properties, url, t); + }, + + /** + * Cleanup all active requests + */ + cleanup() { + requestManager.abortAll(); + }, +}; + +export default pointsHelper; diff --git a/resources/js/views/Maps/helpers/popup.js b/resources/js/views/Maps/helpers/popup.js new file mode 100644 index 000000000..ea308b265 --- /dev/null +++ b/resources/js/views/Maps/helpers/popup.js @@ -0,0 +1,459 @@ +import moment from 'moment'; +import L from 'leaflet'; + +/** + * HTML Sanitization utility to prevent XSS attacks + */ +const htmlSanitizer = { + /** + * Escape HTML special characters to prevent XSS + */ + escapeHtml(str) { + if (str === null || str === undefined) return ''; + + const div = document.createElement('div'); + div.textContent = String(str); + return div.innerHTML; + }, + + /** + * Sanitize URL for safe href usage + */ + sanitizeUrl(url) { + if (!url) return ''; + + try { + const parsed = new URL(url); + // Only allow http(s) protocols for external links + if (!['http:', 'https:'].includes(parsed.protocol)) { + return ''; + } + return url; + } catch { + // If URL parsing fails, check for relative URLs + if (url.startsWith('/')) { + return url; + } + return ''; + } + }, +}; + +export const popupHelper = { + popupOptions: { + minWidth: window.innerWidth >= 768 ? 350 : 200, + maxWidth: 600, + maxHeight: window.innerWidth >= 768 ? 800 : 500, + closeButton: true, + className: 'custom-popup', + }, + + /** + * Returns the HTML that displays the Photo popups with XSS protection + */ + getContent: (properties, url = null, t) => { + // Provide fallback for translation function + const translate = t || ((key) => key); + + // Sanitize all user-provided content + const safeProps = { + filename: htmlSanitizer.sanitizeUrl(properties.filename) || '/assets/images/waiting.png', + name: htmlSanitizer.escapeHtml(properties.name), + username: htmlSanitizer.escapeHtml(properties.username), + team: htmlSanitizer.escapeHtml(properties.team), + datetime: htmlSanitizer.escapeHtml(properties.datetime), + picked_up: properties.picked_up, + summary: properties.summary, + social: { + personal: htmlSanitizer.sanitizeUrl(properties.social?.personal), + twitter: htmlSanitizer.sanitizeUrl(properties.social?.twitter), + facebook: htmlSanitizer.sanitizeUrl(properties.social?.facebook), + instagram: htmlSanitizer.sanitizeUrl(properties.social?.instagram), + linkedin: htmlSanitizer.sanitizeUrl(properties.social?.linkedin), + reddit: htmlSanitizer.sanitizeUrl(properties.social?.reddit), + }, + admin: properties.admin + ? { + name: htmlSanitizer.escapeHtml(properties.admin.name), + username: htmlSanitizer.escapeHtml(properties.admin.username), + created_at: properties.admin.created_at, + removedTags: properties.admin.removedTags, + } + : null, + }; + + const isTrustedUser = safeProps.filename !== '/assets/images/waiting.png'; + const tags = popupHelper.parseSummaryTags(safeProps.summary, isTrustedUser, translate); + const takenDateString = popupHelper.formatPhotoTakenTime(safeProps.datetime, translate); + const userFormatted = popupHelper.formatUser(safeProps.name, safeProps.username, safeProps.team, translate); + const isLitterArt = popupHelper.checkIfLitterArt(safeProps.summary); + const hasTags = tags && tags !== translate('Awaiting verification'); + const pickedUpStatus = popupHelper.formatPickedUpStatus(safeProps.picked_up, hasTags, translate); + const hasSocialLinks = Object.values(safeProps.social).some((link) => link); + const adminInfo = safeProps.admin ? popupHelper.getAdminInfo(safeProps.admin, translate) : null; + const removedTags = safeProps.admin?.removedTags + ? popupHelper.getRemovedTags(safeProps.admin.removedTags, translate) + : ''; + + // Build social links HTML + const socialLinksHtml = hasSocialLinks ? popupHelper.buildSocialLinks(safeProps.social) : ''; + + return ` + ${translate('Photo')} +
+
+ ${tags ? `` : '
'} + ${pickedUpStatus && !isLitterArt ? `` : ''} +
+ + ${userFormatted ? `` : ''} + ${socialLinksHtml} + ${url ? `` : ''} + ${adminInfo ? `

${adminInfo}

` : ''} + ${removedTags ? `

${removedTags}

` : ''} +
`; + }, + + /** + * Build social links HTML with proper sanitization + */ + buildSocialLinks(social) { + const links = []; + const iconMap = { + personal: 'fa-link', + twitter: 'fa-twitter', + facebook: 'fa-facebook', + instagram: 'fa-instagram', + linkedin: 'fa-linkedin', + reddit: 'fa-reddit', + }; + + Object.entries(social).forEach(([platform, url]) => { + if (url) { + const ariaLabel = `Visit ${platform} profile`; + links.push( + `` + + `` + + `` + ); + } + }); + + return links.length > 0 ? `` : ''; + }, + + /** + * Parse tags from the summary data structure with XSS protection + */ + parseSummaryTags: (summary, isTrustedUser, translate) => { + if (!summary?.tags) { + return isTrustedUser ? translate('Not tagged yet') : translate('Awaiting verification'); + } + + const tagLines = []; + + // Iterate through categories + Object.entries(summary.tags).forEach(([category, objects]) => { + // Sanitize category name + const safeCategory = htmlSanitizer.escapeHtml(category); + + // Iterate through objects in each category + Object.entries(objects).forEach(([objectKey, data]) => { + const safeObjectKey = htmlSanitizer.escapeHtml(objectKey); + const quantity = parseInt(data.quantity) || 0; + + // Add main item with quantity + tagLines.push(`${safeCategory} - ${safeObjectKey}: ${quantity}`); + + // Add materials if present + if (data.materials && typeof data.materials === 'object') { + Object.entries(data.materials).forEach(([material, count]) => { + const safeMaterial = htmlSanitizer.escapeHtml(material); + const safeCount = parseInt(count) || 0; + tagLines.push(` ${safeMaterial}: ${safeCount}`); + }); + } + + // Add brands if present + if (data.brands && typeof data.brands === 'object') { + Object.entries(data.brands).forEach(([brand, count]) => { + const safeBrand = htmlSanitizer.escapeHtml(brand); + const safeCount = parseInt(count) || 0; + tagLines.push(` ${safeBrand}: ${safeCount}`); + }); + } + + // Add custom tags if present + if (Array.isArray(data.custom_tags)) { + data.custom_tags.forEach((customTag) => { + const safeTag = htmlSanitizer.escapeHtml(customTag); + tagLines.push(` ${safeTag}`); + }); + } + }); + }); + + return tagLines.length > 0 + ? tagLines.join('
') + : isTrustedUser + ? translate('Not tagged yet') + : translate('Awaiting verification'); + }, + + /** + * Check if this is litter art based on summary data + */ + checkIfLitterArt: (summary) => { + if (!summary?.tags) return false; + + return Object.keys(summary.tags).some( + (category) => + category === 'art' || + (typeof summary.tags[category] === 'object' && + Object.keys(summary.tags[category]).some((item) => String(item).toLowerCase().includes('art'))) + ); + }, + + /** + * Format user with team information + */ + formatUser: (name, username, team, translate) => { + if (!name && !username) return ''; + + const parts = [translate('By')]; + + if (name) parts.push(name); + if (username) parts.push(`@${username}`); + if (team) parts.push(`@ ${team}`); + + return parts.join(' '); + }, + + /** + * Format picked up status - show only if not null and has tags + */ + formatPickedUpStatus: (pickedUp, hasTags, translate) => { + // Hide if null or if not tagged + if (pickedUp === null || pickedUp === undefined || !hasTags) { + return ''; + } + + return `${translate('Picked up')}: ${pickedUp ? translate('True') : translate('False')}`; + }, + + /** + * Format photo taken time + */ + formatPhotoTakenTime: (takenOn, translate) => { + if (!takenOn) return ''; + + try { + const date = moment(takenOn); + if (!date.isValid()) return ''; + + return `${translate('Taken on')}: ${date.format('LLL')}`; + } catch { + return ''; + } + }, + + /** + * Get admin info with XSS protection + */ + getAdminInfo: (admin, translate) => { + const parts = [translate('These tags were updated by')]; + + if (admin.name || admin.username) { + if (admin.name) parts.push(admin.name); + if (admin.username) parts.push(`@${admin.username}`); + } else { + parts.push(translate('an admin')); + } + + if (admin.created_at) { + try { + const date = moment(admin.created_at); + if (date.isValid()) { + parts.push(`
${translate('at')} ${date.format('LLL')}`); + } + } catch { + // Ignore invalid dates + } + } + + return parts.join(' '); + }, + + /** + * Get removed tags info with XSS protection + */ + getRemovedTags: (removedTags, translate) => { + const lines = [translate('Removed Tags') + ':']; + + if (Array.isArray(removedTags.customTags)) { + const safeTags = removedTags.customTags.map((tag) => htmlSanitizer.escapeHtml(tag)).join(' '); + if (safeTags) lines.push(safeTags); + } + + if (removedTags.tags && typeof removedTags.tags === 'object') { + Object.entries(removedTags.tags).forEach(([category, items]) => { + const safeCategory = htmlSanitizer.escapeHtml(category); + + if (typeof items === 'object') { + const itemStrings = Object.entries(items).map(([key, value]) => { + const safeKey = htmlSanitizer.escapeHtml(key); + const safeValue = parseInt(value) || 0; + return `${safeCategory} - ${safeKey}(${safeValue})`; + }); + + if (itemStrings.length > 0) { + lines.push(itemStrings.join(', ')); + } + } + }); + } + + return lines.length > 1 ? lines.join('
') : ''; + }, + + /** + * Scroll popup to bottom for tall images + */ + scrollPopupToBottom: (event) => { + const popup = event.popup?.getElement()?.querySelector('.leaflet-popup-content'); + if (popup) { + requestAnimationFrame(() => { + popup.scrollTop = popup.scrollHeight; + }); + } + }, + + /** + * Render a Leaflet popup for a specific feature + */ + renderLeafletPopup: (feature, latlng, t, mapInstance) => { + // Provide translation fallback + const translate = t || ((key) => key); + + const content = popupHelper.getContent(feature.properties, null, translate); + + const popup = L.popup(popupHelper.popupOptions).setLatLng(latlng).setContent(content).openOn(mapInstance); + + // Scroll popup to bottom after opening (for tall images) + popup.on('popupopen', popupHelper.scrollPopupToBottom); + + return popup; + }, + + /** + * Get cleanup popup content with XSS protection + */ + getCleanupContent: (properties, userId = null, translate = (key) => key) => { + const safeName = htmlSanitizer.escapeHtml(properties.name); + const safeDescription = htmlSanitizer.escapeHtml(properties.description); + const safeStartsAt = htmlSanitizer.escapeHtml(properties.startsAt); + const safeTimeDiff = htmlSanitizer.escapeHtml(properties.timeDiff); + const userCount = parseInt(properties.users?.length) || 0; + const inviteLink = htmlSanitizer.escapeHtml(properties.invite_link); + + let userCleanupInfo = ''; + + if (userId === null) { + userCleanupInfo = translate('Log in to join the cleanup'); + } else { + const userInCleanup = properties.users?.some((user) => user.user_id === userId); + + if (userInCleanup) { + userCleanupInfo = `

${translate('You have joined the cleanup')}

`; + + if (userId === properties.user_id) { + userCleanupInfo += `

${translate('You cannot leave the cleanup you created')}

`; + } else { + userCleanupInfo += `${translate('Click here to leave')}`; + } + } else { + userCleanupInfo = `${translate('Click here to join')}`; + } + } + + const personText = userCount === 1 ? translate('person') : translate('people'); + + return ` +
+

${safeName}

+

${translate('Attending')}: ${userCount} ${personText}

+

${safeDescription}

+

${translate('When')}: ${safeStartsAt}

+

${safeTimeDiff}

+ ${userCleanupInfo} +
+ `; + }, + + /** + * Get merchant popup content with XSS protection + */ + getMerchantContent: (properties, translate = (key) => key) => { + const safeName = htmlSanitizer.escapeHtml(properties.name); + const safeAbout = htmlSanitizer.escapeHtml(properties.about); + const safeWebsite = htmlSanitizer.sanitizeUrl(properties.website); + + let photos = ''; + if (Array.isArray(properties.photos)) { + photos = properties.photos + .map((photo) => { + const safePath = htmlSanitizer.sanitizeUrl(photo.filepath); + if (safePath) { + return `
+ ${translate('Merchant photo')} +
`; + } + return ''; + }) + .join(''); + } + + const websiteLink = safeWebsite + ? `${safeWebsite}` + : ''; + + return ` +
+ ${ + photos + ? ` +
+
${photos}
+
+
+
+ ` + : '' + } +

${translate('Name')}: ${safeName}

+ ${safeAbout ? `

${translate('About this merchant')}: ${safeAbout}

` : ''} + ${websiteLink ? `

${translate('Website')}: ${websiteLink}

` : ''} +
+ `; + }, +}; + +export default popupHelper; diff --git a/resources/js/views/Maps/helpers/urlHelper.js b/resources/js/views/Maps/helpers/urlHelper.js new file mode 100644 index 000000000..a66086fb8 --- /dev/null +++ b/resources/js/views/Maps/helpers/urlHelper.js @@ -0,0 +1,279 @@ +import { CLUSTER_ZOOM_THRESHOLD, MAX_ZOOM, MIN_ZOOM } from './constants.js'; +import L from 'leaflet'; + +/** + * URL State Manager - Single source of truth for URL operations + * Handles all URL parameter management with consistent push/replace strategies + */ +class URLStateManager { + constructor() { + // Define parameter categories + this.mapParams = ['lat', 'lon', 'zoom']; + this.viewParams = ['photo', 'page', 'open', 'load']; + this.filterParams = ['year', 'fromDate', 'toDate', 'username']; + this.allParams = [...this.mapParams, ...this.viewParams, ...this.filterParams]; + } + + /** + * Get photo ID from URL (handles both 'photo' and 'photoId' for backwards compatibility) + */ + getPhotoIdFromURL() { + const urlParams = new URLSearchParams(window.location.search); + const photoId = urlParams.get('photo') || urlParams.get('photoId'); + return photoId ? parseInt(photoId) : null; + } + + /** + * Normalize photo parameter in URL (converts photoId to photo) + */ + normalizePhotoParam() { + const url = new URL(window.location.href); + const photoId = url.searchParams.get('photoId'); + + if (photoId) { + url.searchParams.delete('photoId'); + url.searchParams.set('photo', photoId); + this.commitURL(url, true); // Use replace for normalization + return parseInt(photoId); + } + + const photo = url.searchParams.get('photo'); + return photo ? parseInt(photo) : null; + } + + /** + * Update map location in URL (always replace for continuous updates) + */ + updateMapLocation(lat, lon, zoom) { + const url = new URL(window.location.href); + url.searchParams.set('lat', lat.toFixed(6)); + url.searchParams.set('lon', lon.toFixed(6)); + url.searchParams.set('zoom', zoom.toFixed(2)); + this.commitURL(url, true); // Always replace for map movement + } + + /** + * Update drawer state in URL + */ + updateDrawerState(isOpen, isUserAction = true) { + const url = new URL(window.location.href); + + if (isOpen) { + url.searchParams.set('open', 'true'); + url.searchParams.set('load', 'true'); + } else { + url.searchParams.set('open', 'false'); + // Keep load=true if it was already set + if (!url.searchParams.has('load')) { + url.searchParams.set('load', 'true'); + } + } + + // Use push for user actions, replace for programmatic + this.commitURL(url, !isUserAction); + } + + /** + * Update photo ID in URL + */ + updatePhotoId(photoId, isUserAction = true) { + const url = new URL(window.location.href); + + if (photoId) { + url.searchParams.set('photo', photoId); + } else { + url.searchParams.delete('photo'); + url.searchParams.delete('photoId'); + } + + this.commitURL(url, !isUserAction); + } + + /** + * Update page number in URL + */ + updatePage(page, isUserAction = true) { + const url = new URL(window.location.href); + + if (page > 1) { + url.searchParams.set('page', page.toString()); + } else { + url.searchParams.delete('page'); + } + + // Use push for user navigation, replace for auto-resets + this.commitURL(url, !isUserAction); + } + + /** + * Get current filters from URL + */ + getFiltersFromURL() { + const params = new URLSearchParams(window.location.search); + return { + year: parseInt(params.get('year')) || null, + fromDate: params.get('fromDate') || null, + toDate: params.get('toDate') || null, + username: params.get('username') || null, + page: parseInt(params.get('page')) || 1, + }; + } + + /** + * Clear specific parameter groups + */ + clearParamGroup(group) { + const url = new URL(window.location.href); + const params = + group === 'map' + ? this.mapParams + : group === 'view' + ? this.viewParams + : group === 'filter' + ? this.filterParams + : this.allParams; + + params.forEach((param) => url.searchParams.delete(param)); + this.commitURL(url, true); + } + + /** + * Check if drawer should be open from URL + */ + shouldDrawerBeOpen() { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get('open') === 'true'; + } + + /** + * Check if instant load is enabled + */ + hasLoadParam() { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get('load') === 'true'; + } + + /** + * Get location parameters from URL + */ + getLocationFromURL() { + const params = new URLSearchParams(window.location.search); + return { + lat: parseFloat(params.get('lat')) || 0, + lon: parseFloat(params.get('lon')) || 0, + zoom: parseFloat(params.get('zoom')) || MIN_ZOOM, + photo: this.getPhotoIdFromURL(), + load: params.get('load') === 'true', + }; + } + + /** + * Commit URL changes with proper history management + */ + commitURL(url, useReplace = true) { + const method = useReplace ? 'replaceState' : 'pushState'; + window.history[method](null, '', url.toString()); + } +} + +// Create singleton instance +const urlStateManager = new URLStateManager(); + +// Export legacy interface for backwards compatibility +export const urlHelper = { + // Photo management + getPhotoIdFromURL: () => urlStateManager.getPhotoIdFromURL(), + normalizePhotoParam: () => urlStateManager.normalizePhotoParam(), + removePhotoFromURL: () => urlStateManager.updatePhotoId(null, false), + + // Location management + updateLocationInURL: (mapInstance) => { + const center = mapInstance.getCenter(); + urlStateManager.updateMapLocation(center.lat, center.lng, mapInstance.getZoom()); + }, + + // Fly to location functionality + flyToLocationFromURL: (mapInstance) => { + const location = urlStateManager.getLocationFromURL(); + + // Validate coordinates + const latitude = location.lat < -85 || location.lat > 85 ? 0 : location.lat; + const longitude = location.lon < -180 || location.lon > 180 ? 0 : location.lon; + const zoom = location.zoom < MIN_ZOOM || location.zoom > MAX_ZOOM ? MIN_ZOOM : location.zoom; + + if (latitude === 0 && longitude === 0 && zoom === MIN_ZOOM) return; + + if (location.load) { + urlHelper.setViewInstantly({ latitude, longitude, zoom, photoId: location.photo }, mapInstance); + } else { + urlHelper.flyToLocation({ latitude, longitude, zoom, photoId: location.photo }, mapInstance); + } + }, + + setViewInstantly: (location, mapInstance) => { + const latLng = L.latLng(location.latitude, location.longitude); + const zoom = + location.photoId && Math.round(location.zoom) < CLUSTER_ZOOM_THRESHOLD + ? CLUSTER_ZOOM_THRESHOLD + : location.zoom; + + // Calculate offset for better photo viewing + const mapSize = mapInstance.getSize(); + const originalPoint = mapInstance.project(latLng, zoom); + const offsetY = mapSize.y * 0.225; + const shiftedPoint = originalPoint.subtract([0, offsetY]); + const targetLatLng = mapInstance.unproject(shiftedPoint, zoom); + + mapInstance.setView(targetLatLng, zoom, { animate: false }); + }, + + flyToLocation: (location, mapInstance) => { + const latLng = L.latLng(location.latitude, location.longitude); + const zoom = + location.photoId && Math.round(location.zoom) < CLUSTER_ZOOM_THRESHOLD + ? CLUSTER_ZOOM_THRESHOLD + : location.zoom; + + const mapSize = mapInstance.getSize(); + const originalPoint = mapInstance.project(latLng, zoom); + const offsetY = mapSize.y * 0.225; + const shiftedPoint = originalPoint.subtract([0, offsetY]); + const targetLatLng = mapInstance.unproject(shiftedPoint, zoom); + + mapInstance.flyTo(targetLatLng, zoom, { + animate: true, + duration: location.duration ?? 5, + }); + }, + + updateUrlPhotoIdAndFlyToLocation: ({ latitude, longitude, photoId, mapInstance }) => { + urlStateManager.updatePhotoId(photoId, true); // User clicked photo + + const zoom = 17; + const currentZoom = Math.round(mapInstance.getZoom()); + const distance = mapInstance.distance(mapInstance.getCenter(), [latitude, longitude]); + + // Short animation for nearby points + const duration = currentZoom >= CLUSTER_ZOOM_THRESHOLD && distance <= 2000 ? 1 : 5; + + urlHelper.flyToLocation({ latitude, longitude, zoom, photoId, duration }, mapInstance); + }, + + // Drawer state + updateDrawerStateInURL: (isOpen, isUserAction = true) => { + urlStateManager.updateDrawerState(isOpen, isUserAction); + }, + + shouldDrawerBeOpen: () => urlStateManager.shouldDrawerBeOpen(), + setLoadInURL: () => { + const url = new URL(window.location.href); + url.searchParams.set('load', 'true'); + urlStateManager.commitURL(url, true); + }, + hasLoadParam: () => urlStateManager.hasLoadParam(), + + // Export the manager for advanced use + stateManager: urlStateManager, +}; + +export default urlHelper; diff --git a/resources/js/views/Maps/styles/GlobalMap.css b/resources/js/views/Maps/styles/GlobalMap.css new file mode 100644 index 000000000..4cca9ec59 --- /dev/null +++ b/resources/js/views/Maps/styles/GlobalMap.css @@ -0,0 +1,212 @@ +/* GlobalMap.css */ + +/* Main Container */ +.global-map-container { + height: calc(100% - 80px); + margin: 0; + position: relative; + z-index: 1; +} + +#openlittermap { + height: 100%; + width: 100%; + margin: 0; + position: relative; +} + +/* Keep map full width - drawer overlays on top */ +/* No margin adjustments when drawer opens/closes */ + +/* Leaflet Popup Styles */ +.leaflet-popup-content { + margin: 0; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + overflow-y: auto; +} + +.leaflet-popup-content-wrapper { + padding: 0 !important; +} + +.leaflet-popup-content div:last-of-type { + margin-bottom: 0 !important; +} + +.leaflet-popup-content div:first-of-type { + margin-top: 0 !important; +} + +.leaflet-pane .leaflet-shadow-pane { + display: none; +} + +.leaflet-popup-close-button { + display: none !important; +} + +/* Litter Image Styles */ +.leaflet-litter-img-container { + position: relative; + padding: 1.2em; +} + +.leaflet-litter-img-container div { + color: black !important; + font-size: 12px; + word-break: break-word; + max-width: 220px; + margin: 4px 0; +} + +.leaflet-litter-img-container .team { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 180px; +} + +.leaflet-litter-img-container .link { + position: absolute; + bottom: 10px; + right: 16px; + font-size: 1.2rem; +} + +.leaflet-litter-img-container .social-container { + display: flex; + flex-direction: row; + gap: 0.5rem; + transform: translate(0, 5px); +} + +.leaflet-litter-img-container .social-container a { + width: 1.5rem; + font-size: 1.2rem; + margin-top: 0.25rem; +} + +.leaflet-litter-img-container .link:hover, +.leaflet-litter-img-container .social-container a:hover { + transform: scale(1.1); +} + +.leaflet-litter-img { + border-top-left-radius: 6px; + border-top-right-radius: 6px; + object-fit: cover; + cursor: pointer; +} + +/* Tablet and Above */ +@media (min-width: 768px) { + .leaflet-litter-img-container div { + font-size: 14px; + max-width: 300px; + margin: 10px 0; + } + + .leaflet-litter-img-container .team { + max-width: 280px; + } + + .leaflet-popup-content { + min-width: 350px; + max-width: 600px; + max-height: 800px; + } +} + +@media (max-width: 767px) { + .leaflet-popup-content { + min-width: 200px; + max-height: 500px; + } +} + +/* Point Markers */ +.verified-dot { + width: 8px; + height: 8px; + background-color: #14d145; + border-radius: 50%; + border: 1px solid white; +} + +.unverified-dot { + width: 8px; + height: 8px; + background-color: #6b7280; + border-radius: 50%; + border: 1px solid white; +} + +/* Cluster Markers */ +.marker-cluster-small, +.marker-cluster-medium, +.marker-cluster-large, +.leaflet-marker-icon.marker-cluster-small, +.leaflet-marker-icon.marker-cluster-medium, +.leaflet-marker-icon.marker-cluster-large { + background-clip: padding-box; + border-radius: 20px; + color: #4d4c4b !important; /* Set color at parent level */ +} + +.marker-cluster-small { + background-color: rgba(181, 226, 140, 0.6); +} + +.marker-cluster-small div { + background-color: rgba(110, 204, 57, 0.6); +} + +.marker-cluster-medium { + background-color: rgba(241, 211, 87, 0.6); +} + +.marker-cluster-medium div { + background-color: rgba(240, 194, 12, 0.6); +} + +.marker-cluster-large { + background-color: rgba(253, 156, 115, 0.6); +} + +.marker-cluster-large div { + background-color: rgba(241, 128, 23, 0.6); +} + +.marker-cluster-small .mi, +.marker-cluster-medium .mi, +.marker-cluster-large .mi { + width: 30px; + height: 30px; + margin-left: 5px; + margin-top: 5px; + text-align: center; + border-radius: 15px; + display: flex; + align-items: center; + justify-content: center; +} + +.marker-cluster-small .mi span, +.marker-cluster-medium .mi span, +.marker-cluster-large .mi span, +.marker-cluster-small span.mx-auto, +.marker-cluster-medium span.mx-auto, +.marker-cluster-large span.mx-auto, +.leaflet-marker-icon .mi span, +.leaflet-marker-icon span.mx-auto.my-auto, +.leaflet-marker-icon.marker-cluster-small span, +.leaflet-marker-icon.marker-cluster-medium span, +.leaflet-marker-icon.marker-cluster-large span, +.marker-cluster-small *, +.marker-cluster-medium *, +.marker-cluster-large * { + color: #4d4c4b !important; + font-weight: bold; + font-size: 12px; +} diff --git a/resources/js/views/Maps/styles/MapDrawer.css b/resources/js/views/Maps/styles/MapDrawer.css new file mode 100644 index 000000000..ac6daf3be --- /dev/null +++ b/resources/js/views/Maps/styles/MapDrawer.css @@ -0,0 +1,891 @@ +/* styles/MapDrawer.css */ + +.map-drawer { + position: fixed; + left: 0; + top: 80px; + height: 100vh; + max-height: calc(100vh - 80px); /* Prevent drawer from exceeding GlobalMap height */ + display: flex; + z-index: 1000; + transition: all 0.3s ease; + pointer-events: none; /* Allow clicks through when closed */ +} + +.map-drawer.open { + pointer-events: auto; /* Enable clicks when open */ +} + +.drawer-toggle { + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + background: rgba(31, 41, 55, 0.95); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 0 8px 8px 0; + padding: 12px 8px; + cursor: pointer; + box-shadow: 2px 0 10px rgba(0, 0, 0, 0.3); + transition: all 0.3s ease; + z-index: 1001; + color: #14d145; + pointer-events: auto; /* Toggle button always clickable */ +} + +.drawer-toggle:hover { + background: rgba(31, 41, 55, 1); + border-color: rgba(255, 255, 255, 0.3); +} + +.map-drawer.open .drawer-toggle { + left: 400px; +} + +.drawer-content { + width: 400px; + height: 100%; + max-height: calc(100vh - 80px); /* Match container max-height */ + background: rgba(31, 41, 55, 0.95); + backdrop-filter: blur(20px); + box-shadow: 2px 0 20px rgba(0, 0, 0, 0.5); + overflow-y: auto; + transform: translateX(-100%); + transition: transform 0.3s ease; + display: flex; + flex-direction: column; + color: white; +} + +.map-drawer.open .drawer-content { + transform: translateX(0); +} + +.drawer-header { + padding: 20px; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + position: sticky; + top: 0; + background: rgba(17, 24, 39, 0.95); + backdrop-filter: blur(10px); + z-index: 10; + flex-shrink: 0; /* Prevent header from shrinking */ +} + +.drawer-header h2 { + margin: 0 0 15px 0; + font-size: 24px; + color: white; +} + +.tabs { + display: flex; + gap: 10px; +} + +.tabs button { + padding: 8px 16px; + border: 1px solid rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.05); + color: rgba(255, 255, 255, 0.8); + border-radius: 6px; + cursor: pointer; + transition: all 0.2s; +} + +.tabs button:hover { + background: rgba(255, 255, 255, 0.1); + color: white; +} + +.tabs button.active { + background: #14d145; + color: white; + border-color: #14d145; +} + +.drawer-body { + padding: 20px; + flex: 1; + overflow-y: auto; /* Allow body to scroll independently */ +} + +.loading-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 200px; + color: rgba(255, 255, 255, 0.9); +} + +.spinner { + width: 40px; + height: 40px; + border: 4px solid rgba(255, 255, 255, 0.2); + border-top-color: #14d145; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +.error-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 200px; + color: #f87171; + text-align: center; + gap: 12px; +} + +.error-container p { + color: rgba(255, 255, 255, 0.9); +} + +.retry-btn { + background: #14d145; + color: white; + border: none; + padding: 8px 16px; + border-radius: 6px; + cursor: pointer; + transition: background 0.2s; +} + +.retry-btn:hover { + background: #12b83d; +} + +.no-data { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 200px; + color: rgba(255, 255, 255, 0.6); + font-size: 16px; + text-align: center; + gap: 12px; +} + +.no-data i { + color: rgba(255, 255, 255, 0.3); +} + +.stats-section { + margin-bottom: 30px; +} + +.stats-section h3 { + margin: 0 0 15px 0; + font-size: 18px; + color: white; +} + +.stats-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-bottom: 15px; +} + +.stat-card { + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + padding: 15px; + border-radius: 8px; + text-align: center; + border: 1px solid rgba(255, 255, 255, 0.2); + color: white; +} + +.stat-card.primary { + background: linear-gradient(135deg, #14d145 0%, #12b83d 100%); + color: white; + border: none; +} + +.stat-value { + font-size: 28px; + font-weight: 700; + margin-bottom: 4px; + color: white; +} + +.stat-card:not(.primary) .stat-value { + color: #4ade80; +} + +.stat-label { + font-size: 12px; + opacity: 0.9; +} + +.pickup-stats { + margin-top: 15px; +} + +.pickup-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + font-size: 14px; + font-weight: 500; + color: white; +} + +.pickup-percentage { + color: #4ade80; + font-weight: 600; +} + +.pickup-bar { + display: flex; + height: 40px; + border-radius: 8px; + overflow: hidden; + background: rgba(255, 255, 255, 0.1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.picked-up { + background: linear-gradient(90deg, #14d145, #12b83d); + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 12px; + font-weight: 500; +} + +.not-picked-up { + flex: 1; + background: rgba(239, 68, 68, 0.3); + display: flex; + align-items: center; + justify-content: center; + color: rgba(255, 255, 255, 0.8); + font-size: 12px; + font-weight: 500; +} + +.date-range { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 15px; + padding: 10px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border-radius: 6px; + flex-wrap: wrap; + gap: 8px; +} + +.date-text { + flex: 1; + min-width: 120px; + color: white; +} + +.metric-badge { + background: #14d145; + color: white; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; + white-space: nowrap; +} + +.chart-container { + margin: 15px 0; +} + +.simple-chart { + display: flex; + align-items: flex-end; + height: 150px; + gap: 2px; + padding: 10px; + background: rgba(255, 255, 255, 0.05); + border-radius: 6px; +} + +.chart-bar { + flex: 1; + background: linear-gradient(to top, #14d145, #1ed150); + border-radius: 2px 2px 0 0; + transition: opacity 0.2s; + cursor: pointer; + min-height: 2px; +} + +.chart-bar:hover { + opacity: 0.8; +} + +.chart-labels { + display: flex; + justify-content: space-between; + align-items: center; + padding: 5px 10px; + font-size: 11px; + color: rgba(255, 255, 255, 0.7); +} + +.trend-indicator { + font-size: 12px; + padding: 2px 6px; + border-radius: 4px; + font-weight: 500; +} + +.trend-indicator.increasing { + background: rgba(74, 222, 128, 0.2); + color: #4ade80; +} + +.trend-indicator.decreasing { + background: rgba(248, 113, 113, 0.2); + color: #f87171; +} + +.trend-indicator.stable { + background: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); +} + +.time-metrics { + display: flex; + justify-content: space-around; + padding: 10px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border-radius: 6px; + font-size: 14px; + flex-wrap: wrap; + gap: 12px; +} + +.metric-item { + display: flex; + flex-direction: column; + gap: 2px; + text-align: center; +} + +.metric-label { + font-size: 12px; + color: rgba(255, 255, 255, 0.7); +} + +.metric-value { + font-weight: 500; + color: white; +} + +.category-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.category-item { + padding: 8px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 6px; + transition: all 0.2s; + cursor: pointer; +} + +.category-item:hover { + background: rgba(255, 255, 255, 0.15); + transform: translateX(4px); +} + +.category-item.highlighted { + background: rgba(251, 191, 36, 0.2); + border: 1px solid rgba(251, 191, 36, 0.5); +} + +.category-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 4px; +} + +.category-name { + font-weight: 500; + color: white; +} + +.category-stats { + display: flex; + align-items: center; + gap: 8px; +} + +.category-count { + font-weight: 600; + color: white; +} + +.category-percentage { + font-size: 12px; + color: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.1); + padding: 2px 6px; + border-radius: 4px; +} + +.category-bar-container { + height: 20px; + background: rgba(255, 255, 255, 0.1); + border-radius: 4px; + overflow: hidden; +} + +.category-bar { + height: 100%; + transition: width 0.3s ease; +} + +.objects-list { + display: flex; + flex-direction: column; + gap: 8px; + max-height: 400px; + overflow-y: auto; +} + +.object-item { + display: flex; + align-items: center; + gap: 12px; + padding: 10px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 6px; + transition: all 0.2s; +} + +.object-item:hover { + background: rgba(255, 255, 255, 0.15); + transform: translateX(4px); +} + +.object-rank { + width: 30px; + font-weight: 600; + color: #4ade80; +} + +.object-info { + flex: 1; + display: flex; + align-items: center; + gap: 8px; +} + +.object-category { + font-size: 12px; + font-weight: 500; + color: rgba(255, 255, 255, 0.6); + background: rgba(255, 255, 255, 0.1); + padding: 2px 8px; + border-radius: 4px; + text-transform: uppercase; +} + +.object-arrow { + color: rgba(255, 255, 255, 0.3); + font-size: 14px; +} + +.object-name { + color: white; + font-weight: 500; +} + +.object-stats { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; +} + +.object-count { + font-weight: 600; + color: white; + font-size: 16px; +} + +.object-percentage { + font-size: 11px; + color: rgba(255, 255, 255, 0.7); +} + +.brands-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; +} + +.brand-card { + padding: 12px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 6px; + text-align: center; + transition: all 0.2s; +} + +.brand-card:hover { + background: rgba(255, 255, 255, 0.15); + transform: translateY(-2px); +} + +.brand-rank { + font-size: 10px; + color: #4ade80; + margin-bottom: 4px; + font-weight: 700; +} + +.brand-name { + font-weight: 500; + font-size: 13px; + color: white; + margin-bottom: 4px; +} + +.brand-count { + font-weight: 600; + color: #fbbf24; +} + +.brand-percentage { + font-size: 11px; + color: rgba(255, 255, 255, 0.7); + margin-top: 2px; +} + +.materials-list { + display: flex; + flex-direction: column; + gap: 10px; +} + +.material-item { + display: flex; + align-items: center; + gap: 10px; + padding: 10px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 6px; +} + +.material-item:hover { + background: rgba(255, 255, 255, 0.15); +} + +.material-icon { + font-size: 16px; + width: 20px; + text-align: center; +} + +.material-name { + width: 100px; + font-weight: 500; + color: white; +} + +.material-bar-wrapper { + flex: 1; + display: flex; + align-items: center; + gap: 8px; +} + +.material-bar { + height: 16px; + background: linear-gradient(90deg, #14d145, #12b83d); + border-radius: 3px; +} + +.material-count { + font-size: 12px; + color: white; + font-weight: 500; +} + +.material-percentage { + font-size: 11px; + color: rgba(255, 255, 255, 0.7); + white-space: nowrap; +} + +.contributors-list { + display: flex; + flex-direction: column; + gap: 12px; +} + +.contributor-item { + display: flex; + align-items: center; + gap: 12px; + padding: 12px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 8px; +} + +.contributor-item:hover { + background: rgba(255, 255, 255, 0.15); + transform: translateX(4px); +} + +.contributor-rank { + font-size: 20px; + width: 35px; + text-align: center; + color: white; +} + +.contributor-info { + flex: 1; +} + +.contributor-name { + font-weight: 500; + color: white; + margin-bottom: 4px; +} + +.username { + color: rgba(255, 255, 255, 0.6); + font-size: 12px; + margin-left: 4px; +} + +.contributor-stats { + font-size: 12px; + color: rgba(255, 255, 255, 0.7); +} + +.contributor-period { + font-style: italic; + color: rgba(255, 255, 255, 0.6); +} + +.separator { + margin: 0 4px; + color: rgba(255, 255, 255, 0.3); +} + +.export-options { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-bottom: 20px; +} + +.export-btn { + padding: 12px; + border: 1px solid rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border-radius: 6px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + font-weight: 500; + transition: all 0.2s; + color: white; +} + +.export-btn:hover { + background: rgba(255, 255, 255, 0.15); + transform: translateY(-1px); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); +} + +.export-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.export-btn:disabled:hover { + transform: none; + box-shadow: none; +} + +.export-btn.csv { + background: linear-gradient(135deg, rgba(16, 185, 129, 0.2), rgba(5, 150, 105, 0.2)); + border-color: rgba(16, 185, 129, 0.5); +} + +.export-btn.json { + background: linear-gradient(135deg, rgba(59, 130, 246, 0.2), rgba(37, 99, 235, 0.2)); + border-color: rgba(59, 130, 246, 0.5); +} + +.export-btn.excel { + background: linear-gradient(135deg, rgba(34, 197, 94, 0.2), rgba(22, 163, 74, 0.2)); + border-color: rgba(34, 197, 94, 0.5); +} + +.export-btn.report { + background: linear-gradient(135deg, rgba(239, 68, 68, 0.2), rgba(220, 38, 38, 0.2)); + border-color: rgba(239, 68, 68, 0.5); +} + +.export-status { + display: flex; + align-items: center; + gap: 8px; + padding: 12px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border-radius: 6px; + margin-bottom: 16px; + font-size: 14px; + color: white; +} + +.spinner-small { + width: 16px; + height: 16px; + border: 2px solid rgba(255, 255, 255, 0.2); + border-top-color: #14d145; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +.export-info { + padding: 15px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + border-radius: 6px; + font-size: 14px; + color: rgba(255, 255, 255, 0.9); +} + +.applied-filters { + margin-top: 15px; + padding-top: 15px; + border-top: 1px solid rgba(255, 255, 255, 0.2); +} + +.applied-filters h4 { + margin: 0 0 8px 0; + font-size: 14px; + color: white; +} + +.filter-tags { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-top: 8px; +} + +.filter-tag { + background: rgba(255, 255, 255, 0.15); + backdrop-filter: blur(10px); + color: white; + padding: 4px 8px; + border-radius: 12px; + font-size: 12px; + border: 1px solid rgba(255, 255, 255, 0.2); +} + +.cache-info { + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid rgba(255, 255, 255, 0.2); + color: rgba(255, 255, 255, 0.6); +} + +/* Scrollbar styling */ +.drawer-content::-webkit-scrollbar, +.drawer-body::-webkit-scrollbar, +.objects-list::-webkit-scrollbar { + width: 6px; +} + +.drawer-content::-webkit-scrollbar-track, +.drawer-body::-webkit-scrollbar-track, +.objects-list::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.05); +} + +.drawer-content::-webkit-scrollbar-thumb, +.drawer-body::-webkit-scrollbar-thumb, +.objects-list::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.2); + border-radius: 3px; +} + +.drawer-content::-webkit-scrollbar-thumb:hover, +.drawer-body::-webkit-scrollbar-thumb:hover, +.objects-list::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.3); +} + +/* Animations */ +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* Responsive design */ +@media (max-width: 768px) { + .drawer-content { + width: 100%; + max-width: 350px; + } + + .map-drawer.open .drawer-toggle { + left: min(350px, 100vw); + } + + .brands-grid { + grid-template-columns: repeat(2, 1fr); + } + + .stats-grid { + grid-template-columns: 1fr; + } + + .export-options { + grid-template-columns: 1fr; + } + + .time-metrics { + flex-direction: column; + align-items: center; + } + + .date-range { + flex-direction: column; + align-items: stretch; + } +} diff --git a/resources/js/views/Upload/Upload.vue b/resources/js/views/Upload/Upload.vue new file mode 100644 index 000000000..86d7f2a36 --- /dev/null +++ b/resources/js/views/Upload/Upload.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/resources/js/views/User/Uploads/PhotoPreview.vue b/resources/js/views/User/Uploads/PhotoPreview.vue new file mode 100644 index 000000000..95debb8f5 --- /dev/null +++ b/resources/js/views/User/Uploads/PhotoPreview.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/resources/js/views/User/Uploads/RawDataView.vue b/resources/js/views/User/Uploads/RawDataView.vue new file mode 100644 index 000000000..c538a7d23 --- /dev/null +++ b/resources/js/views/User/Uploads/RawDataView.vue @@ -0,0 +1,72 @@ + + + diff --git a/resources/js/views/User/Uploads/TagSummaryTab.vue b/resources/js/views/User/Uploads/TagSummaryTab.vue new file mode 100644 index 000000000..5915df3e8 --- /dev/null +++ b/resources/js/views/User/Uploads/TagSummaryTab.vue @@ -0,0 +1,108 @@ + + + diff --git a/resources/js/views/User/Uploads/TaggedView.vue b/resources/js/views/User/Uploads/TaggedView.vue new file mode 100644 index 000000000..ee0ada9e3 --- /dev/null +++ b/resources/js/views/User/Uploads/TaggedView.vue @@ -0,0 +1,182 @@ + + + diff --git a/resources/js/views/User/Uploads/UploadTags.vue b/resources/js/views/User/Uploads/UploadTags.vue new file mode 100644 index 000000000..fa9a7f36d --- /dev/null +++ b/resources/js/views/User/Uploads/UploadTags.vue @@ -0,0 +1,239 @@ + + + + + diff --git a/resources/js/views/User/Uploads/Uploads.vue b/resources/js/views/User/Uploads/Uploads.vue new file mode 100644 index 000000000..75e58cf10 --- /dev/null +++ b/resources/js/views/User/Uploads/Uploads.vue @@ -0,0 +1,247 @@ + + + diff --git a/resources/js/views/User/Uploads/components/UploadsHeader.vue b/resources/js/views/User/Uploads/components/UploadsHeader.vue new file mode 100644 index 000000000..5d4709c68 --- /dev/null +++ b/resources/js/views/User/Uploads/components/UploadsHeader.vue @@ -0,0 +1,219 @@ + + + diff --git a/resources/js/views/User/Uploads/components/UploadsPagination.vue b/resources/js/views/User/Uploads/components/UploadsPagination.vue new file mode 100644 index 000000000..ebc89b73b --- /dev/null +++ b/resources/js/views/User/Uploads/components/UploadsPagination.vue @@ -0,0 +1,106 @@ + + + diff --git a/resources/js/views/Welcome/Welcome.vue b/resources/js/views/Welcome/Welcome.vue new file mode 100644 index 000000000..589be18da --- /dev/null +++ b/resources/js/views/Welcome/Welcome.vue @@ -0,0 +1,20 @@ + + + diff --git a/resources/js/views/Welcome/components/Footer.vue b/resources/js/views/Welcome/components/Footer.vue new file mode 100644 index 000000000..4f5402853 --- /dev/null +++ b/resources/js/views/Welcome/components/Footer.vue @@ -0,0 +1,242 @@ + + + + + diff --git a/resources/js/views/Welcome/components/Intro.vue b/resources/js/views/Welcome/components/Intro.vue new file mode 100644 index 000000000..489bd6ccf --- /dev/null +++ b/resources/js/views/Welcome/components/Intro.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/resources/js/views/Welcome/components/Partners.vue b/resources/js/views/Welcome/components/Partners.vue new file mode 100644 index 000000000..621ae4dbf --- /dev/null +++ b/resources/js/views/Welcome/components/Partners.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/resources/js/views/Welcome/components/WhyHow.vue b/resources/js/views/Welcome/components/WhyHow.vue new file mode 100644 index 000000000..5b181d2bf --- /dev/null +++ b/resources/js/views/Welcome/components/WhyHow.vue @@ -0,0 +1,76 @@ + + + diff --git a/resources/js/views/general/History.vue b/resources/js/views/general/History.vue deleted file mode 100644 index 0051a64a9..000000000 --- a/resources/js/views/general/History.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - - - diff --git a/resources/js/views/general/References.vue b/resources/js/views/general/References.vue deleted file mode 100644 index 5fc7f99f7..000000000 --- a/resources/js/views/general/References.vue +++ /dev/null @@ -1,583 +0,0 @@ - - - - - - - - diff --git a/resources/js/views/home/Footer.vue b/resources/js/views/home/Footer.vue deleted file mode 100644 index c4d8ec9d9..000000000 --- a/resources/js/views/home/Footer.vue +++ /dev/null @@ -1,296 +0,0 @@ - - - - - diff --git a/resources/js/views/home/Partners.vue b/resources/js/views/home/Partners.vue deleted file mode 100644 index 9158962df..000000000 --- a/resources/js/views/home/Partners.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - - - diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php deleted file mode 100644 index e5506df29..000000000 --- a/resources/lang/en/auth.php +++ /dev/null @@ -1,19 +0,0 @@ - 'These credentials do not match our records.', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', - -]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php deleted file mode 100644 index d48141187..000000000 --- a/resources/lang/en/pagination.php +++ /dev/null @@ -1,19 +0,0 @@ - '« Previous', - 'next' => 'Next »', - -]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php deleted file mode 100644 index 2345a56b5..000000000 --- a/resources/lang/en/passwords.php +++ /dev/null @@ -1,22 +0,0 @@ - 'Your password has been reset!', - 'sent' => 'We have emailed your password reset link!', - 'throttled' => 'Please wait before retrying.', - 'token' => 'This password reset token is invalid.', - 'user' => "We can't find a user with that email address.", - -]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php deleted file mode 100644 index 391484b3d..000000000 --- a/resources/lang/en/validation.php +++ /dev/null @@ -1,159 +0,0 @@ - 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', - 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', - ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_equals' => 'The :attribute must be a date equal to :date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', - 'ends_with' => 'The :attribute must end with one of the following: :values.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field must have a value.', - 'gt' => [ - 'numeric' => 'The :attribute must be greater than :value.', - 'file' => 'The :attribute must be greater than :value kilobytes.', - 'string' => 'The :attribute must be greater than :value characters.', - 'array' => 'The :attribute must have more than :value items.', - ], - 'gte' => [ - 'numeric' => 'The :attribute must be greater than or equal :value.', - 'file' => 'The :attribute must be greater than or equal :value kilobytes.', - 'string' => 'The :attribute must be greater than or equal :value characters.', - 'array' => 'The :attribute must have :value items or more.', - ], - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'ipv4' => 'The :attribute must be a valid IPv4 address.', - 'ipv6' => 'The :attribute must be a valid IPv6 address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'lt' => [ - 'numeric' => 'The :attribute must be less than :value.', - 'file' => 'The :attribute must be less than :value kilobytes.', - 'string' => 'The :attribute must be less than :value characters.', - 'array' => 'The :attribute must have less than :value items.', - ], - 'lte' => [ - 'numeric' => 'The :attribute must be less than or equal :value.', - 'file' => 'The :attribute must be less than or equal :value kilobytes.', - 'string' => 'The :attribute must be less than or equal :value characters.', - 'array' => 'The :attribute must not have more than :value items.', - ], - 'max' => [ - 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', - ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', - 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', - ], - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute format is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'password' => [ - 'default' => 'The password is incorrect.', - 'min' => 'The :attribute must be at least :min characters.', - 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.', - 'numbers' => 'The :attribute must contain at least one number.', - 'symbols' => 'The :attribute must contain at least one special character.', - 'uncompromised' => 'The :attribute has appeared in a data breach. Please choose a different password.', - ], - 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values are present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', - ], - 'starts_with' => 'The :attribute must start with one of the following: :values.', - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute format is invalid.', - 'uuid' => 'The :attribute must be a valid UUID.', - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => [ - 'g-recaptcha-response' => [ - 'required' => 'Please verify that you are not a robot.', - 'captcha' => 'Captcha error! Try again later or contact site admin.', - ], - ], - - /* - |-------------------------------------------------------------------------- - | Custom Validation Attributes - |-------------------------------------------------------------------------- - | - | The following language lines are used to swap our attribute placeholder - | with something more reader friendly such as "E-Mail Address" instead - | of "email". This simply helps us make our message more expressive. - | - */ - - 'attributes' => [], - -]; diff --git a/resources/lang/vendor/backup/ar/notifications.php b/resources/lang/vendor/backup/ar/notifications.php deleted file mode 100644 index f84de9cce..000000000 --- a/resources/lang/vendor/backup/ar/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'رسالة استثناء: :message', - 'exception_trace' => 'تتبع الإستثناء: :trace', - 'exception_message_title' => 'رسالة استثناء', - 'exception_trace_title' => 'تتبع الإستثناء', - - 'backup_failed_subject' => 'أخفق النسخ الاحتياطي لل :application_name', - 'backup_failed_body' => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name', - - 'backup_successful_subject' => 'نسخ احتياطي جديد ناجح ل :application_name', - 'backup_successful_subject_title' => 'نجاح النسخ الاحتياطي الجديد!', - 'backup_successful_body' => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.', - - 'cleanup_failed_subject' => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .', - 'cleanup_failed_body' => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name', - - 'cleanup_successful_subject' => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح', - 'cleanup_successful_subject_title' => 'تنظيف النسخ الاحتياطية تم بنجاح!', - 'cleanup_successful_body' => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.', - - 'healthy_backup_found_subject' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية', - 'healthy_backup_found_subject_title' => 'النسخ الاحتياطية ل :application_name صحية', - 'healthy_backup_found_body' => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!', - - 'unhealthy_backup_found_subject' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية', - 'unhealthy_backup_found_subject_title' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem', - 'unhealthy_backup_found_body' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.', - 'unhealthy_backup_found_not_reachable' => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error', - 'unhealthy_backup_found_empty' => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.', - 'unhealthy_backup_found_old' => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.', - 'unhealthy_backup_found_unknown' => 'عذرا، لا يمكن تحديد سبب دقيق.', - 'unhealthy_backup_found_full' => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/cs/notifications.php b/resources/lang/vendor/backup/cs/notifications.php deleted file mode 100644 index 947eb436e..000000000 --- a/resources/lang/vendor/backup/cs/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Zpráva výjimky: :message', - 'exception_trace' => 'Stopa výjimky: :trace', - 'exception_message_title' => 'Zpráva výjimky', - 'exception_trace_title' => 'Stopa výjimky', - - 'backup_failed_subject' => 'Záloha :application_name neuspěla', - 'backup_failed_body' => 'Důležité: Při záloze :application_name se vyskytla chyba', - - 'backup_successful_subject' => 'Úspěšná nová záloha :application_name', - 'backup_successful_subject_title' => 'Úspěšná nová záloha!', - 'backup_successful_body' => 'Dobrá zpráva, na disku jménem :disk_name byla úspěšně vytvořena nová záloha :application_name.', - - 'cleanup_failed_subject' => 'Vyčištění záloh :application_name neuspělo.', - 'cleanup_failed_body' => 'Při vyčištění záloh :application_name se vyskytla chyba', - - 'cleanup_successful_subject' => 'Vyčištění záloh :application_name úspěšné', - 'cleanup_successful_subject_title' => 'Vyčištění záloh bylo úspěšné!', - 'cleanup_successful_body' => 'Vyčištění záloh :application_name na disku jménem :disk_name bylo úspěšné.', - - 'healthy_backup_found_subject' => 'Zálohy pro :application_name na disku :disk_name jsou zdravé', - 'healthy_backup_found_subject_title' => 'Zálohy pro :application_name jsou zdravé', - 'healthy_backup_found_body' => 'Zálohy pro :application_name jsou považovány za zdravé. Dobrá práce!', - - 'unhealthy_backup_found_subject' => 'Důležité: Zálohy pro :application_name jsou nezdravé', - 'unhealthy_backup_found_subject_title' => 'Důležité: Zálohy pro :application_name jsou nezdravé. :problem', - 'unhealthy_backup_found_body' => 'Zálohy pro :application_name na disku :disk_name Jsou nezdravé.', - 'unhealthy_backup_found_not_reachable' => 'Nelze se dostat k cíli zálohy. :error', - 'unhealthy_backup_found_empty' => 'Tato aplikace nemá vůbec žádné zálohy.', - 'unhealthy_backup_found_old' => 'Poslední záloha vytvořená dne :date je považována za příliš starou.', - 'unhealthy_backup_found_unknown' => 'Omlouváme se, nemůžeme určit přesný důvod.', - 'unhealthy_backup_found_full' => 'Zálohy zabírají příliš mnoho místa na disku. Aktuální využití disku je :disk_usage, což je vyšší než povolený limit :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/da/notifications.php b/resources/lang/vendor/backup/da/notifications.php deleted file mode 100644 index e7b95fc5a..000000000 --- a/resources/lang/vendor/backup/da/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Fejlbesked: :message', - 'exception_trace' => 'Fejl trace: :trace', - 'exception_message_title' => 'Fejlbesked', - 'exception_trace_title' => 'Fejl trace', - - 'backup_failed_subject' => 'Backup af :application_name fejlede', - 'backup_failed_body' => 'Vigtigt: Der skete en fejl under backup af :application_name', - - 'backup_successful_subject' => 'Ny backup af :application_name oprettet', - 'backup_successful_subject_title' => 'Ny backup!', - 'backup_successful_body' => 'Gode nyheder - der blev oprettet en ny backup af :application_name på disken :disk_name.', - - 'cleanup_failed_subject' => 'Oprydning af backups for :application_name fejlede.', - 'cleanup_failed_body' => 'Der skete en fejl under oprydning af backups for :application_name', - - 'cleanup_successful_subject' => 'Oprydning af backups for :application_name gennemført', - 'cleanup_successful_subject_title' => 'Backup oprydning gennemført!', - 'cleanup_successful_body' => 'Oprydningen af backups for :application_name på disken :disk_name er gennemført.', - - 'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK', - 'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK', - 'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt gået!', - - 'unhealthy_backup_found_subject' => 'Vigtigt: Backups for :application_name fejlbehæftede', - 'unhealthy_backup_found_subject_title' => 'Vigtigt: Backups for :application_name er fejlbehæftede. :problem', - 'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er fejlbehæftede.', - 'unhealthy_backup_found_not_reachable' => 'Backup destinationen kunne ikke findes. :error', - 'unhealthy_backup_found_empty' => 'Denne applikation har ingen backups overhovedet.', - 'unhealthy_backup_found_old' => 'Den seneste backup fra :date er for gammel.', - 'unhealthy_backup_found_unknown' => 'Beklager, en præcis årsag kunne ikke findes.', - 'unhealthy_backup_found_full' => 'Backups bruger for meget plads. Nuværende disk forbrug er :disk_usage, hvilket er mere end den tilladte grænse på :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/de/notifications.php b/resources/lang/vendor/backup/de/notifications.php deleted file mode 100644 index 2d87d8f11..000000000 --- a/resources/lang/vendor/backup/de/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Fehlermeldung: :message', - 'exception_trace' => 'Fehlerverfolgung: :trace', - 'exception_message_title' => 'Fehlermeldung', - 'exception_trace_title' => 'Fehlerverfolgung', - - 'backup_failed_subject' => 'Backup von :application_name konnte nicht erstellt werden', - 'backup_failed_body' => 'Wichtig: Beim Backup von :application_name ist ein Fehler aufgetreten', - - 'backup_successful_subject' => 'Erfolgreiches neues Backup von :application_name', - 'backup_successful_subject_title' => 'Erfolgreiches neues Backup!', - 'backup_successful_body' => 'Gute Nachrichten, ein neues Backup von :application_name wurde erfolgreich erstellt und in :disk_name gepeichert.', - - 'cleanup_failed_subject' => 'Aufräumen der Backups von :application_name schlug fehl.', - 'cleanup_failed_body' => 'Beim aufräumen der Backups von :application_name ist ein Fehler aufgetreten', - - 'cleanup_successful_subject' => 'Aufräumen der Backups von :application_name backups erfolgreich', - 'cleanup_successful_subject_title' => 'Aufräumen der Backups erfolgreich!', - 'cleanup_successful_body' => 'Aufräumen der Backups von :application_name in :disk_name war erfolgreich.', - - 'healthy_backup_found_subject' => 'Die Backups von :application_name in :disk_name sind gesund', - 'healthy_backup_found_subject_title' => 'Die Backups von :application_name sind Gesund', - 'healthy_backup_found_body' => 'Die Backups von :application_name wurden als gesund eingestuft. Gute Arbeit!', - - 'unhealthy_backup_found_subject' => 'Wichtig: Die Backups für :application_name sind nicht gesund', - 'unhealthy_backup_found_subject_title' => 'Wichtig: Die Backups für :application_name sind ungesund. :problem', - 'unhealthy_backup_found_body' => 'Die Backups für :application_name in :disk_name sind ungesund.', - 'unhealthy_backup_found_not_reachable' => 'Das Backup Ziel konnte nicht erreicht werden. :error', - 'unhealthy_backup_found_empty' => 'Es gibt für die Anwendung noch gar keine Backups.', - 'unhealthy_backup_found_old' => 'Das letzte Backup am :date ist zu lange her.', - 'unhealthy_backup_found_unknown' => 'Sorry, ein genauer Grund konnte nicht gefunden werden.', - 'unhealthy_backup_found_full' => 'Die Backups verbrauchen zu viel Platz. Aktuell wird :disk_usage belegt, dass ist höher als das erlaubte Limit von :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/en/notifications.php b/resources/lang/vendor/backup/en/notifications.php deleted file mode 100644 index d7a11281c..000000000 --- a/resources/lang/vendor/backup/en/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Exception message: :message', - 'exception_trace' => 'Exception trace: :trace', - 'exception_message_title' => 'Exception message', - 'exception_trace_title' => 'Exception trace', - - 'backup_failed_subject' => 'Failed backup of :application_name', - 'backup_failed_body' => 'Important: An error occurred while backing up :application_name', - - 'backup_successful_subject' => 'Successful new backup of :application_name', - 'backup_successful_subject_title' => 'Successful new backup!', - 'backup_successful_body' => 'Great news, a new backup of :application_name was successfully created on the disk named :disk_name.', - - 'cleanup_failed_subject' => 'Cleaning up the backups of :application_name failed.', - 'cleanup_failed_body' => 'An error occurred while cleaning up the backups of :application_name', - - 'cleanup_successful_subject' => 'Clean up of :application_name backups successful', - 'cleanup_successful_subject_title' => 'Clean up of backups successful!', - 'cleanup_successful_body' => 'The clean up of the :application_name backups on the disk named :disk_name was successful.', - - 'healthy_backup_found_subject' => 'The backups for :application_name on disk :disk_name are healthy', - 'healthy_backup_found_subject_title' => 'The backups for :application_name are healthy', - 'healthy_backup_found_body' => 'The backups for :application_name are considered healthy. Good job!', - - 'unhealthy_backup_found_subject' => 'Important: The backups for :application_name are unhealthy', - 'unhealthy_backup_found_subject_title' => 'Important: The backups for :application_name are unhealthy. :problem', - 'unhealthy_backup_found_body' => 'The backups for :application_name on disk :disk_name are unhealthy.', - 'unhealthy_backup_found_not_reachable' => 'The backup destination cannot be reached. :error', - 'unhealthy_backup_found_empty' => 'There are no backups of this application at all.', - 'unhealthy_backup_found_old' => 'The latest backup made on :date is considered too old.', - 'unhealthy_backup_found_unknown' => 'Sorry, an exact reason cannot be determined.', - 'unhealthy_backup_found_full' => 'The backups are using too much storage. Current usage is :disk_usage which is higher than the allowed limit of :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/es/notifications.php b/resources/lang/vendor/backup/es/notifications.php deleted file mode 100644 index 4f4900fe5..000000000 --- a/resources/lang/vendor/backup/es/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Mensaje de la excepción: :message', - 'exception_trace' => 'Traza de la excepción: :trace', - 'exception_message_title' => 'Mensaje de la excepción', - 'exception_trace_title' => 'Traza de la excepción', - - 'backup_failed_subject' => 'Copia de seguridad de :application_name fallida', - 'backup_failed_body' => 'Importante: Ocurrió un error al realizar la copia de seguridad de :application_name', - - 'backup_successful_subject' => 'Se completó con éxito la copia de seguridad de :application_name', - 'backup_successful_subject_title' => '¡Nueva copia de seguridad creada con éxito!', - 'backup_successful_body' => 'Buenas noticias, una nueva copia de seguridad de :application_name fue creada con éxito en el disco llamado :disk_name.', - - 'cleanup_failed_subject' => 'La limpieza de copias de seguridad de :application_name falló.', - 'cleanup_failed_body' => 'Ocurrió un error mientras se realizaba la limpieza de copias de seguridad de :application_name', - - 'cleanup_successful_subject' => 'La limpieza de copias de seguridad de :application_name se completó con éxito', - 'cleanup_successful_subject_title' => '!Limpieza de copias de seguridad completada con éxito!', - 'cleanup_successful_body' => 'La limpieza de copias de seguridad de :application_name en el disco llamado :disk_name se completo con éxito.', - - 'healthy_backup_found_subject' => 'Las copias de seguridad de :application_name en el disco :disk_name están en buen estado', - 'healthy_backup_found_subject_title' => 'Las copias de seguridad de :application_name están en buen estado', - 'healthy_backup_found_body' => 'Las copias de seguridad de :application_name se consideran en buen estado. ¡Buen trabajo!', - - 'unhealthy_backup_found_subject' => 'Importante: Las copias de seguridad de :application_name están en mal estado', - 'unhealthy_backup_found_subject_title' => 'Importante: Las copias de seguridad de :application_name están en mal estado. :problem', - 'unhealthy_backup_found_body' => 'Las copias de seguridad de :application_name en el disco :disk_name están en mal estado.', - 'unhealthy_backup_found_not_reachable' => 'No se puede acceder al destino de la copia de seguridad. :error', - 'unhealthy_backup_found_empty' => 'No existe ninguna copia de seguridad de esta aplicación.', - 'unhealthy_backup_found_old' => 'La última copia de seguriad hecha en :date es demasiado antigua.', - 'unhealthy_backup_found_unknown' => 'Lo siento, no es posible determinar la razón exacta.', - 'unhealthy_backup_found_full' => 'Las copias de seguridad están ocupando demasiado espacio. El espacio utilizado actualmente es :disk_usage el cual es mayor que el límite permitido de :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/fa/notifications.php b/resources/lang/vendor/backup/fa/notifications.php deleted file mode 100644 index 33cbe335e..000000000 --- a/resources/lang/vendor/backup/fa/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'پیغام خطا: :message', - 'exception_trace' => 'جزییات خطا: :trace', - 'exception_message_title' => 'پیغام خطا', - 'exception_trace_title' => 'جزییات خطا', - - 'backup_failed_subject' => 'پشتیبان‌گیری :application_name با خطا مواجه شد.', - 'backup_failed_body' => 'پیغام مهم: هنگام پشتیبان‌گیری از :application_name خطایی رخ داده است. ', - - 'backup_successful_subject' => 'نسخه پشتیبان جدید :application_name با موفقیت ساخته شد.', - 'backup_successful_subject_title' => 'پشتیبان‌گیری موفق!', - 'backup_successful_body' => 'خبر خوب, به تازگی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت ساخته شد. ', - - 'cleanup_failed_subject' => 'پاک‌‌سازی نسخه پشتیبان :application_name انجام نشد.', - 'cleanup_failed_body' => 'هنگام پاک‌سازی نسخه پشتیبان :application_name خطایی رخ داده است.', - - 'cleanup_successful_subject' => 'پاک‌سازی نسخه پشتیبان :application_name با موفقیت انجام شد.', - 'cleanup_successful_subject_title' => 'پاک‌سازی نسخه پشتیبان!', - 'cleanup_successful_body' => 'پاک‌سازی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت انجام شد.', - - 'healthy_backup_found_subject' => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم بود.', - 'healthy_backup_found_subject_title' => 'نسخه پشتیبان :application_name سالم بود.', - 'healthy_backup_found_body' => 'نسخه پشتیبان :application_name به نظر سالم میاد. دمت گرم!', - - 'unhealthy_backup_found_subject' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود.', - 'unhealthy_backup_found_subject_title' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود. :problem', - 'unhealthy_backup_found_body' => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم نبود.', - 'unhealthy_backup_found_not_reachable' => 'مقصد پشتیبان‌گیری در دسترس نبود. :error', - 'unhealthy_backup_found_empty' => 'برای این برنامه هیچ نسخه پشتیبانی وجود ندارد.', - 'unhealthy_backup_found_old' => 'آخرین نسخه پشتیبان برای تاریخ :date است. که به نظر خیلی قدیمی میاد. ', - 'unhealthy_backup_found_unknown' => 'متاسفانه دلیل دقیق مشخص نشده است.', - 'unhealthy_backup_found_full' => 'نسخه‌های پشتیبانی که تهیه کرده اید حجم زیادی اشغال کرده اند. میزان دیسک استفاده شده :disk_usage است که از میزان مجاز :disk_limit فراتر رفته است. ', -]; diff --git a/resources/lang/vendor/backup/fi/notifications.php b/resources/lang/vendor/backup/fi/notifications.php deleted file mode 100644 index 85e3607c0..000000000 --- a/resources/lang/vendor/backup/fi/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Virheilmoitus: :message', - 'exception_trace' => 'Virhe, jäljitys: :trace', - 'exception_message_title' => 'Virheilmoitus', - 'exception_trace_title' => 'Virheen jäljitys', - - 'backup_failed_subject' => ':application_name varmuuskopiointi epäonnistui', - 'backup_failed_body' => 'HUOM!: :application_name varmuuskoipionnissa tapahtui virhe', - - 'backup_successful_subject' => ':application_name varmuuskopioitu onnistuneesti', - 'backup_successful_subject_title' => 'Uusi varmuuskopio!', - 'backup_successful_body' => 'Hyviä uutisia! :application_name on varmuuskopioitu levylle :disk_name.', - - 'cleanup_failed_subject' => ':application_name varmuuskopioiden poistaminen epäonnistui.', - 'cleanup_failed_body' => ':application_name varmuuskopioiden poistamisessa tapahtui virhe.', - - 'cleanup_successful_subject' => ':application_name varmuuskopiot poistettu onnistuneesti', - 'cleanup_successful_subject_title' => 'Varmuuskopiot poistettu onnistuneesti!', - 'cleanup_successful_body' => ':application_name varmuuskopiot poistettu onnistuneesti levyltä :disk_name.', - - 'healthy_backup_found_subject' => ':application_name varmuuskopiot levyllä :disk_name ovat kunnossa', - 'healthy_backup_found_subject_title' => ':application_name varmuuskopiot ovat kunnossa', - 'healthy_backup_found_body' => ':application_name varmuuskopiot ovat kunnossa. Hieno homma!', - - 'unhealthy_backup_found_subject' => 'HUOM!: :application_name varmuuskopiot ovat vialliset', - 'unhealthy_backup_found_subject_title' => 'HUOM!: :application_name varmuuskopiot ovat vialliset. :problem', - 'unhealthy_backup_found_body' => ':application_name varmuuskopiot levyllä :disk_name ovat vialliset.', - 'unhealthy_backup_found_not_reachable' => 'Varmuuskopioiden kohdekansio ei ole saatavilla. :error', - 'unhealthy_backup_found_empty' => 'Tästä sovelluksesta ei ole varmuuskopioita.', - 'unhealthy_backup_found_old' => 'Viimeisin varmuuskopio, luotu :date, on liian vanha.', - 'unhealthy_backup_found_unknown' => 'Virhe, tarkempaa tietoa syystä ei valitettavasti ole saatavilla.', - 'unhealthy_backup_found_full' => 'Varmuuskopiot vievät liikaa levytilaa. Tällä hetkellä käytössä :disk_usage, mikä on suurempi kuin sallittu tilavuus (:disk_limit).', -]; diff --git a/resources/lang/vendor/backup/fr/notifications.php b/resources/lang/vendor/backup/fr/notifications.php deleted file mode 100644 index 57a98c23a..000000000 --- a/resources/lang/vendor/backup/fr/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Message de l\'exception : :message', - 'exception_trace' => 'Trace de l\'exception : :trace', - 'exception_message_title' => 'Message de l\'exception', - 'exception_trace_title' => 'Trace de l\'exception', - - 'backup_failed_subject' => 'Échec de la sauvegarde de :application_name', - 'backup_failed_body' => 'Important : Une erreur est survenue lors de la sauvegarde de :application_name', - - 'backup_successful_subject' => 'Succès de la sauvegarde de :application_name', - 'backup_successful_subject_title' => 'Sauvegarde créée avec succès !', - 'backup_successful_body' => 'Bonne nouvelle, une nouvelle sauvegarde de :application_name a été créée avec succès sur le disque nommé :disk_name.', - - 'cleanup_failed_subject' => 'Le nettoyage des sauvegardes de :application_name a echoué.', - 'cleanup_failed_body' => 'Une erreur est survenue lors du nettoyage des sauvegardes de :application_name', - - 'cleanup_successful_subject' => 'Succès du nettoyage des sauvegardes de :application_name', - 'cleanup_successful_subject_title' => 'Sauvegardes nettoyées avec succès !', - 'cleanup_successful_body' => 'Le nettoyage des sauvegardes de :application_name sur le disque nommé :disk_name a été effectué avec succès.', - - 'healthy_backup_found_subject' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont saines', - 'healthy_backup_found_subject_title' => 'Les sauvegardes pour :application_name sont saines', - 'healthy_backup_found_body' => 'Les sauvegardes pour :application_name sont considérées saines. Bon travail !', - - 'unhealthy_backup_found_subject' => 'Important : Les sauvegardes pour :application_name sont corrompues', - 'unhealthy_backup_found_subject_title' => 'Important : Les sauvegardes pour :application_name sont corrompues. :problem', - 'unhealthy_backup_found_body' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont corrompues.', - 'unhealthy_backup_found_not_reachable' => 'La destination de la sauvegarde n\'est pas accessible. :error', - 'unhealthy_backup_found_empty' => 'Il n\'y a aucune sauvegarde pour cette application.', - 'unhealthy_backup_found_old' => 'La dernière sauvegarde du :date est considérée trop vieille.', - 'unhealthy_backup_found_unknown' => 'Désolé, une raison exacte ne peut être déterminée.', - 'unhealthy_backup_found_full' => 'Les sauvegardes utilisent trop d\'espace disque. L\'utilisation actuelle est de :disk_usage alors que la limite autorisée est de :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/hi/notifications.php b/resources/lang/vendor/backup/hi/notifications.php deleted file mode 100644 index 74a188d3d..000000000 --- a/resources/lang/vendor/backup/hi/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'गलती संदेश: :message', - 'exception_trace' => 'गलती निशान: :trace', - 'exception_message_title' => 'गलती संदेश', - 'exception_trace_title' => 'गलती निशान', - - 'backup_failed_subject' => ':application_name का बैकअप असफल रहा', - 'backup_failed_body' => 'जरूरी सुचना: :application_name का बैकअप लेते समय असफल रहे', - - 'backup_successful_subject' => ':application_name का बैकअप सफल रहा', - 'backup_successful_subject_title' => 'बैकअप सफल रहा!', - 'backup_successful_body' => 'खुशखबरी, :application_name का बैकअप :disk_name पर संग्रहित करने मे सफल रहे.', - - 'cleanup_failed_subject' => ':application_name के बैकअप की सफाई असफल रही.', - 'cleanup_failed_body' => ':application_name के बैकअप की सफाई करते समय कुछ बाधा आयी है.', - - 'cleanup_successful_subject' => ':application_name के बैकअप की सफाई सफल रही', - 'cleanup_successful_subject_title' => 'बैकअप की सफाई सफल रही!', - 'cleanup_successful_body' => ':application_name का बैकअप जो :disk_name नाम की डिस्क पर संग्रहित है, उसकी सफाई सफल रही.', - - 'healthy_backup_found_subject' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप स्वस्थ है', - 'healthy_backup_found_subject_title' => ':application_name के सभी बैकअप स्वस्थ है', - 'healthy_backup_found_body' => 'बहुत बढ़िया! :application_name के सभी बैकअप स्वस्थ है.', - - 'unhealthy_backup_found_subject' => 'जरूरी सुचना : :application_name के बैकअप अस्वस्थ है', - 'unhealthy_backup_found_subject_title' => 'जरूरी सुचना : :application_name के बैकअप :problem के बजेसे अस्वस्थ है', - 'unhealthy_backup_found_body' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप अस्वस्थ है', - 'unhealthy_backup_found_not_reachable' => ':error के बजेसे बैकअप की मंजिल तक पोहोच नहीं सकते.', - 'unhealthy_backup_found_empty' => 'इस एप्लीकेशन का कोई भी बैकअप नहीं है.', - 'unhealthy_backup_found_old' => 'हालहीमें :date को लिया हुआ बैकअप बहुत पुराना है.', - 'unhealthy_backup_found_unknown' => 'माफ़ कीजिये, सही कारण निर्धारित नहीं कर सकते.', - 'unhealthy_backup_found_full' => 'सभी बैकअप बहुत ज्यादा जगह का उपयोग कर रहे है. फ़िलहाल सभी बैकअप :disk_usage जगह का उपयोग कर रहे है, जो की :disk_limit अनुमति सीमा से अधिक का है.', -]; diff --git a/resources/lang/vendor/backup/id/notifications.php b/resources/lang/vendor/backup/id/notifications.php deleted file mode 100644 index 971322a02..000000000 --- a/resources/lang/vendor/backup/id/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Pesan pengecualian: :message', - 'exception_trace' => 'Jejak pengecualian: :trace', - 'exception_message_title' => 'Pesan pengecualian', - 'exception_trace_title' => 'Jejak pengecualian', - - 'backup_failed_subject' => 'Gagal backup :application_name', - 'backup_failed_body' => 'Penting: Sebuah error terjadi ketika membackup :application_name', - - 'backup_successful_subject' => 'Backup baru sukses dari :application_name', - 'backup_successful_subject_title' => 'Backup baru sukses!', - 'backup_successful_body' => 'Kabar baik, sebuah backup baru dari :application_name sukses dibuat pada disk bernama :disk_name.', - - 'cleanup_failed_subject' => 'Membersihkan backup dari :application_name yang gagal.', - 'cleanup_failed_body' => 'Sebuah error teradi ketika membersihkan backup dari :application_name', - - 'cleanup_successful_subject' => 'Sukses membersihkan backup :application_name', - 'cleanup_successful_subject_title' => 'Sukses membersihkan backup!', - 'cleanup_successful_body' => 'Pembersihan backup :application_name pada disk bernama :disk_name telah sukses.', - - 'healthy_backup_found_subject' => 'Backup untuk :application_name pada disk :disk_name sehat', - 'healthy_backup_found_subject_title' => 'Backup untuk :application_name sehat', - 'healthy_backup_found_body' => 'Backup untuk :application_name dipertimbangkan sehat. Kerja bagus!', - - 'unhealthy_backup_found_subject' => 'Penting: Backup untuk :application_name tidak sehat', - 'unhealthy_backup_found_subject_title' => 'Penting: Backup untuk :application_name tidak sehat. :problem', - 'unhealthy_backup_found_body' => 'Backup untuk :application_name pada disk :disk_name tidak sehat.', - 'unhealthy_backup_found_not_reachable' => 'Tujuan backup tidak dapat terjangkau. :error', - 'unhealthy_backup_found_empty' => 'Tidak ada backup pada aplikasi ini sama sekali.', - 'unhealthy_backup_found_old' => 'Backup terakhir dibuat pada :date dimana dipertimbahkan sudah sangat lama.', - 'unhealthy_backup_found_unknown' => 'Maaf, sebuah alasan persisnya tidak dapat ditentukan.', - 'unhealthy_backup_found_full' => 'Backup menggunakan terlalu banyak kapasitas penyimpanan. Penggunaan terkini adalah :disk_usage dimana lebih besar dari batas yang diperbolehkan yaitu :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/it/notifications.php b/resources/lang/vendor/backup/it/notifications.php deleted file mode 100644 index 43ad38e48..000000000 --- a/resources/lang/vendor/backup/it/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Messaggio dell\'eccezione: :message', - 'exception_trace' => 'Traccia dell\'eccezione: :trace', - 'exception_message_title' => 'Messaggio dell\'eccezione', - 'exception_trace_title' => 'Traccia dell\'eccezione', - - 'backup_failed_subject' => 'Fallito il backup di :application_name', - 'backup_failed_body' => 'Importante: Si è verificato un errore durante il backup di :application_name', - - 'backup_successful_subject' => 'Creato nuovo backup di :application_name', - 'backup_successful_subject_title' => 'Nuovo backup creato!', - 'backup_successful_body' => 'Grande notizia, un nuovo backup di :application_name è stato creato con successo sul disco :disk_name.', - - 'cleanup_failed_subject' => 'Pulizia dei backup di :application_name fallita.', - 'cleanup_failed_body' => 'Si è verificato un errore durante la pulizia dei backup di :application_name', - - 'cleanup_successful_subject' => 'Pulizia dei backup di :application_name avvenuta con successo', - 'cleanup_successful_subject_title' => 'Pulizia dei backup avvenuta con successo!', - 'cleanup_successful_body' => 'La pulizia dei backup di :application_name sul disco :disk_name è avvenuta con successo.', - - 'healthy_backup_found_subject' => 'I backup per :application_name sul disco :disk_name sono sani', - 'healthy_backup_found_subject_title' => 'I backup per :application_name sono sani', - 'healthy_backup_found_body' => 'I backup per :application_name sono considerati sani. Bel Lavoro!', - - 'unhealthy_backup_found_subject' => 'Importante: i backup per :application_name sono corrotti', - 'unhealthy_backup_found_subject_title' => 'Importante: i backup per :application_name sono corrotti. :problem', - 'unhealthy_backup_found_body' => 'I backup per :application_name sul disco :disk_name sono corrotti.', - 'unhealthy_backup_found_not_reachable' => 'Impossibile raggiungere la destinazione di backup. :error', - 'unhealthy_backup_found_empty' => 'Non esiste alcun backup di questa applicazione.', - 'unhealthy_backup_found_old' => 'L\'ultimo backup fatto il :date è considerato troppo vecchio.', - 'unhealthy_backup_found_unknown' => 'Spiacenti, non è possibile determinare una ragione esatta.', - 'unhealthy_backup_found_full' => 'I backup utilizzano troppa memoria. L\'utilizzo corrente è :disk_usage che è superiore al limite consentito di :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/ja/notifications.php b/resources/lang/vendor/backup/ja/notifications.php deleted file mode 100644 index f272e552a..000000000 --- a/resources/lang/vendor/backup/ja/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - '例外のメッセージ: :message', - 'exception_trace' => '例外の追跡: :trace', - 'exception_message_title' => '例外のメッセージ', - 'exception_trace_title' => '例外の追跡', - - 'backup_failed_subject' => ':application_name のバックアップに失敗しました。', - 'backup_failed_body' => '重要: :application_name のバックアップ中にエラーが発生しました。', - - 'backup_successful_subject' => ':application_name のバックアップに成功しました。', - 'backup_successful_subject_title' => 'バックアップに成功しました!', - 'backup_successful_body' => '朗報です。ディスク :disk_name へ :application_name のバックアップが成功しました。', - - 'cleanup_failed_subject' => ':application_name のバックアップ削除に失敗しました。', - 'cleanup_failed_body' => ':application_name のバックアップ削除中にエラーが発生しました。', - - 'cleanup_successful_subject' => ':application_name のバックアップ削除に成功しました。', - 'cleanup_successful_subject_title' => 'バックアップ削除に成功しました!', - 'cleanup_successful_body' => 'ディスク :disk_name に保存された :application_name のバックアップ削除に成功しました。', - - 'healthy_backup_found_subject' => 'ディスク :disk_name への :application_name のバックアップは正常です。', - 'healthy_backup_found_subject_title' => ':application_name のバックアップは正常です。', - 'healthy_backup_found_body' => ':application_name へのバックアップは正常です。いい仕事してますね!', - - 'unhealthy_backup_found_subject' => '重要: :application_name のバックアップに異常があります。', - 'unhealthy_backup_found_subject_title' => '重要: :application_name のバックアップに異常があります。 :problem', - 'unhealthy_backup_found_body' => ':disk_name への :application_name のバックアップに異常があります。', - 'unhealthy_backup_found_not_reachable' => 'バックアップ先にアクセスできませんでした。 :error', - 'unhealthy_backup_found_empty' => 'このアプリケーションのバックアップは見つかりませんでした。', - 'unhealthy_backup_found_old' => ':date に保存された直近のバックアップが古すぎます。', - 'unhealthy_backup_found_unknown' => '申し訳ございません。予期せぬエラーです。', - 'unhealthy_backup_found_full' => 'バックアップがディスク容量を圧迫しています。現在の使用量 :disk_usage は、許可された限界値 :disk_limit を超えています。', -]; diff --git a/resources/lang/vendor/backup/nl/notifications.php b/resources/lang/vendor/backup/nl/notifications.php deleted file mode 100644 index 5dbc65edf..000000000 --- a/resources/lang/vendor/backup/nl/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Fout bericht: :message', - 'exception_trace' => 'Fout trace: :trace', - 'exception_message_title' => 'Fout bericht', - 'exception_trace_title' => 'Fout trace', - - 'backup_failed_subject' => 'Back-up van :application_name mislukt', - 'backup_failed_body' => 'Belangrijk: Er ging iets fout tijdens het maken van een back-up van :application_name', - - 'backup_successful_subject' => 'Succesvolle nieuwe back-up van :application_name', - 'backup_successful_subject_title' => 'Succesvolle nieuwe back-up!', - 'backup_successful_body' => 'Goed nieuws, een nieuwe back-up van :application_name was succesvol aangemaakt op de schijf genaamd :disk_name.', - - 'cleanup_failed_subject' => 'Het opschonen van de back-ups van :application_name is mislukt.', - 'cleanup_failed_body' => 'Er ging iets fout tijdens het opschonen van de back-ups van :application_name', - - 'cleanup_successful_subject' => 'Opschonen van :application_name back-ups was succesvol.', - 'cleanup_successful_subject_title' => 'Opschonen van back-ups was succesvol!', - 'cleanup_successful_body' => 'Het opschonen van de :application_name back-ups op de schijf genaamd :disk_name was succesvol.', - - 'healthy_backup_found_subject' => 'De back-ups voor :application_name op schijf :disk_name zijn gezond', - 'healthy_backup_found_subject_title' => 'De back-ups voor :application_name zijn gezond', - 'healthy_backup_found_body' => 'De back-ups voor :application_name worden als gezond beschouwd. Goed gedaan!', - - 'unhealthy_backup_found_subject' => 'Belangrijk: De back-ups voor :application_name zijn niet meer gezond', - 'unhealthy_backup_found_subject_title' => 'Belangrijk: De back-ups voor :application_name zijn niet gezond. :problem', - 'unhealthy_backup_found_body' => 'De back-ups voor :application_name op schijf :disk_name zijn niet gezond.', - 'unhealthy_backup_found_not_reachable' => 'De back-upbestemming kon niet worden bereikt. :error', - 'unhealthy_backup_found_empty' => 'Er zijn geen back-ups van deze applicatie beschikbaar.', - 'unhealthy_backup_found_old' => 'De laatste back-up gemaakt op :date is te oud.', - 'unhealthy_backup_found_unknown' => 'Sorry, een exacte reden kon niet worden bepaald.', - 'unhealthy_backup_found_full' => 'De back-ups gebruiken te veel opslagruimte. Momenteel wordt er :disk_usage gebruikt wat hoger is dan de toegestane limiet van :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/no/notifications.php b/resources/lang/vendor/backup/no/notifications.php deleted file mode 100644 index e60bc1c25..000000000 --- a/resources/lang/vendor/backup/no/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Exception: :message', - 'exception_trace' => 'Exception trace: :trace', - 'exception_message_title' => 'Exception', - 'exception_trace_title' => 'Exception trace', - - 'backup_failed_subject' => 'Backup feilet for :application_name', - 'backup_failed_body' => 'Viktg: En feil oppstod under backing av :application_name', - - 'backup_successful_subject' => 'Gjennomført backup av :application_name', - 'backup_successful_subject_title' => 'Gjennomført backup!', - 'backup_successful_body' => 'Gode nyheter, en ny backup av :application_name ble opprettet på disken :disk_name.', - - 'cleanup_failed_subject' => 'Opprydding av backup for :application_name feilet.', - 'cleanup_failed_body' => 'En feil oppstod under opprydding av backups for :application_name', - - 'cleanup_successful_subject' => 'Opprydding av backup for :application_name gjennomført', - 'cleanup_successful_subject_title' => 'Opprydding av backup gjennomført!', - 'cleanup_successful_body' => 'Oppryddingen av backup for :application_name på disken :disk_name har blitt gjennomført.', - - 'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK', - 'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK', - 'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt jobba!', - - 'unhealthy_backup_found_subject' => 'Viktig: Backups for :application_name ikke OK', - 'unhealthy_backup_found_subject_title' => 'Viktig: Backups for :application_name er ikke OK. :problem', - 'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er ikke OK.', - 'unhealthy_backup_found_not_reachable' => 'Kunne ikke finne backup-destinasjonen. :error', - 'unhealthy_backup_found_empty' => 'Denne applikasjonen mangler backups.', - 'unhealthy_backup_found_old' => 'Den siste backupem fra :date er for gammel.', - 'unhealthy_backup_found_unknown' => 'Beklager, kunne ikke finne nøyaktig årsak.', - 'unhealthy_backup_found_full' => 'Backups bruker for mye lagringsplass. Nåværende diskbruk er :disk_usage, som er mer enn den tillatte grensen på :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/pl/notifications.php b/resources/lang/vendor/backup/pl/notifications.php deleted file mode 100644 index 7b267ac8f..000000000 --- a/resources/lang/vendor/backup/pl/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Błąd: :message', - 'exception_trace' => 'Zrzut błędu: :trace', - 'exception_message_title' => 'Błąd', - 'exception_trace_title' => 'Zrzut błędu', - - 'backup_failed_subject' => 'Tworzenie kopii zapasowej aplikacji :application_name nie powiodło się', - 'backup_failed_body' => 'Ważne: Wystąpił błąd podczas tworzenia kopii zapasowej aplikacji :application_name', - - 'backup_successful_subject' => 'Pomyślnie utworzono kopię zapasową aplikacji :application_name', - 'backup_successful_subject_title' => 'Nowa kopia zapasowa!', - 'backup_successful_body' => 'Wspaniała wiadomość, nowa kopia zapasowa aplikacji :application_name została pomyślnie utworzona na dysku o nazwie :disk_name.', - - 'cleanup_failed_subject' => 'Czyszczenie kopii zapasowych aplikacji :application_name nie powiodło się.', - 'cleanup_failed_body' => 'Wystąpił błąd podczas czyszczenia kopii zapasowej aplikacji :application_name', - - 'cleanup_successful_subject' => 'Kopie zapasowe aplikacji :application_name zostały pomyślnie wyczyszczone', - 'cleanup_successful_subject_title' => 'Kopie zapasowe zostały pomyślnie wyczyszczone!', - 'cleanup_successful_body' => 'Czyszczenie kopii zapasowych aplikacji :application_name na dysku :disk_name zakończone sukcesem.', - - 'healthy_backup_found_subject' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są poprawne', - 'healthy_backup_found_subject_title' => 'Kopie zapasowe aplikacji :application_name są poprawne', - 'healthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name są poprawne. Dobra robota!', - - 'unhealthy_backup_found_subject' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne', - 'unhealthy_backup_found_subject_title' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne. :problem', - 'unhealthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są niepoprawne.', - 'unhealthy_backup_found_not_reachable' => 'Miejsce docelowe kopii zapasowej nie jest osiągalne. :error', - 'unhealthy_backup_found_empty' => 'W aplikacji nie ma żadnej kopii zapasowych tej aplikacji.', - 'unhealthy_backup_found_old' => 'Ostatnia kopia zapasowa wykonania dnia :date jest zbyt stara.', - 'unhealthy_backup_found_unknown' => 'Niestety, nie można ustalić dokładnego błędu.', - 'unhealthy_backup_found_full' => 'Kopie zapasowe zajmują zbyt dużo miejsca. Obecne użycie dysku :disk_usage jest większe od ustalonego limitu :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/pt-BR/notifications.php b/resources/lang/vendor/backup/pt-BR/notifications.php deleted file mode 100644 index d22ebf4d4..000000000 --- a/resources/lang/vendor/backup/pt-BR/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Exception message: :message', - 'exception_trace' => 'Exception trace: :trace', - 'exception_message_title' => 'Exception message', - 'exception_trace_title' => 'Exception trace', - - 'backup_failed_subject' => 'Falha no backup da aplicação :application_name', - 'backup_failed_body' => 'Importante: Ocorreu um erro ao fazer o backup da aplicação :application_name', - - 'backup_successful_subject' => 'Backup realizado com sucesso: :application_name', - 'backup_successful_subject_title' => 'Backup Realizado com sucesso!', - 'backup_successful_body' => 'Boas notícias, um novo backup da aplicação :application_name foi criado no disco :disk_name.', - - 'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.', - 'cleanup_failed_body' => 'Um erro ocorreu ao fazer a limpeza dos backups da aplicação :application_name', - - 'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!', - 'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!', - 'cleanup_successful_body' => 'A limpeza dos backups da aplicação :application_name no disco :disk_name foi concluída.', - - 'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia', - 'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia', - 'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!', - - 'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia', - 'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem', - 'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.', - 'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error', - 'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.', - 'unhealthy_backup_found_old' => 'O último backup realizado em :date é considerado muito antigo.', - 'unhealthy_backup_found_unknown' => 'Desculpe, a exata razão não pode ser encontrada.', - 'unhealthy_backup_found_full' => 'Os backups estão usando muito espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/pt/notifications.php b/resources/lang/vendor/backup/pt/notifications.php deleted file mode 100644 index 1656b930c..000000000 --- a/resources/lang/vendor/backup/pt/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Exception message: :message', - 'exception_trace' => 'Exception trace: :trace', - 'exception_message_title' => 'Exception message', - 'exception_trace_title' => 'Exception trace', - - 'backup_failed_subject' => 'Falha no backup da aplicação :application_name', - 'backup_failed_body' => 'Importante: Ocorreu um erro ao executar o backup da aplicação :application_name', - - 'backup_successful_subject' => 'Backup realizado com sucesso: :application_name', - 'backup_successful_subject_title' => 'Backup Realizado com Sucesso!', - 'backup_successful_body' => 'Boas notícias, foi criado um novo backup no disco :disk_name referente à aplicação :application_name.', - - 'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.', - 'cleanup_failed_body' => 'Ocorreu um erro ao executar a limpeza dos backups da aplicação :application_name', - - 'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!', - 'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!', - 'cleanup_successful_body' => 'Concluída a limpeza dos backups da aplicação :application_name no disco :disk_name.', - - 'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia', - 'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia', - 'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!', - - 'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia', - 'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem', - 'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.', - 'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error', - 'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.', - 'unhealthy_backup_found_old' => 'O último backup realizado em :date é demasiado antigo.', - 'unhealthy_backup_found_unknown' => 'Desculpe, impossível determinar a razão exata.', - 'unhealthy_backup_found_full' => 'Os backups estão a utilizar demasiado espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/ro/notifications.php b/resources/lang/vendor/backup/ro/notifications.php deleted file mode 100644 index cc0322db9..000000000 --- a/resources/lang/vendor/backup/ro/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Cu excepția mesajului: :message', - 'exception_trace' => 'Urmă excepţie: :trace', - 'exception_message_title' => 'Mesaj de excepție', - 'exception_trace_title' => 'Urmă excepţie', - - 'backup_failed_subject' => 'Nu s-a putut face copie de rezervă pentru :application_name', - 'backup_failed_body' => 'Important: A apărut o eroare în timpul generării copiei de rezervă pentru :application_name', - - 'backup_successful_subject' => 'Copie de rezervă efectuată cu succes pentru :application_name', - 'backup_successful_subject_title' => 'O nouă copie de rezervă a fost efectuată cu succes!', - 'backup_successful_body' => 'Vești bune, o nouă copie de rezervă pentru :application_name a fost creată cu succes pe discul cu numele :disk_name.', - - 'cleanup_failed_subject' => 'Curățarea copiilor de rezervă pentru :application_name nu a reușit.', - 'cleanup_failed_body' => 'A apărut o eroare în timpul curățirii copiilor de rezervă pentru :application_name', - - 'cleanup_successful_subject' => 'Curățarea copiilor de rezervă pentru :application_name a fost făcută cu succes', - 'cleanup_successful_subject_title' => 'Curățarea copiilor de rezervă a fost făcută cu succes!', - 'cleanup_successful_body' => 'Curățarea copiilor de rezervă pentru :application_name de pe discul cu numele :disk_name a fost făcută cu succes.', - - 'healthy_backup_found_subject' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name sunt în regulă', - 'healthy_backup_found_subject_title' => 'Copiile de rezervă pentru :application_name sunt în regulă', - 'healthy_backup_found_body' => 'Copiile de rezervă pentru :application_name sunt considerate în regulă. Bună treabă!', - - 'unhealthy_backup_found_subject' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă', - 'unhealthy_backup_found_subject_title' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă. :problem', - 'unhealthy_backup_found_body' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name nu sunt în regulă.', - 'unhealthy_backup_found_not_reachable' => 'Nu se poate ajunge la destinația copiilor de rezervă. :error', - 'unhealthy_backup_found_empty' => 'Nu există copii de rezervă ale acestei aplicații.', - 'unhealthy_backup_found_old' => 'Cea mai recentă copie de rezervă făcută la :date este considerată prea veche.', - 'unhealthy_backup_found_unknown' => 'Ne pare rău, un motiv exact nu poate fi determinat.', - 'unhealthy_backup_found_full' => 'Copiile de rezervă folosesc prea mult spațiu de stocare. Utilizarea curentă este de :disk_usage care este mai mare decât limita permisă de :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/ru/notifications.php b/resources/lang/vendor/backup/ru/notifications.php deleted file mode 100644 index 875633c38..000000000 --- a/resources/lang/vendor/backup/ru/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Сообщение об ошибке: :message', - 'exception_trace' => 'Сведения об ошибке: :trace', - 'exception_message_title' => 'Сообщение об ошибке', - 'exception_trace_title' => 'Сведения об ошибке', - - 'backup_failed_subject' => 'Не удалось сделать резервную копию :application_name', - 'backup_failed_body' => 'Внимание: Произошла ошибка во время резервного копирования :application_name', - - 'backup_successful_subject' => 'Успешно создана новая резервная копия :application_name', - 'backup_successful_subject_title' => 'Успешно создана новая резервная копия!', - 'backup_successful_body' => 'Отличная новость, новая резервная копия :application_name успешно создана и сохранена на диск :disk_name.', - - 'cleanup_failed_subject' => 'Не удалось очистить резервные копии :application_name', - 'cleanup_failed_body' => 'Произошла ошибка при очистке резервных копий :application_name', - - 'cleanup_successful_subject' => 'Очистка от резервных копий :application_name прошла успешно', - 'cleanup_successful_subject_title' => 'Очистка резервных копий прошла удачно!', - 'cleanup_successful_body' => 'Очистка от старых резервных копий :application_name на диске :disk_name прошла удачно.', - - 'healthy_backup_found_subject' => 'Резервная копия :application_name с диска :disk_name установлена', - 'healthy_backup_found_subject_title' => 'Резервная копия :application_name установлена', - 'healthy_backup_found_body' => 'Резервная копия :application_name успешно установлена. Хорошая работа!', - - 'unhealthy_backup_found_subject' => 'Внимание: резервная копия :application_name не установилась', - 'unhealthy_backup_found_subject_title' => 'Внимание: резервная копия для :application_name не установилась. :problem', - 'unhealthy_backup_found_body' => 'Резервная копия для :application_name на диске :disk_name не установилась.', - 'unhealthy_backup_found_not_reachable' => 'Резервная копия не смогла установиться. :error', - 'unhealthy_backup_found_empty' => 'Резервные копии для этого приложения отсутствуют.', - 'unhealthy_backup_found_old' => 'Последнее резервное копирование создано :date является устаревшим.', - 'unhealthy_backup_found_unknown' => 'Извините, точная причина не может быть определена.', - 'unhealthy_backup_found_full' => 'Резервные копии используют слишком много памяти. Используется :disk_usage что выше допустимого предела: :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/tr/notifications.php b/resources/lang/vendor/backup/tr/notifications.php deleted file mode 100644 index 298b0ec4d..000000000 --- a/resources/lang/vendor/backup/tr/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Hata mesajı: :message', - 'exception_trace' => 'Hata izleri: :trace', - 'exception_message_title' => 'Hata mesajı', - 'exception_trace_title' => 'Hata izleri', - - 'backup_failed_subject' => 'Yedeklenemedi :application_name', - 'backup_failed_body' => 'Önemli: Yedeklenirken bir hata oluştu :application_name', - - 'backup_successful_subject' => 'Başarılı :application_name yeni yedeklemesi', - 'backup_successful_subject_title' => 'Başarılı bir yeni yedekleme!', - 'backup_successful_body' => 'Harika bir haber, :application_name âit yeni bir yedekleme :disk_name adlı diskte başarıyla oluşturuldu.', - - 'cleanup_failed_subject' => ':application_name yedeklemeleri temizlenmesi başarısız.', - 'cleanup_failed_body' => ':application_name yedeklerini temizlerken bir hata oluştu ', - - 'cleanup_successful_subject' => ':application_name yedeklemeleri temizlenmesi başarılı.', - 'cleanup_successful_subject_title' => 'Yedeklerin temizlenmesi başarılı!', - 'cleanup_successful_body' => ':application_name yedeklemeleri temizlenmesi ,:disk_name diskinden silindi', - - 'healthy_backup_found_subject' => ':application_name yedeklenmesi ,:disk_name adlı diskte sağlıklı', - 'healthy_backup_found_subject_title' => ':application_name yedeklenmesi sağlıklı', - 'healthy_backup_found_body' => ':application_name için yapılan yedeklemeler sağlıklı sayılır. Aferin!', - - 'unhealthy_backup_found_subject' => 'Önemli: :application_name için yedeklemeler sağlıksız', - 'unhealthy_backup_found_subject_title' => 'Önemli: :application_name için yedeklemeler sağlıksız. :problem', - 'unhealthy_backup_found_body' => 'Yedeklemeler: :application_name disk: :disk_name sağlıksız.', - 'unhealthy_backup_found_not_reachable' => 'Yedekleme hedefine ulaşılamıyor. :error', - 'unhealthy_backup_found_empty' => 'Bu uygulamanın yedekleri yok.', - 'unhealthy_backup_found_old' => ':date tarihinde yapılan en son yedekleme çok eski kabul ediliyor.', - 'unhealthy_backup_found_unknown' => 'Üzgünüm, kesin bir sebep belirlenemiyor.', - 'unhealthy_backup_found_full' => 'Yedeklemeler çok fazla depolama alanı kullanıyor. Şu anki kullanım: :disk_usage, izin verilen sınırdan yüksek: :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/uk/notifications.php b/resources/lang/vendor/backup/uk/notifications.php deleted file mode 100644 index a39c90a25..000000000 --- a/resources/lang/vendor/backup/uk/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - 'Повідомлення про помилку: :message', - 'exception_trace' => 'Деталі помилки: :trace', - 'exception_message_title' => 'Повідомлення помилки', - 'exception_trace_title' => 'Деталі помилки', - - 'backup_failed_subject' => 'Не вдалось зробити резервну копію :application_name', - 'backup_failed_body' => 'Увага: Трапилась помилка під час резервного копіювання :application_name', - - 'backup_successful_subject' => 'Успішне резервне копіювання :application_name', - 'backup_successful_subject_title' => 'Успішно створена резервна копія!', - 'backup_successful_body' => 'Чудова новина, нова резервна копія :application_name успішно створена і збережена на диск :disk_name.', - - 'cleanup_failed_subject' => 'Не вдалось очистити резервні копії :application_name', - 'cleanup_failed_body' => 'Сталася помилка під час очищення резервних копій :application_name', - - 'cleanup_successful_subject' => 'Успішне очищення від резервних копій :application_name', - 'cleanup_successful_subject_title' => 'Очищення резервних копій пройшло вдало!', - 'cleanup_successful_body' => 'Очищенно від старих резервних копій :application_name на диску :disk_name пойшло успішно.', - - 'healthy_backup_found_subject' => 'Резервна копія :application_name з диску :disk_name установлена', - 'healthy_backup_found_subject_title' => 'Резервна копія :application_name установлена', - 'healthy_backup_found_body' => 'Резервна копія :application_name успішно установлена. Хороша робота!', - - 'unhealthy_backup_found_subject' => 'Увага: резервна копія :application_name не установилась', - 'unhealthy_backup_found_subject_title' => 'Увага: резервна копія для :application_name не установилась. :problem', - 'unhealthy_backup_found_body' => 'Резервна копія для :application_name на диску :disk_name не установилась.', - 'unhealthy_backup_found_not_reachable' => 'Резервна копія не змогла установитись. :error', - 'unhealthy_backup_found_empty' => 'Резервні копії для цього додатку відсутні.', - 'unhealthy_backup_found_old' => 'Останнє резервне копіювання створено :date є застарілим.', - 'unhealthy_backup_found_unknown' => 'Вибачте, але ми не змогли визначити точну причину.', - 'unhealthy_backup_found_full' => 'Резервні копії використовують занадто багато пам`яті. Використовується :disk_usage що вище за допустиму межу :disk_limit.', -]; diff --git a/resources/lang/vendor/backup/zh-CN/notifications.php b/resources/lang/vendor/backup/zh-CN/notifications.php deleted file mode 100644 index bbab325df..000000000 --- a/resources/lang/vendor/backup/zh-CN/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - '异常信息: :message', - 'exception_trace' => '异常跟踪: :trace', - 'exception_message_title' => '异常信息', - 'exception_trace_title' => '异常跟踪', - - 'backup_failed_subject' => ':application_name 备份失败', - 'backup_failed_body' => '重要说明:备份 :application_name 时发生错误', - - 'backup_successful_subject' => ':application_name 备份成功', - 'backup_successful_subject_title' => '备份成功!', - 'backup_successful_body' => '好消息, :application_name 备份成功,位于磁盘 :disk_name 中。', - - 'cleanup_failed_subject' => '清除 :application_name 的备份失败。', - 'cleanup_failed_body' => '清除备份 :application_name 时发生错误', - - 'cleanup_successful_subject' => '成功清除 :application_name 的备份', - 'cleanup_successful_subject_title' => '成功清除备份!', - 'cleanup_successful_body' => '成功清除 :disk_name 磁盘上 :application_name 的备份。', - - 'healthy_backup_found_subject' => ':disk_name 磁盘上 :application_name 的备份是健康的', - 'healthy_backup_found_subject_title' => ':application_name 的备份是健康的', - 'healthy_backup_found_body' => ':application_name 的备份是健康的。干的好!', - - 'unhealthy_backup_found_subject' => '重要说明::application_name 的备份不健康', - 'unhealthy_backup_found_subject_title' => '重要说明::application_name 备份不健康。 :problem', - 'unhealthy_backup_found_body' => ':disk_name 磁盘上 :application_name 的备份不健康。', - 'unhealthy_backup_found_not_reachable' => '无法访问备份目标。 :error', - 'unhealthy_backup_found_empty' => '根本没有此应用程序的备份。', - 'unhealthy_backup_found_old' => '最近的备份创建于 :date ,太旧了。', - 'unhealthy_backup_found_unknown' => '对不起,确切原因无法确定。', - 'unhealthy_backup_found_full' => '备份占用了太多存储空间。当前占用了 :disk_usage ,高于允许的限制 :disk_limit。', -]; diff --git a/resources/lang/vendor/backup/zh-TW/notifications.php b/resources/lang/vendor/backup/zh-TW/notifications.php deleted file mode 100644 index be561c480..000000000 --- a/resources/lang/vendor/backup/zh-TW/notifications.php +++ /dev/null @@ -1,35 +0,0 @@ - '異常訊息: :message', - 'exception_trace' => '異常追蹤: :trace', - 'exception_message_title' => '異常訊息', - 'exception_trace_title' => '異常追蹤', - - 'backup_failed_subject' => ':application_name 備份失敗', - 'backup_failed_body' => '重要說明:備份 :application_name 時發生錯誤', - - 'backup_successful_subject' => ':application_name 備份成功', - 'backup_successful_subject_title' => '備份成功!', - 'backup_successful_body' => '好消息, :application_name 備份成功,位於磁盤 :disk_name 中。', - - 'cleanup_failed_subject' => '清除 :application_name 的備份失敗。', - 'cleanup_failed_body' => '清除備份 :application_name 時發生錯誤', - - 'cleanup_successful_subject' => '成功清除 :application_name 的備份', - 'cleanup_successful_subject_title' => '成功清除備份!', - 'cleanup_successful_body' => '成功清除 :disk_name 磁盤上 :application_name 的備份。', - - 'healthy_backup_found_subject' => ':disk_name 磁盤上 :application_name 的備份是健康的', - 'healthy_backup_found_subject_title' => ':application_name 的備份是健康的', - 'healthy_backup_found_body' => ':application_name 的備份是健康的。幹的好!', - - 'unhealthy_backup_found_subject' => '重要說明::application_name 的備份不健康', - 'unhealthy_backup_found_subject_title' => '重要說明::application_name 備份不健康。 :problem', - 'unhealthy_backup_found_body' => ':disk_name 磁盤上 :application_name 的備份不健康。', - 'unhealthy_backup_found_not_reachable' => '無法訪問備份目標。 :error', - 'unhealthy_backup_found_empty' => '根本沒有此應用程序的備份。', - 'unhealthy_backup_found_old' => '最近的備份創建於 :date ,太舊了。', - 'unhealthy_backup_found_unknown' => '對不起,確切原因無法確定。', - 'unhealthy_backup_found_full' => '備份佔用了太多存儲空間。當前佔用了 :disk_usage ,高於允許的限制 :disk_limit。', -]; diff --git a/resources/old_js/.DS_Store b/resources/old_js/.DS_Store new file mode 100644 index 000000000..b23f1f858 Binary files /dev/null and b/resources/old_js/.DS_Store differ diff --git a/resources/old_js/app.js b/resources/old_js/app.js new file mode 100644 index 000000000..0568a0aa7 --- /dev/null +++ b/resources/old_js/app.js @@ -0,0 +1,53 @@ +import '../js/bootstrap.js'; +import '../css/app.css'; + +import Vue from 'vue'; +import store from './store'; +import VueRouter from 'vue-router'; +import router from './routes'; +import i18n from './i18n'; +import VueLocalStorage from 'vue-localstorage'; +import VueSweetalert2 from 'vue-sweetalert2'; +import 'sweetalert2/dist/sweetalert2.min.css'; +import VueToastify from 'vue-toastify'; +import VueNumber from 'vue-number-animation'; +import VueEcho from 'vue-echo-laravel'; +import Buefy from 'buefy'; +import fullscreen from 'vue-fullscreen'; +import LaravelPermissionToVueJS from './extra/laravel-permission-to-vuejs'; + +import VueImg from 'v-img'; +import VueTypedJs from 'vue-typed-js' + +import RootContainer from './views/RootContainer.vue'; + +Vue.use(Buefy); +Vue.use(VueRouter); +Vue.use(VueLocalStorage); +Vue.use(VueSweetalert2); +Vue.use(VueToastify, { + theme: 'dark', + errorDuration: 5000, +}); +// Vue.use(VueMask) +Vue.use(VueNumber); +Vue.use(VueEcho, window.Echo); +Vue.use(fullscreen); +Vue.use(VueImg); +Vue.use(VueTypedJs); +Vue.use(LaravelPermissionToVueJS); + +// Format a number with commas: "10,000" +Vue.filter('commas', value => { + return parseInt(value).toLocaleString(); +}); + +const vm = new Vue({ + el: '#app', + store, + router, + i18n, + components: { + RootContainer + } +}); diff --git a/resources/js/assets/IMG_0286.JPG b/resources/old_js/assets/IMG_0286.JPG similarity index 100% rename from resources/js/assets/IMG_0286.JPG rename to resources/old_js/assets/IMG_0286.JPG diff --git a/resources/js/assets/IMG_0554.jpg b/resources/old_js/assets/IMG_0554.jpg similarity index 100% rename from resources/js/assets/IMG_0554.jpg rename to resources/old_js/assets/IMG_0554.jpg diff --git a/resources/js/assets/IMG_0556.jpg b/resources/old_js/assets/IMG_0556.jpg similarity index 100% rename from resources/js/assets/IMG_0556.jpg rename to resources/old_js/assets/IMG_0556.jpg diff --git a/resources/js/assets/OLM_Logo.jpg b/resources/old_js/assets/OLM_Logo.jpg similarity index 100% rename from resources/js/assets/OLM_Logo.jpg rename to resources/old_js/assets/OLM_Logo.jpg diff --git a/public/build/assets/facemask-map-BqUpLVXB.png b/resources/old_js/assets/about/facemask-map.png similarity index 100% rename from public/build/assets/facemask-map-BqUpLVXB.png rename to resources/old_js/assets/about/facemask-map.png diff --git a/public/build/assets/facemask-tag-DTb-EcZv.png b/resources/old_js/assets/about/facemask-tag.png similarity index 100% rename from public/build/assets/facemask-tag-DTb-EcZv.png rename to resources/old_js/assets/about/facemask-tag.png diff --git a/public/build/assets/iphone-BXDqbS6h.png b/resources/old_js/assets/about/iphone.png similarity index 100% rename from public/build/assets/iphone-BXDqbS6h.png rename to resources/old_js/assets/about/iphone.png diff --git a/resources/js/assets/bird-plastic.jpg b/resources/old_js/assets/bird-plastic.jpg similarity index 100% rename from resources/js/assets/bird-plastic.jpg rename to resources/old_js/assets/bird-plastic.jpg diff --git a/resources/js/assets/butts.jpg b/resources/old_js/assets/butts.jpg similarity index 100% rename from resources/js/assets/butts.jpg rename to resources/old_js/assets/butts.jpg diff --git a/resources/js/assets/cigbutt.png b/resources/old_js/assets/cigbutt.png similarity index 100% rename from resources/js/assets/cigbutt.png rename to resources/old_js/assets/cigbutt.png diff --git a/resources/js/assets/cigbutts.jpg b/resources/old_js/assets/cigbutts.jpg similarity index 100% rename from resources/js/assets/cigbutts.jpg rename to resources/old_js/assets/cigbutts.jpg diff --git a/resources/js/assets/cigbutts_jar.jpg b/resources/old_js/assets/cigbutts_jar.jpg similarity index 100% rename from resources/js/assets/cigbutts_jar.jpg rename to resources/old_js/assets/cigbutts_jar.jpg diff --git a/resources/js/assets/climate_pollution.jpg b/resources/old_js/assets/climate_pollution.jpg similarity index 100% rename from resources/js/assets/climate_pollution.jpg rename to resources/old_js/assets/climate_pollution.jpg diff --git a/resources/js/assets/confirm/Cork.png b/resources/old_js/assets/confirm/Cork.png similarity index 100% rename from resources/js/assets/confirm/Cork.png rename to resources/old_js/assets/confirm/Cork.png diff --git a/resources/js/assets/confirm/fb-hex-icon.png b/resources/old_js/assets/confirm/fb-hex-icon.png similarity index 100% rename from resources/js/assets/confirm/fb-hex-icon.png rename to resources/old_js/assets/confirm/fb-hex-icon.png diff --git a/resources/js/assets/confirm/insta-hex-icon.png b/resources/old_js/assets/confirm/insta-hex-icon.png similarity index 100% rename from resources/js/assets/confirm/insta-hex-icon.png rename to resources/old_js/assets/confirm/insta-hex-icon.png diff --git a/resources/js/assets/confirm/logo-1.jpg b/resources/old_js/assets/confirm/logo-1.jpg similarity index 100% rename from resources/js/assets/confirm/logo-1.jpg rename to resources/old_js/assets/confirm/logo-1.jpg diff --git a/resources/js/assets/confirm/olm-hex-map.png b/resources/old_js/assets/confirm/olm-hex-map.png similarity index 100% rename from resources/js/assets/confirm/olm-hex-map.png rename to resources/old_js/assets/confirm/olm-hex-map.png diff --git a/resources/js/assets/confirm/olm-logo-1.png b/resources/old_js/assets/confirm/olm-logo-1.png similarity index 100% rename from resources/js/assets/confirm/olm-logo-1.png rename to resources/old_js/assets/confirm/olm-logo-1.png diff --git a/resources/js/assets/confirm/olm-logo-2.png b/resources/old_js/assets/confirm/olm-logo-2.png similarity index 100% rename from resources/js/assets/confirm/olm-logo-2.png rename to resources/old_js/assets/confirm/olm-logo-2.png diff --git a/resources/js/assets/confirm/phone-litter.png b/resources/old_js/assets/confirm/phone-litter.png similarity index 100% rename from resources/js/assets/confirm/phone-litter.png rename to resources/old_js/assets/confirm/phone-litter.png diff --git a/resources/js/assets/confirm/phone-map.png b/resources/old_js/assets/confirm/phone-map.png similarity index 100% rename from resources/js/assets/confirm/phone-map.png rename to resources/old_js/assets/confirm/phone-map.png diff --git a/resources/js/assets/confirm/phone-upload.png b/resources/old_js/assets/confirm/phone-upload.png similarity index 100% rename from resources/js/assets/confirm/phone-upload.png rename to resources/old_js/assets/confirm/phone-upload.png diff --git a/resources/js/assets/confirm/pin-1.png b/resources/old_js/assets/confirm/pin-1.png similarity index 100% rename from resources/js/assets/confirm/pin-1.png rename to resources/old_js/assets/confirm/pin-1.png diff --git a/resources/js/assets/confirm/twitter-hex-icon.png b/resources/old_js/assets/confirm/twitter-hex-icon.png similarity index 100% rename from resources/js/assets/confirm/twitter-hex-icon.png rename to resources/old_js/assets/confirm/twitter-hex-icon.png diff --git a/resources/js/assets/confirm/world-map.png b/resources/old_js/assets/confirm/world-map.png similarity index 100% rename from resources/js/assets/confirm/world-map.png rename to resources/old_js/assets/confirm/world-map.png diff --git a/resources/js/assets/dog.jpeg b/resources/old_js/assets/dog.jpeg similarity index 100% rename from resources/js/assets/dog.jpeg rename to resources/old_js/assets/dog.jpeg diff --git a/resources/js/assets/forest_fire.jpg b/resources/old_js/assets/forest_fire.jpg similarity index 100% rename from resources/js/assets/forest_fire.jpg rename to resources/old_js/assets/forest_fire.jpg diff --git a/resources/js/assets/gofundme-brand-logo.png b/resources/old_js/assets/gofundme-brand-logo.png similarity index 100% rename from resources/js/assets/gofundme-brand-logo.png rename to resources/old_js/assets/gofundme-brand-logo.png diff --git a/resources/js/assets/graphic_map.png b/resources/old_js/assets/graphic_map.png similarity index 100% rename from resources/js/assets/graphic_map.png rename to resources/old_js/assets/graphic_map.png diff --git a/resources/js/assets/graphic_rocket.png b/resources/old_js/assets/graphic_rocket.png similarity index 100% rename from resources/js/assets/graphic_rocket.png rename to resources/old_js/assets/graphic_rocket.png diff --git a/resources/js/assets/grass.jpg b/resources/old_js/assets/grass.jpg similarity index 100% rename from resources/js/assets/grass.jpg rename to resources/old_js/assets/grass.jpg diff --git a/public/assets/icons/android.png b/resources/old_js/assets/icons/android.png similarity index 100% rename from public/assets/icons/android.png rename to resources/old_js/assets/icons/android.png diff --git a/public/build/assets/bronze-medal-2-DyRiKOrS.png b/resources/old_js/assets/icons/bronze-medal-2.png similarity index 100% rename from public/build/assets/bronze-medal-2-DyRiKOrS.png rename to resources/old_js/assets/icons/bronze-medal-2.png diff --git a/resources/js/assets/icons/bronze-medal.svg b/resources/old_js/assets/icons/bronze-medal.svg similarity index 100% rename from resources/js/assets/icons/bronze-medal.svg rename to resources/old_js/assets/icons/bronze-medal.svg diff --git a/resources/js/assets/icons/camera.png b/resources/old_js/assets/icons/camera.png similarity index 100% rename from resources/js/assets/icons/camera.png rename to resources/old_js/assets/icons/camera.png diff --git a/resources/js/assets/icons/facebook.png b/resources/old_js/assets/icons/facebook.png similarity index 100% rename from resources/js/assets/icons/facebook.png rename to resources/old_js/assets/icons/facebook.png diff --git a/resources/js/assets/icons/facebook2.png b/resources/old_js/assets/icons/facebook2.png similarity index 100% rename from resources/js/assets/icons/facebook2.png rename to resources/old_js/assets/icons/facebook2.png diff --git a/resources/js/assets/icons/flags/ad.png b/resources/old_js/assets/icons/flags/ad.png similarity index 100% rename from resources/js/assets/icons/flags/ad.png rename to resources/old_js/assets/icons/flags/ad.png diff --git a/resources/js/assets/icons/flags/ae.png b/resources/old_js/assets/icons/flags/ae.png similarity index 100% rename from resources/js/assets/icons/flags/ae.png rename to resources/old_js/assets/icons/flags/ae.png diff --git a/resources/js/assets/icons/flags/af.png b/resources/old_js/assets/icons/flags/af.png similarity index 100% rename from resources/js/assets/icons/flags/af.png rename to resources/old_js/assets/icons/flags/af.png diff --git a/resources/js/assets/icons/flags/ag.png b/resources/old_js/assets/icons/flags/ag.png similarity index 100% rename from resources/js/assets/icons/flags/ag.png rename to resources/old_js/assets/icons/flags/ag.png diff --git a/resources/js/assets/icons/flags/ai.png b/resources/old_js/assets/icons/flags/ai.png similarity index 100% rename from resources/js/assets/icons/flags/ai.png rename to resources/old_js/assets/icons/flags/ai.png diff --git a/resources/js/assets/icons/flags/al.png b/resources/old_js/assets/icons/flags/al.png similarity index 100% rename from resources/js/assets/icons/flags/al.png rename to resources/old_js/assets/icons/flags/al.png diff --git a/resources/js/assets/icons/flags/am.png b/resources/old_js/assets/icons/flags/am.png similarity index 100% rename from resources/js/assets/icons/flags/am.png rename to resources/old_js/assets/icons/flags/am.png diff --git a/resources/js/assets/icons/flags/an.png b/resources/old_js/assets/icons/flags/an.png similarity index 100% rename from resources/js/assets/icons/flags/an.png rename to resources/old_js/assets/icons/flags/an.png diff --git a/resources/js/assets/icons/flags/ao.png b/resources/old_js/assets/icons/flags/ao.png similarity index 100% rename from resources/js/assets/icons/flags/ao.png rename to resources/old_js/assets/icons/flags/ao.png diff --git a/resources/js/assets/icons/flags/aq.png b/resources/old_js/assets/icons/flags/aq.png similarity index 100% rename from resources/js/assets/icons/flags/aq.png rename to resources/old_js/assets/icons/flags/aq.png diff --git a/resources/js/assets/icons/flags/ar.png b/resources/old_js/assets/icons/flags/ar.png similarity index 100% rename from resources/js/assets/icons/flags/ar.png rename to resources/old_js/assets/icons/flags/ar.png diff --git a/resources/js/assets/icons/flags/as.png b/resources/old_js/assets/icons/flags/as.png similarity index 100% rename from resources/js/assets/icons/flags/as.png rename to resources/old_js/assets/icons/flags/as.png diff --git a/resources/js/assets/icons/flags/at.png b/resources/old_js/assets/icons/flags/at.png similarity index 100% rename from resources/js/assets/icons/flags/at.png rename to resources/old_js/assets/icons/flags/at.png diff --git a/resources/js/assets/icons/flags/au.png b/resources/old_js/assets/icons/flags/au.png similarity index 100% rename from resources/js/assets/icons/flags/au.png rename to resources/old_js/assets/icons/flags/au.png diff --git a/resources/js/assets/icons/flags/aw.png b/resources/old_js/assets/icons/flags/aw.png similarity index 100% rename from resources/js/assets/icons/flags/aw.png rename to resources/old_js/assets/icons/flags/aw.png diff --git a/resources/js/assets/icons/flags/ax.png b/resources/old_js/assets/icons/flags/ax.png similarity index 100% rename from resources/js/assets/icons/flags/ax.png rename to resources/old_js/assets/icons/flags/ax.png diff --git a/resources/js/assets/icons/flags/az.png b/resources/old_js/assets/icons/flags/az.png similarity index 100% rename from resources/js/assets/icons/flags/az.png rename to resources/old_js/assets/icons/flags/az.png diff --git a/resources/js/assets/icons/flags/ba.png b/resources/old_js/assets/icons/flags/ba.png similarity index 100% rename from resources/js/assets/icons/flags/ba.png rename to resources/old_js/assets/icons/flags/ba.png diff --git a/resources/js/assets/icons/flags/bb.png b/resources/old_js/assets/icons/flags/bb.png similarity index 100% rename from resources/js/assets/icons/flags/bb.png rename to resources/old_js/assets/icons/flags/bb.png diff --git a/resources/js/assets/icons/flags/bd.png b/resources/old_js/assets/icons/flags/bd.png similarity index 100% rename from resources/js/assets/icons/flags/bd.png rename to resources/old_js/assets/icons/flags/bd.png diff --git a/resources/js/assets/icons/flags/be.png b/resources/old_js/assets/icons/flags/be.png similarity index 100% rename from resources/js/assets/icons/flags/be.png rename to resources/old_js/assets/icons/flags/be.png diff --git a/resources/js/assets/icons/flags/bf.png b/resources/old_js/assets/icons/flags/bf.png similarity index 100% rename from resources/js/assets/icons/flags/bf.png rename to resources/old_js/assets/icons/flags/bf.png diff --git a/resources/js/assets/icons/flags/bg.png b/resources/old_js/assets/icons/flags/bg.png similarity index 100% rename from resources/js/assets/icons/flags/bg.png rename to resources/old_js/assets/icons/flags/bg.png diff --git a/resources/js/assets/icons/flags/bh.png b/resources/old_js/assets/icons/flags/bh.png similarity index 100% rename from resources/js/assets/icons/flags/bh.png rename to resources/old_js/assets/icons/flags/bh.png diff --git a/resources/js/assets/icons/flags/bi.png b/resources/old_js/assets/icons/flags/bi.png similarity index 100% rename from resources/js/assets/icons/flags/bi.png rename to resources/old_js/assets/icons/flags/bi.png diff --git a/resources/js/assets/icons/flags/bj.png b/resources/old_js/assets/icons/flags/bj.png similarity index 100% rename from resources/js/assets/icons/flags/bj.png rename to resources/old_js/assets/icons/flags/bj.png diff --git a/resources/js/assets/icons/flags/bl.png b/resources/old_js/assets/icons/flags/bl.png similarity index 100% rename from resources/js/assets/icons/flags/bl.png rename to resources/old_js/assets/icons/flags/bl.png diff --git a/resources/js/assets/icons/flags/bm.png b/resources/old_js/assets/icons/flags/bm.png similarity index 100% rename from resources/js/assets/icons/flags/bm.png rename to resources/old_js/assets/icons/flags/bm.png diff --git a/resources/js/assets/icons/flags/bn.png b/resources/old_js/assets/icons/flags/bn.png similarity index 100% rename from resources/js/assets/icons/flags/bn.png rename to resources/old_js/assets/icons/flags/bn.png diff --git a/resources/js/assets/icons/flags/bo.png b/resources/old_js/assets/icons/flags/bo.png similarity index 100% rename from resources/js/assets/icons/flags/bo.png rename to resources/old_js/assets/icons/flags/bo.png diff --git a/resources/js/assets/icons/flags/bq.png b/resources/old_js/assets/icons/flags/bq.png similarity index 100% rename from resources/js/assets/icons/flags/bq.png rename to resources/old_js/assets/icons/flags/bq.png diff --git a/resources/js/assets/icons/flags/br.png b/resources/old_js/assets/icons/flags/br.png similarity index 100% rename from resources/js/assets/icons/flags/br.png rename to resources/old_js/assets/icons/flags/br.png diff --git a/resources/js/assets/icons/flags/bs.png b/resources/old_js/assets/icons/flags/bs.png similarity index 100% rename from resources/js/assets/icons/flags/bs.png rename to resources/old_js/assets/icons/flags/bs.png diff --git a/resources/js/assets/icons/flags/bt.png b/resources/old_js/assets/icons/flags/bt.png similarity index 100% rename from resources/js/assets/icons/flags/bt.png rename to resources/old_js/assets/icons/flags/bt.png diff --git a/resources/js/assets/icons/flags/bv.png b/resources/old_js/assets/icons/flags/bv.png similarity index 100% rename from resources/js/assets/icons/flags/bv.png rename to resources/old_js/assets/icons/flags/bv.png diff --git a/resources/js/assets/icons/flags/bw.png b/resources/old_js/assets/icons/flags/bw.png similarity index 100% rename from resources/js/assets/icons/flags/bw.png rename to resources/old_js/assets/icons/flags/bw.png diff --git a/resources/js/assets/icons/flags/by.png b/resources/old_js/assets/icons/flags/by.png similarity index 100% rename from resources/js/assets/icons/flags/by.png rename to resources/old_js/assets/icons/flags/by.png diff --git a/resources/js/assets/icons/flags/bz.png b/resources/old_js/assets/icons/flags/bz.png similarity index 100% rename from resources/js/assets/icons/flags/bz.png rename to resources/old_js/assets/icons/flags/bz.png diff --git a/resources/js/assets/icons/flags/ca.png b/resources/old_js/assets/icons/flags/ca.png similarity index 100% rename from resources/js/assets/icons/flags/ca.png rename to resources/old_js/assets/icons/flags/ca.png diff --git a/resources/js/assets/icons/flags/cc.png b/resources/old_js/assets/icons/flags/cc.png similarity index 100% rename from resources/js/assets/icons/flags/cc.png rename to resources/old_js/assets/icons/flags/cc.png diff --git a/resources/js/assets/icons/flags/cd.png b/resources/old_js/assets/icons/flags/cd.png similarity index 100% rename from resources/js/assets/icons/flags/cd.png rename to resources/old_js/assets/icons/flags/cd.png diff --git a/resources/js/assets/icons/flags/cf.png b/resources/old_js/assets/icons/flags/cf.png similarity index 100% rename from resources/js/assets/icons/flags/cf.png rename to resources/old_js/assets/icons/flags/cf.png diff --git a/resources/js/assets/icons/flags/cg.png b/resources/old_js/assets/icons/flags/cg.png similarity index 100% rename from resources/js/assets/icons/flags/cg.png rename to resources/old_js/assets/icons/flags/cg.png diff --git a/resources/js/assets/icons/flags/ch.png b/resources/old_js/assets/icons/flags/ch.png similarity index 100% rename from resources/js/assets/icons/flags/ch.png rename to resources/old_js/assets/icons/flags/ch.png diff --git a/resources/js/assets/icons/flags/ci.png b/resources/old_js/assets/icons/flags/ci.png similarity index 100% rename from resources/js/assets/icons/flags/ci.png rename to resources/old_js/assets/icons/flags/ci.png diff --git a/resources/js/assets/icons/flags/ck.png b/resources/old_js/assets/icons/flags/ck.png similarity index 100% rename from resources/js/assets/icons/flags/ck.png rename to resources/old_js/assets/icons/flags/ck.png diff --git a/resources/js/assets/icons/flags/cl.png b/resources/old_js/assets/icons/flags/cl.png similarity index 100% rename from resources/js/assets/icons/flags/cl.png rename to resources/old_js/assets/icons/flags/cl.png diff --git a/resources/js/assets/icons/flags/cm.png b/resources/old_js/assets/icons/flags/cm.png similarity index 100% rename from resources/js/assets/icons/flags/cm.png rename to resources/old_js/assets/icons/flags/cm.png diff --git a/resources/js/assets/icons/flags/cn.png b/resources/old_js/assets/icons/flags/cn.png similarity index 100% rename from resources/js/assets/icons/flags/cn.png rename to resources/old_js/assets/icons/flags/cn.png diff --git a/resources/js/assets/icons/flags/co.png b/resources/old_js/assets/icons/flags/co.png similarity index 100% rename from resources/js/assets/icons/flags/co.png rename to resources/old_js/assets/icons/flags/co.png diff --git a/resources/js/assets/icons/flags/cr.png b/resources/old_js/assets/icons/flags/cr.png similarity index 100% rename from resources/js/assets/icons/flags/cr.png rename to resources/old_js/assets/icons/flags/cr.png diff --git a/resources/js/assets/icons/flags/cu.png b/resources/old_js/assets/icons/flags/cu.png similarity index 100% rename from resources/js/assets/icons/flags/cu.png rename to resources/old_js/assets/icons/flags/cu.png diff --git a/resources/js/assets/icons/flags/cv.png b/resources/old_js/assets/icons/flags/cv.png similarity index 100% rename from resources/js/assets/icons/flags/cv.png rename to resources/old_js/assets/icons/flags/cv.png diff --git a/resources/js/assets/icons/flags/cw.png b/resources/old_js/assets/icons/flags/cw.png similarity index 100% rename from resources/js/assets/icons/flags/cw.png rename to resources/old_js/assets/icons/flags/cw.png diff --git a/resources/js/assets/icons/flags/cx.png b/resources/old_js/assets/icons/flags/cx.png similarity index 100% rename from resources/js/assets/icons/flags/cx.png rename to resources/old_js/assets/icons/flags/cx.png diff --git a/resources/js/assets/icons/flags/cy.png b/resources/old_js/assets/icons/flags/cy.png similarity index 100% rename from resources/js/assets/icons/flags/cy.png rename to resources/old_js/assets/icons/flags/cy.png diff --git a/resources/js/assets/icons/flags/cz.png b/resources/old_js/assets/icons/flags/cz.png similarity index 100% rename from resources/js/assets/icons/flags/cz.png rename to resources/old_js/assets/icons/flags/cz.png diff --git a/resources/js/assets/icons/flags/de.png b/resources/old_js/assets/icons/flags/de.png similarity index 100% rename from resources/js/assets/icons/flags/de.png rename to resources/old_js/assets/icons/flags/de.png diff --git a/resources/js/assets/icons/flags/dj.png b/resources/old_js/assets/icons/flags/dj.png similarity index 100% rename from resources/js/assets/icons/flags/dj.png rename to resources/old_js/assets/icons/flags/dj.png diff --git a/resources/js/assets/icons/flags/dk.png b/resources/old_js/assets/icons/flags/dk.png similarity index 100% rename from resources/js/assets/icons/flags/dk.png rename to resources/old_js/assets/icons/flags/dk.png diff --git a/resources/js/assets/icons/flags/dm.png b/resources/old_js/assets/icons/flags/dm.png similarity index 100% rename from resources/js/assets/icons/flags/dm.png rename to resources/old_js/assets/icons/flags/dm.png diff --git a/resources/js/assets/icons/flags/do.png b/resources/old_js/assets/icons/flags/do.png similarity index 100% rename from resources/js/assets/icons/flags/do.png rename to resources/old_js/assets/icons/flags/do.png diff --git a/resources/js/assets/icons/flags/dz.png b/resources/old_js/assets/icons/flags/dz.png similarity index 100% rename from resources/js/assets/icons/flags/dz.png rename to resources/old_js/assets/icons/flags/dz.png diff --git a/resources/js/assets/icons/flags/ec.png b/resources/old_js/assets/icons/flags/ec.png similarity index 100% rename from resources/js/assets/icons/flags/ec.png rename to resources/old_js/assets/icons/flags/ec.png diff --git a/resources/js/assets/icons/flags/ee.png b/resources/old_js/assets/icons/flags/ee.png similarity index 100% rename from resources/js/assets/icons/flags/ee.png rename to resources/old_js/assets/icons/flags/ee.png diff --git a/resources/js/assets/icons/flags/eg.png b/resources/old_js/assets/icons/flags/eg.png similarity index 100% rename from resources/js/assets/icons/flags/eg.png rename to resources/old_js/assets/icons/flags/eg.png diff --git a/resources/js/assets/icons/flags/eh.png b/resources/old_js/assets/icons/flags/eh.png similarity index 100% rename from resources/js/assets/icons/flags/eh.png rename to resources/old_js/assets/icons/flags/eh.png diff --git a/resources/js/assets/icons/flags/er.png b/resources/old_js/assets/icons/flags/er.png similarity index 100% rename from resources/js/assets/icons/flags/er.png rename to resources/old_js/assets/icons/flags/er.png diff --git a/resources/js/assets/icons/flags/es.png b/resources/old_js/assets/icons/flags/es.png similarity index 100% rename from resources/js/assets/icons/flags/es.png rename to resources/old_js/assets/icons/flags/es.png diff --git a/resources/js/assets/icons/flags/et.png b/resources/old_js/assets/icons/flags/et.png similarity index 100% rename from resources/js/assets/icons/flags/et.png rename to resources/old_js/assets/icons/flags/et.png diff --git a/resources/js/assets/icons/flags/eu.png b/resources/old_js/assets/icons/flags/eu.png similarity index 100% rename from resources/js/assets/icons/flags/eu.png rename to resources/old_js/assets/icons/flags/eu.png diff --git a/resources/js/assets/icons/flags/fi.png b/resources/old_js/assets/icons/flags/fi.png similarity index 100% rename from resources/js/assets/icons/flags/fi.png rename to resources/old_js/assets/icons/flags/fi.png diff --git a/resources/js/assets/icons/flags/fj.png b/resources/old_js/assets/icons/flags/fj.png similarity index 100% rename from resources/js/assets/icons/flags/fj.png rename to resources/old_js/assets/icons/flags/fj.png diff --git a/resources/js/assets/icons/flags/fk.png b/resources/old_js/assets/icons/flags/fk.png similarity index 100% rename from resources/js/assets/icons/flags/fk.png rename to resources/old_js/assets/icons/flags/fk.png diff --git a/resources/js/assets/icons/flags/fm.png b/resources/old_js/assets/icons/flags/fm.png similarity index 100% rename from resources/js/assets/icons/flags/fm.png rename to resources/old_js/assets/icons/flags/fm.png diff --git a/resources/js/assets/icons/flags/fo.png b/resources/old_js/assets/icons/flags/fo.png similarity index 100% rename from resources/js/assets/icons/flags/fo.png rename to resources/old_js/assets/icons/flags/fo.png diff --git a/resources/js/assets/icons/flags/fr.png b/resources/old_js/assets/icons/flags/fr.png similarity index 100% rename from resources/js/assets/icons/flags/fr.png rename to resources/old_js/assets/icons/flags/fr.png diff --git a/resources/js/assets/icons/flags/ga.png b/resources/old_js/assets/icons/flags/ga.png similarity index 100% rename from resources/js/assets/icons/flags/ga.png rename to resources/old_js/assets/icons/flags/ga.png diff --git a/resources/js/assets/icons/flags/gb-eng.png b/resources/old_js/assets/icons/flags/gb-eng.png similarity index 100% rename from resources/js/assets/icons/flags/gb-eng.png rename to resources/old_js/assets/icons/flags/gb-eng.png diff --git a/resources/js/assets/icons/flags/gb-nir.png b/resources/old_js/assets/icons/flags/gb-nir.png similarity index 100% rename from resources/js/assets/icons/flags/gb-nir.png rename to resources/old_js/assets/icons/flags/gb-nir.png diff --git a/resources/js/assets/icons/flags/gb-sct.png b/resources/old_js/assets/icons/flags/gb-sct.png similarity index 100% rename from resources/js/assets/icons/flags/gb-sct.png rename to resources/old_js/assets/icons/flags/gb-sct.png diff --git a/resources/js/assets/icons/flags/gb-wls.png b/resources/old_js/assets/icons/flags/gb-wls.png similarity index 100% rename from resources/js/assets/icons/flags/gb-wls.png rename to resources/old_js/assets/icons/flags/gb-wls.png diff --git a/resources/js/assets/icons/flags/gb.png b/resources/old_js/assets/icons/flags/gb.png similarity index 100% rename from resources/js/assets/icons/flags/gb.png rename to resources/old_js/assets/icons/flags/gb.png diff --git a/resources/js/assets/icons/flags/gd.png b/resources/old_js/assets/icons/flags/gd.png similarity index 100% rename from resources/js/assets/icons/flags/gd.png rename to resources/old_js/assets/icons/flags/gd.png diff --git a/resources/js/assets/icons/flags/ge.png b/resources/old_js/assets/icons/flags/ge.png similarity index 100% rename from resources/js/assets/icons/flags/ge.png rename to resources/old_js/assets/icons/flags/ge.png diff --git a/resources/js/assets/icons/flags/gf.png b/resources/old_js/assets/icons/flags/gf.png similarity index 100% rename from resources/js/assets/icons/flags/gf.png rename to resources/old_js/assets/icons/flags/gf.png diff --git a/resources/js/assets/icons/flags/gg.png b/resources/old_js/assets/icons/flags/gg.png similarity index 100% rename from resources/js/assets/icons/flags/gg.png rename to resources/old_js/assets/icons/flags/gg.png diff --git a/resources/js/assets/icons/flags/gh.png b/resources/old_js/assets/icons/flags/gh.png similarity index 100% rename from resources/js/assets/icons/flags/gh.png rename to resources/old_js/assets/icons/flags/gh.png diff --git a/resources/js/assets/icons/flags/gi.png b/resources/old_js/assets/icons/flags/gi.png similarity index 100% rename from resources/js/assets/icons/flags/gi.png rename to resources/old_js/assets/icons/flags/gi.png diff --git a/resources/js/assets/icons/flags/gl.png b/resources/old_js/assets/icons/flags/gl.png similarity index 100% rename from resources/js/assets/icons/flags/gl.png rename to resources/old_js/assets/icons/flags/gl.png diff --git a/resources/js/assets/icons/flags/gm.png b/resources/old_js/assets/icons/flags/gm.png similarity index 100% rename from resources/js/assets/icons/flags/gm.png rename to resources/old_js/assets/icons/flags/gm.png diff --git a/resources/js/assets/icons/flags/gn.png b/resources/old_js/assets/icons/flags/gn.png similarity index 100% rename from resources/js/assets/icons/flags/gn.png rename to resources/old_js/assets/icons/flags/gn.png diff --git a/resources/js/assets/icons/flags/gp.png b/resources/old_js/assets/icons/flags/gp.png similarity index 100% rename from resources/js/assets/icons/flags/gp.png rename to resources/old_js/assets/icons/flags/gp.png diff --git a/resources/js/assets/icons/flags/gq.png b/resources/old_js/assets/icons/flags/gq.png similarity index 100% rename from resources/js/assets/icons/flags/gq.png rename to resources/old_js/assets/icons/flags/gq.png diff --git a/resources/js/assets/icons/flags/gr.png b/resources/old_js/assets/icons/flags/gr.png similarity index 100% rename from resources/js/assets/icons/flags/gr.png rename to resources/old_js/assets/icons/flags/gr.png diff --git a/resources/js/assets/icons/flags/gs.png b/resources/old_js/assets/icons/flags/gs.png similarity index 100% rename from resources/js/assets/icons/flags/gs.png rename to resources/old_js/assets/icons/flags/gs.png diff --git a/resources/js/assets/icons/flags/gt.png b/resources/old_js/assets/icons/flags/gt.png similarity index 100% rename from resources/js/assets/icons/flags/gt.png rename to resources/old_js/assets/icons/flags/gt.png diff --git a/resources/js/assets/icons/flags/gu.png b/resources/old_js/assets/icons/flags/gu.png similarity index 100% rename from resources/js/assets/icons/flags/gu.png rename to resources/old_js/assets/icons/flags/gu.png diff --git a/resources/js/assets/icons/flags/gw.png b/resources/old_js/assets/icons/flags/gw.png similarity index 100% rename from resources/js/assets/icons/flags/gw.png rename to resources/old_js/assets/icons/flags/gw.png diff --git a/resources/js/assets/icons/flags/gy.png b/resources/old_js/assets/icons/flags/gy.png similarity index 100% rename from resources/js/assets/icons/flags/gy.png rename to resources/old_js/assets/icons/flags/gy.png diff --git a/resources/js/assets/icons/flags/hk.png b/resources/old_js/assets/icons/flags/hk.png similarity index 100% rename from resources/js/assets/icons/flags/hk.png rename to resources/old_js/assets/icons/flags/hk.png diff --git a/resources/js/assets/icons/flags/hm.png b/resources/old_js/assets/icons/flags/hm.png similarity index 100% rename from resources/js/assets/icons/flags/hm.png rename to resources/old_js/assets/icons/flags/hm.png diff --git a/resources/js/assets/icons/flags/hn.png b/resources/old_js/assets/icons/flags/hn.png similarity index 100% rename from resources/js/assets/icons/flags/hn.png rename to resources/old_js/assets/icons/flags/hn.png diff --git a/resources/js/assets/icons/flags/hr.png b/resources/old_js/assets/icons/flags/hr.png similarity index 100% rename from resources/js/assets/icons/flags/hr.png rename to resources/old_js/assets/icons/flags/hr.png diff --git a/resources/js/assets/icons/flags/ht.png b/resources/old_js/assets/icons/flags/ht.png similarity index 100% rename from resources/js/assets/icons/flags/ht.png rename to resources/old_js/assets/icons/flags/ht.png diff --git a/resources/js/assets/icons/flags/hu.png b/resources/old_js/assets/icons/flags/hu.png similarity index 100% rename from resources/js/assets/icons/flags/hu.png rename to resources/old_js/assets/icons/flags/hu.png diff --git a/resources/js/assets/icons/flags/id.png b/resources/old_js/assets/icons/flags/id.png similarity index 100% rename from resources/js/assets/icons/flags/id.png rename to resources/old_js/assets/icons/flags/id.png diff --git a/resources/js/assets/icons/flags/ie.png b/resources/old_js/assets/icons/flags/ie.png similarity index 100% rename from resources/js/assets/icons/flags/ie.png rename to resources/old_js/assets/icons/flags/ie.png diff --git a/resources/js/assets/icons/flags/il.png b/resources/old_js/assets/icons/flags/il.png similarity index 100% rename from resources/js/assets/icons/flags/il.png rename to resources/old_js/assets/icons/flags/il.png diff --git a/resources/js/assets/icons/flags/im.png b/resources/old_js/assets/icons/flags/im.png similarity index 100% rename from resources/js/assets/icons/flags/im.png rename to resources/old_js/assets/icons/flags/im.png diff --git a/resources/js/assets/icons/flags/in.png b/resources/old_js/assets/icons/flags/in.png similarity index 100% rename from resources/js/assets/icons/flags/in.png rename to resources/old_js/assets/icons/flags/in.png diff --git a/resources/js/assets/icons/flags/io.png b/resources/old_js/assets/icons/flags/io.png similarity index 100% rename from resources/js/assets/icons/flags/io.png rename to resources/old_js/assets/icons/flags/io.png diff --git a/resources/js/assets/icons/flags/iq.png b/resources/old_js/assets/icons/flags/iq.png similarity index 100% rename from resources/js/assets/icons/flags/iq.png rename to resources/old_js/assets/icons/flags/iq.png diff --git a/resources/js/assets/icons/flags/ir.png b/resources/old_js/assets/icons/flags/ir.png similarity index 100% rename from resources/js/assets/icons/flags/ir.png rename to resources/old_js/assets/icons/flags/ir.png diff --git a/resources/js/assets/icons/flags/is.png b/resources/old_js/assets/icons/flags/is.png similarity index 100% rename from resources/js/assets/icons/flags/is.png rename to resources/old_js/assets/icons/flags/is.png diff --git a/resources/js/assets/icons/flags/it.png b/resources/old_js/assets/icons/flags/it.png similarity index 100% rename from resources/js/assets/icons/flags/it.png rename to resources/old_js/assets/icons/flags/it.png diff --git a/resources/js/assets/icons/flags/je.png b/resources/old_js/assets/icons/flags/je.png similarity index 100% rename from resources/js/assets/icons/flags/je.png rename to resources/old_js/assets/icons/flags/je.png diff --git a/resources/js/assets/icons/flags/jm.png b/resources/old_js/assets/icons/flags/jm.png similarity index 100% rename from resources/js/assets/icons/flags/jm.png rename to resources/old_js/assets/icons/flags/jm.png diff --git a/resources/js/assets/icons/flags/jo.png b/resources/old_js/assets/icons/flags/jo.png similarity index 100% rename from resources/js/assets/icons/flags/jo.png rename to resources/old_js/assets/icons/flags/jo.png diff --git a/resources/js/assets/icons/flags/jp.png b/resources/old_js/assets/icons/flags/jp.png similarity index 100% rename from resources/js/assets/icons/flags/jp.png rename to resources/old_js/assets/icons/flags/jp.png diff --git a/resources/js/assets/icons/flags/ke.png b/resources/old_js/assets/icons/flags/ke.png similarity index 100% rename from resources/js/assets/icons/flags/ke.png rename to resources/old_js/assets/icons/flags/ke.png diff --git a/resources/js/assets/icons/flags/kg.png b/resources/old_js/assets/icons/flags/kg.png similarity index 100% rename from resources/js/assets/icons/flags/kg.png rename to resources/old_js/assets/icons/flags/kg.png diff --git a/resources/js/assets/icons/flags/kh.png b/resources/old_js/assets/icons/flags/kh.png similarity index 100% rename from resources/js/assets/icons/flags/kh.png rename to resources/old_js/assets/icons/flags/kh.png diff --git a/resources/js/assets/icons/flags/ki.png b/resources/old_js/assets/icons/flags/ki.png similarity index 100% rename from resources/js/assets/icons/flags/ki.png rename to resources/old_js/assets/icons/flags/ki.png diff --git a/resources/js/assets/icons/flags/km.png b/resources/old_js/assets/icons/flags/km.png similarity index 100% rename from resources/js/assets/icons/flags/km.png rename to resources/old_js/assets/icons/flags/km.png diff --git a/resources/js/assets/icons/flags/kn.png b/resources/old_js/assets/icons/flags/kn.png similarity index 100% rename from resources/js/assets/icons/flags/kn.png rename to resources/old_js/assets/icons/flags/kn.png diff --git a/resources/js/assets/icons/flags/kp.png b/resources/old_js/assets/icons/flags/kp.png similarity index 100% rename from resources/js/assets/icons/flags/kp.png rename to resources/old_js/assets/icons/flags/kp.png diff --git a/resources/js/assets/icons/flags/kr.png b/resources/old_js/assets/icons/flags/kr.png similarity index 100% rename from resources/js/assets/icons/flags/kr.png rename to resources/old_js/assets/icons/flags/kr.png diff --git a/resources/js/assets/icons/flags/kw.png b/resources/old_js/assets/icons/flags/kw.png similarity index 100% rename from resources/js/assets/icons/flags/kw.png rename to resources/old_js/assets/icons/flags/kw.png diff --git a/resources/js/assets/icons/flags/ky.png b/resources/old_js/assets/icons/flags/ky.png similarity index 100% rename from resources/js/assets/icons/flags/ky.png rename to resources/old_js/assets/icons/flags/ky.png diff --git a/resources/js/assets/icons/flags/kz.png b/resources/old_js/assets/icons/flags/kz.png similarity index 100% rename from resources/js/assets/icons/flags/kz.png rename to resources/old_js/assets/icons/flags/kz.png diff --git a/resources/js/assets/icons/flags/la.png b/resources/old_js/assets/icons/flags/la.png similarity index 100% rename from resources/js/assets/icons/flags/la.png rename to resources/old_js/assets/icons/flags/la.png diff --git a/resources/js/assets/icons/flags/lb.png b/resources/old_js/assets/icons/flags/lb.png similarity index 100% rename from resources/js/assets/icons/flags/lb.png rename to resources/old_js/assets/icons/flags/lb.png diff --git a/resources/js/assets/icons/flags/lc.png b/resources/old_js/assets/icons/flags/lc.png similarity index 100% rename from resources/js/assets/icons/flags/lc.png rename to resources/old_js/assets/icons/flags/lc.png diff --git a/resources/js/assets/icons/flags/li.png b/resources/old_js/assets/icons/flags/li.png similarity index 100% rename from resources/js/assets/icons/flags/li.png rename to resources/old_js/assets/icons/flags/li.png diff --git a/resources/js/assets/icons/flags/lk.png b/resources/old_js/assets/icons/flags/lk.png similarity index 100% rename from resources/js/assets/icons/flags/lk.png rename to resources/old_js/assets/icons/flags/lk.png diff --git a/resources/js/assets/icons/flags/lr.png b/resources/old_js/assets/icons/flags/lr.png similarity index 100% rename from resources/js/assets/icons/flags/lr.png rename to resources/old_js/assets/icons/flags/lr.png diff --git a/resources/js/assets/icons/flags/ls.png b/resources/old_js/assets/icons/flags/ls.png similarity index 100% rename from resources/js/assets/icons/flags/ls.png rename to resources/old_js/assets/icons/flags/ls.png diff --git a/resources/js/assets/icons/flags/lt.png b/resources/old_js/assets/icons/flags/lt.png similarity index 100% rename from resources/js/assets/icons/flags/lt.png rename to resources/old_js/assets/icons/flags/lt.png diff --git a/resources/js/assets/icons/flags/lu.png b/resources/old_js/assets/icons/flags/lu.png similarity index 100% rename from resources/js/assets/icons/flags/lu.png rename to resources/old_js/assets/icons/flags/lu.png diff --git a/resources/js/assets/icons/flags/lv.png b/resources/old_js/assets/icons/flags/lv.png similarity index 100% rename from resources/js/assets/icons/flags/lv.png rename to resources/old_js/assets/icons/flags/lv.png diff --git a/resources/js/assets/icons/flags/ly.png b/resources/old_js/assets/icons/flags/ly.png similarity index 100% rename from resources/js/assets/icons/flags/ly.png rename to resources/old_js/assets/icons/flags/ly.png diff --git a/resources/js/assets/icons/flags/ma.png b/resources/old_js/assets/icons/flags/ma.png similarity index 100% rename from resources/js/assets/icons/flags/ma.png rename to resources/old_js/assets/icons/flags/ma.png diff --git a/resources/js/assets/icons/flags/mc.png b/resources/old_js/assets/icons/flags/mc.png similarity index 100% rename from resources/js/assets/icons/flags/mc.png rename to resources/old_js/assets/icons/flags/mc.png diff --git a/resources/js/assets/icons/flags/md.png b/resources/old_js/assets/icons/flags/md.png similarity index 100% rename from resources/js/assets/icons/flags/md.png rename to resources/old_js/assets/icons/flags/md.png diff --git a/resources/js/assets/icons/flags/me.png b/resources/old_js/assets/icons/flags/me.png similarity index 100% rename from resources/js/assets/icons/flags/me.png rename to resources/old_js/assets/icons/flags/me.png diff --git a/resources/js/assets/icons/flags/mf.png b/resources/old_js/assets/icons/flags/mf.png similarity index 100% rename from resources/js/assets/icons/flags/mf.png rename to resources/old_js/assets/icons/flags/mf.png diff --git a/resources/js/assets/icons/flags/mg.png b/resources/old_js/assets/icons/flags/mg.png similarity index 100% rename from resources/js/assets/icons/flags/mg.png rename to resources/old_js/assets/icons/flags/mg.png diff --git a/resources/js/assets/icons/flags/mh.png b/resources/old_js/assets/icons/flags/mh.png similarity index 100% rename from resources/js/assets/icons/flags/mh.png rename to resources/old_js/assets/icons/flags/mh.png diff --git a/resources/js/assets/icons/flags/mk.png b/resources/old_js/assets/icons/flags/mk.png similarity index 100% rename from resources/js/assets/icons/flags/mk.png rename to resources/old_js/assets/icons/flags/mk.png diff --git a/resources/js/assets/icons/flags/ml.png b/resources/old_js/assets/icons/flags/ml.png similarity index 100% rename from resources/js/assets/icons/flags/ml.png rename to resources/old_js/assets/icons/flags/ml.png diff --git a/resources/js/assets/icons/flags/mm.png b/resources/old_js/assets/icons/flags/mm.png similarity index 100% rename from resources/js/assets/icons/flags/mm.png rename to resources/old_js/assets/icons/flags/mm.png diff --git a/resources/js/assets/icons/flags/mn.png b/resources/old_js/assets/icons/flags/mn.png similarity index 100% rename from resources/js/assets/icons/flags/mn.png rename to resources/old_js/assets/icons/flags/mn.png diff --git a/resources/js/assets/icons/flags/mo.png b/resources/old_js/assets/icons/flags/mo.png similarity index 100% rename from resources/js/assets/icons/flags/mo.png rename to resources/old_js/assets/icons/flags/mo.png diff --git a/resources/js/assets/icons/flags/mp.png b/resources/old_js/assets/icons/flags/mp.png similarity index 100% rename from resources/js/assets/icons/flags/mp.png rename to resources/old_js/assets/icons/flags/mp.png diff --git a/resources/js/assets/icons/flags/mq.png b/resources/old_js/assets/icons/flags/mq.png similarity index 100% rename from resources/js/assets/icons/flags/mq.png rename to resources/old_js/assets/icons/flags/mq.png diff --git a/resources/js/assets/icons/flags/mr.png b/resources/old_js/assets/icons/flags/mr.png similarity index 100% rename from resources/js/assets/icons/flags/mr.png rename to resources/old_js/assets/icons/flags/mr.png diff --git a/resources/js/assets/icons/flags/ms.png b/resources/old_js/assets/icons/flags/ms.png similarity index 100% rename from resources/js/assets/icons/flags/ms.png rename to resources/old_js/assets/icons/flags/ms.png diff --git a/resources/js/assets/icons/flags/mt.png b/resources/old_js/assets/icons/flags/mt.png similarity index 100% rename from resources/js/assets/icons/flags/mt.png rename to resources/old_js/assets/icons/flags/mt.png diff --git a/resources/js/assets/icons/flags/mu.png b/resources/old_js/assets/icons/flags/mu.png similarity index 100% rename from resources/js/assets/icons/flags/mu.png rename to resources/old_js/assets/icons/flags/mu.png diff --git a/resources/js/assets/icons/flags/mv.png b/resources/old_js/assets/icons/flags/mv.png similarity index 100% rename from resources/js/assets/icons/flags/mv.png rename to resources/old_js/assets/icons/flags/mv.png diff --git a/resources/js/assets/icons/flags/mw.png b/resources/old_js/assets/icons/flags/mw.png similarity index 100% rename from resources/js/assets/icons/flags/mw.png rename to resources/old_js/assets/icons/flags/mw.png diff --git a/resources/js/assets/icons/flags/mx.png b/resources/old_js/assets/icons/flags/mx.png similarity index 100% rename from resources/js/assets/icons/flags/mx.png rename to resources/old_js/assets/icons/flags/mx.png diff --git a/resources/js/assets/icons/flags/my.png b/resources/old_js/assets/icons/flags/my.png similarity index 100% rename from resources/js/assets/icons/flags/my.png rename to resources/old_js/assets/icons/flags/my.png diff --git a/resources/js/assets/icons/flags/mz.png b/resources/old_js/assets/icons/flags/mz.png similarity index 100% rename from resources/js/assets/icons/flags/mz.png rename to resources/old_js/assets/icons/flags/mz.png diff --git a/resources/js/assets/icons/flags/na.png b/resources/old_js/assets/icons/flags/na.png similarity index 100% rename from resources/js/assets/icons/flags/na.png rename to resources/old_js/assets/icons/flags/na.png diff --git a/resources/js/assets/icons/flags/nc.png b/resources/old_js/assets/icons/flags/nc.png similarity index 100% rename from resources/js/assets/icons/flags/nc.png rename to resources/old_js/assets/icons/flags/nc.png diff --git a/resources/js/assets/icons/flags/ne.png b/resources/old_js/assets/icons/flags/ne.png similarity index 100% rename from resources/js/assets/icons/flags/ne.png rename to resources/old_js/assets/icons/flags/ne.png diff --git a/resources/js/assets/icons/flags/nf.png b/resources/old_js/assets/icons/flags/nf.png similarity index 100% rename from resources/js/assets/icons/flags/nf.png rename to resources/old_js/assets/icons/flags/nf.png diff --git a/resources/js/assets/icons/flags/ng.png b/resources/old_js/assets/icons/flags/ng.png similarity index 100% rename from resources/js/assets/icons/flags/ng.png rename to resources/old_js/assets/icons/flags/ng.png diff --git a/resources/js/assets/icons/flags/ni.png b/resources/old_js/assets/icons/flags/ni.png similarity index 100% rename from resources/js/assets/icons/flags/ni.png rename to resources/old_js/assets/icons/flags/ni.png diff --git a/resources/js/assets/icons/flags/nl.png b/resources/old_js/assets/icons/flags/nl.png similarity index 100% rename from resources/js/assets/icons/flags/nl.png rename to resources/old_js/assets/icons/flags/nl.png diff --git a/resources/js/assets/icons/flags/no.png b/resources/old_js/assets/icons/flags/no.png similarity index 100% rename from resources/js/assets/icons/flags/no.png rename to resources/old_js/assets/icons/flags/no.png diff --git a/resources/js/assets/icons/flags/np.png b/resources/old_js/assets/icons/flags/np.png similarity index 100% rename from resources/js/assets/icons/flags/np.png rename to resources/old_js/assets/icons/flags/np.png diff --git a/resources/js/assets/icons/flags/nr.png b/resources/old_js/assets/icons/flags/nr.png similarity index 100% rename from resources/js/assets/icons/flags/nr.png rename to resources/old_js/assets/icons/flags/nr.png diff --git a/resources/js/assets/icons/flags/nu.png b/resources/old_js/assets/icons/flags/nu.png similarity index 100% rename from resources/js/assets/icons/flags/nu.png rename to resources/old_js/assets/icons/flags/nu.png diff --git a/resources/js/assets/icons/flags/nz.png b/resources/old_js/assets/icons/flags/nz.png similarity index 100% rename from resources/js/assets/icons/flags/nz.png rename to resources/old_js/assets/icons/flags/nz.png diff --git a/resources/js/assets/icons/flags/om.png b/resources/old_js/assets/icons/flags/om.png similarity index 100% rename from resources/js/assets/icons/flags/om.png rename to resources/old_js/assets/icons/flags/om.png diff --git a/resources/js/assets/icons/flags/pa.png b/resources/old_js/assets/icons/flags/pa.png similarity index 100% rename from resources/js/assets/icons/flags/pa.png rename to resources/old_js/assets/icons/flags/pa.png diff --git a/resources/js/assets/icons/flags/pe.png b/resources/old_js/assets/icons/flags/pe.png similarity index 100% rename from resources/js/assets/icons/flags/pe.png rename to resources/old_js/assets/icons/flags/pe.png diff --git a/resources/js/assets/icons/flags/pf.png b/resources/old_js/assets/icons/flags/pf.png similarity index 100% rename from resources/js/assets/icons/flags/pf.png rename to resources/old_js/assets/icons/flags/pf.png diff --git a/resources/js/assets/icons/flags/pg.png b/resources/old_js/assets/icons/flags/pg.png similarity index 100% rename from resources/js/assets/icons/flags/pg.png rename to resources/old_js/assets/icons/flags/pg.png diff --git a/resources/js/assets/icons/flags/ph.png b/resources/old_js/assets/icons/flags/ph.png similarity index 100% rename from resources/js/assets/icons/flags/ph.png rename to resources/old_js/assets/icons/flags/ph.png diff --git a/resources/js/assets/icons/flags/pk.png b/resources/old_js/assets/icons/flags/pk.png similarity index 100% rename from resources/js/assets/icons/flags/pk.png rename to resources/old_js/assets/icons/flags/pk.png diff --git a/resources/js/assets/icons/flags/pl.png b/resources/old_js/assets/icons/flags/pl.png similarity index 100% rename from resources/js/assets/icons/flags/pl.png rename to resources/old_js/assets/icons/flags/pl.png diff --git a/resources/js/assets/icons/flags/pm.png b/resources/old_js/assets/icons/flags/pm.png similarity index 100% rename from resources/js/assets/icons/flags/pm.png rename to resources/old_js/assets/icons/flags/pm.png diff --git a/resources/js/assets/icons/flags/pn.png b/resources/old_js/assets/icons/flags/pn.png similarity index 100% rename from resources/js/assets/icons/flags/pn.png rename to resources/old_js/assets/icons/flags/pn.png diff --git a/resources/js/assets/icons/flags/pr.png b/resources/old_js/assets/icons/flags/pr.png similarity index 100% rename from resources/js/assets/icons/flags/pr.png rename to resources/old_js/assets/icons/flags/pr.png diff --git a/resources/js/assets/icons/flags/ps.png b/resources/old_js/assets/icons/flags/ps.png similarity index 100% rename from resources/js/assets/icons/flags/ps.png rename to resources/old_js/assets/icons/flags/ps.png diff --git a/resources/js/assets/icons/flags/pt.png b/resources/old_js/assets/icons/flags/pt.png similarity index 100% rename from resources/js/assets/icons/flags/pt.png rename to resources/old_js/assets/icons/flags/pt.png diff --git a/resources/js/assets/icons/flags/pw.png b/resources/old_js/assets/icons/flags/pw.png similarity index 100% rename from resources/js/assets/icons/flags/pw.png rename to resources/old_js/assets/icons/flags/pw.png diff --git a/resources/js/assets/icons/flags/py.png b/resources/old_js/assets/icons/flags/py.png similarity index 100% rename from resources/js/assets/icons/flags/py.png rename to resources/old_js/assets/icons/flags/py.png diff --git a/resources/js/assets/icons/flags/qa.png b/resources/old_js/assets/icons/flags/qa.png similarity index 100% rename from resources/js/assets/icons/flags/qa.png rename to resources/old_js/assets/icons/flags/qa.png diff --git a/resources/js/assets/icons/flags/re.png b/resources/old_js/assets/icons/flags/re.png similarity index 100% rename from resources/js/assets/icons/flags/re.png rename to resources/old_js/assets/icons/flags/re.png diff --git a/resources/js/assets/icons/flags/ro.png b/resources/old_js/assets/icons/flags/ro.png similarity index 100% rename from resources/js/assets/icons/flags/ro.png rename to resources/old_js/assets/icons/flags/ro.png diff --git a/resources/js/assets/icons/flags/rs.png b/resources/old_js/assets/icons/flags/rs.png similarity index 100% rename from resources/js/assets/icons/flags/rs.png rename to resources/old_js/assets/icons/flags/rs.png diff --git a/resources/js/assets/icons/flags/ru.png b/resources/old_js/assets/icons/flags/ru.png similarity index 100% rename from resources/js/assets/icons/flags/ru.png rename to resources/old_js/assets/icons/flags/ru.png diff --git a/resources/js/assets/icons/flags/rw.png b/resources/old_js/assets/icons/flags/rw.png similarity index 100% rename from resources/js/assets/icons/flags/rw.png rename to resources/old_js/assets/icons/flags/rw.png diff --git a/resources/js/assets/icons/flags/sa.png b/resources/old_js/assets/icons/flags/sa.png similarity index 100% rename from resources/js/assets/icons/flags/sa.png rename to resources/old_js/assets/icons/flags/sa.png diff --git a/resources/js/assets/icons/flags/sb.png b/resources/old_js/assets/icons/flags/sb.png similarity index 100% rename from resources/js/assets/icons/flags/sb.png rename to resources/old_js/assets/icons/flags/sb.png diff --git a/resources/js/assets/icons/flags/sc.png b/resources/old_js/assets/icons/flags/sc.png similarity index 100% rename from resources/js/assets/icons/flags/sc.png rename to resources/old_js/assets/icons/flags/sc.png diff --git a/resources/js/assets/icons/flags/sd.png b/resources/old_js/assets/icons/flags/sd.png similarity index 100% rename from resources/js/assets/icons/flags/sd.png rename to resources/old_js/assets/icons/flags/sd.png diff --git a/resources/js/assets/icons/flags/se.png b/resources/old_js/assets/icons/flags/se.png similarity index 100% rename from resources/js/assets/icons/flags/se.png rename to resources/old_js/assets/icons/flags/se.png diff --git a/resources/js/assets/icons/flags/sg.png b/resources/old_js/assets/icons/flags/sg.png similarity index 100% rename from resources/js/assets/icons/flags/sg.png rename to resources/old_js/assets/icons/flags/sg.png diff --git a/resources/js/assets/icons/flags/sh.png b/resources/old_js/assets/icons/flags/sh.png similarity index 100% rename from resources/js/assets/icons/flags/sh.png rename to resources/old_js/assets/icons/flags/sh.png diff --git a/resources/js/assets/icons/flags/si.png b/resources/old_js/assets/icons/flags/si.png similarity index 100% rename from resources/js/assets/icons/flags/si.png rename to resources/old_js/assets/icons/flags/si.png diff --git a/resources/js/assets/icons/flags/sj.png b/resources/old_js/assets/icons/flags/sj.png similarity index 100% rename from resources/js/assets/icons/flags/sj.png rename to resources/old_js/assets/icons/flags/sj.png diff --git a/resources/js/assets/icons/flags/sk.png b/resources/old_js/assets/icons/flags/sk.png similarity index 100% rename from resources/js/assets/icons/flags/sk.png rename to resources/old_js/assets/icons/flags/sk.png diff --git a/resources/js/assets/icons/flags/sl.png b/resources/old_js/assets/icons/flags/sl.png similarity index 100% rename from resources/js/assets/icons/flags/sl.png rename to resources/old_js/assets/icons/flags/sl.png diff --git a/resources/js/assets/icons/flags/sm.png b/resources/old_js/assets/icons/flags/sm.png similarity index 100% rename from resources/js/assets/icons/flags/sm.png rename to resources/old_js/assets/icons/flags/sm.png diff --git a/resources/js/assets/icons/flags/sn.png b/resources/old_js/assets/icons/flags/sn.png similarity index 100% rename from resources/js/assets/icons/flags/sn.png rename to resources/old_js/assets/icons/flags/sn.png diff --git a/resources/js/assets/icons/flags/so.png b/resources/old_js/assets/icons/flags/so.png similarity index 100% rename from resources/js/assets/icons/flags/so.png rename to resources/old_js/assets/icons/flags/so.png diff --git a/resources/js/assets/icons/flags/sr.png b/resources/old_js/assets/icons/flags/sr.png similarity index 100% rename from resources/js/assets/icons/flags/sr.png rename to resources/old_js/assets/icons/flags/sr.png diff --git a/resources/js/assets/icons/flags/ss.png b/resources/old_js/assets/icons/flags/ss.png similarity index 100% rename from resources/js/assets/icons/flags/ss.png rename to resources/old_js/assets/icons/flags/ss.png diff --git a/resources/js/assets/icons/flags/st.png b/resources/old_js/assets/icons/flags/st.png similarity index 100% rename from resources/js/assets/icons/flags/st.png rename to resources/old_js/assets/icons/flags/st.png diff --git a/resources/js/assets/icons/flags/sv.png b/resources/old_js/assets/icons/flags/sv.png similarity index 100% rename from resources/js/assets/icons/flags/sv.png rename to resources/old_js/assets/icons/flags/sv.png diff --git a/resources/js/assets/icons/flags/sx.png b/resources/old_js/assets/icons/flags/sx.png similarity index 100% rename from resources/js/assets/icons/flags/sx.png rename to resources/old_js/assets/icons/flags/sx.png diff --git a/resources/js/assets/icons/flags/sy.png b/resources/old_js/assets/icons/flags/sy.png similarity index 100% rename from resources/js/assets/icons/flags/sy.png rename to resources/old_js/assets/icons/flags/sy.png diff --git a/resources/js/assets/icons/flags/sz.png b/resources/old_js/assets/icons/flags/sz.png similarity index 100% rename from resources/js/assets/icons/flags/sz.png rename to resources/old_js/assets/icons/flags/sz.png diff --git a/resources/js/assets/icons/flags/tc.png b/resources/old_js/assets/icons/flags/tc.png similarity index 100% rename from resources/js/assets/icons/flags/tc.png rename to resources/old_js/assets/icons/flags/tc.png diff --git a/resources/js/assets/icons/flags/td.png b/resources/old_js/assets/icons/flags/td.png similarity index 100% rename from resources/js/assets/icons/flags/td.png rename to resources/old_js/assets/icons/flags/td.png diff --git a/resources/js/assets/icons/flags/tf.png b/resources/old_js/assets/icons/flags/tf.png similarity index 100% rename from resources/js/assets/icons/flags/tf.png rename to resources/old_js/assets/icons/flags/tf.png diff --git a/resources/js/assets/icons/flags/tg.png b/resources/old_js/assets/icons/flags/tg.png similarity index 100% rename from resources/js/assets/icons/flags/tg.png rename to resources/old_js/assets/icons/flags/tg.png diff --git a/resources/js/assets/icons/flags/th.png b/resources/old_js/assets/icons/flags/th.png similarity index 100% rename from resources/js/assets/icons/flags/th.png rename to resources/old_js/assets/icons/flags/th.png diff --git a/resources/js/assets/icons/flags/tj.png b/resources/old_js/assets/icons/flags/tj.png similarity index 100% rename from resources/js/assets/icons/flags/tj.png rename to resources/old_js/assets/icons/flags/tj.png diff --git a/resources/js/assets/icons/flags/tk.png b/resources/old_js/assets/icons/flags/tk.png similarity index 100% rename from resources/js/assets/icons/flags/tk.png rename to resources/old_js/assets/icons/flags/tk.png diff --git a/resources/js/assets/icons/flags/tl.png b/resources/old_js/assets/icons/flags/tl.png similarity index 100% rename from resources/js/assets/icons/flags/tl.png rename to resources/old_js/assets/icons/flags/tl.png diff --git a/resources/js/assets/icons/flags/tm.png b/resources/old_js/assets/icons/flags/tm.png similarity index 100% rename from resources/js/assets/icons/flags/tm.png rename to resources/old_js/assets/icons/flags/tm.png diff --git a/resources/js/assets/icons/flags/tn.png b/resources/old_js/assets/icons/flags/tn.png similarity index 100% rename from resources/js/assets/icons/flags/tn.png rename to resources/old_js/assets/icons/flags/tn.png diff --git a/resources/js/assets/icons/flags/to.png b/resources/old_js/assets/icons/flags/to.png similarity index 100% rename from resources/js/assets/icons/flags/to.png rename to resources/old_js/assets/icons/flags/to.png diff --git a/resources/js/assets/icons/flags/tr.png b/resources/old_js/assets/icons/flags/tr.png similarity index 100% rename from resources/js/assets/icons/flags/tr.png rename to resources/old_js/assets/icons/flags/tr.png diff --git a/resources/js/assets/icons/flags/tt.png b/resources/old_js/assets/icons/flags/tt.png similarity index 100% rename from resources/js/assets/icons/flags/tt.png rename to resources/old_js/assets/icons/flags/tt.png diff --git a/resources/js/assets/icons/flags/tv.png b/resources/old_js/assets/icons/flags/tv.png similarity index 100% rename from resources/js/assets/icons/flags/tv.png rename to resources/old_js/assets/icons/flags/tv.png diff --git a/resources/js/assets/icons/flags/tw.png b/resources/old_js/assets/icons/flags/tw.png similarity index 100% rename from resources/js/assets/icons/flags/tw.png rename to resources/old_js/assets/icons/flags/tw.png diff --git a/resources/js/assets/icons/flags/tz.png b/resources/old_js/assets/icons/flags/tz.png similarity index 100% rename from resources/js/assets/icons/flags/tz.png rename to resources/old_js/assets/icons/flags/tz.png diff --git a/resources/js/assets/icons/flags/ua.png b/resources/old_js/assets/icons/flags/ua.png similarity index 100% rename from resources/js/assets/icons/flags/ua.png rename to resources/old_js/assets/icons/flags/ua.png diff --git a/resources/js/assets/icons/flags/ug.png b/resources/old_js/assets/icons/flags/ug.png similarity index 100% rename from resources/js/assets/icons/flags/ug.png rename to resources/old_js/assets/icons/flags/ug.png diff --git a/resources/js/assets/icons/flags/um.png b/resources/old_js/assets/icons/flags/um.png similarity index 100% rename from resources/js/assets/icons/flags/um.png rename to resources/old_js/assets/icons/flags/um.png diff --git a/resources/js/assets/icons/flags/us.png b/resources/old_js/assets/icons/flags/us.png similarity index 100% rename from resources/js/assets/icons/flags/us.png rename to resources/old_js/assets/icons/flags/us.png diff --git a/resources/js/assets/icons/flags/uy.png b/resources/old_js/assets/icons/flags/uy.png similarity index 100% rename from resources/js/assets/icons/flags/uy.png rename to resources/old_js/assets/icons/flags/uy.png diff --git a/resources/js/assets/icons/flags/uz.png b/resources/old_js/assets/icons/flags/uz.png similarity index 100% rename from resources/js/assets/icons/flags/uz.png rename to resources/old_js/assets/icons/flags/uz.png diff --git a/resources/js/assets/icons/flags/va.png b/resources/old_js/assets/icons/flags/va.png similarity index 100% rename from resources/js/assets/icons/flags/va.png rename to resources/old_js/assets/icons/flags/va.png diff --git a/resources/js/assets/icons/flags/vc.png b/resources/old_js/assets/icons/flags/vc.png similarity index 100% rename from resources/js/assets/icons/flags/vc.png rename to resources/old_js/assets/icons/flags/vc.png diff --git a/resources/js/assets/icons/flags/ve.png b/resources/old_js/assets/icons/flags/ve.png similarity index 100% rename from resources/js/assets/icons/flags/ve.png rename to resources/old_js/assets/icons/flags/ve.png diff --git a/resources/js/assets/icons/flags/vg.png b/resources/old_js/assets/icons/flags/vg.png similarity index 100% rename from resources/js/assets/icons/flags/vg.png rename to resources/old_js/assets/icons/flags/vg.png diff --git a/resources/js/assets/icons/flags/vi.png b/resources/old_js/assets/icons/flags/vi.png similarity index 100% rename from resources/js/assets/icons/flags/vi.png rename to resources/old_js/assets/icons/flags/vi.png diff --git a/resources/js/assets/icons/flags/vn.png b/resources/old_js/assets/icons/flags/vn.png similarity index 100% rename from resources/js/assets/icons/flags/vn.png rename to resources/old_js/assets/icons/flags/vn.png diff --git a/resources/js/assets/icons/flags/vu.png b/resources/old_js/assets/icons/flags/vu.png similarity index 100% rename from resources/js/assets/icons/flags/vu.png rename to resources/old_js/assets/icons/flags/vu.png diff --git a/resources/js/assets/icons/flags/wf.png b/resources/old_js/assets/icons/flags/wf.png similarity index 100% rename from resources/js/assets/icons/flags/wf.png rename to resources/old_js/assets/icons/flags/wf.png diff --git a/resources/js/assets/icons/flags/ws.png b/resources/old_js/assets/icons/flags/ws.png similarity index 100% rename from resources/js/assets/icons/flags/ws.png rename to resources/old_js/assets/icons/flags/ws.png diff --git a/resources/js/assets/icons/flags/xk.png b/resources/old_js/assets/icons/flags/xk.png similarity index 100% rename from resources/js/assets/icons/flags/xk.png rename to resources/old_js/assets/icons/flags/xk.png diff --git a/resources/js/assets/icons/flags/ye.png b/resources/old_js/assets/icons/flags/ye.png similarity index 100% rename from resources/js/assets/icons/flags/ye.png rename to resources/old_js/assets/icons/flags/ye.png diff --git a/resources/js/assets/icons/flags/yt.png b/resources/old_js/assets/icons/flags/yt.png similarity index 100% rename from resources/js/assets/icons/flags/yt.png rename to resources/old_js/assets/icons/flags/yt.png diff --git a/resources/js/assets/icons/flags/za.png b/resources/old_js/assets/icons/flags/za.png similarity index 100% rename from resources/js/assets/icons/flags/za.png rename to resources/old_js/assets/icons/flags/za.png diff --git a/resources/js/assets/icons/flags/zm.png b/resources/old_js/assets/icons/flags/zm.png similarity index 100% rename from resources/js/assets/icons/flags/zm.png rename to resources/old_js/assets/icons/flags/zm.png diff --git a/resources/js/assets/icons/flags/zw.png b/resources/old_js/assets/icons/flags/zw.png similarity index 100% rename from resources/js/assets/icons/flags/zw.png rename to resources/old_js/assets/icons/flags/zw.png diff --git a/public/build/assets/gold-medal-2-DT1ucjbO.png b/resources/old_js/assets/icons/gold-medal-2.png similarity index 100% rename from public/build/assets/gold-medal-2-DT1ucjbO.png rename to resources/old_js/assets/icons/gold-medal-2.png diff --git a/resources/js/assets/icons/gold-medal.png b/resources/old_js/assets/icons/gold-medal.png similarity index 100% rename from resources/js/assets/icons/gold-medal.png rename to resources/old_js/assets/icons/gold-medal.png diff --git a/resources/js/assets/icons/home/camera.png b/resources/old_js/assets/icons/home/camera.png similarity index 100% rename from resources/js/assets/icons/home/camera.png rename to resources/old_js/assets/icons/home/camera.png diff --git a/resources/js/assets/icons/home/microscope.png b/resources/old_js/assets/icons/home/microscope.png similarity index 100% rename from resources/js/assets/icons/home/microscope.png rename to resources/old_js/assets/icons/home/microscope.png diff --git a/resources/js/assets/icons/home/phone.png b/resources/old_js/assets/icons/home/phone.png similarity index 100% rename from resources/js/assets/icons/home/phone.png rename to resources/old_js/assets/icons/home/phone.png diff --git a/resources/js/assets/icons/home/tree.png b/resources/old_js/assets/icons/home/tree.png similarity index 100% rename from resources/js/assets/icons/home/tree.png rename to resources/old_js/assets/icons/home/tree.png diff --git a/resources/js/assets/icons/home/world.png b/resources/old_js/assets/icons/home/world.png similarity index 100% rename from resources/js/assets/icons/home/world.png rename to resources/old_js/assets/icons/home/world.png diff --git a/resources/js/assets/icons/ig2.png b/resources/old_js/assets/icons/ig2.png similarity index 100% rename from resources/js/assets/icons/ig2.png rename to resources/old_js/assets/icons/ig2.png diff --git a/resources/js/assets/icons/insta.png b/resources/old_js/assets/icons/insta.png similarity index 100% rename from resources/js/assets/icons/insta.png rename to resources/old_js/assets/icons/insta.png diff --git a/public/assets/icons/ios.png b/resources/old_js/assets/icons/ios.png similarity index 100% rename from public/assets/icons/ios.png rename to resources/old_js/assets/icons/ios.png diff --git a/resources/js/assets/icons/littercoin/eternl.png b/resources/old_js/assets/icons/littercoin/eternl.png similarity index 100% rename from resources/js/assets/icons/littercoin/eternl.png rename to resources/old_js/assets/icons/littercoin/eternl.png diff --git a/resources/js/assets/icons/littercoin/nami.png b/resources/old_js/assets/icons/littercoin/nami.png similarity index 100% rename from resources/js/assets/icons/littercoin/nami.png rename to resources/old_js/assets/icons/littercoin/nami.png diff --git a/resources/js/assets/icons/mining.png b/resources/old_js/assets/icons/mining.png similarity index 100% rename from resources/js/assets/icons/mining.png rename to resources/old_js/assets/icons/mining.png diff --git a/resources/js/assets/icons/reddit.png b/resources/old_js/assets/icons/reddit.png similarity index 100% rename from resources/js/assets/icons/reddit.png rename to resources/old_js/assets/icons/reddit.png diff --git a/public/build/assets/silver-medal-2-Dx0QRhyS.png b/resources/old_js/assets/icons/silver-medal-2.png similarity index 100% rename from public/build/assets/silver-medal-2-Dx0QRhyS.png rename to resources/old_js/assets/icons/silver-medal-2.png diff --git a/resources/js/assets/icons/silver-medal.png b/resources/old_js/assets/icons/silver-medal.png similarity index 100% rename from resources/js/assets/icons/silver-medal.png rename to resources/old_js/assets/icons/silver-medal.png diff --git a/resources/js/assets/icons/tumblr.png b/resources/old_js/assets/icons/tumblr.png similarity index 100% rename from resources/js/assets/icons/tumblr.png rename to resources/old_js/assets/icons/tumblr.png diff --git a/resources/js/assets/icons/twitter.png b/resources/old_js/assets/icons/twitter.png similarity index 100% rename from resources/js/assets/icons/twitter.png rename to resources/old_js/assets/icons/twitter.png diff --git a/resources/js/assets/icons/twitter2.png b/resources/old_js/assets/icons/twitter2.png similarity index 100% rename from resources/js/assets/icons/twitter2.png rename to resources/old_js/assets/icons/twitter2.png diff --git a/resources/js/assets/images/checkmark.png b/resources/old_js/assets/images/checkmark.png similarity index 100% rename from resources/js/assets/images/checkmark.png rename to resources/old_js/assets/images/checkmark.png diff --git a/resources/js/assets/images/waiting.png b/resources/old_js/assets/images/waiting.png similarity index 100% rename from resources/js/assets/images/waiting.png rename to resources/old_js/assets/images/waiting.png diff --git a/resources/js/assets/littercoin/launched.png b/resources/old_js/assets/littercoin/launched.png similarity index 100% rename from resources/js/assets/littercoin/launched.png rename to resources/old_js/assets/littercoin/launched.png diff --git a/resources/js/assets/littercoin/launching-soon.png b/resources/old_js/assets/littercoin/launching-soon.png similarity index 100% rename from resources/js/assets/littercoin/launching-soon.png rename to resources/old_js/assets/littercoin/launching-soon.png diff --git a/resources/js/assets/littercoin/lcValidator.hl b/resources/old_js/assets/littercoin/lcValidator.hl similarity index 100% rename from resources/js/assets/littercoin/lcValidator.hl rename to resources/old_js/assets/littercoin/lcValidator.hl diff --git a/resources/js/assets/littercoin/pick-up-litter.jpeg b/resources/old_js/assets/littercoin/pick-up-litter.jpeg similarity index 100% rename from resources/js/assets/littercoin/pick-up-litter.jpeg rename to resources/old_js/assets/littercoin/pick-up-litter.jpeg diff --git a/resources/js/assets/littermap.png b/resources/old_js/assets/littermap.png similarity index 100% rename from resources/js/assets/littermap.png rename to resources/old_js/assets/littermap.png diff --git a/resources/js/assets/logo-white.png b/resources/old_js/assets/logo-white.png similarity index 100% rename from resources/js/assets/logo-white.png rename to resources/old_js/assets/logo-white.png diff --git a/resources/js/assets/logo.png b/resources/old_js/assets/logo.png similarity index 100% rename from resources/js/assets/logo.png rename to resources/old_js/assets/logo.png diff --git a/resources/js/assets/logo_small.png b/resources/old_js/assets/logo_small.png similarity index 100% rename from resources/js/assets/logo_small.png rename to resources/old_js/assets/logo_small.png diff --git a/resources/js/assets/marinelitter.jpg b/resources/old_js/assets/marinelitter.jpg similarity index 100% rename from resources/js/assets/marinelitter.jpg rename to resources/old_js/assets/marinelitter.jpg diff --git a/resources/js/assets/memes/IMG_8188.jpg b/resources/old_js/assets/memes/IMG_8188.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8188.jpg rename to resources/old_js/assets/memes/IMG_8188.jpg diff --git a/resources/js/assets/memes/IMG_8189.jpg b/resources/old_js/assets/memes/IMG_8189.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8189.jpg rename to resources/old_js/assets/memes/IMG_8189.jpg diff --git a/resources/js/assets/memes/IMG_8190.jpg b/resources/old_js/assets/memes/IMG_8190.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8190.jpg rename to resources/old_js/assets/memes/IMG_8190.jpg diff --git a/resources/js/assets/memes/IMG_8191.jpg b/resources/old_js/assets/memes/IMG_8191.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8191.jpg rename to resources/old_js/assets/memes/IMG_8191.jpg diff --git a/resources/js/assets/memes/IMG_8192.jpg b/resources/old_js/assets/memes/IMG_8192.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8192.jpg rename to resources/old_js/assets/memes/IMG_8192.jpg diff --git a/resources/js/assets/memes/IMG_8193.jpg b/resources/old_js/assets/memes/IMG_8193.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8193.jpg rename to resources/old_js/assets/memes/IMG_8193.jpg diff --git a/resources/js/assets/memes/IMG_8194.jpg b/resources/old_js/assets/memes/IMG_8194.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8194.jpg rename to resources/old_js/assets/memes/IMG_8194.jpg diff --git a/resources/js/assets/memes/IMG_8195.jpg b/resources/old_js/assets/memes/IMG_8195.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8195.jpg rename to resources/old_js/assets/memes/IMG_8195.jpg diff --git a/resources/js/assets/memes/IMG_8196.jpg b/resources/old_js/assets/memes/IMG_8196.jpg similarity index 100% rename from resources/js/assets/memes/IMG_8196.jpg rename to resources/old_js/assets/memes/IMG_8196.jpg diff --git a/resources/js/assets/memes/image.png b/resources/old_js/assets/memes/image.png similarity index 100% rename from resources/js/assets/memes/image.png rename to resources/old_js/assets/memes/image.png diff --git a/resources/js/assets/microplastics_oranmore.jpg b/resources/old_js/assets/microplastics_oranmore.jpg similarity index 100% rename from resources/js/assets/microplastics_oranmore.jpg rename to resources/old_js/assets/microplastics_oranmore.jpg diff --git a/resources/js/assets/nlbrands.png b/resources/old_js/assets/nlbrands.png similarity index 100% rename from resources/js/assets/nlbrands.png rename to resources/old_js/assets/nlbrands.png diff --git a/resources/js/assets/olm_dissertation_result.PNG b/resources/old_js/assets/olm_dissertation_result.PNG similarity index 100% rename from resources/js/assets/olm_dissertation_result.PNG rename to resources/old_js/assets/olm_dissertation_result.PNG diff --git a/resources/js/assets/pexels-photo-3735156.jpeg b/resources/old_js/assets/pexels-photo-3735156.jpeg similarity index 100% rename from resources/js/assets/pexels-photo-3735156.jpeg rename to resources/old_js/assets/pexels-photo-3735156.jpeg diff --git a/resources/js/assets/plastic_bottles.jpg b/resources/old_js/assets/plastic_bottles.jpg similarity index 100% rename from resources/js/assets/plastic_bottles.jpg rename to resources/old_js/assets/plastic_bottles.jpg diff --git a/resources/js/assets/slack-brand-logo.png b/resources/old_js/assets/slack-brand-logo.png similarity index 100% rename from resources/js/assets/slack-brand-logo.png rename to resources/old_js/assets/slack-brand-logo.png diff --git a/resources/js/assets/slack-screenshot.png b/resources/old_js/assets/slack-screenshot.png similarity index 100% rename from resources/js/assets/slack-screenshot.png rename to resources/old_js/assets/slack-screenshot.png diff --git a/resources/js/assets/spatial_analysis.png b/resources/old_js/assets/spatial_analysis.png similarity index 100% rename from resources/js/assets/spatial_analysis.png rename to resources/old_js/assets/spatial_analysis.png diff --git a/resources/js/assets/splash.png b/resources/old_js/assets/splash.png similarity index 100% rename from resources/js/assets/splash.png rename to resources/old_js/assets/splash.png diff --git a/resources/js/assets/urban.jpg b/resources/old_js/assets/urban.jpg similarity index 100% rename from resources/js/assets/urban.jpg rename to resources/old_js/assets/urban.jpg diff --git a/resources/js/assets/verified.jpg b/resources/old_js/assets/verified.jpg similarity index 100% rename from resources/js/assets/verified.jpg rename to resources/old_js/assets/verified.jpg diff --git a/resources/js/assets/zoom-brand-logo.png b/resources/old_js/assets/zoom-brand-logo.png similarity index 100% rename from resources/js/assets/zoom-brand-logo.png rename to resources/old_js/assets/zoom-brand-logo.png diff --git a/resources/js/components/Admin/Bbox/BrandsBox.vue b/resources/old_js/components/Admin/Bbox/BrandsBox.vue similarity index 100% rename from resources/js/components/Admin/Bbox/BrandsBox.vue rename to resources/old_js/components/Admin/Bbox/BrandsBox.vue diff --git a/resources/js/components/Admin/Boxes.vue b/resources/old_js/components/Admin/Boxes.vue similarity index 100% rename from resources/js/components/Admin/Boxes.vue rename to resources/old_js/components/Admin/Boxes.vue diff --git a/resources/js/components/AdminAdd.vue b/resources/old_js/components/AdminAdd.vue similarity index 81% rename from resources/js/components/AdminAdd.vue rename to resources/old_js/components/AdminAdd.vue index 34b0fc1f1..ab206a9da 100644 --- a/resources/js/components/AdminAdd.vue +++ b/resources/old_js/components/AdminAdd.vue @@ -21,7 +21,7 @@ @@ -29,7 +29,7 @@
@@ -41,7 +41,7 @@ ** - Todo: Make this dynamic for all languages === * - right now we only need verification in English */ -// eg - import { this.locale } from './langs/' . { this.locale } . 'js'; +// eg - import { this.locale } from './langs/' . { this.locale } . 'old_js'; import { en } from './langs/en.js'; export default { @@ -60,15 +60,15 @@ export default { quantity: 1, submitting: false, integers: [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 ], }; @@ -95,13 +95,13 @@ export default { // Need the Key "Smoking" when Value = "Fumar" // let reverse; // if (this.lang == "en") reverse = this.category; - this.$store.commit('addItem', { + this.$store.commit('addItem', { category: this.category, item: this.item, quantity: this.quantity, reverse: this.category // change this to reverse for multi-lang }); - + this.quantity = 1; }, }, @@ -123,28 +123,28 @@ export default { }, /** - * + * */ catnames () { return this.$store.state.litter.categoryNames; }, /** - * + * */ checkDecr () { return this.quantity == 0 ? true : false; }, - + /** - * + * */ checkIncr () { return this.quantity == 100 ? true : false; }, - /** - * Get / Set the current item + /** + * Get / Set the current item */ item: { get () { @@ -156,7 +156,7 @@ export default { }, /** - * + * */ items () { return this.$store.state.litter.items; @@ -164,7 +164,7 @@ export default { /** - * + * */ lang: { set () { @@ -175,26 +175,26 @@ export default { } }, - /** - * Get / Set the items for the current language + /** + * Get / Set the items for the current language */ litterlang () { return this.$store.state.litter.litterlang; }, /** - * + * */ presence () { return this.$store.state.litter.presence; }, /** - * + * */ stuff () { return this.$store.state.litter.stuff; } } } - \ No newline at end of file + diff --git a/resources/js/components/AdminItems.vue b/resources/old_js/components/AdminItems.vue similarity index 100% rename from resources/js/components/AdminItems.vue rename to resources/old_js/components/AdminItems.vue diff --git a/resources/js/components/AdminUserGraph.vue b/resources/old_js/components/AdminUserGraph.vue similarity index 100% rename from resources/js/components/AdminUserGraph.vue rename to resources/old_js/components/AdminUserGraph.vue diff --git a/resources/js/components/AmazonS3.vue b/resources/old_js/components/AmazonS3.vue similarity index 100% rename from resources/js/components/AmazonS3.vue rename to resources/old_js/components/AmazonS3.vue diff --git a/resources/js/components/AnonymousPresence.vue b/resources/old_js/components/AnonymousPresence.vue similarity index 100% rename from resources/js/components/AnonymousPresence.vue rename to resources/old_js/components/AnonymousPresence.vue diff --git a/resources/js/components/BecomeAPartner.vue b/resources/old_js/components/BecomeAPartner.vue similarity index 100% rename from resources/js/components/BecomeAPartner.vue rename to resources/old_js/components/BecomeAPartner.vue diff --git a/resources/js/components/Charts/Radar.vue b/resources/old_js/components/Charts/Radar.vue similarity index 100% rename from resources/js/components/Charts/Radar.vue rename to resources/old_js/components/Charts/Radar.vue diff --git a/resources/js/components/Charts/TimeSeriesLine.vue b/resources/old_js/components/Charts/TimeSeriesLine.vue similarity index 100% rename from resources/js/components/Charts/TimeSeriesLine.vue rename to resources/old_js/components/Charts/TimeSeriesLine.vue diff --git a/resources/js/components/Cleanups/CleanupSidebar.vue b/resources/old_js/components/Cleanups/CleanupSidebar.vue similarity index 100% rename from resources/js/components/Cleanups/CleanupSidebar.vue rename to resources/old_js/components/Cleanups/CleanupSidebar.vue diff --git a/resources/js/components/Cleanups/CreateCleanup.vue b/resources/old_js/components/Cleanups/CreateCleanup.vue similarity index 100% rename from resources/js/components/Cleanups/CreateCleanup.vue rename to resources/old_js/components/Cleanups/CreateCleanup.vue diff --git a/resources/js/components/Cleanups/JoinCleanup.vue b/resources/old_js/components/Cleanups/JoinCleanup.vue similarity index 100% rename from resources/js/components/Cleanups/JoinCleanup.vue rename to resources/old_js/components/Cleanups/JoinCleanup.vue diff --git a/resources/js/components/CreateAccount.vue b/resources/old_js/components/CreateAccount.vue similarity index 100% rename from resources/js/components/CreateAccount.vue rename to resources/old_js/components/CreateAccount.vue diff --git a/resources/js/components/DateSlider.vue b/resources/old_js/components/DateSlider.vue similarity index 100% rename from resources/js/components/DateSlider.vue rename to resources/old_js/components/DateSlider.vue diff --git a/resources/js/components/DonateButtons.vue b/resources/old_js/components/DonateButtons.vue similarity index 100% rename from resources/js/components/DonateButtons.vue rename to resources/old_js/components/DonateButtons.vue diff --git a/resources/js/components/General/Nav.vue b/resources/old_js/components/General/Nav.vue similarity index 100% rename from resources/js/components/General/Nav.vue rename to resources/old_js/components/General/Nav.vue diff --git a/resources/js/components/General/Progress.vue b/resources/old_js/components/General/Progress.vue similarity index 100% rename from resources/js/components/General/Progress.vue rename to resources/old_js/components/General/Progress.vue diff --git a/resources/js/components/GenerateLitterCoin.vue b/resources/old_js/components/GenerateLitterCoin.vue similarity index 100% rename from resources/js/components/GenerateLitterCoin.vue rename to resources/old_js/components/GenerateLitterCoin.vue diff --git a/resources/js/components/HexMap.vue b/resources/old_js/components/HexMap.vue similarity index 100% rename from resources/js/components/HexMap.vue rename to resources/old_js/components/HexMap.vue diff --git a/resources/js/components/InfoCards.vue b/resources/old_js/components/InfoCards.vue similarity index 100% rename from resources/js/components/InfoCards.vue rename to resources/old_js/components/InfoCards.vue diff --git a/resources/js/components/Litter/AddTags.vue b/resources/old_js/components/Litter/AddTags.vue similarity index 93% rename from resources/js/components/Litter/AddTags.vue rename to resources/old_js/components/Litter/AddTags.vue index 632d6fa4f..960880c1c 100644 --- a/resources/js/components/Litter/AddTags.vue +++ b/resources/old_js/components/Litter/AddTags.vue @@ -88,17 +88,20 @@

-
+
- +
+ + +
-
-