diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6df8428 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[{compose,docker-compose}.{yml,yaml}] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..59a44b9 --- /dev/null +++ b/.env.example @@ -0,0 +1,82 @@ +APP_NAME=HickLab3D +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost:8000 + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=hicklab3d +DB_USERNAME=root +DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" + +P2G_CLIENT_ID= +P2G_CLIENT_SECRET= +P2G_API_AUTH_URL= +P2G_API_BASE_URL=https://www.parcel2go.com/api + +ETSY_KEYSTRING= +ETSY_SHARED_SECRET= +ETSY_SHOP_NAME=HickLab3D +ETSY_REDIRECT_URI=https://hicklab3d.lhits.uk/etsy/callback +BAMBUDDY_URL=https://3d.hickmeister.uk +BAMBUDDY_API_KEY= +DRYER_URL=https://filamentdryer.hickmeister.uk/api/v1 +DRYER_API_KEY= +MQTT_PORT=8883 +MQTT_USERNAME=bblp +MQTT_VERIFY_TLS=false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..b3d60cb --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,355 @@ +name: Deploy HickLab3D Dashboard + +on: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: read + +env: + PROJECT_NAME: TechOdyssey_Designs_Dashboard + DEPLOY_ROOT: /mnt/www-live + NODE_VERSION: "22.21.1" + REQUIRED_PHP_VERSION: "8.4.0" + PHP_CMD: /opt/lhits-toolchain/bin/php + COMPOSER_CMD: /opt/lhits-toolchain/bin/composer + +jobs: + deploy-production: + name: Deploy to production + runs-on: [swarm, linux, arm64] + if: github.ref == 'refs/heads/main' + + steps: + - name: Install PHP, Composer, Node and deployment tools + run: | + if command -v apt-get >/dev/null 2>&1; then + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + ca-certificates curl gnupg lsb-release software-properties-common \ + unzip git rsync xz-utils + + . /etc/os-release + if [ "${ID:-}" = "ubuntu" ]; then + add-apt-repository -y ppa:ondrej/php + else + curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor --yes -o /usr/share/keyrings/deb.sury.org-php.gpg + echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/php.list + fi + + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + php8.4-cli php8.4-mbstring php8.4-mysql php8.4-xml php8.4-curl \ + php8.4-zip php8.4-bcmath php8.4-sqlite3 composer + + PHP_BIN="$(command -v php8.4)" + elif command -v apk >/dev/null 2>&1; then + apk update + apk add --no-cache git rsync curl ca-certificates xz libgcc + + printf '%s\n' \ + "https://dl-cdn.alpinelinux.org/alpine/edge/main" \ + "https://dl-cdn.alpinelinux.org/alpine/edge/community" \ + >> /etc/apk/repositories + apk update + apk add --no-cache \ + php84 php84-cli php84-mbstring php84-xml php84-curl php84-zip php84-phar php84-bcmath php84-ctype \ + php84-mysqli php84-pdo php84-pdo_mysql php84-pdo_sqlite php84-sqlite3 php84-openssl php84-fileinfo php84-iconv php84-session + apk add --no-cache php84-dom php84-tokenizer php84-xmlwriter php84-session || true + + missing="" + for extension in dom iconv pdo_sqlite session sqlite3 tokenizer xmlwriter; do + php84 -r "exit(extension_loaded('${extension}') ? 0 : 1);" || missing="${missing} ${extension}" + done + + if [ -n "$missing" ]; then + apk add --no-cache php84-dom php84-iconv php84-pdo_sqlite php84-session php84-sqlite3 php84-tokenizer php84-xmlwriter || true + fi + + PHP_BIN="$(command -v php84)" + curl -fsSL https://getcomposer.org/installer -o /tmp/composer-setup.php + "$PHP_BIN" /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer + else + echo "Unsupported package manager for installing PHP/Composer/Node" >&2 + exit 1 + fi + + if [ -z "${PHP_BIN:-}" ] || [ ! -x "$PHP_BIN" ]; then + echo "PHP 8.4 binary was not installed or is not executable." >&2 + exit 1 + fi + + COMPOSER_BIN="$(command -v composer)" + mkdir -p /opt/lhits-toolchain/bin + ln -sfn "$PHP_BIN" /opt/lhits-toolchain/bin/php + printf '%s\n' '#!/bin/sh' "exec \"$PHP_BIN\" \"$COMPOSER_BIN\" \"\$@\"" > /opt/lhits-toolchain/bin/composer + chmod +x /opt/lhits-toolchain/bin/composer + "$PHP_CMD" -v + + arch="$(uname -m)" + case "$arch" in + x86_64) node_arch="x64" ;; + aarch64|arm64) node_arch="arm64" ;; + *) echo "Unsupported Node architecture: $arch" >&2; exit 1 ;; + esac + + if [ -f /etc/alpine-release ] || ldd /bin/sh 2>&1 | grep -qi musl; then + node_dir="node-v${NODE_VERSION}-linux-${node_arch}-musl" + node_url="https://unofficial-builds.nodejs.org/download/release/v${NODE_VERSION}/${node_dir}.tar.xz" + else + node_dir="node-v${NODE_VERSION}-linux-${node_arch}" + node_url="https://nodejs.org/dist/v${NODE_VERSION}/${node_dir}.tar.xz" + fi + + curl -fsSL "$node_url" -o /tmp/node.tar.xz + tar -xJf /tmp/node.tar.xz -C /tmp + rm -rf /usr/local/lib/nodejs + mkdir -p /usr/local/lib/nodejs + mv "/tmp/${node_dir}" /usr/local/lib/nodejs/node + ln -sfn /usr/local/lib/nodejs/node/bin/node /usr/local/bin/node + ln -sfn /usr/local/lib/nodejs/node/bin/npm /usr/local/bin/npm + ln -sfn /usr/local/lib/nodejs/node/bin/npx /usr/local/bin/npx + hash -r + + - name: Verify runner toolchain + run: | + "$PHP_CMD" -v + "$PHP_CMD" -r ' + $required = getenv("REQUIRED_PHP_VERSION"); + if (version_compare(PHP_VERSION, $required, "<")) { + fwrite(STDERR, "PHP ".PHP_VERSION." is too old. Required: ".$required." or newer.\n"); + exit(1); + } + + $extensions = ["bcmath", "ctype", "curl", "dom", "fileinfo", "iconv", "mbstring", "openssl", "pdo", "pdo_mysql", "pdo_sqlite", "session", "sqlite3", "tokenizer", "xml", "xmlwriter", "zip"]; + $missing = array_values(array_filter($extensions, fn ($extension) => ! extension_loaded($extension))); + if ($missing !== []) { + fwrite(STDERR, "Missing required PHP extensions: ".implode(", ", $missing)."\n"); + exit(1); + } + ' + + node -e "const [major, minor] = process.versions.node.split('.').map(Number); const ok = (major === 20 && minor >= 19) || (major === 22 && minor >= 12) || major > 22; if (!ok) { console.error('Node '+process.versions.node+' is not supported. Vite requires ^20.19.0 or >=22.12.0.'); process.exit(1); }" + "$COMPOSER_CMD" --version + npm --version + + - name: Clone main + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + REPOSITORY: ${{ github.repository }} + run: | + test -n "$GITEA_TOKEN" + git config --global credential.helper '!f() { echo "username=oauth2"; echo "password=$GITEA_TOKEN"; }; f' + git clone --depth 1 --single-branch --branch main "https://git.hickmeister.uk/${REPOSITORY}.git" src + + - name: Install dependencies and verify app + working-directory: src + run: | + "$COMPOSER_CMD" install --no-interaction --prefer-dist --no-progress + npm ci + cp .env.example .env + "$PHP_CMD" artisan key:generate --ansi + "$PHP_CMD" vendor/bin/phpunit + npm run build + test -f public/build/manifest.json + ls -la public/build + + - name: Check existing production environment + env: + DEPLOY_PATH: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + test -d "$DEPLOY_PATH" + test -f "$DEPLOY_PATH/.env" + test -f "$DEPLOY_PATH/.htaccess" + grep -q '^APP_KEY=base64:' "$DEPLOY_PATH/.env" + + - name: Deploy application to live directory + env: + DEPLOY_PATH: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + set +e + rsync -rlz --delete --no-perms --no-owner --no-group --omit-dir-times --no-times --inplace \ + --exclude '.env' \ + --exclude '.htaccess' \ + --exclude '.git/' \ + --exclude '.gitea/' \ + --exclude 'node_modules/' \ + --exclude 'vendor/' \ + --exclude 'tests/' \ + --exclude '.phpunit.cache/' \ + --exclude '.phpunit.result.cache' \ + --exclude 'storage/' \ + --exclude 'bootstrap/cache/' \ + --exclude 'logs/' \ + --exclude 'public/storage' \ + src/ "$DEPLOY_PATH/" + status=$? + set -e + if [ "$status" -ne 0 ]; then + if [ "$status" -eq 23 ] || [ "$status" -eq 24 ]; then + echo "rsync reported partial transfer (likely timestamps/attrs not permitted); continuing." + else + exit "$status" + fi + fi + + - name: Prepare Laravel directories + env: + DEPLOY_PATH: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + RUNTIME_PATH: /tmp/${{ env.PROJECT_NAME }} + run: | + mkdir -p \ + "$DEPLOY_PATH/storage/app/public" \ + "$DEPLOY_PATH/storage/framework/cache/data" \ + "$DEPLOY_PATH/storage/framework/sessions" \ + "$DEPLOY_PATH/storage/framework/testing" \ + "$DEPLOY_PATH/storage/framework/views" \ + "$DEPLOY_PATH/storage/logs" \ + "$DEPLOY_PATH/bootstrap/cache" \ + "$RUNTIME_PATH/views" \ + "$RUNTIME_PATH/logs" \ + "$RUNTIME_PATH/cache" + + - name: Verify deployed Laravel files + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + for path in \ + artisan \ + public/index.php \ + public/build/manifest.json \ + routes/web.php \ + resources/views/dashboard.blade.php \ + app/Services/Etsy.php \ + app/Services/Bambuddy.php \ + app/Services/Parcel2Go.php \ + app/Services/DryerClient.php + do + if [ ! -f "$path" ]; then + echo "Missing deployed Laravel file: $(pwd)/$path" >&2 + exit 1 + fi + done + + - name: Require Laravel environment file + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + if [ ! -f ".env" ]; then + echo "Missing .env at $(pwd)/.env. Create the server-side Laravel environment file before deploying." >&2 + exit 1 + fi + + - name: Ensure writable runtime paths + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + env: + RUNTIME_PATH: /tmp/${{ env.PROJECT_NAME }} + run: | + mkdir -p "$RUNTIME_PATH/views" "$RUNTIME_PATH/logs" "$RUNTIME_PATH/cache" + chmod 0777 "$RUNTIME_PATH" "$RUNTIME_PATH/views" "$RUNTIME_PATH/logs" "$RUNTIME_PATH/cache" + + if grep -q '^VIEW_COMPILED_PATH=' .env; then + sed -i "s|^VIEW_COMPILED_PATH=.*|VIEW_COMPILED_PATH=/tmp/TechOdyssey_Designs_Dashboard.views|" .env + else + echo "VIEW_COMPILED_PATH=/tmp/TechOdyssey_Designs_Dashboard.views" >> .env + fi + + if grep -q '^LOG_PATH=' .env; then + sed -i "s|^LOG_PATH=.*|LOG_PATH=/tmp/TechOdyssey_Designs_Dashboard.laravel.log|" .env + else + echo "LOG_PATH=/tmp/TechOdyssey_Designs_Dashboard.laravel.log" >> .env + fi + + for key_path in \ + "APP_SERVICES_CACHE=/tmp/TechOdyssey_Designs_Dashboard.services.php" \ + "APP_PACKAGES_CACHE=/tmp/TechOdyssey_Designs_Dashboard.packages.php" \ + "APP_CONFIG_CACHE=/tmp/TechOdyssey_Designs_Dashboard.config.php" \ + "APP_ROUTES_CACHE=/tmp/TechOdyssey_Designs_Dashboard.routes.php" \ + "APP_EVENTS_CACHE=/tmp/TechOdyssey_Designs_Dashboard.events.php" + do + key="${key_path%%=*}" + value="${key_path#*=}" + if grep -q "^${key}=" .env; then + sed -i "s|^${key}=.*|${key}=${value}|" .env + else + echo "${key}=${value}" >> .env + fi + done + + - name: Install production PHP dependencies + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + "$COMPOSER_CMD" install --no-dev --no-interaction --prefer-dist --optimize-autoloader + + - name: Clear compiled Laravel files + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + rm -f bootstrap/cache/config.php bootstrap/cache/routes-*.php bootstrap/cache/events.php bootstrap/cache/packages.php bootstrap/cache/services.php + "$PHP_CMD" artisan config:clear + "$PHP_CMD" artisan route:clear + "$PHP_CMD" artisan event:clear + "$PHP_CMD" artisan view:clear + + - name: Ensure application key exists + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + grep -q '^APP_KEY=base64:' .env + + - name: Verify database target + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + "$PHP_CMD" <<'PHP' + $env = []; + foreach (file(".env", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) { + $line = trim($line); + if ($line === "" || str_starts_with($line, "#") || ! str_contains($line, "=")) { + continue; + } + [$key, $value] = explode("=", $line, 2); + $env[$key] = trim($value, "\"'"); + } + + $connection = $env["DB_CONNECTION"] ?? ""; + if (! in_array($connection, ["mysql", "mariadb"], true)) { + fwrite(STDERR, "DB_CONNECTION must be mysql or mariadb for this deployment. Current value: ".$connection."\n"); + exit(1); + } + + $host = $env["DB_HOST"] ?? ""; + $port = (int) ($env["DB_PORT"] ?? 3306); + $database = $env["DB_DATABASE"] ?? ""; + if ($host === "") { + fwrite(STDERR, "DB_HOST is missing from .env. Set DB_HOST to the MySQL server IP or hostname.\n"); + exit(1); + } + if ($database === "") { + fwrite(STDERR, "DB_DATABASE is missing from .env.\n"); + exit(1); + } + + $socket = @fsockopen($host, $port, $errno, $errstr, 5); + if (! $socket) { + fwrite(STDERR, "Cannot reach MySQL at DB_HOST=".$host." DB_PORT=".$port.": ".$errstr." (".$errno.")\n"); + exit(1); + } + fclose($socket); + echo "Database target reachable at DB_HOST=".$host." DB_PORT=".$port." DB_DATABASE=".$database."\n"; + PHP + + - name: Run Laravel migrations + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + "$PHP_CMD" artisan migrate --force + + - name: Optimise Laravel + working-directory: ${{ env.DEPLOY_ROOT }}/${{ env.PROJECT_NAME }} + run: | + rm -f public/hot + rm -rf build + cp -a public/build build + rm -rf public/storage + ln -s ../storage/app/public public/storage + "$PHP_CMD" artisan config:clear + "$PHP_CMD" artisan route:clear + "$PHP_CMD" artisan view:clear diff --git a/.gitignore b/.gitignore index c99f453..638b301 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,29 @@ -# Ignore .env file to keep sensitive data out of version control -.env - -# Ignore compiled PHP files -*.php~ - -# Ignore token files -etsyTokens.json - -# Ignore system and IDE files +*.log .DS_Store -node_modules/ -vendor/ -logs/ \ No newline at end of file +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.codex +/.cursor/ +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/fonts-manifest.dev.json +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +/legacy/ +/.laravel-scaffold/ +_ide_helper.php +Homestead.json +Homestead.yaml +Thumbs.db diff --git a/.htaccess b/.htaccess index 8e6136d..cb23075 100644 --- a/.htaccess +++ b/.htaccess @@ -1,57 +1,13 @@ -RewriteEngine On + + Options -MultiViews -Indexes + RewriteEngine On -# Fix for nginx proxy to avoid internal server errors -RewriteBase / - -# Redirect all traffic to the public folder, but allow existing files/directories -RewriteCond %{REQUEST_URI} !^/public/ -RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR] -RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d -RewriteRule ^(.*)$ /public/$1 [L,QSA] - -# Handle cases where the file doesn't exist -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule . /public/index.php [L] - -# Ensure directory listing is disabled -Options -Indexes - -# Enable compression - - AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json + # Keep the Laravel application outside the web-facing path. + RewriteRule ^public/ - [L] + RewriteRule ^(.*)$ public/$1 [L] -# Leverage browser caching - - ExpiresActive On - ExpiresByType text/html "access plus 1 month" - ExpiresByType image/gif "access plus 1 year" - ExpiresByType image/jpeg "access plus 1 year" - ExpiresByType image/png "access plus 1 year" - ExpiresByType text/css "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" - ExpiresByType application/javascript "access plus 1 month" - ExpiresByType application/x-shockwave-flash "access plus 1 month" - ExpiresByType application/pdf "access plus 1 month" - - -# Basic security headers - Header set X-Content-Type-Options "nosniff" - Header set X-Frame-Options "SAMEORIGIN" - Header set X-XSS-Protection "1; mode=block" + Header always set X-Content-Type-Options "nosniff" + Header always set X-Frame-Options "SAMEORIGIN" - -# Handle 404 errors -ErrorDocument 404 /public/404.html - -# Handle PHP execution if needed - - SetHandler application/x-httpd-php - - -# Deny access to sensitive files - - Require all denied - diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..495a6af --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +ignore-scripts=true +audit=true diff --git a/README.md b/README.md index 2f3dfd8..b4cef4c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,53 @@ -# TechOdyssey_Designs_Dashboard +# HickLab3D dashboard -Dashboard for techodyssey designs 3D printing business. -Written By Lee Hickman +Laravel 13, Tailwind CSS 4, and MySQL dashboard for the HickLab3D workshop. It includes user accounts, Bambu printer telemetry, Amazon filament price tracking, Parcel2Go orders, and ESP32 filament dryer control. -Test \ No newline at end of file +## Setup + +Requirements: PHP 8.3+, Composer, Node.js, and MySQL. Point the web server document root at `public/`. + +```sh +composer install +npm install +cp .env.example .env +php artisan key:generate +``` + +On Windows PowerShell, use `Copy-Item .env.example .env` in place of `cp .env.example .env`. + +Set `DB_*` in `.env` to your MySQL database, then run: + +```sh +php artisan migrate +php artisan app:create-admin your-username you@example.com +npm run build +php artisan serve +``` + +The admin command prompts for a password. Never pass it on the command line. For local front-end development, use `npm run dev` alongside `php artisan serve`. + +The migrations use the legacy table and column names. If you point the app at the existing TechOdyssey database, back it up first. The migrations skip tables already present and create Laravel's session, cache, and job tables. Existing schema variations have not been verified against a database dump. Do not run `migrate:fresh` on a database with production data. + +## Integrations and scheduled work + +- Parcel2Go: set `P2G_CLIENT_ID`, `P2G_CLIENT_SECRET`, and `P2G_API_AUTH_URL`. +- Dryer: set `DRYER_URL` to the ESP32 gateway base URL. The browser talks to authenticated Laravel routes; Laravel forwards status and control requests. +- Printers: set `MQTT_PORT`, `MQTT_USERNAME`, and `MQTT_VERIFY_TLS`. Each printer's access code is entered when adding it. `printers:collect` samples telemetry from each printer. +- Filament: `filaments:refresh` reads tracked Amazon listings and sends price drop mail to enabled recipients. Configure Laravel's `MAIL_*` settings for delivery. Amazon may change or block its public product HTML, in which case a listing is skipped. + +Run Laravel's scheduler every minute on the server: + +```sh +php artisan schedule:run +``` + +The schedule collects printer telemetry every five minutes and refreshes filament prices hourly. You can run either command manually for diagnosis. + +## Verification + +```sh +php artisan test --compact +npm run build +``` + +The test suite uses an in-memory SQLite database. MySQL and the external services need environment-specific smoke checks with your credentials and devices. diff --git a/app/Console/Commands/CollectPrinterTelemetry.php b/app/Console/Commands/CollectPrinterTelemetry.php new file mode 100644 index 0000000..6e8fcde --- /dev/null +++ b/app/Console/Commands/CollectPrinterTelemetry.php @@ -0,0 +1,53 @@ +printerIp, config('services.mqtt.port'), 'hicklab3d_'.bin2hex(random_bytes(6))); + try { + $settings = (new ConnectionSettings) + ->setUsername(config('services.mqtt.username')) + ->setPassword($printer->mqttPassword) + ->setConnectTimeout(5) + ->setUseTls(true) + ->setTlsVerifyPeer(config('services.mqtt.verify_tls')) + ->setTlsVerifyPeerName(config('services.mqtt.verify_tls')); + $client->connect($settings, true); + $received = false; + $client->subscribe('device/'.$printer->serialNumber.'/report', function (string $topic, string $message) use ($printer, &$received): void { + $telemetry = json_decode($message, true); + if (is_array($telemetry)) { + PrinterTelemetry::create(['printerId' => $printer->id, 'telemetry' => $telemetry]); + $received = true; + } + }); + $started = microtime(true); + while (! $received && microtime(true) - $started < 15) { + $client->loopOnce($started, true); + } + $client->disconnect(); + $this->line($printer->printerName.($received ? ': received telemetry' : ': no telemetry received')); + } catch (Throwable $exception) { + report($exception); + $this->warn($printer->printerName.': connection failed'); + } + } + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/CreateAdmin.php b/app/Console/Commands/CreateAdmin.php new file mode 100644 index 0000000..b7bc1cf --- /dev/null +++ b/app/Console/Commands/CreateAdmin.php @@ -0,0 +1,34 @@ +argument('username'); + $email = (string) $this->argument('email'); + if (User::where('username', $username)->orWhere('email', $email)->exists()) { + $this->error('That username or email already exists.'); + + return self::FAILURE; + } + $password = (string) $this->secret('Password (at least 12 characters)'); + if (mb_strlen($password) < 12) { + $this->error('Password is too short.'); + + return self::FAILURE; + } + User::create(['username' => $username, 'email' => $email, 'role' => 'admin', 'password' => $password]); + $this->info('Administrator created.'); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/RefreshFilamentPrices.php b/app/Console/Commands/RefreshFilamentPrices.php new file mode 100644 index 0000000..a7b5ff0 --- /dev/null +++ b/app/Console/Commands/RefreshFilamentPrices.php @@ -0,0 +1,67 @@ +amazonUrl, PHP_URL_HOST)); + if (! in_array($host, ['amazon.co.uk', 'www.amazon.co.uk', 'amazon.com', 'www.amazon.com'], true)) { + $this->warn($filament->filamentName.': unsupported product host'); + + continue; + } + try { + $html = Http::timeout(15)->withHeaders(['User-Agent' => 'Mozilla/5.0 HickLab3D/1.0']) + ->get($filament->amazonUrl)->throw()->body(); + if (! preg_match('/class="[^"]*a-price-whole[^"]*"[^>]*>([0-9,.]+)/', $html, $whole) + || ! preg_match('/class="[^"]*a-price-fraction[^"]*"[^>]*>([0-9]{2})/', $html, $fraction)) { + $this->warn($filament->filamentName.': price unavailable'); + + continue; + } + $price = (float) (str_replace(',', '', $whole[1]).'.'.$fraction[1]); + if ($price <= 0) { + continue; + } + preg_match('/class="[^"]*savingsPercentage[^"]*"[^>]*>[^0-9]*([0-9]+)%/', $html, $discount); + $previous = FilamentPrice::where('filamentId', $filament->id)->orderByDesc('recordedAt')->orderByDesc('id')->first(); + FilamentPrice::create([ + 'filamentId' => $filament->id, + 'price' => $price, + 'currentDiscount' => ['discount' => ['value' => (int) ($discount[1] ?? 0), 'type' => 'percentage'], 'voucher' => ['value' => 0, 'type' => 'none']], + ]); + if ($previous && $price < (float) $previous->price) { + $drops[] = $filament->filamentName.': £'.number_format((float) $previous->price, 2).' → £'.number_format($price, 2).' ('.$filament->amazonUrl.')'; + } + $this->line($filament->filamentName.': £'.number_format($price, 2)); + } catch (Throwable $exception) { + report($exception); + $this->warn($filament->filamentName.': collection failed'); + } + } + if ($drops) { + $body = "HickLab3D filament price drops\n\n".implode("\n", $drops); + foreach (User::where('alertEmails', true)->where('disabled', false)->pluck('email') as $email) { + Mail::raw($body, fn ($message) => $message->to($email)->subject('HickLab3D filament price drops')); + } + } + + return self::SUCCESS; + } +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..61468f5 --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,38 @@ +validate(['username' => ['required', 'string'], 'password' => ['required', 'string']]); + $user = User::where('username', $credentials['username'])->first(); + if (! $user || $user->disabled || ! Auth::attempt($credentials)) { + return back()->withErrors(['username' => 'These credentials do not match an active account.'])->onlyInput('username'); + } + $request->session()->regenerate(); + + return redirect()->intended(route('dashboard')); + } + + public function destroy(Request $request): RedirectResponse + { + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect()->route('login'); + } +} diff --git a/app/Http/Controllers/BambuddyController.php b/app/Http/Controllers/BambuddyController.php new file mode 100644 index 0000000..c5608a7 --- /dev/null +++ b/app/Http/Controllers/BambuddyController.php @@ -0,0 +1,25 @@ +printers(); + } catch (Throwable $exception) { + report($exception); + $integrationError = 'BamBuddy is unavailable. Check its API key and connection.'; + } + + return view('printers.index', compact('printers', 'integrationError')); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ + Filament::count(), + 'userCount' => $request->user()->role === 'admin' ? User::count() : null, + 'recentFilaments' => Filament::with(['prices' => fn ($query) => $query->orderByDesc('recordedAt')->limit(1)])->orderByDesc('id')->limit(5)->get(), + ]); + } +} diff --git a/app/Http/Controllers/DryerController.php b/app/Http/Controllers/DryerController.php new file mode 100644 index 0000000..23ad643 --- /dev/null +++ b/app/Http/Controllers/DryerController.php @@ -0,0 +1,62 @@ +json(['status' => $dryer->status(), 'history' => $dryer->history()]); + } catch (Throwable $exception) { + report($exception); + + return response()->json(['message' => 'Dryer is unavailable.'], 503); + } + } + + public function control(Request $request, DryerClient $dryer): JsonResponse + { + abort_unless($request->user()->role === 'admin', 403); + $data = $request->validate([ + 'dryerOn' => ['required', 'boolean'], + 'profile' => ['required_if:dryerOn,1', 'nullable', 'string', 'in:PLA,PETG,ABS,Nylon,Custom'], + 'targetTemperature' => ['required_if:dryerOn,1', 'nullable', 'integer', 'between:45,70'], + 'dryingTime' => ['required_if:dryerOn,1', 'nullable', 'integer', 'between:5,2880'], + ]); + try { + $result = $data['dryerOn'] + ? $dryer->start($data['profile'], $data['targetTemperature'], $data['dryingTime']) + : $dryer->stop(); + + return response()->json($result); + } catch (Throwable $exception) { + report($exception); + + return response()->json(['message' => 'Dryer is unavailable.'], 503); + } + } + + public function acknowledge(Request $request, DryerClient $dryer): JsonResponse + { + abort_unless($request->user()->role === 'admin', 403); + try { + return response()->json($dryer->acknowledge()); + } catch (Throwable $exception) { + report($exception); + + return response()->json(['message' => 'Dryer fault could not be acknowledged.'], 503); + } + } +} diff --git a/app/Http/Controllers/EtsyController.php b/app/Http/Controllers/EtsyController.php new file mode 100644 index 0000000..4657528 --- /dev/null +++ b/app/Http/Controllers/EtsyController.php @@ -0,0 +1,70 @@ +user()->role === 'admin', 403); + $connection = EtsyConnection::first(); + $receipts = []; + $listings = []; + $integrationError = null; + + if ($connection && $etsy->configured()) { + try { + $receipts = $etsy->receipts($connection)['results'] ?? []; + $listings = $etsy->listings($connection)['results'] ?? []; + } catch (Throwable $exception) { + report($exception); + $integrationError = 'Etsy data is temporarily unavailable. Reconnect the shop if this continues.'; + } + } + + return view('etsy', compact('connection', 'receipts', 'listings', 'integrationError') + ['configured' => $etsy->configured()]); + } + + public function connect(Request $request, Etsy $etsy): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + if (! $etsy->configured()) { + return back()->withErrors(['etsy' => 'Configure the Etsy app key and shared secret first.']); + } + + $state = bin2hex(random_bytes(24)); + $verifier = rtrim(strtr(base64_encode(random_bytes(48)), '+/', '-_'), '='); + $request->session()->put('etsy_oauth', ['state' => $state, 'verifier' => $verifier, 'started' => time()]); + + return redirect()->away($etsy->authorizationUrl($state, $verifier)); + } + + public function callback(Request $request, Etsy $etsy): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + $pending = $request->session()->pull('etsy_oauth'); + if (! is_array($pending) || time() - ($pending['started'] ?? 0) > 600 + || ! is_string($request->query('state')) + || ! hash_equals($pending['state'] ?? '', $request->query('state')) + || ! is_string($request->query('code'))) { + return redirect()->route('etsy.index')->withErrors(['etsy' => 'Etsy connection expired or was not verified. Please try again.']); + } + + try { + $connection = $etsy->connect($request->query('code'), $pending['verifier']); + + return redirect()->route('etsy.index')->with('status', $connection->shop_name.' connected to Etsy.'); + } catch (Throwable $exception) { + report($exception); + + return redirect()->route('etsy.index')->withErrors(['etsy' => 'Etsy rejected the connection. Check the app credentials and callback URL.']); + } + } +} diff --git a/app/Http/Controllers/FilamentController.php b/app/Http/Controllers/FilamentController.php new file mode 100644 index 0000000..5e46343 --- /dev/null +++ b/app/Http/Controllers/FilamentController.php @@ -0,0 +1,52 @@ + Filament::with(['prices' => fn ($query) => $query->orderByDesc('recordedAt')->limit(10)])->orderBy('filamentName')->paginate(20)]); + } + + public function create(Request $request): View + { + abort_unless($request->user()->role === 'admin', 403); + + return view('filaments.create'); + } + + public function store(Request $request): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + $data = $request->validate([ + 'filamentName' => ['required', 'string', 'max:255'], + 'amazonUrl' => ['required', 'url:http,https', 'max:2048'], + 'brand' => ['nullable', 'string', 'max:255'], + 'material' => ['nullable', 'string', 'max:255'], + 'color' => ['nullable', 'string', 'max:255'], + 'filamentWeight' => ['nullable', 'numeric', 'min:0'], + 'itemDiameter' => ['nullable', 'numeric', 'min:0'], + ]); + $host = strtolower((string) parse_url($data['amazonUrl'], PHP_URL_HOST)); + if (! in_array($host, ['amazon.co.uk', 'www.amazon.co.uk', 'amazon.com', 'www.amazon.com'], true)) { + return back()->withErrors(['amazonUrl' => 'Enter an Amazon UK or US product URL.'])->withInput(); + } + Filament::create([...$data, 'userId' => $request->user()->id]); + + return redirect()->route('filaments.index')->with('status', 'Filament added. Price collection runs on the schedule.'); + } + + public function destroy(Request $request, Filament $filament): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + $filament->delete(); + + return redirect()->route('filaments.index')->with('status', 'Filament removed.'); + } +} diff --git a/app/Http/Controllers/PrinterController.php b/app/Http/Controllers/PrinterController.php new file mode 100644 index 0000000..bd02352 --- /dev/null +++ b/app/Http/Controllers/PrinterController.php @@ -0,0 +1,46 @@ +user()->id) + ->with(['telemetry' => fn ($query) => $query->orderByDesc('recordedAt')->limit(1)]) + ->orderBy('printerName')->get(); + + return view('printers.index', compact('printers')); + } + + public function create(): View + { + return view('printers.create'); + } + + public function store(Request $request): RedirectResponse + { + $data = $request->validate([ + 'printerName' => ['required', 'string', 'max:255'], + 'printerIp' => ['required', 'ip'], + 'serialNumber' => ['required', 'string', 'max:255', 'unique:bambuPrinters,serialNumber'], + 'mqttPassword' => ['required', 'string', 'max:255'], + ]); + Printer::create([...$data, 'userId' => $request->user()->id]); + + return redirect()->route('printers.index')->with('status', 'Printer added.'); + } + + public function destroy(Request $request, Printer $printer): RedirectResponse + { + abort_unless($printer->userId === $request->user()->id, 404); + $printer->delete(); + + return redirect()->route('printers.index')->with('status', 'Printer removed.'); + } +} diff --git a/app/Http/Controllers/ShippingController.php b/app/Http/Controllers/ShippingController.php new file mode 100644 index 0000000..85dc2ef --- /dev/null +++ b/app/Http/Controllers/ShippingController.php @@ -0,0 +1,175 @@ +user()->role === 'admin', 403); + try { + $account = $parcel2Go->fetch('me/detail'); + $balance = $parcel2Go->fetch('me/prepay/balance'); + $orders = $parcel2Go->fetch('me/orders/detail'); + + return view('shipping', compact('account', 'balance', 'orders') + [ + 'quotes' => $request->session()->get('shipping_quotes', []), + 'collectionDates' => $request->session()->get('shipping_collection_dates', []), + 'selectedService' => $request->session()->get('shipping_selected_service'), + 'bookingResult' => $request->session()->get('shipping_booking_result'), + 'bookingPending' => $request->session()->get('shipping_booking_pending', false), + ]); + } catch (Throwable $exception) { + report($exception); + + return view('shipping', [ + 'account' => [], 'balance' => [], 'orders' => [], + 'quotes' => $request->session()->get('shipping_quotes', []), + 'collectionDates' => $request->session()->get('shipping_collection_dates', []), + 'selectedService' => $request->session()->get('shipping_selected_service'), + 'bookingResult' => $request->session()->get('shipping_booking_result'), + 'bookingPending' => $request->session()->get('shipping_booking_pending', false), + 'integrationError' => 'Parcel2Go is unavailable. Check API credentials and connectivity.', + ]); + } + } + + public function quote(Request $request, Parcel2Go $parcel2Go): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + if ($request->session()->get('shipping_booking_pending')) { + return redirect()->route('shipping')->withErrors(['collection' => 'A booking outcome is uncertain. Check your Parcel2Go account before trying again.']); + } + $details = $request->validate([ + 'collection_postcode' => ['required', 'string', 'max:12'], + 'delivery_postcode' => ['required', 'string', 'max:12'], + 'weight' => ['required', 'numeric', 'gt:0', 'lte:30'], + 'length' => ['required', 'numeric', 'gt:0', 'lte:200'], + 'width' => ['required', 'numeric', 'gt:0', 'lte:200'], + 'height' => ['required', 'numeric', 'gt:0', 'lte:200'], + 'value' => ['required', 'numeric', 'gte:0', 'lte:10000'], + ]); + try { + $quotes = $parcel2Go->quote($details)['Quotes'] ?? []; + $request->session()->put('shipping_quote', $details); + $request->session()->put('shipping_quotes', $quotes); + $request->session()->forget(['shipping_collection_dates', 'shipping_selected_service']); + + return redirect()->route('shipping')->with('status', count($quotes).' services available.'); + } catch (Throwable $exception) { + report($exception); + + return redirect()->route('shipping')->withErrors(['quote' => 'Parcel2Go could not quote this parcel. Check the postcodes and parcel details.']); + } + } + + public function collectionDates(Request $request, Parcel2Go $parcel2Go): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + $data = $request->validate([ + 'service' => ['required', 'string', 'max:200'], + 'sender_street' => ['required', 'string', 'max:200'], + 'sender_town' => ['required', 'string', 'max:100'], + ]); + $details = $request->session()->get('shipping_quote'); + $quote = collect($request->session()->get('shipping_quotes', []))->first(fn ($quote) => ($quote['Service']['Slug'] ?? null) === $data['service'] && ($quote['Service']['CollectionType'] ?? null) === 'Collection'); + if (! $details || ! $quote) { + return redirect()->route('shipping')->withErrors(['service' => 'Select a collection service from a current quote.']); + } + + try { + $dates = $parcel2Go->collectionDates($data['service'], $data['sender_street'], $data['sender_town'], $details['collection_postcode'])['CollectionDates'] ?? []; + $request->session()->put('shipping_collection_dates', $dates); + $request->session()->put('shipping_selected_service', $data['service']); + $request->session()->put('shipping_sender_location', $data); + + return redirect()->route('shipping')->with('status', 'Choose a collection date and enter the addresses.'); + } catch (Throwable $exception) { + report($exception); + + return redirect()->route('shipping')->withErrors(['collection' => 'Parcel2Go could not return collection dates for this service.']); + } + } + + public function bookCollection(Request $request, Parcel2Go $parcel2Go): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + if ($request->session()->get('shipping_booking_pending')) { + return redirect()->route('shipping')->withErrors(['collection' => 'A booking outcome is uncertain. Check your Parcel2Go account before trying again.']); + } + $booking = $request->validate([ + 'collection_date' => ['required', 'date', 'after:now'], + 'sender_name' => ['required', 'string', 'max:100'], + 'sender_email' => ['required', 'email', 'max:150'], + 'sender_phone' => ['required', 'string', 'max:30'], + 'sender_property' => ['required', 'string', 'max:100'], + 'sender_street' => ['required', 'string', 'max:200'], + 'sender_town' => ['required', 'string', 'max:100'], + 'recipient_name' => ['required', 'string', 'max:100'], + 'recipient_email' => ['required', 'email', 'max:150'], + 'recipient_phone' => ['required', 'string', 'max:30'], + 'recipient_property' => ['required', 'string', 'max:100'], + 'recipient_street' => ['required', 'string', 'max:200'], + 'recipient_town' => ['required', 'string', 'max:100'], + 'contents' => ['required', 'string', 'max:200'], + ]); + $details = $request->session()->get('shipping_quote'); + $service = $request->session()->get('shipping_selected_service'); + $dates = $request->session()->get('shipping_collection_dates', []); + $senderLocation = $request->session()->get('shipping_sender_location', []); + $selectedQuote = collect($request->session()->get('shipping_quotes', [])) + ->first(fn ($quote) => ($quote['Service']['Slug'] ?? null) === $service && ($quote['Service']['CollectionType'] ?? null) === 'Collection'); + if (! $details || ! $service || ! collect($dates)->contains(fn ($date) => ($date['CollectionDate'] ?? null) === $booking['collection_date']) + || ! $selectedQuote || ! empty($selectedQuote['RequiresCustoms']) || ! empty($selectedQuote['RequiresCommercialInvoice']) + || ($senderLocation['sender_street'] ?? null) !== $booking['sender_street'] || ($senderLocation['sender_town'] ?? null) !== $booking['sender_town']) { + return redirect()->route('shipping')->withErrors(['collection' => 'Choose an available collection date for the quoted address.']); + } + + try { + $request->session()->put('shipping_booking_pending', true); + $result = $parcel2Go->bookCollection($details, $service, $booking); + if (empty($result['OrderId'])) { + throw new \RuntimeException('Parcel2Go did not return an order reference.'); + } + $request->session()->forget(['shipping_quote', 'shipping_quotes', 'shipping_collection_dates', 'shipping_selected_service', 'shipping_sender_location', 'shipping_booking_pending']); + + return redirect()->route('shipping')->with('shipping_booking_result', $result)->with('status', 'Collection order created. Complete payment with Parcel2Go.'); + } catch (Throwable $exception) { + report($exception); + + return redirect()->route('shipping')->withErrors(['collection' => 'Booking outcome is uncertain. Check your Parcel2Go account before trying again.']); + } + } + + public function resetBooking(Request $request): RedirectResponse + { + abort_unless($request->user()->role === 'admin', 403); + $request->validate(['checked_account' => ['accepted']]); + $request->session()->forget(['shipping_quote', 'shipping_quotes', 'shipping_collection_dates', 'shipping_selected_service', 'shipping_sender_location', 'shipping_booking_pending']); + + return redirect()->route('shipping')->with('status', 'Booking workflow reset. Start with a fresh quote.'); + } + + public function label(Request $request, Parcel2Go $parcel2Go, string $orderLineId): Response + { + abort_unless($request->user()->role === 'admin', 403); + abort_unless(ctype_digit($orderLineId), 404); + $orders = $parcel2Go->fetch('me/orders/detail')['Orders'] ?? []; + $order = collect($orders)->first(fn ($order) => (string) ($order['OrderLineId'] ?? '') === $orderLineId); + abort_unless($order && ! empty($order['Hash']), 404); + $pdf = $parcel2Go->labelPdf($orderLineId, $order['Hash']); + + return response($pdf, 200, [ + 'Content-Type' => 'application/pdf', + 'Content-Disposition' => 'attachment; filename="parcel2go-'.$orderLineId.'.pdf"', + 'Cache-Control' => 'private, no-store', + ]); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..0299d92 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,69 @@ +authorizeAdmin($request); + + return view('users.index', ['users' => User::orderBy('username')->paginate(20)]); + } + + public function store(Request $request): RedirectResponse + { + $this->authorizeAdmin($request); + $data = $request->validate([ + 'username' => ['required', 'string', 'max:255', 'unique:users,username'], + 'email' => ['required', 'email', 'max:255', 'unique:users,email'], + 'role' => ['required', Rule::in(['admin', 'user'])], + 'password' => ['required', 'string', 'min:12'], + 'alertEmails' => ['sometimes', 'boolean'], + ]); + User::create($data); + + return back()->with('status', 'User created.'); + } + + public function update(Request $request, User $user): RedirectResponse + { + $this->authorizeAdmin($request); + $data = $request->validate([ + 'email' => ['sometimes', 'email', Rule::unique('users', 'email')->ignore($user->id)], + 'role' => ['sometimes', Rule::in(['admin', 'user'])], + 'disabled' => ['sometimes', 'boolean'], + 'alertEmails' => ['sometimes', 'boolean'], + 'password' => ['nullable', 'string', 'min:12'], + ]); + if (empty($data['password'])) { + unset($data['password']); + } + if ($user->id === $request->user()->id && (($data['disabled'] ?? false) || ($data['role'] ?? 'admin') !== 'admin')) { + return back()->withErrors(['user' => 'You cannot disable or demote your own admin account.']); + } + $user->update($data); + + return back()->with('status', 'User updated.'); + } + + public function destroy(Request $request, User $user): RedirectResponse + { + $this->authorizeAdmin($request); + abort_if($user->id === $request->user()->id, 422, 'You cannot delete your own account.'); + $user->delete(); + + return back()->with('status', 'User deleted.'); + } + + private function authorizeAdmin(Request $request): void + { + abort_unless($request->user()->role === 'admin', 403); + } +} diff --git a/app/Http/Middleware/EnsureAccountActive.php b/app/Http/Middleware/EnsureAccountActive.php new file mode 100644 index 0000000..8b7b59f --- /dev/null +++ b/app/Http/Middleware/EnsureAccountActive.php @@ -0,0 +1,28 @@ +user()?->disabled) { + auth()->logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect()->route('login')->withErrors(['username' => 'This account is disabled.']); + } + + return $next($request); + } +} diff --git a/app/Models/EtsyConnection.php b/app/Models/EtsyConnection.php new file mode 100644 index 0000000..8bfaf09 --- /dev/null +++ b/app/Models/EtsyConnection.php @@ -0,0 +1,19 @@ + 'encrypted', + 'refresh_token' => 'encrypted', + 'expires_at' => 'datetime', + ]; + } +} diff --git a/app/Models/Filament.php b/app/Models/Filament.php new file mode 100644 index 0000000..f7316b1 --- /dev/null +++ b/app/Models/Filament.php @@ -0,0 +1,25 @@ + */ + use HasFactory; + + protected $table = 'filamentTracker'; + + public $timestamps = false; + + protected $fillable = ['userId', 'filamentName', 'amazonUrl', 'filamentWeight', 'brand', 'material', 'color', 'itemDiameter']; + + public function prices(): HasMany + { + return $this->hasMany(FilamentPrice::class, 'filamentId'); + } +} diff --git a/app/Models/FilamentPrice.php b/app/Models/FilamentPrice.php new file mode 100644 index 0000000..25d1e64 --- /dev/null +++ b/app/Models/FilamentPrice.php @@ -0,0 +1,24 @@ + */ + use HasFactory; + + protected $table = 'filamentPriceHistory'; + + public $timestamps = false; + + protected $fillable = ['filamentId', 'price', 'currentDiscount']; + + protected function casts(): array + { + return ['currentDiscount' => 'array', 'recordedAt' => 'datetime', 'price' => 'decimal:2']; + } +} diff --git a/app/Models/Printer.php b/app/Models/Printer.php new file mode 100644 index 0000000..ac985b6 --- /dev/null +++ b/app/Models/Printer.php @@ -0,0 +1,27 @@ + */ + use HasFactory; + + protected $table = 'bambuPrinters'; + + public $timestamps = false; + + protected $fillable = ['printerName', 'printerIp', 'mqttPassword', 'serialNumber', 'userId']; + + protected $hidden = ['mqttPassword']; + + public function telemetry(): HasMany + { + return $this->hasMany(PrinterTelemetry::class, 'printerId'); + } +} diff --git a/app/Models/PrinterTelemetry.php b/app/Models/PrinterTelemetry.php new file mode 100644 index 0000000..39d7954 --- /dev/null +++ b/app/Models/PrinterTelemetry.php @@ -0,0 +1,24 @@ + */ + use HasFactory; + + protected $table = 'printerTelemetry'; + + public $timestamps = false; + + protected $fillable = ['printerId', 'telemetry']; + + protected function casts(): array + { + return ['telemetry' => 'array', 'recordedAt' => 'datetime']; + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..c21ea68 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,35 @@ + */ + use HasFactory, Notifiable; + + public const UPDATED_AT = null; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'password' => 'hashed', + 'disabled' => 'boolean', + 'alertEmails' => 'boolean', + ]; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ +configured()) { + throw new RuntimeException('BamBuddy API key is not configured.'); + } + + $url = rtrim(config('services.bambuddy.url'), '/').'/api/v1/printers'; + + $printers = Http::withHeaders(['X-API-Key' => config('services.bambuddy.api_key')]) + ->acceptJson()->connectTimeout(3)->timeout(8)->get($url)->throw()->json() ?? []; + + return collect($printers)->filter(fn ($printer) => is_array($printer) && isset($printer['id'])) + ->take(20)->map(function (array $printer): array { + try { + $status = Http::withHeaders(['X-API-Key' => config('services.bambuddy.api_key')]) + ->acceptJson()->connectTimeout(3)->timeout(5) + ->get(rtrim(config('services.bambuddy.url'), '/').'/api/v1/printers/'.(int) $printer['id'].'/status') + ->throw()->json() ?? []; + + return $printer + ['live' => $status]; + } catch (Throwable $exception) { + report($exception); + + return $printer + ['live' => []]; + } + })->values()->all(); + } +} diff --git a/app/Services/DryerClient.php b/app/Services/DryerClient.php new file mode 100644 index 0000000..52efbcc --- /dev/null +++ b/app/Services/DryerClient.php @@ -0,0 +1,61 @@ + config('services.dryer.api_key')])->acceptJson() + ->connectTimeout(3)->timeout(7)->get($this->url('status'))->throw()->json() ?? []; + } + + public function history(): array + { + return Http::withHeaders(['X-API-Key' => config('services.dryer.api_key')])->acceptJson() + ->connectTimeout(3)->timeout(7)->get($this->url('history'), ['limit' => 60])->throw()->json() ?? []; + } + + public function start(string $profile, int $targetTemperature, int $dryingTime): array + { + return $this->command('cycles/start', [ + 'profile' => $profile, 'targetC' => $targetTemperature, 'durationMinutes' => $dryingTime, + ]); + } + + public function stop(): array + { + return $this->command('cycles/stop'); + } + + public function acknowledge(): array + { + return $this->command('faults/acknowledge'); + } + + private function command(string $path, array $payload = []): array + { + return Http::withHeaders(['X-API-Key' => config('services.dryer.api_key')])->acceptJson() + ->connectTimeout(3)->timeout(7)->post($this->url($path), [ + 'requestId' => 'dashboard-'.bin2hex(random_bytes(12)), ...$payload, + ])->throw()->json() ?? []; + } +} diff --git a/app/Services/Etsy.php b/app/Services/Etsy.php new file mode 100644 index 0000000..5bc51bf --- /dev/null +++ b/app/Services/Etsy.php @@ -0,0 +1,105 @@ +configured()) { + throw new RuntimeException('Etsy application credentials are not configured.'); + } + $challenge = rtrim(strtr(base64_encode(hash('sha256', $verifier, true)), '+/', '-_'), '='); + + return 'https://www.etsy.com/oauth/connect?'.http_build_query([ + 'response_type' => 'code', 'redirect_uri' => $this->redirectUri(), + 'scope' => 'transactions_r listings_r', 'client_id' => config('services.etsy.keystring'), + 'state' => $state, 'code_challenge' => $challenge, 'code_challenge_method' => 'S256', + ], '', '&', PHP_QUERY_RFC3986); + } + + public function connect(string $code, string $verifier): EtsyConnection + { + $tokens = Http::asForm()->acceptJson()->connectTimeout(3)->timeout(10) + ->post(self::API_URL.'/public/oauth/token', [ + 'grant_type' => 'authorization_code', 'client_id' => config('services.etsy.keystring'), + 'redirect_uri' => $this->redirectUri(), 'code' => $code, 'code_verifier' => $verifier, + ])->throw()->json(); + $userId = explode('.', $tokens['access_token'] ?? '')[0]; + if (! ctype_digit($userId) || empty($tokens['refresh_token'])) { + throw new RuntimeException('Etsy returned an invalid OAuth response.'); + } + + $shop = $this->get('application/users/'.$userId.'/shops', $tokens['access_token']); + if (empty($shop['shop_id'])) { + throw new RuntimeException('This Etsy account does not own a shop.'); + } + if (strcasecmp($shop['shop_name'] ?? '', config('services.etsy.shop_name', 'HickLab3D')) !== 0) { + throw new RuntimeException('The Etsy account does not own the configured HickLab3D shop.'); + } + + return EtsyConnection::updateOrCreate(['shop_id' => $shop['shop_id']], [ + 'shop_name' => $shop['shop_name'] ?? 'Etsy shop', + 'access_token' => $tokens['access_token'], 'refresh_token' => $tokens['refresh_token'], + 'expires_at' => now()->addSeconds(max(60, (int) ($tokens['expires_in'] ?? 3600) - 60)), + ]); + } + + public function receipts(EtsyConnection $connection): array + { + return $this->get('application/shops/'.$connection->shop_id.'/receipts', $this->accessToken($connection), [ + 'was_paid' => 'true', 'was_shipped' => 'false', 'limit' => 20, + ]); + } + + public function listings(EtsyConnection $connection): array + { + return $this->get('application/shops/'.$connection->shop_id.'/listings', $this->accessToken($connection), [ + 'state' => 'active', 'limit' => 20, + ]); + } + + private function accessToken(EtsyConnection $connection): string + { + if ($connection->expires_at->isFuture()) { + return $connection->access_token; + } + $tokens = Http::asForm()->acceptJson()->connectTimeout(3)->timeout(10) + ->post(self::API_URL.'/public/oauth/token', [ + 'grant_type' => 'refresh_token', 'client_id' => config('services.etsy.keystring'), + 'refresh_token' => $connection->refresh_token, + ])->throw()->json(); + if (empty($tokens['access_token']) || empty($tokens['refresh_token'])) { + throw new RuntimeException('Etsy did not refresh the shop connection.'); + } + $connection->update([ + 'access_token' => $tokens['access_token'], 'refresh_token' => $tokens['refresh_token'], + 'expires_at' => now()->addSeconds(max(60, (int) ($tokens['expires_in'] ?? 3600) - 60)), + ]); + + return $tokens['access_token']; + } + + private function get(string $path, string $accessToken, array $query = []): array + { + return Http::withHeaders(['x-api-key' => config('services.etsy.keystring').':'.config('services.etsy.shared_secret')]) + ->withToken($accessToken)->acceptJson()->connectTimeout(3)->timeout(10) + ->get(self::API_URL.'/'.$path, $query)->throw()->json() ?? []; + } + + private function redirectUri(): string + { + return config('services.etsy.redirect_uri') ?: route('etsy.callback'); + } +} diff --git a/app/Services/Parcel2Go.php b/app/Services/Parcel2Go.php new file mode 100644 index 0000000..25b3f25 --- /dev/null +++ b/app/Services/Parcel2Go.php @@ -0,0 +1,116 @@ +accessToken())->acceptJson()->connectTimeout(3)->timeout(15) + ->get($this->url($path))->throw()->json() ?? []; + } + + public function quote(array $details): array + { + return Http::withToken($this->accessToken())->acceptJson()->connectTimeout(3)->timeout(15) + ->post($this->url('quotes'), [ + 'CollectionAddress' => ['Country' => 'GBR', 'Postcode' => $details['collection_postcode']], + 'DeliveryAddress' => ['Country' => 'GBR', 'Postcode' => $details['delivery_postcode']], + 'Parcels' => [[ + 'Value' => $details['value'], 'Weight' => $details['weight'], + 'Length' => $details['length'], 'Width' => $details['width'], 'Height' => $details['height'], + ]], + ])->throw()->json() ?? []; + } + + public function collectionDates(string $service, string $street, string $town, string $postcode): array + { + return Http::withToken($this->accessToken())->acceptJson()->connectTimeout(3)->timeout(15) + ->post($this->url('collectiondates'), [ + 'ServiceSlug' => $service, 'Address' => $street, 'City' => $town, + 'Postcode' => $postcode, 'CountryISO3Code' => 'GBR', + ])->throw()->json() ?? []; + } + + public function bookCollection(array $details, string $service, array $booking): array + { + $collectionAddress = [ + 'ContactName' => $booking['sender_name'], 'Email' => $booking['sender_email'], + 'Phone' => $booking['sender_phone'], 'Property' => $booking['sender_property'], + 'Street' => $booking['sender_street'], 'Town' => $booking['sender_town'], + 'Postcode' => $details['collection_postcode'], 'CountryIsoCode' => 'GBR', + ]; + $deliveryAddress = [ + 'ContactName' => $booking['recipient_name'], 'Email' => $booking['recipient_email'], + 'Phone' => $booking['recipient_phone'], 'Property' => $booking['recipient_property'], + 'Street' => $booking['recipient_street'], 'Town' => $booking['recipient_town'], + 'Postcode' => $details['delivery_postcode'], 'CountryIsoCode' => 'GBR', + ]; + [$forename, $surname] = array_pad(explode(' ', trim($booking['sender_name']), 2), 2, ''); + + return Http::withToken($this->accessToken())->acceptJson()->connectTimeout(3)->timeout(20) + ->post($this->url('orders'), [ + 'Items' => [[ + 'Id' => (string) Str::uuid(), + 'CollectionDate' => $booking['collection_date'], + 'OriginCountry' => 'GBR', 'Service' => $service, + 'CollectionAddress' => $collectionAddress, + 'Parcels' => [[ + 'Id' => (string) Str::uuid(), + 'Height' => $details['height'], 'Length' => $details['length'], + 'Width' => $details['width'], 'Weight' => $details['weight'], + 'EstimatedValue' => $details['value'], + 'ContentsSummary' => $booking['contents'], + 'DeliveryAddress' => $deliveryAddress, + ]], + ]], + 'CustomerDetails' => ['Email' => $booking['sender_email'], 'Forename' => $forename, 'Surname' => $surname ?: $forename], + ])->throw()->json() ?? []; + } + + public function labelPdf(string $reference, string $hash): string + { + $data = Http::withToken($this->accessToken())->acceptJson()->connectTimeout(3)->timeout(20) + ->get($this->url('labels/'.$reference), [ + 'referenceType' => 'OrderLineId', 'detailLevel' => 'Labels', + 'labelMedia' => 'A4', 'labelFormat' => 'PDF', 'hash' => $hash, + ])->throw()->json(); + $encoded = $data['Base64EncodedLabels'][0] ?? ''; + $pdf = is_string($encoded) ? base64_decode($encoded, true) : false; + if ($pdf === false || ! str_starts_with($pdf, '%PDF-')) { + throw new RuntimeException('Parcel2Go did not return a valid PDF label.'); + } + + return $pdf; + } + + private function url(string $path): string + { + return rtrim(config('services.parcel2go.base_url'), '/').'/'.ltrim($path, '/'); + } + + private function accessToken(): string + { + $settings = config('services.parcel2go'); + if (! $settings['client_id'] || ! $settings['client_secret'] || ! $settings['auth_url']) { + throw new RuntimeException('Parcel2Go credentials are not configured.'); + } + + $token = Http::asForm()->timeout(10)->post($settings['auth_url'], [ + 'grant_type' => 'client_credentials', + 'scope' => 'public-api my-profile', + 'client_id' => $settings['client_id'], + 'client_secret' => $settings['client_secret'], + ])->throw()->json('access_token'); + + if (! $token) { + throw new RuntimeException('Parcel2Go did not return an access token.'); + } + + return $token; + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..c35e31d --- /dev/null +++ b/artisan @@ -0,0 +1,18 @@ +#!/usr/bin/env php +handleCommand(new ArgvInput); + +exit($status); diff --git a/assets/css/app.css b/assets/css/app.css deleted file mode 100644 index ef65652..0000000 --- a/assets/css/app.css +++ /dev/null @@ -1,5373 +0,0 @@ - - -/* - -Template Name: Syndron Admin - -Author: codervent - -Email: codervent@gmail.com - -File: app.css - -*/ - - - -body { - - font-size: 14px; - - color: #4c5258; - - letter-spacing: .5px; - - background: #f4f4f4; - - overflow-x: hidden; - - font-family: Roboto, sans-serif - -} - - - -a { - - text-decoration: none - -} - - - -.wrapper { - - width: 100%; - - position: relative - -} - - - -.sidebar-wrapper { - - width: 250px; - - height: 100%; - - position: fixed; - - top: 0; - - bottom: 0; - - left: 0; - - background: #fff; - - border-right: 0 solid #e4e4e4; - - z-index: 11; - - box-shadow: 0 .3rem .8rem rgba(0, 0, 0, .12); - - transition: all .2s ease-out - -} - - - -.sidebar-header { - - width: 250px; - - height: 60px; - - display: flex; - - align-items: center; - - position: fixed; - - top: 0; - - bottom: 0; - - padding: 0 15px; - - z-index: 5; - - background: #fff; - - background-clip: padding-box; - - border-bottom: 1px solid #e4e4e4 - -} - - - -.logo-icon { - - width: 30px - -} - - - -.logo-text { - - font-size: 22px; - - margin-left: 10px; - - margin-bottom: 0; - - letter-spacing: 1px; - - color: #008cff; - -} - - - -.toggle-icon { - - font-size: 22px; - - cursor: pointer; - - color: #008cff - -} - - - -.topbar { - - position: fixed; - - top: 0; - - left: 250px; - - right: 0; - - height: 60px; - - background: #fff; - - border-bottom: 1px solid rgb(228 228 228 / 0%); - - z-index: 10; - - -webkit-box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075); - - box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075); - -} - - - -.topbar .navbar { - - width: 100%; - - height: 60px; - - padding-left: 1.5rem; - - padding-right: 1.5rem; - -} - - - -.page-wrapper { - - height: 100%; - - margin-top: 60px; - - margin-bottom: 30px; - - margin-left: 250px - -} - - - -.page-content { - - padding: 1.5rem 1.5rem 0.7rem 1.5rem - -} - - - -.page-footer { - - background: #fff; - - left: 250px; - - right: 0; - - bottom: 0; - - position: fixed; - - text-align: center; - - padding: 7px; - - font-size: 14px; - - border-top: 1px solid #e4e4e4; - - z-index: 3 - -} - - - -.wrapper.toggled .topbar { - - left: 70px - -} - - - -.wrapper.toggled .page-wrapper { - - margin-left: 70px - -} - - - -.wrapper.toggled .page-footer { - - left: 70px - -} - - - -.sidebar-wrapper ul { - - padding: 0; - - margin: 0; - - list-style: none; - - background: 0 0 - -} - - - -.sidebar-wrapper .metismenu { - - background: 0 0; - - display: -webkit-box; - - display: -ms-flexbox; - - display: flex; - - padding: 10px; - - margin-top: 60px; - - -webkit-box-orient: vertical; - - -webkit-box-direction: normal; - - -ms-flex-direction: column; - - flex-direction: column - -} - - - -.sidebar-wrapper .metismenu li+li { - - margin-top: 5px - -} - - - -.sidebar-wrapper .metismenu li:first-child { - - margin-top: 5px - -} - - - -.sidebar-wrapper .metismenu li:last-child { - - margin-bottom: 5px - -} - - - -.sidebar-wrapper .metismenu>li { - - display: -webkit-box; - - display: -ms-flexbox; - - display: flex; - - -webkit-box-orient: vertical; - - -webkit-box-direction: normal; - - -ms-flex-direction: column; - - flex-direction: column; - - position: relative - -} - - - -.sidebar-wrapper .metismenu a { - - position: relative; - - display: flex; - - align-items: center; - - justify-content: left; - - padding: 6px 16px; - - font-size: 15px; - - color: #5f5f5f; - - outline-width: 0; - - text-overflow: ellipsis; - - overflow: hidden; - - letter-spacing: .5px; - - border-radius: 0.25rem; - - transition: all .3s ease-out - -} - - - -.sidebar-wrapper .metismenu a .parent-icon { - - font-size: 24px; - - line-height: 1 - -} - - - -.sidebar-wrapper .metismenu a .menu-title { - - margin-left: 10px - -} - - - -.sidebar-wrapper .metismenu ul a { - - padding: 6px 15px 6px 20px; - - font-size: 15px; - - border: 0 - -} - - - -.sidebar-wrapper .metismenu ul a i { - - margin-right: 14px; - -} - - - -.sidebar-wrapper .metismenu ul { - - background: #fff - -} - - - -.sidebar-wrapper .metismenu ul ul a { - - padding: 8px 15px 8px 30px - -} - - - -.sidebar-wrapper .metismenu ul ul ul a { - - padding: 8px 15px 8px 45px - -} - - - -.sidebar-wrapper .metismenu .mm-active>a, - -.sidebar-wrapper .metismenu a:active, - -.sidebar-wrapper .metismenu a:focus, - -.sidebar-wrapper .metismenu a:hover { - - color: #008cff; - - text-decoration: none; - - background-color: rgb(0 140 255 / 5%); - -} - - - -.menu-label { - - padding: 20px 15px 5px 5px; - - color: #b0afaf; - - text-transform: uppercase; - - font-size: 12px; - - letter-spacing: .5px - -} - - - -.metismenu .has-arrow:after { - - position: absolute; - - content: ""; - - width: .5em; - - height: .5em; - - border-style: solid; - - border-width: 1.2px 0 0 1.2px; - - border-color: initial; - - right: 15px; - - transform: rotate(-45deg) translateY(-50%); - - transform-origin: top; - - top: 50%; - - transition: all .3s ease-out - -} - - - -@media screen and (min-width:1025px) { - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .sidebar-header .logo-text { - - display: none - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper { - - width: 70px - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .sidebar-header { - - width: 70px - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .sidebar-header .toggle-icon { - - display: none - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .sidebar-header { - - justify-content: center - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .sidebar-header { - - width: 70px - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .metismenu a { - - justify-content: center - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .metismenu .menu-title { - - display: none - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .metismenu li ul { - - display: none - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .metismenu li.menu-label { - - display: none - - } - - .wrapper.toggled:not(.sidebar-hovered) .sidebar-wrapper .metismenu .has-arrow:after { - - display: none - - } - - .email-toggle-btn { - - display: none!important - - } - - .chat-toggle-btn { - - display: none!important - - } - -} - - - -.product-show { - - font-size: 18px; - - left: 15px - -} - - - - - -.product-discount { - - width: 2.5rem; - - height: 2.5rem; - - font-size: 14px; - - background-color: #fff; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 50% - -} - - - -.color-indigator-item { - - width: 1.2rem; - - height: 1.2rem; - - background-color: #e6e0e0; - - border-radius: 50%; - - cursor: pointer - -} - - - -.product-grid .card { - - -webkit-transition: all .2s; - - -o-transition: all .2s; - - transition: all .2s - -} - - - -@media (min-width:992px) { - - .product-grid .card:hover { - - margin-top: -.25rem; - - margin-bottom: .25rem; - - -webkit-box-shadow: 0 .5rem 1rem 0 rgba(0, 0, 0, .3); - - box-shadow: 0 .5rem 1rem 0 rgba(0, 0, 0, .3) - - } - -} - - - -.back-to-top { - - display: none; - - width: 40px; - - height: 40px; - - line-height: 40px; - - text-align: center; - - font-size: 26px; - - color: #fff; - - position: fixed; - - border-radius: 10px; - - bottom: 20px; - - right: 12px; - - background-color: #008cff; - - z-index: 5 - -} - - - -.back-to-top:hover { - - color: #fff; - - background-color: #000; - - transition: all .5s - -} - - - -.breadcrumb-title { - - font-size: 20px; - - border-right: 1.5px solid #aaa4a4 - -} - - - -.page-breadcrumb .breadcrumb li.breadcrumb-item { - - font-size: 16px - -} - - - -.page-breadcrumb .breadcrumb-item+.breadcrumb-item::before { - - display: inline-block; - - padding-right: .5rem; - - color: #6c757d; - - font-family: LineIcons; - - content: "\ea5c" - -} - - - -.icon-badge { - - width: 45px; - - height: 45px; - - background: #f2f2f2; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 50% - -} - - - -.widgets-icons { - - width: 50px; - - height: 50px; - - display: flex; - - align-items: center; - - justify-content: center; - - background-color: #ededed; - - font-size: 26px; - - border-radius: 10px - -} - - - -.widgets-icons-2 { - - width: 56px; - - height: 56px; - - display: flex; - - align-items: center; - - justify-content: center; - - background-color: #ededed; - - font-size: 27px; - - border-radius: 10px - -} - - - -#geographic-map { - - width: 100%; - - height: 440px - -} - - - -#geographic-map-2 { - - - - width: 100%; - - - - height: 300px - - - -} - - - -#geographic-map-3 { - - - - width: 100%; - - - - height: 350px - - - -} - - - -.product-img { - - width: 60px; - - height: 60px; - - background-color: #fff; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 10px; - - border: 1px solid #e6e6e6 - -} - - - -.product-img img { - - width: 60px; - - height: 60px; - - padding: 6px - -} - - - -.product-img-2 { - - width: 45px; - - height: 45px; - - background-color: #fff; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 10px; - - border: 1px solid #e6e6e6 - -} - - - -.product-img-2 img { - - width: 45px; - - height: 45px; - - padding: 1px - -} - - - -.border-light-2 { - - border-color: rgb(255 255 255 / 12%)!important; - -} - - - -.product-list { - - position: relative; - - height: 380px - -} - - - -.dashboard-top-countries { - - position: relative; - - height: 360px - -} - - - -.customers-list { - - position: relative; - - height: 450px - -} - - - -.store-metrics { - - position: relative; - - height: 450px; - -} - - - -.product-list-2 { - - position: relative; - - height: 450px; - -} - - - -.product-list .row { - - background-color: #f8f9fa; - - -webkit-transition: all .2s; - - -o-transition: all .2s; - - transition: all .2s - -} - - - -@media (min-width:992px) { - - .product-list .row:hover { - - background-color: #fff; - - margin-top: -.25rem; - - margin-bottom: .25rem; - - -webkit-box-shadow: 0 .5rem 1rem 0 rgba(0, 0, 0, .2); - - box-shadow: 0 .25rem .5rem 0 rgba(0, 0, 0, .2) - - } - -} - - - -.recent-product-img { - - width: 40px; - - height: 40px; - - background-color: #fbfbfb; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 10px; - - border: 1px solid #e6e6e6 - -} - - - -.recent-product-img img { - - width: 40px; - - height: 40px; - - padding: 6px - -} - - - -.theme-icons { - - background-color: #fff - -} - - - -.lead-table .table { - - border-collapse: separate; - - border-spacing: 0 10px - -} - - - -.fm-menu .list-group a { - - font-size: 16px; - - color: #5f5f5f; - - display: flex; - - align-items: center - -} - - - -.fm-menu .list-group a i { - - font-size: 23px - -} - - - -.fm-menu .list-group a:hover { - - background: #008cff; - - color: #fff; - - transition: all .2s ease-out - -} - - - -.fm-file-box { - - font-size: 25px; - - background: #e9ecef; - - width: 44px; - - height: 44px; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: .25rem - -} - - - -.fm-icon-box { - - font-size: 32px; - - background: #fff; - - width: 52px; - - height: 52px; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: .25rem - -} - - - -.user-plus { - - width: 33px; - - height: 33px; - - margin-left: -14px; - - line-height: 33px; - - background: #fff; - - border-radius: 50%; - - text-align: center; - - font-size: 22px; - - cursor: pointer; - - border: 1px dotted #a9b2bb; - - color: #404142 - -} - - - -.user-groups img { - - margin-left: -14px; - - border: 1px solid #e4e4e4; - - padding: 2px; - - cursor: pointer - -} - - - -.contacts-social a { - - font-size: 16px; - - width: 36px; - - height: 36px; - - line-height: 36px; - - background: #fff; - - border: 1px solid #eeecec; - - text-align: center; - - border-radius: 50%; - - color: #2b2a2a - -} - - - -.customers-contacts a { - - font-size: 16px; - - width: 34px; - - height: 34px; - - display: flex; - - align-items: center; - - justify-content: center; - - background: #fff; - - border: 1px solid #eeecec; - - text-align: center; - - border-radius: 50%; - - color: #2b2a2a - -} - - - -.order-actions a { - - font-size: 18px; - - width: 34px; - - height: 34px; - - display: flex; - - align-items: center; - - justify-content: center; - - background: #f1f1f1; - - border: 1px solid #eeecec; - - text-align: center; - - border-radius: 20%; - - color: #2b2a2a - -} - - - - - -.auth-cover-left { - - display: flex; - - background-color: #f4f4f4; - - min-height: 100vh; - - - -} - - - -.auth-cover-right { - - display: flex; - - background-color: #ffffff; - - min-height: 100vh; - -} - - - -.auth-img-cover-login { - - -webkit-transform: scaleX(-1); - - transform: scaleX(-1); - -} - - - - - - - -.error { - - color: #dc3545; - -} - - - -form select.error, - -form textarea.error, - -form input.error, - -form input.error:focus, - -form textarea.error:focus, - -form select.error:focus { - - border-color: #ea5455 !important; - -} - - - -.customers-list .customers-list-item { - - -webkit-transition: all .2s; - - -o-transition: all .2s; - - transition: all .2s - -} - - - -@media (min-width:992px) { - - .customers-list .customers-list-item:hover { - - background-color: #f8f9fa; - - border-radius: 10px; - - margin-top: -.25rem; - - margin-bottom: .25rem; - - -webkit-box-shadow: 0 .5rem 1rem 0 rgba(0, 0, 0, .2); - - box-shadow: 0 .25rem .5rem 0 rgba(0, 0, 0, .2) - - } - -} - - - -.right-15 { - - right: 15px!important - -} - - - -.font-13 { - - font-size: 13px - -} - - - -.font-14 { - - font-size: 14px - -} - - - -.font-18 { - - font-size: 18px - -} - - - -.font-20 { - - font-size: 20px - -} - - - -.font-22 { - - font-size: 22px - -} - - - -.font-24 { - - font-size: 24px - -} - - - -.font-30 { - - font-size: 30px - -} - - - -.font-35 { - - font-size: 35px - -} - - - -.font-50 { - - font-size: 50px - -} - - - -.font-60 { - - font-size: 60px - -} - - - -.radius-30 { - - border-radius: 30px - -} - - - -.radius-10 { - - border-radius: 10px - -} - - - -.radius-15 { - - border-radius: 15px - -} - - - -.row.row-group>div { - - border-right: 1px solid rgba(0, 0, 0, 0.12); - -} - - - -.row.row-group>div:last-child { - - border-right: none; - -} - - - -.cursor-pointer { - - - - cursor: pointer - - - -} - - - -.dash-wrapper { - - margin: -1.5rem -1.5rem -3.5rem -1.5rem; - - padding: 1.5rem 1.5rem 3.5rem 1.5rem; - -} - - - -.dash-array-chart-box { - - width: 105px; - - height: 90px; - - position: relative; - - top: -15px; - - right: 30px; - -} - - - -.chart-container-0{ - - position:relative; - - height:320px; - -} - - - -.chart-container-1{ - - position:relative; - - height:260px; - -} - - - -.chart-container-2{ - - position:relative; - - height:220px; - -} - - - -.chart-container-3{ - - position:relative; - - height:188px; - -} - - - -.chart-container-4{ - - position:relative; - - height:162px; - -} - - - -.chart-container-5{ - - position:relative; - - height:110px; - -} - - - -.chart-container-6{ - - position:relative; - - height:205px; - -} - - - -.chart-container-7{ - - position:relative; - - height:60px; - -} - - .chart-container-8 { - - position: relative; - - height: 260px; - -} - -.chart-container-9 { - - position: relative; - - height: 280px; - -} - -.chart-container-10 { - - position: relative; - - height: 300px; - - top: 20px; - -} - -.chart-container-11 { - - position: relative; - - height: 280px; - -} - - - -.chart-container-12 { - - position: relative; - - height: 160px; - -} - -.chart-container-13 { - - position: relative; - - height: 240px; - -} - -.chart-container-14{ - - position:relative; - - height:40px; - -} - - - -.w_chart { - - position: relative; - - display: inline-block; - - width: 65px !important; - - height: 65px !important; - - text-align: center; - - color: #32393f; - - } - - - - - - .w_chart canvas { - - position: absolute; - - top: 0; - - left: 0; - - width: 65px !important; - - height: 65px !important; - - } - - .w_percent { - - display: inline-block; - - line-height: 65px !important; - - z-index: 2; - - } - - .w_percent:after { - - content: '%'; - - margin-left: 0.1em; - - font-size: .8em; - - } - - - -.chip { - - display: inline-block; - - height: 32px; - - padding: 0 12px; - - margin-right: 1rem; - - margin-bottom: 1rem; - - font-size: 14px; - - font-weight: 500; - - line-height: 32px; - - color: rgba(0, 0, 0, .7); - - cursor: pointer; - - background-color: #f1f1f1; - - border: 1px solid rgba(0, 0, 0, .15); - - border-radius: 16px; - - -webkit-transition: all .3s linear; - - transition: all .3s linear; - - box-shadow: none - -} - - - -.chip img { - - float: left; - - width: 32px; - - height: 32px; - - margin: 0 8px 0 -12px; - - border-radius: 50% - -} - - - -.chip .closebtn { - - padding-left: 10px; - - font-weight: 700; - - float: right; - - font-size: 16px; - - cursor: pointer - -} - - - -.chip.chip-md { - - height: 42px; - - line-height: 42px; - - border-radius: 21px - -} - - - -.chip.chip-md img { - - height: 42px; - - width: 42px - -} - - - -#invoice { - - padding: 0 - -} - - - -.invoice { - - position: relative; - - background-color: #fff; - - min-height: 680px; - - padding: 15px - -} - - - -.invoice header { - - padding: 10px 0; - - margin-bottom: 20px; - - border-bottom: 1px solid #008cff - -} - - - -.invoice .company-details { - - text-align: right - -} - - - -.invoice .company-details .name { - - margin-top: 0; - - margin-bottom: 0 - -} - - - -.invoice .contacts { - - margin-bottom: 20px - -} - - - -.invoice .invoice-to { - - text-align: left - -} - - - -.invoice .invoice-to .to { - - margin-top: 0; - - margin-bottom: 0 - -} - - - -.invoice .invoice-details { - - text-align: right - -} - - - -.invoice .invoice-details .invoice-id { - - margin-top: 0; - - color: #008cff - -} - - - -.invoice main { - - padding-bottom: 50px - -} - - - -.invoice main .thanks { - - margin-top: -100px; - - font-size: 2em; - - margin-bottom: 50px - -} - - - -.invoice main .notices { - - padding-left: 6px; - - border-left: 6px solid #008cff; - - background: #e7f2ff; - - padding: 10px - -} - - - -.invoice main .notices .notice { - - font-size: 1.2em - -} - - - -.invoice table { - - width: 100%; - - border-collapse: collapse; - - border-spacing: 0; - - margin-bottom: 20px - -} - - - -.invoice table td, - -.invoice table th { - - padding: 15px; - - background: #eee; - - border-bottom: 1px solid #fff - -} - - - -.invoice table th { - - white-space: nowrap; - - font-weight: 400; - - font-size: 16px - -} - - - -.invoice table td h3 { - - margin: 0; - - font-weight: 400; - - color: #008cff; - - font-size: 1.2em - -} - - - -.invoice table .qty, - -.invoice table .total, - -.invoice table .unit { - - text-align: right; - - font-size: 1.2em - -} - - - -.invoice table .no { - - color: #fff; - - font-size: 1.6em; - - background: #008cff - -} - - - -.invoice table .unit { - - background: #ddd - -} - - - -.invoice table .total { - - background: #008cff; - - color: #fff - -} - - - -.invoice table tbody tr:last-child td { - - border: none - -} - - - -.invoice table tfoot td { - - background: 0 0; - - border-bottom: none; - - white-space: nowrap; - - text-align: right; - - padding: 10px 20px; - - font-size: 1.2em; - - border-top: 1px solid #aaa - -} - - - -.invoice table tfoot tr:first-child td { - - border-top: none - -} - - - -.invoice table tfoot tr:last-child td { - - color: #008cff; - - font-size: 1.4em; - - border-top: 1px solid #008cff - -} - - - -.invoice table tfoot tr td:first-child { - - border: none - -} - - - -.invoice footer { - - width: 100%; - - text-align: center; - - color: #777; - - border-top: 1px solid #aaa; - - padding: 8px 0 - -} - - - -@media print { - - .invoice { - - font-size: 11px!important; - - overflow: hidden!important - - } - - .invoice footer { - - position: absolute; - - bottom: 10px; - - page-break-after: always - - } - - .invoice>div:last-child { - - page-break-before: always - - } - -} - - - -.main-row { - - height: 100vh - -} - - - -.main-col { - - max-width: 500px; - - min-height: 300px - -} - - - -.todo-done { - - text-decoration: line-through - -} - - - -.chat-wrapper { - - width: auto; - - height: 600px; - - border-radius: .25rem; - - position: relative; - - background: #fff; - - box-shadow: 0 .1rem .7rem rgba(0, 0, 0, .1) - -} - - - -.chat-sidebar { - - width: 340px; - - height: 100%; - - position: absolute; - - background: #fff; - - left: 0; - - top: 0; - - bottom: 0; - - z-index: 2; - - overflow: hidden; - - border-right: 1px solid rgba(0, 0, 0, .125); - - border-top-left-radius: .25rem; - - border-bottom-left-radius: .25rem - -} - - - -.chat-sidebar-header { - - width: auto; - - height: auto; - - position: relative; - - background: #fff; - - border-bottom: 1px solid rgba(0, 0, 0, .125); - - border-right: 0 solid rgba(0, 0, 0, .125); - - border-top-left-radius: .25rem; - - padding: 15px - -} - - - -.chat-sidebar-content { - - padding: 0 - -} - - - -.chat-user-online { - - position: relative - -} - - - -.chat-sidebar-header .chat-user-online:before { - - content: ''; - - position: absolute; - - bottom: 7px; - - left: 40px; - - width: 8px; - - height: 8px; - - border-radius: 50%; - - box-shadow: 0 0 0 2px #fff; - - background: #16e15e - -} - - - -.chat-list .chat-user-online:before { - - content: ''; - - position: absolute; - - bottom: 7px; - - left: 36px; - - width: 8px; - - height: 8px; - - border-radius: 50%; - - box-shadow: 0 0 0 2px #fff; - - background: #16e15e - -} - - - -.chat-content { - - margin-left: 340px; - - padding: 85px 15px 15px 15px - -} - - - -.chat-header { - - position: absolute; - - height: 70px; - - left: 340px; - - right: 0; - - top: 0; - - padding: 15px; - - background: #fff; - - border-bottom: 1px solid rgba(0, 0, 0, .125); - - border-top-right-radius: .25rem; - - z-index: 1 - -} - - - -.chat-footer { - - position: absolute; - - height: 70px; - - left: 340px; - - right: 0; - - bottom: 0; - - padding: 15px; - - background: #f8f9fa; - - border-top: 1px solid rgba(0, 0, 0, .125); - - border-bottom-right-radius: .25rem - -} - - - -.chat-footer-menu a { - - display: inline-block; - - width: 40px; - - height: 40px; - - line-height: 40px; - - font-size: 18px; - - color: #6c757d; - - text-align: center; - - border-radius: 50%; - - margin: 3px; - - background-color: #fff; - - border: 1px solid rgb(0 0 0 / 15%) - -} - - - -.chat-tab-menu li a.nav-link { - - padding: .3rem .2rem; - - line-height: 1.2; - - color: #4a4b4c - -} - - - -.chat-tab-menu .nav-pills .nav-link.active, - -.chat-tab-menu .nav-pills .show>.nav-link { - - color: #008cff; - - background-color: rgb(0 123 255 / 0%) - -} - - - -.chat-title { - - font-size: 14px; - - color: #272b2f - -} - - - -.chat-msg { - - font-size: 13px; - - color: #6c757d - -} - - - -.chat-time { - - font-size: 13px; - - color: #6c757d - -} - - - -.chat-list { - - position: relative; - - height: 300px - -} - - - -.chat-list .list-group-item { - - border: 1px solid rgb(0 0 0 / 0%); - - background-color: transparent - -} - - - -.chat-list .list-group-item:hover { - - border: 1px solid rgb(0 0 0 / 0%); - - background-color: rgb(13 110 253 / .12) - -} - - - -.chat-list .list-group-item.active { - - background-color: rgb(13 110 253 / .12) - -} - - - -.chart-online { - - color: #16e15e - -} - - - -.chat-top-header-menu a { - - display: inline-block; - - width: 40px; - - height: 40px; - - line-height: 40px; - - font-size: 18px; - - color: #6c757d; - - text-align: center; - - border-radius: 50%; - - margin: 3px; - - background-color: #fff; - - border: 1px solid rgb(0 0 0 / 15%) - -} - - - -.chat-content { - - position: relative; - - width: auto; - - height: 520px - -} - - - -.chat-content-leftside .chat-left-msg { - - width: fit-content; - - background-color: #eff2f5; - - padding: .8rem; - - border-radius: 12px; - - max-width: 480px; - - text-align: left; - - border-top-left-radius: 0 - -} - - - -.chat-content-rightside .chat-right-msg { - - width: fit-content; - - background-color: #dcedff; - - padding: .8rem; - - border-radius: 12px; - - float: right; - - max-width: 480px; - - text-align: left; - - border-bottom-right-radius: 0 - -} - - - -.chat-toggle-btn { - - width: 40px; - - height: 40px; - - line-height: 40px; - - margin-right: 15px; - - text-align: center; - - font-size: 24px; - - color: #6c757d; - - border-radius: 50%; - - cursor: pointer; - - background-color: #fff; - - border: 1px solid rgb(0 0 0 / 15%) - -} - - - -.email-wrapper { - - width: auto; - - height: 600px; - - overflow: hidden; - - border-radius: .25rem; - - position: relative; - - background: #fff; - - box-shadow: 0 .1rem .7rem rgba(0, 0, 0, .1) - -} - - - -.email-sidebar { - - width: 250px; - - height: 100%; - - position: absolute; - - background: #fff; - - left: 0; - - top: 0; - - bottom: 0; - - z-index: 2; - - overflow: hidden; - - border-right: 1px solid rgba(0, 0, 0, .125); - - border-top-left-radius: .25rem; - - border-bottom-left-radius: .25rem - -} - - - -.email-sidebar-header { - - width: auto; - - height: auto; - - position: relative; - - background: #fff; - - border-bottom: 1px solid rgba(0, 0, 0, .125); - - border-right: 0 solid rgba(0, 0, 0, .125); - - border-top-left-radius: .25rem; - - padding: 15px - -} - - - -.email-navigation { - - position: relative; - - padding: 0; - - height: 345px; - - border-bottom: 1px solid rgba(0, 0, 0, .125) - -} - - - -.email-header { - - position: absolute; - - height: 70px; - - left: 250px; - - right: 0; - - top: 0; - - padding: 15px; - - background: #fff; - - border-bottom: 1px solid rgba(0, 0, 0, .125); - - border-top-right-radius: .25rem; - - z-index: 1 - -} - - - -.email-content { - - position: absolute; - - left: 0; - - right: 0; - - width: auto; - - top: 70px; - - height: auto; - - margin-left: 250px; - - padding: 0; - - background: #fff; - - border-top-left-radius: .25rem; - - border-top-right-radius: .25rem - -} - - - -.email-navigation a.list-group-item { - - color: #404142; - - padding: .35rem 1.25rem; - - background-color: #fff; - - border-bottom: 1px solid rgb(0 0 0 / 0%); - - transition: all .3s ease-out - -} - - - -.email-navigation a.list-group-item:hover { - - background-color: rgb(13 110 253 / .12) - -} - - - -.email-navigation a.list-group-item.active { - - color: #0b5ed7; - - font-weight: 600; - - background-color: rgb(13 110 253 / .12) - -} - - - -.email-meeting { - - position: absolute; - - left: 0; - - right: 0; - - bottom: 0 - -} - - - -.email-meeting a.list-group-item { - - color: #404142; - - padding: .35rem 1.25rem; - - background-color: #fff; - - border-bottom: 1px solid rgb(0 0 0 / 0%) - -} - - - -.email-meeting a.list-group-item:hover { - - background-color: rgb(0 123 255 / 15%); - - transition: all .3s ease-out - -} - - - -.email-hangout .chat-user-online:before { - - content: ''; - - position: absolute; - - bottom: 8px; - - left: 45px; - - width: 8px; - - height: 8px; - - border-radius: 50%; - - box-shadow: 0 0 0 2px #fff; - - background: #16e15e - -} - - - -.email-toggle-btn { - - width: auto; - - height: auto; - - margin-right: 10px; - - text-align: center; - - font-size: 24px; - - color: #404142; - - border-radius: 0; - - cursor: pointer; - - background-color: #fff; - - border: 0 solid rgb(0 0 0 / 15%) - -} - - - -.email-actions { - - width: 230px - -} - - - -.email-time { - - font-size: 13px; - - color: #6c757d - -} - - - -.email-list div.email-message { - - background: #fff; - - border-bottom: 1px solid rgb(0 0 0 / 8%); - - color: #383a3c - -} - - - -.email-list div.email-message:hover { - - transition: all .2s ease-out; - - background-color: #eceef1 - -} - - - -.email-list { - - position: relative; - - height: 530px - -} - - - -.email-star { - - color: #6c757d - -} - - - -.email-read-box { - - position: relative; - - height: 530px - -} - - - -.compose-mail-popup { - - width: 42%; - - position: fixed; - - bottom: -30px; - - right: 30px; - - z-index: 15; - - display: none - -} - - - -.compose-mail-toggled { - - display: block - -} - - - -.compose-mail-title { - - font-size: 16px - -} - - - -.compose-mail-close { - - width: 25px; - - height: 25px; - - line-height: 25px; - - text-align: center; - - font-size: 14px; - - border-radius: 2px; - - background-color: rgb(255 255 255 / 0%) - -} - - - -.compose-mail-close:hover { - - background-color: rgb(255 255 255 / 20%) - -} - - - -.nav-primary.nav-tabs .nav-link.active { - - color: #008cff; - - border-color: #008cff #008cff #fff - -} - - - -.nav-danger.nav-tabs .nav-link.active { - - color: #f41127; - - border-color: #f41127 #f41127 #fff - -} - - - -.nav-success.nav-tabs .nav-link.active { - - color: #17a00e; - - border-color: #17a00e #17a00e #fff - -} - - - -.nav-warning.nav-tabs .nav-link.active { - - color: #ffc107; - - border-color: #ffc107 #ffc107 #fff - -} - - - -.nav-pills-danger.nav-pills .nav-link.active { - - color: #fff; - - background-color: #f41127 - -} - - - -.nav-pills-success.nav-pills .nav-link.active { - - color: #fff; - - background-color: #17a00e - -} - - - -.nav-pills-warning.nav-pills .nav-link.active { - - color: #000; - - background-color: #ffc107 - -} - - - -.nav-search input.form-control { - - background-color: rgb(255 255 255 / 20%); - - border: 1px solid rgb(255 255 255 / 45%); - - color: #fff - -} - - - -.nav-search button[type=submit] { - - background-color: rgb(255 255 255 / 20%); - - border: 1px solid rgb(255 255 255 / 32%); - - color: #fff - -} - - - -.nav-search input.form-control::placeholder { - - opacity: .5!important; - - color: #fff!important - -} - - - -.nav-search input.form-control::-ms-input-placeholder { - - color: #fff!important - -} - - - -.round-pagination.pagination .page-item:first-child .page-link { - - border-top-left-radius: 30px; - - border-bottom-left-radius: 30px - -} - - - -.round-pagination.pagination .page-item:last-child .page-link { - - border-top-right-radius: 30px; - - border-bottom-right-radius: 30px - -} - - - -.bg-body { - - background-color: #f4f4f4!important; - -} - - - -.bg-light-primary { - - background-color: rgb(13 110 253 / .11)!important - -} - - - -.bg-light-success { - - background-color: rgb(23 160 14 / .11)!important - -} - - - -.bg-light-danger { - - background-color: rgb(244 17 39 / .11)!important - -} - - - -.bg-light-warning { - - background-color: rgb(255 193 7 / .11)!important - -} - - - -.bg-light-info { - - background-color: rgb(13 202 240 / 18%)!important - -} - - - -.bg-light-transparent { - - background-color: rgb(0 0 0 / 15%)!important - -} - - - -.bg-gradient-deepblue { - - background: #6a11cb; - - background: -webkit-linear-gradient( - - 45deg - - , #6a11cb, #2575fc)!important; - - background: linear-gradient( - - 45deg - - , #6a11cb , #2575fc)!important; - -} - - - - - -.bg-gradient-orange { - - background: #fc4a1a; - - background: -webkit-linear-gradient( - - 45deg - - , #fc4a1a, #f7b733)!important; - - background: linear-gradient( - - 45deg - - , #fc4a1a, #f7b733)!important; - -} - - - -.bg-gradient-ohhappiness { - - background: #00b09b; - - background: -webkit-linear-gradient( - - 45deg - - , #00b09b, #96c93d)!important; - - background: linear-gradient( - - 45deg - - , #00b09b, #96c93d)!important; - -} - - - - - -.bg-gradient-ibiza { - - background: #ee0979; - - background: -webkit-linear-gradient( - - 45deg - - , #ee0979, #ff6a00)!important; - - background: linear-gradient( - - 45deg - - , #ee0979, #ff6a00)!important; - -} - - - -.bg-gradient-scooter { - - background: #17ead9; - - background: -webkit-linear-gradient( - -45deg - -, #17ead9, #6078ea)!important; - - background: linear-gradient( - -45deg - -, #17ead9, #6078ea)!important; - -} - - - - - -.bg-gradient-bloody { - - background: #f54ea2; - - background: -webkit-linear-gradient( - -45deg - -, #f54ea2, #ff7676)!important; - - background: linear-gradient( - -45deg - -, #f54ea2, #ff7676)!important; - -} - - - - - -.bg-gradient-quepal { - - background: #42e695; - - background: -webkit-linear-gradient( - -45deg - -, #42e695, #3bb2b8)!important; - - background: linear-gradient( - -45deg - -, #42e695, #3bb2b8)!important; - -} - - - - - -.bg-gradient-blooker { - - background: #ffdf40; - - background: -webkit-linear-gradient( - -45deg - -, #ffdf40, #ff8359)!important; - - background: linear-gradient( - -45deg - -, #ffdf40, #ff8359)!important; - -} - - - - - -.bg-gradient-cosmic { - - background: linear-gradient(to right, #8e2de2, #4a00e0)!important - -} - - - -.bg-gradient-burning { - - background: linear-gradient(to right, #ff416c, #ff4b2b)!important - -} - - - -.bg-gradient-lush { - - background: linear-gradient(to right, #56ab2f, #a8e063)!important - -} - - - -.bg-gradient-kyoto { - - background: linear-gradient(to right, #f7971e, #ffd200)!important - -} - - - -.bg-gradient-blues { - - background: linear-gradient(to right, #56ccf2, #2f80ed)!important - -} - - - -.bg-gradient-moonlit { - - background: linear-gradient(to right, #0f2027, #203a43, #2c5364)!important - -} - - - -.split-bg-primary { - - background-color: #0c62e0; - - border-color: #0c62e0 - -} - - - -.split-bg-secondary { - - background-color: #515a62; - - border-color: #515a62 - -} - - - -.split-bg-success { - - background-color: #128e0a; - - border-color: #128e0a - -} - - - -.split-bg-info { - - background-color: #0bb2d3; - - border-color: #0bb2d3 - -} - - - -.split-bg-warning { - - background-color: #e4ad07; - - border-color: #e4ad07 - -} - - - -.split-bg-danger { - - background-color: #e20e22; - - border-color: #e20e22 - -} - - - -.bg-facebook { - - background-color: #3b5998!important - -} - - - -.bg-twitter { - - background-color: #55acee!important - -} - - - -.bg-google { - - background-color: #e52d27!important - -} - - - -.bg-linkedin { - - background-color: #0976b4!important - -} - - - -/* Text Color */ - -.text-option{ - - color: #32393f!important - - } - - - -.text-facebook{ - - color: #3b5998!important - - } - - - - .text-twitter{ - - color: #55acee!important - - } - - - - .text-youtube{ - - color: #e52d27!important - - } - - - -.text-sky-light { - - color: #b4d2ff; - -} - - - - - - - -.section-authentication-signin { - - height: 100vh - -} - - - -.authentication-forgot { - - height: 100vh; - - padding: 0 1rem - -} - - - -.authentication-reset-password { - - height: 100vh; - - padding: 0 1rem - -} - - - -.authentication-lock-screen { - - height: 100vh; - - padding: 0 1rem - -} - - - -.error-404 { - - height: 100vh; - - padding: 0 1rem - -} - - - -.error-social a { - - display: inline-block; - - width: 40px; - - height: 40px; - - line-height: 40px; - - font-size: 18px; - - color: #fff; - - text-align: center; - - border-radius: 50%; - - margin: 5px; - - box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075)!important - -} - - - -.bg-login { - - background-image: url(../images/login-images/bg-login-img.jpg); - - background-size: cover; - - background-position: center; - - background-repeat: no-repeat; - - background-attachment: fixed - -} - - - -.bg-forgot { - - background-image: url(../images/login-images/bg-forgot-password.jpg); - - background-size: cover; - - background-position: center; - - background-repeat: no-repeat; - - background-attachment: fixed - -} - - - -.bg-lock-screen { - - background-image: url(../images/login-images/bg-lock-screen.jpg); - - background-size: cover; - - background-position: center; - - background-repeat: no-repeat; - - background-attachment: fixed - -} - - - -.login-separater span { - - position: relative; - - top: 26px; - - margin-top: -10px; - - background-color: #fff; - - padding: 5px; - - font-size: 12px; - - color: #cbcbcb; - - z-index: 1 - -} - - - -.btn i { - - vertical-align: middle; - - font-size: 1.3rem; - - margin-top: -1em; - - margin-bottom: -1em; - - margin-right: 5px - -} - - - - - -.btn-inverse-primary { - - color: #008cff; - - background-color: rgba(0, 140, 255, 0.18); - - border-color: rgb(209, 234, 255); - -} - - - -.btn-inverse-primary:hover { - - color: #008cff; - - background-color: rgba(0, 140, 255, 0.18); - - border-color: rgba(0, 140, 255, 0.18); - -} - - - -.btn-inverse-primary:focus { - - color: #008cff; - - background-color: rgba(0, 140, 255, 0.18); - - border-color: rgba(0, 140, 255, 0.18); - - box-shadow: 0 0 0 .25rem rgba(49, 132, 253, .3) - -} - - - - - -.btn-inverse-secondary { - - color: #75808a; - - background-color: rgba(117, 128, 138, 0.18); - - border-color: rgb(230, 232, 234); - -} - - - -.btn-inverse-secondary:hover { - - color: #75808a; - - background-color: rgba(117, 128, 138, 0.18); - - border-color: rgba(117, 128, 138, 0.18); - -} - - - -.btn-inverse-success { - - color: #1aad24; - - background-color: rgba(21, 202, 32, 0.18); - - border-color: rgb(212, 246, 214); - -} - - - -.btn-inverse-success:hover { - - color: #1aad24; - - background-color: rgba(21, 202, 32, 0.18); - - border-color: rgba(21, 202, 32, 0.18); - -} - -.btn-inverse-success:focus { - - color: #1aad24; - - background-color: rgba(21, 202, 32, 0.18); - - border-color: rgba(21, 202, 32, 0.18); - - box-shadow: 0 0 0 .25rem rgb(23 160 14 / 32%) - -} - - - -.btn-inverse-danger { - - color: #fd3550; - - background-color: rgba(253, 53, 80, 0.18); - - border-color: rgb(255, 218, 223); - -} - - - -.btn-inverse-danger:hover { - - color: #fd3550; - - background-color: rgba(253, 53, 80, 0.18); - - border-color: rgba(253, 53, 80, 0.18); - -} - -.btn-inverse-danger:focus { - - color: #fd3550; - - background-color: rgba(253, 53, 80, 0.18); - - border-color: rgba(253, 53, 80, 0.18); - - box-shadow: 0 0 0 .25rem rgba(225, 83, 97, .3) - -} - - - - - -.btn-inverse-warning { - - color: #ff9700; - - background-color: rgba(255, 151, 0, 0.18); - - border-color: rgb(255, 236, 209); - -} - - - -.btn-inverse-warning:hover { - - color: #ff9700; - - background-color: rgba(255, 151, 0, 0.18); - - border-color: rgba(255, 151, 0, 0.18); - -} - - - -.btn-inverse-warning:focus { - - color: #ff9700; - - background-color: rgba(255, 151, 0, 0.18); - - border-color: rgba(255, 151, 0, 0.18); - - box-shadow: 0 0 0 .25rem rgba(217, 164, 6, .3) - -} - - - -.btn-inverse-info { - - color: #0dceec; - - background-color: rgba(13, 206, 236, 0.18); - - border-color: rgb(211, 246, 252); - -} - - - -.btn-inverse-info:hover { - - color: #0dceec; - - background-color: rgba(13, 206, 236, 0.18); - - border-color: rgba(13, 206, 236, 0.18); - -} - - - -.btn-inverse-light { - - color: #a7aaaa; - - background-color: rgba(233, 234, 234, 0.2); - - border-color: rgb(251, 251, 251); - -} - - - -.btn-inverse-light:hover { - - color: #a7aaaa; - - background-color: rgba(233, 234, 234, 0.2); - - border-color: rgba(233, 234, 234, 0.2); - -} - - - -.btn-inverse-dark { - - color: #223035; - - background-color: rgba(34, 48, 53, 0.2); - - border-color: #d7d9da; - -} - - - -.btn-inverse-dark:hover { - - color: #223035; - - background-color: rgba(34, 48, 53, 0.2); - - border-color: rgba(34, 48, 53, 0.2); - -} - - - -.btn-facebook, - -.btn-facebook:hover { - - box-shadow: 0 2px 2px 0 rgba(59, 89, 152, .14), 0 3px 1px -2px rgba(59, 89, 152, .2), 0 1px 5px 0 rgba(59, 89, 152, .12); - - background-color: #3b5998; - - border-color: #3b5998; - - color: #fff - -} - - - - - -.btn-white { - - background-color: #fff; - - border-color: #e7eaf3 - -} - - - -.chart-container1 { - - position: relative; - - height: 380px - -} - - - -.gmaps, - -.gmaps-panaroma { - - height: 400px; - - background: #eee; - - border-radius: 3px - -} - - - -.pricing-table .card { - - -webkit-transition: all .2s; - - -o-transition: all .2s; - - transition: all .2s; - - -webkit-border-radius: 15px; - - border-radius: 15px - -} - - - -.pricing-table .card .card-header { - - border-top-left-radius: 15px; - - border-top-right-radius: 15px - -} - - - -@media (min-width:992px) { - - .pricing-table .card:hover { - - margin-top: -.25rem; - - margin-bottom: .25rem; - - -webkit-box-shadow: 0 .5rem 1rem 0 rgba(0, 0, 0, .3); - - box-shadow: 0 .5rem 1rem 0 rgba(0, 0, 0, .3) - - } - -} - - - -.pricing-table .card .card-title { - - font-size: 1rem; - - letter-spacing: .2rem; - - font-weight: 500 - -} - - - -.pricing-table .card .card-price { - - font-size: 2.7rem - -} - - - -.pricing-table .card .card-price .term { - - font-size: .875rem - -} - - - -.pricing-table .card ul li.list-group-item { - - border-bottom: 1px solid rgb(0 0 0 / 0%); - - color: #3b3b3b; - - font-size: 16px - -} - - - -input::placeholder { - - color: #000!important; - - opacity: .3!important - -} - - - -.form-floating>.form-control::-moz-placeholder { - - color: transparent!important - -} - -.form-floating>.form-control::placeholder { - - color: transparent!important - -} - - - -.card-group { - - margin-bottom: 1.5rem - -} - - - - - -.input-icon .form-control { - - padding-left: 2.5rem; - -} - - - -.input-icon span { - - font-size: 16px; - - left: 15px; - -} - - - - - -.topbar .navbar .navbar-nav .nav-item { - - display: flex; - - align-items: center; - - justify-content: center; - - width: auto; - - height: 60px; - -} - - - -.topbar .navbar .navbar-nav .nav-link { - - color: #212529; - - font-size: 22px; - - border-radius: 50%; - - display: flex; - - align-items: center; - - justify-content: center; - - width: 42px; - - height: 42px; - - transition: 0.3s cubic-bezier(0.075, 0.82, 0.165, 1); - -} - - - - - -.topbar .navbar .navbar-nav .nav-link:hover, - -.topbar .navbar .navbar-nav .nav-link:focus { - - background-color: #f2f9ff; - - color: #008cff; - -} - - - -.dropdown-toggle-nocaret:after { - - display: none - -} - - - -.alert-count { - - position: absolute; - - top: 2px; - - left: 22px; - - width: 18px; - - height: 18px; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 50%; - - font-size: 12px; - - font-weight: 500; - - color: #fff; - - background: #f62718 - -} - - - -.user-img { - - width: 42px; - - height: 42px; - - border-radius: 50%; - - border: 0 solid #e5e5e5; - - padding: 0; - -} - - - -.user-info .user-name { - - font-size: 15px; - - font-weight: 500; - - color: #413c3c - -} - - - -.user-info .designattion { - - font-size: 13px; - - color: #747474 - -} - - - -.user-box { - - display: flex; - - align-items: center; - - height: 60px; - - border-left: 1px solid #f0f0f0; - - border-right: 1px solid #f0f0f0; - -} - - - - - - - - - -.topbar .navbar .dropdown-app .dropdown-menu { - - width: 270px; - - border: 1px solid #dee2e6; - - padding: 0.5rem; - - border-radius: 16px; - - box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 15%); - -} - - - -.topbar .navbar .dropdown-app .dropdown-menu .app-container { - - position: relative; - - height: 370px; - -} - - - - - -.topbar .navbar .dropdown-app .dropdown-menu .app-box { - - padding: .5rem; - - border-radius: 1rem; - - transition: .2s; - -} - - - -.topbar .navbar .dropdown-app .dropdown-menu .app-box:hover { - - background-color: #edf0f3; - -} - - - -.topbar .navbar .dropdown-app .dropdown-menu .app-name { - - color: #212529; - - font-size: .64rem; - - text-decoration: none; - - font-weight: 500; - -} - - - - - - - - - - - - - - - - - - - -.dropdown-large { - - position: relative - -} - - - -.dropdown-large .dropdown-menu { - - width: 360px; - - border: 0; - - padding: 0 0; - - border-radius: 10px; - - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) - -} - - - -.topbar .navbar .dropdown-large .dropdown-menu::after { - - content: ''; - - width: 13px; - - height: 13px; - - background: #fff; - - position: absolute; - - top: -6px; - - right: 16px; - - transform: rotate(45deg); - - border-top: 1px solid #ddd; - - border-left: 1px solid #ddd - -} - - - -.topbar .navbar .dropdown-menu::after { - - content: ''; - - width: 13px; - - height: 13px; - - background: #ffff; - - position: absolute; - - top: -6px; - - right: 16px; - - transform: rotate(45deg); - - border-top: 1px solid #ddd; - - border-left: 1px solid #ddd - -} - - - -.dropdown-large .msg-header { - - padding: .8rem 1rem; - - border-bottom: 1px solid #ededed; - - background-clip: border-box; - - background-color: #ffffff; - - text-align: left; - - display: flex; - - align-items: center; - - justify-content: space-between; - - border-top-left-radius: 10px; - - border-top-right-radius: 10px - -} - - - -.dropdown-large .msg-header-badge { - - background-color: rgb(0 140 255 / 12%); - - color: #008cff; - - padding: 2px 8px; - - margin-bottom: 0; - - border-radius: 4px; - -} - - - -.dropdown-large .msg-header .msg-header-title { - - font-size: 16px; - - color: #1c1b1b; - - margin-bottom: 0; - - font-weight: 500 - -} - - - -.dropdown-large .msg-header .msg-header-clear { - - font-size: 13px; - - color: #585858; - - margin-bottom: 0 - -} - - - -.dropdown-large .msg-footer { - - padding: .8rem 1rem; - - color: #1c1b1b; - - border-top: 1px solid #ededed; - - background-clip: border-box; - - background: 0 0; - - font-size: 14px; - - font-weight: 500; - - border-bottom-left-radius: .25rem; - - border-bottom-right-radius: .25rem - -} - - - -.dropdown-large .user-online { - - position: relative - -} - - - -.dropdown-large .msg-name { - - font-size: 14px; - - margin-bottom: 0; - - color: #212529; - -} - - - -.dropdown-large .msg-info { - - font-size: 13px; - - margin-bottom: 0; - - color: #818189; - -} - - - -.dropdown-large .msg-avatar { - - width: 45px; - - height: 45px; - - border-radius: 50%; - - margin-right: 15px - -} - - - -.dropdown-large .msg-time { - - font-size: 12px; - - margin-bottom: 0; - - color: #818189 - -} - - - -.dropdown-large .user-online:after { - - content: ''; - - position: absolute; - - bottom: 1px; - - right: 17px; - - width: 8px; - - height: 8px; - - border-radius: 50%; - - box-shadow: 0 0 0 2px #fff; - - background: #16e15e - -} - - - -.dropdown-large .dropdown-menu .dropdown-item { - - padding: .5rem 1.3rem; - - border-bottom: 1px solid #ededed - -} - - - -.header-message-list { - - position: relative; - - height: 360px - -} - - - -.header-notifications-list { - - position: relative; - - height: 360px - -} - - - -.dropdown-large .notify { - - width: 45px; - - height: 45px; - - font-size: 20px; - - text-align: center; - - border-radius: 50%; - - background-color: #f1f1f1; - - margin-right: 15px; - - text-transform: uppercase; - - display: flex; - - align-items: center; - - justify-content: center; - -} - - - - - -.dropdown-large .cart-product-title { - - color: #140e22; - - font-size: 14px; - - margin-bottom: 0px; - -} - - - -.dropdown-large .cart-product-price { - - color: #818189; - - font-size: 14px; - - margin-bottom: 0; - -} - - - -.dropdown-large .cart-product-cancel { - - right: -7px; - - top: -5px; - - font-size: 16px; - - background-color: #fff; - - border: 1px solid #eee; - - width: 1.4rem; - - height: 1.4rem; - - display: flex; - - align-items: center; - - justify-content: center; - - border-radius: 50%; - -} - - - -.dropdown-large .cart-product { - - width: 50px; - - height: 50px; - - display: flex; - - align-items: center; - - border-radius: 0px; - - border: 1px solid rgb(231 231 231); - - padding: 4px; - - background-color: rgb(255 255 255); - -} - - - -.dropdown-large .cart-product img { - - width: 100%; - -} - - - - - -.user-box .dropdown-menu i { - - vertical-align: middle; - - margin-right: 10px - -} - - - -.dropdown-menu { - - -webkit-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15); - - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15); - - border: 0 solid #e9ecef; - - border-radius: 10px; - - font-size: 14px - -} - - - -.topbar .navbar .dropdown-menu { - - -webkit-animation: .6s cubic-bezier(.25, .8, .25, 1) 0s normal forwards 1 animdropdown; - - animation: .6s cubic-bezier(.25, .8, .25, 1) 0s normal forwards 1 animdropdown - -} - - - -@-webkit-keyframes animdropdown { - - from { - - -webkit-transform: translate3d(0, 6px, 0); - - transform: translate3d(0, 6px, 0); - - opacity: 0 - - } - - to { - - -webkit-transform: translate3d(0, 0, 0); - - transform: translate3d(0, 0, 0); - - opacity: 1 - - } - -} - - - -@keyframes animdropdown { - - from { - - -webkit-transform: translate3d(0, 6px, 0); - - transform: translate3d(0, 6px, 0); - - opacity: 0 - - } - - to { - - -webkit-transform: translate3d(0, 0, 0); - - transform: translate3d(0, 0, 0); - - opacity: 1 - - } - -} - - - - - -.search-bar { - - width: 100%; - - cursor: pointer; - -} - -.search-bar a.btn, -.search-bar a.btn:focus{ - - color:#7b8288; - - cursor: pointer; - - background-color: #f4f4f4; - - border: 0; - -} - - - - - - -.mobile-toggle-menu { - - display: none; - - font-size: 26px; - - color: #404142; - - cursor: pointer - -} - - - -.switcher-wrapper { - - width: 280px; - - height: 100%; - - position: fixed; - - right: -280px; - - top: 0; - - bottom: 0; - - z-index: 16; - - background: #fff; - - border-left: 0 solid #d2d2d2; - - box-shadow: 0 .3rem .6rem rgba(0, 0, 0, .13); - - transition: all .2s ease-out - -} - - - -.switcher-btn { - - width: 40px; - - height: 40px; - - line-height: 40px; - - font-size: 24px; - - background: #008cff; - - box-shadow: 0 .3rem .6rem rgba(0, 0, 0, .13); - - color: #fff; - - text-align: center; - - border-top-left-radius: 10px; - - border-bottom-left-radius: 10px; - - position: absolute; - - top: 40%; - - right: 100%; - - cursor: pointer - -} - - - -.switcher-wrapper.switcher-toggled { - - right: 0 - -} - - - -.switcher-body { - - padding: 1.25rem - -} - - - -.switcher-body .form-check .form-check-input, - -.switcher-body .form-check .form-check-label { - - cursor: pointer - -} - - - -.header-colors-indigators .indigator { - - width: 45px; - - height: 45px; - - background-color: #f4f2f2; - - border-radius: 10px; - - cursor: pointer - -} - - - -@media screen and (max-width:1280px) { - - .email-header { - - height: auto - - } - - .email-content { - - padding: 100px 0 0 0 - - } - -} - - - -@media only screen and (max-width: 1199px) { - - - - .row.row-group>div { - - border-right: 0; - - border-bottom: 1px solid rgba(0, 0, 0, 0.12); - - } - - - - .row.row-group>div:last-child { - - border-right: none; - - border-bottom: 0; - - } - - - -} - - - -@media screen and (max-width:1024px) { - - .topbar { - - left: 0!important - - } - - - - .mobile-toggle-menu { - - display: block - - } - - .sidebar-wrapper { - - left: -300px; - - box-shadow: none - - } - - .page-wrapper { - - margin-left: 0 - - } - - .page-footer { - - left: 0 - - } - - - - .wrapper.toggled .sidebar-wrapper { - - left: 0 - - } - - .wrapper.toggled .page-wrapper { - - margin-left: 0 - - } - - .wrapper.toggled .overlay { - - position: fixed; - - top: 0; - - right: 0; - - bottom: 0; - - left: 0; - - background: #000; - - opacity: .6; - - z-index: 10; - - display: block; - - cursor: move; - - transition: all .2s ease-out - - } - - .error-404 { - - height: auto; - - padding: 6rem 1rem - - } - - .chat-header { - - border-top-left-radius: .25rem - - } - - .chat-footer { - - border-bottom-left-radius: .25rem - - } - - .chat-sidebar { - - left: -370px - - } - - .chat-content { - - margin-left: 0 - - } - - .chat-header { - - left: 0 - - } - - .chat-footer { - - left: 0 - - } - - .chat-toggled .chat-sidebar { - - left: 0 - - } - - .chat-toggled .overlay { - - position: absolute; - - top: 0; - - right: 0; - - bottom: 0; - - left: 340px; - - background: #000; - - opacity: .5; - - z-index: 11; - - display: block; - - cursor: move; - - transition: all .3s ease-out - - } - - .email-header { - - border-top-left-radius: .25rem - - } - - .email-sidebar { - - left: -280px - - } - - .email-content { - - margin-left: 0 - - } - - .email-header { - - left: 0 - - } - - .email-toggled .email-sidebar { - - left: 0 - - } - - .email-toggled .overlay { - - position: absolute; - - top: 0; - - right: 0; - - bottom: 0; - - left: 250px; - - background: #000; - - opacity: .5; - - z-index: 9; - - display: block; - - cursor: move; - - transition: all .3s ease-out - - } - -} - - - -@media screen and (max-width:991px) { - - .section-authentication-signin { - - height: 100%; - - margin-top: 6rem; - - margin-bottom: 2rem - - } - - .authentication-reset-password { - - height: auto; - - padding: 2rem 1rem - - } - - .authentication-lock-screen { - - height: auto; - - padding: 2rem 1rem - - } - - .compose-mail-popup { - - width: auto; - - position: fixed; - - bottom: -30px; - - right: 0; - - left: 0 - - } - -} - - - -@media screen and (max-width:767px) { - - .user-box .user-info { - - display: none - - } - - .authentication-forgot { - - height: auto; - - padding: 2.5rem 1rem - - } - -} - - - -@media screen and (max-width:620px) { - - .topbar .navbar .dropdown-menu::after { - - display: none - - } - - .topbar .navbar .dropdown { - - position: static!important - - } - - .topbar .navbar .dropdown-menu { - - width: 100%!important - - } - -} - - - -@media screen and (max-width:520px) { - - .chat-footer-menu, - - .chat-top-header-menu { - - display: none - - } - -} \ No newline at end of file diff --git a/assets/css/bootstrap-extended.css b/assets/css/bootstrap-extended.css deleted file mode 100644 index d494755..0000000 --- a/assets/css/bootstrap-extended.css +++ /dev/null @@ -1,492 +0,0 @@ - - -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { - color: #32393f -} - -a { - color: #008cff; -} - -.table-responsive { - white-space: nowrap; -} - -.form-check-input:checked { - background-color: #008cff; - border-color: #008cff -} - -.form-check-input[type=checkbox]:indeterminate { - background-color: #008cff; - border-color: #008cff; -} - -.valid-feedback { - color: #23ac2c -} - - -.form-control.is-valid, .was-validated .form-control:valid { - border-color: #23ac2c; -} - -.form-control.is-valid:focus, .was-validated .form-control:valid:focus { - border-color: #23ac2c; -} - -.form-select.is-valid, .was-validated .form-select:valid { - border-color: #23ac2c; -} - -.form-select.is-valid:focus, .was-validated .form-select:valid:focus { - border-color: #23ac2c; -} -.form-check-input.is-valid, .was-validated .form-check-input:valid { - border-color: #23ac2c -} -.form-check-input.is-valid:checked, .was-validated .form-check-input:valid:checked { - background-color: #23ac2c -} -.form-check-input.is-valid~.form-check-label, .was-validated .form-check-input:valid~.form-check-label { - color: #23ac2c -} - -.invalid-feedback { - color: #fd3550 -} - - -.form-control.is-invalid, .was-validated .form-control:invalid { - border-color: #fd3550; -} -.form-control.is-invalid:focus, .was-validated .form-control:invalid:focus { - border-color: #fd3550; -} -.form-select.is-invalid, .was-validated .form-select:invalid { - border-color: #fd3550; -} -.form-select.is-invalid:focus, .was-validated .form-select:invalid:focus { - border-color: #fd3550; -} -.form-check-input.is-invalid, .was-validated .form-check-input:invalid { - border-color: #fd3550 -} -.form-check-input.is-invalid:checked, .was-validated .form-check-input:invalid:checked { - background-color: #fd3550 -} -.form-check-input.is-invalid~.form-check-label, .was-validated .form-check-input:invalid~.form-check-label { - color: #fd3550 -} - -.input-group-text { - background-color: #ffffff; -} - -.btn { - letter-spacing: .5px; -} - -.btn-primary { - color: #fff; - background-color: #008cff; - border-color: #008cff -} -.btn-primary:hover { - color: #fff; - background-color: #037de2; - border-color: #037de2 -} -.btn-check:focus+.btn-primary, .btn-primary:focus { - color: #fff; - background-color: #037de2; - border-color: #037de2; - box-shadow: 0 0 0 .25rem rgba(49, 132, 253, .5) -} -.btn-check:active+.btn-primary, .btn-check:checked+.btn-primary, .btn-primary.active, .btn-primary:active, .show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #037de2; - border-color: #037de2 -} -.btn-check:active+.btn-primary:focus, .btn-check:checked+.btn-primary:focus, .btn-primary.active:focus, .btn-primary:active:focus, .show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .25rem rgba(49, 132, 253, .5) -} -.btn-primary.disabled, .btn-primary:disabled { - color: #fff; - background-color: #008cff; - border-color: #008cff -} - - -.btn-success { - color: #fff; - background-color: #2375ac; - border-color: #23ac2c -} -.btn-success:hover { - color: #fff; - background-color: #0eb018; - border-color: #0eb018 -} -.btn-check:focus+.btn-success, .btn-success:focus { - color: #fff; - background-color: #0eb018; - border-color: #0eb018; - box-shadow: 0 0 0 .25rem rgb(23 160 14 / 52%) -} -.btn-check:active+.btn-success, .btn-check:checked+.btn-success, .btn-success.active, .btn-success:active, .show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #0eb018; - border-color: #0eb018 -} -.btn-check:active+.btn-success:focus, .btn-check:checked+.btn-success:focus, .btn-success.active:focus, .btn-success:active:focus, .show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 .25rem rgb(23 160 14 / 52%) -} -.btn-success.disabled, .btn-success:disabled { - color: #fff; - background-color: #0f8107; - border-color: #146c43 -} - - -.btn-danger { - color: #fff; - background-color: #fd3550; - border-color: #fd3550 -} -.btn-danger:hover { - color: #fff; - background-color: #d10b1e; - border-color: #b02a37 -} -.btn-check:focus+.btn-danger, .btn-danger:focus { - color: #fff; - background-color: #d10b1e; - border-color: #b02a37; - box-shadow: 0 0 0 .25rem rgba(225, 83, 97, .5) -} -.btn-check:active+.btn-danger, .btn-check:checked+.btn-danger, .btn-danger.active, .btn-danger:active, .show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #b02a37; - border-color: #a52834 -} -.btn-check:active+.btn-danger:focus, .btn-check:checked+.btn-danger:focus, .btn-danger.active:focus, .btn-danger:active:focus, .show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 .25rem rgba(225, 83, 97, .5) -} -.btn-danger.disabled, .btn-danger:disabled { - color: #fff; - background-color: #fd3550; - border-color: #fd3550 -} - - -.btn-outline-primary { - color: #008cff; - border-color: #008cff -} -.btn-outline-primary:hover { - color: #fff; - background-color: #008cff; - border-color: #008cff -} -.btn-check:focus+.btn-outline-primary, .btn-outline-primary:focus { - box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .5) -} -.btn-check:active+.btn-outline-primary, .btn-check:checked+.btn-outline-primary, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show, .btn-outline-primary:active { - color: #fff; - background-color: #008cff; - border-color: #008cff -} -.btn-check:active+.btn-outline-primary:focus, .btn-check:checked+.btn-outline-primary:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus, .btn-outline-primary:active:focus { - box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .5) -} -.btn-outline-primary.disabled, .btn-outline-primary:disabled { - color: #008cff; - background-color: transparent -} - - -.btn-outline-success { - color: #23ac2c; - border-color: #23ac2c -} -.btn-outline-success:hover { - color: #fff; - background-color: #23ac2c; - border-color: #23ac2c -} -.btn-check:focus+.btn-outline-success, .btn-outline-success:focus { - box-shadow: 0 0 0 .25rem rgb(23 160 14 / 52%) -} -.btn-check:active+.btn-outline-success, .btn-check:checked+.btn-outline-success, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show, .btn-outline-success:active { - color: #fff; - background-color: #23ac2c; - border-color: #23ac2c -} -.btn-check:active+.btn-outline-success:focus, .btn-check:checked+.btn-outline-success:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus, .btn-outline-success:active:focus { - box-shadow: 0 0 0 .25rem rgb(23 160 14 / 52%) -} -.btn-outline-success.disabled, .btn-outline-success:disabled { - color: #23ac2c; - background-color: transparent -} - - -.btn-outline-danger { - color: #fd3550; - border-color: #fd3550 -} -.btn-outline-danger:hover { - color: #fff; - background-color: #fd3550; - border-color: #fd3550 -} -.btn-check:focus+.btn-outline-danger, .btn-outline-danger:focus { - box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .5) -} -.btn-check:active+.btn-outline-danger, .btn-check:checked+.btn-outline-danger, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show, .btn-outline-danger:active { - color: #fff; - background-color: #fd3550; - border-color: #fd3550 -} -.btn-check:active+.btn-outline-danger:focus, .btn-check:checked+.btn-outline-danger:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus, .btn-outline-danger:active:focus { - box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .5) -} -.btn-outline-danger.disabled, .btn-outline-danger:disabled { - color: #fd3550; - background-color: transparent -} - -.btn-link { - font-weight: 400; - color: #008cff; - text-decoration: underline -} - -.dropdown-item:focus, .dropdown-item:hover { - color: #1e2125; - background-color: #f8f9fa -} -.dropdown-item.active, .dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #008cff -} -.dropdown-item.disabled, .dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent -} - -.card { - border: 0 solid transparent; - margin-bottom: 1.5rem; - box-shadow: 0 2px 6px 0 rgb(218 218 253 / 65%), 0 2px 6px 0 rgb(206 206 238 / 54%); -} - -.card-header { - background-color: rgba(0, 0, 0, .0); -} - -.progress-bar { - background-color: #008cff; -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #008cff; - border-color: #008cff -} - -.border-primary { - border-color: #008cff!important -} - -.border-success { - border-color: #23ac2c!important -} - -.border-danger { - border-color: #fd3550!important -} - -.border-light-2 { - - border-color: rgb(255 255 255 / 12%)!important; - -} - -.text-primary { - color: #008cff!important -} -.text-secondary { - color: #6c757d!important -} -.text-success { - color: #23ac2c!important -} -.text-info { - color: #0dcaf0!important -} -.text-warning { - color: #ffc107!important -} -.text-danger { - color: #fd3550!important -} -.text-light { - color: #f8f9fa!important -} -.text-dark { - color: #212529!important -} -.text-white { - color: #fff!important -} -.text-body { - color: #212529!important -} -.text-muted { - color: #6c757d!important -} -.text-black-50 { - color: rgba(0, 0, 0, .5)!important -} -.text-white-50 { - color: rgba(255, 255, 255, .5)!important -} - - - -.bg-primary { - background-color: #008cff !important; - } - -.bg-success { - background-color: #23ac2c !important; - } - -.bg-danger { - background-color: #fd3550 !important; - } - - -.form-check-success .form-check-input:checked { - background-color: #23ac2c; - border-color: #23ac2c -} - -.form-check-success .form-check-input[type=checkbox]:indeterminate { - background-color: #23ac2c; - border-color: #23ac2c; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} - - -.form-check-success .form-check-input:focus { - border-color: #23ac2c; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(21, 202, 33, 0.25) -} - - - -.form-check-danger .form-check-input:checked { - background-color: #fd3550; - border-color: #fd3550 -} - -.form-check-danger .form-check-input[type=checkbox]:indeterminate { - background-color: #fd3550; - border-color: #fd3550; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} - - -.form-check-danger .form-check-input:focus { - border-color: #fd3550; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(253, 53, 80, 0.25) -} - - - -.form-check-warning .form-check-input:checked { - background-color: #ffc107; - border-color: #ffc107 -} - -.form-check-warning .form-check-input[type=checkbox]:indeterminate { - background-color: #ffc107; - border-color: #ffc107; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} - - -.form-check-warning .form-check-input:focus { - border-color: #ffc107; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(255, 193, 7, 0.25) -} - - - -.form-check-dark .form-check-input:checked { - background-color: #212529; - border-color: #212529 -} - -.form-check-dark .form-check-input[type=checkbox]:indeterminate { - background-color: #212529; - border-color: #212529; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} - - -.form-check-dark .form-check-input:focus { - border-color: #212529; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(33, 37, 41, 0.25) -} - - - - -.form-check-secondary .form-check-input:checked { - background-color: #6c757d; - border-color: #6c757d -} - -.form-check-secondary .form-check-input[type=checkbox]:indeterminate { - background-color: #6c757d; - border-color: #6c757d; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} - - -.form-check-secondary .form-check-input:focus { - border-color: #6c757d; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(108, 117, 125, 0.25) -} - - - -.form-check-info .form-check-input:checked { - background-color: #0dcaf0; - border-color: #0dcaf0 -} - -.form-check-info .form-check-input[type=checkbox]:indeterminate { - background-color: #0dcaf0; - border-color: #0dcaf0; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} - - -.form-check-info .form-check-input:focus { - border-color: #0dcaf0; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(13, 202, 240, 0.25) -} \ No newline at end of file diff --git a/assets/css/bootstrap.min.css b/assets/css/bootstrap.min.css deleted file mode 100644 index e4d3bd4..0000000 --- a/assets/css/bootstrap.min.css +++ /dev/null @@ -1,10902 +0,0 @@ -@charset "UTF-8"; -/*! - * Bootstrap v5.3.3 (https://getbootstrap.com/) - * Copyright 2011-2024 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ - -:root, [data-bs-theme=light] { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-black: #000; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-gray-100: #f8f9fa; - --bs-gray-200: #e9ecef; - --bs-gray-300: #dee2e6; - --bs-gray-400: #ced4da; - --bs-gray-500: #adb5bd; - --bs-gray-600: #6c757d; - --bs-gray-700: #495057; - --bs-gray-800: #343a40; - --bs-gray-900: #212529; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; - --bs-secondary-rgb: 108, 117, 125; - --bs-success-rgb: 25, 135, 84; - --bs-info-rgb: 13, 202, 240; - --bs-warning-rgb: 255, 193, 7; - --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; - --bs-dark-rgb: 33, 37, 41; - --bs-primary-text-emphasis: #052c65; - --bs-secondary-text-emphasis: #2b2f32; - --bs-success-text-emphasis: #0a3622; - --bs-info-text-emphasis: #055160; - --bs-warning-text-emphasis: #664d03; - --bs-danger-text-emphasis: #58151c; - --bs-light-text-emphasis: #495057; - --bs-dark-text-emphasis: #495057; - --bs-primary-bg-subtle: #cfe2ff; - --bs-secondary-bg-subtle: #e2e3e5; - --bs-success-bg-subtle: #d1e7dd; - --bs-info-bg-subtle: #cff4fc; - --bs-warning-bg-subtle: #fff3cd; - --bs-danger-bg-subtle: #f8d7da; - --bs-light-bg-subtle: #fcfcfd; - --bs-dark-bg-subtle: #ced4da; - --bs-primary-border-subtle: #9ec5fe; - --bs-secondary-border-subtle: #c4c8cb; - --bs-success-border-subtle: #a3cfbb; - --bs-info-border-subtle: #9eeaf9; - --bs-warning-border-subtle: #ffe69c; - --bs-danger-border-subtle: #f1aeb5; - --bs-light-border-subtle: #e9ecef; - --bs-dark-border-subtle: #adb5bd; - --bs-white-rgb: 255, 255, 255; - --bs-black-rgb: 0, 0, 0; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); - --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 1rem; - --bs-body-font-weight: 400; - --bs-body-line-height: 1.5; - --bs-body-color: #212529; - --bs-body-color-rgb: 33, 37, 41; - --bs-body-bg: #fff; - --bs-body-bg-rgb: 255, 255, 255; - --bs-emphasis-color: #000; - --bs-emphasis-color-rgb: 0, 0, 0; - --bs-secondary-color: rgba(33, 37, 41, 0.75); - --bs-secondary-color-rgb: 33, 37, 41; - --bs-secondary-bg: #e9ecef; - --bs-secondary-bg-rgb: 233, 236, 239; - --bs-tertiary-color: rgba(33, 37, 41, 0.5); - --bs-tertiary-color-rgb: 33, 37, 41; - --bs-tertiary-bg: #f8f9fa; - --bs-tertiary-bg-rgb: 248, 249, 250; - --bs-heading-color: inherit; - --bs-link-color: #0d6efd; - --bs-link-color-rgb: 13, 110, 253; - --bs-link-decoration: underline; - --bs-link-hover-color: #0a58ca; - --bs-link-hover-color-rgb: 10, 88, 202; - --bs-code-color: #d63384; - --bs-highlight-color: #212529; - --bs-highlight-bg: #fff3cd; - --bs-border-width: 1px; - --bs-border-style: solid; - --bs-border-color: #dee2e6; - --bs-border-color-translucent: rgba(0, 0, 0, 0.175); - --bs-border-radius: 0.375rem; - --bs-border-radius-sm: 0.25rem; - --bs-border-radius-lg: 0.5rem; - --bs-border-radius-xl: 1rem; - --bs-border-radius-xxl: 2rem; - --bs-border-radius-2xl: var(--bs-border-radius-xxl); - --bs-border-radius-pill: 50rem; - --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); - --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); - --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); - --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); - --bs-focus-ring-width: 0.25rem; - --bs-focus-ring-opacity: 0.25; - --bs-focus-ring-color: rgba(13, 110, 253, 0.25); - --bs-form-valid-color: #198754; - --bs-form-valid-border-color: #198754; - --bs-form-invalid-color: #dc3545; - --bs-form-invalid-border-color: #dc3545 -} -[data-bs-theme=dark] { - color-scheme: dark; - --bs-body-color: #dee2e6; - --bs-body-color-rgb: 222, 226, 230; - --bs-body-bg: #212529; - --bs-body-bg-rgb: 33, 37, 41; - --bs-emphasis-color: #fff; - --bs-emphasis-color-rgb: 255, 255, 255; - --bs-secondary-color: rgba(222, 226, 230, 0.75); - --bs-secondary-color-rgb: 222, 226, 230; - --bs-secondary-bg: #343a40; - --bs-secondary-bg-rgb: 52, 58, 64; - --bs-tertiary-color: rgba(222, 226, 230, 0.5); - --bs-tertiary-color-rgb: 222, 226, 230; - --bs-tertiary-bg: #2b3035; - --bs-tertiary-bg-rgb: 43, 48, 53; - --bs-primary-text-emphasis: #6ea8fe; - --bs-secondary-text-emphasis: #a7acb1; - --bs-success-text-emphasis: #75b798; - --bs-info-text-emphasis: #6edff6; - --bs-warning-text-emphasis: #ffda6a; - --bs-danger-text-emphasis: #ea868f; - --bs-light-text-emphasis: #f8f9fa; - --bs-dark-text-emphasis: #dee2e6; - --bs-primary-bg-subtle: #031633; - --bs-secondary-bg-subtle: #161719; - --bs-success-bg-subtle: #051b11; - --bs-info-bg-subtle: #032830; - --bs-warning-bg-subtle: #332701; - --bs-danger-bg-subtle: #2c0b0e; - --bs-light-bg-subtle: #343a40; - --bs-dark-bg-subtle: #1a1d20; - --bs-primary-border-subtle: #084298; - --bs-secondary-border-subtle: #41464b; - --bs-success-border-subtle: #0f5132; - --bs-info-border-subtle: #087990; - --bs-warning-border-subtle: #997404; - --bs-danger-border-subtle: #842029; - --bs-light-border-subtle: #495057; - --bs-dark-border-subtle: #343a40; - --bs-heading-color: inherit; - --bs-link-color: #6ea8fe; - --bs-link-hover-color: #8bb9fe; - --bs-link-color-rgb: 110, 168, 254; - --bs-link-hover-color-rgb: 139, 185, 254; - --bs-code-color: #e685b5; - --bs-highlight-color: #dee2e6; - --bs-highlight-bg: #664d03; - --bs-border-color: #495057; - --bs-border-color-translucent: rgba(255, 255, 255, 0.15); - --bs-form-valid-color: #75b798; - --bs-form-valid-border-color: #75b798; - --bs-form-invalid-color: #ea868f; - --bs-form-invalid-border-color: #ea868f -} -*, ::after, ::before { - box-sizing: border-box -} -@media (prefers-reduced-motion:no-preference) { - :root { - scroll-behavior: smooth - } -} -body { - margin: 0; - font-family: var(--bs-body-font-family); - font-size: var(--bs-body-font-size); - font-weight: var(--bs-body-font-weight); - line-height: var(--bs-body-line-height); - color: var(--bs-body-color); - text-align: var(--bs-body-text-align); - background-color: var(--bs-body-bg); - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: transparent -} -hr { - margin: 1rem 0; - color: inherit; - border: 0; - border-top: var(--bs-border-width) solid; - opacity: .25 -} -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: .5rem; - font-weight: 500; - line-height: 1.2; - color: var(--bs-heading-color) -} -.h1, h1 { - font-size: calc(1.375rem + 1.5vw) -} -@media (min-width:1200px) { - .h1, h1 { - font-size: 2.5rem - } -} -.h2, h2 { - font-size: calc(1.325rem + .9vw) -} -@media (min-width:1200px) { - .h2, h2 { - font-size: 2rem - } -} -.h3, h3 { - font-size: calc(1.3rem + .6vw) -} -@media (min-width:1200px) { - .h3, h3 { - font-size: 1.75rem - } -} -.h4, h4 { - font-size: calc(1.275rem + .3vw) -} -@media (min-width:1200px) { - .h4, h4 { - font-size: 1.5rem - } -} -.h5, h5 { - font-size: 1.25rem -} -.h6, h6 { - font-size: 1rem -} -p { - margin-top: 0; - margin-bottom: 1rem -} -abbr[title] { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none -} -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit -} -ol, ul { - padding-left: 2rem -} -dl, ol, ul { - margin-top: 0; - margin-bottom: 1rem -} -ol ol, ol ul, ul ol, ul ul { - margin-bottom: 0 -} -dt { - font-weight: 700 -} -dd { - margin-bottom: .5rem; - margin-left: 0 -} -blockquote { - margin: 0 0 1rem -} -b, strong { - font-weight: bolder -} -.small, small { - font-size: .875em -} -.mark, mark { - padding: .1875em; - color: var(--bs-highlight-color); - background-color: var(--bs-highlight-bg) -} -sub, sup { - position: relative; - font-size: .75em; - line-height: 0; - vertical-align: baseline -} -sub { - bottom: -.25em -} -sup { - top: -.5em -} -a { - color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); - text-decoration: underline -} -a:hover { - --bs-link-color-rgb: var(--bs-link-hover-color-rgb) -} -a:not([href]):not([class]), a:not([href]):not([class]):hover { - color: inherit; - text-decoration: none -} -code, kbd, pre, samp { - font-family: var(--bs-font-monospace); - font-size: 1em -} -pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - font-size: .875em -} -pre code { - font-size: inherit; - color: inherit; - word-break: normal -} -code { - font-size: .875em; - color: var(--bs-code-color); - word-wrap: break-word -} -a>code { - color: inherit -} -kbd { - padding: .1875rem .375rem; - font-size: .875em; - color: var(--bs-body-bg); - background-color: var(--bs-body-color); - border-radius: .25rem -} -kbd kbd { - padding: 0; - font-size: 1em -} -figure { - margin: 0 0 1rem -} -img, svg { - vertical-align: middle -} -table { - caption-side: bottom; - border-collapse: collapse -} -caption { - padding-top: .5rem; - padding-bottom: .5rem; - color: var(--bs-secondary-color); - text-align: left -} -th { - text-align: inherit; - text-align: -webkit-match-parent -} -tbody, td, tfoot, th, thead, tr { - border-color: inherit; - border-style: solid; - border-width: 0 -} -label { - display: inline-block -} -button { - border-radius: 0 -} -button:focus:not(:focus-visible) { - outline: 0 -} -button, input, optgroup, select, textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit -} -button, select { - text-transform: none -} -[role=button] { - cursor: pointer -} -select { - word-wrap: normal -} -select:disabled { - opacity: 1 -} -[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { - display: none!important -} -[type=button], [type=reset], [type=submit], button { - -webkit-appearance: button -} -[type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled), button:not(:disabled) { - cursor: pointer -} -::-moz-focus-inner { - padding: 0; - border-style: none -} -textarea { - resize: vertical -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0 -} -legend { - float: left; - width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: calc(1.275rem + .3vw); - line-height: inherit -} -@media (min-width:1200px) { - legend { - font-size: 1.5rem - } -} -legend+* { - clear: left -} -::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-fields-wrapper, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-text, ::-webkit-datetime-edit-year-field { - padding: 0 -} -::-webkit-inner-spin-button { - height: auto -} -[type=search] { - -webkit-appearance: textfield; - outline-offset: -2px -} -::-webkit-search-decoration { - -webkit-appearance: none -} -::-webkit-color-swatch-wrapper { - padding: 0 -} -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button -} -::file-selector-button { - font: inherit; - -webkit-appearance: button -} -output { - display: inline-block -} -iframe { - border: 0 -} -summary { - display: list-item; - cursor: pointer -} -progress { - vertical-align: baseline -} -[hidden] { - display: none!important -} -.lead { - font-size: 1.25rem; - font-weight: 300 -} -.display-1 { - font-size: calc(1.625rem + 4.5vw); - font-weight: 300; - line-height: 1.2 -} -@media (min-width:1200px) { - .display-1 { - font-size: 5rem - } -} -.display-2 { - font-size: calc(1.575rem + 3.9vw); - font-weight: 300; - line-height: 1.2 -} -@media (min-width:1200px) { - .display-2 { - font-size: 4.5rem - } -} -.display-3 { - font-size: calc(1.525rem + 3.3vw); - font-weight: 300; - line-height: 1.2 -} -@media (min-width:1200px) { - .display-3 { - font-size: 4rem - } -} -.display-4 { - font-size: calc(1.475rem + 2.7vw); - font-weight: 300; - line-height: 1.2 -} -@media (min-width:1200px) { - .display-4 { - font-size: 3.5rem - } -} -.display-5 { - font-size: calc(1.425rem + 2.1vw); - font-weight: 300; - line-height: 1.2 -} -@media (min-width:1200px) { - .display-5 { - font-size: 3rem - } -} -.display-6 { - font-size: calc(1.375rem + 1.5vw); - font-weight: 300; - line-height: 1.2 -} -@media (min-width:1200px) { - .display-6 { - font-size: 2.5rem - } -} -.list-unstyled { - padding-left: 0; - list-style: none -} -.list-inline { - padding-left: 0; - list-style: none -} -.list-inline-item { - display: inline-block -} -.list-inline-item:not(:last-child) { - margin-right: .5rem -} -.initialism { - font-size: .875em; - text-transform: uppercase -} -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem -} -.blockquote>:last-child { - margin-bottom: 0 -} -.blockquote-footer { - margin-top: -1rem; - margin-bottom: 1rem; - font-size: .875em; - color: #6c757d -} -.blockquote-footer::before { - content: "— " -} -.img-fluid { - max-width: 100%; - height: auto -} -.img-thumbnail { - padding: .25rem; - background-color: var(--bs-body-bg); - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); - max-width: 100%; - height: auto -} -.figure { - display: inline-block -} -.figure-img { - margin-bottom: .5rem; - line-height: 1 -} -.figure-caption { - font-size: .875em; - color: var(--bs-secondary-color) -} -.container, .container-fluid, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - width: 100%; - padding-right: calc(var(--bs-gutter-x) * .5); - padding-left: calc(var(--bs-gutter-x) * .5); - margin-right: auto; - margin-left: auto -} -@media (min-width:576px) { - .container, .container-sm { - max-width: 540px - } -} -@media (min-width:768px) { - .container, .container-md, .container-sm { - max-width: 720px - } -} -@media (min-width:992px) { - .container, .container-lg, .container-md, .container-sm { - max-width: 960px - } -} -@media (min-width:1200px) { - .container, .container-lg, .container-md, .container-sm, .container-xl { - max-width: 1140px - } -} -@media (min-width:1400px) { - .container, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl { - max-width: 1320px - } -} -:root { - --bs-breakpoint-xs: 0; - --bs-breakpoint-sm: 576px; - --bs-breakpoint-md: 768px; - --bs-breakpoint-lg: 992px; - --bs-breakpoint-xl: 1200px; - --bs-breakpoint-xxl: 1400px -} -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - margin-top: calc(-1 * var(--bs-gutter-y)); - margin-right: calc(-.5 * var(--bs-gutter-x)); - margin-left: calc(-.5 * var(--bs-gutter-x)) -} -.row>* { - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * .5); - padding-left: calc(var(--bs-gutter-x) * .5); - margin-top: var(--bs-gutter-y) -} -.col { - flex: 1 0 0% -} -.row-cols-auto>* { - flex: 0 0 auto; - width: auto -} -.row-cols-1>* { - flex: 0 0 auto; - width: 100% -} -.row-cols-2>* { - flex: 0 0 auto; - width: 50% -} -.row-cols-3>* { - flex: 0 0 auto; - width: 33.33333333% -} -.row-cols-4>* { - flex: 0 0 auto; - width: 25% -} -.row-cols-5>* { - flex: 0 0 auto; - width: 20% -} -.row-cols-6>* { - flex: 0 0 auto; - width: 16.66666667% -} -.col-auto { - flex: 0 0 auto; - width: auto -} -.col-1 { - flex: 0 0 auto; - width: 8.33333333% -} -.col-2 { - flex: 0 0 auto; - width: 16.66666667% -} -.col-3 { - flex: 0 0 auto; - width: 25% -} -.col-4 { - flex: 0 0 auto; - width: 33.33333333% -} -.col-5 { - flex: 0 0 auto; - width: 41.66666667% -} -.col-6 { - flex: 0 0 auto; - width: 50% -} -.col-7 { - flex: 0 0 auto; - width: 58.33333333% -} -.col-8 { - flex: 0 0 auto; - width: 66.66666667% -} -.col-9 { - flex: 0 0 auto; - width: 75% -} -.col-10 { - flex: 0 0 auto; - width: 83.33333333% -} -.col-11 { - flex: 0 0 auto; - width: 91.66666667% -} -.col-12 { - flex: 0 0 auto; - width: 100% -} -.offset-1 { - margin-left: 8.33333333% -} -.offset-2 { - margin-left: 16.66666667% -} -.offset-3 { - margin-left: 25% -} -.offset-4 { - margin-left: 33.33333333% -} -.offset-5 { - margin-left: 41.66666667% -} -.offset-6 { - margin-left: 50% -} -.offset-7 { - margin-left: 58.33333333% -} -.offset-8 { - margin-left: 66.66666667% -} -.offset-9 { - margin-left: 75% -} -.offset-10 { - margin-left: 83.33333333% -} -.offset-11 { - margin-left: 91.66666667% -} -.g-0, .gx-0 { - --bs-gutter-x: 0 -} -.g-0, .gy-0 { - --bs-gutter-y: 0 -} -.g-1, .gx-1 { - --bs-gutter-x: 0.25rem -} -.g-1, .gy-1 { - --bs-gutter-y: 0.25rem -} -.g-2, .gx-2 { - --bs-gutter-x: 0.5rem -} -.g-2, .gy-2 { - --bs-gutter-y: 0.5rem -} -.g-3, .gx-3 { - --bs-gutter-x: 1rem -} -.g-3, .gy-3 { - --bs-gutter-y: 1rem -} -.g-4, .gx-4 { - --bs-gutter-x: 1.5rem -} -.g-4, .gy-4 { - --bs-gutter-y: 1.5rem -} -.g-5, .gx-5 { - --bs-gutter-x: 3rem -} -.g-5, .gy-5 { - --bs-gutter-y: 3rem -} -@media (min-width:576px) { - .col-sm { - flex: 1 0 0% - } - .row-cols-sm-auto>* { - flex: 0 0 auto; - width: auto - } - .row-cols-sm-1>* { - flex: 0 0 auto; - width: 100% - } - .row-cols-sm-2>* { - flex: 0 0 auto; - width: 50% - } - .row-cols-sm-3>* { - flex: 0 0 auto; - width: 33.33333333% - } - .row-cols-sm-4>* { - flex: 0 0 auto; - width: 25% - } - .row-cols-sm-5>* { - flex: 0 0 auto; - width: 20% - } - .row-cols-sm-6>* { - flex: 0 0 auto; - width: 16.66666667% - } - .col-sm-auto { - flex: 0 0 auto; - width: auto - } - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333% - } - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667% - } - .col-sm-3 { - flex: 0 0 auto; - width: 25% - } - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333% - } - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667% - } - .col-sm-6 { - flex: 0 0 auto; - width: 50% - } - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333% - } - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667% - } - .col-sm-9 { - flex: 0 0 auto; - width: 75% - } - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333% - } - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667% - } - .col-sm-12 { - flex: 0 0 auto; - width: 100% - } - .offset-sm-0 { - margin-left: 0 - } - .offset-sm-1 { - margin-left: 8.33333333% - } - .offset-sm-2 { - margin-left: 16.66666667% - } - .offset-sm-3 { - margin-left: 25% - } - .offset-sm-4 { - margin-left: 33.33333333% - } - .offset-sm-5 { - margin-left: 41.66666667% - } - .offset-sm-6 { - margin-left: 50% - } - .offset-sm-7 { - margin-left: 58.33333333% - } - .offset-sm-8 { - margin-left: 66.66666667% - } - .offset-sm-9 { - margin-left: 75% - } - .offset-sm-10 { - margin-left: 83.33333333% - } - .offset-sm-11 { - margin-left: 91.66666667% - } - .g-sm-0, .gx-sm-0 { - --bs-gutter-x: 0 - } - .g-sm-0, .gy-sm-0 { - --bs-gutter-y: 0 - } - .g-sm-1, .gx-sm-1 { - --bs-gutter-x: 0.25rem - } - .g-sm-1, .gy-sm-1 { - --bs-gutter-y: 0.25rem - } - .g-sm-2, .gx-sm-2 { - --bs-gutter-x: 0.5rem - } - .g-sm-2, .gy-sm-2 { - --bs-gutter-y: 0.5rem - } - .g-sm-3, .gx-sm-3 { - --bs-gutter-x: 1rem - } - .g-sm-3, .gy-sm-3 { - --bs-gutter-y: 1rem - } - .g-sm-4, .gx-sm-4 { - --bs-gutter-x: 1.5rem - } - .g-sm-4, .gy-sm-4 { - --bs-gutter-y: 1.5rem - } - .g-sm-5, .gx-sm-5 { - --bs-gutter-x: 3rem - } - .g-sm-5, .gy-sm-5 { - --bs-gutter-y: 3rem - } -} -@media (min-width:768px) { - .col-md { - flex: 1 0 0% - } - .row-cols-md-auto>* { - flex: 0 0 auto; - width: auto - } - .row-cols-md-1>* { - flex: 0 0 auto; - width: 100% - } - .row-cols-md-2>* { - flex: 0 0 auto; - width: 50% - } - .row-cols-md-3>* { - flex: 0 0 auto; - width: 33.33333333% - } - .row-cols-md-4>* { - flex: 0 0 auto; - width: 25% - } - .row-cols-md-5>* { - flex: 0 0 auto; - width: 20% - } - .row-cols-md-6>* { - flex: 0 0 auto; - width: 16.66666667% - } - .col-md-auto { - flex: 0 0 auto; - width: auto - } - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333% - } - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667% - } - .col-md-3 { - flex: 0 0 auto; - width: 25% - } - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333% - } - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667% - } - .col-md-6 { - flex: 0 0 auto; - width: 50% - } - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333% - } - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667% - } - .col-md-9 { - flex: 0 0 auto; - width: 75% - } - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333% - } - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667% - } - .col-md-12 { - flex: 0 0 auto; - width: 100% - } - .offset-md-0 { - margin-left: 0 - } - .offset-md-1 { - margin-left: 8.33333333% - } - .offset-md-2 { - margin-left: 16.66666667% - } - .offset-md-3 { - margin-left: 25% - } - .offset-md-4 { - margin-left: 33.33333333% - } - .offset-md-5 { - margin-left: 41.66666667% - } - .offset-md-6 { - margin-left: 50% - } - .offset-md-7 { - margin-left: 58.33333333% - } - .offset-md-8 { - margin-left: 66.66666667% - } - .offset-md-9 { - margin-left: 75% - } - .offset-md-10 { - margin-left: 83.33333333% - } - .offset-md-11 { - margin-left: 91.66666667% - } - .g-md-0, .gx-md-0 { - --bs-gutter-x: 0 - } - .g-md-0, .gy-md-0 { - --bs-gutter-y: 0 - } - .g-md-1, .gx-md-1 { - --bs-gutter-x: 0.25rem - } - .g-md-1, .gy-md-1 { - --bs-gutter-y: 0.25rem - } - .g-md-2, .gx-md-2 { - --bs-gutter-x: 0.5rem - } - .g-md-2, .gy-md-2 { - --bs-gutter-y: 0.5rem - } - .g-md-3, .gx-md-3 { - --bs-gutter-x: 1rem - } - .g-md-3, .gy-md-3 { - --bs-gutter-y: 1rem - } - .g-md-4, .gx-md-4 { - --bs-gutter-x: 1.5rem - } - .g-md-4, .gy-md-4 { - --bs-gutter-y: 1.5rem - } - .g-md-5, .gx-md-5 { - --bs-gutter-x: 3rem - } - .g-md-5, .gy-md-5 { - --bs-gutter-y: 3rem - } -} -@media (min-width:992px) { - .col-lg { - flex: 1 0 0% - } - .row-cols-lg-auto>* { - flex: 0 0 auto; - width: auto - } - .row-cols-lg-1>* { - flex: 0 0 auto; - width: 100% - } - .row-cols-lg-2>* { - flex: 0 0 auto; - width: 50% - } - .row-cols-lg-3>* { - flex: 0 0 auto; - width: 33.33333333% - } - .row-cols-lg-4>* { - flex: 0 0 auto; - width: 25% - } - .row-cols-lg-5>* { - flex: 0 0 auto; - width: 20% - } - .row-cols-lg-6>* { - flex: 0 0 auto; - width: 16.66666667% - } - .col-lg-auto { - flex: 0 0 auto; - width: auto - } - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333% - } - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667% - } - .col-lg-3 { - flex: 0 0 auto; - width: 25% - } - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333% - } - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667% - } - .col-lg-6 { - flex: 0 0 auto; - width: 50% - } - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333% - } - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667% - } - .col-lg-9 { - flex: 0 0 auto; - width: 75% - } - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333% - } - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667% - } - .col-lg-12 { - flex: 0 0 auto; - width: 100% - } - .offset-lg-0 { - margin-left: 0 - } - .offset-lg-1 { - margin-left: 8.33333333% - } - .offset-lg-2 { - margin-left: 16.66666667% - } - .offset-lg-3 { - margin-left: 25% - } - .offset-lg-4 { - margin-left: 33.33333333% - } - .offset-lg-5 { - margin-left: 41.66666667% - } - .offset-lg-6 { - margin-left: 50% - } - .offset-lg-7 { - margin-left: 58.33333333% - } - .offset-lg-8 { - margin-left: 66.66666667% - } - .offset-lg-9 { - margin-left: 75% - } - .offset-lg-10 { - margin-left: 83.33333333% - } - .offset-lg-11 { - margin-left: 91.66666667% - } - .g-lg-0, .gx-lg-0 { - --bs-gutter-x: 0 - } - .g-lg-0, .gy-lg-0 { - --bs-gutter-y: 0 - } - .g-lg-1, .gx-lg-1 { - --bs-gutter-x: 0.25rem - } - .g-lg-1, .gy-lg-1 { - --bs-gutter-y: 0.25rem - } - .g-lg-2, .gx-lg-2 { - --bs-gutter-x: 0.5rem - } - .g-lg-2, .gy-lg-2 { - --bs-gutter-y: 0.5rem - } - .g-lg-3, .gx-lg-3 { - --bs-gutter-x: 1rem - } - .g-lg-3, .gy-lg-3 { - --bs-gutter-y: 1rem - } - .g-lg-4, .gx-lg-4 { - --bs-gutter-x: 1.5rem - } - .g-lg-4, .gy-lg-4 { - --bs-gutter-y: 1.5rem - } - .g-lg-5, .gx-lg-5 { - --bs-gutter-x: 3rem - } - .g-lg-5, .gy-lg-5 { - --bs-gutter-y: 3rem - } -} -@media (min-width:1200px) { - .col-xl { - flex: 1 0 0% - } - .row-cols-xl-auto>* { - flex: 0 0 auto; - width: auto - } - .row-cols-xl-1>* { - flex: 0 0 auto; - width: 100% - } - .row-cols-xl-2>* { - flex: 0 0 auto; - width: 50% - } - .row-cols-xl-3>* { - flex: 0 0 auto; - width: 33.33333333% - } - .row-cols-xl-4>* { - flex: 0 0 auto; - width: 25% - } - .row-cols-xl-5>* { - flex: 0 0 auto; - width: 20% - } - .row-cols-xl-6>* { - flex: 0 0 auto; - width: 16.66666667% - } - .col-xl-auto { - flex: 0 0 auto; - width: auto - } - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333% - } - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667% - } - .col-xl-3 { - flex: 0 0 auto; - width: 25% - } - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333% - } - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667% - } - .col-xl-6 { - flex: 0 0 auto; - width: 50% - } - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333% - } - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667% - } - .col-xl-9 { - flex: 0 0 auto; - width: 75% - } - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333% - } - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667% - } - .col-xl-12 { - flex: 0 0 auto; - width: 100% - } - .offset-xl-0 { - margin-left: 0 - } - .offset-xl-1 { - margin-left: 8.33333333% - } - .offset-xl-2 { - margin-left: 16.66666667% - } - .offset-xl-3 { - margin-left: 25% - } - .offset-xl-4 { - margin-left: 33.33333333% - } - .offset-xl-5 { - margin-left: 41.66666667% - } - .offset-xl-6 { - margin-left: 50% - } - .offset-xl-7 { - margin-left: 58.33333333% - } - .offset-xl-8 { - margin-left: 66.66666667% - } - .offset-xl-9 { - margin-left: 75% - } - .offset-xl-10 { - margin-left: 83.33333333% - } - .offset-xl-11 { - margin-left: 91.66666667% - } - .g-xl-0, .gx-xl-0 { - --bs-gutter-x: 0 - } - .g-xl-0, .gy-xl-0 { - --bs-gutter-y: 0 - } - .g-xl-1, .gx-xl-1 { - --bs-gutter-x: 0.25rem - } - .g-xl-1, .gy-xl-1 { - --bs-gutter-y: 0.25rem - } - .g-xl-2, .gx-xl-2 { - --bs-gutter-x: 0.5rem - } - .g-xl-2, .gy-xl-2 { - --bs-gutter-y: 0.5rem - } - .g-xl-3, .gx-xl-3 { - --bs-gutter-x: 1rem - } - .g-xl-3, .gy-xl-3 { - --bs-gutter-y: 1rem - } - .g-xl-4, .gx-xl-4 { - --bs-gutter-x: 1.5rem - } - .g-xl-4, .gy-xl-4 { - --bs-gutter-y: 1.5rem - } - .g-xl-5, .gx-xl-5 { - --bs-gutter-x: 3rem - } - .g-xl-5, .gy-xl-5 { - --bs-gutter-y: 3rem - } -} -@media (min-width:1400px) { - .col-xxl { - flex: 1 0 0% - } - .row-cols-xxl-auto>* { - flex: 0 0 auto; - width: auto - } - .row-cols-xxl-1>* { - flex: 0 0 auto; - width: 100% - } - .row-cols-xxl-2>* { - flex: 0 0 auto; - width: 50% - } - .row-cols-xxl-3>* { - flex: 0 0 auto; - width: 33.33333333% - } - .row-cols-xxl-4>* { - flex: 0 0 auto; - width: 25% - } - .row-cols-xxl-5>* { - flex: 0 0 auto; - width: 20% - } - .row-cols-xxl-6>* { - flex: 0 0 auto; - width: 16.66666667% - } - .col-xxl-auto { - flex: 0 0 auto; - width: auto - } - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333% - } - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667% - } - .col-xxl-3 { - flex: 0 0 auto; - width: 25% - } - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333% - } - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667% - } - .col-xxl-6 { - flex: 0 0 auto; - width: 50% - } - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333% - } - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667% - } - .col-xxl-9 { - flex: 0 0 auto; - width: 75% - } - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333% - } - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667% - } - .col-xxl-12 { - flex: 0 0 auto; - width: 100% - } - .offset-xxl-0 { - margin-left: 0 - } - .offset-xxl-1 { - margin-left: 8.33333333% - } - .offset-xxl-2 { - margin-left: 16.66666667% - } - .offset-xxl-3 { - margin-left: 25% - } - .offset-xxl-4 { - margin-left: 33.33333333% - } - .offset-xxl-5 { - margin-left: 41.66666667% - } - .offset-xxl-6 { - margin-left: 50% - } - .offset-xxl-7 { - margin-left: 58.33333333% - } - .offset-xxl-8 { - margin-left: 66.66666667% - } - .offset-xxl-9 { - margin-left: 75% - } - .offset-xxl-10 { - margin-left: 83.33333333% - } - .offset-xxl-11 { - margin-left: 91.66666667% - } - .g-xxl-0, .gx-xxl-0 { - --bs-gutter-x: 0 - } - .g-xxl-0, .gy-xxl-0 { - --bs-gutter-y: 0 - } - .g-xxl-1, .gx-xxl-1 { - --bs-gutter-x: 0.25rem - } - .g-xxl-1, .gy-xxl-1 { - --bs-gutter-y: 0.25rem - } - .g-xxl-2, .gx-xxl-2 { - --bs-gutter-x: 0.5rem - } - .g-xxl-2, .gy-xxl-2 { - --bs-gutter-y: 0.5rem - } - .g-xxl-3, .gx-xxl-3 { - --bs-gutter-x: 1rem - } - .g-xxl-3, .gy-xxl-3 { - --bs-gutter-y: 1rem - } - .g-xxl-4, .gx-xxl-4 { - --bs-gutter-x: 1.5rem - } - .g-xxl-4, .gy-xxl-4 { - --bs-gutter-y: 1.5rem - } - .g-xxl-5, .gx-xxl-5 { - --bs-gutter-x: 3rem - } - .g-xxl-5, .gy-xxl-5 { - --bs-gutter-y: 3rem - } -} -.table { - --bs-table-color-type: initial; - --bs-table-bg-type: initial; - --bs-table-color-state: initial; - --bs-table-bg-state: initial; - --bs-table-color: var(--bs-emphasis-color); - --bs-table-bg: var(--bs-body-bg); - --bs-table-border-color: var(--bs-border-color); - --bs-table-accent-bg: transparent; - --bs-table-striped-color: var(--bs-emphasis-color); - --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); - --bs-table-active-color: var(--bs-emphasis-color); - --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); - --bs-table-hover-color: var(--bs-emphasis-color); - --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); - width: 100%; - margin-bottom: 1rem; - vertical-align: top; - border-color: var(--bs-table-border-color) -} -.table>:not(caption)>*>* { - padding: .5rem .5rem; - color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); - background-color: var(--bs-table-bg); - border-bottom-width: var(--bs-border-width); - box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))) -} -.table>tbody { - vertical-align: inherit -} -.table>thead { - vertical-align: bottom -} -.table-group-divider { - border-top: calc(var(--bs-border-width) * 2) solid currentcolor -} -.caption-top { - caption-side: top -} -.table-sm>:not(caption)>*>* { - padding: .25rem .25rem -} -.table-bordered>:not(caption)>* { - border-width: var(--bs-border-width) 0 -} -.table-bordered>:not(caption)>*>* { - border-width: 0 var(--bs-border-width) -} -.table-borderless>:not(caption)>*>* { - border-bottom-width: 0 -} -.table-borderless>:not(:first-child) { - border-top-width: 0 -} -.table-striped>tbody>tr:nth-of-type(odd)>* { - --bs-table-color-type: var(--bs-table-striped-color); - --bs-table-bg-type: var(--bs-table-striped-bg) -} -.table-striped-columns>:not(caption)>tr>:nth-child(2n) { - --bs-table-color-type: var(--bs-table-striped-color); - --bs-table-bg-type: var(--bs-table-striped-bg) -} -.table-active { - --bs-table-color-state: var(--bs-table-active-color); - --bs-table-bg-state: var(--bs-table-active-bg) -} -.table-hover>tbody>tr:hover>* { - --bs-table-color-state: var(--bs-table-hover-color); - --bs-table-bg-state: var(--bs-table-hover-bg) -} -.table-primary { - --bs-table-color: #000; - --bs-table-bg: #cfe2ff; - --bs-table-border-color: #a6b5cc; - --bs-table-striped-bg: #c5d7f2; - --bs-table-striped-color: #000; - --bs-table-active-bg: #bacbe6; - --bs-table-active-color: #000; - --bs-table-hover-bg: #bfd1ec; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-secondary { - --bs-table-color: #000; - --bs-table-bg: #e2e3e5; - --bs-table-border-color: #b5b6b7; - --bs-table-striped-bg: #d7d8da; - --bs-table-striped-color: #000; - --bs-table-active-bg: #cbccce; - --bs-table-active-color: #000; - --bs-table-hover-bg: #d1d2d4; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-success { - --bs-table-color: #000; - --bs-table-bg: #d1e7dd; - --bs-table-border-color: #a7b9b1; - --bs-table-striped-bg: #c7dbd2; - --bs-table-striped-color: #000; - --bs-table-active-bg: #bcd0c7; - --bs-table-active-color: #000; - --bs-table-hover-bg: #c1d6cc; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-info { - --bs-table-color: #000; - --bs-table-bg: #cff4fc; - --bs-table-border-color: #a6c3ca; - --bs-table-striped-bg: #c5e8ef; - --bs-table-striped-color: #000; - --bs-table-active-bg: #badce3; - --bs-table-active-color: #000; - --bs-table-hover-bg: #bfe2e9; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-warning { - --bs-table-color: #000; - --bs-table-bg: #fff3cd; - --bs-table-border-color: #ccc2a4; - --bs-table-striped-bg: #f2e7c3; - --bs-table-striped-color: #000; - --bs-table-active-bg: #e6dbb9; - --bs-table-active-color: #000; - --bs-table-hover-bg: #ece1be; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-danger { - --bs-table-color: #000; - --bs-table-bg: #f8d7da; - --bs-table-border-color: #c6acae; - --bs-table-striped-bg: #eccccf; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dfc2c4; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e5c7ca; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-light { - --bs-table-color: #000; - --bs-table-bg: #f8f9fa; - --bs-table-border-color: #c6c7c8; - --bs-table-striped-bg: #ecedee; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dfe0e1; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e5e6e7; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-dark { - --bs-table-color: #fff; - --bs-table-bg: #212529; - --bs-table-border-color: #4d5154; - --bs-table-striped-bg: #2c3034; - --bs-table-striped-color: #fff; - --bs-table-active-bg: #373b3e; - --bs-table-active-color: #fff; - --bs-table-hover-bg: #323539; - --bs-table-hover-color: #fff; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color) -} -.table-responsive { - overflow-x: auto; - -webkit-overflow-scrolling: touch -} -@media (max-width:575.98px) { - .table-responsive-sm { - overflow-x: auto; - -webkit-overflow-scrolling: touch - } -} -@media (max-width:767.98px) { - .table-responsive-md { - overflow-x: auto; - -webkit-overflow-scrolling: touch - } -} -@media (max-width:991.98px) { - .table-responsive-lg { - overflow-x: auto; - -webkit-overflow-scrolling: touch - } -} -@media (max-width:1199.98px) { - .table-responsive-xl { - overflow-x: auto; - -webkit-overflow-scrolling: touch - } -} -@media (max-width:1399.98px) { - .table-responsive-xxl { - overflow-x: auto; - -webkit-overflow-scrolling: touch - } -} -.form-label { - margin-bottom: .5rem -} -.col-form-label { - padding-top: calc(.375rem + var(--bs-border-width)); - padding-bottom: calc(.375rem + var(--bs-border-width)); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5 -} -.col-form-label-lg { - padding-top: calc(.5rem + var(--bs-border-width)); - padding-bottom: calc(.5rem + var(--bs-border-width)); - font-size: 1.25rem -} -.col-form-label-sm { - padding-top: calc(.25rem + var(--bs-border-width)); - padding-bottom: calc(.25rem + var(--bs-border-width)); - font-size: .875rem -} -.form-text { - margin-top: .25rem; - font-size: .875em; - color: var(--bs-secondary-color) -} -.form-control { - display: block; - width: 100%; - padding: .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: var(--bs-body-color); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: var(--bs-body-bg); - background-clip: padding-box; - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-control { - transition: none - } -} -.form-control[type=file] { - overflow: hidden -} -.form-control[type=file]:not(:disabled):not([readonly]) { - cursor: pointer -} -.form-control:focus { - color: var(--bs-body-color); - background-color: var(--bs-body-bg); - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25) -} -.form-control::-webkit-date-and-time-value { - min-width: 85px; - height: 1.5em; - margin: 0 -} -.form-control::-webkit-datetime-edit { - display: block; - padding: 0 -} -.form-control::-moz-placeholder { - color: var(--bs-secondary-color); - opacity: 1 -} -.form-control::placeholder { - color: var(--bs-secondary-color); - opacity: 1 -} -.form-control:disabled { - background-color: var(--bs-secondary-bg); - opacity: 1 -} -.form-control::-webkit-file-upload-button { - padding: .375rem .75rem; - margin: -.375rem -.75rem; - -webkit-margin-end: .75rem; - margin-inline-end: .75rem; - color: var(--bs-body-color); - background-color: var(--bs-tertiary-bg); - pointer-events: none; - border-color: inherit; - border-style: solid; - border-width: 0; - border-inline-end-width: var(--bs-border-width); - border-radius: 0; - -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -.form-control::file-selector-button { - padding: .375rem .75rem; - margin: -.375rem -.75rem; - -webkit-margin-end: .75rem; - margin-inline-end: .75rem; - color: var(--bs-body-color); - background-color: var(--bs-tertiary-bg); - pointer-events: none; - border-color: inherit; - border-style: solid; - border-width: 0; - border-inline-end-width: var(--bs-border-width); - border-radius: 0; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-control::-webkit-file-upload-button { - -webkit-transition: none; - transition: none - } - .form-control::file-selector-button { - transition: none - } -} -.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { - background-color: var(--bs-secondary-bg) -} -.form-control:hover:not(:disabled):not([readonly])::file-selector-button { - background-color: var(--bs-secondary-bg) -} -.form-control-plaintext { - display: block; - width: 100%; - padding: .375rem 0; - margin-bottom: 0; - line-height: 1.5; - color: var(--bs-body-color); - background-color: transparent; - border: solid transparent; - border-width: var(--bs-border-width) 0 -} -.form-control-plaintext:focus { - outline: 0 -} -.form-control-plaintext.form-control-lg, .form-control-plaintext.form-control-sm { - padding-right: 0; - padding-left: 0 -} -.form-control-sm { - min-height: calc(1.5em + .5rem + calc(var(--bs-border-width) * 2)); - padding: .25rem .5rem; - font-size: .875rem; - border-radius: var(--bs-border-radius-sm) -} -.form-control-sm::-webkit-file-upload-button { - padding: .25rem .5rem; - margin: -.25rem -.5rem; - -webkit-margin-end: .5rem; - margin-inline-end: .5rem -} -.form-control-sm::file-selector-button { - padding: .25rem .5rem; - margin: -.25rem -.5rem; - -webkit-margin-end: .5rem; - margin-inline-end: .5rem -} -.form-control-lg { - min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); - padding: .5rem 1rem; - font-size: 1.25rem; - border-radius: var(--bs-border-radius-lg) -} -.form-control-lg::-webkit-file-upload-button { - padding: .5rem 1rem; - margin: -.5rem -1rem; - -webkit-margin-end: 1rem; - margin-inline-end: 1rem -} -.form-control-lg::file-selector-button { - padding: .5rem 1rem; - margin: -.5rem -1rem; - -webkit-margin-end: 1rem; - margin-inline-end: 1rem -} -textarea.form-control { - min-height: calc(1.5em + .75rem + calc(var(--bs-border-width) * 2)) -} -textarea.form-control-sm { - min-height: calc(1.5em + .5rem + calc(var(--bs-border-width) * 2)) -} -textarea.form-control-lg { - min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)) -} -.form-control-color { - width: 3rem; - height: calc(1.5em + .75rem + calc(var(--bs-border-width) * 2)); - padding: .375rem -} -.form-control-color:not(:disabled):not([readonly]) { - cursor: pointer -} -.form-control-color::-moz-color-swatch { - border: 0!important; - border-radius: var(--bs-border-radius) -} -.form-control-color::-webkit-color-swatch { - border: 0!important; - border-radius: var(--bs-border-radius) -} -.form-control-color.form-control-sm { - height: calc(1.5em + .5rem + calc(var(--bs-border-width) * 2)) -} -.form-control-color.form-control-lg { - height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)) -} -.form-select { - --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); - display: block; - width: 100%; - padding: .375rem 2.25rem .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: var(--bs-body-color); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: var(--bs-body-bg); - background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); - background-repeat: no-repeat; - background-position: right .75rem center; - background-size: 16px 12px; - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-select { - transition: none - } -} -.form-select:focus { - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25) -} -.form-select[multiple], .form-select[size]:not([size="1"]) { - padding-right: .75rem; - background-image: none -} -.form-select:disabled { - background-color: var(--bs-secondary-bg) -} -.form-select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 var(--bs-body-color) -} -.form-select-sm { - padding-top: .25rem; - padding-bottom: .25rem; - padding-left: .5rem; - font-size: .875rem; - border-radius: var(--bs-border-radius-sm) -} -.form-select-lg { - padding-top: .5rem; - padding-bottom: .5rem; - padding-left: 1rem; - font-size: 1.25rem; - border-radius: var(--bs-border-radius-lg) -} -[data-bs-theme=dark] .form-select { - --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e") -} -.form-check { - display: block; - min-height: 1.5rem; - padding-left: 1.5em; - margin-bottom: .125rem -} -.form-check .form-check-input { - float: left; - margin-left: -1.5em -} -.form-check-reverse { - padding-right: 1.5em; - padding-left: 0; - text-align: right -} -.form-check-reverse .form-check-input { - float: right; - margin-right: -1.5em; - margin-left: 0 -} -.form-check-input { - --bs-form-check-bg: var(--bs-body-bg); - flex-shrink: 0; - width: 1em; - height: 1em; - margin-top: .25em; - vertical-align: top; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: var(--bs-form-check-bg); - background-image: var(--bs-form-check-bg-image); - background-repeat: no-repeat; - background-position: center; - background-size: contain; - border: var(--bs-border-width) solid var(--bs-border-color); - -webkit-print-color-adjust: exact; - color-adjust: exact; - print-color-adjust: exact -} -.form-check-input[type=checkbox] { - border-radius: .25em -} -.form-check-input[type=radio] { - border-radius: 50% -} -.form-check-input:active { - filter: brightness(90%) -} -.form-check-input:focus { - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25) -} -.form-check-input:checked { - background-color: #0d6efd; - border-color: #0d6efd -} -.form-check-input:checked[type=checkbox] { - --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e") -} -.form-check-input:checked[type=radio] { - --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e") -} -.form-check-input[type=checkbox]:indeterminate { - background-color: #0d6efd; - border-color: #0d6efd; - --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e") -} -.form-check-input:disabled { - pointer-events: none; - filter: none; - opacity: .5 -} -.form-check-input:disabled~.form-check-label, .form-check-input[disabled]~.form-check-label { - cursor: default; - opacity: .5 -} -.form-switch { - padding-left: 2.5em -} -.form-switch .form-check-input { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); - width: 2em; - margin-left: -2.5em; - background-image: var(--bs-form-switch-bg); - background-position: left center; - border-radius: 2em; - transition: background-position .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-switch .form-check-input { - transition: none - } -} -.form-switch .form-check-input:focus { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e") -} -.form-switch .form-check-input:checked { - background-position: right center; - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e") -} -.form-switch.form-check-reverse { - padding-right: 2.5em; - padding-left: 0 -} -.form-switch.form-check-reverse .form-check-input { - margin-right: -2.5em; - margin-left: 0 -} -.form-check-inline { - display: inline-block; - margin-right: 1rem -} -.btn-check { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} -.btn-check:disabled+.btn, .btn-check[disabled]+.btn { - pointer-events: none; - filter: none; - opacity: .65 -} -[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e") -} -.form-range { - width: 100%; - height: 1.5rem; - padding: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: transparent -} -.form-range:focus { - outline: 0 -} -.form-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .25rem rgba(13, 110, 253, .25) -} -.form-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 .25rem rgba(13, 110, 253, .25) -} -.form-range::-moz-focus-outer { - border: 0 -} -.form-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -.25rem; - -webkit-appearance: none; - appearance: none; - background-color: #0d6efd; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none - } -} -.form-range::-webkit-slider-thumb:active { - background-color: #b6d4fe -} -.form-range::-webkit-slider-runnable-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: var(--bs-secondary-bg); - border-color: transparent; - border-radius: 1rem -} -.form-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - -moz-appearance: none; - appearance: none; - background-color: #0d6efd; - border: 0; - border-radius: 1rem; - -moz-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-range::-moz-range-thumb { - -moz-transition: none; - transition: none - } -} -.form-range::-moz-range-thumb:active { - background-color: #b6d4fe -} -.form-range::-moz-range-track { - width: 100%; - height: .5rem; - color: transparent; - cursor: pointer; - background-color: var(--bs-secondary-bg); - border-color: transparent; - border-radius: 1rem -} -.form-range:disabled { - pointer-events: none -} -.form-range:disabled::-webkit-slider-thumb { - background-color: var(--bs-secondary-color) -} -.form-range:disabled::-moz-range-thumb { - background-color: var(--bs-secondary-color) -} -.form-floating { - position: relative -} -.form-floating>.form-control, .form-floating>.form-control-plaintext, .form-floating>.form-select { - height: calc(3.5rem + calc(var(--bs-border-width) * 2)); - min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); - line-height: 1.25 -} -.form-floating>label { - position: absolute; - top: 0; - left: 0; - z-index: 2; - height: 100%; - padding: 1rem .75rem; - overflow: hidden; - text-align: start; - text-overflow: ellipsis; - white-space: nowrap; - pointer-events: none; - border: var(--bs-border-width) solid transparent; - transform-origin: 0 0; - transition: opacity .1s ease-in-out, transform .1s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .form-floating>label { - transition: none - } -} -.form-floating>.form-control, .form-floating>.form-control-plaintext { - padding: 1rem .75rem -} -.form-floating>.form-control-plaintext::-moz-placeholder, .form-floating>.form-control::-moz-placeholder { - color: transparent -} -.form-floating>.form-control-plaintext::placeholder, .form-floating>.form-control::placeholder { - color: transparent -} -.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown), .form-floating>.form-control:not(:-moz-placeholder-shown) { - padding-top: 1.625rem; - padding-bottom: .625rem -} -.form-floating>.form-control-plaintext:focus, .form-floating>.form-control-plaintext:not(:placeholder-shown), .form-floating>.form-control:focus, .form-floating>.form-control:not(:placeholder-shown) { - padding-top: 1.625rem; - padding-bottom: .625rem -} -.form-floating>.form-control-plaintext:-webkit-autofill, .form-floating>.form-control:-webkit-autofill { - padding-top: 1.625rem; - padding-bottom: .625rem -} -.form-floating>.form-select { - padding-top: 1.625rem; - padding-bottom: .625rem -} -.form-floating>.form-control:not(:-moz-placeholder-shown)~label { - color: rgba(var(--bs-body-color-rgb), .65); - transform: scale(.85) translateY(-.5rem) translateX(.15rem) -} -.form-floating>.form-control-plaintext~label, .form-floating>.form-control:focus~label, .form-floating>.form-control:not(:placeholder-shown)~label, .form-floating>.form-select~label { - color: rgba(var(--bs-body-color-rgb), .65); - transform: scale(.85) translateY(-.5rem) translateX(.15rem) -} -.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after { - position: absolute; - inset: 1rem 0.375rem; - z-index: -1; - height: 1.5em; - content: ""; - background-color: var(--bs-body-bg); - border-radius: var(--bs-border-radius) -} -.form-floating>.form-control-plaintext~label::after, .form-floating>.form-control:focus~label::after, .form-floating>.form-control:not(:placeholder-shown)~label::after, .form-floating>.form-select~label::after { - position: absolute; - inset: 1rem 0.375rem; - z-index: -1; - height: 1.5em; - content: ""; - background-color: var(--bs-body-bg); - border-radius: var(--bs-border-radius) -} -.form-floating>.form-control:-webkit-autofill~label { - color: rgba(var(--bs-body-color-rgb), .65); - transform: scale(.85) translateY(-.5rem) translateX(.15rem) -} -.form-floating>.form-control-plaintext~label { - border-width: var(--bs-border-width) 0 -} -.form-floating>.form-control:disabled~label, .form-floating>:disabled~label { - color: #6c757d -} -.form-floating>.form-control:disabled~label::after, .form-floating>:disabled~label::after { - background-color: var(--bs-secondary-bg) -} -.input-group { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: stretch; - width: 100% -} -.input-group>.form-control, .input-group>.form-floating, .input-group>.form-select { - position: relative; - flex: 1 1 auto; - width: 1%; - min-width: 0 -} -.input-group>.form-control:focus, .input-group>.form-floating:focus-within, .input-group>.form-select:focus { - z-index: 5 -} -.input-group .btn { - position: relative; - z-index: 2 -} -.input-group .btn:focus { - z-index: 5 -} -.input-group-text { - display: flex; - align-items: center; - padding: .375rem .75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: var(--bs-body-color); - text-align: center; - white-space: nowrap; - background-color: var(--bs-tertiary-bg); - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius) -} -.input-group-lg>.btn, .input-group-lg>.form-control, .input-group-lg>.form-select, .input-group-lg>.input-group-text { - padding: .5rem 1rem; - font-size: 1.25rem; - border-radius: var(--bs-border-radius-lg) -} -.input-group-sm>.btn, .input-group-sm>.form-control, .input-group-sm>.form-select, .input-group-sm>.input-group-text { - padding: .25rem .5rem; - font-size: .875rem; - border-radius: var(--bs-border-radius-sm) -} -.input-group-lg>.form-select, .input-group-sm>.form-select { - padding-right: 3rem -} -.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3), .input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control, .input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select, .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} -.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4), .input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control, .input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select, .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} -.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { - margin-left: calc(var(--bs-border-width) * -1); - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} -.input-group>.form-floating:not(:first-child)>.form-control, .input-group>.form-floating:not(:first-child)>.form-select { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} -.valid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: .875em; - color: var(--bs-form-valid-color) -} -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - color: #fff; - background-color: var(--bs-success); - border-radius: var(--bs-border-radius) -} -.is-valid~.valid-feedback, .is-valid~.valid-tooltip, .was-validated :valid~.valid-feedback, .was-validated :valid~.valid-tooltip { - display: block -} -.form-control.is-valid, .was-validated .form-control:valid { - border-color: var(--bs-form-valid-border-color); - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(.375em + .1875rem) center; - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} -.form-control.is-valid:focus, .was-validated .form-control:valid:focus { - border-color: var(--bs-form-valid-border-color); - box-shadow: 0 0 0 .25rem rgba(var(--bs-success-rgb), .25) -} -.was-validated textarea.form-control:valid, textarea.form-control.is-valid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} -.form-select.is-valid, .was-validated .form-select:valid { - border-color: var(--bs-form-valid-border-color) -} -.form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"], .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"] { - --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - padding-right: 4.125rem; - background-position: right .75rem center, center right 2.25rem; - background-size: 16px 12px, calc(.75em + .375rem) calc(.75em + .375rem) -} -.form-select.is-valid:focus, .was-validated .form-select:valid:focus { - border-color: var(--bs-form-valid-border-color); - box-shadow: 0 0 0 .25rem rgba(var(--bs-success-rgb), .25) -} -.form-control-color.is-valid, .was-validated .form-control-color:valid { - width: calc(3rem + calc(1.5em + .75rem)) -} -.form-check-input.is-valid, .was-validated .form-check-input:valid { - border-color: var(--bs-form-valid-border-color) -} -.form-check-input.is-valid:checked, .was-validated .form-check-input:valid:checked { - background-color: var(--bs-form-valid-color) -} -.form-check-input.is-valid:focus, .was-validated .form-check-input:valid:focus { - box-shadow: 0 0 0 .25rem rgba(var(--bs-success-rgb), .25) -} -.form-check-input.is-valid~.form-check-label, .was-validated .form-check-input:valid~.form-check-label { - color: var(--bs-form-valid-color) -} -.form-check-inline .form-check-input~.valid-feedback { - margin-left: .5em -} -.input-group>.form-control:not(:focus).is-valid, .input-group>.form-floating:not(:focus-within).is-valid, .input-group>.form-select:not(:focus).is-valid, .was-validated .input-group>.form-control:not(:focus):valid, .was-validated .input-group>.form-floating:not(:focus-within):valid, .was-validated .input-group>.form-select:not(:focus):valid { - z-index: 3 -} -.invalid-feedback { - display: none; - width: 100%; - margin-top: .25rem; - font-size: .875em; - color: var(--bs-form-invalid-color) -} -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .25rem .5rem; - margin-top: .1rem; - font-size: .875rem; - color: #fff; - background-color: var(--bs-danger); - border-radius: var(--bs-border-radius) -} -.is-invalid~.invalid-feedback, .is-invalid~.invalid-tooltip, .was-validated :invalid~.invalid-feedback, .was-validated :invalid~.invalid-tooltip { - display: block -} -.form-control.is-invalid, .was-validated .form-control:invalid { - border-color: var(--bs-form-invalid-border-color); - padding-right: calc(1.5em + .75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(.375em + .1875rem) center; - background-size: calc(.75em + .375rem) calc(.75em + .375rem) -} -.form-control.is-invalid:focus, .was-validated .form-control:invalid:focus { - border-color: var(--bs-form-invalid-border-color); - box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25) -} -.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { - padding-right: calc(1.5em + .75rem); - background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem) -} -.form-select.is-invalid, .was-validated .form-select:invalid { - border-color: var(--bs-form-invalid-border-color) -} -.form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"], .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"] { - --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - padding-right: 4.125rem; - background-position: right .75rem center, center right 2.25rem; - background-size: 16px 12px, calc(.75em + .375rem) calc(.75em + .375rem) -} -.form-select.is-invalid:focus, .was-validated .form-select:invalid:focus { - border-color: var(--bs-form-invalid-border-color); - box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25) -} -.form-control-color.is-invalid, .was-validated .form-control-color:invalid { - width: calc(3rem + calc(1.5em + .75rem)) -} -.form-check-input.is-invalid, .was-validated .form-check-input:invalid { - border-color: var(--bs-form-invalid-border-color) -} -.form-check-input.is-invalid:checked, .was-validated .form-check-input:invalid:checked { - background-color: var(--bs-form-invalid-color) -} -.form-check-input.is-invalid:focus, .was-validated .form-check-input:invalid:focus { - box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb), .25) -} -.form-check-input.is-invalid~.form-check-label, .was-validated .form-check-input:invalid~.form-check-label { - color: var(--bs-form-invalid-color) -} -.form-check-inline .form-check-input~.invalid-feedback { - margin-left: .5em -} -.input-group>.form-control:not(:focus).is-invalid, .input-group>.form-floating:not(:focus-within).is-invalid, .input-group>.form-select:not(:focus).is-invalid, .was-validated .input-group>.form-control:not(:focus):invalid, .was-validated .input-group>.form-floating:not(:focus-within):invalid, .was-validated .input-group>.form-select:not(:focus):invalid { - z-index: 4 -} -.btn { - --bs-btn-padding-x: 0.75rem; - --bs-btn-padding-y: 0.375rem; - --bs-btn-font-family: ; - --bs-btn-font-size: 1rem; - --bs-btn-font-weight: 400; - --bs-btn-line-height: 1.5; - --bs-btn-color: var(--bs-body-color); - --bs-btn-bg: transparent; - --bs-btn-border-width: var(--bs-border-width); - --bs-btn-border-color: transparent; - --bs-btn-border-radius: var(--bs-border-radius); - --bs-btn-hover-border-color: transparent; - --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - --bs-btn-disabled-opacity: 0.65; - --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); - display: inline-block; - padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); - font-family: var(--bs-btn-font-family); - font-size: var(--bs-btn-font-size); - font-weight: var(--bs-btn-font-weight); - line-height: var(--bs-btn-line-height); - color: var(--bs-btn-color); - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); - border-radius: var(--bs-btn-border-radius); - background-color: var(--bs-btn-bg); - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .btn { - transition: none - } -} -.btn:hover { - color: var(--bs-btn-hover-color); - background-color: var(--bs-btn-hover-bg); - border-color: var(--bs-btn-hover-border-color) -} -.btn-check+.btn:hover { - color: var(--bs-btn-color); - background-color: var(--bs-btn-bg); - border-color: var(--bs-btn-border-color) -} -.btn:focus-visible { - color: var(--bs-btn-hover-color); - background-color: var(--bs-btn-hover-bg); - border-color: var(--bs-btn-hover-border-color); - outline: 0; - box-shadow: var(--bs-btn-focus-box-shadow) -} -.btn-check:focus-visible+.btn { - border-color: var(--bs-btn-hover-border-color); - outline: 0; - box-shadow: var(--bs-btn-focus-box-shadow) -} -.btn-check:checked+.btn, .btn.active, .btn.show, .btn:first-child:active, :not(.btn-check)+.btn:active { - color: var(--bs-btn-active-color); - background-color: var(--bs-btn-active-bg); - border-color: var(--bs-btn-active-border-color) -} -.btn-check:checked+.btn:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible, .btn:first-child:active:focus-visible, :not(.btn-check)+.btn:active:focus-visible { - box-shadow: var(--bs-btn-focus-box-shadow) -} -.btn-check:checked:focus-visible+.btn { - box-shadow: var(--bs-btn-focus-box-shadow) -} -.btn.disabled, .btn:disabled, fieldset:disabled .btn { - color: var(--bs-btn-disabled-color); - pointer-events: none; - background-color: var(--bs-btn-disabled-bg); - border-color: var(--bs-btn-disabled-border-color); - opacity: var(--bs-btn-disabled-opacity) -} -.btn-primary { - --bs-btn-color: #fff; - --bs-btn-bg: #0d6efd; - --bs-btn-border-color: #0d6efd; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #0b5ed7; - --bs-btn-hover-border-color: #0a58ca; - --bs-btn-focus-shadow-rgb: 49, 132, 253; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #0a58ca; - --bs-btn-active-border-color: #0a53be; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #0d6efd; - --bs-btn-disabled-border-color: #0d6efd -} -.btn-secondary { - --bs-btn-color: #fff; - --bs-btn-bg: #6c757d; - --bs-btn-border-color: #6c757d; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #5c636a; - --bs-btn-hover-border-color: #565e64; - --bs-btn-focus-shadow-rgb: 130, 138, 145; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #565e64; - --bs-btn-active-border-color: #51585e; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #6c757d; - --bs-btn-disabled-border-color: #6c757d -} -.btn-success { - --bs-btn-color: #fff; - --bs-btn-bg: #198754; - --bs-btn-border-color: #198754; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #157347; - --bs-btn-hover-border-color: #146c43; - --bs-btn-focus-shadow-rgb: 60, 153, 110; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #146c43; - --bs-btn-active-border-color: #13653f; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #198754; - --bs-btn-disabled-border-color: #198754 -} -.btn-info { - --bs-btn-color: #000; - --bs-btn-bg: #0dcaf0; - --bs-btn-border-color: #0dcaf0; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #31d2f2; - --bs-btn-hover-border-color: #25cff2; - --bs-btn-focus-shadow-rgb: 11, 172, 204; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #3dd5f3; - --bs-btn-active-border-color: #25cff2; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #0dcaf0; - --bs-btn-disabled-border-color: #0dcaf0 -} -.btn-warning { - --bs-btn-color: #000; - --bs-btn-bg: #ffc107; - --bs-btn-border-color: #ffc107; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #ffca2c; - --bs-btn-hover-border-color: #ffc720; - --bs-btn-focus-shadow-rgb: 217, 164, 6; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #ffcd39; - --bs-btn-active-border-color: #ffc720; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #ffc107; - --bs-btn-disabled-border-color: #ffc107 -} -.btn-danger { - --bs-btn-color: #fff; - --bs-btn-bg: #dc3545; - --bs-btn-border-color: #dc3545; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #bb2d3b; - --bs-btn-hover-border-color: #b02a37; - --bs-btn-focus-shadow-rgb: 225, 83, 97; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #b02a37; - --bs-btn-active-border-color: #a52834; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #dc3545; - --bs-btn-disabled-border-color: #dc3545 -} -.btn-light { - --bs-btn-color: #000; - --bs-btn-bg: #f8f9fa; - --bs-btn-border-color: #f8f9fa; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #d3d4d5; - --bs-btn-hover-border-color: #c6c7c8; - --bs-btn-focus-shadow-rgb: 211, 212, 213; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #c6c7c8; - --bs-btn-active-border-color: #babbbc; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #f8f9fa; - --bs-btn-disabled-border-color: #f8f9fa -} -.btn-dark { - --bs-btn-color: #fff; - --bs-btn-bg: #212529; - --bs-btn-border-color: #212529; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #424649; - --bs-btn-hover-border-color: #373b3e; - --bs-btn-focus-shadow-rgb: 66, 70, 73; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #4d5154; - --bs-btn-active-border-color: #373b3e; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #212529; - --bs-btn-disabled-border-color: #212529 -} -.btn-outline-primary { - --bs-btn-color: #0d6efd; - --bs-btn-border-color: #0d6efd; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #0d6efd; - --bs-btn-hover-border-color: #0d6efd; - --bs-btn-focus-shadow-rgb: 13, 110, 253; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #0d6efd; - --bs-btn-active-border-color: #0d6efd; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #0d6efd; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #0d6efd; - --bs-gradient: none -} -.btn-outline-secondary { - --bs-btn-color: #6c757d; - --bs-btn-border-color: #6c757d; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #6c757d; - --bs-btn-hover-border-color: #6c757d; - --bs-btn-focus-shadow-rgb: 108, 117, 125; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #6c757d; - --bs-btn-active-border-color: #6c757d; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #6c757d; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #6c757d; - --bs-gradient: none -} -.btn-outline-success { - --bs-btn-color: #198754; - --bs-btn-border-color: #198754; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #198754; - --bs-btn-hover-border-color: #198754; - --bs-btn-focus-shadow-rgb: 25, 135, 84; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #198754; - --bs-btn-active-border-color: #198754; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #198754; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #198754; - --bs-gradient: none -} -.btn-outline-info { - --bs-btn-color: #0dcaf0; - --bs-btn-border-color: #0dcaf0; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #0dcaf0; - --bs-btn-hover-border-color: #0dcaf0; - --bs-btn-focus-shadow-rgb: 13, 202, 240; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #0dcaf0; - --bs-btn-active-border-color: #0dcaf0; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #0dcaf0; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #0dcaf0; - --bs-gradient: none -} -.btn-outline-warning { - --bs-btn-color: #ffc107; - --bs-btn-border-color: #ffc107; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #ffc107; - --bs-btn-hover-border-color: #ffc107; - --bs-btn-focus-shadow-rgb: 255, 193, 7; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #ffc107; - --bs-btn-active-border-color: #ffc107; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #ffc107; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #ffc107; - --bs-gradient: none -} -.btn-outline-danger { - --bs-btn-color: #dc3545; - --bs-btn-border-color: #dc3545; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #dc3545; - --bs-btn-hover-border-color: #dc3545; - --bs-btn-focus-shadow-rgb: 220, 53, 69; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #dc3545; - --bs-btn-active-border-color: #dc3545; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #dc3545; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #dc3545; - --bs-gradient: none -} -.btn-outline-light { - --bs-btn-color: #f8f9fa; - --bs-btn-border-color: #f8f9fa; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #f8f9fa; - --bs-btn-hover-border-color: #f8f9fa; - --bs-btn-focus-shadow-rgb: 248, 249, 250; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #f8f9fa; - --bs-btn-active-border-color: #f8f9fa; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #f8f9fa; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #f8f9fa; - --bs-gradient: none -} -.btn-outline-dark { - --bs-btn-color: #212529; - --bs-btn-border-color: #212529; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #212529; - --bs-btn-hover-border-color: #212529; - --bs-btn-focus-shadow-rgb: 33, 37, 41; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #212529; - --bs-btn-active-border-color: #212529; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #212529; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #212529; - --bs-gradient: none -} -.btn-link { - --bs-btn-font-weight: 400; - --bs-btn-color: var(--bs-link-color); - --bs-btn-bg: transparent; - --bs-btn-border-color: transparent; - --bs-btn-hover-color: var(--bs-link-hover-color); - --bs-btn-hover-border-color: transparent; - --bs-btn-active-color: var(--bs-link-hover-color); - --bs-btn-active-border-color: transparent; - --bs-btn-disabled-color: #6c757d; - --bs-btn-disabled-border-color: transparent; - --bs-btn-box-shadow: 0 0 0 #000; - --bs-btn-focus-shadow-rgb: 49, 132, 253; - text-decoration: underline -} -.btn-link:focus-visible { - color: var(--bs-btn-color) -} -.btn-link:hover { - color: var(--bs-btn-hover-color) -} -.btn-group-lg>.btn, .btn-lg { - --bs-btn-padding-y: 0.5rem; - --bs-btn-padding-x: 1rem; - --bs-btn-font-size: 1.25rem; - --bs-btn-border-radius: var(--bs-border-radius-lg) -} -.btn-group-sm>.btn, .btn-sm { - --bs-btn-padding-y: 0.25rem; - --bs-btn-padding-x: 0.5rem; - --bs-btn-font-size: 0.875rem; - --bs-btn-border-radius: var(--bs-border-radius-sm) -} -.fade { - transition: opacity .15s linear -} -@media (prefers-reduced-motion:reduce) { - .fade { - transition: none - } -} -.fade:not(.show) { - opacity: 0 -} -.collapse:not(.show) { - display: none -} -.collapsing { - height: 0; - overflow: hidden; - transition: height .35s ease -} -@media (prefers-reduced-motion:reduce) { - .collapsing { - transition: none - } -} -.collapsing.collapse-horizontal { - width: 0; - height: auto; - transition: width .35s ease -} -@media (prefers-reduced-motion:reduce) { - .collapsing.collapse-horizontal { - transition: none - } -} -.dropdown, .dropdown-center, .dropend, .dropstart, .dropup, .dropup-center { - position: relative -} -.dropdown-toggle { - white-space: nowrap -} -.dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: ""; - border-top: .3em solid; - border-right: .3em solid transparent; - border-bottom: 0; - border-left: .3em solid transparent -} -.dropdown-toggle:empty::after { - margin-left: 0 -} -.dropdown-menu { - --bs-dropdown-zindex: 1000; - --bs-dropdown-min-width: 10rem; - --bs-dropdown-padding-x: 0; - --bs-dropdown-padding-y: 0.5rem; - --bs-dropdown-spacer: 0.125rem; - --bs-dropdown-font-size: 1rem; - --bs-dropdown-color: var(--bs-body-color); - --bs-dropdown-bg: var(--bs-body-bg); - --bs-dropdown-border-color: var(--bs-border-color-translucent); - --bs-dropdown-border-radius: var(--bs-border-radius); - --bs-dropdown-border-width: var(--bs-border-width); - --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); - --bs-dropdown-divider-bg: var(--bs-border-color-translucent); - --bs-dropdown-divider-margin-y: 0.5rem; - --bs-dropdown-box-shadow: var(--bs-box-shadow); - --bs-dropdown-link-color: var(--bs-body-color); - --bs-dropdown-link-hover-color: var(--bs-body-color); - --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); - --bs-dropdown-link-active-color: #fff; - --bs-dropdown-link-active-bg: #0d6efd; - --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); - --bs-dropdown-item-padding-x: 1rem; - --bs-dropdown-item-padding-y: 0.25rem; - --bs-dropdown-header-color: #6c757d; - --bs-dropdown-header-padding-x: 1rem; - --bs-dropdown-header-padding-y: 0.5rem; - position: absolute; - z-index: var(--bs-dropdown-zindex); - display: none; - min-width: var(--bs-dropdown-min-width); - padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); - margin: 0; - font-size: var(--bs-dropdown-font-size); - color: var(--bs-dropdown-color); - text-align: left; - list-style: none; - background-color: var(--bs-dropdown-bg); - background-clip: padding-box; - border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); - border-radius: var(--bs-dropdown-border-radius) -} -.dropdown-menu[data-bs-popper] { - top: 100%; - left: 0; - margin-top: var(--bs-dropdown-spacer) -} -.dropdown-menu-start { - --bs-position: start -} -.dropdown-menu-start[data-bs-popper] { - right: auto; - left: 0 -} -.dropdown-menu-end { - --bs-position: end -} -.dropdown-menu-end[data-bs-popper] { - right: 0; - left: auto -} -@media (min-width:576px) { - .dropdown-menu-sm-start { - --bs-position: start - } - .dropdown-menu-sm-start[data-bs-popper] { - right: auto; - left: 0 - } - .dropdown-menu-sm-end { - --bs-position: end - } - .dropdown-menu-sm-end[data-bs-popper] { - right: 0; - left: auto - } -} -@media (min-width:768px) { - .dropdown-menu-md-start { - --bs-position: start - } - .dropdown-menu-md-start[data-bs-popper] { - right: auto; - left: 0 - } - .dropdown-menu-md-end { - --bs-position: end - } - .dropdown-menu-md-end[data-bs-popper] { - right: 0; - left: auto - } -} -@media (min-width:992px) { - .dropdown-menu-lg-start { - --bs-position: start - } - .dropdown-menu-lg-start[data-bs-popper] { - right: auto; - left: 0 - } - .dropdown-menu-lg-end { - --bs-position: end - } - .dropdown-menu-lg-end[data-bs-popper] { - right: 0; - left: auto - } -} -@media (min-width:1200px) { - .dropdown-menu-xl-start { - --bs-position: start - } - .dropdown-menu-xl-start[data-bs-popper] { - right: auto; - left: 0 - } - .dropdown-menu-xl-end { - --bs-position: end - } - .dropdown-menu-xl-end[data-bs-popper] { - right: 0; - left: auto - } -} -@media (min-width:1400px) { - .dropdown-menu-xxl-start { - --bs-position: start - } - .dropdown-menu-xxl-start[data-bs-popper] { - right: auto; - left: 0 - } - .dropdown-menu-xxl-end { - --bs-position: end - } - .dropdown-menu-xxl-end[data-bs-popper] { - right: 0; - left: auto - } -} -.dropup .dropdown-menu[data-bs-popper] { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: var(--bs-dropdown-spacer) -} -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: ""; - border-top: 0; - border-right: .3em solid transparent; - border-bottom: .3em solid; - border-left: .3em solid transparent -} -.dropup .dropdown-toggle:empty::after { - margin-left: 0 -} -.dropend .dropdown-menu[data-bs-popper] { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: var(--bs-dropdown-spacer) -} -.dropend .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: ""; - border-top: .3em solid transparent; - border-right: 0; - border-bottom: .3em solid transparent; - border-left: .3em solid -} -.dropend .dropdown-toggle:empty::after { - margin-left: 0 -} -.dropend .dropdown-toggle::after { - vertical-align: 0 -} -.dropstart .dropdown-menu[data-bs-popper] { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: var(--bs-dropdown-spacer) -} -.dropstart .dropdown-toggle::after { - display: inline-block; - margin-left: .255em; - vertical-align: .255em; - content: "" -} -.dropstart .dropdown-toggle::after { - display: none -} -.dropstart .dropdown-toggle::before { - display: inline-block; - margin-right: .255em; - vertical-align: .255em; - content: ""; - border-top: .3em solid transparent; - border-right: .3em solid; - border-bottom: .3em solid transparent -} -.dropstart .dropdown-toggle:empty::after { - margin-left: 0 -} -.dropstart .dropdown-toggle::before { - vertical-align: 0 -} -.dropdown-divider { - height: 0; - margin: var(--bs-dropdown-divider-margin-y) 0; - overflow: hidden; - border-top: 1px solid var(--bs-dropdown-divider-bg); - opacity: 1 -} -.dropdown-item { - display: block; - width: 100%; - padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); - clear: both; - font-weight: 400; - color: var(--bs-dropdown-link-color); - text-align: inherit; - text-decoration: none; - white-space: nowrap; - background-color: transparent; - border: 0; - border-radius: var(--bs-dropdown-item-border-radius, 0) -} -.dropdown-item:focus, .dropdown-item:hover { - color: var(--bs-dropdown-link-hover-color); - background-color: var(--bs-dropdown-link-hover-bg) -} -.dropdown-item.active, .dropdown-item:active { - color: var(--bs-dropdown-link-active-color); - text-decoration: none; - background-color: var(--bs-dropdown-link-active-bg) -} -.dropdown-item.disabled, .dropdown-item:disabled { - color: var(--bs-dropdown-link-disabled-color); - pointer-events: none; - background-color: transparent -} -.dropdown-menu.show { - display: block -} -.dropdown-header { - display: block; - padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); - margin-bottom: 0; - font-size: .875rem; - color: var(--bs-dropdown-header-color); - white-space: nowrap -} -.dropdown-item-text { - display: block; - padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); - color: var(--bs-dropdown-link-color) -} -.dropdown-menu-dark { - --bs-dropdown-color: #dee2e6; - --bs-dropdown-bg: #343a40; - --bs-dropdown-border-color: var(--bs-border-color-translucent); - --bs-dropdown-box-shadow: ; - --bs-dropdown-link-color: #dee2e6; - --bs-dropdown-link-hover-color: #fff; - --bs-dropdown-divider-bg: var(--bs-border-color-translucent); - --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); - --bs-dropdown-link-active-color: #fff; - --bs-dropdown-link-active-bg: #0d6efd; - --bs-dropdown-link-disabled-color: #adb5bd; - --bs-dropdown-header-color: #adb5bd -} -.btn-group, .btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle -} -.btn-group-vertical>.btn, .btn-group>.btn { - position: relative; - flex: 1 1 auto -} -.btn-group-vertical>.btn-check:checked+.btn, .btn-group-vertical>.btn-check:focus+.btn, .btn-group-vertical>.btn.active, .btn-group-vertical>.btn:active, .btn-group-vertical>.btn:focus, .btn-group-vertical>.btn:hover, .btn-group>.btn-check:checked+.btn, .btn-group>.btn-check:focus+.btn, .btn-group>.btn.active, .btn-group>.btn:active, .btn-group>.btn:focus, .btn-group>.btn:hover { - z-index: 1 -} -.btn-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: flex-start -} -.btn-toolbar .input-group { - width: auto -} -.btn-group { - border-radius: var(--bs-border-radius) -} -.btn-group>.btn-group:not(:first-child), .btn-group>:not(.btn-check:first-child)+.btn { - margin-left: calc(var(--bs-border-width) * -1) -} -.btn-group>.btn-group:not(:last-child)>.btn, .btn-group>.btn.dropdown-toggle-split:first-child, .btn-group>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} -.btn-group>.btn-group:not(:first-child)>.btn, .btn-group>.btn:nth-child(n+3), .btn-group>:not(.btn-check)+.btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} -.dropdown-toggle-split { - padding-right: .5625rem; - padding-left: .5625rem -} -.dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after { - margin-left: 0 -} -.dropstart .dropdown-toggle-split::before { - margin-right: 0 -} -.btn-group-sm>.btn+.dropdown-toggle-split, .btn-sm+.dropdown-toggle-split { - padding-right: .375rem; - padding-left: .375rem -} -.btn-group-lg>.btn+.dropdown-toggle-split, .btn-lg+.dropdown-toggle-split { - padding-right: .75rem; - padding-left: .75rem -} -.btn-group-vertical { - flex-direction: column; - align-items: flex-start; - justify-content: center -} -.btn-group-vertical>.btn, .btn-group-vertical>.btn-group { - width: 100% -} -.btn-group-vertical>.btn-group:not(:first-child), .btn-group-vertical>.btn:not(:first-child) { - margin-top: calc(var(--bs-border-width) * -1) -} -.btn-group-vertical>.btn-group:not(:last-child)>.btn, .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} -.btn-group-vertical>.btn-group:not(:first-child)>.btn, .btn-group-vertical>.btn~.btn { - border-top-left-radius: 0; - border-top-right-radius: 0 -} -.nav { - --bs-nav-link-padding-x: 1rem; - --bs-nav-link-padding-y: 0.5rem; - --bs-nav-link-font-weight: ; - --bs-nav-link-color: var(--bs-link-color); - --bs-nav-link-hover-color: var(--bs-link-hover-color); - --bs-nav-link-disabled-color: var(--bs-secondary-color); - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none -} -.nav-link { - display: block; - padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); - font-size: var(--bs-nav-link-font-size); - font-weight: var(--bs-nav-link-font-weight); - color: var(--bs-nav-link-color); - text-decoration: none; - background: 0 0; - border: 0; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .nav-link { - transition: none - } -} -.nav-link:focus, .nav-link:hover { - color: var(--bs-nav-link-hover-color) -} -.nav-link:focus-visible { - outline: 0; - box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25) -} -.nav-link.disabled, .nav-link:disabled { - color: var(--bs-nav-link-disabled-color); - pointer-events: none; - cursor: default -} -.nav-tabs { - --bs-nav-tabs-border-width: var(--bs-border-width); - --bs-nav-tabs-border-color: var(--bs-border-color); - --bs-nav-tabs-border-radius: var(--bs-border-radius); - --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); - --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); - --bs-nav-tabs-link-active-bg: var(--bs-body-bg); - --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); - border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color) -} -.nav-tabs .nav-link { - margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); - border: var(--bs-nav-tabs-border-width) solid transparent; - border-top-left-radius: var(--bs-nav-tabs-border-radius); - border-top-right-radius: var(--bs-nav-tabs-border-radius) -} -.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { - isolation: isolate; - border-color: var(--bs-nav-tabs-link-hover-border-color) -} -.nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active { - color: var(--bs-nav-tabs-link-active-color); - background-color: var(--bs-nav-tabs-link-active-bg); - border-color: var(--bs-nav-tabs-link-active-border-color) -} -.nav-tabs .dropdown-menu { - margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); - border-top-left-radius: 0; - border-top-right-radius: 0 -} -.nav-pills { - --bs-nav-pills-border-radius: var(--bs-border-radius); - --bs-nav-pills-link-active-color: #fff; - --bs-nav-pills-link-active-bg: #0d6efd -} -.nav-pills .nav-link { - border-radius: var(--bs-nav-pills-border-radius) -} -.nav-pills .nav-link.active, .nav-pills .show>.nav-link { - color: var(--bs-nav-pills-link-active-color); - background-color: var(--bs-nav-pills-link-active-bg) -} -.nav-underline { - --bs-nav-underline-gap: 1rem; - --bs-nav-underline-border-width: 0.125rem; - --bs-nav-underline-link-active-color: var(--bs-emphasis-color); - gap: var(--bs-nav-underline-gap) -} -.nav-underline .nav-link { - padding-right: 0; - padding-left: 0; - border-bottom: var(--bs-nav-underline-border-width) solid transparent -} -.nav-underline .nav-link:focus, .nav-underline .nav-link:hover { - border-bottom-color: currentcolor -} -.nav-underline .nav-link.active, .nav-underline .show>.nav-link { - font-weight: 700; - color: var(--bs-nav-underline-link-active-color); - border-bottom-color: currentcolor -} -.nav-fill .nav-item, .nav-fill>.nav-link { - flex: 1 1 auto; - text-align: center -} -.nav-justified .nav-item, .nav-justified>.nav-link { - flex-basis: 0; - flex-grow: 1; - text-align: center -} -.nav-fill .nav-item .nav-link, .nav-justified .nav-item .nav-link { - width: 100% -} -.tab-content>.tab-pane { - display: none -} -.tab-content>.active { - display: block -} -.navbar { - --bs-navbar-padding-x: 0; - --bs-navbar-padding-y: 0.5rem; - --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); - --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); - --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); - --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); - --bs-navbar-brand-padding-y: 0.3125rem; - --bs-navbar-brand-margin-end: 1rem; - --bs-navbar-brand-font-size: 1.25rem; - --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); - --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); - --bs-navbar-nav-link-padding-x: 0.5rem; - --bs-navbar-toggler-padding-y: 0.25rem; - --bs-navbar-toggler-padding-x: 0.75rem; - --bs-navbar-toggler-font-size: 1.25rem; - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); - --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); - --bs-navbar-toggler-border-radius: var(--bs-border-radius); - --bs-navbar-toggler-focus-width: 0.25rem; - --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; - position: relative; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x) -} -.navbar>.container, .navbar>.container-fluid, .navbar>.container-lg, .navbar>.container-md, .navbar>.container-sm, .navbar>.container-xl, .navbar>.container-xxl { - display: flex; - flex-wrap: inherit; - align-items: center; - justify-content: space-between -} -.navbar-brand { - padding-top: var(--bs-navbar-brand-padding-y); - padding-bottom: var(--bs-navbar-brand-padding-y); - margin-right: var(--bs-navbar-brand-margin-end); - font-size: var(--bs-navbar-brand-font-size); - color: var(--bs-navbar-brand-color); - text-decoration: none; - white-space: nowrap -} -.navbar-brand:focus, .navbar-brand:hover { - color: var(--bs-navbar-brand-hover-color) -} -.navbar-nav { - --bs-nav-link-padding-x: 0; - --bs-nav-link-padding-y: 0.5rem; - --bs-nav-link-font-weight: ; - --bs-nav-link-color: var(--bs-navbar-color); - --bs-nav-link-hover-color: var(--bs-navbar-hover-color); - --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none -} -.navbar-nav .nav-link.active, .navbar-nav .nav-link.show { - color: var(--bs-navbar-active-color) -} -.navbar-nav .dropdown-menu { - position: static -} -.navbar-text { - padding-top: .5rem; - padding-bottom: .5rem; - color: var(--bs-navbar-color) -} -.navbar-text a, .navbar-text a:focus, .navbar-text a:hover { - color: var(--bs-navbar-active-color) -} -.navbar-collapse { - flex-basis: 100%; - flex-grow: 1; - align-items: center -} -.navbar-toggler { - padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); - font-size: var(--bs-navbar-toggler-font-size); - line-height: 1; - color: var(--bs-navbar-color); - background-color: transparent; - border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); - border-radius: var(--bs-navbar-toggler-border-radius); - transition: var(--bs-navbar-toggler-transition) -} -@media (prefers-reduced-motion:reduce) { - .navbar-toggler { - transition: none - } -} -.navbar-toggler:hover { - text-decoration: none -} -.navbar-toggler:focus { - text-decoration: none; - outline: 0; - box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width) -} -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - background-image: var(--bs-navbar-toggler-icon-bg); - background-repeat: no-repeat; - background-position: center; - background-size: 100% -} -.navbar-nav-scroll { - max-height: var(--bs-scroll-height, 75vh); - overflow-y: auto -} -@media (min-width:576px) { - .navbar-expand-sm { - flex-wrap: nowrap; - justify-content: flex-start - } - .navbar-expand-sm .navbar-nav { - flex-direction: row - } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute - } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x) - } - .navbar-expand-sm .navbar-nav-scroll { - overflow: visible - } - .navbar-expand-sm .navbar-collapse { - display: flex!important; - flex-basis: auto - } - .navbar-expand-sm .navbar-toggler { - display: none - } - .navbar-expand-sm .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto!important; - height: auto!important; - visibility: visible!important; - background-color: transparent!important; - border: 0!important; - transform: none!important; - transition: none - } - .navbar-expand-sm .offcanvas .offcanvas-header { - display: none - } - .navbar-expand-sm .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible - } -} -@media (min-width:768px) { - .navbar-expand-md { - flex-wrap: nowrap; - justify-content: flex-start - } - .navbar-expand-md .navbar-nav { - flex-direction: row - } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute - } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x) - } - .navbar-expand-md .navbar-nav-scroll { - overflow: visible - } - .navbar-expand-md .navbar-collapse { - display: flex!important; - flex-basis: auto - } - .navbar-expand-md .navbar-toggler { - display: none - } - .navbar-expand-md .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto!important; - height: auto!important; - visibility: visible!important; - background-color: transparent!important; - border: 0!important; - transform: none!important; - transition: none - } - .navbar-expand-md .offcanvas .offcanvas-header { - display: none - } - .navbar-expand-md .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible - } -} -@media (min-width:992px) { - .navbar-expand-lg { - flex-wrap: nowrap; - justify-content: flex-start - } - .navbar-expand-lg .navbar-nav { - flex-direction: row - } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute - } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x) - } - .navbar-expand-lg .navbar-nav-scroll { - overflow: visible - } - .navbar-expand-lg .navbar-collapse { - display: flex!important; - flex-basis: auto - } - .navbar-expand-lg .navbar-toggler { - display: none - } - .navbar-expand-lg .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto!important; - height: auto!important; - visibility: visible!important; - background-color: transparent!important; - border: 0!important; - transform: none!important; - transition: none - } - .navbar-expand-lg .offcanvas .offcanvas-header { - display: none - } - .navbar-expand-lg .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible - } -} -@media (min-width:1200px) { - .navbar-expand-xl { - flex-wrap: nowrap; - justify-content: flex-start - } - .navbar-expand-xl .navbar-nav { - flex-direction: row - } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute - } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x) - } - .navbar-expand-xl .navbar-nav-scroll { - overflow: visible - } - .navbar-expand-xl .navbar-collapse { - display: flex!important; - flex-basis: auto - } - .navbar-expand-xl .navbar-toggler { - display: none - } - .navbar-expand-xl .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto!important; - height: auto!important; - visibility: visible!important; - background-color: transparent!important; - border: 0!important; - transform: none!important; - transition: none - } - .navbar-expand-xl .offcanvas .offcanvas-header { - display: none - } - .navbar-expand-xl .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible - } -} -@media (min-width:1400px) { - .navbar-expand-xxl { - flex-wrap: nowrap; - justify-content: flex-start - } - .navbar-expand-xxl .navbar-nav { - flex-direction: row - } - .navbar-expand-xxl .navbar-nav .dropdown-menu { - position: absolute - } - .navbar-expand-xxl .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x) - } - .navbar-expand-xxl .navbar-nav-scroll { - overflow: visible - } - .navbar-expand-xxl .navbar-collapse { - display: flex!important; - flex-basis: auto - } - .navbar-expand-xxl .navbar-toggler { - display: none - } - .navbar-expand-xxl .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto!important; - height: auto!important; - visibility: visible!important; - background-color: transparent!important; - border: 0!important; - transform: none!important; - transition: none - } - .navbar-expand-xxl .offcanvas .offcanvas-header { - display: none - } - .navbar-expand-xxl .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible - } -} -.navbar-expand { - flex-wrap: nowrap; - justify-content: flex-start -} -.navbar-expand .navbar-nav { - flex-direction: row -} -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute -} -.navbar-expand .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x) -} -.navbar-expand .navbar-nav-scroll { - overflow: visible -} -.navbar-expand .navbar-collapse { - display: flex!important; - flex-basis: auto -} -.navbar-expand .navbar-toggler { - display: none -} -.navbar-expand .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto!important; - height: auto!important; - visibility: visible!important; - background-color: transparent!important; - border: 0!important; - transform: none!important; - transition: none -} -.navbar-expand .offcanvas .offcanvas-header { - display: none -} -.navbar-expand .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible -} -.navbar-dark, .navbar[data-bs-theme=dark] { - --bs-navbar-color: rgba(255, 255, 255, 0.55); - --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); - --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); - --bs-navbar-active-color: #fff; - --bs-navbar-brand-color: #fff; - --bs-navbar-brand-hover-color: #fff; - --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") -} -[data-bs-theme=dark] .navbar-toggler-icon { - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") -} -.card { - --bs-card-spacer-y: 1rem; - --bs-card-spacer-x: 1rem; - --bs-card-title-spacer-y: 0.5rem; - --bs-card-title-color: ; - --bs-card-subtitle-color: ; - --bs-card-border-width: var(--bs-border-width); - --bs-card-border-color: var(--bs-border-color-translucent); - --bs-card-border-radius: var(--bs-border-radius); - --bs-card-box-shadow: ; - --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); - --bs-card-cap-padding-y: 0.5rem; - --bs-card-cap-padding-x: 1rem; - --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); - --bs-card-cap-color: ; - --bs-card-height: ; - --bs-card-color: ; - --bs-card-bg: var(--bs-body-bg); - --bs-card-img-overlay-padding: 1rem; - --bs-card-group-margin: 0.75rem; - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - height: var(--bs-card-height); - color: var(--bs-body-color); - word-wrap: break-word; - background-color: var(--bs-card-bg); - background-clip: border-box; - border: var(--bs-card-border-width) solid var(--bs-card-border-color); - border-radius: var(--bs-card-border-radius) -} -.card>hr { - margin-right: 0; - margin-left: 0 -} -.card>.list-group { - border-top: inherit; - border-bottom: inherit -} -.card>.list-group:first-child { - border-top-width: 0; - border-top-left-radius: var(--bs-card-inner-border-radius); - border-top-right-radius: var(--bs-card-inner-border-radius) -} -.card>.list-group:last-child { - border-bottom-width: 0; - border-bottom-right-radius: var(--bs-card-inner-border-radius); - border-bottom-left-radius: var(--bs-card-inner-border-radius) -} -.card>.card-header+.list-group, .card>.list-group+.card-footer { - border-top: 0 -} -.card-body { - flex: 1 1 auto; - padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); - color: var(--bs-card-color) -} -.card-title { - margin-bottom: var(--bs-card-title-spacer-y); - color: var(--bs-card-title-color) -} -.card-subtitle { - margin-top: calc(-.5 * var(--bs-card-title-spacer-y)); - margin-bottom: 0; - color: var(--bs-card-subtitle-color) -} -.card-text:last-child { - margin-bottom: 0 -} -.card-link+.card-link { - margin-left: var(--bs-card-spacer-x) -} -.card-header { - padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); - margin-bottom: 0; - color: var(--bs-card-cap-color); - background-color: var(--bs-card-cap-bg); - border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color) -} -.card-header:first-child { - border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0 -} -.card-footer { - padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); - color: var(--bs-card-cap-color); - background-color: var(--bs-card-cap-bg); - border-top: var(--bs-card-border-width) solid var(--bs-card-border-color) -} -.card-footer:last-child { - border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) -} -.card-header-tabs { - margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); - margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); - margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); - border-bottom: 0 -} -.card-header-tabs .nav-link.active { - background-color: var(--bs-card-bg); - border-bottom-color: var(--bs-card-bg) -} -.card-header-pills { - margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); - margin-left: calc(-.5 * var(--bs-card-cap-padding-x)) -} -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: var(--bs-card-img-overlay-padding); - border-radius: var(--bs-card-inner-border-radius) -} -.card-img, .card-img-bottom, .card-img-top { - width: 100% -} -.card-img, .card-img-top { - border-top-left-radius: var(--bs-card-inner-border-radius); - border-top-right-radius: var(--bs-card-inner-border-radius) -} -.card-img, .card-img-bottom { - border-bottom-right-radius: var(--bs-card-inner-border-radius); - border-bottom-left-radius: var(--bs-card-inner-border-radius) -} -.card-group>.card { - margin-bottom: var(--bs-card-group-margin) -} -@media (min-width:576px) { - .card-group { - display: flex; - flex-flow: row wrap - } - .card-group>.card { - flex: 1 0 0%; - margin-bottom: 0 - } - .card-group>.card+.card { - margin-left: 0; - border-left: 0 - } - .card-group>.card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 - } - .card-group>.card:not(:last-child) .card-header, .card-group>.card:not(:last-child) .card-img-top { - border-top-right-radius: 0 - } - .card-group>.card:not(:last-child) .card-footer, .card-group>.card:not(:last-child) .card-img-bottom { - border-bottom-right-radius: 0 - } - .card-group>.card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 - } - .card-group>.card:not(:first-child) .card-header, .card-group>.card:not(:first-child) .card-img-top { - border-top-left-radius: 0 - } - .card-group>.card:not(:first-child) .card-footer, .card-group>.card:not(:first-child) .card-img-bottom { - border-bottom-left-radius: 0 - } -} -.accordion { - --bs-accordion-color: var(--bs-body-color); - --bs-accordion-bg: var(--bs-body-bg); - --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; - --bs-accordion-border-color: var(--bs-border-color); - --bs-accordion-border-width: var(--bs-border-width); - --bs-accordion-border-radius: var(--bs-border-radius); - --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); - --bs-accordion-btn-padding-x: 1.25rem; - --bs-accordion-btn-padding-y: 1rem; - --bs-accordion-btn-color: var(--bs-body-color); - --bs-accordion-btn-bg: var(--bs-accordion-bg); - --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); - --bs-accordion-btn-icon-width: 1.25rem; - --bs-accordion-btn-icon-transform: rotate(-180deg); - --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; - --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); - --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - --bs-accordion-body-padding-x: 1.25rem; - --bs-accordion-body-padding-y: 1rem; - --bs-accordion-active-color: var(--bs-primary-text-emphasis); - --bs-accordion-active-bg: var(--bs-primary-bg-subtle) -} -.accordion-button { - position: relative; - display: flex; - align-items: center; - width: 100%; - padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); - font-size: 1rem; - color: var(--bs-accordion-btn-color); - text-align: left; - background-color: var(--bs-accordion-btn-bg); - border: 0; - border-radius: 0; - overflow-anchor: none; - transition: var(--bs-accordion-transition) -} -@media (prefers-reduced-motion:reduce) { - .accordion-button { - transition: none - } -} -.accordion-button:not(.collapsed) { - color: var(--bs-accordion-active-color); - background-color: var(--bs-accordion-active-bg); - box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color) -} -.accordion-button:not(.collapsed)::after { - background-image: var(--bs-accordion-btn-active-icon); - transform: var(--bs-accordion-btn-icon-transform) -} -.accordion-button::after { - flex-shrink: 0; - width: var(--bs-accordion-btn-icon-width); - height: var(--bs-accordion-btn-icon-width); - margin-left: auto; - content: ""; - background-image: var(--bs-accordion-btn-icon); - background-repeat: no-repeat; - background-size: var(--bs-accordion-btn-icon-width); - transition: var(--bs-accordion-btn-icon-transition) -} -@media (prefers-reduced-motion:reduce) { - .accordion-button::after { - transition: none - } -} -.accordion-button:hover { - z-index: 2 -} -.accordion-button:focus { - z-index: 3; - outline: 0; - box-shadow: var(--bs-accordion-btn-focus-box-shadow) -} -.accordion-header { - margin-bottom: 0 -} -.accordion-item { - color: var(--bs-accordion-color); - background-color: var(--bs-accordion-bg); - border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color) -} -.accordion-item:first-of-type { - border-top-left-radius: var(--bs-accordion-border-radius); - border-top-right-radius: var(--bs-accordion-border-radius) -} -.accordion-item:first-of-type>.accordion-header .accordion-button { - border-top-left-radius: var(--bs-accordion-inner-border-radius); - border-top-right-radius: var(--bs-accordion-inner-border-radius) -} -.accordion-item:not(:first-of-type) { - border-top: 0 -} -.accordion-item:last-of-type { - border-bottom-right-radius: var(--bs-accordion-border-radius); - border-bottom-left-radius: var(--bs-accordion-border-radius) -} -.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed { - border-bottom-right-radius: var(--bs-accordion-inner-border-radius); - border-bottom-left-radius: var(--bs-accordion-inner-border-radius) -} -.accordion-item:last-of-type>.accordion-collapse { - border-bottom-right-radius: var(--bs-accordion-border-radius); - border-bottom-left-radius: var(--bs-accordion-border-radius) -} -.accordion-body { - padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x) -} -.accordion-flush>.accordion-item { - border-right: 0; - border-left: 0; - border-radius: 0 -} -.accordion-flush>.accordion-item:first-child { - border-top: 0 -} -.accordion-flush>.accordion-item:last-child { - border-bottom: 0 -} -.accordion-flush>.accordion-item>.accordion-header .accordion-button, .accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed { - border-radius: 0 -} -.accordion-flush>.accordion-item>.accordion-collapse { - border-radius: 0 -} -[data-bs-theme=dark] .accordion-button::after { - --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") -} -.breadcrumb { - --bs-breadcrumb-padding-x: 0; - --bs-breadcrumb-padding-y: 0; - --bs-breadcrumb-margin-bottom: 1rem; - --bs-breadcrumb-bg: ; - --bs-breadcrumb-border-radius: ; - --bs-breadcrumb-divider-color: var(--bs-secondary-color); - --bs-breadcrumb-item-padding-x: 0.5rem; - --bs-breadcrumb-item-active-color: var(--bs-secondary-color); - display: flex; - flex-wrap: wrap; - padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); - margin-bottom: var(--bs-breadcrumb-margin-bottom); - font-size: var(--bs-breadcrumb-font-size); - list-style: none; - background-color: var(--bs-breadcrumb-bg); - border-radius: var(--bs-breadcrumb-border-radius) -} -.breadcrumb-item+.breadcrumb-item { - padding-left: var(--bs-breadcrumb-item-padding-x) -} -.breadcrumb-item+.breadcrumb-item::before { - float: left; - padding-right: var(--bs-breadcrumb-item-padding-x); - color: var(--bs-breadcrumb-divider-color); - content: var(--bs-breadcrumb-divider, "/") -} -.breadcrumb-item.active { - color: var(--bs-breadcrumb-item-active-color) -} -.pagination { - --bs-pagination-padding-x: 0.75rem; - --bs-pagination-padding-y: 0.375rem; - --bs-pagination-font-size: 1rem; - --bs-pagination-color: var(--bs-link-color); - --bs-pagination-bg: var(--bs-body-bg); - --bs-pagination-border-width: var(--bs-border-width); - --bs-pagination-border-color: var(--bs-border-color); - --bs-pagination-border-radius: var(--bs-border-radius); - --bs-pagination-hover-color: var(--bs-link-hover-color); - --bs-pagination-hover-bg: var(--bs-tertiary-bg); - --bs-pagination-hover-border-color: var(--bs-border-color); - --bs-pagination-focus-color: var(--bs-link-hover-color); - --bs-pagination-focus-bg: var(--bs-secondary-bg); - --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - --bs-pagination-active-color: #fff; - --bs-pagination-active-bg: #0d6efd; - --bs-pagination-active-border-color: #0d6efd; - --bs-pagination-disabled-color: var(--bs-secondary-color); - --bs-pagination-disabled-bg: var(--bs-secondary-bg); - --bs-pagination-disabled-border-color: var(--bs-border-color); - display: flex; - padding-left: 0; - list-style: none -} -.page-link { - position: relative; - display: block; - padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); - font-size: var(--bs-pagination-font-size); - color: var(--bs-pagination-color); - text-decoration: none; - background-color: var(--bs-pagination-bg); - border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .page-link { - transition: none - } -} -.page-link:hover { - z-index: 2; - color: var(--bs-pagination-hover-color); - background-color: var(--bs-pagination-hover-bg); - border-color: var(--bs-pagination-hover-border-color) -} -.page-link:focus { - z-index: 3; - color: var(--bs-pagination-focus-color); - background-color: var(--bs-pagination-focus-bg); - outline: 0; - box-shadow: var(--bs-pagination-focus-box-shadow) -} -.active>.page-link, .page-link.active { - z-index: 3; - color: var(--bs-pagination-active-color); - background-color: var(--bs-pagination-active-bg); - border-color: var(--bs-pagination-active-border-color) -} -.disabled>.page-link, .page-link.disabled { - color: var(--bs-pagination-disabled-color); - pointer-events: none; - background-color: var(--bs-pagination-disabled-bg); - border-color: var(--bs-pagination-disabled-border-color) -} -.page-item:not(:first-child) .page-link { - margin-left: calc(var(--bs-border-width) * -1) -} -.page-item:first-child .page-link { - border-top-left-radius: var(--bs-pagination-border-radius); - border-bottom-left-radius: var(--bs-pagination-border-radius) -} -.page-item:last-child .page-link { - border-top-right-radius: var(--bs-pagination-border-radius); - border-bottom-right-radius: var(--bs-pagination-border-radius) -} -.pagination-lg { - --bs-pagination-padding-x: 1.5rem; - --bs-pagination-padding-y: 0.75rem; - --bs-pagination-font-size: 1.25rem; - --bs-pagination-border-radius: var(--bs-border-radius-lg) -} -.pagination-sm { - --bs-pagination-padding-x: 0.5rem; - --bs-pagination-padding-y: 0.25rem; - --bs-pagination-font-size: 0.875rem; - --bs-pagination-border-radius: var(--bs-border-radius-sm) -} -.badge { - --bs-badge-padding-x: 0.65em; - --bs-badge-padding-y: 0.35em; - --bs-badge-font-size: 0.75em; - --bs-badge-font-weight: 700; - --bs-badge-color: #fff; - --bs-badge-border-radius: var(--bs-border-radius); - display: inline-block; - padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); - font-size: var(--bs-badge-font-size); - font-weight: var(--bs-badge-font-weight); - line-height: 1; - color: var(--bs-badge-color); - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: var(--bs-badge-border-radius) -} -.badge:empty { - display: none -} -.btn .badge { - position: relative; - top: -1px -} -.alert { - --bs-alert-bg: transparent; - --bs-alert-padding-x: 1rem; - --bs-alert-padding-y: 1rem; - --bs-alert-margin-bottom: 1rem; - --bs-alert-color: inherit; - --bs-alert-border-color: transparent; - --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); - --bs-alert-border-radius: var(--bs-border-radius); - --bs-alert-link-color: inherit; - position: relative; - padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); - margin-bottom: var(--bs-alert-margin-bottom); - color: var(--bs-alert-color); - background-color: var(--bs-alert-bg); - border: var(--bs-alert-border); - border-radius: var(--bs-alert-border-radius) -} -.alert-heading { - color: inherit -} -.alert-link { - font-weight: 700; - color: var(--bs-alert-link-color) -} -.alert-dismissible { - padding-right: 3rem -} -.alert-dismissible .btn-close { - position: absolute; - top: 0; - right: 0; - z-index: 2; - padding: 1.25rem 1rem -} -.alert-primary { - --bs-alert-color: var(--bs-primary-text-emphasis); - --bs-alert-bg: var(--bs-primary-bg-subtle); - --bs-alert-border-color: var(--bs-primary-border-subtle); - --bs-alert-link-color: var(--bs-primary-text-emphasis) -} -.alert-secondary { - --bs-alert-color: var(--bs-secondary-text-emphasis); - --bs-alert-bg: var(--bs-secondary-bg-subtle); - --bs-alert-border-color: var(--bs-secondary-border-subtle); - --bs-alert-link-color: var(--bs-secondary-text-emphasis) -} -.alert-success { - --bs-alert-color: var(--bs-success-text-emphasis); - --bs-alert-bg: var(--bs-success-bg-subtle); - --bs-alert-border-color: var(--bs-success-border-subtle); - --bs-alert-link-color: var(--bs-success-text-emphasis) -} -.alert-info { - --bs-alert-color: var(--bs-info-text-emphasis); - --bs-alert-bg: var(--bs-info-bg-subtle); - --bs-alert-border-color: var(--bs-info-border-subtle); - --bs-alert-link-color: var(--bs-info-text-emphasis) -} -.alert-warning { - --bs-alert-color: var(--bs-warning-text-emphasis); - --bs-alert-bg: var(--bs-warning-bg-subtle); - --bs-alert-border-color: var(--bs-warning-border-subtle); - --bs-alert-link-color: var(--bs-warning-text-emphasis) -} -.alert-danger { - --bs-alert-color: var(--bs-danger-text-emphasis); - --bs-alert-bg: var(--bs-danger-bg-subtle); - --bs-alert-border-color: var(--bs-danger-border-subtle); - --bs-alert-link-color: var(--bs-danger-text-emphasis) -} -.alert-light { - --bs-alert-color: var(--bs-light-text-emphasis); - --bs-alert-bg: var(--bs-light-bg-subtle); - --bs-alert-border-color: var(--bs-light-border-subtle); - --bs-alert-link-color: var(--bs-light-text-emphasis) -} -.alert-dark { - --bs-alert-color: var(--bs-dark-text-emphasis); - --bs-alert-bg: var(--bs-dark-bg-subtle); - --bs-alert-border-color: var(--bs-dark-border-subtle); - --bs-alert-link-color: var(--bs-dark-text-emphasis) -} -@keyframes progress-bar-stripes { - 0% { - background-position-x: 1rem - } -} -.progress, .progress-stacked { - --bs-progress-height: 1rem; - --bs-progress-font-size: 0.75rem; - --bs-progress-bg: var(--bs-secondary-bg); - --bs-progress-border-radius: var(--bs-border-radius); - --bs-progress-box-shadow: var(--bs-box-shadow-inset); - --bs-progress-bar-color: #fff; - --bs-progress-bar-bg: #0d6efd; - --bs-progress-bar-transition: width 0.6s ease; - display: flex; - height: var(--bs-progress-height); - overflow: hidden; - font-size: var(--bs-progress-font-size); - background-color: var(--bs-progress-bg); - border-radius: var(--bs-progress-border-radius) -} -.progress-bar { - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: var(--bs-progress-bar-color); - text-align: center; - white-space: nowrap; - background-color: var(--bs-progress-bar-bg); - transition: var(--bs-progress-bar-transition) -} -@media (prefers-reduced-motion:reduce) { - .progress-bar { - transition: none - } -} -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: var(--bs-progress-height) var(--bs-progress-height) -} -.progress-stacked>.progress { - overflow: visible -} -.progress-stacked>.progress>.progress-bar { - width: 100% -} -.progress-bar-animated { - animation: 1s linear infinite progress-bar-stripes -} -@media (prefers-reduced-motion:reduce) { - .progress-bar-animated { - animation: none - } -} -.list-group { - --bs-list-group-color: var(--bs-body-color); - --bs-list-group-bg: var(--bs-body-bg); - --bs-list-group-border-color: var(--bs-border-color); - --bs-list-group-border-width: var(--bs-border-width); - --bs-list-group-border-radius: var(--bs-border-radius); - --bs-list-group-item-padding-x: 1rem; - --bs-list-group-item-padding-y: 0.5rem; - --bs-list-group-action-color: var(--bs-secondary-color); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); - --bs-list-group-action-active-color: var(--bs-body-color); - --bs-list-group-action-active-bg: var(--bs-secondary-bg); - --bs-list-group-disabled-color: var(--bs-secondary-color); - --bs-list-group-disabled-bg: var(--bs-body-bg); - --bs-list-group-active-color: #fff; - --bs-list-group-active-bg: #0d6efd; - --bs-list-group-active-border-color: #0d6efd; - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - border-radius: var(--bs-list-group-border-radius) -} -.list-group-numbered { - list-style-type: none; - counter-reset: section -} -.list-group-numbered>.list-group-item::before { - content: counters(section, ".") ". "; - counter-increment: section -} -.list-group-item-action { - width: 100%; - color: var(--bs-list-group-action-color); - text-align: inherit -} -.list-group-item-action:focus, .list-group-item-action:hover { - z-index: 1; - color: var(--bs-list-group-action-hover-color); - text-decoration: none; - background-color: var(--bs-list-group-action-hover-bg) -} -.list-group-item-action:active { - color: var(--bs-list-group-action-active-color); - background-color: var(--bs-list-group-action-active-bg) -} -.list-group-item { - position: relative; - display: block; - padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); - color: var(--bs-list-group-color); - text-decoration: none; - background-color: var(--bs-list-group-bg); - border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color) -} -.list-group-item:first-child { - border-top-left-radius: inherit; - border-top-right-radius: inherit -} -.list-group-item:last-child { - border-bottom-right-radius: inherit; - border-bottom-left-radius: inherit -} -.list-group-item.disabled, .list-group-item:disabled { - color: var(--bs-list-group-disabled-color); - pointer-events: none; - background-color: var(--bs-list-group-disabled-bg) -} -.list-group-item.active { - z-index: 2; - color: var(--bs-list-group-active-color); - background-color: var(--bs-list-group-active-bg); - border-color: var(--bs-list-group-active-border-color) -} -.list-group-item+.list-group-item { - border-top-width: 0 -} -.list-group-item+.list-group-item.active { - margin-top: calc(-1 * var(--bs-list-group-border-width)); - border-top-width: var(--bs-list-group-border-width) -} -.list-group-horizontal { - flex-direction: row -} -.list-group-horizontal>.list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0 -} -.list-group-horizontal>.list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0 -} -.list-group-horizontal>.list-group-item.active { - margin-top: 0 -} -.list-group-horizontal>.list-group-item+.list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0 -} -.list-group-horizontal>.list-group-item+.list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width) -} -@media (min-width:576px) { - .list-group-horizontal-sm { - flex-direction: row - } - .list-group-horizontal-sm>.list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0 - } - .list-group-horizontal-sm>.list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0 - } - .list-group-horizontal-sm>.list-group-item.active { - margin-top: 0 - } - .list-group-horizontal-sm>.list-group-item+.list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0 - } - .list-group-horizontal-sm>.list-group-item+.list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width) - } -} -@media (min-width:768px) { - .list-group-horizontal-md { - flex-direction: row - } - .list-group-horizontal-md>.list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0 - } - .list-group-horizontal-md>.list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0 - } - .list-group-horizontal-md>.list-group-item.active { - margin-top: 0 - } - .list-group-horizontal-md>.list-group-item+.list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0 - } - .list-group-horizontal-md>.list-group-item+.list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width) - } -} -@media (min-width:992px) { - .list-group-horizontal-lg { - flex-direction: row - } - .list-group-horizontal-lg>.list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0 - } - .list-group-horizontal-lg>.list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0 - } - .list-group-horizontal-lg>.list-group-item.active { - margin-top: 0 - } - .list-group-horizontal-lg>.list-group-item+.list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0 - } - .list-group-horizontal-lg>.list-group-item+.list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width) - } -} -@media (min-width:1200px) { - .list-group-horizontal-xl { - flex-direction: row - } - .list-group-horizontal-xl>.list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0 - } - .list-group-horizontal-xl>.list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0 - } - .list-group-horizontal-xl>.list-group-item.active { - margin-top: 0 - } - .list-group-horizontal-xl>.list-group-item+.list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0 - } - .list-group-horizontal-xl>.list-group-item+.list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width) - } -} -@media (min-width:1400px) { - .list-group-horizontal-xxl { - flex-direction: row - } - .list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0 - } - .list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0 - } - .list-group-horizontal-xxl>.list-group-item.active { - margin-top: 0 - } - .list-group-horizontal-xxl>.list-group-item+.list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0 - } - .list-group-horizontal-xxl>.list-group-item+.list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width) - } -} -.list-group-flush { - border-radius: 0 -} -.list-group-flush>.list-group-item { - border-width: 0 0 var(--bs-list-group-border-width) -} -.list-group-flush>.list-group-item:last-child { - border-bottom-width: 0 -} -.list-group-item-primary { - --bs-list-group-color: var(--bs-primary-text-emphasis); - --bs-list-group-bg: var(--bs-primary-bg-subtle); - --bs-list-group-border-color: var(--bs-primary-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); - --bs-list-group-active-color: var(--bs-primary-bg-subtle); - --bs-list-group-active-bg: var(--bs-primary-text-emphasis); - --bs-list-group-active-border-color: var(--bs-primary-text-emphasis) -} -.list-group-item-secondary { - --bs-list-group-color: var(--bs-secondary-text-emphasis); - --bs-list-group-bg: var(--bs-secondary-bg-subtle); - --bs-list-group-border-color: var(--bs-secondary-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); - --bs-list-group-active-color: var(--bs-secondary-bg-subtle); - --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); - --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis) -} -.list-group-item-success { - --bs-list-group-color: var(--bs-success-text-emphasis); - --bs-list-group-bg: var(--bs-success-bg-subtle); - --bs-list-group-border-color: var(--bs-success-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-success-border-subtle); - --bs-list-group-active-color: var(--bs-success-bg-subtle); - --bs-list-group-active-bg: var(--bs-success-text-emphasis); - --bs-list-group-active-border-color: var(--bs-success-text-emphasis) -} -.list-group-item-info { - --bs-list-group-color: var(--bs-info-text-emphasis); - --bs-list-group-bg: var(--bs-info-bg-subtle); - --bs-list-group-border-color: var(--bs-info-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-info-border-subtle); - --bs-list-group-active-color: var(--bs-info-bg-subtle); - --bs-list-group-active-bg: var(--bs-info-text-emphasis); - --bs-list-group-active-border-color: var(--bs-info-text-emphasis) -} -.list-group-item-warning { - --bs-list-group-color: var(--bs-warning-text-emphasis); - --bs-list-group-bg: var(--bs-warning-bg-subtle); - --bs-list-group-border-color: var(--bs-warning-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); - --bs-list-group-active-color: var(--bs-warning-bg-subtle); - --bs-list-group-active-bg: var(--bs-warning-text-emphasis); - --bs-list-group-active-border-color: var(--bs-warning-text-emphasis) -} -.list-group-item-danger { - --bs-list-group-color: var(--bs-danger-text-emphasis); - --bs-list-group-bg: var(--bs-danger-bg-subtle); - --bs-list-group-border-color: var(--bs-danger-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); - --bs-list-group-active-color: var(--bs-danger-bg-subtle); - --bs-list-group-active-bg: var(--bs-danger-text-emphasis); - --bs-list-group-active-border-color: var(--bs-danger-text-emphasis) -} -.list-group-item-light { - --bs-list-group-color: var(--bs-light-text-emphasis); - --bs-list-group-bg: var(--bs-light-bg-subtle); - --bs-list-group-border-color: var(--bs-light-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-light-border-subtle); - --bs-list-group-active-color: var(--bs-light-bg-subtle); - --bs-list-group-active-bg: var(--bs-light-text-emphasis); - --bs-list-group-active-border-color: var(--bs-light-text-emphasis) -} -.list-group-item-dark { - --bs-list-group-color: var(--bs-dark-text-emphasis); - --bs-list-group-bg: var(--bs-dark-bg-subtle); - --bs-list-group-border-color: var(--bs-dark-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); - --bs-list-group-active-color: var(--bs-dark-bg-subtle); - --bs-list-group-active-bg: var(--bs-dark-text-emphasis); - --bs-list-group-active-border-color: var(--bs-dark-text-emphasis) -} -.btn-close { - --bs-btn-close-color: #000; - --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); - --bs-btn-close-opacity: 0.5; - --bs-btn-close-hover-opacity: 0.75; - --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - --bs-btn-close-focus-opacity: 1; - --bs-btn-close-disabled-opacity: 0.25; - --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); - box-sizing: content-box; - width: 1em; - height: 1em; - padding: .25em .25em; - color: var(--bs-btn-close-color); - background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; - border: 0; - border-radius: .375rem; - opacity: var(--bs-btn-close-opacity) -} -.btn-close:hover { - color: var(--bs-btn-close-color); - text-decoration: none; - opacity: var(--bs-btn-close-hover-opacity) -} -.btn-close:focus { - outline: 0; - box-shadow: var(--bs-btn-close-focus-shadow); - opacity: var(--bs-btn-close-focus-opacity) -} -.btn-close.disabled, .btn-close:disabled { - pointer-events: none; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - opacity: var(--bs-btn-close-disabled-opacity) -} -.btn-close-white { - filter: var(--bs-btn-close-white-filter) -} -[data-bs-theme=dark] .btn-close { - filter: var(--bs-btn-close-white-filter) -} -.toast { - --bs-toast-zindex: 1090; - --bs-toast-padding-x: 0.75rem; - --bs-toast-padding-y: 0.5rem; - --bs-toast-spacing: 1.5rem; - --bs-toast-max-width: 350px; - --bs-toast-font-size: 0.875rem; - --bs-toast-color: ; - --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); - --bs-toast-border-width: var(--bs-border-width); - --bs-toast-border-color: var(--bs-border-color-translucent); - --bs-toast-border-radius: var(--bs-border-radius); - --bs-toast-box-shadow: var(--bs-box-shadow); - --bs-toast-header-color: var(--bs-secondary-color); - --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); - --bs-toast-header-border-color: var(--bs-border-color-translucent); - width: var(--bs-toast-max-width); - max-width: 100%; - font-size: var(--bs-toast-font-size); - color: var(--bs-toast-color); - pointer-events: auto; - background-color: var(--bs-toast-bg); - background-clip: padding-box; - border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); - box-shadow: var(--bs-toast-box-shadow); - border-radius: var(--bs-toast-border-radius) -} -.toast.showing { - opacity: 0 -} -.toast:not(.show) { - display: none -} -.toast-container { - --bs-toast-zindex: 1090; - position: absolute; - z-index: var(--bs-toast-zindex); - width: -webkit-max-content; - width: -moz-max-content; - width: max-content; - max-width: 100%; - pointer-events: none -} -.toast-container>:not(:last-child) { - margin-bottom: var(--bs-toast-spacing) -} -.toast-header { - display: flex; - align-items: center; - padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); - color: var(--bs-toast-header-color); - background-color: var(--bs-toast-header-bg); - background-clip: padding-box; - border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); - border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); - border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)) -} -.toast-header .btn-close { - margin-right: calc(-.5 * var(--bs-toast-padding-x)); - margin-left: var(--bs-toast-padding-x) -} -.toast-body { - padding: var(--bs-toast-padding-x); - word-wrap: break-word -} -.modal { - --bs-modal-zindex: 1055; - --bs-modal-width: 500px; - --bs-modal-padding: 1rem; - --bs-modal-margin: 0.5rem; - --bs-modal-color: ; - --bs-modal-bg: var(--bs-body-bg); - --bs-modal-border-color: var(--bs-border-color-translucent); - --bs-modal-border-width: var(--bs-border-width); - --bs-modal-border-radius: var(--bs-border-radius-lg); - --bs-modal-box-shadow: var(--bs-box-shadow-sm); - --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); - --bs-modal-header-padding-x: 1rem; - --bs-modal-header-padding-y: 1rem; - --bs-modal-header-padding: 1rem 1rem; - --bs-modal-header-border-color: var(--bs-border-color); - --bs-modal-header-border-width: var(--bs-border-width); - --bs-modal-title-line-height: 1.5; - --bs-modal-footer-gap: 0.5rem; - --bs-modal-footer-bg: ; - --bs-modal-footer-border-color: var(--bs-border-color); - --bs-modal-footer-border-width: var(--bs-border-width); - position: fixed; - top: 0; - left: 0; - z-index: var(--bs-modal-zindex); - display: none; - width: 100%; - height: 100%; - overflow-x: hidden; - overflow-y: auto; - outline: 0 -} -.modal-dialog { - position: relative; - width: auto; - margin: var(--bs-modal-margin); - pointer-events: none -} -.modal.fade .modal-dialog { - transition: transform .3s ease-out; - transform: translate(0, -50px) -} -@media (prefers-reduced-motion:reduce) { - .modal.fade .modal-dialog { - transition: none - } -} -.modal.show .modal-dialog { - transform: none -} -.modal.modal-static .modal-dialog { - transform: scale(1.02) -} -.modal-dialog-scrollable { - height: calc(100% - var(--bs-modal-margin) * 2) -} -.modal-dialog-scrollable .modal-content { - max-height: 100%; - overflow: hidden -} -.modal-dialog-scrollable .modal-body { - overflow-y: auto -} -.modal-dialog-centered { - display: flex; - align-items: center; - min-height: calc(100% - var(--bs-modal-margin) * 2) -} -.modal-content { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - color: var(--bs-modal-color); - pointer-events: auto; - background-color: var(--bs-modal-bg); - background-clip: padding-box; - border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); - border-radius: var(--bs-modal-border-radius); - outline: 0 -} -.modal-backdrop { - --bs-backdrop-zindex: 1050; - --bs-backdrop-bg: #000; - --bs-backdrop-opacity: 0.5; - position: fixed; - top: 0; - left: 0; - z-index: var(--bs-backdrop-zindex); - width: 100vw; - height: 100vh; - background-color: var(--bs-backdrop-bg) -} -.modal-backdrop.fade { - opacity: 0 -} -.modal-backdrop.show { - opacity: var(--bs-backdrop-opacity) -} -.modal-header { - display: flex; - flex-shrink: 0; - align-items: center; - padding: var(--bs-modal-header-padding); - border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); - border-top-left-radius: var(--bs-modal-inner-border-radius); - border-top-right-radius: var(--bs-modal-inner-border-radius) -} -.modal-header .btn-close { - padding: calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5); - margin: calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto -} -.modal-title { - margin-bottom: 0; - line-height: var(--bs-modal-title-line-height) -} -.modal-body { - position: relative; - flex: 1 1 auto; - padding: var(--bs-modal-padding) -} -.modal-footer { - display: flex; - flex-shrink: 0; - flex-wrap: wrap; - align-items: center; - justify-content: flex-end; - padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5); - background-color: var(--bs-modal-footer-bg); - border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); - border-bottom-right-radius: var(--bs-modal-inner-border-radius); - border-bottom-left-radius: var(--bs-modal-inner-border-radius) -} -.modal-footer>* { - margin: calc(var(--bs-modal-footer-gap) * .5) -} -@media (min-width:576px) { - .modal { - --bs-modal-margin: 1.75rem; - --bs-modal-box-shadow: var(--bs-box-shadow) - } - .modal-dialog { - max-width: var(--bs-modal-width); - margin-right: auto; - margin-left: auto - } - .modal-sm { - --bs-modal-width: 300px - } -} -@media (min-width:992px) { - .modal-lg, .modal-xl { - --bs-modal-width: 800px - } -} -@media (min-width:1200px) { - .modal-xl { - --bs-modal-width: 1140px - } -} -.modal-fullscreen { - width: 100vw; - max-width: none; - height: 100%; - margin: 0 -} -.modal-fullscreen .modal-content { - height: 100%; - border: 0; - border-radius: 0 -} -.modal-fullscreen .modal-footer, .modal-fullscreen .modal-header { - border-radius: 0 -} -.modal-fullscreen .modal-body { - overflow-y: auto -} -@media (max-width:575.98px) { - .modal-fullscreen-sm-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0 - } - .modal-fullscreen-sm-down .modal-content { - height: 100%; - border: 0; - border-radius: 0 - } - .modal-fullscreen-sm-down .modal-footer, .modal-fullscreen-sm-down .modal-header { - border-radius: 0 - } - .modal-fullscreen-sm-down .modal-body { - overflow-y: auto - } -} -@media (max-width:767.98px) { - .modal-fullscreen-md-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0 - } - .modal-fullscreen-md-down .modal-content { - height: 100%; - border: 0; - border-radius: 0 - } - .modal-fullscreen-md-down .modal-footer, .modal-fullscreen-md-down .modal-header { - border-radius: 0 - } - .modal-fullscreen-md-down .modal-body { - overflow-y: auto - } -} -@media (max-width:991.98px) { - .modal-fullscreen-lg-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0 - } - .modal-fullscreen-lg-down .modal-content { - height: 100%; - border: 0; - border-radius: 0 - } - .modal-fullscreen-lg-down .modal-footer, .modal-fullscreen-lg-down .modal-header { - border-radius: 0 - } - .modal-fullscreen-lg-down .modal-body { - overflow-y: auto - } -} -@media (max-width:1199.98px) { - .modal-fullscreen-xl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0 - } - .modal-fullscreen-xl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0 - } - .modal-fullscreen-xl-down .modal-footer, .modal-fullscreen-xl-down .modal-header { - border-radius: 0 - } - .modal-fullscreen-xl-down .modal-body { - overflow-y: auto - } -} -@media (max-width:1399.98px) { - .modal-fullscreen-xxl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0 - } - .modal-fullscreen-xxl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0 - } - .modal-fullscreen-xxl-down .modal-footer, .modal-fullscreen-xxl-down .modal-header { - border-radius: 0 - } - .modal-fullscreen-xxl-down .modal-body { - overflow-y: auto - } -} -.tooltip { - --bs-tooltip-zindex: 1080; - --bs-tooltip-max-width: 200px; - --bs-tooltip-padding-x: 0.5rem; - --bs-tooltip-padding-y: 0.25rem; - --bs-tooltip-margin: ; - --bs-tooltip-font-size: 0.875rem; - --bs-tooltip-color: var(--bs-body-bg); - --bs-tooltip-bg: var(--bs-emphasis-color); - --bs-tooltip-border-radius: var(--bs-border-radius); - --bs-tooltip-opacity: 0.9; - --bs-tooltip-arrow-width: 0.8rem; - --bs-tooltip-arrow-height: 0.4rem; - z-index: var(--bs-tooltip-zindex); - display: block; - margin: var(--bs-tooltip-margin); - font-family: var(--bs-font-sans-serif); - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - white-space: normal; - word-spacing: normal; - line-break: auto; - font-size: var(--bs-tooltip-font-size); - word-wrap: break-word; - opacity: 0 -} -.tooltip.show { - opacity: var(--bs-tooltip-opacity) -} -.tooltip .tooltip-arrow { - display: block; - width: var(--bs-tooltip-arrow-width); - height: var(--bs-tooltip-arrow-height) -} -.tooltip .tooltip-arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid -} -.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow, .bs-tooltip-top .tooltip-arrow { - bottom: calc(-1 * var(--bs-tooltip-arrow-height)) -} -.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before, .bs-tooltip-top .tooltip-arrow::before { - top: -1px; - border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; - border-top-color: var(--bs-tooltip-bg) -} -.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow, .bs-tooltip-end .tooltip-arrow { - left: calc(-1 * var(--bs-tooltip-arrow-height)); - width: var(--bs-tooltip-arrow-height); - height: var(--bs-tooltip-arrow-width) -} -.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before, .bs-tooltip-end .tooltip-arrow::before { - right: -1px; - border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; - border-right-color: var(--bs-tooltip-bg) -} -.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow, .bs-tooltip-bottom .tooltip-arrow { - top: calc(-1 * var(--bs-tooltip-arrow-height)) -} -.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before, .bs-tooltip-bottom .tooltip-arrow::before { - bottom: -1px; - border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); - border-bottom-color: var(--bs-tooltip-bg) -} -.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow, .bs-tooltip-start .tooltip-arrow { - right: calc(-1 * var(--bs-tooltip-arrow-height)); - width: var(--bs-tooltip-arrow-height); - height: var(--bs-tooltip-arrow-width) -} -.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before, .bs-tooltip-start .tooltip-arrow::before { - left: -1px; - border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); - border-left-color: var(--bs-tooltip-bg) -} -.tooltip-inner { - max-width: var(--bs-tooltip-max-width); - padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); - color: var(--bs-tooltip-color); - text-align: center; - background-color: var(--bs-tooltip-bg); - border-radius: var(--bs-tooltip-border-radius) -} -.popover { - --bs-popover-zindex: 1070; - --bs-popover-max-width: 276px; - --bs-popover-font-size: 0.875rem; - --bs-popover-bg: var(--bs-body-bg); - --bs-popover-border-width: var(--bs-border-width); - --bs-popover-border-color: var(--bs-border-color-translucent); - --bs-popover-border-radius: var(--bs-border-radius-lg); - --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); - --bs-popover-box-shadow: var(--bs-box-shadow); - --bs-popover-header-padding-x: 1rem; - --bs-popover-header-padding-y: 0.5rem; - --bs-popover-header-font-size: 1rem; - --bs-popover-header-color: inherit; - --bs-popover-header-bg: var(--bs-secondary-bg); - --bs-popover-body-padding-x: 1rem; - --bs-popover-body-padding-y: 1rem; - --bs-popover-body-color: var(--bs-body-color); - --bs-popover-arrow-width: 1rem; - --bs-popover-arrow-height: 0.5rem; - --bs-popover-arrow-border: var(--bs-popover-border-color); - z-index: var(--bs-popover-zindex); - display: block; - max-width: var(--bs-popover-max-width); - font-family: var(--bs-font-sans-serif); - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - white-space: normal; - word-spacing: normal; - line-break: auto; - font-size: var(--bs-popover-font-size); - word-wrap: break-word; - background-color: var(--bs-popover-bg); - background-clip: padding-box; - border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); - border-radius: var(--bs-popover-border-radius) -} -.popover .popover-arrow { - display: block; - width: var(--bs-popover-arrow-width); - height: var(--bs-popover-arrow-height) -} -.popover .popover-arrow::after, .popover .popover-arrow::before { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; - border-width: 0 -} -.bs-popover-auto[data-popper-placement^=top]>.popover-arrow, .bs-popover-top>.popover-arrow { - bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)) -} -.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after, .bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before, .bs-popover-top>.popover-arrow::after, .bs-popover-top>.popover-arrow::before { - border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0 -} -.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before, .bs-popover-top>.popover-arrow::before { - bottom: 0; - border-top-color: var(--bs-popover-arrow-border) -} -.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after, .bs-popover-top>.popover-arrow::after { - bottom: var(--bs-popover-border-width); - border-top-color: var(--bs-popover-bg) -} -.bs-popover-auto[data-popper-placement^=right]>.popover-arrow, .bs-popover-end>.popover-arrow { - left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); - width: var(--bs-popover-arrow-height); - height: var(--bs-popover-arrow-width) -} -.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after, .bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before, .bs-popover-end>.popover-arrow::after, .bs-popover-end>.popover-arrow::before { - border-width: calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0 -} -.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before, .bs-popover-end>.popover-arrow::before { - left: 0; - border-right-color: var(--bs-popover-arrow-border) -} -.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after, .bs-popover-end>.popover-arrow::after { - left: var(--bs-popover-border-width); - border-right-color: var(--bs-popover-bg) -} -.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow, .bs-popover-bottom>.popover-arrow { - top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)) -} -.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before, .bs-popover-bottom>.popover-arrow::after, .bs-popover-bottom>.popover-arrow::before { - border-width: 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) -} -.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before, .bs-popover-bottom>.popover-arrow::before { - top: 0; - border-bottom-color: var(--bs-popover-arrow-border) -} -.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after, .bs-popover-bottom>.popover-arrow::after { - top: var(--bs-popover-border-width); - border-bottom-color: var(--bs-popover-bg) -} -.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before, .bs-popover-bottom .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: var(--bs-popover-arrow-width); - margin-left: calc(-.5 * var(--bs-popover-arrow-width)); - content: ""; - border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg) -} -.bs-popover-auto[data-popper-placement^=left]>.popover-arrow, .bs-popover-start>.popover-arrow { - right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); - width: var(--bs-popover-arrow-height); - height: var(--bs-popover-arrow-width) -} -.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after, .bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before, .bs-popover-start>.popover-arrow::after, .bs-popover-start>.popover-arrow::before { - border-width: calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) -} -.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before, .bs-popover-start>.popover-arrow::before { - right: 0; - border-left-color: var(--bs-popover-arrow-border) -} -.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after, .bs-popover-start>.popover-arrow::after { - right: var(--bs-popover-border-width); - border-left-color: var(--bs-popover-bg) -} -.popover-header { - padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); - margin-bottom: 0; - font-size: var(--bs-popover-header-font-size); - color: var(--bs-popover-header-color); - background-color: var(--bs-popover-header-bg); - border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); - border-top-left-radius: var(--bs-popover-inner-border-radius); - border-top-right-radius: var(--bs-popover-inner-border-radius) -} -.popover-header:empty { - display: none -} -.popover-body { - padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); - color: var(--bs-popover-body-color) -} -.carousel { - position: relative -} -.carousel.pointer-event { - touch-action: pan-y -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden -} -.carousel-inner::after { - display: block; - clear: both; - content: "" -} -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transition: transform .6s ease-in-out -} -@media (prefers-reduced-motion:reduce) { - .carousel-item { - transition: none - } -} -.carousel-item-next, .carousel-item-prev, .carousel-item.active { - display: block -} -.active.carousel-item-end, .carousel-item-next:not(.carousel-item-start) { - transform: translateX(100%) -} -.active.carousel-item-start, .carousel-item-prev:not(.carousel-item-end) { - transform: translateX(-100%) -} -.carousel-fade .carousel-item { - opacity: 0; - transition-property: opacity; - transform: none -} -.carousel-fade .carousel-item-next.carousel-item-start, .carousel-fade .carousel-item-prev.carousel-item-end, .carousel-fade .carousel-item.active { - z-index: 1; - opacity: 1 -} -.carousel-fade .active.carousel-item-end, .carousel-fade .active.carousel-item-start { - z-index: 0; - opacity: 0; - transition: opacity 0s .6s -} -@media (prefers-reduced-motion:reduce) { - .carousel-fade .active.carousel-item-end, .carousel-fade .active.carousel-item-start { - transition: none - } -} -.carousel-control-next, .carousel-control-prev { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - width: 15%; - padding: 0; - color: #fff; - text-align: center; - background: 0 0; - border: 0; - opacity: .5; - transition: opacity .15s ease -} -@media (prefers-reduced-motion:reduce) { - .carousel-control-next, .carousel-control-prev { - transition: none - } -} -.carousel-control-next:focus, .carousel-control-next:hover, .carousel-control-prev:focus, .carousel-control-prev:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9 -} -.carousel-control-prev { - left: 0 -} -.carousel-control-next { - right: 0 -} -.carousel-control-next-icon, .carousel-control-prev-icon { - display: inline-block; - width: 2rem; - height: 2rem; - background-repeat: no-repeat; - background-position: 50%; - background-size: 100% 100% -} -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") -} -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") -} -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 2; - display: flex; - justify-content: center; - padding: 0; - margin-right: 15%; - margin-bottom: 1rem; - margin-left: 15% -} -.carousel-indicators [data-bs-target] { - box-sizing: content-box; - flex: 0 1 auto; - width: 30px; - height: 3px; - padding: 0; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - transition: opacity .6s ease -} -@media (prefers-reduced-motion:reduce) { - .carousel-indicators [data-bs-target] { - transition: none - } -} -.carousel-indicators .active { - opacity: 1 -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 1.25rem; - left: 15%; - padding-top: 1.25rem; - padding-bottom: 1.25rem; - color: #fff; - text-align: center -} -.carousel-dark .carousel-control-next-icon, .carousel-dark .carousel-control-prev-icon { - filter: invert(1) grayscale(100) -} -.carousel-dark .carousel-indicators [data-bs-target] { - background-color: #000 -} -.carousel-dark .carousel-caption { - color: #000 -} -[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark] .carousel .carousel-control-prev-icon, [data-bs-theme=dark].carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon { - filter: invert(1) grayscale(100) -} -[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] { - background-color: #000 -} -[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption { - color: #000 -} -.spinner-border, .spinner-grow { - display: inline-block; - width: var(--bs-spinner-width); - height: var(--bs-spinner-height); - vertical-align: var(--bs-spinner-vertical-align); - border-radius: 50%; - animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name) -} -@keyframes spinner-border { - to { - transform: rotate(360deg) - } -} -.spinner-border { - --bs-spinner-width: 2rem; - --bs-spinner-height: 2rem; - --bs-spinner-vertical-align: -0.125em; - --bs-spinner-border-width: 0.25em; - --bs-spinner-animation-speed: 0.75s; - --bs-spinner-animation-name: spinner-border; - border: var(--bs-spinner-border-width) solid currentcolor; - border-right-color: transparent -} -.spinner-border-sm { - --bs-spinner-width: 1rem; - --bs-spinner-height: 1rem; - --bs-spinner-border-width: 0.2em -} -@keyframes spinner-grow { - 0% { - transform: scale(0) - } - 50% { - opacity: 1; - transform: none - } -} -.spinner-grow { - --bs-spinner-width: 2rem; - --bs-spinner-height: 2rem; - --bs-spinner-vertical-align: -0.125em; - --bs-spinner-animation-speed: 0.75s; - --bs-spinner-animation-name: spinner-grow; - background-color: currentcolor; - opacity: 0 -} -.spinner-grow-sm { - --bs-spinner-width: 1rem; - --bs-spinner-height: 1rem -} -@media (prefers-reduced-motion:reduce) { - .spinner-border, .spinner-grow { - --bs-spinner-animation-speed: 1.5s - } -} -.offcanvas, .offcanvas-lg, .offcanvas-md, .offcanvas-sm, .offcanvas-xl, .offcanvas-xxl { - --bs-offcanvas-zindex: 1045; - --bs-offcanvas-width: 400px; - --bs-offcanvas-height: 30vh; - --bs-offcanvas-padding-x: 1rem; - --bs-offcanvas-padding-y: 1rem; - --bs-offcanvas-color: var(--bs-body-color); - --bs-offcanvas-bg: var(--bs-body-bg); - --bs-offcanvas-border-width: var(--bs-border-width); - --bs-offcanvas-border-color: var(--bs-border-color-translucent); - --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm); - --bs-offcanvas-transition: transform 0.3s ease-in-out; - --bs-offcanvas-title-line-height: 1.5 -} -@media (max-width:575.98px) { - .offcanvas-sm { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition) - } -} -@media (max-width:575.98px) and (prefers-reduced-motion:reduce) { - .offcanvas-sm { - transition: none - } -} -@media (max-width:575.98px) { - .offcanvas-sm.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%) - } - .offcanvas-sm.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%) - } - .offcanvas-sm.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%) - } - .offcanvas-sm.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%) - } - .offcanvas-sm.show:not(.hiding), .offcanvas-sm.showing { - transform: none - } - .offcanvas-sm.hiding, .offcanvas-sm.show, .offcanvas-sm.showing { - visibility: visible - } -} -@media (min-width:576px) { - .offcanvas-sm { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent!important - } - .offcanvas-sm .offcanvas-header { - display: none - } - .offcanvas-sm .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent!important - } -} -@media (max-width:767.98px) { - .offcanvas-md { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition) - } -} -@media (max-width:767.98px) and (prefers-reduced-motion:reduce) { - .offcanvas-md { - transition: none - } -} -@media (max-width:767.98px) { - .offcanvas-md.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%) - } - .offcanvas-md.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%) - } - .offcanvas-md.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%) - } - .offcanvas-md.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%) - } - .offcanvas-md.show:not(.hiding), .offcanvas-md.showing { - transform: none - } - .offcanvas-md.hiding, .offcanvas-md.show, .offcanvas-md.showing { - visibility: visible - } -} -@media (min-width:768px) { - .offcanvas-md { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent!important - } - .offcanvas-md .offcanvas-header { - display: none - } - .offcanvas-md .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent!important - } -} -@media (max-width:991.98px) { - .offcanvas-lg { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition) - } -} -@media (max-width:991.98px) and (prefers-reduced-motion:reduce) { - .offcanvas-lg { - transition: none - } -} -@media (max-width:991.98px) { - .offcanvas-lg.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%) - } - .offcanvas-lg.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%) - } - .offcanvas-lg.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%) - } - .offcanvas-lg.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%) - } - .offcanvas-lg.show:not(.hiding), .offcanvas-lg.showing { - transform: none - } - .offcanvas-lg.hiding, .offcanvas-lg.show, .offcanvas-lg.showing { - visibility: visible - } -} -@media (min-width:992px) { - .offcanvas-lg { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent!important - } - .offcanvas-lg .offcanvas-header { - display: none - } - .offcanvas-lg .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent!important - } -} -@media (max-width:1199.98px) { - .offcanvas-xl { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition) - } -} -@media (max-width:1199.98px) and (prefers-reduced-motion:reduce) { - .offcanvas-xl { - transition: none - } -} -@media (max-width:1199.98px) { - .offcanvas-xl.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%) - } - .offcanvas-xl.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%) - } - .offcanvas-xl.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%) - } - .offcanvas-xl.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%) - } - .offcanvas-xl.show:not(.hiding), .offcanvas-xl.showing { - transform: none - } - .offcanvas-xl.hiding, .offcanvas-xl.show, .offcanvas-xl.showing { - visibility: visible - } -} -@media (min-width:1200px) { - .offcanvas-xl { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent!important - } - .offcanvas-xl .offcanvas-header { - display: none - } - .offcanvas-xl .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent!important - } -} -@media (max-width:1399.98px) { - .offcanvas-xxl { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition) - } -} -@media (max-width:1399.98px) and (prefers-reduced-motion:reduce) { - .offcanvas-xxl { - transition: none - } -} -@media (max-width:1399.98px) { - .offcanvas-xxl.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%) - } - .offcanvas-xxl.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%) - } - .offcanvas-xxl.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%) - } - .offcanvas-xxl.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%) - } - .offcanvas-xxl.show:not(.hiding), .offcanvas-xxl.showing { - transform: none - } - .offcanvas-xxl.hiding, .offcanvas-xxl.show, .offcanvas-xxl.showing { - visibility: visible - } -} -@media (min-width:1400px) { - .offcanvas-xxl { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent!important - } - .offcanvas-xxl .offcanvas-header { - display: none - } - .offcanvas-xxl .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent!important - } -} -.offcanvas { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition) -} -@media (prefers-reduced-motion:reduce) { - .offcanvas { - transition: none - } -} -.offcanvas.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%) -} -.offcanvas.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%) -} -.offcanvas.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%) -} -.offcanvas.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%) -} -.offcanvas.show:not(.hiding), .offcanvas.showing { - transform: none -} -.offcanvas.hiding, .offcanvas.show, .offcanvas.showing { - visibility: visible -} -.offcanvas-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000 -} -.offcanvas-backdrop.fade { - opacity: 0 -} -.offcanvas-backdrop.show { - opacity: .5 -} -.offcanvas-header { - display: flex; - align-items: center; - padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x) -} -.offcanvas-header .btn-close { - padding: calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5); - margin: calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto -} -.offcanvas-title { - margin-bottom: 0; - line-height: var(--bs-offcanvas-title-line-height) -} -.offcanvas-body { - flex-grow: 1; - padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); - overflow-y: auto -} -.placeholder { - display: inline-block; - min-height: 1em; - vertical-align: middle; - cursor: wait; - background-color: currentcolor; - opacity: .5 -} -.placeholder.btn::before { - display: inline-block; - content: "" -} -.placeholder-xs { - min-height: .6em -} -.placeholder-sm { - min-height: .8em -} -.placeholder-lg { - min-height: 1.2em -} -.placeholder-glow .placeholder { - animation: placeholder-glow 2s ease-in-out infinite -} -@keyframes placeholder-glow { - 50% { - opacity: .2 - } -} -.placeholder-wave { - -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); - mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); - -webkit-mask-size: 200% 100%; - mask-size: 200% 100%; - animation: placeholder-wave 2s linear infinite -} -@keyframes placeholder-wave { - 100% { - -webkit-mask-position: -200% 0%; - mask-position: -200% 0% - } -} -.clearfix::after { - display: block; - clear: both; - content: "" -} -.text-bg-primary { - color: #fff!important; - background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-secondary { - color: #fff!important; - background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-success { - color: #fff!important; - background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-info { - color: #000!important; - background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-warning { - color: #000!important; - background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-danger { - color: #fff!important; - background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-light { - color: #000!important; - background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1))!important -} -.text-bg-dark { - color: #fff!important; - background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1))!important -} -.link-primary { - color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-primary:focus, .link-primary:hover { - color: RGBA(10, 88, 202, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1))!important -} -.link-secondary { - color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-secondary:focus, .link-secondary:hover { - color: RGBA(86, 94, 100, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1))!important -} -.link-success { - color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-success:focus, .link-success:hover { - color: RGBA(20, 108, 67, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1))!important -} -.link-info { - color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-info:focus, .link-info:hover { - color: RGBA(61, 213, 243, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1))!important -} -.link-warning { - color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-warning:focus, .link-warning:hover { - color: RGBA(255, 205, 57, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1))!important -} -.link-danger { - color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-danger:focus, .link-danger:hover { - color: RGBA(176, 42, 55, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1))!important -} -.link-light { - color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-light:focus, .link-light:hover { - color: RGBA(249, 250, 251, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1))!important -} -.link-dark { - color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-dark:focus, .link-dark:hover { - color: RGBA(26, 30, 33, var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1))!important -} -.link-body-emphasis { - color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1))!important; - -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-body-emphasis:focus, .link-body-emphasis:hover { - color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, .75))!important; - -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75))!important; - text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75))!important -} -.focus-ring:focus { - outline: 0; - box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color) -} -.icon-link { - display: inline-flex; - gap: .375rem; - align-items: center; - -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); - text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); - text-underline-offset: 0.25em; - -webkit-backface-visibility: hidden; - backface-visibility: hidden -} -.icon-link>.bi { - flex-shrink: 0; - width: 1em; - height: 1em; - fill: currentcolor; - transition: .2s ease-in-out transform -} -@media (prefers-reduced-motion:reduce) { - .icon-link>.bi { - transition: none - } -} -.icon-link-hover:focus-visible>.bi, .icon-link-hover:hover>.bi { - transform: var(--bs-icon-link-transform, translate3d(.25em, 0, 0)) -} -.ratio { - position: relative; - width: 100% -} -.ratio::before { - display: block; - padding-top: var(--bs-aspect-ratio); - content: "" -} -.ratio>* { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100% -} -.ratio-1x1 { - --bs-aspect-ratio: 100% -} -.ratio-4x3 { - --bs-aspect-ratio: 75% -} -.ratio-16x9 { - --bs-aspect-ratio: 56.25% -} -.ratio-21x9 { - --bs-aspect-ratio: 42.8571428571% -} -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030 -} -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030 -} -.sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 -} -.sticky-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020 -} -@media (min-width:576px) { - .sticky-sm-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - .sticky-sm-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020 - } -} -@media (min-width:768px) { - .sticky-md-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - .sticky-md-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020 - } -} -@media (min-width:992px) { - .sticky-lg-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - .sticky-lg-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020 - } -} -@media (min-width:1200px) { - .sticky-xl-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - .sticky-xl-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020 - } -} -@media (min-width:1400px) { - .sticky-xxl-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020 - } - .sticky-xxl-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020 - } -} -.hstack { - display: flex; - flex-direction: row; - align-items: center; - align-self: stretch -} -.vstack { - display: flex; - flex: 1 1 auto; - flex-direction: column; - align-self: stretch -} -.visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) { - width: 1px!important; - height: 1px!important; - padding: 0!important; - margin: -1px!important; - overflow: hidden!important; - clip: rect(0, 0, 0, 0)!important; - white-space: nowrap!important; - border: 0!important -} -.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption), .visually-hidden:not(caption) { - position: absolute!important -} -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - content: "" -} -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap -} -.vr { - display: inline-block; - align-self: stretch; - width: var(--bs-border-width); - min-height: 1em; - background-color: currentcolor; - opacity: .25 -} -.align-baseline { - vertical-align: baseline!important -} -.align-top { - vertical-align: top!important -} -.align-middle { - vertical-align: middle!important -} -.align-bottom { - vertical-align: bottom!important -} -.align-text-bottom { - vertical-align: text-bottom!important -} -.align-text-top { - vertical-align: text-top!important -} -.float-start { - float: left!important -} -.float-end { - float: right!important -} -.float-none { - float: none!important -} -.object-fit-contain { - -o-object-fit: contain!important; - object-fit: contain!important -} -.object-fit-cover { - -o-object-fit: cover!important; - object-fit: cover!important -} -.object-fit-fill { - -o-object-fit: fill!important; - object-fit: fill!important -} -.object-fit-scale { - -o-object-fit: scale-down!important; - object-fit: scale-down!important -} -.object-fit-none { - -o-object-fit: none!important; - object-fit: none!important -} -.opacity-0 { - opacity: 0!important -} -.opacity-25 { - opacity: .25!important -} -.opacity-50 { - opacity: .5!important -} -.opacity-75 { - opacity: .75!important -} -.opacity-100 { - opacity: 1!important -} -.overflow-auto { - overflow: auto!important -} -.overflow-hidden { - overflow: hidden!important -} -.overflow-visible { - overflow: visible!important -} -.overflow-scroll { - overflow: scroll!important -} -.overflow-x-auto { - overflow-x: auto!important -} -.overflow-x-hidden { - overflow-x: hidden!important -} -.overflow-x-visible { - overflow-x: visible!important -} -.overflow-x-scroll { - overflow-x: scroll!important -} -.overflow-y-auto { - overflow-y: auto!important -} -.overflow-y-hidden { - overflow-y: hidden!important -} -.overflow-y-visible { - overflow-y: visible!important -} -.overflow-y-scroll { - overflow-y: scroll!important -} -.d-inline { - display: inline!important -} -.d-inline-block { - display: inline-block!important -} -.d-block { - display: block!important -} -.d-grid { - display: grid!important -} -.d-inline-grid { - display: inline-grid!important -} -.d-table { - display: table!important -} -.d-table-row { - display: table-row!important -} -.d-table-cell { - display: table-cell!important -} -.d-flex { - display: flex!important -} -.d-inline-flex { - display: inline-flex!important -} -.d-none { - display: none!important -} -.shadow { - box-shadow: var(--bs-box-shadow)!important -} -.shadow-sm { - box-shadow: var(--bs-box-shadow-sm)!important -} -.shadow-lg { - box-shadow: var(--bs-box-shadow-lg)!important -} -.shadow-none { - box-shadow: none!important -} -.focus-ring-primary { - --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-secondary { - --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-success { - --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-info { - --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-warning { - --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-danger { - --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-light { - --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)) -} -.focus-ring-dark { - --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)) -} -.position-static { - position: static!important -} -.position-relative { - position: relative!important -} -.position-absolute { - position: absolute!important -} -.position-fixed { - position: fixed!important -} -.position-sticky { - position: -webkit-sticky!important; - position: sticky!important -} -.top-0 { - top: 0!important -} -.top-50 { - top: 50%!important -} -.top-100 { - top: 100%!important -} -.bottom-0 { - bottom: 0!important -} -.bottom-50 { - bottom: 50%!important -} -.bottom-100 { - bottom: 100%!important -} -.start-0 { - left: 0!important -} -.start-50 { - left: 50%!important -} -.start-100 { - left: 100%!important -} -.end-0 { - right: 0!important -} -.end-50 { - right: 50%!important -} -.end-100 { - right: 100%!important -} -.translate-middle { - transform: translate(-50%, -50%)!important -} -.translate-middle-x { - transform: translateX(-50%)!important -} -.translate-middle-y { - transform: translateY(-50%)!important -} -.border { - border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important -} -.border-0 { - border: 0!important -} -.border-top { - border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important -} -.border-top-0 { - border-top: 0!important -} -.border-end { - border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important -} -.border-end-0 { - border-right: 0!important -} -.border-bottom { - border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important -} -.border-bottom-0 { - border-bottom: 0!important -} -.border-start { - border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important -} -.border-start-0 { - border-left: 0!important -} -.border-primary { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity))!important -} -.border-secondary { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity))!important -} -.border-success { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity))!important -} -.border-info { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity))!important -} -.border-warning { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity))!important -} -.border-danger { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity))!important -} -.border-light { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity))!important -} -.border-dark { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity))!important -} -.border-black { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity))!important -} -.border-white { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity))!important -} -.border-primary-subtle { - border-color: var(--bs-primary-border-subtle)!important -} -.border-secondary-subtle { - border-color: var(--bs-secondary-border-subtle)!important -} -.border-success-subtle { - border-color: var(--bs-success-border-subtle)!important -} -.border-info-subtle { - border-color: var(--bs-info-border-subtle)!important -} -.border-warning-subtle { - border-color: var(--bs-warning-border-subtle)!important -} -.border-danger-subtle { - border-color: var(--bs-danger-border-subtle)!important -} -.border-light-subtle { - border-color: var(--bs-light-border-subtle)!important -} -.border-dark-subtle { - border-color: var(--bs-dark-border-subtle)!important -} -.border-1 { - border-width: 1px!important -} -.border-2 { - border-width: 2px!important -} -.border-3 { - border-width: 3px!important -} -.border-4 { - border-width: 4px!important -} -.border-5 { - border-width: 5px!important -} -.border-opacity-10 { - --bs-border-opacity: 0.1 -} -.border-opacity-25 { - --bs-border-opacity: 0.25 -} -.border-opacity-50 { - --bs-border-opacity: 0.5 -} -.border-opacity-75 { - --bs-border-opacity: 0.75 -} -.border-opacity-100 { - --bs-border-opacity: 1 -} -.w-25 { - width: 25%!important -} -.w-50 { - width: 50%!important -} -.w-75 { - width: 75%!important -} -.w-100 { - width: 100%!important -} -.w-auto { - width: auto!important -} -.mw-100 { - max-width: 100%!important -} -.vw-100 { - width: 100vw!important -} -.min-vw-100 { - min-width: 100vw!important -} -.h-25 { - height: 25%!important -} -.h-50 { - height: 50%!important -} -.h-75 { - height: 75%!important -} -.h-100 { - height: 100%!important -} -.h-auto { - height: auto!important -} -.mh-100 { - max-height: 100%!important -} -.vh-100 { - height: 100vh!important -} -.min-vh-100 { - min-height: 100vh!important -} -.flex-fill { - flex: 1 1 auto!important -} -.flex-row { - flex-direction: row!important -} -.flex-column { - flex-direction: column!important -} -.flex-row-reverse { - flex-direction: row-reverse!important -} -.flex-column-reverse { - flex-direction: column-reverse!important -} -.flex-grow-0 { - flex-grow: 0!important -} -.flex-grow-1 { - flex-grow: 1!important -} -.flex-shrink-0 { - flex-shrink: 0!important -} -.flex-shrink-1 { - flex-shrink: 1!important -} -.flex-wrap { - flex-wrap: wrap!important -} -.flex-nowrap { - flex-wrap: nowrap!important -} -.flex-wrap-reverse { - flex-wrap: wrap-reverse!important -} -.justify-content-start { - justify-content: flex-start!important -} -.justify-content-end { - justify-content: flex-end!important -} -.justify-content-center { - justify-content: center!important -} -.justify-content-between { - justify-content: space-between!important -} -.justify-content-around { - justify-content: space-around!important -} -.justify-content-evenly { - justify-content: space-evenly!important -} -.align-items-start { - align-items: flex-start!important -} -.align-items-end { - align-items: flex-end!important -} -.align-items-center { - align-items: center!important -} -.align-items-baseline { - align-items: baseline!important -} -.align-items-stretch { - align-items: stretch!important -} -.align-content-start { - align-content: flex-start!important -} -.align-content-end { - align-content: flex-end!important -} -.align-content-center { - align-content: center!important -} -.align-content-between { - align-content: space-between!important -} -.align-content-around { - align-content: space-around!important -} -.align-content-stretch { - align-content: stretch!important -} -.align-self-auto { - align-self: auto!important -} -.align-self-start { - align-self: flex-start!important -} -.align-self-end { - align-self: flex-end!important -} -.align-self-center { - align-self: center!important -} -.align-self-baseline { - align-self: baseline!important -} -.align-self-stretch { - align-self: stretch!important -} -.order-first { - order: -1!important -} -.order-0 { - order: 0!important -} -.order-1 { - order: 1!important -} -.order-2 { - order: 2!important -} -.order-3 { - order: 3!important -} -.order-4 { - order: 4!important -} -.order-5 { - order: 5!important -} -.order-last { - order: 6!important -} -.m-0 { - margin: 0!important -} -.m-1 { - margin: .25rem!important -} -.m-2 { - margin: .5rem!important -} -.m-3 { - margin: 1rem!important -} -.m-4 { - margin: 1.5rem!important -} -.m-5 { - margin: 3rem!important -} -.m-auto { - margin: auto!important -} -.mx-0 { - margin-right: 0!important; - margin-left: 0!important -} -.mx-1 { - margin-right: .25rem!important; - margin-left: .25rem!important -} -.mx-2 { - margin-right: .5rem!important; - margin-left: .5rem!important -} -.mx-3 { - margin-right: 1rem!important; - margin-left: 1rem!important -} -.mx-4 { - margin-right: 1.5rem!important; - margin-left: 1.5rem!important -} -.mx-5 { - margin-right: 3rem!important; - margin-left: 3rem!important -} -.mx-auto { - margin-right: auto!important; - margin-left: auto!important -} -.my-0 { - margin-top: 0!important; - margin-bottom: 0!important -} -.my-1 { - margin-top: .25rem!important; - margin-bottom: .25rem!important -} -.my-2 { - margin-top: .5rem!important; - margin-bottom: .5rem!important -} -.my-3 { - margin-top: 1rem!important; - margin-bottom: 1rem!important -} -.my-4 { - margin-top: 1.5rem!important; - margin-bottom: 1.5rem!important -} -.my-5 { - margin-top: 3rem!important; - margin-bottom: 3rem!important -} -.my-auto { - margin-top: auto!important; - margin-bottom: auto!important -} -.mt-0 { - margin-top: 0!important -} -.mt-1 { - margin-top: .25rem!important -} -.mt-2 { - margin-top: .5rem!important -} -.mt-3 { - margin-top: 1rem!important -} -.mt-4 { - margin-top: 1.5rem!important -} -.mt-5 { - margin-top: 3rem!important -} -.mt-auto { - margin-top: auto!important -} -.me-0 { - margin-right: 0!important -} -.me-1 { - margin-right: .25rem!important -} -.me-2 { - margin-right: .5rem!important -} -.me-3 { - margin-right: 1rem!important -} -.me-4 { - margin-right: 1.5rem!important -} -.me-5 { - margin-right: 3rem!important -} -.me-auto { - margin-right: auto!important -} -.mb-0 { - margin-bottom: 0!important -} -.mb-1 { - margin-bottom: .25rem!important -} -.mb-2 { - margin-bottom: .5rem!important -} -.mb-3 { - margin-bottom: 1rem!important -} -.mb-4 { - margin-bottom: 1.5rem!important -} -.mb-5 { - margin-bottom: 3rem!important -} -.mb-auto { - margin-bottom: auto!important -} -.ms-0 { - margin-left: 0!important -} -.ms-1 { - margin-left: .25rem!important -} -.ms-2 { - margin-left: .5rem!important -} -.ms-3 { - margin-left: 1rem!important -} -.ms-4 { - margin-left: 1.5rem!important -} -.ms-5 { - margin-left: 3rem!important -} -.ms-auto { - margin-left: auto!important -} -.p-0 { - padding: 0!important -} -.p-1 { - padding: .25rem!important -} -.p-2 { - padding: .5rem!important -} -.p-3 { - padding: 1rem!important -} -.p-4 { - padding: 1.5rem!important -} -.p-5 { - padding: 3rem!important -} -.px-0 { - padding-right: 0!important; - padding-left: 0!important -} -.px-1 { - padding-right: .25rem!important; - padding-left: .25rem!important -} -.px-2 { - padding-right: .5rem!important; - padding-left: .5rem!important -} -.px-3 { - padding-right: 1rem!important; - padding-left: 1rem!important -} -.px-4 { - padding-right: 1.5rem!important; - padding-left: 1.5rem!important -} -.px-5 { - padding-right: 3rem!important; - padding-left: 3rem!important -} -.py-0 { - padding-top: 0!important; - padding-bottom: 0!important -} -.py-1 { - padding-top: .25rem!important; - padding-bottom: .25rem!important -} -.py-2 { - padding-top: .5rem!important; - padding-bottom: .5rem!important -} -.py-3 { - padding-top: 1rem!important; - padding-bottom: 1rem!important -} -.py-4 { - padding-top: 1.5rem!important; - padding-bottom: 1.5rem!important -} -.py-5 { - padding-top: 3rem!important; - padding-bottom: 3rem!important -} -.pt-0 { - padding-top: 0!important -} -.pt-1 { - padding-top: .25rem!important -} -.pt-2 { - padding-top: .5rem!important -} -.pt-3 { - padding-top: 1rem!important -} -.pt-4 { - padding-top: 1.5rem!important -} -.pt-5 { - padding-top: 3rem!important -} -.pe-0 { - padding-right: 0!important -} -.pe-1 { - padding-right: .25rem!important -} -.pe-2 { - padding-right: .5rem!important -} -.pe-3 { - padding-right: 1rem!important -} -.pe-4 { - padding-right: 1.5rem!important -} -.pe-5 { - padding-right: 3rem!important -} -.pb-0 { - padding-bottom: 0!important -} -.pb-1 { - padding-bottom: .25rem!important -} -.pb-2 { - padding-bottom: .5rem!important -} -.pb-3 { - padding-bottom: 1rem!important -} -.pb-4 { - padding-bottom: 1.5rem!important -} -.pb-5 { - padding-bottom: 3rem!important -} -.ps-0 { - padding-left: 0!important -} -.ps-1 { - padding-left: .25rem!important -} -.ps-2 { - padding-left: .5rem!important -} -.ps-3 { - padding-left: 1rem!important -} -.ps-4 { - padding-left: 1.5rem!important -} -.ps-5 { - padding-left: 3rem!important -} -.gap-0 { - gap: 0!important -} -.gap-1 { - gap: .25rem!important -} -.gap-2 { - gap: .5rem!important -} -.gap-3 { - gap: 1rem!important -} -.gap-4 { - gap: 1.5rem!important -} -.gap-5 { - gap: 3rem!important -} -.row-gap-0 { - row-gap: 0!important -} -.row-gap-1 { - row-gap: .25rem!important -} -.row-gap-2 { - row-gap: .5rem!important -} -.row-gap-3 { - row-gap: 1rem!important -} -.row-gap-4 { - row-gap: 1.5rem!important -} -.row-gap-5 { - row-gap: 3rem!important -} -.column-gap-0 { - -moz-column-gap: 0!important; - column-gap: 0!important -} -.column-gap-1 { - -moz-column-gap: 0.25rem!important; - column-gap: .25rem!important -} -.column-gap-2 { - -moz-column-gap: 0.5rem!important; - column-gap: .5rem!important -} -.column-gap-3 { - -moz-column-gap: 1rem!important; - column-gap: 1rem!important -} -.column-gap-4 { - -moz-column-gap: 1.5rem!important; - column-gap: 1.5rem!important -} -.column-gap-5 { - -moz-column-gap: 3rem!important; - column-gap: 3rem!important -} -.font-monospace { - font-family: var(--bs-font-monospace)!important -} -.fs-1 { - font-size: calc(1.375rem + 1.5vw)!important -} -.fs-2 { - font-size: calc(1.325rem + .9vw)!important -} -.fs-3 { - font-size: calc(1.3rem + .6vw)!important -} -.fs-4 { - font-size: calc(1.275rem + .3vw)!important -} -.fs-5 { - font-size: 1.25rem!important -} -.fs-6 { - font-size: 1rem!important -} -.fst-italic { - font-style: italic!important -} -.fst-normal { - font-style: normal!important -} -.fw-lighter { - font-weight: lighter!important -} -.fw-light { - font-weight: 300!important -} -.fw-normal { - font-weight: 400!important -} -.fw-medium { - font-weight: 500!important -} -.fw-semibold { - font-weight: 600!important -} -.fw-bold { - font-weight: 700!important -} -.fw-bolder { - font-weight: bolder!important -} -.lh-1 { - line-height: 1!important -} -.lh-sm { - line-height: 1.25!important -} -.lh-base { - line-height: 1.5!important -} -.lh-lg { - line-height: 2!important -} -.text-start { - text-align: left!important -} -.text-end { - text-align: right!important -} -.text-center { - text-align: center!important -} -.text-decoration-none { - text-decoration: none!important -} -.text-decoration-underline { - text-decoration: underline!important -} -.text-decoration-line-through { - text-decoration: line-through!important -} -.text-lowercase { - text-transform: lowercase!important -} -.text-uppercase { - text-transform: uppercase!important -} -.text-capitalize { - text-transform: capitalize!important -} -.text-wrap { - white-space: normal!important -} -.text-nowrap { - white-space: nowrap!important -} -.text-break { - word-wrap: break-word!important; - word-break: break-word!important -} -.text-primary { - --bs-text-opacity: 1; - color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity))!important -} -.text-secondary { - --bs-text-opacity: 1; - color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity))!important -} -.text-success { - --bs-text-opacity: 1; - color: rgba(var(--bs-success-rgb), var(--bs-text-opacity))!important -} -.text-info { - --bs-text-opacity: 1; - color: rgba(var(--bs-info-rgb), var(--bs-text-opacity))!important -} -.text-warning { - --bs-text-opacity: 1; - color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity))!important -} -.text-danger { - --bs-text-opacity: 1; - color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity))!important -} -.text-light { - --bs-text-opacity: 1; - color: rgba(var(--bs-light-rgb), var(--bs-text-opacity))!important -} -.text-dark { - --bs-text-opacity: 1; - color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity))!important -} -.text-black { - --bs-text-opacity: 1; - color: rgba(var(--bs-black-rgb), var(--bs-text-opacity))!important -} -.text-white { - --bs-text-opacity: 1; - color: rgba(var(--bs-white-rgb), var(--bs-text-opacity))!important -} -.text-body { - --bs-text-opacity: 1; - color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity))!important -} -.text-muted { - --bs-text-opacity: 1; - color: var(--bs-secondary-color)!important -} -.text-black-50 { - --bs-text-opacity: 1; - color: rgba(0, 0, 0, .5)!important -} -.text-white-50 { - --bs-text-opacity: 1; - color: rgba(255, 255, 255, .5)!important -} -.text-body-secondary { - --bs-text-opacity: 1; - color: var(--bs-secondary-color)!important -} -.text-body-tertiary { - --bs-text-opacity: 1; - color: var(--bs-tertiary-color)!important -} -.text-body-emphasis { - --bs-text-opacity: 1; - color: var(--bs-emphasis-color)!important -} -.text-reset { - --bs-text-opacity: 1; - color: inherit!important -} -.text-opacity-25 { - --bs-text-opacity: 0.25 -} -.text-opacity-50 { - --bs-text-opacity: 0.5 -} -.text-opacity-75 { - --bs-text-opacity: 0.75 -} -.text-opacity-100 { - --bs-text-opacity: 1 -} -.text-primary-emphasis { - color: var(--bs-primary-text-emphasis)!important -} -.text-secondary-emphasis { - color: var(--bs-secondary-text-emphasis)!important -} -.text-success-emphasis { - color: var(--bs-success-text-emphasis)!important -} -.text-info-emphasis { - color: var(--bs-info-text-emphasis)!important -} -.text-warning-emphasis { - color: var(--bs-warning-text-emphasis)!important -} -.text-danger-emphasis { - color: var(--bs-danger-text-emphasis)!important -} -.text-light-emphasis { - color: var(--bs-light-text-emphasis)!important -} -.text-dark-emphasis { - color: var(--bs-dark-text-emphasis)!important -} -.link-opacity-10 { - --bs-link-opacity: 0.1 -} -.link-opacity-10-hover:hover { - --bs-link-opacity: 0.1 -} -.link-opacity-25 { - --bs-link-opacity: 0.25 -} -.link-opacity-25-hover:hover { - --bs-link-opacity: 0.25 -} -.link-opacity-50 { - --bs-link-opacity: 0.5 -} -.link-opacity-50-hover:hover { - --bs-link-opacity: 0.5 -} -.link-opacity-75 { - --bs-link-opacity: 0.75 -} -.link-opacity-75-hover:hover { - --bs-link-opacity: 0.75 -} -.link-opacity-100 { - --bs-link-opacity: 1 -} -.link-opacity-100-hover:hover { - --bs-link-opacity: 1 -} -.link-offset-1 { - text-underline-offset: 0.125em!important -} -.link-offset-1-hover:hover { - text-underline-offset: 0.125em!important -} -.link-offset-2 { - text-underline-offset: 0.25em!important -} -.link-offset-2-hover:hover { - text-underline-offset: 0.25em!important -} -.link-offset-3 { - text-underline-offset: 0.375em!important -} -.link-offset-3-hover:hover { - text-underline-offset: 0.375em!important -} -.link-underline-primary { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-secondary { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-success { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-info { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-warning { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-danger { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-light { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline-dark { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity))!important; - text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity))!important -} -.link-underline { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1))!important; - text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1))!important -} -.link-underline-opacity-0 { - --bs-link-underline-opacity: 0 -} -.link-underline-opacity-0-hover:hover { - --bs-link-underline-opacity: 0 -} -.link-underline-opacity-10 { - --bs-link-underline-opacity: 0.1 -} -.link-underline-opacity-10-hover:hover { - --bs-link-underline-opacity: 0.1 -} -.link-underline-opacity-25 { - --bs-link-underline-opacity: 0.25 -} -.link-underline-opacity-25-hover:hover { - --bs-link-underline-opacity: 0.25 -} -.link-underline-opacity-50 { - --bs-link-underline-opacity: 0.5 -} -.link-underline-opacity-50-hover:hover { - --bs-link-underline-opacity: 0.5 -} -.link-underline-opacity-75 { - --bs-link-underline-opacity: 0.75 -} -.link-underline-opacity-75-hover:hover { - --bs-link-underline-opacity: 0.75 -} -.link-underline-opacity-100 { - --bs-link-underline-opacity: 1 -} -.link-underline-opacity-100-hover:hover { - --bs-link-underline-opacity: 1 -} -.bg-primary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity))!important -} -.bg-secondary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity))!important -} -.bg-success { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity))!important -} -.bg-info { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity))!important -} -.bg-warning { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity))!important -} -.bg-danger { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity))!important -} -.bg-light { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity))!important -} -.bg-dark { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity))!important -} -.bg-black { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity))!important -} -.bg-white { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity))!important -} -.bg-body { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity))!important -} -.bg-transparent { - --bs-bg-opacity: 1; - background-color: transparent!important -} -.bg-body-secondary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity))!important -} -.bg-body-tertiary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity))!important -} -.bg-opacity-10 { - --bs-bg-opacity: 0.1 -} -.bg-opacity-25 { - --bs-bg-opacity: 0.25 -} -.bg-opacity-50 { - --bs-bg-opacity: 0.5 -} -.bg-opacity-75 { - --bs-bg-opacity: 0.75 -} -.bg-opacity-100 { - --bs-bg-opacity: 1 -} -.bg-primary-subtle { - background-color: var(--bs-primary-bg-subtle)!important -} -.bg-secondary-subtle { - background-color: var(--bs-secondary-bg-subtle)!important -} -.bg-success-subtle { - background-color: var(--bs-success-bg-subtle)!important -} -.bg-info-subtle { - background-color: var(--bs-info-bg-subtle)!important -} -.bg-warning-subtle { - background-color: var(--bs-warning-bg-subtle)!important -} -.bg-danger-subtle { - background-color: var(--bs-danger-bg-subtle)!important -} -.bg-light-subtle { - background-color: var(--bs-light-bg-subtle)!important -} -.bg-dark-subtle { - background-color: var(--bs-dark-bg-subtle)!important -} -.bg-gradient { - background-image: var(--bs-gradient)!important -} -.user-select-all { - -webkit-user-select: all!important; - -moz-user-select: all!important; - user-select: all!important -} -.user-select-auto { - -webkit-user-select: auto!important; - -moz-user-select: auto!important; - user-select: auto!important -} -.user-select-none { - -webkit-user-select: none!important; - -moz-user-select: none!important; - user-select: none!important -} -.pe-none { - pointer-events: none!important -} -.pe-auto { - pointer-events: auto!important -} -.rounded { - border-radius: var(--bs-border-radius)!important -} -.rounded-0 { - border-radius: 0!important -} -.rounded-1 { - border-radius: var(--bs-border-radius-sm)!important -} -.rounded-2 { - border-radius: var(--bs-border-radius)!important -} -.rounded-3 { - border-radius: var(--bs-border-radius-lg)!important -} -.rounded-4 { - border-radius: var(--bs-border-radius-xl)!important -} -.rounded-5 { - border-radius: var(--bs-border-radius-xxl)!important -} -.rounded-circle { - border-radius: 50%!important -} -.rounded-pill { - border-radius: var(--bs-border-radius-pill)!important -} -.rounded-top { - border-top-left-radius: var(--bs-border-radius)!important; - border-top-right-radius: var(--bs-border-radius)!important -} -.rounded-top-0 { - border-top-left-radius: 0!important; - border-top-right-radius: 0!important -} -.rounded-top-1 { - border-top-left-radius: var(--bs-border-radius-sm)!important; - border-top-right-radius: var(--bs-border-radius-sm)!important -} -.rounded-top-2 { - border-top-left-radius: var(--bs-border-radius)!important; - border-top-right-radius: var(--bs-border-radius)!important -} -.rounded-top-3 { - border-top-left-radius: var(--bs-border-radius-lg)!important; - border-top-right-radius: var(--bs-border-radius-lg)!important -} -.rounded-top-4 { - border-top-left-radius: var(--bs-border-radius-xl)!important; - border-top-right-radius: var(--bs-border-radius-xl)!important -} -.rounded-top-5 { - border-top-left-radius: var(--bs-border-radius-xxl)!important; - border-top-right-radius: var(--bs-border-radius-xxl)!important -} -.rounded-top-circle { - border-top-left-radius: 50%!important; - border-top-right-radius: 50%!important -} -.rounded-top-pill { - border-top-left-radius: var(--bs-border-radius-pill)!important; - border-top-right-radius: var(--bs-border-radius-pill)!important -} -.rounded-end { - border-top-right-radius: var(--bs-border-radius)!important; - border-bottom-right-radius: var(--bs-border-radius)!important -} -.rounded-end-0 { - border-top-right-radius: 0!important; - border-bottom-right-radius: 0!important -} -.rounded-end-1 { - border-top-right-radius: var(--bs-border-radius-sm)!important; - border-bottom-right-radius: var(--bs-border-radius-sm)!important -} -.rounded-end-2 { - border-top-right-radius: var(--bs-border-radius)!important; - border-bottom-right-radius: var(--bs-border-radius)!important -} -.rounded-end-3 { - border-top-right-radius: var(--bs-border-radius-lg)!important; - border-bottom-right-radius: var(--bs-border-radius-lg)!important -} -.rounded-end-4 { - border-top-right-radius: var(--bs-border-radius-xl)!important; - border-bottom-right-radius: var(--bs-border-radius-xl)!important -} -.rounded-end-5 { - border-top-right-radius: var(--bs-border-radius-xxl)!important; - border-bottom-right-radius: var(--bs-border-radius-xxl)!important -} -.rounded-end-circle { - border-top-right-radius: 50%!important; - border-bottom-right-radius: 50%!important -} -.rounded-end-pill { - border-top-right-radius: var(--bs-border-radius-pill)!important; - border-bottom-right-radius: var(--bs-border-radius-pill)!important -} -.rounded-bottom { - border-bottom-right-radius: var(--bs-border-radius)!important; - border-bottom-left-radius: var(--bs-border-radius)!important -} -.rounded-bottom-0 { - border-bottom-right-radius: 0!important; - border-bottom-left-radius: 0!important -} -.rounded-bottom-1 { - border-bottom-right-radius: var(--bs-border-radius-sm)!important; - border-bottom-left-radius: var(--bs-border-radius-sm)!important -} -.rounded-bottom-2 { - border-bottom-right-radius: var(--bs-border-radius)!important; - border-bottom-left-radius: var(--bs-border-radius)!important -} -.rounded-bottom-3 { - border-bottom-right-radius: var(--bs-border-radius-lg)!important; - border-bottom-left-radius: var(--bs-border-radius-lg)!important -} -.rounded-bottom-4 { - border-bottom-right-radius: var(--bs-border-radius-xl)!important; - border-bottom-left-radius: var(--bs-border-radius-xl)!important -} -.rounded-bottom-5 { - border-bottom-right-radius: var(--bs-border-radius-xxl)!important; - border-bottom-left-radius: var(--bs-border-radius-xxl)!important -} -.rounded-bottom-circle { - border-bottom-right-radius: 50%!important; - border-bottom-left-radius: 50%!important -} -.rounded-bottom-pill { - border-bottom-right-radius: var(--bs-border-radius-pill)!important; - border-bottom-left-radius: var(--bs-border-radius-pill)!important -} -.rounded-start { - border-bottom-left-radius: var(--bs-border-radius)!important; - border-top-left-radius: var(--bs-border-radius)!important -} -.rounded-start-0 { - border-bottom-left-radius: 0!important; - border-top-left-radius: 0!important -} -.rounded-start-1 { - border-bottom-left-radius: var(--bs-border-radius-sm)!important; - border-top-left-radius: var(--bs-border-radius-sm)!important -} -.rounded-start-2 { - border-bottom-left-radius: var(--bs-border-radius)!important; - border-top-left-radius: var(--bs-border-radius)!important -} -.rounded-start-3 { - border-bottom-left-radius: var(--bs-border-radius-lg)!important; - border-top-left-radius: var(--bs-border-radius-lg)!important -} -.rounded-start-4 { - border-bottom-left-radius: var(--bs-border-radius-xl)!important; - border-top-left-radius: var(--bs-border-radius-xl)!important -} -.rounded-start-5 { - border-bottom-left-radius: var(--bs-border-radius-xxl)!important; - border-top-left-radius: var(--bs-border-radius-xxl)!important -} -.rounded-start-circle { - border-bottom-left-radius: 50%!important; - border-top-left-radius: 50%!important -} -.rounded-start-pill { - border-bottom-left-radius: var(--bs-border-radius-pill)!important; - border-top-left-radius: var(--bs-border-radius-pill)!important -} -.visible { - visibility: visible!important -} -.invisible { - visibility: hidden!important -} -.z-n1 { - z-index: -1!important -} -.z-0 { - z-index: 0!important -} -.z-1 { - z-index: 1!important -} -.z-2 { - z-index: 2!important -} -.z-3 { - z-index: 3!important -} -@media (min-width:576px) { - .float-sm-start { - float: left!important - } - .float-sm-end { - float: right!important - } - .float-sm-none { - float: none!important - } - .object-fit-sm-contain { - -o-object-fit: contain!important; - object-fit: contain!important - } - .object-fit-sm-cover { - -o-object-fit: cover!important; - object-fit: cover!important - } - .object-fit-sm-fill { - -o-object-fit: fill!important; - object-fit: fill!important - } - .object-fit-sm-scale { - -o-object-fit: scale-down!important; - object-fit: scale-down!important - } - .object-fit-sm-none { - -o-object-fit: none!important; - object-fit: none!important - } - .d-sm-inline { - display: inline!important - } - .d-sm-inline-block { - display: inline-block!important - } - .d-sm-block { - display: block!important - } - .d-sm-grid { - display: grid!important - } - .d-sm-inline-grid { - display: inline-grid!important - } - .d-sm-table { - display: table!important - } - .d-sm-table-row { - display: table-row!important - } - .d-sm-table-cell { - display: table-cell!important - } - .d-sm-flex { - display: flex!important - } - .d-sm-inline-flex { - display: inline-flex!important - } - .d-sm-none { - display: none!important - } - .flex-sm-fill { - flex: 1 1 auto!important - } - .flex-sm-row { - flex-direction: row!important - } - .flex-sm-column { - flex-direction: column!important - } - .flex-sm-row-reverse { - flex-direction: row-reverse!important - } - .flex-sm-column-reverse { - flex-direction: column-reverse!important - } - .flex-sm-grow-0 { - flex-grow: 0!important - } - .flex-sm-grow-1 { - flex-grow: 1!important - } - .flex-sm-shrink-0 { - flex-shrink: 0!important - } - .flex-sm-shrink-1 { - flex-shrink: 1!important - } - .flex-sm-wrap { - flex-wrap: wrap!important - } - .flex-sm-nowrap { - flex-wrap: nowrap!important - } - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse!important - } - .justify-content-sm-start { - justify-content: flex-start!important - } - .justify-content-sm-end { - justify-content: flex-end!important - } - .justify-content-sm-center { - justify-content: center!important - } - .justify-content-sm-between { - justify-content: space-between!important - } - .justify-content-sm-around { - justify-content: space-around!important - } - .justify-content-sm-evenly { - justify-content: space-evenly!important - } - .align-items-sm-start { - align-items: flex-start!important - } - .align-items-sm-end { - align-items: flex-end!important - } - .align-items-sm-center { - align-items: center!important - } - .align-items-sm-baseline { - align-items: baseline!important - } - .align-items-sm-stretch { - align-items: stretch!important - } - .align-content-sm-start { - align-content: flex-start!important - } - .align-content-sm-end { - align-content: flex-end!important - } - .align-content-sm-center { - align-content: center!important - } - .align-content-sm-between { - align-content: space-between!important - } - .align-content-sm-around { - align-content: space-around!important - } - .align-content-sm-stretch { - align-content: stretch!important - } - .align-self-sm-auto { - align-self: auto!important - } - .align-self-sm-start { - align-self: flex-start!important - } - .align-self-sm-end { - align-self: flex-end!important - } - .align-self-sm-center { - align-self: center!important - } - .align-self-sm-baseline { - align-self: baseline!important - } - .align-self-sm-stretch { - align-self: stretch!important - } - .order-sm-first { - order: -1!important - } - .order-sm-0 { - order: 0!important - } - .order-sm-1 { - order: 1!important - } - .order-sm-2 { - order: 2!important - } - .order-sm-3 { - order: 3!important - } - .order-sm-4 { - order: 4!important - } - .order-sm-5 { - order: 5!important - } - .order-sm-last { - order: 6!important - } - .m-sm-0 { - margin: 0!important - } - .m-sm-1 { - margin: .25rem!important - } - .m-sm-2 { - margin: .5rem!important - } - .m-sm-3 { - margin: 1rem!important - } - .m-sm-4 { - margin: 1.5rem!important - } - .m-sm-5 { - margin: 3rem!important - } - .m-sm-auto { - margin: auto!important - } - .mx-sm-0 { - margin-right: 0!important; - margin-left: 0!important - } - .mx-sm-1 { - margin-right: .25rem!important; - margin-left: .25rem!important - } - .mx-sm-2 { - margin-right: .5rem!important; - margin-left: .5rem!important - } - .mx-sm-3 { - margin-right: 1rem!important; - margin-left: 1rem!important - } - .mx-sm-4 { - margin-right: 1.5rem!important; - margin-left: 1.5rem!important - } - .mx-sm-5 { - margin-right: 3rem!important; - margin-left: 3rem!important - } - .mx-sm-auto { - margin-right: auto!important; - margin-left: auto!important - } - .my-sm-0 { - margin-top: 0!important; - margin-bottom: 0!important - } - .my-sm-1 { - margin-top: .25rem!important; - margin-bottom: .25rem!important - } - .my-sm-2 { - margin-top: .5rem!important; - margin-bottom: .5rem!important - } - .my-sm-3 { - margin-top: 1rem!important; - margin-bottom: 1rem!important - } - .my-sm-4 { - margin-top: 1.5rem!important; - margin-bottom: 1.5rem!important - } - .my-sm-5 { - margin-top: 3rem!important; - margin-bottom: 3rem!important - } - .my-sm-auto { - margin-top: auto!important; - margin-bottom: auto!important - } - .mt-sm-0 { - margin-top: 0!important - } - .mt-sm-1 { - margin-top: .25rem!important - } - .mt-sm-2 { - margin-top: .5rem!important - } - .mt-sm-3 { - margin-top: 1rem!important - } - .mt-sm-4 { - margin-top: 1.5rem!important - } - .mt-sm-5 { - margin-top: 3rem!important - } - .mt-sm-auto { - margin-top: auto!important - } - .me-sm-0 { - margin-right: 0!important - } - .me-sm-1 { - margin-right: .25rem!important - } - .me-sm-2 { - margin-right: .5rem!important - } - .me-sm-3 { - margin-right: 1rem!important - } - .me-sm-4 { - margin-right: 1.5rem!important - } - .me-sm-5 { - margin-right: 3rem!important - } - .me-sm-auto { - margin-right: auto!important - } - .mb-sm-0 { - margin-bottom: 0!important - } - .mb-sm-1 { - margin-bottom: .25rem!important - } - .mb-sm-2 { - margin-bottom: .5rem!important - } - .mb-sm-3 { - margin-bottom: 1rem!important - } - .mb-sm-4 { - margin-bottom: 1.5rem!important - } - .mb-sm-5 { - margin-bottom: 3rem!important - } - .mb-sm-auto { - margin-bottom: auto!important - } - .ms-sm-0 { - margin-left: 0!important - } - .ms-sm-1 { - margin-left: .25rem!important - } - .ms-sm-2 { - margin-left: .5rem!important - } - .ms-sm-3 { - margin-left: 1rem!important - } - .ms-sm-4 { - margin-left: 1.5rem!important - } - .ms-sm-5 { - margin-left: 3rem!important - } - .ms-sm-auto { - margin-left: auto!important - } - .p-sm-0 { - padding: 0!important - } - .p-sm-1 { - padding: .25rem!important - } - .p-sm-2 { - padding: .5rem!important - } - .p-sm-3 { - padding: 1rem!important - } - .p-sm-4 { - padding: 1.5rem!important - } - .p-sm-5 { - padding: 3rem!important - } - .px-sm-0 { - padding-right: 0!important; - padding-left: 0!important - } - .px-sm-1 { - padding-right: .25rem!important; - padding-left: .25rem!important - } - .px-sm-2 { - padding-right: .5rem!important; - padding-left: .5rem!important - } - .px-sm-3 { - padding-right: 1rem!important; - padding-left: 1rem!important - } - .px-sm-4 { - padding-right: 1.5rem!important; - padding-left: 1.5rem!important - } - .px-sm-5 { - padding-right: 3rem!important; - padding-left: 3rem!important - } - .py-sm-0 { - padding-top: 0!important; - padding-bottom: 0!important - } - .py-sm-1 { - padding-top: .25rem!important; - padding-bottom: .25rem!important - } - .py-sm-2 { - padding-top: .5rem!important; - padding-bottom: .5rem!important - } - .py-sm-3 { - padding-top: 1rem!important; - padding-bottom: 1rem!important - } - .py-sm-4 { - padding-top: 1.5rem!important; - padding-bottom: 1.5rem!important - } - .py-sm-5 { - padding-top: 3rem!important; - padding-bottom: 3rem!important - } - .pt-sm-0 { - padding-top: 0!important - } - .pt-sm-1 { - padding-top: .25rem!important - } - .pt-sm-2 { - padding-top: .5rem!important - } - .pt-sm-3 { - padding-top: 1rem!important - } - .pt-sm-4 { - padding-top: 1.5rem!important - } - .pt-sm-5 { - padding-top: 3rem!important - } - .pe-sm-0 { - padding-right: 0!important - } - .pe-sm-1 { - padding-right: .25rem!important - } - .pe-sm-2 { - padding-right: .5rem!important - } - .pe-sm-3 { - padding-right: 1rem!important - } - .pe-sm-4 { - padding-right: 1.5rem!important - } - .pe-sm-5 { - padding-right: 3rem!important - } - .pb-sm-0 { - padding-bottom: 0!important - } - .pb-sm-1 { - padding-bottom: .25rem!important - } - .pb-sm-2 { - padding-bottom: .5rem!important - } - .pb-sm-3 { - padding-bottom: 1rem!important - } - .pb-sm-4 { - padding-bottom: 1.5rem!important - } - .pb-sm-5 { - padding-bottom: 3rem!important - } - .ps-sm-0 { - padding-left: 0!important - } - .ps-sm-1 { - padding-left: .25rem!important - } - .ps-sm-2 { - padding-left: .5rem!important - } - .ps-sm-3 { - padding-left: 1rem!important - } - .ps-sm-4 { - padding-left: 1.5rem!important - } - .ps-sm-5 { - padding-left: 3rem!important - } - .gap-sm-0 { - gap: 0!important - } - .gap-sm-1 { - gap: .25rem!important - } - .gap-sm-2 { - gap: .5rem!important - } - .gap-sm-3 { - gap: 1rem!important - } - .gap-sm-4 { - gap: 1.5rem!important - } - .gap-sm-5 { - gap: 3rem!important - } - .row-gap-sm-0 { - row-gap: 0!important - } - .row-gap-sm-1 { - row-gap: .25rem!important - } - .row-gap-sm-2 { - row-gap: .5rem!important - } - .row-gap-sm-3 { - row-gap: 1rem!important - } - .row-gap-sm-4 { - row-gap: 1.5rem!important - } - .row-gap-sm-5 { - row-gap: 3rem!important - } - .column-gap-sm-0 { - -moz-column-gap: 0!important; - column-gap: 0!important - } - .column-gap-sm-1 { - -moz-column-gap: 0.25rem!important; - column-gap: .25rem!important - } - .column-gap-sm-2 { - -moz-column-gap: 0.5rem!important; - column-gap: .5rem!important - } - .column-gap-sm-3 { - -moz-column-gap: 1rem!important; - column-gap: 1rem!important - } - .column-gap-sm-4 { - -moz-column-gap: 1.5rem!important; - column-gap: 1.5rem!important - } - .column-gap-sm-5 { - -moz-column-gap: 3rem!important; - column-gap: 3rem!important - } - .text-sm-start { - text-align: left!important - } - .text-sm-end { - text-align: right!important - } - .text-sm-center { - text-align: center!important - } -} -@media (min-width:768px) { - .float-md-start { - float: left!important - } - .float-md-end { - float: right!important - } - .float-md-none { - float: none!important - } - .object-fit-md-contain { - -o-object-fit: contain!important; - object-fit: contain!important - } - .object-fit-md-cover { - -o-object-fit: cover!important; - object-fit: cover!important - } - .object-fit-md-fill { - -o-object-fit: fill!important; - object-fit: fill!important - } - .object-fit-md-scale { - -o-object-fit: scale-down!important; - object-fit: scale-down!important - } - .object-fit-md-none { - -o-object-fit: none!important; - object-fit: none!important - } - .d-md-inline { - display: inline!important - } - .d-md-inline-block { - display: inline-block!important - } - .d-md-block { - display: block!important - } - .d-md-grid { - display: grid!important - } - .d-md-inline-grid { - display: inline-grid!important - } - .d-md-table { - display: table!important - } - .d-md-table-row { - display: table-row!important - } - .d-md-table-cell { - display: table-cell!important - } - .d-md-flex { - display: flex!important - } - .d-md-inline-flex { - display: inline-flex!important - } - .d-md-none { - display: none!important - } - .flex-md-fill { - flex: 1 1 auto!important - } - .flex-md-row { - flex-direction: row!important - } - .flex-md-column { - flex-direction: column!important - } - .flex-md-row-reverse { - flex-direction: row-reverse!important - } - .flex-md-column-reverse { - flex-direction: column-reverse!important - } - .flex-md-grow-0 { - flex-grow: 0!important - } - .flex-md-grow-1 { - flex-grow: 1!important - } - .flex-md-shrink-0 { - flex-shrink: 0!important - } - .flex-md-shrink-1 { - flex-shrink: 1!important - } - .flex-md-wrap { - flex-wrap: wrap!important - } - .flex-md-nowrap { - flex-wrap: nowrap!important - } - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse!important - } - .justify-content-md-start { - justify-content: flex-start!important - } - .justify-content-md-end { - justify-content: flex-end!important - } - .justify-content-md-center { - justify-content: center!important - } - .justify-content-md-between { - justify-content: space-between!important - } - .justify-content-md-around { - justify-content: space-around!important - } - .justify-content-md-evenly { - justify-content: space-evenly!important - } - .align-items-md-start { - align-items: flex-start!important - } - .align-items-md-end { - align-items: flex-end!important - } - .align-items-md-center { - align-items: center!important - } - .align-items-md-baseline { - align-items: baseline!important - } - .align-items-md-stretch { - align-items: stretch!important - } - .align-content-md-start { - align-content: flex-start!important - } - .align-content-md-end { - align-content: flex-end!important - } - .align-content-md-center { - align-content: center!important - } - .align-content-md-between { - align-content: space-between!important - } - .align-content-md-around { - align-content: space-around!important - } - .align-content-md-stretch { - align-content: stretch!important - } - .align-self-md-auto { - align-self: auto!important - } - .align-self-md-start { - align-self: flex-start!important - } - .align-self-md-end { - align-self: flex-end!important - } - .align-self-md-center { - align-self: center!important - } - .align-self-md-baseline { - align-self: baseline!important - } - .align-self-md-stretch { - align-self: stretch!important - } - .order-md-first { - order: -1!important - } - .order-md-0 { - order: 0!important - } - .order-md-1 { - order: 1!important - } - .order-md-2 { - order: 2!important - } - .order-md-3 { - order: 3!important - } - .order-md-4 { - order: 4!important - } - .order-md-5 { - order: 5!important - } - .order-md-last { - order: 6!important - } - .m-md-0 { - margin: 0!important - } - .m-md-1 { - margin: .25rem!important - } - .m-md-2 { - margin: .5rem!important - } - .m-md-3 { - margin: 1rem!important - } - .m-md-4 { - margin: 1.5rem!important - } - .m-md-5 { - margin: 3rem!important - } - .m-md-auto { - margin: auto!important - } - .mx-md-0 { - margin-right: 0!important; - margin-left: 0!important - } - .mx-md-1 { - margin-right: .25rem!important; - margin-left: .25rem!important - } - .mx-md-2 { - margin-right: .5rem!important; - margin-left: .5rem!important - } - .mx-md-3 { - margin-right: 1rem!important; - margin-left: 1rem!important - } - .mx-md-4 { - margin-right: 1.5rem!important; - margin-left: 1.5rem!important - } - .mx-md-5 { - margin-right: 3rem!important; - margin-left: 3rem!important - } - .mx-md-auto { - margin-right: auto!important; - margin-left: auto!important - } - .my-md-0 { - margin-top: 0!important; - margin-bottom: 0!important - } - .my-md-1 { - margin-top: .25rem!important; - margin-bottom: .25rem!important - } - .my-md-2 { - margin-top: .5rem!important; - margin-bottom: .5rem!important - } - .my-md-3 { - margin-top: 1rem!important; - margin-bottom: 1rem!important - } - .my-md-4 { - margin-top: 1.5rem!important; - margin-bottom: 1.5rem!important - } - .my-md-5 { - margin-top: 3rem!important; - margin-bottom: 3rem!important - } - .my-md-auto { - margin-top: auto!important; - margin-bottom: auto!important - } - .mt-md-0 { - margin-top: 0!important - } - .mt-md-1 { - margin-top: .25rem!important - } - .mt-md-2 { - margin-top: .5rem!important - } - .mt-md-3 { - margin-top: 1rem!important - } - .mt-md-4 { - margin-top: 1.5rem!important - } - .mt-md-5 { - margin-top: 3rem!important - } - .mt-md-auto { - margin-top: auto!important - } - .me-md-0 { - margin-right: 0!important - } - .me-md-1 { - margin-right: .25rem!important - } - .me-md-2 { - margin-right: .5rem!important - } - .me-md-3 { - margin-right: 1rem!important - } - .me-md-4 { - margin-right: 1.5rem!important - } - .me-md-5 { - margin-right: 3rem!important - } - .me-md-auto { - margin-right: auto!important - } - .mb-md-0 { - margin-bottom: 0!important - } - .mb-md-1 { - margin-bottom: .25rem!important - } - .mb-md-2 { - margin-bottom: .5rem!important - } - .mb-md-3 { - margin-bottom: 1rem!important - } - .mb-md-4 { - margin-bottom: 1.5rem!important - } - .mb-md-5 { - margin-bottom: 3rem!important - } - .mb-md-auto { - margin-bottom: auto!important - } - .ms-md-0 { - margin-left: 0!important - } - .ms-md-1 { - margin-left: .25rem!important - } - .ms-md-2 { - margin-left: .5rem!important - } - .ms-md-3 { - margin-left: 1rem!important - } - .ms-md-4 { - margin-left: 1.5rem!important - } - .ms-md-5 { - margin-left: 3rem!important - } - .ms-md-auto { - margin-left: auto!important - } - .p-md-0 { - padding: 0!important - } - .p-md-1 { - padding: .25rem!important - } - .p-md-2 { - padding: .5rem!important - } - .p-md-3 { - padding: 1rem!important - } - .p-md-4 { - padding: 1.5rem!important - } - .p-md-5 { - padding: 3rem!important - } - .px-md-0 { - padding-right: 0!important; - padding-left: 0!important - } - .px-md-1 { - padding-right: .25rem!important; - padding-left: .25rem!important - } - .px-md-2 { - padding-right: .5rem!important; - padding-left: .5rem!important - } - .px-md-3 { - padding-right: 1rem!important; - padding-left: 1rem!important - } - .px-md-4 { - padding-right: 1.5rem!important; - padding-left: 1.5rem!important - } - .px-md-5 { - padding-right: 3rem!important; - padding-left: 3rem!important - } - .py-md-0 { - padding-top: 0!important; - padding-bottom: 0!important - } - .py-md-1 { - padding-top: .25rem!important; - padding-bottom: .25rem!important - } - .py-md-2 { - padding-top: .5rem!important; - padding-bottom: .5rem!important - } - .py-md-3 { - padding-top: 1rem!important; - padding-bottom: 1rem!important - } - .py-md-4 { - padding-top: 1.5rem!important; - padding-bottom: 1.5rem!important - } - .py-md-5 { - padding-top: 3rem!important; - padding-bottom: 3rem!important - } - .pt-md-0 { - padding-top: 0!important - } - .pt-md-1 { - padding-top: .25rem!important - } - .pt-md-2 { - padding-top: .5rem!important - } - .pt-md-3 { - padding-top: 1rem!important - } - .pt-md-4 { - padding-top: 1.5rem!important - } - .pt-md-5 { - padding-top: 3rem!important - } - .pe-md-0 { - padding-right: 0!important - } - .pe-md-1 { - padding-right: .25rem!important - } - .pe-md-2 { - padding-right: .5rem!important - } - .pe-md-3 { - padding-right: 1rem!important - } - .pe-md-4 { - padding-right: 1.5rem!important - } - .pe-md-5 { - padding-right: 3rem!important - } - .pb-md-0 { - padding-bottom: 0!important - } - .pb-md-1 { - padding-bottom: .25rem!important - } - .pb-md-2 { - padding-bottom: .5rem!important - } - .pb-md-3 { - padding-bottom: 1rem!important - } - .pb-md-4 { - padding-bottom: 1.5rem!important - } - .pb-md-5 { - padding-bottom: 3rem!important - } - .ps-md-0 { - padding-left: 0!important - } - .ps-md-1 { - padding-left: .25rem!important - } - .ps-md-2 { - padding-left: .5rem!important - } - .ps-md-3 { - padding-left: 1rem!important - } - .ps-md-4 { - padding-left: 1.5rem!important - } - .ps-md-5 { - padding-left: 3rem!important - } - .gap-md-0 { - gap: 0!important - } - .gap-md-1 { - gap: .25rem!important - } - .gap-md-2 { - gap: .5rem!important - } - .gap-md-3 { - gap: 1rem!important - } - .gap-md-4 { - gap: 1.5rem!important - } - .gap-md-5 { - gap: 3rem!important - } - .row-gap-md-0 { - row-gap: 0!important - } - .row-gap-md-1 { - row-gap: .25rem!important - } - .row-gap-md-2 { - row-gap: .5rem!important - } - .row-gap-md-3 { - row-gap: 1rem!important - } - .row-gap-md-4 { - row-gap: 1.5rem!important - } - .row-gap-md-5 { - row-gap: 3rem!important - } - .column-gap-md-0 { - -moz-column-gap: 0!important; - column-gap: 0!important - } - .column-gap-md-1 { - -moz-column-gap: 0.25rem!important; - column-gap: .25rem!important - } - .column-gap-md-2 { - -moz-column-gap: 0.5rem!important; - column-gap: .5rem!important - } - .column-gap-md-3 { - -moz-column-gap: 1rem!important; - column-gap: 1rem!important - } - .column-gap-md-4 { - -moz-column-gap: 1.5rem!important; - column-gap: 1.5rem!important - } - .column-gap-md-5 { - -moz-column-gap: 3rem!important; - column-gap: 3rem!important - } - .text-md-start { - text-align: left!important - } - .text-md-end { - text-align: right!important - } - .text-md-center { - text-align: center!important - } -} -@media (min-width:992px) { - .float-lg-start { - float: left!important - } - .float-lg-end { - float: right!important - } - .float-lg-none { - float: none!important - } - .object-fit-lg-contain { - -o-object-fit: contain!important; - object-fit: contain!important - } - .object-fit-lg-cover { - -o-object-fit: cover!important; - object-fit: cover!important - } - .object-fit-lg-fill { - -o-object-fit: fill!important; - object-fit: fill!important - } - .object-fit-lg-scale { - -o-object-fit: scale-down!important; - object-fit: scale-down!important - } - .object-fit-lg-none { - -o-object-fit: none!important; - object-fit: none!important - } - .d-lg-inline { - display: inline!important - } - .d-lg-inline-block { - display: inline-block!important - } - .d-lg-block { - display: block!important - } - .d-lg-grid { - display: grid!important - } - .d-lg-inline-grid { - display: inline-grid!important - } - .d-lg-table { - display: table!important - } - .d-lg-table-row { - display: table-row!important - } - .d-lg-table-cell { - display: table-cell!important - } - .d-lg-flex { - display: flex!important - } - .d-lg-inline-flex { - display: inline-flex!important - } - .d-lg-none { - display: none!important - } - .flex-lg-fill { - flex: 1 1 auto!important - } - .flex-lg-row { - flex-direction: row!important - } - .flex-lg-column { - flex-direction: column!important - } - .flex-lg-row-reverse { - flex-direction: row-reverse!important - } - .flex-lg-column-reverse { - flex-direction: column-reverse!important - } - .flex-lg-grow-0 { - flex-grow: 0!important - } - .flex-lg-grow-1 { - flex-grow: 1!important - } - .flex-lg-shrink-0 { - flex-shrink: 0!important - } - .flex-lg-shrink-1 { - flex-shrink: 1!important - } - .flex-lg-wrap { - flex-wrap: wrap!important - } - .flex-lg-nowrap { - flex-wrap: nowrap!important - } - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse!important - } - .justify-content-lg-start { - justify-content: flex-start!important - } - .justify-content-lg-end { - justify-content: flex-end!important - } - .justify-content-lg-center { - justify-content: center!important - } - .justify-content-lg-between { - justify-content: space-between!important - } - .justify-content-lg-around { - justify-content: space-around!important - } - .justify-content-lg-evenly { - justify-content: space-evenly!important - } - .align-items-lg-start { - align-items: flex-start!important - } - .align-items-lg-end { - align-items: flex-end!important - } - .align-items-lg-center { - align-items: center!important - } - .align-items-lg-baseline { - align-items: baseline!important - } - .align-items-lg-stretch { - align-items: stretch!important - } - .align-content-lg-start { - align-content: flex-start!important - } - .align-content-lg-end { - align-content: flex-end!important - } - .align-content-lg-center { - align-content: center!important - } - .align-content-lg-between { - align-content: space-between!important - } - .align-content-lg-around { - align-content: space-around!important - } - .align-content-lg-stretch { - align-content: stretch!important - } - .align-self-lg-auto { - align-self: auto!important - } - .align-self-lg-start { - align-self: flex-start!important - } - .align-self-lg-end { - align-self: flex-end!important - } - .align-self-lg-center { - align-self: center!important - } - .align-self-lg-baseline { - align-self: baseline!important - } - .align-self-lg-stretch { - align-self: stretch!important - } - .order-lg-first { - order: -1!important - } - .order-lg-0 { - order: 0!important - } - .order-lg-1 { - order: 1!important - } - .order-lg-2 { - order: 2!important - } - .order-lg-3 { - order: 3!important - } - .order-lg-4 { - order: 4!important - } - .order-lg-5 { - order: 5!important - } - .order-lg-last { - order: 6!important - } - .m-lg-0 { - margin: 0!important - } - .m-lg-1 { - margin: .25rem!important - } - .m-lg-2 { - margin: .5rem!important - } - .m-lg-3 { - margin: 1rem!important - } - .m-lg-4 { - margin: 1.5rem!important - } - .m-lg-5 { - margin: 3rem!important - } - .m-lg-auto { - margin: auto!important - } - .mx-lg-0 { - margin-right: 0!important; - margin-left: 0!important - } - .mx-lg-1 { - margin-right: .25rem!important; - margin-left: .25rem!important - } - .mx-lg-2 { - margin-right: .5rem!important; - margin-left: .5rem!important - } - .mx-lg-3 { - margin-right: 1rem!important; - margin-left: 1rem!important - } - .mx-lg-4 { - margin-right: 1.5rem!important; - margin-left: 1.5rem!important - } - .mx-lg-5 { - margin-right: 3rem!important; - margin-left: 3rem!important - } - .mx-lg-auto { - margin-right: auto!important; - margin-left: auto!important - } - .my-lg-0 { - margin-top: 0!important; - margin-bottom: 0!important - } - .my-lg-1 { - margin-top: .25rem!important; - margin-bottom: .25rem!important - } - .my-lg-2 { - margin-top: .5rem!important; - margin-bottom: .5rem!important - } - .my-lg-3 { - margin-top: 1rem!important; - margin-bottom: 1rem!important - } - .my-lg-4 { - margin-top: 1.5rem!important; - margin-bottom: 1.5rem!important - } - .my-lg-5 { - margin-top: 3rem!important; - margin-bottom: 3rem!important - } - .my-lg-auto { - margin-top: auto!important; - margin-bottom: auto!important - } - .mt-lg-0 { - margin-top: 0!important - } - .mt-lg-1 { - margin-top: .25rem!important - } - .mt-lg-2 { - margin-top: .5rem!important - } - .mt-lg-3 { - margin-top: 1rem!important - } - .mt-lg-4 { - margin-top: 1.5rem!important - } - .mt-lg-5 { - margin-top: 3rem!important - } - .mt-lg-auto { - margin-top: auto!important - } - .me-lg-0 { - margin-right: 0!important - } - .me-lg-1 { - margin-right: .25rem!important - } - .me-lg-2 { - margin-right: .5rem!important - } - .me-lg-3 { - margin-right: 1rem!important - } - .me-lg-4 { - margin-right: 1.5rem!important - } - .me-lg-5 { - margin-right: 3rem!important - } - .me-lg-auto { - margin-right: auto!important - } - .mb-lg-0 { - margin-bottom: 0!important - } - .mb-lg-1 { - margin-bottom: .25rem!important - } - .mb-lg-2 { - margin-bottom: .5rem!important - } - .mb-lg-3 { - margin-bottom: 1rem!important - } - .mb-lg-4 { - margin-bottom: 1.5rem!important - } - .mb-lg-5 { - margin-bottom: 3rem!important - } - .mb-lg-auto { - margin-bottom: auto!important - } - .ms-lg-0 { - margin-left: 0!important - } - .ms-lg-1 { - margin-left: .25rem!important - } - .ms-lg-2 { - margin-left: .5rem!important - } - .ms-lg-3 { - margin-left: 1rem!important - } - .ms-lg-4 { - margin-left: 1.5rem!important - } - .ms-lg-5 { - margin-left: 3rem!important - } - .ms-lg-auto { - margin-left: auto!important - } - .p-lg-0 { - padding: 0!important - } - .p-lg-1 { - padding: .25rem!important - } - .p-lg-2 { - padding: .5rem!important - } - .p-lg-3 { - padding: 1rem!important - } - .p-lg-4 { - padding: 1.5rem!important - } - .p-lg-5 { - padding: 3rem!important - } - .px-lg-0 { - padding-right: 0!important; - padding-left: 0!important - } - .px-lg-1 { - padding-right: .25rem!important; - padding-left: .25rem!important - } - .px-lg-2 { - padding-right: .5rem!important; - padding-left: .5rem!important - } - .px-lg-3 { - padding-right: 1rem!important; - padding-left: 1rem!important - } - .px-lg-4 { - padding-right: 1.5rem!important; - padding-left: 1.5rem!important - } - .px-lg-5 { - padding-right: 3rem!important; - padding-left: 3rem!important - } - .py-lg-0 { - padding-top: 0!important; - padding-bottom: 0!important - } - .py-lg-1 { - padding-top: .25rem!important; - padding-bottom: .25rem!important - } - .py-lg-2 { - padding-top: .5rem!important; - padding-bottom: .5rem!important - } - .py-lg-3 { - padding-top: 1rem!important; - padding-bottom: 1rem!important - } - .py-lg-4 { - padding-top: 1.5rem!important; - padding-bottom: 1.5rem!important - } - .py-lg-5 { - padding-top: 3rem!important; - padding-bottom: 3rem!important - } - .pt-lg-0 { - padding-top: 0!important - } - .pt-lg-1 { - padding-top: .25rem!important - } - .pt-lg-2 { - padding-top: .5rem!important - } - .pt-lg-3 { - padding-top: 1rem!important - } - .pt-lg-4 { - padding-top: 1.5rem!important - } - .pt-lg-5 { - padding-top: 3rem!important - } - .pe-lg-0 { - padding-right: 0!important - } - .pe-lg-1 { - padding-right: .25rem!important - } - .pe-lg-2 { - padding-right: .5rem!important - } - .pe-lg-3 { - padding-right: 1rem!important - } - .pe-lg-4 { - padding-right: 1.5rem!important - } - .pe-lg-5 { - padding-right: 3rem!important - } - .pb-lg-0 { - padding-bottom: 0!important - } - .pb-lg-1 { - padding-bottom: .25rem!important - } - .pb-lg-2 { - padding-bottom: .5rem!important - } - .pb-lg-3 { - padding-bottom: 1rem!important - } - .pb-lg-4 { - padding-bottom: 1.5rem!important - } - .pb-lg-5 { - padding-bottom: 3rem!important - } - .ps-lg-0 { - padding-left: 0!important - } - .ps-lg-1 { - padding-left: .25rem!important - } - .ps-lg-2 { - padding-left: .5rem!important - } - .ps-lg-3 { - padding-left: 1rem!important - } - .ps-lg-4 { - padding-left: 1.5rem!important - } - .ps-lg-5 { - padding-left: 3rem!important - } - .gap-lg-0 { - gap: 0!important - } - .gap-lg-1 { - gap: .25rem!important - } - .gap-lg-2 { - gap: .5rem!important - } - .gap-lg-3 { - gap: 1rem!important - } - .gap-lg-4 { - gap: 1.5rem!important - } - .gap-lg-5 { - gap: 3rem!important - } - .row-gap-lg-0 { - row-gap: 0!important - } - .row-gap-lg-1 { - row-gap: .25rem!important - } - .row-gap-lg-2 { - row-gap: .5rem!important - } - .row-gap-lg-3 { - row-gap: 1rem!important - } - .row-gap-lg-4 { - row-gap: 1.5rem!important - } - .row-gap-lg-5 { - row-gap: 3rem!important - } - .column-gap-lg-0 { - -moz-column-gap: 0!important; - column-gap: 0!important - } - .column-gap-lg-1 { - -moz-column-gap: 0.25rem!important; - column-gap: .25rem!important - } - .column-gap-lg-2 { - -moz-column-gap: 0.5rem!important; - column-gap: .5rem!important - } - .column-gap-lg-3 { - -moz-column-gap: 1rem!important; - column-gap: 1rem!important - } - .column-gap-lg-4 { - -moz-column-gap: 1.5rem!important; - column-gap: 1.5rem!important - } - .column-gap-lg-5 { - -moz-column-gap: 3rem!important; - column-gap: 3rem!important - } - .text-lg-start { - text-align: left!important - } - .text-lg-end { - text-align: right!important - } - .text-lg-center { - text-align: center!important - } -} -@media (min-width:1200px) { - .float-xl-start { - float: left!important - } - .float-xl-end { - float: right!important - } - .float-xl-none { - float: none!important - } - .object-fit-xl-contain { - -o-object-fit: contain!important; - object-fit: contain!important - } - .object-fit-xl-cover { - -o-object-fit: cover!important; - object-fit: cover!important - } - .object-fit-xl-fill { - -o-object-fit: fill!important; - object-fit: fill!important - } - .object-fit-xl-scale { - -o-object-fit: scale-down!important; - object-fit: scale-down!important - } - .object-fit-xl-none { - -o-object-fit: none!important; - object-fit: none!important - } - .d-xl-inline { - display: inline!important - } - .d-xl-inline-block { - display: inline-block!important - } - .d-xl-block { - display: block!important - } - .d-xl-grid { - display: grid!important - } - .d-xl-inline-grid { - display: inline-grid!important - } - .d-xl-table { - display: table!important - } - .d-xl-table-row { - display: table-row!important - } - .d-xl-table-cell { - display: table-cell!important - } - .d-xl-flex { - display: flex!important - } - .d-xl-inline-flex { - display: inline-flex!important - } - .d-xl-none { - display: none!important - } - .flex-xl-fill { - flex: 1 1 auto!important - } - .flex-xl-row { - flex-direction: row!important - } - .flex-xl-column { - flex-direction: column!important - } - .flex-xl-row-reverse { - flex-direction: row-reverse!important - } - .flex-xl-column-reverse { - flex-direction: column-reverse!important - } - .flex-xl-grow-0 { - flex-grow: 0!important - } - .flex-xl-grow-1 { - flex-grow: 1!important - } - .flex-xl-shrink-0 { - flex-shrink: 0!important - } - .flex-xl-shrink-1 { - flex-shrink: 1!important - } - .flex-xl-wrap { - flex-wrap: wrap!important - } - .flex-xl-nowrap { - flex-wrap: nowrap!important - } - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse!important - } - .justify-content-xl-start { - justify-content: flex-start!important - } - .justify-content-xl-end { - justify-content: flex-end!important - } - .justify-content-xl-center { - justify-content: center!important - } - .justify-content-xl-between { - justify-content: space-between!important - } - .justify-content-xl-around { - justify-content: space-around!important - } - .justify-content-xl-evenly { - justify-content: space-evenly!important - } - .align-items-xl-start { - align-items: flex-start!important - } - .align-items-xl-end { - align-items: flex-end!important - } - .align-items-xl-center { - align-items: center!important - } - .align-items-xl-baseline { - align-items: baseline!important - } - .align-items-xl-stretch { - align-items: stretch!important - } - .align-content-xl-start { - align-content: flex-start!important - } - .align-content-xl-end { - align-content: flex-end!important - } - .align-content-xl-center { - align-content: center!important - } - .align-content-xl-between { - align-content: space-between!important - } - .align-content-xl-around { - align-content: space-around!important - } - .align-content-xl-stretch { - align-content: stretch!important - } - .align-self-xl-auto { - align-self: auto!important - } - .align-self-xl-start { - align-self: flex-start!important - } - .align-self-xl-end { - align-self: flex-end!important - } - .align-self-xl-center { - align-self: center!important - } - .align-self-xl-baseline { - align-self: baseline!important - } - .align-self-xl-stretch { - align-self: stretch!important - } - .order-xl-first { - order: -1!important - } - .order-xl-0 { - order: 0!important - } - .order-xl-1 { - order: 1!important - } - .order-xl-2 { - order: 2!important - } - .order-xl-3 { - order: 3!important - } - .order-xl-4 { - order: 4!important - } - .order-xl-5 { - order: 5!important - } - .order-xl-last { - order: 6!important - } - .m-xl-0 { - margin: 0!important - } - .m-xl-1 { - margin: .25rem!important - } - .m-xl-2 { - margin: .5rem!important - } - .m-xl-3 { - margin: 1rem!important - } - .m-xl-4 { - margin: 1.5rem!important - } - .m-xl-5 { - margin: 3rem!important - } - .m-xl-auto { - margin: auto!important - } - .mx-xl-0 { - margin-right: 0!important; - margin-left: 0!important - } - .mx-xl-1 { - margin-right: .25rem!important; - margin-left: .25rem!important - } - .mx-xl-2 { - margin-right: .5rem!important; - margin-left: .5rem!important - } - .mx-xl-3 { - margin-right: 1rem!important; - margin-left: 1rem!important - } - .mx-xl-4 { - margin-right: 1.5rem!important; - margin-left: 1.5rem!important - } - .mx-xl-5 { - margin-right: 3rem!important; - margin-left: 3rem!important - } - .mx-xl-auto { - margin-right: auto!important; - margin-left: auto!important - } - .my-xl-0 { - margin-top: 0!important; - margin-bottom: 0!important - } - .my-xl-1 { - margin-top: .25rem!important; - margin-bottom: .25rem!important - } - .my-xl-2 { - margin-top: .5rem!important; - margin-bottom: .5rem!important - } - .my-xl-3 { - margin-top: 1rem!important; - margin-bottom: 1rem!important - } - .my-xl-4 { - margin-top: 1.5rem!important; - margin-bottom: 1.5rem!important - } - .my-xl-5 { - margin-top: 3rem!important; - margin-bottom: 3rem!important - } - .my-xl-auto { - margin-top: auto!important; - margin-bottom: auto!important - } - .mt-xl-0 { - margin-top: 0!important - } - .mt-xl-1 { - margin-top: .25rem!important - } - .mt-xl-2 { - margin-top: .5rem!important - } - .mt-xl-3 { - margin-top: 1rem!important - } - .mt-xl-4 { - margin-top: 1.5rem!important - } - .mt-xl-5 { - margin-top: 3rem!important - } - .mt-xl-auto { - margin-top: auto!important - } - .me-xl-0 { - margin-right: 0!important - } - .me-xl-1 { - margin-right: .25rem!important - } - .me-xl-2 { - margin-right: .5rem!important - } - .me-xl-3 { - margin-right: 1rem!important - } - .me-xl-4 { - margin-right: 1.5rem!important - } - .me-xl-5 { - margin-right: 3rem!important - } - .me-xl-auto { - margin-right: auto!important - } - .mb-xl-0 { - margin-bottom: 0!important - } - .mb-xl-1 { - margin-bottom: .25rem!important - } - .mb-xl-2 { - margin-bottom: .5rem!important - } - .mb-xl-3 { - margin-bottom: 1rem!important - } - .mb-xl-4 { - margin-bottom: 1.5rem!important - } - .mb-xl-5 { - margin-bottom: 3rem!important - } - .mb-xl-auto { - margin-bottom: auto!important - } - .ms-xl-0 { - margin-left: 0!important - } - .ms-xl-1 { - margin-left: .25rem!important - } - .ms-xl-2 { - margin-left: .5rem!important - } - .ms-xl-3 { - margin-left: 1rem!important - } - .ms-xl-4 { - margin-left: 1.5rem!important - } - .ms-xl-5 { - margin-left: 3rem!important - } - .ms-xl-auto { - margin-left: auto!important - } - .p-xl-0 { - padding: 0!important - } - .p-xl-1 { - padding: .25rem!important - } - .p-xl-2 { - padding: .5rem!important - } - .p-xl-3 { - padding: 1rem!important - } - .p-xl-4 { - padding: 1.5rem!important - } - .p-xl-5 { - padding: 3rem!important - } - .px-xl-0 { - padding-right: 0!important; - padding-left: 0!important - } - .px-xl-1 { - padding-right: .25rem!important; - padding-left: .25rem!important - } - .px-xl-2 { - padding-right: .5rem!important; - padding-left: .5rem!important - } - .px-xl-3 { - padding-right: 1rem!important; - padding-left: 1rem!important - } - .px-xl-4 { - padding-right: 1.5rem!important; - padding-left: 1.5rem!important - } - .px-xl-5 { - padding-right: 3rem!important; - padding-left: 3rem!important - } - .py-xl-0 { - padding-top: 0!important; - padding-bottom: 0!important - } - .py-xl-1 { - padding-top: .25rem!important; - padding-bottom: .25rem!important - } - .py-xl-2 { - padding-top: .5rem!important; - padding-bottom: .5rem!important - } - .py-xl-3 { - padding-top: 1rem!important; - padding-bottom: 1rem!important - } - .py-xl-4 { - padding-top: 1.5rem!important; - padding-bottom: 1.5rem!important - } - .py-xl-5 { - padding-top: 3rem!important; - padding-bottom: 3rem!important - } - .pt-xl-0 { - padding-top: 0!important - } - .pt-xl-1 { - padding-top: .25rem!important - } - .pt-xl-2 { - padding-top: .5rem!important - } - .pt-xl-3 { - padding-top: 1rem!important - } - .pt-xl-4 { - padding-top: 1.5rem!important - } - .pt-xl-5 { - padding-top: 3rem!important - } - .pe-xl-0 { - padding-right: 0!important - } - .pe-xl-1 { - padding-right: .25rem!important - } - .pe-xl-2 { - padding-right: .5rem!important - } - .pe-xl-3 { - padding-right: 1rem!important - } - .pe-xl-4 { - padding-right: 1.5rem!important - } - .pe-xl-5 { - padding-right: 3rem!important - } - .pb-xl-0 { - padding-bottom: 0!important - } - .pb-xl-1 { - padding-bottom: .25rem!important - } - .pb-xl-2 { - padding-bottom: .5rem!important - } - .pb-xl-3 { - padding-bottom: 1rem!important - } - .pb-xl-4 { - padding-bottom: 1.5rem!important - } - .pb-xl-5 { - padding-bottom: 3rem!important - } - .ps-xl-0 { - padding-left: 0!important - } - .ps-xl-1 { - padding-left: .25rem!important - } - .ps-xl-2 { - padding-left: .5rem!important - } - .ps-xl-3 { - padding-left: 1rem!important - } - .ps-xl-4 { - padding-left: 1.5rem!important - } - .ps-xl-5 { - padding-left: 3rem!important - } - .gap-xl-0 { - gap: 0!important - } - .gap-xl-1 { - gap: .25rem!important - } - .gap-xl-2 { - gap: .5rem!important - } - .gap-xl-3 { - gap: 1rem!important - } - .gap-xl-4 { - gap: 1.5rem!important - } - .gap-xl-5 { - gap: 3rem!important - } - .row-gap-xl-0 { - row-gap: 0!important - } - .row-gap-xl-1 { - row-gap: .25rem!important - } - .row-gap-xl-2 { - row-gap: .5rem!important - } - .row-gap-xl-3 { - row-gap: 1rem!important - } - .row-gap-xl-4 { - row-gap: 1.5rem!important - } - .row-gap-xl-5 { - row-gap: 3rem!important - } - .column-gap-xl-0 { - -moz-column-gap: 0!important; - column-gap: 0!important - } - .column-gap-xl-1 { - -moz-column-gap: 0.25rem!important; - column-gap: .25rem!important - } - .column-gap-xl-2 { - -moz-column-gap: 0.5rem!important; - column-gap: .5rem!important - } - .column-gap-xl-3 { - -moz-column-gap: 1rem!important; - column-gap: 1rem!important - } - .column-gap-xl-4 { - -moz-column-gap: 1.5rem!important; - column-gap: 1.5rem!important - } - .column-gap-xl-5 { - -moz-column-gap: 3rem!important; - column-gap: 3rem!important - } - .text-xl-start { - text-align: left!important - } - .text-xl-end { - text-align: right!important - } - .text-xl-center { - text-align: center!important - } -} -@media (min-width:1400px) { - .float-xxl-start { - float: left!important - } - .float-xxl-end { - float: right!important - } - .float-xxl-none { - float: none!important - } - .object-fit-xxl-contain { - -o-object-fit: contain!important; - object-fit: contain!important - } - .object-fit-xxl-cover { - -o-object-fit: cover!important; - object-fit: cover!important - } - .object-fit-xxl-fill { - -o-object-fit: fill!important; - object-fit: fill!important - } - .object-fit-xxl-scale { - -o-object-fit: scale-down!important; - object-fit: scale-down!important - } - .object-fit-xxl-none { - -o-object-fit: none!important; - object-fit: none!important - } - .d-xxl-inline { - display: inline!important - } - .d-xxl-inline-block { - display: inline-block!important - } - .d-xxl-block { - display: block!important - } - .d-xxl-grid { - display: grid!important - } - .d-xxl-inline-grid { - display: inline-grid!important - } - .d-xxl-table { - display: table!important - } - .d-xxl-table-row { - display: table-row!important - } - .d-xxl-table-cell { - display: table-cell!important - } - .d-xxl-flex { - display: flex!important - } - .d-xxl-inline-flex { - display: inline-flex!important - } - .d-xxl-none { - display: none!important - } - .flex-xxl-fill { - flex: 1 1 auto!important - } - .flex-xxl-row { - flex-direction: row!important - } - .flex-xxl-column { - flex-direction: column!important - } - .flex-xxl-row-reverse { - flex-direction: row-reverse!important - } - .flex-xxl-column-reverse { - flex-direction: column-reverse!important - } - .flex-xxl-grow-0 { - flex-grow: 0!important - } - .flex-xxl-grow-1 { - flex-grow: 1!important - } - .flex-xxl-shrink-0 { - flex-shrink: 0!important - } - .flex-xxl-shrink-1 { - flex-shrink: 1!important - } - .flex-xxl-wrap { - flex-wrap: wrap!important - } - .flex-xxl-nowrap { - flex-wrap: nowrap!important - } - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse!important - } - .justify-content-xxl-start { - justify-content: flex-start!important - } - .justify-content-xxl-end { - justify-content: flex-end!important - } - .justify-content-xxl-center { - justify-content: center!important - } - .justify-content-xxl-between { - justify-content: space-between!important - } - .justify-content-xxl-around { - justify-content: space-around!important - } - .justify-content-xxl-evenly { - justify-content: space-evenly!important - } - .align-items-xxl-start { - align-items: flex-start!important - } - .align-items-xxl-end { - align-items: flex-end!important - } - .align-items-xxl-center { - align-items: center!important - } - .align-items-xxl-baseline { - align-items: baseline!important - } - .align-items-xxl-stretch { - align-items: stretch!important - } - .align-content-xxl-start { - align-content: flex-start!important - } - .align-content-xxl-end { - align-content: flex-end!important - } - .align-content-xxl-center { - align-content: center!important - } - .align-content-xxl-between { - align-content: space-between!important - } - .align-content-xxl-around { - align-content: space-around!important - } - .align-content-xxl-stretch { - align-content: stretch!important - } - .align-self-xxl-auto { - align-self: auto!important - } - .align-self-xxl-start { - align-self: flex-start!important - } - .align-self-xxl-end { - align-self: flex-end!important - } - .align-self-xxl-center { - align-self: center!important - } - .align-self-xxl-baseline { - align-self: baseline!important - } - .align-self-xxl-stretch { - align-self: stretch!important - } - .order-xxl-first { - order: -1!important - } - .order-xxl-0 { - order: 0!important - } - .order-xxl-1 { - order: 1!important - } - .order-xxl-2 { - order: 2!important - } - .order-xxl-3 { - order: 3!important - } - .order-xxl-4 { - order: 4!important - } - .order-xxl-5 { - order: 5!important - } - .order-xxl-last { - order: 6!important - } - .m-xxl-0 { - margin: 0!important - } - .m-xxl-1 { - margin: .25rem!important - } - .m-xxl-2 { - margin: .5rem!important - } - .m-xxl-3 { - margin: 1rem!important - } - .m-xxl-4 { - margin: 1.5rem!important - } - .m-xxl-5 { - margin: 3rem!important - } - .m-xxl-auto { - margin: auto!important - } - .mx-xxl-0 { - margin-right: 0!important; - margin-left: 0!important - } - .mx-xxl-1 { - margin-right: .25rem!important; - margin-left: .25rem!important - } - .mx-xxl-2 { - margin-right: .5rem!important; - margin-left: .5rem!important - } - .mx-xxl-3 { - margin-right: 1rem!important; - margin-left: 1rem!important - } - .mx-xxl-4 { - margin-right: 1.5rem!important; - margin-left: 1.5rem!important - } - .mx-xxl-5 { - margin-right: 3rem!important; - margin-left: 3rem!important - } - .mx-xxl-auto { - margin-right: auto!important; - margin-left: auto!important - } - .my-xxl-0 { - margin-top: 0!important; - margin-bottom: 0!important - } - .my-xxl-1 { - margin-top: .25rem!important; - margin-bottom: .25rem!important - } - .my-xxl-2 { - margin-top: .5rem!important; - margin-bottom: .5rem!important - } - .my-xxl-3 { - margin-top: 1rem!important; - margin-bottom: 1rem!important - } - .my-xxl-4 { - margin-top: 1.5rem!important; - margin-bottom: 1.5rem!important - } - .my-xxl-5 { - margin-top: 3rem!important; - margin-bottom: 3rem!important - } - .my-xxl-auto { - margin-top: auto!important; - margin-bottom: auto!important - } - .mt-xxl-0 { - margin-top: 0!important - } - .mt-xxl-1 { - margin-top: .25rem!important - } - .mt-xxl-2 { - margin-top: .5rem!important - } - .mt-xxl-3 { - margin-top: 1rem!important - } - .mt-xxl-4 { - margin-top: 1.5rem!important - } - .mt-xxl-5 { - margin-top: 3rem!important - } - .mt-xxl-auto { - margin-top: auto!important - } - .me-xxl-0 { - margin-right: 0!important - } - .me-xxl-1 { - margin-right: .25rem!important - } - .me-xxl-2 { - margin-right: .5rem!important - } - .me-xxl-3 { - margin-right: 1rem!important - } - .me-xxl-4 { - margin-right: 1.5rem!important - } - .me-xxl-5 { - margin-right: 3rem!important - } - .me-xxl-auto { - margin-right: auto!important - } - .mb-xxl-0 { - margin-bottom: 0!important - } - .mb-xxl-1 { - margin-bottom: .25rem!important - } - .mb-xxl-2 { - margin-bottom: .5rem!important - } - .mb-xxl-3 { - margin-bottom: 1rem!important - } - .mb-xxl-4 { - margin-bottom: 1.5rem!important - } - .mb-xxl-5 { - margin-bottom: 3rem!important - } - .mb-xxl-auto { - margin-bottom: auto!important - } - .ms-xxl-0 { - margin-left: 0!important - } - .ms-xxl-1 { - margin-left: .25rem!important - } - .ms-xxl-2 { - margin-left: .5rem!important - } - .ms-xxl-3 { - margin-left: 1rem!important - } - .ms-xxl-4 { - margin-left: 1.5rem!important - } - .ms-xxl-5 { - margin-left: 3rem!important - } - .ms-xxl-auto { - margin-left: auto!important - } - .p-xxl-0 { - padding: 0!important - } - .p-xxl-1 { - padding: .25rem!important - } - .p-xxl-2 { - padding: .5rem!important - } - .p-xxl-3 { - padding: 1rem!important - } - .p-xxl-4 { - padding: 1.5rem!important - } - .p-xxl-5 { - padding: 3rem!important - } - .px-xxl-0 { - padding-right: 0!important; - padding-left: 0!important - } - .px-xxl-1 { - padding-right: .25rem!important; - padding-left: .25rem!important - } - .px-xxl-2 { - padding-right: .5rem!important; - padding-left: .5rem!important - } - .px-xxl-3 { - padding-right: 1rem!important; - padding-left: 1rem!important - } - .px-xxl-4 { - padding-right: 1.5rem!important; - padding-left: 1.5rem!important - } - .px-xxl-5 { - padding-right: 3rem!important; - padding-left: 3rem!important - } - .py-xxl-0 { - padding-top: 0!important; - padding-bottom: 0!important - } - .py-xxl-1 { - padding-top: .25rem!important; - padding-bottom: .25rem!important - } - .py-xxl-2 { - padding-top: .5rem!important; - padding-bottom: .5rem!important - } - .py-xxl-3 { - padding-top: 1rem!important; - padding-bottom: 1rem!important - } - .py-xxl-4 { - padding-top: 1.5rem!important; - padding-bottom: 1.5rem!important - } - .py-xxl-5 { - padding-top: 3rem!important; - padding-bottom: 3rem!important - } - .pt-xxl-0 { - padding-top: 0!important - } - .pt-xxl-1 { - padding-top: .25rem!important - } - .pt-xxl-2 { - padding-top: .5rem!important - } - .pt-xxl-3 { - padding-top: 1rem!important - } - .pt-xxl-4 { - padding-top: 1.5rem!important - } - .pt-xxl-5 { - padding-top: 3rem!important - } - .pe-xxl-0 { - padding-right: 0!important - } - .pe-xxl-1 { - padding-right: .25rem!important - } - .pe-xxl-2 { - padding-right: .5rem!important - } - .pe-xxl-3 { - padding-right: 1rem!important - } - .pe-xxl-4 { - padding-right: 1.5rem!important - } - .pe-xxl-5 { - padding-right: 3rem!important - } - .pb-xxl-0 { - padding-bottom: 0!important - } - .pb-xxl-1 { - padding-bottom: .25rem!important - } - .pb-xxl-2 { - padding-bottom: .5rem!important - } - .pb-xxl-3 { - padding-bottom: 1rem!important - } - .pb-xxl-4 { - padding-bottom: 1.5rem!important - } - .pb-xxl-5 { - padding-bottom: 3rem!important - } - .ps-xxl-0 { - padding-left: 0!important - } - .ps-xxl-1 { - padding-left: .25rem!important - } - .ps-xxl-2 { - padding-left: .5rem!important - } - .ps-xxl-3 { - padding-left: 1rem!important - } - .ps-xxl-4 { - padding-left: 1.5rem!important - } - .ps-xxl-5 { - padding-left: 3rem!important - } - .gap-xxl-0 { - gap: 0!important - } - .gap-xxl-1 { - gap: .25rem!important - } - .gap-xxl-2 { - gap: .5rem!important - } - .gap-xxl-3 { - gap: 1rem!important - } - .gap-xxl-4 { - gap: 1.5rem!important - } - .gap-xxl-5 { - gap: 3rem!important - } - .row-gap-xxl-0 { - row-gap: 0!important - } - .row-gap-xxl-1 { - row-gap: .25rem!important - } - .row-gap-xxl-2 { - row-gap: .5rem!important - } - .row-gap-xxl-3 { - row-gap: 1rem!important - } - .row-gap-xxl-4 { - row-gap: 1.5rem!important - } - .row-gap-xxl-5 { - row-gap: 3rem!important - } - .column-gap-xxl-0 { - -moz-column-gap: 0!important; - column-gap: 0!important - } - .column-gap-xxl-1 { - -moz-column-gap: 0.25rem!important; - column-gap: .25rem!important - } - .column-gap-xxl-2 { - -moz-column-gap: 0.5rem!important; - column-gap: .5rem!important - } - .column-gap-xxl-3 { - -moz-column-gap: 1rem!important; - column-gap: 1rem!important - } - .column-gap-xxl-4 { - -moz-column-gap: 1.5rem!important; - column-gap: 1.5rem!important - } - .column-gap-xxl-5 { - -moz-column-gap: 3rem!important; - column-gap: 3rem!important - } - .text-xxl-start { - text-align: left!important - } - .text-xxl-end { - text-align: right!important - } - .text-xxl-center { - text-align: center!important - } -} -@media (min-width:1200px) { - .fs-1 { - font-size: 2.5rem!important - } - .fs-2 { - font-size: 2rem!important - } - .fs-3 { - font-size: 1.75rem!important - } - .fs-4 { - font-size: 1.5rem!important - } -} -@media print { - .d-print-inline { - display: inline!important - } - .d-print-inline-block { - display: inline-block!important - } - .d-print-block { - display: block!important - } - .d-print-grid { - display: grid!important - } - .d-print-inline-grid { - display: inline-grid!important - } - .d-print-table { - display: table!important - } - .d-print-table-row { - display: table-row!important - } - .d-print-table-cell { - display: table-cell!important - } - .d-print-flex { - display: flex!important - } - .d-print-inline-flex { - display: inline-flex!important - } - .d-print-none { - display: none!important - } -} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/assets/css/bootstrap.min.css.map b/assets/css/bootstrap.min.css.map deleted file mode 100644 index 90ce798..0000000 --- a/assets/css/bootstrap.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_focus-ring.scss","../../scss/helpers/_icon-link.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text-emphasis: #052c65;\n --bs-secondary-text-emphasis: #2b2f32;\n --bs-success-text-emphasis: #0a3622;\n --bs-info-text-emphasis: #055160;\n --bs-warning-text-emphasis: #664d03;\n --bs-danger-text-emphasis: #58151c;\n --bs-light-text-emphasis: #495057;\n --bs-dark-text-emphasis: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #e2e3e5;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #c4c8cb;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-heading-color: inherit;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-color: #212529;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-xxl: 2rem;\n --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-focus-ring-width: 0.25rem;\n --bs-focus-ring-opacity: 0.25;\n --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n --bs-form-valid-color: #198754;\n --bs-form-valid-border-color: #198754;\n --bs-form-invalid-color: #dc3545;\n --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n color-scheme: dark;\n --bs-body-color: #dee2e6;\n --bs-body-color-rgb: 222, 226, 230;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #fff;\n --bs-emphasis-color-rgb: 255, 255, 255;\n --bs-secondary-color: rgba(222, 226, 230, 0.75);\n --bs-secondary-color-rgb: 222, 226, 230;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n --bs-tertiary-color-rgb: 222, 226, 230;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-primary-text-emphasis: #6ea8fe;\n --bs-secondary-text-emphasis: #a7acb1;\n --bs-success-text-emphasis: #75b798;\n --bs-info-text-emphasis: #6edff6;\n --bs-warning-text-emphasis: #ffda6a;\n --bs-danger-text-emphasis: #ea868f;\n --bs-light-text-emphasis: #f8f9fa;\n --bs-dark-text-emphasis: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #161719;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #41464b;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #087990;\n --bs-warning-border-subtle: #997404;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: inherit;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #8bb9fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 139, 185, 254;\n --bs-code-color: #e685b5;\n --bs-highlight-color: #dee2e6;\n --bs-highlight-bg: #664d03;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n --bs-form-valid-color: #75b798;\n --bs-form-valid-border-color: #75b798;\n --bs-form-invalid-color: #ea868f;\n --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n color: var(--bs-highlight-color);\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color-type: initial;\n --bs-table-bg-type: initial;\n --bs-table-color-state: initial;\n --bs-table-bg-state: initial;\n --bs-table-color: var(--bs-emphasis-color);\n --bs-table-bg: var(--bs-body-bg);\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-emphasis-color);\n --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n --bs-table-active-color: var(--bs-emphasis-color);\n --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n --bs-table-hover-color: var(--bs-emphasis-color);\n --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n width: 100%;\n margin-bottom: 1rem;\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n --bs-table-color-state: var(--bs-table-active-color);\n --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-color-state: var(--bs-table-hover-color);\n --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #a6b5cc;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #b5b6b7;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #a7b9b1;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #a6c3ca;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #ccc2a4;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #c6acae;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #c6c7c8;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #4d5154;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: var(--bs-body-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-body-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n min-width: 85px;\n height: 1.5em;\n margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::-moz-placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-secondary-bg);\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: var(--bs-secondary-bg);\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: var(--bs-body-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-body-bg);\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: transparent;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n -webkit-appearance: none;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n -moz-appearance: none;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {\n position: absolute;\n inset: 1rem 0.375rem;\n z-index: -1;\n height: 1.5em;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:focus ~ label::after,\n.form-floating > .form-control:not(:placeholder-shown) ~ label::after,\n.form-floating > .form-control-plaintext ~ label::after,\n.form-floating > .form-select ~ label::after {\n position: absolute;\n inset: 1rem 0.375rem;\n z-index: -1;\n height: 1.5em;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n.form-floating > :disabled ~ label::after,\n.form-floating > .form-control:disabled ~ label::after {\n background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-form-valid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: var(--bs-body-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: var(--bs-border-radius);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked:focus-visible + .btn {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: 0 0 0 #000;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: var(--bs-border-radius);\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: var(--bs-box-shadow);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n background: none;\n border: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: 0.125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n font-weight: 700;\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n color: var(--bs-body-color);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type > .accordion-header .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type > .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush > .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush > .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush > .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {\n border-radius: 0;\n}\n.accordion-flush > .accordion-item > .accordion-collapse {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: var(--bs-border-radius);\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: var(--bs-border-radius);\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text-emphasis);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text-emphasis);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text-emphasis);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text-emphasis);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text-emphasis);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text-emphasis);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text-emphasis);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text-emphasis);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text-emphasis);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text-emphasis);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text-emphasis);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n --bs-list-group-active-color: var(--bs-success-bg-subtle);\n --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text-emphasis);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n --bs-list-group-active-color: var(--bs-info-bg-subtle);\n --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text-emphasis);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text-emphasis);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text-emphasis);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n --bs-list-group-active-color: var(--bs-light-bg-subtle);\n --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text-emphasis);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: var(--bs-box-shadow);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: var(--bs-box-shadow);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: inherit;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,\n[data-bs-theme=dark].carousel .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto;\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n outline: 0;\n box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n display: inline-flex;\n gap: 0.375rem;\n align-items: center;\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n text-underline-offset: 0.25em;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n}\n.icon-link > .bi {\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n fill: currentcolor;\n transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n .icon-link > .bi {\n transition: none;\n }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n position: absolute !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: var(--bs-border-width);\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-inline-grid {\n display: inline-grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.focus-ring-primary {\n --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n --bs-link-underline-opacity: 1;\n -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-``); - let overlay = dragbox.find(".imageuploadify-overlay"); - let uploadIcon = dragbox.find(".imageuploadify-overlay i"); - let imagesList = dragbox.find(".imageuploadify-images-list"); - let addIcon = dragbox.find(".imageuploadify-images-list i"); - let addMsg = dragbox.find(".imageuploadify-images-list span"); - let button = dragbox.find(".imageuploadify-images-list button"); - const retrieveFiles = (files) => { - for (let index = 0; index < files.length; ++index) { - if (!accept || compareMimeType(result, files[index].type, /(?:\.([^.]+))?$/.exec(files[index].name)[1])) { - const id = Math.random().toString(36).substr(2, 9); - readingFile(id, files[index]); - totalFiles.push({ - id: id, - file: files[index] - }); - } - } - } - const readingFile = (id, file) => { - const fReader = new FileReader(); - const width = dragbox.width(); - const boxesNb = Math.floor(width / 100); - const marginSize = Math.floor((width - (boxesNb * 100)) / (boxesNb + 1)); - let container = $(`

${file.name}${file.type}${file.size}
`); - let details = container.find(".imageuploadify-details"); - let deleteBtn = container.find("button"); - container.css("margin-left", marginSize + "px"); - details.hover(function() { - $(this).css("opacity", "1"); - }).mouseleave(function() { - $(this).css("opacity", "0"); - }); - if (file.type && file.type.search(/image/) != -1) { - fReader.onloadend = function(e) { - let image = $(""); - image.attr("src", e.target.result); - container.append(image); - imagesList.append(container); - imagesList.find(".imageuploadify-container:nth-child(" + boxesNb + "n+4)").css("margin-left", marginSize + "px"); - imagesList.find(".imageuploadify-container:nth-child(" + boxesNb + "n+3)").css("margin-right", marginSize + "px"); - }; - } else if (file.type) { - let type = ""; - if (file.type.search(/audio/) != -1) { - type = ""; - } else if (file.type.search(/video/) != -1) { - type = ""; - } - fReader.onloadend = function(e) { - let span = $("" + type + ""); - span.css("font-size", "5em"); - container.append(span); - imagesList.append(container); - imagesList.find(".imageuploadify-container:nth-child(" + boxesNb + "n+4)").css("margin-left", marginSize + "px"); - imagesList.find(".imageuploadify-container:nth-child(" + boxesNb + "n+3)").css("margin-right", marginSize + "px"); - }; - } - deleteBtn.on("click", function() { - $(this.parentElement).remove(); - for (let index = 0; totalFiles.length > index; ++index) { - if (totalFiles[index].id === id) { - totalFiles.splice(index, 1); - break; - } - } - }); - fReader.readAsDataURL(file); - }; - const disableMouseEvents = () => { - overlay.css("display", "flex"); - dragbox.css("border-color", "#3AA0FF"); - button.css("pointer-events", "none"); - addMsg.css("pointer-events", "none"); - addIcon.css("pointer-events", "none"); - imagesList.css("pointer-events", "none"); - } - const enableMouseEvents = () => { - overlay.css("display", "none"); - dragbox.css("border-color", "rgb(210, 210, 210)"); - button.css("pointer-events", "initial"); - addMsg.css("pointer-events", "initial"); - addIcon.css("pointer-events", "initial"); - imagesList.css("pointer-events", "initial"); - } - button.mouseenter(function onMouseEnter(event) { - button.css("background", "#3AA0FF").css("color", "white"); - }).mouseleave(function onMouseLeave() { - button.css("background", "white").css("color", "#3AA0FF"); - }); - button.on("click", function onClick(event) { - event.stopPropagation(); - event.preventDefault(); - $(self).click(); - }); - dragbox.on("dragenter", function onDragenter(event) { - event.stopPropagation(); - event.preventDefault(); - counter++; - disableMouseEvents(); - }); - dragbox.on("dragleave", function onDragLeave(event) { - event.stopPropagation(); - event.preventDefault(); - counter--; - if (counter === 0) { - enableMouseEvents(); - } - }); - dragbox.on("drop", function onDrop(event) { - event.stopPropagation(); - event.preventDefault(); - enableMouseEvents(); - const files = event.originalEvent.dataTransfer.files; - retrieveFiles(files); - }); - $(window).bind("resize", function(e) { - window.resizeEvt; - $(window).resize(function() { - clearTimeout(window.resizeEvt); - window.resizeEvt = setTimeout(function() { - const width = dragbox.width(); - const boxesNb = Math.floor(width / 100); - const marginSize = Math.floor((width - (boxesNb * 100)) / (boxesNb + 1)); - let containers = imagesList.find(".imageuploadify-container"); - for (let index = 0; index < containers.length; ++index) { - $(containers[index]).css("margin-right", "0px"); - $(containers[index]).css("margin-left", marginSize + "px"); - } - imagesList.find(".imageuploadify-container:nth-child(" + boxesNb + "n+4)").css("margin-left", marginSize + "px"); - imagesList.find(".imageuploadify-container:nth-child(" + boxesNb + "n+3)").css("margin-right", marginSize + "px"); - }, 500); - }); - }) - $(self).on("change", function onChange() { - const files = this.files; - retrieveFiles(files); - }); - $(self).closest("form").on("submit", function(event) { - event.stopPropagation(); - event.preventDefault(event); - const inputs = this.querySelectorAll("input, textarea, select, button"); - const formData = new FormData(); - for (let index = 0; index < inputs.length; ++index) { - if (inputs[index].tagName === "SELECT" && inputs[index].hasAttribute("multiple")) { - const options = inputs[index].options; - for (let i = 0; options.length > i; ++i) { - if (options[i].selected) { - formData.append(inputs[index].getAttribute("name"), options[i].value); - } - } - } else if (!inputs[index].getAttribute("type") || ((inputs[index].getAttribute("type").toLowerCase()) !== "checkbox" && (inputs[index].getAttribute("type").toLowerCase()) !== "radio") || inputs[index].checked) { - formData.append(inputs[index].name, inputs[index].value); - } else if ($(inputs[index]).getAttribute("type")  != "file") { - formData.append(inputs[index].name, inputs[index].value); - } - } - for (var i = 0; i < totalFiles.length; i++) { - formData.append(self.name, totalFiles[i].file); - } - var xhr = new XMLHttpRequest(); - xhr.onreadystatechange = function(e) { - if (xhr.status == 200 && xhr.readyState === XMLHttpRequest.DONE) { - window.location.replace(xhr.responseURL); - } - } - xhr.open("POST", $(this).attr("action"), true); - xhr.send(formData); - return false; - }); - $(self).hide(); - dragbox.insertAfter(this); - }); - return this; - }; - $.fn.imageuploadify.defaults = {}; -}(jQuery, window, document)); \ No newline at end of file diff --git a/assets/plugins/apexcharts-bundle/css/apexcharts.css b/assets/plugins/apexcharts-bundle/css/apexcharts.css deleted file mode 100644 index abf7b48..0000000 --- a/assets/plugins/apexcharts-bundle/css/apexcharts.css +++ /dev/null @@ -1,663 +0,0 @@ -.apexcharts-canvas { - position: relative; - user-select: none; - /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */ -} - - -/* scrollbar is not visible by default for legend, hence forcing the visibility */ -.apexcharts-canvas ::-webkit-scrollbar { - -webkit-appearance: none; - width: 6px; -} - -.apexcharts-canvas ::-webkit-scrollbar-thumb { - border-radius: 4px; - background-color: rgba(0, 0, 0, .5); - box-shadow: 0 0 1px rgba(255, 255, 255, .5); - -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5); -} - -.apexcharts-canvas.apexcharts-theme-dark { - background: #424242; -} - -.apexcharts-inner { - position: relative; -} - -.apexcharts-text tspan { - font-family: inherit; -} - -.legend-mouseover-inactive { - transition: 0.15s ease all; - opacity: 0.20; -} - -.apexcharts-series-collapsed { - opacity: 0; -} - -.apexcharts-tooltip { - border-radius: 5px; - box-shadow: 2px 2px 6px -4px #999; - cursor: default; - font-size: 14px; - left: 62px; - opacity: 0; - pointer-events: none; - position: absolute; - top: 20px; - overflow: hidden; - white-space: nowrap; - z-index: 12; - transition: 0.15s ease all; -} - -.apexcharts-tooltip.apexcharts-active { - opacity: 1; - transition: 0.15s ease all; -} - -.apexcharts-tooltip.apexcharts-theme-light { - border: 1px solid #e3e3e3; - background: rgba(255, 255, 255, 0.96); -} - -.apexcharts-tooltip.apexcharts-theme-dark { - color: #fff; - background: rgba(30, 30, 30, 0.8); -} - -.apexcharts-tooltip * { - font-family: inherit; -} - - -.apexcharts-tooltip-title { - padding: 6px; - font-size: 15px; - margin-bottom: 4px; -} - -.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title { - background: #ECEFF1; - border-bottom: 1px solid #ddd; -} - -.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title { - background: rgba(0, 0, 0, 0.7); - border-bottom: 1px solid #333; -} - -.apexcharts-tooltip-text-value, -.apexcharts-tooltip-text-z-value { - display: inline-block; - font-weight: 600; - margin-left: 5px; -} - -.apexcharts-tooltip-text-z-label:empty, -.apexcharts-tooltip-text-z-value:empty { - display: none; -} - -.apexcharts-tooltip-text-value, -.apexcharts-tooltip-text-z-value { - font-weight: 600; -} - -.apexcharts-tooltip-marker { - width: 12px; - height: 12px; - position: relative; - top: 0px; - margin-right: 10px; - border-radius: 50%; -} - -.apexcharts-tooltip-series-group { - padding: 0 10px; - display: none; - text-align: left; - justify-content: left; - align-items: center; -} - -.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker { - opacity: 1; -} - -.apexcharts-tooltip-series-group.apexcharts-active, -.apexcharts-tooltip-series-group:last-child { - padding-bottom: 4px; -} - -.apexcharts-tooltip-series-group-hidden { - opacity: 0; - height: 0; - line-height: 0; - padding: 0 !important; -} - -.apexcharts-tooltip-y-group { - padding: 6px 0 5px; -} - -.apexcharts-tooltip-candlestick { - padding: 4px 8px; -} - -.apexcharts-tooltip-candlestick>div { - margin: 4px 0; -} - -.apexcharts-tooltip-candlestick span.value { - font-weight: bold; -} - -.apexcharts-tooltip-rangebar { - padding: 5px 8px; -} - -.apexcharts-tooltip-rangebar .category { - font-weight: 600; - color: #777; -} - -.apexcharts-tooltip-rangebar .series-name { - font-weight: bold; - display: block; - margin-bottom: 5px; -} - -.apexcharts-xaxistooltip { - opacity: 0; - padding: 9px 10px; - pointer-events: none; - color: #373d3f; - font-size: 13px; - text-align: center; - border-radius: 2px; - position: absolute; - z-index: 10; - background: #ECEFF1; - border: 1px solid #90A4AE; - transition: 0.15s ease all; -} - -.apexcharts-xaxistooltip.apexcharts-theme-dark { - background: rgba(0, 0, 0, 0.7); - border: 1px solid rgba(0, 0, 0, 0.5); - color: #fff; -} - -.apexcharts-xaxistooltip:after, -.apexcharts-xaxistooltip:before { - left: 50%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; -} - -.apexcharts-xaxistooltip:after { - border-color: rgba(236, 239, 241, 0); - border-width: 6px; - margin-left: -6px; -} - -.apexcharts-xaxistooltip:before { - border-color: rgba(144, 164, 174, 0); - border-width: 7px; - margin-left: -7px; -} - -.apexcharts-xaxistooltip-bottom:after, -.apexcharts-xaxistooltip-bottom:before { - bottom: 100%; -} - -.apexcharts-xaxistooltip-top:after, -.apexcharts-xaxistooltip-top:before { - top: 100%; -} - -.apexcharts-xaxistooltip-bottom:after { - border-bottom-color: #ECEFF1; -} - -.apexcharts-xaxistooltip-bottom:before { - border-bottom-color: #90A4AE; -} - -.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after { - border-bottom-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before { - border-bottom-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-xaxistooltip-top:after { - border-top-color: #ECEFF1 -} - -.apexcharts-xaxistooltip-top:before { - border-top-color: #90A4AE; -} - -.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after { - border-top-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before { - border-top-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-xaxistooltip.apexcharts-active { - opacity: 1; - transition: 0.15s ease all; -} - -.apexcharts-yaxistooltip { - opacity: 0; - padding: 4px 10px; - pointer-events: none; - color: #373d3f; - font-size: 13px; - text-align: center; - border-radius: 2px; - position: absolute; - z-index: 10; - background: #ECEFF1; - border: 1px solid #90A4AE; -} - -.apexcharts-yaxistooltip.apexcharts-theme-dark { - background: rgba(0, 0, 0, 0.7); - border: 1px solid rgba(0, 0, 0, 0.5); - color: #fff; -} - -.apexcharts-yaxistooltip:after, -.apexcharts-yaxistooltip:before { - top: 50%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; -} - -.apexcharts-yaxistooltip:after { - border-color: rgba(236, 239, 241, 0); - border-width: 6px; - margin-top: -6px; -} - -.apexcharts-yaxistooltip:before { - border-color: rgba(144, 164, 174, 0); - border-width: 7px; - margin-top: -7px; -} - -.apexcharts-yaxistooltip-left:after, -.apexcharts-yaxistooltip-left:before { - left: 100%; -} - -.apexcharts-yaxistooltip-right:after, -.apexcharts-yaxistooltip-right:before { - right: 100%; -} - -.apexcharts-yaxistooltip-left:after { - border-left-color: #ECEFF1; -} - -.apexcharts-yaxistooltip-left:before { - border-left-color: #90A4AE; -} - -.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after { - border-left-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before { - border-left-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-yaxistooltip-right:after { - border-right-color: #ECEFF1; -} - -.apexcharts-yaxistooltip-right:before { - border-right-color: #90A4AE; -} - -.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after { - border-right-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before { - border-right-color: rgba(0, 0, 0, 0.5); -} - -.apexcharts-yaxistooltip.apexcharts-active { - opacity: 1; -} - -.apexcharts-yaxistooltip-hidden { - display: none; -} - -.apexcharts-xcrosshairs, -.apexcharts-ycrosshairs { - pointer-events: none; - opacity: 0; - transition: 0.15s ease all; -} - -.apexcharts-xcrosshairs.apexcharts-active, -.apexcharts-ycrosshairs.apexcharts-active { - opacity: 1; - transition: 0.15s ease all; -} - -.apexcharts-ycrosshairs-hidden { - opacity: 0; -} - -.apexcharts-selection-rect { - cursor: move; -} - -.svg_select_boundingRect, .svg_select_points_rot { - pointer-events: none; - opacity: 0; - visibility: hidden; -} -.apexcharts-selection-rect + g .svg_select_boundingRect, -.apexcharts-selection-rect + g .svg_select_points_rot { - opacity: 0; - visibility: hidden; -} - -.apexcharts-selection-rect + g .svg_select_points_l, -.apexcharts-selection-rect + g .svg_select_points_r { - cursor: ew-resize; - opacity: 1; - visibility: visible; -} - -.svg_select_points { - fill: #efefef; - stroke: #333; - rx: 2; -} - -.apexcharts-canvas.apexcharts-zoomable .hovering-zoom { - cursor: crosshair -} - -.apexcharts-canvas.apexcharts-zoomable .hovering-pan { - cursor: move -} - -.apexcharts-zoom-icon, -.apexcharts-zoomin-icon, -.apexcharts-zoomout-icon, -.apexcharts-reset-icon, -.apexcharts-pan-icon, -.apexcharts-selection-icon, -.apexcharts-menu-icon, -.apexcharts-toolbar-custom-icon { - cursor: pointer; - width: 20px; - height: 20px; - line-height: 24px; - color: #6E8192; - text-align: center; -} - -.apexcharts-zoom-icon svg, -.apexcharts-zoomin-icon svg, -.apexcharts-zoomout-icon svg, -.apexcharts-reset-icon svg, -.apexcharts-menu-icon svg { - fill: #6E8192; -} - -.apexcharts-selection-icon svg { - fill: #444; - transform: scale(0.76) -} - -.apexcharts-theme-dark .apexcharts-zoom-icon svg, -.apexcharts-theme-dark .apexcharts-zoomin-icon svg, -.apexcharts-theme-dark .apexcharts-zoomout-icon svg, -.apexcharts-theme-dark .apexcharts-reset-icon svg, -.apexcharts-theme-dark .apexcharts-pan-icon svg, -.apexcharts-theme-dark .apexcharts-selection-icon svg, -.apexcharts-theme-dark .apexcharts-menu-icon svg, -.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg { - fill: #f3f4f5; -} - -.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg, -.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg, -.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg { - fill: #008FFB; -} - -.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg, -.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg, -.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg, -.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg, -.apexcharts-theme-light .apexcharts-reset-icon:hover svg, -.apexcharts-theme-light .apexcharts-menu-icon:hover svg { - fill: #333; -} - -.apexcharts-selection-icon, -.apexcharts-menu-icon { - position: relative; -} - -.apexcharts-reset-icon { - margin-left: 5px; -} - -.apexcharts-zoom-icon, -.apexcharts-reset-icon, -.apexcharts-menu-icon { - transform: scale(0.85); -} - -.apexcharts-zoomin-icon, -.apexcharts-zoomout-icon { - transform: scale(0.7) -} - -.apexcharts-zoomout-icon { - margin-right: 3px; -} - -.apexcharts-pan-icon { - transform: scale(0.62); - position: relative; - left: 1px; - top: 0px; -} - -.apexcharts-pan-icon svg { - fill: #fff; - stroke: #6E8192; - stroke-width: 2; -} - -.apexcharts-pan-icon.apexcharts-selected svg { - stroke: #008FFB; -} - -.apexcharts-pan-icon:not(.apexcharts-selected):hover svg { - stroke: #333; -} - -.apexcharts-toolbar { - position: absolute; - z-index: 11; - max-width: 176px; - text-align: right; - border-radius: 3px; - padding: 0px 6px 2px 6px; - display: flex; - justify-content: space-between; - align-items: center; -} - -.apexcharts-menu { - background: #fff; - position: absolute; - top: 100%; - border: 1px solid #ddd; - border-radius: 3px; - padding: 3px; - right: 10px; - opacity: 0; - min-width: 110px; - transition: 0.15s ease all; - pointer-events: none; -} - -.apexcharts-menu.apexcharts-menu-open { - opacity: 1; - pointer-events: all; - transition: 0.15s ease all; -} - -.apexcharts-menu-item { - padding: 6px 7px; - font-size: 12px; - cursor: pointer; -} - -.apexcharts-theme-light .apexcharts-menu-item:hover { - background: #eee; -} - -.apexcharts-theme-dark .apexcharts-menu { - background: rgba(0, 0, 0, 0.7); - color: #fff; -} - -@media screen and (min-width: 768px) { - .apexcharts-canvas:hover .apexcharts-toolbar { - opacity: 1; - } -} - -.apexcharts-datalabel.apexcharts-element-hidden { - opacity: 0; -} - -.apexcharts-pie-label, -.apexcharts-datalabels, -.apexcharts-datalabel, -.apexcharts-datalabel-label, -.apexcharts-datalabel-value { - cursor: default; - pointer-events: none; -} - -.apexcharts-pie-label-delay { - opacity: 0; - animation-name: opaque; - animation-duration: 0.3s; - animation-fill-mode: forwards; - animation-timing-function: ease; -} - -.apexcharts-canvas .apexcharts-element-hidden { - opacity: 0; -} - -.apexcharts-hide .apexcharts-series-points { - opacity: 0; -} - -.apexcharts-gridline, -.apexcharts-annotation-rect, -.apexcharts-tooltip .apexcharts-marker, -.apexcharts-area-series .apexcharts-area, -.apexcharts-line, -.apexcharts-zoom-rect, -.apexcharts-toolbar svg, -.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, -.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, -.apexcharts-radar-series path, -.apexcharts-radar-series polygon { - pointer-events: none; -} - - -/* markers */ - -.apexcharts-marker { - transition: 0.15s ease all; -} - -@keyframes opaque { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} - - -/* Resize generated styles */ - -@keyframes resizeanim { - from { - opacity: 0; - } - to { - opacity: 0; - } -} - -.resize-triggers { - animation: 1ms resizeanim; - visibility: hidden; - opacity: 0; -} - -.resize-triggers, -.resize-triggers>div, -.contract-trigger:before { - content: " "; - display: block; - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - overflow: hidden; -} - -.resize-triggers>div { - background: #eee; - overflow: auto; -} - -.contract-trigger:before { - width: 200%; - height: 200%; -} \ No newline at end of file diff --git a/assets/plugins/apexcharts-bundle/js/apex-custom.js b/assets/plugins/apexcharts-bundle/js/apex-custom.js deleted file mode 100644 index 6e4d314..0000000 --- a/assets/plugins/apexcharts-bundle/js/apex-custom.js +++ /dev/null @@ -1,642 +0,0 @@ -$(function () { - "use strict"; - // chart 1 - var options = { - series: [{ - name: 'Likes', - data: [14, 3, 10, 9, 29, 19, 22, 9, 12, 7, 19, 5] - }], - chart: { - foreColor: '#9ba7b2', - height: 360, - type: 'line', - zoom: { - enabled: false - }, - toolbar: { - show: true - }, - dropShadow: { - enabled: true, - top: 3, - left: 14, - blur: 4, - opacity: 0.10, - } - }, - stroke: { - width: 5, - curve: 'smooth' - }, - xaxis: { - type: 'datetime', - categories: ['1/11/2000', '2/11/2000', '3/11/2000', '4/11/2000', '5/11/2000', '6/11/2000', '7/11/2000', '8/11/2000', '9/11/2000', '10/11/2000', '11/11/2000', '12/11/2000'], - }, - title: { - text: 'Line Chart', - align: 'left', - style: { - fontSize: "16px", - color: '#666' - } - }, - fill: { - type: 'gradient', - gradient: { - shade: 'light', - gradientToColors: ['#f41127'], - shadeIntensity: 1, - type: 'horizontal', - opacityFrom: 1, - opacityTo: 1, - stops: [0, 100, 100, 100] - }, - }, - markers: { - size: 4, - colors: ["#f41127"], - strokeColors: "#fff", - strokeWidth: 2, - hover: { - size: 7, - } - }, - colors: ["#f41127"], - yaxis: { - title: { - text: 'Engagement', - }, - } - }; - var chart = new ApexCharts(document.querySelector("#chart1"), options); - chart.render(); - - - // chart 2 - var optionsLine = { - chart: { - foreColor: '#9ba7b2', - height: 360, - type: 'line', - zoom: { - enabled: false - }, - dropShadow: { - enabled: true, - top: 3, - left: 2, - blur: 4, - opacity: 0.1, - } - }, - stroke: { - curve: 'smooth', - width: 5 - }, - colors: ["#0d6efd", '#212529'], - series: [{ - name: "Music", - data: [1, 15, 56, 20, 33, 27] - }, { - name: "Photos", - data: [30, 33, 21, 42, 19, 32] - }], - title: { - text: 'Multiline Chart', - align: 'left', - offsetY: 25, - offsetX: 20 - }, - subtitle: { - text: 'Statistics', - offsetY: 55, - offsetX: 20 - }, - markers: { - size: 4, - strokeWidth: 0, - hover: { - size: 7 - } - }, - grid: { - show: true, - padding: { - bottom: 0 - } - }, - labels: ['01/15/2002', '01/16/2002', '01/17/2002', '01/18/2002', '01/19/2002', '01/20/2002'], - xaxis: { - tooltip: { - enabled: false - } - }, - legend: { - position: 'top', - horizontalAlign: 'right', - offsetY: -20 - } - } - var chartLine = new ApexCharts(document.querySelector('#chart2'), optionsLine); - chartLine.render(); - - - // chart 3 - var options = { - series: [{ - name: 'series1', - data: [31, 40, 68, 31, 92, 55, 100] - }, { - name: 'series2', - data: [11, 82, 45, 80, 34, 52, 41] - }], - chart: { - foreColor: '#9ba7b2', - height: 360, - type: 'area', - zoom: { - enabled: false - }, - toolbar: { - show: true - }, - }, - colors: ["#0d6efd", '#f41127'], - title: { - text: 'Area Chart', - align: 'left', - style: { - fontSize: "16px", - color: '#666' - } - }, - dataLabels: { - enabled: false - }, - stroke: { - curve: 'smooth' - }, - xaxis: { - type: 'datetime', - categories: ["2018-09-19T00:00:00.000Z", "2018-09-19T01:30:00.000Z", "2018-09-19T02:30:00.000Z", "2018-09-19T03:30:00.000Z", "2018-09-19T04:30:00.000Z", "2018-09-19T05:30:00.000Z", "2018-09-19T06:30:00.000Z"] - }, - tooltip: { - x: { - format: 'dd/MM/yy HH:mm' - }, - }, - }; - var chart = new ApexCharts(document.querySelector("#chart3"), options); - chart.render(); - - // chart 4 - var options = { - series: [{ - name: 'Net Profit', - data: [44, 55, 57, 56, 61, 58, 63, 60, 66] - }, { - name: 'Revenue', - data: [76, 85, 101, 98, 87, 105, 91, 114, 94] - }, { - name: 'Free Cash Flow', - data: [35, 41, 36, 26, 45, 48, 52, 53, 41] - }], - chart: { - foreColor: '#9ba7b2', - type: 'bar', - height: 360 - }, - plotOptions: { - bar: { - horizontal: false, - columnWidth: '55%', - endingShape: 'rounded' - }, - }, - dataLabels: { - enabled: false - }, - stroke: { - show: true, - width: 2, - colors: ['transparent'] - }, - title: { - text: 'Column Chart', - align: 'left', - style: { - fontSize: '14px' - } - }, - colors: ["#212529", '#0d6efd', '#ffc107'], - xaxis: { - categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'], - }, - yaxis: { - title: { - text: '$ (thousands)' - } - }, - fill: { - opacity: 1 - }, - tooltip: { - y: { - formatter: function (val) { - return "$ " + val + " thousands" - } - } - } - }; - var chart = new ApexCharts(document.querySelector("#chart4"), options); - chart.render(); - - - // chart 5 - var options = { - series: [{ - data: [400, 430, 448, 470, 540, 580, 690, 610, 800, 980] - }], - chart: { - foreColor: '#9ba7b2', - type: 'bar', - height: 350 - }, - colors: ["#0d6efd"], - plotOptions: { - bar: { - horizontal: true, - columnWidth: '35%', - endingShape: 'rounded' - } - }, - dataLabels: { - enabled: false - }, - xaxis: { - categories: ['South Korea', 'Canada', 'United Kingdom', 'Netherlands', 'Italy', 'France', 'Japan', 'United States', 'China', 'Germany'], - } - }; - var chart = new ApexCharts(document.querySelector("#chart5"), options); - chart.render(); - - - // chart 6 - var options = { - series: [{ - name: 'Website Blog', - type: 'column', - data: [440, 505, 414, 671, 227, 413, 201, 352, 752, 320, 257, 160] - }, { - name: 'Social Media', - type: 'line', - data: [23, 42, 35, 27, 43, 22, 17, 31, 22, 22, 12, 16] - }], - chart: { - foreColor: '#9ba7b2', - height: 350, - type: 'line', - zoom: { - enabled: false - }, - toolbar: { - show: true - }, - }, - stroke: { - width: [0, 4] - }, - plotOptions: { - bar: { - //horizontal: true, - columnWidth: '35%', - endingShape: 'rounded' - } - }, - colors: ["#0d6efd", "#212529"], - title: { - text: 'Traffic Sources' - }, - dataLabels: { - enabled: true, - enabledOnSeries: [1] - }, - labels: ['01 Jan 2001', '02 Jan 2001', '03 Jan 2001', '04 Jan 2001', '05 Jan 2001', '06 Jan 2001', '07 Jan 2001', '08 Jan 2001', '09 Jan 2001', '10 Jan 2001', '11 Jan 2001', '12 Jan 2001'], - xaxis: { - type: 'datetime' - }, - yaxis: [{ - title: { - text: 'Website Blog', - }, - }, { - opposite: true, - title: { - text: 'Social Media' - } - }] - }; - var chart = new ApexCharts(document.querySelector("#chart6"), options); - chart.render(); - - - // chart 7 - var options = { - series: [{ - name: 'TEAM A', - type: 'column', - data: [23, 11, 22, 27, 13, 22, 37, 21, 44, 22, 30] - }, { - name: 'TEAM B', - type: 'area', - data: [44, 55, 41, 67, 22, 43, 21, 41, 56, 27, 43] - }, { - name: 'TEAM C', - type: 'line', - data: [30, 25, 36, 30, 45, 35, 64, 52, 59, 36, 39] - }], - chart: { - foreColor: '#9ba7b2', - height: 350, - type: 'line', - stacked: false, - zoom: { - enabled: false - }, - toolbar: { - show: true - }, - }, - colors: ["#0d6efd", "#17a00e", "#f41127"], - stroke: { - width: [0, 2, 5], - curve: 'smooth' - }, - plotOptions: { - bar: { - columnWidth: '50%' - } - }, - fill: { - opacity: [0.85, 0.25, 1], - gradient: { - inverseColors: false, - shade: 'light', - type: "vertical", - opacityFrom: 0.85, - opacityTo: 0.55, - stops: [0, 100, 100, 100] - } - }, - labels: ['01/01/2003', '02/01/2003', '03/01/2003', '04/01/2003', '05/01/2003', '06/01/2003', '07/01/2003', '08/01/2003', '09/01/2003', '10/01/2003', '11/01/2003'], - markers: { - size: 0 - }, - xaxis: { - type: 'datetime' - }, - yaxis: { - title: { - text: 'Points', - }, - min: 0 - }, - tooltip: { - shared: true, - intersect: false, - y: { - formatter: function (y) { - if (typeof y !== "undefined") { - return y.toFixed(0) + " points"; - } - return y; - } - } - } - }; - var chart = new ApexCharts(document.querySelector("#chart7"), options); - chart.render(); - - - // chart 8 - var options = { - series: [44, 55, 13, 43, 22], - chart: { - foreColor: '#9ba7b2', - height: 330, - type: 'pie', - }, - colors: ["#0d6efd", "#6c757d", "#17a00e", "#f41127", "#ffc107"], - labels: ['Team A', 'Team B', 'Team C', 'Team D', 'Team E'], - responsive: [{ - breakpoint: 480, - options: { - chart: { - height: 360 - }, - legend: { - position: 'bottom' - } - } - }] - }; - var chart = new ApexCharts(document.querySelector("#chart8"), options); - chart.render(); - - - // chart 9 - var options = { - series: [44, 55, 41, 17, 15], - chart: { - foreColor: '#9ba7b2', - height: 380, - type: 'donut', - }, - colors: ["#0d6efd", "#212529", "#17a00e", "#f41127", "#ffc107"], - responsive: [{ - breakpoint: 480, - options: { - chart: { - height: 320 - }, - legend: { - position: 'bottom' - } - } - }] - }; - var chart = new ApexCharts(document.querySelector("#chart9"), options); - chart.render(); - - - // chart 10 - var options = { - series: [{ - name: 'Series 1', - data: [80, 50, 30, 40, 100, 20], - }, { - name: 'Series 2', - data: [20, 30, 40, 80, 20, 80], - }, { - name: 'Series 3', - data: [44, 76, 78, 13, 43, 10], - }], - chart: { - foreColor: '#9ba7b2', - height: 350, - type: 'radar', - dropShadow: { - enabled: true, - blur: 1, - left: 1, - top: 1 - } - }, - colors: ["#0d6efd", "#212529", "#17a00e"], - title: { - text: 'Radar Chart - Multi Series' - }, - stroke: { - width: 2 - }, - fill: { - opacity: 0.1 - }, - markers: { - size: 0 - }, - xaxis: { - categories: ['2011', '2012', '2013', '2014', '2015', '2016'] - } - }; - var chart = new ApexCharts(document.querySelector("#chart10"), options); - chart.render(); - - - // chart 11 - var options = { - series: [{ - name: 'Series 1', - data: [20, 100, 40, 30, 50, 80, 33], - }], - chart: { - foreColor: '#9ba7b2', - height: 350, - type: 'radar', - }, - dataLabels: { - enabled: true - }, - plotOptions: { - radar: { - size: 140, - polygons: { - strokeColors: '#e9e9e9', - fill: { - colors: ['#f8f8f8', '#fff'] - } - } - } - }, - title: { - text: 'Radar with Polygon Fill' - }, - colors: ["#0d6efd"], - markers: { - size: 4, - colors: ['#fff'], - strokeColor: '#FF4560', - strokeWidth: 2, - }, - tooltip: { - y: { - formatter: function (val) { - return val - } - } - }, - xaxis: { - categories: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] - }, - yaxis: { - tickAmount: 7, - labels: { - formatter: function (val, i) { - if (i % 2 === 0) { - return val - } else { - return '' - } - } - } - } - }; - var chart = new ApexCharts(document.querySelector("#chart11"), options); - chart.render(); - - - - // chart 12 - - var options = { - series: [70], - chart: { - foreColor: '#9ba7b2', - height: 350, - type: 'radialBar', - }, - plotOptions: { - radialBar: { - hollow: { - size: '70%', - } - }, - }, - labels: ['Cricket'], - }; - - var chart = new ApexCharts(document.querySelector("#chart12"), options); - chart.render(); - - - - // chart 13 - - var options = { - series: [44, 55, 67, 83], - chart: { - foreColor: '#9ba7b2', - height: 350, - type: 'radialBar', - }, - plotOptions: { - radialBar: { - dataLabels: { - name: { - fontSize: '22px', - }, - value: { - fontSize: '16px', - }, - total: { - show: true, - label: 'Total', - formatter: function (w) { - // By default this function returns the average of all series. The below is just an example to show the use of custom formatter function - return 249 - } - } - } - } - }, - colors: ["#0d6efd", "#17a00e", "#f41127", "#ffc107"], - labels: ['Apples', 'Oranges', 'Bananas', 'Berries'], - }; - - var chart = new ApexCharts(document.querySelector("#chart13"), options); - chart.render(); - - - - -}); \ No newline at end of file diff --git a/assets/plugins/apexcharts-bundle/js/apexcharts.js b/assets/plugins/apexcharts-bundle/js/apexcharts.js deleted file mode 100644 index 1ecd7b6..0000000 --- a/assets/plugins/apexcharts-bundle/js/apexcharts.js +++ /dev/null @@ -1,29605 +0,0 @@ -/*! - * ApexCharts v3.19.0 - * (c) 2018-2020 Juned Chhipa - * Released under the MIT License. - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.ApexCharts = factory()); -}(this, (function () { 'use strict'; - - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); - } - - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - - function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; - } - - function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - /* - ** Generic functions which are not dependent on ApexCharts - */ - var Utils = /*#__PURE__*/function () { - function Utils() { - _classCallCheck(this, Utils); - } - - _createClass(Utils, [{ - key: "shadeRGBColor", - value: function shadeRGBColor(percent, color) { - var f = color.split(','), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = parseInt(f[0].slice(4), 10), - G = parseInt(f[1], 10), - B = parseInt(f[2], 10); - return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')'; - } - }, { - key: "shadeHexColor", - value: function shadeHexColor(percent, color) { - var f = parseInt(color.slice(1), 16), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = f >> 16, - G = f >> 8 & 0x00ff, - B = f & 0x0000ff; - return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); - } // beautiful color shading blending code - // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors - - }, { - key: "shadeColor", - value: function shadeColor(p, color) { - if (Utils.isColorHex(color)) { - return this.shadeHexColor(p, color); - } else { - return this.shadeRGBColor(p, color); - } - } - }], [{ - key: "bind", - value: function bind(fn, me) { - return function () { - return fn.apply(me, arguments); - }; - } - }, { - key: "isObject", - value: function isObject(item) { - return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; - } - }, { - key: "listToArray", - value: function listToArray(list) { - var i, - array = []; - - for (i = 0; i < list.length; i++) { - array[i] = list[i]; - } - - return array; - } // to extend defaults with user options - // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 - - }, { - key: "extend", - value: function extend(target, source) { - var _this = this; - - if (typeof Object.assign !== 'function') { - - (function () { - Object.assign = function (target) { - - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - - for (var index = 1; index < arguments.length; index++) { - var _source = arguments[index]; - - if (_source !== undefined && _source !== null) { - for (var nextKey in _source) { - if (_source.hasOwnProperty(nextKey)) { - output[nextKey] = _source[nextKey]; - } - } - } - } - - return output; - }; - })(); - } - - var output = Object.assign({}, target); - - if (this.isObject(target) && this.isObject(source)) { - Object.keys(source).forEach(function (key) { - if (_this.isObject(source[key])) { - if (!(key in target)) { - Object.assign(output, _defineProperty({}, key, source[key])); - } else { - output[key] = _this.extend(target[key], source[key]); - } - } else { - Object.assign(output, _defineProperty({}, key, source[key])); - } - }); - } - - return output; - } - }, { - key: "extendArray", - value: function extendArray(arrToExtend, resultArr) { - var extendedArr = []; - arrToExtend.map(function (item) { - extendedArr.push(Utils.extend(resultArr, item)); - }); - arrToExtend = extendedArr; - return arrToExtend; - } // If month counter exceeds 12, it starts again from 1 - - }, { - key: "monthMod", - value: function monthMod(month) { - return month % 12; - } - }, { - key: "clone", - value: function clone(source) { - if (Object.prototype.toString.call(source) === '[object Array]') { - var cloneResult = []; - - for (var i = 0; i < source.length; i++) { - cloneResult[i] = this.clone(source[i]); - } - - return cloneResult; - } else if (_typeof(source) === 'object') { - var _cloneResult = {}; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - _cloneResult[prop] = this.clone(source[prop]); - } - } - - return _cloneResult; - } else { - return source; - } - } - }, { - key: "log10", - value: function log10(x) { - return Math.log(x) / Math.LN10; - } - }, { - key: "roundToBase10", - value: function roundToBase10(x) { - return Math.pow(10, Math.floor(Math.log10(x))); - } - }, { - key: "roundToBase", - value: function roundToBase(x, base) { - return Math.pow(base, Math.floor(Math.log(x) / Math.log(base))); - } - }, { - key: "parseNumber", - value: function parseNumber(val) { - if (val === null) return val; - return parseFloat(val); - } - }, { - key: "randomId", - value: function randomId() { - return (Math.random() + 1).toString(36).substring(4); - } - }, { - key: "noExponents", - value: function noExponents(val) { - var data = String(val).split(/[eE]/); - if (data.length === 1) return data[0]; - var z = '', - sign = val < 0 ? '-' : '', - str = data[0].replace('.', ''), - mag = Number(data[1]) + 1; - - if (mag < 0) { - z = sign + '0.'; - - while (mag++) { - z += '0'; - } - - return z + str.replace(/^-/, ''); - } - - mag -= str.length; - - while (mag--) { - z += '0'; - } - - return str + z; - } - }, { - key: "getDimensions", - value: function getDimensions(el) { - var computedStyle = getComputedStyle(el); - var ret = []; - var elementHeight = el.clientHeight; - var elementWidth = el.clientWidth; - elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); - elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight); - ret.push(elementWidth); - ret.push(elementHeight); - return ret; - } - }, { - key: "getBoundingClientRect", - value: function getBoundingClientRect(element) { - var rect = element.getBoundingClientRect(); - return { - top: rect.top, - right: rect.right, - bottom: rect.bottom, - left: rect.left, - width: element.clientWidth, - height: element.clientHeight, - x: rect.left, - y: rect.top - }; - } - }, { - key: "getLargestStringFromArr", - value: function getLargestStringFromArr(arr) { - return arr.reduce(function (a, b) { - if (Array.isArray(b)) { - b = b.reduce(function (aa, bb) { - return aa.length > bb.length ? aa : bb; - }); - } - - return a.length > b.length ? a : b; - }, 0); - } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275 - - }, { - key: "hexToRgba", - value: function hexToRgba() { - var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999'; - var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6; - - if (hex.substring(0, 1) !== '#') { - hex = '#999999'; - } - - var h = hex.replace('#', ''); - h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g')); - - for (var i = 0; i < h.length; i++) { - h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16); - } - - if (typeof opacity !== 'undefined') h.push(opacity); - return 'rgba(' + h.join(',') + ')'; - } - }, { - key: "getOpacityFromRGBA", - value: function getOpacityFromRGBA(rgba) { - return parseFloat(rgba.replace(/^.*,(.+)\)/, '$1')); - } - }, { - key: "rgb2hex", - value: function rgb2hex(rgb) { - rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : ''; - } - }, { - key: "isColorHex", - value: function isColorHex(color) { - return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(color); - } - }, { - key: "polarToCartesian", - value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) { - var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; - return { - x: centerX + radius * Math.cos(angleInRadians), - y: centerY + radius * Math.sin(angleInRadians) - }; - } - }, { - key: "escapeString", - value: function escapeString(str) { - var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x'; - var newStr = str.toString().slice(); - newStr = newStr.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>{}[\]\\/]/gi, escapeWith); - return newStr; - } - }, { - key: "negToZero", - value: function negToZero(val) { - return val < 0 ? 0 : val; - } - }, { - key: "moveIndexInArray", - value: function moveIndexInArray(arr, old_index, new_index) { - if (new_index >= arr.length) { - var k = new_index - arr.length + 1; - - while (k--) { - arr.push(undefined); - } - } - - arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); - return arr; - } - }, { - key: "extractNumber", - value: function extractNumber(s) { - return parseFloat(s.replace(/[^\d.]*/g, '')); - } - }, { - key: "findAncestor", - value: function findAncestor(el, cls) { - while ((el = el.parentElement) && !el.classList.contains(cls)) { - } - - return el; - } - }, { - key: "setELstyles", - value: function setELstyles(el, styles) { - for (var key in styles) { - if (styles.hasOwnProperty(key)) { - el.style.key = styles[key]; - } - } - } - }, { - key: "isNumber", - value: function isNumber(value) { - return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10)); - } - }, { - key: "isFloat", - value: function isFloat(n) { - return Number(n) === n && n % 1 !== 0; - } - }, { - key: "isSafari", - value: function isSafari() { - return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - } - }, { - key: "isFirefox", - value: function isFirefox() { - return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - } - }, { - key: "isIE11", - value: function isIE11() { - if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) { - return true; - } - } - }, { - key: "isIE", - value: function isIE() { - var ua = window.navigator.userAgent; - var msie = ua.indexOf('MSIE '); - - if (msie > 0) { - // IE 10 or older => return version number - return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); - } - - var trident = ua.indexOf('Trident/'); - - if (trident > 0) { - // IE 11 => return version number - var rv = ua.indexOf('rv:'); - return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); - } - - var edge = ua.indexOf('Edge/'); - - if (edge > 0) { - // Edge (IE 12+) => return version number - return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); - } // other browser - - - return false; - } - }]); - - return Utils; - }(); - - /** - * ApexCharts Filters Class for setting hover/active states on the paths. - * - * @module Formatters - **/ - - var Filters = /*#__PURE__*/function () { - function Filters(ctx) { - _classCallCheck(this, Filters); - - this.ctx = ctx; - this.w = ctx.w; - } // create a re-usable filter which can be appended other filter effects and applied to multiple elements - - - _createClass(Filters, [{ - key: "getDefaultFilter", - value: function getDefaultFilter(el, i) { - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - - if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); - } else { - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } - } - }, { - key: "addNormalFilter", - value: function addNormalFilter(el, i) { - var w = this.w; // revert shadow if it was there - // but, ignore marker as marker don't have dropshadow yet - - if (w.config.chart.dropShadow.enabled && !el.node.classList.contains('apexcharts-marker')) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addLightenFilter", - value: function addLightenFilter(el, i, attrs) { - var _this = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: 1.5, - intercept: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - - this._scaleFilterSize(el.filterer.node); - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addDarkenFilter", - value: function addDarkenFilter(el, i, attrs) { - var _this2 = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this2.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - - this._scaleFilterSize(el.filterer.node); - } - }, { - key: "applyFilter", - value: function applyFilter(el, i, filter) { - var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; - - switch (filter) { - case 'none': - { - this.addNormalFilter(el, i); - break; - } - - case 'lighten': - { - this.addLightenFilter(el, i, { - intensity: intensity - }); - break; - } - - case 'darken': - { - this.addDarkenFilter(el, i, { - intensity: intensity - }); - break; - } - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addShadow", - value: function addShadow(add, i, attrs) { - var blur = attrs.blur, - top = attrs.top, - left = attrs.left, - color = attrs.color, - opacity = attrs.opacity; - var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - return add.blend(add.source, shadowBlur); - } // directly adds dropShadow to the element and returns the same element. - // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow - - }, { - key: "dropShadow", - value: function dropShadow(el, attrs) { - var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var top = attrs.top, - left = attrs.left, - blur = attrs.blur, - color = attrs.color, - opacity = attrs.opacity, - noUserSpaceOnUse = attrs.noUserSpaceOnUse; - var w = this.w; - el.unfilter(true); - - if (Utils.isIE() && w.config.chart.type === 'radialBar') { - // in radialbar charts, dropshadow is clipping actual drawing in IE - return el; - } - - color = Array.isArray(color) ? color[i] : color; - el.filter(function (add) { - var shadowBlur = null; - - if (Utils.isSafari() || Utils.isFirefox() || Utils.isIE()) { - // safari/firefox has some alternative way to use this filter - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur); - } else { - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - } - - add.blend(add.source, shadowBlur); - }); - - if (!noUserSpaceOnUse) { - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - - this._scaleFilterSize(el.filterer.node); - - return el; - } - }, { - key: "setSelectionFilter", - value: function setSelectionFilter(el, realIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') { - if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) { - el.node.setAttribute('selected', true); - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); - } - } - } - } - }, { - key: "_scaleFilterSize", - value: function _scaleFilterSize(el) { - var setAttributes = function setAttributes(attrs) { - for (var key in attrs) { - if (attrs.hasOwnProperty(key)) { - el.setAttribute(key, attrs[key]); - } - } - }; - - setAttributes({ - width: '200%', - height: '200%', - x: '-50%', - y: '-50%' - }); - } - }]); - - return Filters; - }(); - - /** - * ApexCharts Animation Class. - * - * @module Animations - **/ - - var Animations = /*#__PURE__*/function () { - function Animations(ctx) { - _classCallCheck(this, Animations); - - this.ctx = ctx; - this.w = ctx.w; - this.setEasingFunctions(); - } - - _createClass(Animations, [{ - key: "setEasingFunctions", - value: function setEasingFunctions() { - var easing; - if (this.w.globals.easing) return; - var userDefinedEasing = this.w.config.chart.animations.easing; - - switch (userDefinedEasing) { - case 'linear': - { - easing = '-'; - break; - } - - case 'easein': - { - easing = '<'; - break; - } - - case 'easeout': - { - easing = '>'; - break; - } - - case 'easeinout': - { - easing = '<>'; - break; - } - - case 'swing': - { - easing = function easing(pos) { - var s = 1.70158; - var ret = (pos -= 1) * pos * ((s + 1) * pos + s) + 1; - return ret; - }; - - break; - } - - case 'bounce': - { - easing = function easing(pos) { - var ret = ''; - - if (pos < 1 / 2.75) { - ret = 7.5625 * pos * pos; - } else if (pos < 2 / 2.75) { - ret = 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; - } else if (pos < 2.5 / 2.75) { - ret = 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; - } else { - ret = 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; - } - - return ret; - }; - - break; - } - - case 'elastic': - { - easing = function easing(pos) { - if (pos === !!pos) return pos; - return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1; - }; - - break; - } - - default: - { - easing = '<>'; - } - } - - this.w.globals.easing = easing; - } - }, { - key: "animateLine", - value: function animateLine(el, from, to, speed) { - el.attr(from).animate(speed).attr(to); - } - /* - ** Animate radius of a circle element - */ - - }, { - key: "animateCircleRadius", - value: function animateCircleRadius(el, from, to, speed, easing, cb) { - if (!from) from = 0; - el.attr({ - r: from - }).animate(speed, easing).attr({ - r: to - }).afterAll(function () { - cb(); - }); - } - /* - ** Animate radius and position of a circle element - */ - - }, { - key: "animateCircle", - value: function animateCircle(el, from, to, speed, easing) { - el.attr({ - r: from.r, - cx: from.cx, - cy: from.cy - }).animate(speed, easing).attr({ - r: to.r, - cx: to.cx, - cy: to.cy - }); - } - /* - ** Animate rect properties - */ - - }, { - key: "animateRect", - value: function animateRect(el, from, to, speed, fn) { - el.attr(from).animate(speed).attr(to).afterAll(function () { - return fn(); - }); - } - }, { - key: "animatePathsGradually", - value: function animatePathsGradually(params) { - var el = params.el, - realIndex = params.realIndex, - j = params.j, - fill = params.fill, - pathFrom = params.pathFrom, - pathTo = params.pathTo, - speed = params.speed, - delay = params.delay; - var me = this; - var w = this.w; - var delayFactor = 0; - - if (w.config.chart.animations.animateGradually.enabled) { - delayFactor = w.config.chart.animations.animateGradually.delay; - } - - if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged && w.config.chart.type !== 'bar') { - // disabled due to this bug - https://github.com/apexcharts/vue-apexcharts/issues/75 - delayFactor = 0; - } - - me.morphSVG(el, realIndex, j, w.config.chart.type === 'line' && !w.globals.comboCharts ? 'stroke' : fill, pathFrom, pathTo, speed, delay * delayFactor); - } - }, { - key: "showDelayedElements", - value: function showDelayedElements() { - this.w.globals.delayedElements.forEach(function (d) { - var ele = d.el; - ele.classList.remove('apexcharts-element-hidden'); - }); - } - }, { - key: "animationCompleted", - value: function animationCompleted(el) { - var w = this.w; - if (w.globals.animationEnded) return; - w.globals.animationEnded = true; - this.showDelayedElements(); - - if (typeof w.config.chart.events.animationEnd === 'function') { - w.config.chart.events.animationEnd(this.ctx, { - el: el, - w: w - }); - } - } // SVG.js animation for morphing one path to another - - }, { - key: "morphSVG", - value: function morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay) { - var _this = this; - - var w = this.w; - - if (!pathFrom) { - pathFrom = el.attr('pathFrom'); - } - - if (!pathTo) { - pathTo = el.attr('pathTo'); - } - - var disableAnimationForCorrupPath = function disableAnimationForCorrupPath(path) { - if (w.config.chart.type === 'radar') { - // radar chart drops the path to bottom and hence a corrup path looks ugly - // therefore, disable animation for such a case - speed = 1; - } - - return "M 0 ".concat(w.globals.gridHeight); - }; - - if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) { - pathFrom = disableAnimationForCorrupPath(); - } - - if (pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) { - pathTo = disableAnimationForCorrupPath(); - } - - if (!w.globals.shouldAnimate) { - speed = 1; - } - - el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () { - // a flag to indicate that the original mount function can return true now as animation finished here - if (Utils.isNumber(j)) { - if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) { - _this.animationCompleted(el); - } - } else if (fill !== 'none' && w.globals.shouldAnimate) { - if (!w.globals.comboCharts && realIndex === w.globals.series.length - 1 || w.globals.comboCharts) { - _this.animationCompleted(el); - } - } - - _this.showDelayedElements(); - }); - } - }]); - - return Animations; - }(); - - /** - * ApexCharts Graphics Class for all drawing operations. - * - * @module Graphics - **/ - - var Graphics = /*#__PURE__*/function () { - function Graphics(ctx) { - _classCallCheck(this, Graphics); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Graphics, [{ - key: "drawLine", - value: function drawLine(x1, y1, x2, y2) { - var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8'; - var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var w = this.w; - var line = w.globals.dom.Paper.line().attr({ - x1: x1, - y1: y1, - x2: x2, - y2: y2, - stroke: lineColor, - 'stroke-dasharray': dashArray, - 'stroke-width': strokeWidth - }); - return line; - } - }, { - key: "drawRect", - value: function drawRect() { - var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe'; - var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1; - var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; - var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; - var w = this.w; - var rect = w.globals.dom.Paper.rect(); - rect.attr({ - x: x1, - y: y1, - width: x2 > 0 ? x2 : 0, - height: y2 > 0 ? y2 : 0, - rx: radius, - ry: radius, - opacity: opacity, - 'stroke-width': strokeWidth !== null ? strokeWidth : 0, - stroke: strokeColor !== null ? strokeColor : 'none', - 'stroke-dasharray': strokeDashArray - }); // fix apexcharts.js#1410 - - rect.node.setAttribute('fill', color); - return rect; - } - }, { - key: "drawPolygon", - value: function drawPolygon(polygonString) { - var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1'; - var strokeWidth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; - var fill = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'none'; - var w = this.w; - var polygon = w.globals.dom.Paper.polygon(polygonString).attr({ - fill: fill, - stroke: stroke, - 'stroke-width': strokeWidth - }); - return polygon; - } - }, { - key: "drawCircle", - value: function drawCircle(radius) { - var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - var c = w.globals.dom.Paper.circle(radius * 2); - - if (attrs !== null) { - c.attr(attrs); - } - - return c; - } - }, { - key: "drawPath", - value: function drawPath(_ref) { - var _ref$d = _ref.d, - d = _ref$d === void 0 ? '' : _ref$d, - _ref$stroke = _ref.stroke, - stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke, - _ref$strokeWidth = _ref.strokeWidth, - strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth, - fill = _ref.fill, - _ref$fillOpacity = _ref.fillOpacity, - fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity, - _ref$strokeOpacity = _ref.strokeOpacity, - strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity, - classes = _ref.classes, - _ref$strokeLinecap = _ref.strokeLinecap, - strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap, - _ref$strokeDashArray = _ref.strokeDashArray, - strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray; - var w = this.w; - - if (strokeLinecap === null) { - strokeLinecap = w.config.stroke.lineCap; - } - - if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) { - d = "M 0 ".concat(w.globals.gridHeight); - } - - var p = w.globals.dom.Paper.path(d).attr({ - fill: fill, - 'fill-opacity': fillOpacity, - stroke: stroke, - 'stroke-opacity': strokeOpacity, - 'stroke-linecap': strokeLinecap, - 'stroke-width': strokeWidth, - 'stroke-dasharray': strokeDashArray, - class: classes - }); - return p; - } - }, { - key: "group", - value: function group() { - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var g = w.globals.dom.Paper.group(); - - if (attrs !== null) { - g.attr(attrs); - } - - return g; - } - }, { - key: "move", - value: function move(x, y) { - var move = ['M', x, y].join(' '); - return move; - } - }, { - key: "line", - value: function line(x, y) { - var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var line = null; - - if (hORv === null) { - line = ['L', x, y].join(' '); - } else if (hORv === 'H') { - line = ['H', x].join(' '); - } else if (hORv === 'V') { - line = ['V', y].join(' '); - } - - return line; - } - }, { - key: "curve", - value: function curve(x1, y1, x2, y2, x, y) { - var curve = ['C', x1, y1, x2, y2, x, y].join(' '); - return curve; - } - }, { - key: "quadraticCurve", - value: function quadraticCurve(x1, y1, x, y) { - var curve = ['Q', x1, y1, x, y].join(' '); - return curve; - } - }, { - key: "arc", - value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) { - var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; - var coord = 'A'; - if (relative) coord = 'a'; - var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' '); - return arc; - } - /** - * @memberof Graphics - * @param {object} - * i = series's index - * realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating "i" may change in loops, but realIndex doesn't - * pathFrom = existing pathFrom to animateTo - * pathTo = new Path to which d attr will be animated from pathFrom to pathTo - * stroke = line Color - * strokeWidth = width of path Line - * fill = it can be gradient, single color, pattern or image - * animationDelay = how much to delay when starting animation (in milliseconds) - * dataChangeSpeed = for dynamic animations, when data changes - * className = class attribute to add - * @return {object} svg.js path object - **/ - - }, { - key: "renderPaths", - value: function renderPaths(_ref2) { - var j = _ref2.j, - realIndex = _ref2.realIndex, - pathFrom = _ref2.pathFrom, - pathTo = _ref2.pathTo, - stroke = _ref2.stroke, - strokeWidth = _ref2.strokeWidth, - strokeLinecap = _ref2.strokeLinecap, - fill = _ref2.fill, - animationDelay = _ref2.animationDelay, - initialSpeed = _ref2.initialSpeed, - dataChangeSpeed = _ref2.dataChangeSpeed, - className = _ref2.className, - _ref2$shouldClipToGri = _ref2.shouldClipToGrid, - shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, - _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, - _ref2$drawShadow = _ref2.drawShadow, - drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; - var w = this.w; - var filters = new Filters(this.ctx); - var anim = new Animations(this.ctx); - var initialAnim = this.w.config.chart.animations.enabled; - var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - var d; - var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate); - - if (shouldAnimate) { - d = pathFrom; - } else { - d = pathTo; - w.globals.animationEnded = true; - } - - var strokeDashArrayOpt = w.config.stroke.dashArray; - var strokeDashArray = 0; - - if (Array.isArray(strokeDashArrayOpt)) { - strokeDashArray = strokeDashArrayOpt[realIndex]; - } else { - strokeDashArray = w.config.stroke.dashArray; - } - - var el = this.drawPath({ - d: d, - stroke: stroke, - strokeWidth: strokeWidth, - fill: fill, - fillOpacity: 1, - classes: className, - strokeLinecap: strokeLinecap, - strokeDashArray: strokeDashArray - }); - el.attr('index', realIndex); - - if (shouldClipToGrid) { - el.attr({ - 'clip-path': "url(#gridRectMask".concat(w.globals.cuid, ")") - }); - } // const defaultFilter = el.filterer - - - if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, realIndex); - } else { - if (w.config.chart.dropShadow.enabled && drawShadow) { - if (!w.config.chart.dropShadow.enabledOnSeries || w.config.chart.dropShadow.enabledOnSeries && w.config.chart.dropShadow.enabledOnSeries.indexOf(realIndex) !== -1) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow, realIndex); - } - } - } - - if (bindEventsOnPaths) { - el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el)); - el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el)); - el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el)); - } - - el.attr({ - pathTo: pathTo, - pathFrom: pathFrom - }); - var defaultAnimateOpts = { - el: el, - j: j, - realIndex: realIndex, - pathFrom: pathFrom, - pathTo: pathTo, - fill: fill, - strokeWidth: strokeWidth, - delay: animationDelay - }; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - anim.animatePathsGradually(_objectSpread2({}, defaultAnimateOpts, { - speed: initialSpeed - })); - } else { - if (w.globals.resized || !w.globals.dataChanged) { - anim.showDelayedElements(); - } - } - - if (w.globals.dataChanged && dynamicAnim && shouldAnimate) { - anim.animatePathsGradually(_objectSpread2({}, defaultAnimateOpts, { - speed: dataChangeSpeed - })); - } - - return el; - } - }, { - key: "drawPattern", - value: function drawPattern(style, width, height) { - var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8'; - var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var w = this.w; - var p = w.globals.dom.Paper.pattern(width, height, function (add) { - if (style === 'horizontalLines') { - add.line(0, 0, height, 0).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'verticalLines') { - add.line(0, 0, 0, width).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'slantedLines') { - add.line(0, 0, width, height).stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'squares') { - add.rect(width, height).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'circles') { - add.circle(width).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } - }); - return p; - } - }, { - key: "drawGradient", - value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) { - var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; - var w = this.w; - var g; - - if (gfrom.length < 9 && gfrom.indexOf('#') === 0) { - // if the hex contains alpha and is of 9 digit, skip the opacity - gfrom = Utils.hexToRgba(gfrom, opacityFrom); - } - - if (gto.length < 9 && gto.indexOf('#') === 0) { - gto = Utils.hexToRgba(gto, opacityTo); - } - - var stop1 = 0; - var stop2 = 1; - var stop3 = 1; - var stop4 = null; - - if (stops !== null) { - stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0; - stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1; - stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1; - stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null; - } - - var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'polarArea' || w.config.chart.type === 'bubble'); - - if (colorStops === null || colorStops.length === 0) { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - stop.at(stop1, gfrom, opacityFrom); - stop.at(stop2, gto, opacityTo); - stop.at(stop3, gto, opacityTo); - - if (stop4 !== null) { - stop.at(stop4, gfrom, opacityFrom); - } - }); - } else { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - var gradientStops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops; - gradientStops.forEach(function (s) { - stop.at(s.offset / 100, s.color, s.opacity); - }); - }); - } - - if (!radial) { - if (style === 'vertical') { - g.from(0, 0).to(0, 1); - } else if (style === 'diagonal') { - g.from(0, 0).to(1, 1); - } else if (style === 'horizontal') { - g.from(0, 1).to(1, 1); - } else if (style === 'diagonal2') { - g.from(1, 0).to(0, 1); - } - } else { - var offx = w.globals.gridWidth / 2; - var offy = w.globals.gridHeight / 2; - - if (w.config.chart.type !== 'bubble') { - g.attr({ - gradientUnits: 'userSpaceOnUse', - cx: offx, - cy: offy, - r: size - }); - } else { - g.attr({ - cx: 0.5, - cy: 0.5, - r: 0.8, - fx: 0.2, - fy: 0.2 - }); - } - } - - return g; - } - }, { - key: "drawText", - value: function drawText(_ref3) { - var x = _ref3.x, - y = _ref3.y, - text = _ref3.text, - textAnchor = _ref3.textAnchor, - fontSize = _ref3.fontSize, - fontFamily = _ref3.fontFamily, - fontWeight = _ref3.fontWeight, - foreColor = _ref3.foreColor, - opacity = _ref3.opacity, - _ref3$cssClass = _ref3.cssClass, - cssClass = _ref3$cssClass === void 0 ? '' : _ref3$cssClass, - _ref3$isPlainText = _ref3.isPlainText, - isPlainText = _ref3$isPlainText === void 0 ? true : _ref3$isPlainText; - var w = this.w; - if (typeof text === 'undefined') text = ''; - - if (!textAnchor) { - textAnchor = 'start'; - } - - if (!foreColor || !foreColor.length) { - foreColor = w.config.chart.foreColor; - } - - fontFamily = fontFamily || w.config.chart.fontFamily; - fontWeight = fontWeight || 'regular'; - var elText; - - if (Array.isArray(text)) { - elText = w.globals.dom.Paper.text(function (add) { - for (var i = 0; i < text.length; i++) { - i === 0 ? add.tspan(text[i]) : add.tspan(text[i]).newLine(); - } - }); - } else { - elText = isPlainText ? w.globals.dom.Paper.plain(text) : w.globals.dom.Paper.text(function (add) { - return add.tspan(text); - }); - } - - elText.attr({ - x: x, - y: y, - 'text-anchor': textAnchor, - 'dominant-baseline': 'auto', - 'font-size': fontSize, - 'font-family': fontFamily, - 'font-weight': fontWeight, - fill: foreColor, - class: 'apexcharts-text ' + cssClass - }); - elText.node.style.fontFamily = fontFamily; - elText.node.style.opacity = opacity; - return elText; - } - }, { - key: "drawMarker", - value: function drawMarker(x, y, opts) { - x = x || 0; - var size = opts.pSize || 0; - var elPoint = null; - - if (opts.shape === 'square') { - var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius; - - if (y === null || !size) { - size = 0; - radius = 0; - } - - var nSize = size * 1.2 + radius; - var p = this.drawRect(nSize, nSize, nSize, nSize, radius); - p.attr({ - x: x - nSize / 2, - y: y - nSize / 2, - cx: x, - cy: y, - class: opts.class ? opts.class : '', - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - stroke: opts.pointStrokeColor, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - elPoint = p; - } else if (opts.shape === 'circle' || !opts.shape) { - if (!Utils.isNumber(y)) { - size = 0; - y = 0; - } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2 - - - elPoint = this.drawCircle(size, { - cx: x, - cy: y, - class: opts.class ? opts.class : '', - stroke: opts.pointStrokeColor, - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - } - - return elPoint; - } - }, { - key: "pathMouseEnter", - value: function pathMouseEnter(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index'), 10); - var j = parseInt(path.node.getAttribute('j'), 10); - - if (typeof w.config.chart.events.dataPointMouseEnter === 'function') { - w.config.chart.events.dataPointMouseEnter(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.events.fireEvent('dataPointMouseEnter', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { - var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); - } - } - } - }, { - key: "pathMouseLeave", - value: function pathMouseLeave(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index'), 10); - var j = parseInt(path.node.getAttribute('j'), 10); - - if (typeof w.config.chart.events.dataPointMouseLeave === 'function') { - w.config.chart.events.dataPointMouseLeave(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.events.fireEvent('dataPointMouseLeave', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - }, { - key: "pathMouseDown", - value: function pathMouseDown(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index'), 10); - var j = parseInt(path.node.getAttribute('j'), 10); - var selected = 'false'; - - if (path.node.getAttribute('selected') === 'true') { - path.node.setAttribute('selected', 'false'); - - if (w.globals.selectedDataPoints[i].indexOf(j) > -1) { - var index = w.globals.selectedDataPoints[i].indexOf(j); - w.globals.selectedDataPoints[i].splice(index, 1); - } - } else { - if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) { - w.globals.selectedDataPoints = []; - var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members; - var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; - - var deSelect = function deSelect(els) { - Array.prototype.forEach.call(els, function (el) { - el.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(el, i); - }); - }; - - deSelect(elPaths); - deSelect(elCircles); - } - - path.node.setAttribute('selected', 'true'); - selected = 'true'; - - if (typeof w.globals.selectedDataPoints[i] === 'undefined') { - w.globals.selectedDataPoints[i] = []; - } - - w.globals.selectedDataPoints[i].push(j); - } - - if (selected === 'true') { - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - filters.applyFilter(path, i, activeFilter.type, activeFilter.value); - } - } else { - if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - - if (typeof w.config.chart.events.dataPointSelection === 'function') { - w.config.chart.events.dataPointSelection(e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - if (e) { - this.ctx.events.fireEvent('dataPointSelection', [e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - } - } - }, { - key: "rotateAroundCenter", - value: function rotateAroundCenter(el) { - var coord = el.getBBox(); - var x = coord.x + coord.width / 2; - var y = coord.y + coord.height / 2; - return { - x: x, - y: y - }; - } - }, { - key: "getTextRects", - value: function getTextRects(text, fontSize, fontFamily, transform) { - var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var w = this.w; - var virtualText = this.drawText({ - x: -200, - y: -200, - text: text, - textAnchor: 'start', - fontSize: fontSize, - fontFamily: fontFamily, - foreColor: '#fff', - opacity: 0 - }); - - if (transform) { - virtualText.attr('transform', transform); - } - - w.globals.dom.Paper.add(virtualText); - var rect = virtualText.bbox(); - - if (!useBBox) { - rect = virtualText.node.getBoundingClientRect(); - } - - virtualText.remove(); - return { - width: rect.width, - height: rect.height - }; - } - /** - * append ... to long text - * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg - * @memberof Graphics - **/ - - }, { - key: "placeTextWithEllipsis", - value: function placeTextWithEllipsis(textObj, textString, width) { - if (typeof textObj.getComputedTextLength !== 'function') return; - textObj.textContent = textString; - - if (textString.length > 0) { - // ellipsis is needed - if (textObj.getComputedTextLength() >= width / 0.8) { - for (var x = textString.length - 3; x > 0; x -= 3) { - if (textObj.getSubStringLength(0, x) <= width / 0.8) { - textObj.textContent = textString.substring(0, x) + '...'; - return; - } - } - - textObj.textContent = '.'; // can't place at all - } - } - } - }], [{ - key: "setAttrs", - value: function setAttrs(el, attrs) { - for (var key in attrs) { - if (attrs.hasOwnProperty(key)) { - el.setAttribute(key, attrs[key]); - } - } - } - }]); - - return Graphics; - }(); - - var Helpers = /*#__PURE__*/function () { - function Helpers(annoCtx) { - _classCallCheck(this, Helpers); - - this.w = annoCtx.w; - this.annoCtx = annoCtx; - } - - _createClass(Helpers, [{ - key: "setOrientations", - value: function setOrientations(anno) { - var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : 0; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } - - var annoRotatingCenter = this.annoCtx.graphics.rotateAroundCenter(xAnno); - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); - } - } - } - }, { - key: "addBackgroundToAnno", - value: function addBackgroundToAnno(annoEl, anno) { - var w = this.w; - if (!anno.label.text || anno.label.text && !anno.label.text.trim()) return null; - var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); - var coords = annoEl.getBoundingClientRect(); - var pleft = anno.label.style.padding.left; - var pright = anno.label.style.padding.right; - var ptop = anno.label.style.padding.top; - var pbottom = anno.label.style.padding.bottom; - - if (anno.label.orientation === 'vertical') { - ptop = anno.label.style.padding.left; - pbottom = anno.label.style.padding.right; - pleft = anno.label.style.padding.top; - pright = anno.label.style.padding.bottom; - } - - var x1 = coords.left - elGridRect.left - pleft; - var y1 = coords.top - elGridRect.top - ptop; - var elRect = this.annoCtx.graphics.drawRect(x1 - w.globals.barPadForNumericAxis, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, anno.label.borderRadius, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0); - - if (anno.id) { - elRect.node.classList.add(anno.id); - } - - return elRect; - } - }, { - key: "annotationsBackground", - value: function annotationsBackground() { - var _this = this; - - var w = this.w; - - var add = function add(anno, i, type) { - var annoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(i, "']")); - - if (annoLabel) { - var parent = annoLabel.parentNode; - - var elRect = _this.addBackgroundToAnno(annoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, annoLabel); - } - } - }; - - w.config.annotations.xaxis.map(function (anno, i) { - add(anno, i, 'xaxis'); - }); - w.config.annotations.yaxis.map(function (anno, i) { - add(anno, i, 'yaxis'); - }); - w.config.annotations.points.map(function (anno, i) { - add(anno, i, 'point'); - }); - } - }, { - key: "makeAnnotationDraggable", - value: function makeAnnotationDraggable(el, annoType, index) { - var w = this.w; - var anno = w.config.annotations[annoType][index]; // in the draggable annotations, we will mutate the original config - // object and store the values directly there - - el.draggable().on('dragend', function (de) { - var x = de.target.getAttribute('x'); - var y = de.target.getAttribute('y'); - var cx = de.target.getAttribute('cx'); - var cy = de.target.getAttribute('cy'); - anno.x = x; - anno.y = y; - - if (cx && cy) { - anno.x = cx; - anno.y = cy; - } - }); - el.node.addEventListener('mousedown', function (e) { - e.stopPropagation(); - el.selectize({ - pointSize: 8, - rotationPoint: false, - pointType: 'rect' - }); - el.resize().on('resizedone', function (re) { - var width = re.target.getAttribute('width'); - var height = re.target.getAttribute('height'); - var r = re.target.getAttribute('r'); - anno.width = width; - anno.height = height; - - if (r) { - anno.radius = r; - } - }); - }); - } - }, { - key: "getStringX", - value: function getStringX(x) { - var w = this.w; - var rX = x; - - if (w.config.xaxis.convertedCatToNumeric && w.globals.categoryLabels.length) { - x = w.globals.categoryLabels.indexOf(x) + 1; - } - - var catIndex = w.globals.labels.indexOf(x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - rX = parseFloat(xLabel.getAttribute('x')); - } - - return rX; - } - }]); - - return Helpers; - }(); - - var XAnnotations = /*#__PURE__*/function () { - function XAnnotations(annoCtx) { - _classCallCheck(this, XAnnotations); - - this.w = annoCtx.w; - this.annoCtx = annoCtx; - this.invertAxis = this.annoCtx.invertAxis; - } - - _createClass(XAnnotations, [{ - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(anno, parent, index) { - var w = this.w; - var min = this.invertAxis ? w.globals.minY : w.globals.minX; - var max = this.invertAxis ? w.globals.maxY : w.globals.maxX; - var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; - var x1 = (anno.x - min) / (range / w.globals.gridWidth); - - if (this.annoCtx.inversedReversedAxis) { - x1 = (max - anno.x) / (range / w.globals.gridWidth); - } - - var text = anno.label.text; - - if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.invertAxis && !w.globals.dataFormatXNumeric) { - x1 = this.annoCtx.helpers.getStringX(anno.x); - } - - var strokeDashArray = anno.strokeDashArray; - if (!Utils.isNumber(x1)) return; - - if (anno.x2 === null || typeof anno.x2 === 'undefined') { - var line = this.annoCtx.graphics.drawLine(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x1 + anno.offsetX, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray, //dashArray - anno.borderWidth); - parent.appendChild(line.node); - - if (anno.id) { - line.node.classList.add(anno.id); - } - } else { - var x2 = (anno.x2 - min) / (range / w.globals.gridWidth); - - if (this.annoCtx.inversedReversedAxis) { - x2 = (max - anno.x2) / (range / w.globals.gridWidth); - } - - if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.invertAxis && !w.globals.dataFormatXNumeric) { - x2 = this.annoCtx.helpers.getStringX(anno.x2); - } - - if (x2 < x1) { - var temp = x1; - x1 = x2; - x2 = temp; - } - - var rect = this.annoCtx.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - rect.node.classList.add('apexcharts-annotation-rect'); - rect.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - parent.appendChild(rect.node); - - if (anno.id) { - rect.node.classList.add(anno.id); - } - } - - var textY = anno.label.position === 'top' ? 4 : w.globals.gridHeight; - var textRects = this.annoCtx.graphics.getTextRects(text, parseFloat(anno.label.style.fontSize)); - var elText = this.annoCtx.graphics.drawText({ - x: x1 + anno.label.offsetX, - y: textY + anno.label.offsetY - (anno.label.orientation === 'vertical' ? anno.label.position === 'top' ? textRects.width / 2 - 12 : -textRects.width / 2 : 0), - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - fontWeight: anno.label.style.fontWeight, - foreColor: anno.label.style.color, - cssClass: "apexcharts-xaxis-annotation-label ".concat(anno.label.style.cssClass, " ").concat(anno.id ? anno.id : '') - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations - - this.annoCtx.helpers.setOrientations(anno, index); - } - }, { - key: "drawXAxisAnnotations", - value: function drawXAxisAnnotations() { - var _this = this; - - var w = this.w; - var elg = this.annoCtx.graphics.group({ - class: 'apexcharts-xaxis-annotations' - }); - w.config.annotations.xaxis.map(function (anno, index) { - _this.addXaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }]); - - return XAnnotations; - }(); - - /* - ** Util functions which are dependent on ApexCharts instance - */ - var CoreUtils = /*#__PURE__*/function () { - function CoreUtils(ctx) { - _classCallCheck(this, CoreUtils); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(CoreUtils, [{ - key: "getStackedSeriesTotals", - - /** - * @memberof CoreUtils - * returns the sum of all individual values in a multiple stacked series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [34,36,48,13] - **/ - value: function getStackedSeriesTotals() { - var w = this.w; - var total = []; - if (w.globals.series.length === 0) return total; - - for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) { - var t = 0; - - for (var j = 0; j < w.globals.series.length; j++) { - if (typeof w.globals.series[j][i] !== 'undefined') { - t += w.globals.series[j][i]; - } - } - - total.push(t); - } - - w.globals.stackedSeriesTotals = total; - return total; - } // get total of the all values inside all series - - }, { - key: "getSeriesTotalByIndex", - value: function getSeriesTotalByIndex() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (index === null) { - // non-plot chart types - pie / donut / circle - return this.w.config.series.reduce(function (acc, cur) { - return acc + cur; - }, 0); - } else { - // axis charts - supporting multiple series - return this.w.globals.series[index].reduce(function (acc, cur) { - return acc + cur; - }, 0); - } - } - }, { - key: "isSeriesNull", - value: function isSeriesNull() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var r = []; - - if (index === null) { - // non-plot chart types - pie / donut / circle - r = this.w.config.series.filter(function (d) { - return d !== null; - }); - } else { - // axis charts - supporting multiple series - r = this.w.config.series[index].data.filter(function (d) { - return d !== null; - }); - } - - return r.length === 0; - } - }, { - key: "seriesHaveSameValues", - value: function seriesHaveSameValues(index) { - return this.w.globals.series[index].every(function (val, i, arr) { - return val === arr[0]; - }); - } - }, { - key: "getCategoryLabels", - value: function getCategoryLabels(labels) { - var w = this.w; - var catLabels = labels.slice(); - - if (w.config.xaxis.convertedCatToNumeric) { - catLabels = labels.map(function (i) { - return w.config.xaxis.labels.formatter(i - w.globals.minX + 1); - }); - } - - return catLabels; - } // maxValsInArrayIndex is the index of series[] which has the largest number of items - - }, { - key: "getLargestSeries", - value: function getLargestSeries() { - var w = this.w; - w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) { - return a.length; - }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) { - return a.length; - }))); - } - }, { - key: "getLargestMarkerSize", - value: function getLargestMarkerSize() { - var w = this.w; - var size = 0; - w.globals.markers.size.forEach(function (m) { - size = Math.max(size, m); - }); - w.globals.markers.largestSize = size; - return size; - } - /** - * @memberof Core - * returns the sum of all values in a series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [120, 11] - **/ - - }, { - key: "getSeriesTotals", - value: function getSeriesTotals() { - var w = this.w; - w.globals.seriesTotals = w.globals.series.map(function (ser, index) { - var total = 0; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - total += ser[j]; - } - } else { - // for pie/donuts/gauges - total += ser; - } - - return total; - }); - } - }, { - key: "getSeriesTotalsXRange", - value: function getSeriesTotalsXRange(minX, maxX) { - var w = this.w; - var seriesTotalsXRange = w.globals.series.map(function (ser, index) { - var total = 0; - - for (var j = 0; j < ser.length; j++) { - if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) { - total += ser[j]; - } - } - - return total; - }); - return seriesTotalsXRange; - } - /** - * @memberof CoreUtils - * returns the percentage value of all individual values which can be used in a 100% stacked series - * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]] - * @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]] - **/ - - }, { - key: "getPercentSeries", - value: function getPercentSeries() { - var w = this.w; - w.globals.seriesPercent = w.globals.series.map(function (ser, index) { - var seriesPercent = []; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - var total = w.globals.stackedSeriesTotals[j]; - var percent = 0; - - if (total) { - percent = 100 * ser[j] / total; - } - - seriesPercent.push(percent); - } - } else { - var _total = w.globals.seriesTotals.reduce(function (acc, val) { - return acc + val; - }, 0); - - var _percent = 100 * ser / _total; - - seriesPercent.push(_percent); - } - - return seriesPercent; - }); - } - }, { - key: "getCalculatedRatios", - value: function getCalculatedRatios() { - var gl = this.w.globals; - var yRatio = []; - var invertedYRatio = 0; - var xRatio = 0; - var initialXRatio = 0; - var invertedXRatio = 0; - var zRatio = 0; - var baseLineY = []; - var baseLineInvertedY = 0.1; - var baseLineX = 0; - gl.yRange = []; - - if (gl.isMultipleYAxis) { - for (var i = 0; i < gl.minYArr.length; i++) { - gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i])); - baseLineY.push(0); - } - } else { - gl.yRange.push(Math.abs(gl.minY - gl.maxY)); - } - - gl.xRange = Math.abs(gl.maxX - gl.minX); - gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis - - for (var _i = 0; _i < gl.yRange.length; _i++) { - yRatio.push(gl.yRange[_i] / gl.gridHeight); - } - - xRatio = gl.xRange / gl.gridWidth; - initialXRatio = Math.abs(gl.initialMaxX - gl.initialMinX) / gl.gridWidth; - invertedYRatio = gl.yRange / gl.gridWidth; - invertedXRatio = gl.xRange / gl.gridHeight; - zRatio = gl.zRange / gl.gridHeight * 16; - - if (!zRatio) { - zRatio = 1; - } - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - // Negative numbers present in series - gl.hasNegs = true; - } - - if (gl.isMultipleYAxis) { - baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; - } - } - - return { - yRatio: yRatio, - invertedYRatio: invertedYRatio, - zRatio: zRatio, - xRatio: xRatio, - initialXRatio: initialXRatio, - invertedXRatio: invertedXRatio, - baseLineInvertedY: baseLineInvertedY, - baseLineY: baseLineY, - baseLineX: baseLineX - }; - } - }, { - key: "getLogSeries", - value: function getLogSeries(series) { - var _this = this; - - var w = this.w; - w.globals.seriesLog = series.map(function (s, i) { - if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) { - return s.map(function (d) { - if (d === null) return null; - return _this.getLogVal(d, i); - }); - } else { - return s; - } - }); - return w.globals.invalidLogScale ? series : w.globals.seriesLog; - } - }, { - key: "getLogVal", - value: function getLogVal(d, yIndex) { - var w = this.w; - return (Math.log(d) - Math.log(w.globals.minYArr[yIndex])) / (Math.log(w.globals.maxYArr[yIndex]) - Math.log(w.globals.minYArr[yIndex])); - } - }, { - key: "getLogYRatios", - value: function getLogYRatios(yRatio) { - var _this2 = this; - - var w = this.w; - var gl = this.w.globals; - gl.yLogRatio = yRatio.slice(); - gl.logYRange = gl.yRange.map(function (yRange, i) { - if (w.config.yaxis[i] && _this2.w.config.yaxis[i].logarithmic) { - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - var range = 1; - gl.seriesLog.forEach(function (s, si) { - s.forEach(function (v) { - if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) { - maxY = Math.max(v, maxY); - minY = Math.min(v, minY); - } - }); - }); - range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]); - gl.yLogRatio[i] = range / gl.gridHeight; - return range; - } - }); - return gl.invalidLogScale ? yRatio.slice() : gl.yLogRatio; - } // Some config objects can be array - and we need to extend them correctly - - }], [{ - key: "checkComboSeries", - value: function checkComboSeries(series) { - var comboCharts = false; - var comboBarCount = 0; // if user specified a type in series too, turn on comboCharts flag - - if (series.length && typeof series[0].type !== 'undefined') { - comboCharts = true; - series.forEach(function (s) { - if (s.type === 'bar' || s.type === 'column' || s.type === 'candlestick') { - comboBarCount++; - } - }); - } - - return { - comboBarCount: comboBarCount, - comboCharts: comboCharts - }; - } - }, { - key: "extendArrayProps", - value: function extendArrayProps(configInstance, options, w) { - if (options.yaxis) { - options = configInstance.extendYAxis(options, w); - } - - if (options.annotations) { - if (options.annotations.yaxis) { - options = configInstance.extendYAxisAnnotations(options); - } - - if (options.annotations.xaxis) { - options = configInstance.extendXAxisAnnotations(options); - } - - if (options.annotations.points) { - options = configInstance.extendPointAnnotations(options); - } - } - - return options; - } - }]); - - return CoreUtils; - }(); - - var YAnnotations = /*#__PURE__*/function () { - function YAnnotations(annoCtx) { - _classCallCheck(this, YAnnotations); - - this.w = annoCtx.w; - this.annoCtx = annoCtx; - } - - _createClass(YAnnotations, [{ - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(anno, parent, index) { - var w = this.w; - var strokeDashArray = anno.strokeDashArray; - - var y1 = this._getY1Y2('y1', anno); - - var y2; - var text = anno.label.text; - - if (anno.y2 === null || typeof anno.y2 === 'undefined') { - var line = this.annoCtx.graphics.drawLine(0 + anno.offsetX, // x1 - y1 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray, // dashArray - anno.borderWidth); - parent.appendChild(line.node); - - if (anno.id) { - line.node.classList.add(anno.id); - } - } else { - y2 = this._getY1Y2('y2', anno); - - if (y2 > y1) { - var temp = y1; - y1 = y2; - y2 = temp; - } - - var rect = this.annoCtx.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - rect.node.classList.add('apexcharts-annotation-rect'); - rect.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - parent.appendChild(rect.node); - - if (anno.id) { - rect.node.classList.add(anno.id); - } - } - - var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; - var elText = this.annoCtx.graphics.drawText({ - x: textX + anno.label.offsetX, - y: (y2 || y1) + anno.label.offsetY - 3, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - fontWeight: anno.label.style.fontWeight, - foreColor: anno.label.style.color, - cssClass: "apexcharts-yaxis-annotation-label ".concat(anno.label.style.cssClass, " ").concat(anno.id ? anno.id : '') - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - } - }, { - key: "_getY1Y2", - value: function _getY1Y2(type, anno) { - var y = type === 'y1' ? anno.y : anno.y2; - var yP; - var w = this.w; - - if (this.annoCtx.invertAxis) { - var catIndex = w.globals.labels.indexOf(y); - - if (w.config.xaxis.convertedCatToNumeric) { - catIndex = w.globals.categoryLabels.indexOf(y); - } - - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - yP = parseFloat(xLabel.getAttribute('y')); - } - } else { - var yPos; - - if (w.config.yaxis[anno.yAxisIndex].logarithmic) { - var coreUtils = new CoreUtils(this.annoCtx.ctx); - y = coreUtils.getLogVal(y, anno.yAxisIndex); - yPos = y / w.globals.yLogRatio[anno.yAxisIndex]; - } else { - yPos = (y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - - yP = w.globals.gridHeight - yPos; - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - yP = yPos; - } - } - - return yP; - } - }, { - key: "drawYAxisAnnotations", - value: function drawYAxisAnnotations() { - var _this = this; - - var w = this.w; - var elg = this.annoCtx.graphics.group({ - class: 'apexcharts-yaxis-annotations' - }); - w.config.annotations.yaxis.map(function (anno, index) { - _this.addYaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }]); - - return YAnnotations; - }(); - - var PointAnnotations = /*#__PURE__*/function () { - function PointAnnotations(annoCtx) { - _classCallCheck(this, PointAnnotations); - - this.w = annoCtx.w; - this.annoCtx = annoCtx; - } - - _createClass(PointAnnotations, [{ - key: "addPointAnnotation", - value: function addPointAnnotation(anno, parent, index) { - var w = this.w; - var x = 0; - var y = 0; - var pointY = 0; - - if (this.annoCtx.invertAxis) { - console.warn('Point annotation is not supported in horizontal bar charts.'); - } - - var annoY = parseFloat(anno.y); - - if (typeof anno.x === 'string') { - var catIndex = w.globals.labels.indexOf(anno.x); - - if (w.config.xaxis.convertedCatToNumeric) { - catIndex = w.globals.categoryLabels.indexOf(anno.x); - } - - x = this.annoCtx.helpers.getStringX(anno.x); - - if (anno.y === null) { - annoY = w.globals.series[anno.seriesIndex][catIndex]; - } - } else { - x = (anno.x - w.globals.minX) / (w.globals.xRange / w.globals.gridWidth); - } - - var yPos; - - if (w.config.yaxis[anno.yAxisIndex].logarithmic) { - var coreUtils = new CoreUtils(this.annoCtx.ctx); - annoY = coreUtils.getLogVal(annoY, anno.yAxisIndex); - yPos = annoY / w.globals.yLogRatio[anno.yAxisIndex]; - } else { - yPos = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - - y = w.globals.gridHeight - yPos - parseFloat(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - yPos; - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = yPos + parseFloat(anno.label.style.fontSize) + anno.marker.size; - pointY = yPos; - } - - if (!Utils.isNumber(x)) return; - var optsPoints = { - pSize: anno.marker.size, - pWidth: anno.marker.strokeWidth, - pointFillColor: anno.marker.fillColor, - pointStrokeColor: anno.marker.strokeColor, - shape: anno.marker.shape, - pRadius: anno.marker.radius, - class: "apexcharts-point-annotation-marker ".concat(anno.marker.cssClass, " ").concat(anno.id ? anno.id : '') - }; - var point = this.annoCtx.graphics.drawMarker(x + anno.marker.offsetX, pointY + anno.marker.offsetY, optsPoints); - parent.appendChild(point.node); - var text = anno.label.text ? anno.label.text : ''; - var elText = this.annoCtx.graphics.drawText({ - x: x + anno.label.offsetX, - y: y + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - fontWeight: anno.label.style.fontWeight, - foreColor: anno.label.style.color, - cssClass: "apexcharts-point-annotation-label ".concat(anno.label.style.cssClass, " ").concat(anno.id ? anno.id : '') - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); // TODO: deprecate this as we will use custom - - if (anno.customSVG.SVG) { - var g = this.annoCtx.graphics.group({ - class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass - }); - g.attr({ - transform: "translate(".concat(x + anno.customSVG.offsetX, ", ").concat(y + anno.customSVG.offsetY, ")") - }); - g.node.innerHTML = anno.customSVG.SVG; - parent.appendChild(g.node); - } - - if (anno.image.path) { - var imgWidth = anno.image.width ? anno.image.width : 20; - var imgHeight = anno.image.height ? anno.image.height : 20; - this.annoCtx.addImage({ - x: x + anno.image.offsetX - imgWidth / 2, - y: y + anno.image.offsetY - imgHeight / 2, - width: imgWidth, - height: imgHeight, - path: anno.image.path, - appendTo: '.apexcharts-point-annotations' - }); - } - } - }, { - key: "drawPointAnnotations", - value: function drawPointAnnotations() { - var _this = this; - - var w = this.w; - var elg = this.annoCtx.graphics.group({ - class: 'apexcharts-point-annotations' - }); - w.config.annotations.points.map(function (anno, index) { - _this.addPointAnnotation(anno, elg.node, index); - }); - return elg; - } - }]); - - return PointAnnotations; - }(); - - const name = "en"; - const options = { - months: [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - shortMonths: [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - days: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - shortDays: [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - toolbar: { - exportToSVG: "Download SVG", - exportToPNG: "Download PNG", - exportToCSV: "Download CSV", - menu: "Menu", - selection: "Selection", - selectionZoom: "Selection Zoom", - zoomIn: "Zoom In", - zoomOut: "Zoom Out", - pan: "Panning", - reset: "Reset Zoom" - } - }; - var en = { - name: name, - options: options - }; - - var Options = /*#__PURE__*/function () { - function Options() { - _classCallCheck(this, Options); - - this.yAxis = { - show: true, - showAlways: false, - showForNullSeries: true, - seriesName: undefined, - opposite: false, - reversed: false, - logarithmic: false, - tickAmount: undefined, - forceNiceScale: false, - max: undefined, - min: undefined, - floating: false, - decimalsInFloat: undefined, - labels: { - show: true, - minWidth: 0, - maxWidth: 160, - offsetX: 0, - offsetY: 0, - align: undefined, - rotate: 0, - padding: 20, - style: { - colors: [], - fontSize: '11px', - fontWeight: 400, - fontFamily: undefined, - cssClass: '' - }, - formatter: undefined - }, - axisBorder: { - show: false, - color: '#e0e0e0', - width: 1, - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: false, - color: '#e0e0e0', - width: 6, - offsetX: 0, - offsetY: 0 - }, - title: { - text: undefined, - rotate: 90, - offsetY: 0, - offsetX: 0, - style: { - color: undefined, - fontSize: '11px', - fontWeight: 900, - fontFamily: undefined, - cssClass: '' - } - }, - tooltip: { - enabled: false, - offsetX: 0 - }, - crosshairs: { - show: true, - position: 'front', - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 0 - } - } - }; - this.pointAnnotation = { - x: 0, - y: null, - yAxisIndex: 0, - seriesIndex: 0, - marker: { - size: 4, - fillColor: '#fff', - strokeWidth: 2, - strokeColor: '#333', - shape: 'circle', - offsetX: 0, - offsetY: 0, - radius: 2, - cssClass: '' - }, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - borderRadius: 2, - text: undefined, - textAnchor: 'middle', - offsetX: 0, - offsetY: 0, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - fontWeight: 400, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 2, - bottom: 2 - } - } - }, - customSVG: { - // this will be deprecated in the next major version as it is going to be replaced with a better alternative below - SVG: undefined, - cssClass: undefined, - offsetX: 0, - offsetY: 0 - }, - image: { - path: undefined, - width: 20, - height: 20, - offsetX: 0, - offsetY: 0 - } - }; - this.yAxisAnnotation = { - y: 0, - y2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - borderWidth: 1, - opacity: 0.3, - offsetX: 0, - offsetY: 0, - yAxisIndex: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - borderRadius: 2, - text: undefined, - textAnchor: 'end', - position: 'right', - offsetX: 0, - offsetY: -3, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - fontWeight: 400, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 2, - bottom: 2 - } - } - } - }; - this.xAxisAnnotation = { - x: 0, - x2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - borderWidth: 1, - opacity: 0.3, - offsetX: 0, - offsetY: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - borderRadius: 2, - text: undefined, - textAnchor: 'middle', - orientation: 'vertical', - position: 'top', - offsetX: 0, - offsetY: 0, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - fontWeight: 400, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 2, - bottom: 2 - } - } - } - }; - this.text = { - x: 0, - y: 0, - text: '', - textAnchor: 'start', - foreColor: undefined, - fontSize: '13px', - fontFamily: undefined, - fontWeight: 400, - appendTo: '.apexcharts-annotations', - backgroundColor: 'transparent', - borderColor: '#c2c2c2', - borderRadius: 0, - borderWidth: 0, - paddingLeft: 4, - paddingRight: 4, - paddingTop: 2, - paddingBottom: 2 - }; - this.shape = { - x: 0, - y: 0, - type: 'rect', - width: '100%', - // accepts percentage as well as fixed numbers - height: 50, - appendTo: '.apexcharts-annotations', - backgroundColor: '#fff', - opacity: 1, - borderWidth: 0, - borderRadius: 4, - borderColor: '#c2c2c2' - }; - } - - _createClass(Options, [{ - key: "init", - value: function init() { - return { - annotations: { - position: 'front', - yaxis: [this.yAxisAnnotation], - xaxis: [this.xAxisAnnotation], - points: [this.pointAnnotation], - texts: [], - images: [], - shapes: [] - }, - chart: { - animations: { - enabled: true, - easing: 'easeinout', - // linear, easeout, easein, easeinout, swing, bounce, elastic - speed: 800, - animateGradually: { - delay: 150, - enabled: true - }, - dynamicAnimation: { - enabled: true, - speed: 350 - } - }, - background: 'transparent', - locales: [en], - defaultLocale: 'en', - dropShadow: { - enabled: false, - enabledOnSeries: undefined, - top: 2, - left: 2, - blur: 4, - color: '#000', - opacity: 0.35 - }, - events: { - animationEnd: undefined, - beforeMount: undefined, - mounted: undefined, - updated: undefined, - click: undefined, - mouseMove: undefined, - legendClick: undefined, - markerClick: undefined, - selection: undefined, - dataPointSelection: undefined, - dataPointMouseEnter: undefined, - dataPointMouseLeave: undefined, - beforeZoom: undefined, - zoomed: undefined, - scrolled: undefined - }, - foreColor: '#373d3f', - fontFamily: 'Helvetica, Arial, sans-serif', - height: 'auto', - parentHeightOffset: 15, - redrawOnParentResize: true, - id: undefined, - group: undefined, - offsetX: 0, - offsetY: 0, - selection: { - enabled: false, - type: 'x', - // selectedPoints: undefined, // default datapoints that should be selected automatically - fill: { - color: '#24292e', - opacity: 0.1 - }, - stroke: { - width: 1, - color: '#24292e', - opacity: 0.4, - dashArray: 3 - }, - xaxis: { - min: undefined, - max: undefined - }, - yaxis: { - min: undefined, - max: undefined - } - }, - sparkline: { - enabled: false - }, - brush: { - enabled: false, - autoScaleYaxis: true, - target: undefined - }, - stacked: false, - stackType: 'normal', - toolbar: { - show: true, - offsetX: 0, - offsetY: 0, - tools: { - download: true, - selection: true, - zoom: true, - zoomin: true, - zoomout: true, - pan: true, - reset: true, - customIcons: [] - }, - autoSelected: 'zoom' // accepts -> zoom, pan, selection - - }, - type: 'line', - width: '100%', - zoom: { - enabled: true, - type: 'x', - autoScaleYaxis: false, - zoomedArea: { - fill: { - color: '#90CAF9', - opacity: 0.4 - }, - stroke: { - color: '#0D47A1', - opacity: 0.4, - width: 1 - } - } - } - }, - plotOptions: { - bar: { - horizontal: false, - columnWidth: '70%', - // should be in percent 0 - 100 - barHeight: '70%', - // should be in percent 0 - 100 - distributed: false, - startingShape: 'flat', - endingShape: 'flat', - rangeBarOverlap: true, - colors: { - ranges: [], - backgroundBarColors: [], - backgroundBarOpacity: 1, - backgroundBarRadius: 0 - }, - dataLabels: { - position: 'top', - // top, center, bottom - maxItems: 100, - hideOverflowingLabels: true, - orientation: 'horizontal' // TODO: provide stackedLabels for stacked charts which gives additions of values - - } - }, - bubble: { - minBubbleRadius: undefined, - maxBubbleRadius: undefined - }, - candlestick: { - colors: { - upward: '#00B746', - downward: '#EF403C' - }, - wick: { - useFillColor: true - } - }, - heatmap: { - radius: 2, - enableShades: true, - shadeIntensity: 0.5, - reverseNegativeShade: false, - distributed: false, - useFillColorAsStroke: false, - colorScale: { - inverse: false, - ranges: [], - min: undefined, - max: undefined - } - }, - radialBar: { - inverseOrder: false, - startAngle: 0, - endAngle: 360, - offsetX: 0, - offsetY: 0, - hollow: { - margin: 5, - size: '50%', - background: 'transparent', - image: undefined, - imageWidth: 150, - imageHeight: 150, - imageOffsetX: 0, - imageOffsetY: 0, - imageClipped: true, - position: 'front', - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - track: { - show: true, - startAngle: undefined, - endAngle: undefined, - background: '#f2f2f2', - strokeWidth: '97%', - opacity: 1, - margin: 5, - // margin is in pixels - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - dataLabels: { - show: true, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - fontWeight: 600, - color: undefined, - offsetY: 0, - formatter: function formatter(val) { - return val; - } - }, - value: { - show: true, - fontSize: '14px', - fontFamily: undefined, - fontWeight: 400, - color: undefined, - offsetY: 16, - formatter: function formatter(val) { - return val + '%'; - } - }, - total: { - show: false, - label: 'Total', - fontSize: '16px', - fontWeight: 600, - fontFamily: undefined, - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0) / w.globals.series.length + '%'; - } - } - } - }, - pie: { - customScale: 1, - offsetX: 0, - offsetY: 0, - expandOnClick: true, - dataLabels: { - // These are the percentage values which are displayed on slice - offset: 0, - // offset by which labels will move outside - minAngleToShowLabel: 10 - }, - donut: { - size: '65%', - background: 'transparent', - labels: { - // These are the inner labels appearing inside donut - show: false, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - fontWeight: 600, - color: undefined, - offsetY: -10, - formatter: function formatter(val) { - return val; - } - }, - value: { - show: true, - fontSize: '20px', - fontFamily: undefined, - fontWeight: 400, - color: undefined, - offsetY: 10, - formatter: function formatter(val) { - return val; - } - }, - total: { - show: false, - showAlways: false, - label: 'Total', - fontSize: '16px', - fontWeight: 400, - fontFamily: undefined, - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0); - } - } - } - } - }, - polarArea: { - rings: { - strokeWidth: 1, - strokeColor: '#e8e8e8' - } - }, - radar: { - size: undefined, - offsetX: 0, - offsetY: 0, - polygons: { - // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2 - strokeWidth: 1, - strokeColors: '#e8e8e8', - connectorColors: '#e8e8e8', - fill: { - colors: undefined - } - } - } - }, - colors: undefined, - dataLabels: { - enabled: true, - enabledOnSeries: undefined, - formatter: function formatter(val) { - return val !== null ? val : ''; - }, - textAnchor: 'middle', - distributed: false, - offsetX: 0, - offsetY: 0, - style: { - fontSize: '12px', - fontFamily: undefined, - fontWeight: 600, - colors: undefined - }, - background: { - enabled: true, - foreColor: '#fff', - borderRadius: 2, - padding: 4, - opacity: 0.9, - borderWidth: 1, - borderColor: '#fff', - dropShadow: { - enabled: false, - top: 1, - left: 1, - blur: 1, - color: '#000', - opacity: 0.45 - } - }, - dropShadow: { - enabled: false, - top: 1, - left: 1, - blur: 1, - color: '#000', - opacity: 0.45 - } - }, - fill: { - type: 'solid', - colors: undefined, - // array of colors - opacity: 0.85, - gradient: { - shade: 'dark', - type: 'horizontal', - shadeIntensity: 0.5, - gradientToColors: undefined, - inverseColors: true, - opacityFrom: 1, - opacityTo: 1, - stops: [0, 50, 100], - colorStops: [] - }, - image: { - src: [], - width: undefined, - // optional - height: undefined // optional - - }, - pattern: { - style: 'squares', - // String | Array of Strings - width: 6, - height: 6, - strokeWidth: 2 - } - }, - grid: { - show: true, - borderColor: '#e0e0e0', - strokeDashArray: 0, - position: 'back', - xaxis: { - lines: { - show: false - } - }, - yaxis: { - lines: { - show: true - } - }, - row: { - colors: undefined, - // takes as array which will be repeated on rows - opacity: 0.5 - }, - column: { - colors: undefined, - // takes an array which will be repeated on columns - opacity: 0.5 - }, - padding: { - top: 0, - right: 10, - bottom: 0, - left: 12 - } - }, - labels: [], - legend: { - show: true, - showForSingleSeries: false, - showForNullSeries: true, - showForZeroSeries: true, - floating: false, - position: 'bottom', - // whether to position legends in 1 of 4 - // direction - top, bottom, left, right - horizontalAlign: 'center', - // when position top/bottom, you can specify whether to align legends left, right or center - inverseOrder: false, - fontSize: '12px', - fontFamily: undefined, - fontWeight: 400, - width: undefined, - height: undefined, - formatter: undefined, - tooltipHoverFormatter: undefined, - offsetX: -20, - offsetY: 0, - labels: { - colors: undefined, - useSeriesColors: false - }, - markers: { - width: 12, - height: 12, - strokeWidth: 0, - fillColors: undefined, - strokeColor: '#fff', - radius: 12, - customHTML: undefined, - offsetX: 0, - offsetY: 0, - onClick: undefined - }, - itemMargin: { - horizontal: 5, - vertical: 0 - }, - onItemClick: { - toggleDataSeries: true - }, - onItemHover: { - highlightDataSeries: true - } - }, - markers: { - discrete: [], - size: 0, - colors: undefined, - //strokeColor: '#fff', // TODO: deprecate in major version 4.0 - strokeColors: '#fff', - strokeWidth: 2, - strokeOpacity: 0.9, - strokeDashArray: 0, - fillOpacity: 1, - shape: 'circle', - radius: 2, - offsetX: 0, - offsetY: 0, - onClick: undefined, - onDblClick: undefined, - showNullDataPoints: true, - hover: { - size: undefined, - sizeOffset: 3 - } - }, - noData: { - text: undefined, - align: 'center', - verticalAlign: 'middle', - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '14px', - fontFamily: undefined - } - }, - responsive: [], - // breakpoints should follow ascending order 400, then 700, then 1000 - series: undefined, - states: { - normal: { - filter: { - type: 'none', - value: 0 - } - }, - hover: { - filter: { - type: 'lighten', - value: 0.15 - } - }, - active: { - allowMultipleDataPointsSelection: false, - filter: { - type: 'darken', - value: 0.65 - } - } - }, - title: { - text: undefined, - align: 'left', - margin: 5, - offsetX: 0, - offsetY: 0, - floating: false, - style: { - fontSize: '14px', - fontWeight: 900, - fontFamily: undefined, - color: undefined - } - }, - subtitle: { - text: undefined, - align: 'left', - margin: 5, - offsetX: 0, - offsetY: 30, - floating: false, - style: { - fontSize: '12px', - fontWeight: 400, - fontFamily: undefined, - color: undefined - } - }, - stroke: { - show: true, - curve: 'smooth', - // "smooth" / "straight" / "stepline" - lineCap: 'butt', - // round, butt , square - width: 2, - colors: undefined, - // array of colors - dashArray: 0 // single value or array of values - - }, - tooltip: { - enabled: true, - enabledOnSeries: undefined, - shared: true, - followCursor: false, - // when disabled, the tooltip will show on top of the series instead of mouse position - intersect: false, - // when enabled, tooltip will only show when user directly hovers over point - inverseOrder: false, - custom: undefined, - fillSeriesColor: false, - theme: 'light', - style: { - fontSize: '12px', - fontFamily: undefined - }, - onDatasetHover: { - highlightDataSeries: false - }, - x: { - // x value - show: true, - format: 'dd MMM', - // dd/MM, dd MMM yy, dd MMM yyyy - formatter: undefined // a custom user supplied formatter function - - }, - y: { - formatter: undefined, - title: { - formatter: function formatter(seriesName) { - return seriesName; - } - } - }, - z: { - formatter: undefined, - title: 'Size: ' - }, - marker: { - show: true, - fillColors: undefined - }, - items: { - display: 'flex' - }, - fixed: { - enabled: false, - position: 'topRight', - // topRight, topLeft, bottomRight, bottomLeft - offsetX: 0, - offsetY: 0 - } - }, - xaxis: { - type: 'category', - categories: [], - convertedCatToNumeric: false, - // internal property which should not be altered outside - sorted: false, - offsetX: 0, - offsetY: 0, - labels: { - show: true, - rotate: -45, - rotateAlways: false, - hideOverlappingLabels: true, - trim: false, - minHeight: undefined, - maxHeight: 120, - showDuplicates: true, - style: { - colors: [], - fontSize: '12px', - fontWeight: 400, - fontFamily: undefined, - cssClass: '' - }, - offsetX: 0, - offsetY: 0, - format: undefined, - formatter: undefined, - // custom formatter function which will override format - datetimeUTC: true, - datetimeFormatter: { - year: 'yyyy', - month: "MMM 'yy", - day: 'dd MMM', - hour: 'HH:mm', - minute: 'HH:mm:ss' - } - }, - axisBorder: { - show: true, - color: '#e0e0e0', - width: '100%', - height: 1, - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: true, - color: '#e0e0e0', - height: 6, - offsetX: 0, - offsetY: 0 - }, - tickAmount: undefined, - tickPlacement: 'on', - min: undefined, - max: undefined, - range: undefined, - floating: false, - position: 'bottom', - title: { - text: undefined, - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '12px', - fontWeight: 900, - fontFamily: undefined, - cssClass: '' - } - }, - crosshairs: { - show: true, - width: 1, - // tickWidth/barWidth or an integer - position: 'back', - opacity: 0.9, - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 3 - }, - fill: { - type: 'solid', - // solid, gradient - color: '#B1B9C4', - gradient: { - colorFrom: '#D8E3F0', - colorTo: '#BED1E6', - stops: [0, 100], - opacityFrom: 0.4, - opacityTo: 0.5 - } - }, - dropShadow: { - enabled: false, - left: 0, - top: 0, - blur: 1, - opacity: 0.4 - } - }, - tooltip: { - enabled: true, - offsetY: 0, - formatter: undefined, - style: { - fontSize: '12px', - fontFamily: undefined - } - } - }, - yaxis: this.yAxis, - theme: { - mode: 'light', - palette: 'palette1', - // If defined, it will overwrite globals.colors variable - monochrome: { - // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected) - enabled: false, - color: '#008FFB', - shadeTo: 'light', - shadeIntensity: 0.65 - } - } - }; - } - }]); - - return Options; - }(); - - /** - * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis. - * - * @module Annotations - **/ - - var Annotations = /*#__PURE__*/function () { - function Annotations(ctx) { - _classCallCheck(this, Annotations); - - this.ctx = ctx; - this.w = ctx.w; - this.graphics = new Graphics(this.ctx); - - if (this.w.globals.isBarHorizontal) { - this.invertAxis = true; - } - - this.helpers = new Helpers(this); - this.xAxisAnnotations = new XAnnotations(this); - this.yAxisAnnotations = new YAnnotations(this); - this.pointsAnnotations = new PointAnnotations(this); - - if (this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed) { - this.inversedReversedAxis = true; - } - - this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints; - } - - _createClass(Annotations, [{ - key: "drawAxesAnnotations", - value: function drawAxesAnnotations() { - var w = this.w; - - if (w.globals.axisCharts) { - var yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations(); - var xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations(); - var pointAnnotations = this.pointsAnnotations.drawPointAnnotations(); - var initialAnim = w.config.chart.animations.enabled; - var annoArray = [yAnnotations, xAnnotations, pointAnnotations]; - var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node]; - - for (var i = 0; i < 3; i++) { - w.globals.dom.elGraphical.add(annoArray[i]); - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - // fixes apexcharts/apexcharts.js#685 - if (w.config.chart.type !== 'scatter' && w.config.chart.type !== 'bubble' && w.globals.dataPoints > 1) { - annoElArray[i].classList.add('apexcharts-element-hidden'); - } - } - - w.globals.delayedElements.push({ - el: annoElArray[i], - index: 0 - }); - } // background sizes needs to be calculated after text is drawn, so calling them last - - - this.helpers.annotationsBackground(); - } - } - }, { - key: "drawShapeAnnos", - value: function drawShapeAnnos() { - var _this = this; - - var w = this.w; - w.config.annotations.shapes.map(function (s, index) { - _this.addShape(s, index); - }); - } - }, { - key: "drawImageAnnos", - value: function drawImageAnnos() { - var _this2 = this; - - var w = this.w; - w.config.annotations.images.map(function (s, index) { - _this2.addImage(s, index); - }); - } - }, { - key: "drawTextAnnos", - value: function drawTextAnnos() { - var _this3 = this; - - var w = this.w; - w.config.annotations.texts.map(function (t, index) { - _this3.addText(t, index); - }); - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(anno, parent, index) { - this.xAxisAnnotations.addXaxisAnnotation(anno, parent, index); - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(anno, parent, index) { - this.yAxisAnnotations.addYaxisAnnotation(anno, parent, index); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(anno, parent, index) { - this.pointsAnnotations.addPointAnnotation(anno, parent, index); - } - }, { - key: "addText", - value: function addText(params, index) { - var x = params.x, - y = params.y, - text = params.text, - textAnchor = params.textAnchor, - foreColor = params.foreColor, - fontSize = params.fontSize, - fontFamily = params.fontFamily, - fontWeight = params.fontWeight, - cssClass = params.cssClass, - backgroundColor = params.backgroundColor, - borderWidth = params.borderWidth, - strokeDashArray = params.strokeDashArray, - borderRadius = params.borderRadius, - borderColor = params.borderColor, - _params$appendTo = params.appendTo, - appendTo = _params$appendTo === void 0 ? '.apexcharts-annotations' : _params$appendTo, - _params$paddingLeft = params.paddingLeft, - paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft, - _params$paddingRight = params.paddingRight, - paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight, - _params$paddingBottom = params.paddingBottom, - paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom, - _params$paddingTop = params.paddingTop, - paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop; - var w = this.w; - var elText = this.graphics.drawText({ - x: x, - y: y, - text: text, - textAnchor: textAnchor || 'start', - fontSize: fontSize || '12px', - fontWeight: fontWeight || 'regular', - fontFamily: fontFamily || w.config.chart.fontFamily, - foreColor: foreColor || w.config.chart.foreColor, - cssClass: 'apexcharts-text ' + cssClass ? cssClass : '' - }); - var parent = w.globals.dom.baseEl.querySelector(appendTo); - - if (parent) { - parent.appendChild(elText.node); - } - - var textRect = elText.bbox(); - - if (params.draggable) { - this.helpers.makeAnnotationDraggable(elText, 'texts', index); - } - - if (text) { - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, borderRadius, backgroundColor ? backgroundColor : 'transparent', 1, borderWidth, borderColor, strokeDashArray); - parent.insertBefore(elRect.node, elText.node); - } - } - }, { - key: "addShape", - value: function addShape(params, index) { - var opts = { - type: params.type, - x: params.x || 0, - y: params.y || 0, - width: params.width || '100%', - height: params.height || 50, - circleRadius: params.radius || 25, - backgroundColor: params.backgroundColor || '#fff', - opacity: params.opacity || 1, - borderWidth: params.borderWidth || 0, - borderRadius: params.borderRadius || 4, - borderColor: params.borderColor || '#c2c2c2', - appendTo: params.appendTo || '.apexcharts-annotations' - }; - var w = this.w; - - if (String(opts.width).indexOf('%') > -1) { - opts.width = parseInt(opts.width, 10) * parseInt(w.globals.svgWidth, 10) / 100; - } - - var elShape = null; - - if (opts.type === 'circle') { - elShape = this.graphics.drawCircle(opts.circleRadius, { - fill: opts.backgroundColor, - stroke: opts.borderColor, - 'stroke-width': opts.borderWidth, - opacity: opts.opacity, - cx: opts.x, - cy: opts.y - }); - } else { - elShape = this.graphics.drawRect(opts.x, opts.y, opts.width, opts.height, opts.borderRadius, opts.backgroundColor, opts.opacity, opts.borderWidth, opts.borderColor); - } - - var parent = w.globals.dom.baseEl.querySelector(opts.appendTo); - - if (parent) { - parent.appendChild(elShape.node); - } - - if (params.draggable) { - this.helpers.makeAnnotationDraggable(elShape, 'shapes', index); - elShape.node.classList.add('apexcharts-resizable-element'); - } - } - }, { - key: "addImage", - value: function addImage(params, index) { - var w = this.w; - var path = params.path, - _params$x = params.x, - x = _params$x === void 0 ? 0 : _params$x, - _params$y = params.y, - y = _params$y === void 0 ? 0 : _params$y, - _params$width = params.width, - width = _params$width === void 0 ? 20 : _params$width, - _params$height = params.height, - height = _params$height === void 0 ? 20 : _params$height, - _params$appendTo2 = params.appendTo, - appendTo = _params$appendTo2 === void 0 ? '.apexcharts-annotations' : _params$appendTo2; - var img = w.globals.dom.Paper.image(path); - img.size(width, height).move(x, y); - var parent = w.globals.dom.baseEl.querySelector(appendTo); - - if (parent) { - parent.appendChild(img.node); - } - - if (params.draggable) { - this.helpers.makeAnnotationDraggable(img, 'images', index); - img.node.classList.add('apexcharts-resizable-element'); - } - } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method - - }, { - key: "addXaxisAnnotationExternal", - value: function addXaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'xaxis', - contextMethod: context.addXaxisAnnotation - }); - return context; - } - }, { - key: "addYaxisAnnotationExternal", - value: function addYaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'yaxis', - contextMethod: context.addYaxisAnnotation - }); - return context; - } - }, { - key: "addPointAnnotationExternal", - value: function addPointAnnotationExternal(params, pushToMemory, context) { - if (typeof this.invertAxis === 'undefined') { - this.invertAxis = context.w.globals.isBarHorizontal; - } - - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'point', - contextMethod: context.addPointAnnotation - }); - return context; - } - }, { - key: "addAnnotationExternal", - value: function addAnnotationExternal(_ref) { - var params = _ref.params, - pushToMemory = _ref.pushToMemory, - context = _ref.context, - type = _ref.type, - contextMethod = _ref.contextMethod; - var me = context; - var w = me.w; - var parent = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations")); - var index = parent.childNodes.length + 1; - var options = new Options(); - var axesAnno = Object.assign({}, type === 'xaxis' ? options.xAxisAnnotation : type === 'yaxis' ? options.yAxisAnnotation : options.pointAnnotation); - var anno = Utils.extend(axesAnno, params); - - switch (type) { - case 'xaxis': - this.addXaxisAnnotation(anno, parent, index); - break; - - case 'yaxis': - this.addYaxisAnnotation(anno, parent, index); - break; - - case 'point': - this.addPointAnnotation(anno, parent, index); - break; - } // add background - - - var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); - var elRect = this.helpers.addBackgroundToAnno(axesAnnoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, axesAnnoLabel); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - id: anno.id ? anno.id : Utils.randomId(), - method: contextMethod, - label: 'addAnnotation', - params: params - }); - } - - return context; - } - }, { - key: "clearAnnotations", - value: function clearAnnotations(ctx) { - var w = ctx.w; - var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); // annotations added externally should be cleared out too - - w.globals.memory.methodsToExec.map(function (m, i) { - if (m.label === 'addText' || m.label === 'addAnnotation') { - w.globals.memory.methodsToExec.splice(i, 1); - } - }); - annos = Utils.listToArray(annos); // delete the DOM elements - - Array.prototype.forEach.call(annos, function (a) { - while (a.firstChild) { - a.removeChild(a.firstChild); - } - }); - } - }, { - key: "removeAnnotation", - value: function removeAnnotation(ctx, id) { - var w = ctx.w; - var annos = w.globals.dom.baseEl.querySelectorAll(".".concat(id)); - - if (annos) { - w.globals.memory.methodsToExec.map(function (m, i) { - if (m.id === id) { - w.globals.memory.methodsToExec.splice(i, 1); - } - }); - Array.prototype.forEach.call(annos, function (a) { - a.parentElement.removeChild(a); - }); - } - } - }]); - - return Annotations; - }(); - - /** - * ApexCharts Fill Class for setting fill options of the paths. - * - * @module Fill - **/ - - var Fill = /*#__PURE__*/function () { - function Fill(ctx) { - _classCallCheck(this, Fill); - - this.ctx = ctx; - this.w = ctx.w; - this.opts = null; - this.seriesIndex = 0; - } - - _createClass(Fill, [{ - key: "clippedImgArea", - value: function clippedImgArea(params) { - var w = this.w; - var cnf = w.config; - var svgW = parseInt(w.globals.gridWidth, 10); - var svgH = parseInt(w.globals.gridHeight, 10); - var size = svgW > svgH ? svgW : svgH; - var fillImg = params.image; - var imgWidth = 0; - var imgHeight = 0; - - if (typeof params.width === 'undefined' && typeof params.height === 'undefined') { - if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) { - imgWidth = cnf.fill.image.width + 1; - imgHeight = cnf.fill.image.height; - } else { - imgWidth = size + 1; - imgHeight = size; - } - } else { - imgWidth = params.width; - imgHeight = params.height; - } - - var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern'); - Graphics.setAttrs(elPattern, { - id: params.patternID, - patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - var elImage = document.createElementNS(w.globals.SVGNS, 'image'); - elPattern.appendChild(elImage); - elImage.setAttributeNS(window.SVG.xlink, 'href', fillImg); - Graphics.setAttrs(elImage, { - x: 0, - y: 0, - preserveAspectRatio: 'none', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - elImage.style.opacity = params.opacity; - w.globals.dom.elDefs.node.appendChild(elPattern); - } - }, { - key: "getSeriesIndex", - value: function getSeriesIndex(opts) { - var w = this.w; - - if ((w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap') { - this.seriesIndex = opts.seriesNumber; - } else { - this.seriesIndex = opts.seriesNumber % w.globals.series.length; - } - - return this.seriesIndex; - } - }, { - key: "fillPath", - value: function fillPath(opts) { - var w = this.w; - this.opts = opts; - var cnf = this.w.config; - var pathFill; - var patternFill, gradientFill; - this.seriesIndex = this.getSeriesIndex(opts); - var fillColors = this.getFillColors(); - var fillColor = fillColors[this.seriesIndex]; - - if (typeof fillColor === 'function') { - fillColor = fillColor({ - seriesIndex: this.seriesIndex, - dataPointIndex: opts.dataPointIndex, - value: opts.value, - w: w - }); - } - - var fillType = this.getFillType(this.seriesIndex); - var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; - var defaultColor = fillColor; - - if (opts.color) { - fillColor = opts.color; - } - - if (fillColor.indexOf('rgb') === -1) { - if (fillColor.length < 9) { - // if the hex contains alpha and is of 9 digit, skip the opacity - defaultColor = Utils.hexToRgba(fillColor, fillOpacity); - } - } else { - if (fillColor.indexOf('rgba') > -1) { - fillOpacity = Utils.getOpacityFromRGBA(fillColor); - } - } - - if (opts.opacity) fillOpacity = opts.opacity; - - if (fillType === 'pattern') { - patternFill = this.handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor); - } - - if (fillType === 'gradient') { - gradientFill = this.handleGradientFill(fillColor, fillOpacity, this.seriesIndex); - } - - if (fillType === 'image') { - var imgSrc = cnf.fill.image.src; - var patternID = opts.patternID ? opts.patternID : ''; - this.clippedImgArea({ - opacity: fillOpacity, - image: Array.isArray(imgSrc) ? opts.seriesNumber < imgSrc.length ? imgSrc[opts.seriesNumber] : imgSrc[0] : imgSrc, - width: opts.width ? opts.width : undefined, - height: opts.height ? opts.height : undefined, - patternUnits: opts.patternUnits, - patternID: "pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1).concat(patternID) - }); - pathFill = "url(#pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1).concat(patternID, ")"); - } else if (fillType === 'gradient') { - pathFill = gradientFill; - } else if (fillType === 'pattern') { - pathFill = patternFill; - } else { - pathFill = defaultColor; - } // override pattern/gradient if opts.solid is true - - - if (opts.solid) { - pathFill = defaultColor; - } - - return pathFill; - } - }, { - key: "getFillType", - value: function getFillType(seriesIndex) { - var w = this.w; - - if (Array.isArray(w.config.fill.type)) { - return w.config.fill.type[seriesIndex]; - } else { - return w.config.fill.type; - } - } - }, { - key: "getFillColors", - value: function getFillColors() { - var w = this.w; - var cnf = w.config; - var opts = this.opts; - var fillColors = []; - - if (w.globals.comboCharts) { - if (w.config.series[this.seriesIndex].type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } else { - if (cnf.chart.type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } // colors passed in arguments - - - if (typeof opts.fillColors !== 'undefined') { - fillColors = []; - - if (opts.fillColors instanceof Array) { - fillColors = opts.fillColors.slice(); - } else { - fillColors.push(opts.fillColors); - } - } - - return fillColors; - } - }, { - key: "handlePatternFill", - value: function handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var patternStrokeWidth = cnf.fill.pattern.strokeWidth === undefined ? Array.isArray(cnf.stroke.width) ? cnf.stroke.width[this.seriesIndex] : cnf.stroke.width : Array.isArray(cnf.fill.pattern.strokeWidth) ? cnf.fill.pattern.strokeWidth[this.seriesIndex] : cnf.fill.pattern.strokeWidth; - var patternLineColor = fillColor; - - if (cnf.fill.pattern.style instanceof Array) { - if (typeof cnf.fill.pattern.style[opts.seriesNumber] !== 'undefined') { - var pf = graphics.drawPattern(cnf.fill.pattern.style[opts.seriesNumber], cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - patternFill = pf; - } else { - patternFill = defaultColor; - } - } else { - patternFill = graphics.drawPattern(cnf.fill.pattern.style, cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - } - - return patternFill; - } - }, { - key: "handleGradientFill", - value: function handleGradientFill(fillColor, fillOpacity, i) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var utils = new Utils(); - var type = cnf.fill.gradient.type; - var gradientFrom = fillColor; - var gradientTo; - var opacityFrom = cnf.fill.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityFrom) ? cnf.fill.gradient.opacityFrom[i] : cnf.fill.gradient.opacityFrom; - - if (gradientFrom.indexOf('rgba') > -1) { - opacityFrom = Utils.getOpacityFromRGBA(gradientFrom); - } - - var opacityTo = cnf.fill.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityTo) ? cnf.fill.gradient.opacityTo[i] : cnf.fill.gradient.opacityTo; - - if (cnf.fill.gradient.gradientToColors === undefined || cnf.fill.gradient.gradientToColors.length === 0) { - if (cnf.fill.gradient.shade === 'dark') { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity) * -1, fillColor.indexOf('rgb') > -1 ? Utils.rgb2hex(fillColor) : fillColor); - } else { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity), fillColor.indexOf('rgb') > -1 ? Utils.rgb2hex(fillColor) : fillColor); - } - } else { - var gToColor = cnf.fill.gradient.gradientToColors[opts.seriesNumber]; - gradientTo = gToColor; - - if (gToColor.indexOf('rgba') > -1) { - opacityTo = Utils.getOpacityFromRGBA(gToColor); - } - } - - if (cnf.fill.gradient.inverseColors) { - var t = gradientFrom; - gradientFrom = gradientTo; - gradientTo = t; - } - - if (gradientFrom.indexOf('rgb') > -1) { - gradientFrom = Utils.rgb2hex(gradientFrom); - } - - if (gradientTo.indexOf('rgb') > -1) { - gradientTo = Utils.rgb2hex(gradientTo); - } - - return graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, cnf.fill.gradient.stops, cnf.fill.gradient.colorStops, i); - } - }]); - - return Fill; - }(); - - /** - * ApexCharts Markers Class for drawing points on y values in axes charts. - * - * @module Markers - **/ - - var Markers = /*#__PURE__*/function () { - function Markers(ctx, opts) { - _classCallCheck(this, Markers); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Markers, [{ - key: "setGlobalMarkerSize", - value: function setGlobalMarkerSize() { - var w = this.w; - w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size]; - - if (w.globals.markers.size.length > 0) { - if (w.globals.markers.size.length < w.globals.series.length + 1) { - for (var i = 0; i <= w.globals.series.length; i++) { - if (typeof w.globals.markers.size[i] === 'undefined') { - w.globals.markers.size.push(w.globals.markers.size[0]); - } - } - } - } else { - w.globals.markers.size = w.config.series.map(function (s) { - return w.config.markers.size; - }); - } - } - }, { - key: "plotChartMarkers", - value: function plotChartMarkers(pointsPos, seriesIndex, j, pSize) { - var alwaysDrawMarker = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - var w = this.w; - var i = seriesIndex; - var p = pointsPos; - var elPointsWrap = null; - var graphics = new Graphics(this.ctx); - var point; - - if (w.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker) { - elPointsWrap = graphics.group({ - class: alwaysDrawMarker ? '' : 'apexcharts-series-markers' - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - } - - if (p.x instanceof Array) { - for (var q = 0; q < p.x.length; q++) { - var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it - - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var PointClasses = 'apexcharts-marker'; - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0; - - if (shouldMarkerDraw || alwaysDrawMarker) { - if (Utils.isNumber(p.y[q])) { - PointClasses += " w".concat(Utils.randomId()); - } else { - PointClasses = 'apexcharts-nullpoint'; - } - - var opts = this.getMarkerConfig(PointClasses, seriesIndex, dataPointIndex); - - if (w.config.series[i].data[j]) { - if (w.config.series[i].data[j].fillColor) { - opts.pointFillColor = w.config.series[i].data[j].fillColor; - } - - if (w.config.series[i].data[j].strokeColor) { - opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; - } - } - - if (pSize) { - opts.pSize = pSize; - } - - point = graphics.drawMarker(p.x[q], p.y[q], opts); - point.attr('rel', dataPointIndex); - point.attr('j', dataPointIndex); - point.attr('index', seriesIndex); - point.node.setAttribute('default-marker-size', opts.pSize); - var filters = new Filters(this.ctx); - filters.setSelectionFilter(point, seriesIndex, dataPointIndex); - this.addEvents(point); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - } else { - // dynamic array creation - multidimensional - if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = []; - w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]); - } - } - } - - return elPointsWrap; - } - }, { - key: "getMarkerConfig", - value: function getMarkerConfig(cssClass, seriesIndex) { - var dataPointIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var pStyle = this.getMarkerStyle(seriesIndex); - var pSize = w.globals.markers.size[seriesIndex]; - var m = w.config.markers; // discrete markers is an option where user can specify a particular marker with different size and color - - if (dataPointIndex !== null && m.discrete.length) { - m.discrete.map(function (marker) { - if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) { - pStyle.pointStrokeColor = marker.strokeColor; - pStyle.pointFillColor = marker.fillColor; - pSize = marker.size; - } - }); - } - - return { - pSize: pSize, - pRadius: m.radius, - pWidth: m.strokeWidth instanceof Array ? m.strokeWidth[seriesIndex] : m.strokeWidth, - pointStrokeColor: pStyle.pointStrokeColor, - pointFillColor: pStyle.pointFillColor, - shape: m.shape instanceof Array ? m.shape[seriesIndex] : m.shape, - class: cssClass, - pointStrokeOpacity: m.strokeOpacity instanceof Array ? m.strokeOpacity[seriesIndex] : m.strokeOpacity, - pointStrokeDashArray: m.strokeDashArray instanceof Array ? m.strokeDashArray[seriesIndex] : m.strokeDashArray, - pointFillOpacity: m.fillOpacity instanceof Array ? m.fillOpacity[seriesIndex] : m.fillOpacity, - seriesIndex: seriesIndex - }; - } - }, { - key: "addEvents", - value: function addEvents(circle) { - var w = this.w; - var graphics = new Graphics(this.ctx); - circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle)); - circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle)); - circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle)); - circle.node.addEventListener('click', w.config.markers.onClick); - circle.node.addEventListener('dblclick', w.config.markers.onDblClick); - circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), { - passive: true - }); - } - }, { - key: "getMarkerStyle", - value: function getMarkerStyle(seriesIndex) { - var w = this.w; - var colors = w.globals.markers.colors; - var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors; - var pointStrokeColor = strokeColors instanceof Array ? strokeColors[seriesIndex] : strokeColors; - var pointFillColor = colors instanceof Array ? colors[seriesIndex] : colors; - return { - pointStrokeColor: pointStrokeColor, - pointFillColor: pointFillColor - }; - } - }]); - - return Markers; - }(); - - /** - * ApexCharts Scatter Class. - * This Class also handles bubbles chart as currently there is no major difference in drawing them, - * @module Scatter - **/ - - var Scatter = /*#__PURE__*/function () { - function Scatter(ctx) { - _classCallCheck(this, Scatter); - - this.ctx = ctx; - this.w = ctx.w; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - } - - _createClass(Scatter, [{ - key: "draw", - value: function draw(elSeries, j, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var realIndex = opts.realIndex; - var pointsPos = opts.pointsPos; - var zRatio = opts.zRatio; - var elPointsMain = opts.elParent; - var elPointsWrap = graphics.group({ - class: "apexcharts-series-markers apexcharts-series-".concat(w.config.chart.type) - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - if (pointsPos.x instanceof Array) { - for (var q = 0; q < pointsPos.x.length; q++) { - var dataPointIndex = j + 1; - var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it - - if (j === 0 && q === 0) dataPointIndex = 0; - if (j === 0 && q === 1) dataPointIndex = 1; - var radius = 0; - var finishRadius = w.globals.markers.size[realIndex]; - - if (zRatio !== Infinity) { - // means we have a bubble - finishRadius = w.globals.seriesZ[realIndex][dataPointIndex] / zRatio; - var bubble = w.config.plotOptions.bubble; - - if (bubble.minBubbleRadius && finishRadius < bubble.minBubbleRadius) { - finishRadius = bubble.minBubbleRadius; - } - - if (bubble.maxBubbleRadius && finishRadius > bubble.maxBubbleRadius) { - finishRadius = bubble.maxBubbleRadius; - } - } - - if (!w.config.chart.animations.enabled) { - radius = finishRadius; - } - - var x = pointsPos.x[q]; - var y = pointsPos.y[q]; - radius = radius || 0; - - if (y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') { - shouldDraw = false; - } - - if (shouldDraw) { - var circle = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j); - elPointsWrap.add(circle); - } - - elPointsMain.add(elPointsWrap); - } - } - } - }, { - key: "drawPoint", - value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { - var w = this.w; - var i = realIndex; - var anim = new Animations(this.ctx); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var markers = new Markers(this.ctx); - var graphics = new Graphics(this.ctx); - var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); - var pathFillCircle = fill.fillPath({ - seriesNumber: realIndex, - dataPointIndex: dataPointIndex, - patternUnits: 'objectBoundingBox', - value: w.globals.series[realIndex][j] - }); - var circle = graphics.drawCircle(radius); - - if (w.config.series[i].data[dataPointIndex]) { - if (w.config.series[i].data[dataPointIndex].fillColor) { - pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; - } - } - - circle.attr({ - cx: x, - cy: y, - fill: pathFillCircle, - stroke: markerConfig.pointStrokeColor, - 'stroke-width': markerConfig.pWidth, - 'stroke-dasharray': markerConfig.pointStrokeDashArray, - 'stroke-opacity': markerConfig.pointStrokeOpacity - }); - - if (w.config.chart.dropShadow.enabled) { - var dropShadow = w.config.chart.dropShadow; - filters.dropShadow(circle, dropShadow, realIndex); - } - - if (this.initialAnim && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - anim.animateCircleRadius(circle, 0, finishRadius, speed, w.globals.easing, function () { - window.setTimeout(function () { - anim.animationCompleted(circle); - }, 100); - }); - } - - if (w.globals.dataChanged) { - if (this.dynamicAnim) { - var _speed = w.config.chart.animations.dynamicAnimation.speed; - var prevX, prevY, prevR; - var prevPathJ = null; - prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j]; - - if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) { - // series containing less elements will ignore these values and revert to 0 - prevX = prevPathJ.x; - prevY = prevPathJ.y; - prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius; - } - - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === realIndex) { - _speed = 1; - finishRadius = 0; - } - } - - if (x === 0 && y === 0) finishRadius = 0; - anim.animateCircle(circle, { - cx: prevX, - cy: prevY, - r: prevR - }, { - cx: x, - cy: y, - r: finishRadius - }, _speed, w.globals.easing); - } else { - circle.attr({ - r: finishRadius - }); - } - } - - circle.attr({ - rel: dataPointIndex, - j: dataPointIndex, - index: realIndex, - 'default-marker-size': finishRadius - }); - filters.setSelectionFilter(circle, realIndex, dataPointIndex); - markers.addEvents(circle); - circle.node.classList.add('apexcharts-marker'); - return circle; - } - }, { - key: "centerTextInBubble", - value: function centerTextInBubble(y) { - var w = this.w; - y = y + parseInt(w.config.dataLabels.style.fontSize, 10) / 4; - return { - y: y - }; - } - }]); - - return Scatter; - }(); - - /** - * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts. - * - * @module DataLabels - **/ - - var DataLabels = /*#__PURE__*/function () { - function DataLabels(ctx) { - _classCallCheck(this, DataLabels); - - this.ctx = ctx; - this.w = ctx.w; - } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that - // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again - - - _createClass(DataLabels, [{ - key: "dataLabelsCorrection", - value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var drawnextLabel = false; // - - var textRects = graphics.getTextRects(val, fontSize); - var width = textRects.width; - var height = textRects.height; // first value in series, so push an empty array - - if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array - - w.globals.dataLabelsRects[i].push({ - x: x, - y: y, - width: width, - height: height - }); - var len = w.globals.dataLabelsRects[i].length - 2; - var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0; - - if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') { - var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex]; - - if ( // next label forward and x not intersecting - x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards - ) { - // the 2 indexes don't override, so OK to draw next label - drawnextLabel = true; - } - } - - if (dataPointIndex === 0 || alwaysDrawDataLabel) { - drawnextLabel = true; - } - - return { - x: x, - y: y, - textRects: textRects, - drawnextLabel: drawnextLabel - }; - } - }, { - key: "drawDataLabel", - value: function drawDataLabel(pos, i, j) { - var _this = this; - var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 2; - // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions - // all other charts like radar / bars / heatmaps will define their own drawDataLabel routine - var w = this.w; - var graphics = new Graphics(this.ctx); - var dataLabelsConfig = w.config.dataLabels; - var x = 0; - var y = 0; - var dataPointIndex = j; - var elDataLabelsWrap = null; - - if (!dataLabelsConfig.enabled || pos.x instanceof Array !== true) { - return elDataLabelsWrap; - } - - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - - for (var q = 0; q < pos.x.length; q++) { - x = pos.x[q] + dataLabelsConfig.offsetX; - y = pos.y[q] + dataLabelsConfig.offsetY + strokeWidth; - - if (!isNaN(x)) { - // a small hack as we have 2 points for the first val to connect it - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var val = w.globals.series[i][dataPointIndex]; - var text = ''; - - var getText = function getText(v) { - return w.config.dataLabels.formatter(v, { - ctx: _this.ctx, - seriesIndex: i, - dataPointIndex: dataPointIndex, - w: w - }); - }; - - if (w.config.chart.type === 'bubble') { - val = w.globals.seriesZ[i][dataPointIndex]; - text = getText(val); - y = pos.y[q]; - var scatter = new Scatter(this.ctx); - var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); - y = centerTextInBubbleCoords.y; - } else { - if (typeof val !== 'undefined') { - text = getText(val); - } - } - - this.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: dataPointIndex, - parent: elDataLabelsWrap, - offsetCorrection: true, - dataLabelsConfig: w.config.dataLabels - }); - } - } - - return elDataLabelsWrap; - } - }, { - key: "plotDataLabelsText", - value: function plotDataLabelsText(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var x = opts.x, - y = opts.y, - i = opts.i, - j = opts.j, - text = opts.text, - textAnchor = opts.textAnchor, - parent = opts.parent, - dataLabelsConfig = opts.dataLabelsConfig, - color = opts.color, - alwaysDrawDataLabel = opts.alwaysDrawDataLabel, - offsetCorrection = opts.offsetCorrection; - - if (Array.isArray(w.config.dataLabels.enabledOnSeries)) { - if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) { - return; - } - } - - var correctedLabels = { - x: x, - y: y, - drawnextLabel: true - }; - - if (offsetCorrection) { - correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize, 10)); - } // when zoomed, we don't need to correct labels offsets, - // but if normally, labels get cropped, correct them - - - if (!w.globals.zoomed) { - x = correctedLabels.x; - y = correctedLabels.y; - } - - if (correctedLabels.textRects) { - if (x + correctedLabels.textRects.width < -20 || x > w.globals.gridWidth + 20) { - // datalabels fall outside drawing area, so draw a blank label - text = ''; - } - } - - var dataLabelColor = w.globals.dataLabels.style.colors[i]; - - if ((w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && w.config.plotOptions.bar.distributed || w.config.dataLabels.distributed) { - dataLabelColor = w.globals.dataLabels.style.colors[j]; - } - - if (color) { - dataLabelColor = color; - } - - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - - if (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') { - // for certain chart types, we handle offsets while calculating datalabels pos - // why? because bars/column may have negative values and based on that - // offsets becomes reversed - offX = 0; - offY = 0; - } - - if (correctedLabels.drawnextLabel) { - var dataLabelText = graphics.drawText({ - width: 100, - height: parseInt(dataLabelsConfig.style.fontSize, 10), - x: x + offX, - y: y + offY, - foreColor: dataLabelColor, - textAnchor: textAnchor || dataLabelsConfig.textAnchor, - text: text, - fontSize: dataLabelsConfig.style.fontSize, - fontFamily: dataLabelsConfig.style.fontFamily, - fontWeight: dataLabelsConfig.style.fontWeight || 'normal' - }); - dataLabelText.attr({ - class: 'apexcharts-datalabel', - cx: x, - cy: y - }); - - if (dataLabelsConfig.dropShadow.enabled) { - var textShadow = dataLabelsConfig.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(dataLabelText, textShadow); - } - - parent.add(dataLabelText); - - if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') { - w.globals.lastDrawnDataLabelsIndexes[i] = []; - } - - w.globals.lastDrawnDataLabelsIndexes[i].push(j); - } - } - }, { - key: "addBackgroundToDataLabel", - value: function addBackgroundToDataLabel(el, coords) { - var w = this.w; - var bCnf = w.config.dataLabels.background; - var paddingH = bCnf.padding; - var paddingV = bCnf.padding / 2; - var width = coords.width; - var height = coords.height; - var graphics = new Graphics(this.ctx); - var elRect = graphics.drawRect(coords.x - paddingH, coords.y - paddingV / 2, width + paddingH * 2, height + paddingV, bCnf.borderRadius, w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background, bCnf.opacity, bCnf.borderWidth, bCnf.borderColor); - - if (bCnf.dropShadow.enabled) { - var filters = new Filters(this.ctx); - filters.dropShadow(elRect, bCnf.dropShadow); - } - - return elRect; - } - }, { - key: "dataLabelsBackground", - value: function dataLabelsBackground() { - var w = this.w; - if (w.config.chart.type === 'bubble') return; - var elDataLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-datalabels text'); - - for (var i = 0; i < elDataLabels.length; i++) { - var el = elDataLabels[i]; - var coords = el.getBBox(); - var elRect = null; - - if (coords.width && coords.height) { - elRect = this.addBackgroundToDataLabel(el, coords); - } - - if (elRect) { - el.parentNode.insertBefore(elRect.node, el); - var background = el.getAttribute('fill'); - var shouldAnim = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged; - - if (shouldAnim) { - elRect.animate().attr({ - fill: background - }); - } else { - elRect.attr({ - fill: background - }); - } - - el.setAttribute('fill', w.config.dataLabels.background.foreColor); - } - } - } - }, { - key: "bringForward", - value: function bringForward() { - var w = this.w; - var elDataLabelsNodes = w.globals.dom.baseEl.getElementsByClassName('apexcharts-datalabels'); - var elSeries = w.globals.dom.baseEl.querySelector('.apexcharts-plot-series:last-child'); - - for (var i = 0; i < elDataLabelsNodes.length; i++) { - if (elSeries) { - elSeries.insertBefore(elDataLabelsNodes[i], elSeries.nextSibling); - } - } - } - }]); - - return DataLabels; - }(); - - var BarDataLabels = /*#__PURE__*/function () { - function BarDataLabels(barCtx) { - _classCallCheck(this, BarDataLabels); - - this.w = barCtx.w; - this.barCtx = barCtx; - } - /** handleBarDataLabels is used to calculate the positions for the data-labels - * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels() - * After calculating, it also calls the function to draw data labels - * @memberof Bar - * @param {object} {barProps} most of the bar properties used throughout the bar - * drawing function - * @return {object} dataLabels node-element which you can append later - **/ - - - _createClass(BarDataLabels, [{ - key: "handleBarDataLabels", - value: function handleBarDataLabels(opts) { - var x = opts.x, - y = opts.y, - y1 = opts.y1, - y2 = opts.y2, - i = opts.i, - j = opts.j, - realIndex = opts.realIndex, - series = opts.series, - barHeight = opts.barHeight, - barWidth = opts.barWidth, - barYPosition = opts.barYPosition, - visibleSeries = opts.visibleSeries, - renderedPath = opts.renderedPath; - var w = this.w; - var graphics = new Graphics(this.barCtx.ctx); - var strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth; - var bcx = x + parseFloat(barWidth * visibleSeries); - var bcy = y + parseFloat(barHeight * visibleSeries); - - if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { - bcx = x + parseFloat(barWidth * (visibleSeries + 1)); - bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; - } - - var dataLabels = null; - var dataLabelsX = x; - var dataLabelsY = y; - var dataLabelsPos = {}; - var dataLabelsConfig = w.config.dataLabels; - var barDataLabelsConfig = this.barCtx.barOptions.dataLabels; - - if (typeof barYPosition !== 'undefined' && this.barCtx.isTimelineBar) { - bcy = barYPosition; - dataLabelsY = barYPosition; - } - - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var textRects = { - width: 0, - height: 0 - }; - - if (w.config.dataLabels.enabled) { - var longestStr = String(w.globals.minY).length > String(w.globals.maxY).length ? w.globals.minY : w.globals.maxY; - textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](longestStr), parseFloat(dataLabelsConfig.style.fontSize)); - } - - var params = { - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - bcx: bcx, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }; - - if (this.barCtx.isHorizontal) { - dataLabelsPos = this.calculateBarsDataLabelsPosition(params); - } else { - dataLabelsPos = this.calculateColumnsDataLabelsPosition(params); - } - - renderedPath.attr({ - cy: dataLabelsPos.bcy, - cx: dataLabelsPos.bcx, - j: j, - val: series[i][j], - barHeight: barHeight, - barWidth: barWidth - }); - dataLabels = this.drawCalculatedDataLabels({ - x: dataLabelsPos.dataLabelsX, - y: dataLabelsPos.dataLabelsY, - val: this.barCtx.isTimelineBar ? [y1, y2] : series[i][j], - i: realIndex, - j: j, - barWidth: barWidth, - barHeight: barHeight, - textRects: textRects, - dataLabelsConfig: dataLabelsConfig - }); - return dataLabels; - } - }, { - key: "calculateColumnsDataLabelsPosition", - value: function calculateColumnsDataLabelsPosition(opts) { - var w = this.w; - var i = opts.i, - j = opts.j, - y = opts.y, - bcx = opts.bcx, - barWidth = opts.barWidth, - barHeight = opts.barHeight, - textRects = opts.textRects, - dataLabelsY = opts.dataLabelsY, - barDataLabelsConfig = opts.barDataLabelsConfig, - strokeWidth = opts.strokeWidth, - offX = opts.offX, - offY = opts.offY; - var dataLabelsX; - barHeight = Math.abs(barHeight); - var vertical = w.config.plotOptions.bar.dataLabels.orientation === 'vertical'; - bcx = bcx - strokeWidth / 2; - var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - - if (w.globals.isXNumeric) { - dataLabelsX = bcx - barWidth / 2 + offX; - } else { - dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX; - } - - if (vertical) { - var offsetDLX = 2; - dataLabelsX = dataLabelsX + textRects.height / 2 - strokeWidth / 2 - offsetDLX; - } - - var valIsNegative = this.barCtx.series[i][j] < 0; - var newY = y; - - if (this.barCtx.isReversed) { - newY = y - barHeight + (valIsNegative ? barHeight * 2 : 0); - y = y - barHeight; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (vertical) { - if (valIsNegative) { - dataLabelsY = newY + barHeight / 2 + offY; - } else { - dataLabelsY = newY + barHeight / 2 - offY; - } - } else { - if (valIsNegative) { - dataLabelsY = newY - barHeight / 2 + textRects.height / 2 + offY; - } else { - dataLabelsY = newY + barHeight / 2 + textRects.height / 2 - offY; - } - } - - break; - - case 'bottom': - if (vertical) { - if (valIsNegative) { - dataLabelsY = newY + barHeight + offY; - } else { - dataLabelsY = newY + barHeight - offY; - } - } else { - if (valIsNegative) { - dataLabelsY = newY - barHeight + textRects.height + strokeWidth + offY; - } else { - dataLabelsY = newY + barHeight - textRects.height / 2 + strokeWidth - offY; - } - } - - break; - - case 'top': - if (vertical) { - if (valIsNegative) { - dataLabelsY = newY + offY; - } else { - dataLabelsY = newY - offY; - } - } else { - if (valIsNegative) { - dataLabelsY = newY - textRects.height / 2 - offY; - } else { - dataLabelsY = newY + textRects.height + offY; - } - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsY < 0) { - dataLabelsY = 0 + strokeWidth; - } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { - dataLabelsY = w.globals.gridHeight - strokeWidth; - } - } - - return { - bcx: bcx, - bcy: y, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "calculateBarsDataLabelsPosition", - value: function calculateBarsDataLabelsPosition(opts) { - var w = this.w; - var x = opts.x, - i = opts.i, - j = opts.j, - bcy = opts.bcy, - barHeight = opts.barHeight, - barWidth = opts.barWidth, - textRects = opts.textRects, - dataLabelsX = opts.dataLabelsX, - strokeWidth = opts.strokeWidth, - barDataLabelsConfig = opts.barDataLabelsConfig, - offX = opts.offX, - offY = opts.offY; - var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - barWidth = Math.abs(barWidth); - var dataLabelsY = bcy - (this.barCtx.isTimelineBar ? 0 : dataPointsDividedHeight) + barHeight / 2 + textRects.height / 2 + offY - 3; - var valIsNegative = this.barCtx.series[i][j] < 0; - var newX = x; - - if (this.barCtx.isReversed) { - newX = x + barWidth - (valIsNegative ? barWidth * 2 : 0); - x = w.globals.gridWidth - barWidth; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsX = newX + barWidth / 2 - offX; - } else { - dataLabelsX = newX - barWidth / 2 + offX; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsX = newX + barWidth - strokeWidth - Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = newX - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsX = newX - strokeWidth + Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = newX - strokeWidth - Math.round(textRects.width / 2) + offX; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsX < 0) { - dataLabelsX = dataLabelsX + textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; - } - } - - return { - bcx: x, - bcy: bcy, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "drawCalculatedDataLabels", - value: function drawCalculatedDataLabels(_ref) { - var x = _ref.x, - y = _ref.y, - val = _ref.val, - i = _ref.i, - j = _ref.j, - textRects = _ref.textRects, - barHeight = _ref.barHeight, - barWidth = _ref.barWidth, - dataLabelsConfig = _ref.dataLabelsConfig; - var w = this.w; - var rotate = 'rotate(0)'; - if (w.config.plotOptions.bar.dataLabels.orientation === 'vertical') rotate = "rotate(-90, ".concat(x, ", ").concat(y, ")"); - var dataLabels = new DataLabels(this.barCtx.ctx); - var graphics = new Graphics(this.barCtx.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1; - - if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels', - transform: rotate - }); - var text = ''; - - if (typeof val !== 'undefined') { - text = formatter(val, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - if (val === 0 && w.config.chart.stacked) { - // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element - text = ''; - } - - var valIsNegative = w.globals.series[i][j] <= 0; - var position = w.config.plotOptions.bar.dataLabels.position; - - if (w.config.plotOptions.bar.dataLabels.orientation === 'vertical') { - if (position === 'top') { - if (valIsNegative) dataLabelsConfig.textAnchor = 'end';else dataLabelsConfig.textAnchor = 'start'; - } - - if (position === 'center') { - dataLabelsConfig.textAnchor = 'middle'; - } - - if (position === 'bottom') { - if (valIsNegative) dataLabelsConfig.textAnchor = 'end';else dataLabelsConfig.textAnchor = 'start'; - } - } - - if (this.barCtx.isTimelineBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) { - // hide the datalabel if it cannot fit into the rect - var txRect = graphics.getTextRects(text, parseFloat(dataLabelsConfig.style.fontSize)); - - if (barWidth < txRect.width) { - text = ''; - } - } - - if (w.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) { - // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect - // Note: This issue is only seen in stacked charts - if (this.barCtx.isHorizontal) { - barWidth = Math.abs(w.globals.series[i][j]) / this.barCtx.invertedYRatio[this.barCtx.yaxisIndex]; // FIXED: Don't always hide the stacked negative side label - // A negative value will result in a negative bar width - // Only hide the text when the width is smaller (a higher negative number) than the negative bar width. - - if (barWidth > 0 && textRects.width / 1.6 > barWidth || barWidth < 0 && textRects.width / 1.6 < barWidth) { - text = ''; - } - } else { - barHeight = Math.abs(w.globals.series[i][j]) / this.barCtx.yRatio[this.barCtx.yaxisIndex]; - - if (textRects.height / 1.6 > barHeight) { - text = ''; - } - } - } - - var modifiedDataLabelsConfig = _objectSpread2({}, dataLabelsConfig); - - if (this.barCtx.isHorizontal) { - if (val < 0) { - if (dataLabelsConfig.textAnchor === 'start') { - modifiedDataLabelsConfig.textAnchor = 'end'; - } else if (dataLabelsConfig.textAnchor === 'end') { - modifiedDataLabelsConfig.textAnchor = 'start'; - } - } - } - - dataLabels.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: modifiedDataLabelsConfig, - alwaysDrawDataLabel: true, - offsetCorrection: true - }); - } - - return elDataLabelsWrap; - } - }]); - - return BarDataLabels; - }(); - - /** - * ApexCharts Series Class for interation with the Series of the chart. - * - * @module Series - **/ - - var Series = /*#__PURE__*/function () { - function Series(ctx) { - _classCallCheck(this, Series); - - this.ctx = ctx; - this.w = ctx.w; - this.legendInactiveClass = 'legend-mouseover-inactive'; - } - - _createClass(Series, [{ - key: "getAllSeriesEls", - value: function getAllSeriesEls() { - return this.w.globals.dom.baseEl.getElementsByClassName("apexcharts-series"); - } - }, { - key: "getSeriesByName", - value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); - } - }, { - key: "isSeriesHidden", - value: function isSeriesHidden(seriesName) { - var targetElement = this.getSeriesByName(seriesName); - var realIndex = parseInt(targetElement.getAttribute('data:realIndex'), 10); - var isHidden = targetElement.classList.contains('apexcharts-series-collapsed'); - return { - isHidden: isHidden, - realIndex: realIndex - }; - } - }, { - key: "addCollapsedClassToSeries", - value: function addCollapsedClassToSeries(elSeries, index) { - var w = this.w; - - function iterateOnAllCollapsedSeries(series) { - for (var cs = 0; cs < series.length; cs++) { - if (series[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); - } - } - } - - iterateOnAllCollapsedSeries(w.globals.collapsedSeries); - iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); - } - }, { - key: "toggleSeries", - value: function toggleSeries(seriesName) { - var isSeriesHidden = this.isSeriesHidden(seriesName); - this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, isSeriesHidden.isHidden); - return isSeriesHidden.isHidden; - } - }, { - key: "showSeries", - value: function showSeries(seriesName) { - var isSeriesHidden = this.isSeriesHidden(seriesName); - - if (isSeriesHidden.isHidden) { - this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, true); - } - } - }, { - key: "hideSeries", - value: function hideSeries(seriesName) { - var isSeriesHidden = this.isSeriesHidden(seriesName); - - if (!isSeriesHidden.isHidden) { - this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, false); - } - } - }, { - key: "resetSeries", - value: function resetSeries() { - var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - var shouldResetZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var shouldResetCollapsed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var w = this.w; - var series = Utils.clone(w.globals.initialSeries); - w.globals.previousPaths = []; - - if (shouldResetCollapsed) { - w.globals.collapsedSeries = []; - w.globals.ancillaryCollapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - w.globals.ancillaryCollapsedSeriesIndices = []; - } else { - series = this.emptyCollapsedSeries(series); - } - - w.config.series = series; - - if (shouldUpdateChart) { - if (shouldResetZoom) { - w.globals.zoomed = false; - this.ctx.updateHelpers.revertDefaultAxisMinMax(); - } - - this.ctx.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - }, { - key: "emptyCollapsedSeries", - value: function emptyCollapsedSeries(series) { - var w = this.w; - - for (var i = 0; i < series.length; i++) { - if (w.globals.collapsedSeriesIndices.indexOf(i) > -1) { - series[i].data = []; - } - } - - return series; - } - }, { - key: "toggleSeriesOnHover", - value: function toggleSeriesOnHover(e, targetElement) { - var w = this.w; - var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels"); - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel'), 10) - 1; - var seriesEl = null; - var dataLabelEl = null; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - dataLabelEl = w.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(seriesCnt, "']")); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - } - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - } - - for (var se = 0; se < allSeriesEls.length; se++) { - allSeriesEls[se].classList.add(this.legendInactiveClass); - } - - if (seriesEl !== null) { - if (!w.globals.axisCharts) { - seriesEl.parentNode.classList.remove(this.legendInactiveClass); - } - - seriesEl.classList.remove(this.legendInactiveClass); - - if (dataLabelEl !== null) { - dataLabelEl.classList.remove(this.legendInactiveClass); - } - } - } else if (e.type === 'mouseout') { - for (var _se = 0; _se < allSeriesEls.length; _se++) { - allSeriesEls[_se].classList.remove(this.legendInactiveClass); - } - } - } - }, { - key: "highlightRangeInSeries", - value: function highlightRangeInSeries(e, targetElement) { - var _this = this; - - var w = this.w; - var allHeatMapElements = w.globals.dom.baseEl.getElementsByClassName('apexcharts-heatmap-rect'); - - var activeInactive = function activeInactive(action) { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList[action](_this.legendInactiveClass); - } - }; - - var removeInactiveClassFromHoveredRange = function removeInactiveClassFromHoveredRange(range) { - for (var i = 0; i < allHeatMapElements.length; i++) { - var val = parseInt(allHeatMapElements[i].getAttribute('val'), 10); - - if (val >= range.from && val <= range.to) { - allHeatMapElements[i].classList.remove(_this.legendInactiveClass); - } - } - }; - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel'), 10) - 1; - activeInactive('add'); - var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt]; - removeInactiveClassFromHoveredRange(range); - } else if (e.type === 'mouseout') { - activeInactive('remove'); - } - } - }, { - key: "getActiveConfigSeriesIndex", - value: function getActiveConfigSeriesIndex() { - var ignoreBars = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var w = this.w; - var activeIndex = 0; - - if (w.config.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.config.series.map(function (series, index) { - var hasBars = false; - - if (ignoreBars) { - hasBars = w.config.series[index].type === 'bar' || w.config.series[index].type === 'column'; - } - - return series.data && series.data.length > 0 && !hasBars ? index : -1; - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getPreviousPaths", - value: function getPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - - function pushPaths(seriesEls, i, type) { - var paths = seriesEls[i].childNodes; - var dArr = { - type: type, - paths: [], - realIndex: seriesEls[i].getAttribute('data:realIndex') - }; - - for (var j = 0; j < paths.length; j++) { - if (paths[j].hasAttribute('pathTo')) { - var d = paths[j].getAttribute('pathTo'); - dArr.paths.push({ - d: d - }); - } - } - - w.globals.previousPaths.push(dArr); - } - - var getPaths = function getPaths(chartType) { - return w.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(chartType, "-series .apexcharts-series")); - }; - - var chartTypes = ['line', 'area', 'bar', 'candlestick', 'radar']; - chartTypes.forEach(function (type) { - var paths = getPaths(type); - - for (var p = 0; p < paths.length; p++) { - pushPaths(paths, p, type); - } - }); - this.handlePrevBubbleScatterPaths('bubble'); - this.handlePrevBubbleScatterPaths('scatter'); - var heatmapColors = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap .apexcharts-series'); - - if (heatmapColors.length > 0) { - for (var h = 0; h < heatmapColors.length; h++) { - var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-heatmap .apexcharts-series[data\\:realIndex='".concat(h, "'] rect")); - var dArr = []; - - for (var i = 0; i < seriesEls.length; i++) { - dArr.push({ - color: seriesEls[i].getAttribute('color') - }); - } - - w.globals.previousPaths.push(dArr); - } - } - - if (!w.globals.axisCharts) { - // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series) - w.globals.previousPaths = w.globals.series; - } - } - }, { - key: "handlePrevBubbleScatterPaths", - value: function handlePrevBubbleScatterPaths(type) { - var w = this.w; - var paths = w.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(type, "-series .apexcharts-series")); - - if (paths.length > 0) { - for (var s = 0; s < paths.length; s++) { - var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(type, "-series .apexcharts-series[data\\:realIndex='").concat(s, "'] circle")); - var dArr = []; - - for (var i = 0; i < seriesEls.length; i++) { - dArr.push({ - x: seriesEls[i].getAttribute('cx'), - y: seriesEls[i].getAttribute('cy'), - r: seriesEls[i].getAttribute('r') - }); - } - - w.globals.previousPaths.push(dArr); - } - } - } - }, { - key: "clearPreviousPaths", - value: function clearPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - w.globals.allSeriesCollapsed = false; - } - }, { - key: "handleNoData", - value: function handleNoData() { - var w = this.w; - var me = this; - var noDataOpts = w.config.noData; - var graphics = new Graphics(me.ctx); - var x = w.globals.svgWidth / 2; - var y = w.globals.svgHeight / 2; - var textAnchor = 'middle'; - w.globals.noData = true; - w.globals.animationEnded = true; - - if (noDataOpts.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (noDataOpts.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - if (noDataOpts.verticalAlign === 'top') { - y = 50; - } else if (noDataOpts.verticalAlign === 'bottom') { - y = w.globals.svgHeight - 50; - } - - x = x + noDataOpts.offsetX; - y = y + parseInt(noDataOpts.style.fontSize, 10) + 2 + noDataOpts.offsetY; - - if (noDataOpts.text !== undefined && noDataOpts.text !== '') { - var titleText = graphics.drawText({ - x: x, - y: y, - text: noDataOpts.text, - textAnchor: textAnchor, - fontSize: noDataOpts.style.fontSize, - fontFamily: noDataOpts.style.fontFamily, - foreColor: noDataOpts.style.color, - opacity: 1, - class: 'apexcharts-text-nodata' - }); - w.globals.dom.Paper.add(titleText); - } - } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0] - // This is because we don't want to alter the series' length as it is used at many places - - }, { - key: "setNullSeriesToZeroValues", - value: function setNullSeriesToZeroValues(series) { - var w = this.w; - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length === 0) { - for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) { - series[sl].push(0); - } - } - } - - return series; - } - }, { - key: "hasAllSeriesEqualX", - value: function hasAllSeriesEqualX() { - var equalLen = true; - var w = this.w; - var filteredSerX = this.filteredSeriesX(); - - for (var i = 0; i < filteredSerX.length - 1; i++) { - if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) { - equalLen = false; - break; - } - } - - w.globals.allSeriesHasEqualX = equalLen; - return equalLen; - } - }, { - key: "filteredSeriesX", - value: function filteredSeriesX() { - var w = this.w; - var filteredSeriesX = w.globals.seriesX.map(function (ser) { - return ser.length > 0 ? ser : []; - }); - return filteredSeriesX; - } - }]); - - return Series; - }(); - - var Helpers$1 = /*#__PURE__*/function () { - function Helpers(barCtx) { - _classCallCheck(this, Helpers); - - this.w = barCtx.w; - this.barCtx = barCtx; - } - - _createClass(Helpers, [{ - key: "initVariables", - value: function initVariables(series) { - var w = this.w; - this.barCtx.series = series; - this.barCtx.totalItems = 0; - this.barCtx.seriesLen = 0; - this.barCtx.visibleI = -1; // visible Series - - this.barCtx.visibleItems = 1; // number of visible bars after user zoomed in/out - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.barCtx.seriesLen = this.barCtx.seriesLen + 1; - this.barCtx.totalItems += series[sl].length; - } - - if (w.globals.isXNumeric) { - // get max visible items - for (var j = 0; j < series[sl].length; j++) { - if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { - this.barCtx.visibleItems++; - } - } - } else { - this.barCtx.visibleItems = w.globals.dataPoints; - } - } - - if (this.barCtx.seriesLen === 0) { - // A small adjustment when combo charts are used - this.barCtx.seriesLen = 1; - } - } - }, { - key: "initialPositions", - value: function initialPositions() { - var w = this.w; - var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW; - var dataPoints = w.globals.dataPoints; - - if (this.barCtx.isTimelineBar) { - // timeline rangebar chart - dataPoints = w.globals.labels.length; - } - - if (this.barCtx.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / dataPoints; - barHeight = yDivision / this.barCtx.seriesLen; - - if (w.globals.isXNumeric) { - yDivision = w.globals.gridHeight / this.barCtx.totalItems; - barHeight = yDivision / this.barCtx.seriesLen; - } - - barHeight = barHeight * parseInt(this.barCtx.barOptions.barHeight, 10) / 100; - zeroW = this.barCtx.baseLineInvertedY + w.globals.padHorizontal + (this.barCtx.isReversed ? w.globals.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0); - y = (yDivision - barHeight * this.barCtx.seriesLen) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / this.barCtx.visibleItems; - - if (w.config.xaxis.convertedCatToNumeric) { - xDivision = w.globals.gridWidth / w.globals.dataPoints; - } - - barWidth = xDivision / this.barCtx.seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100; - - if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - var xRatio = this.barCtx.xRatio; - - if (w.config.xaxis.convertedCatToNumeric) { - xRatio = this.barCtx.initialXRatio; - } - - if (w.globals.minXDiff && w.globals.minXDiff !== 0.5 && w.globals.minXDiff / xRatio > 0) { - xDivision = w.globals.minXDiff / xRatio; - } - - barWidth = xDivision / this.barCtx.seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100; - - if (barWidth < 1) { - barWidth = 1; - } - } - - zeroH = w.globals.gridHeight - this.barCtx.baseLineY[this.barCtx.yaxisIndex] - (this.barCtx.isReversed ? w.globals.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.yaxisIndex] * 2 : 0); - x = w.globals.padHorizontal + (xDivision - barWidth * this.barCtx.seriesLen) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "getPathFillColor", - value: function getPathFillColor(series, i, j, realIndex) { - var w = this.w; - var fill = new Fill(this.barCtx.ctx); - var fillColor = null; - var seriesNumber = this.barCtx.barOptions.distributed ? j : i; - - if (this.barCtx.barOptions.colors.ranges.length > 0) { - var colorRange = this.barCtx.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { - fillColor = w.config.series[i].data[j].fillColor; - } - - var pathFill = fill.fillPath({ - seriesNumber: this.barCtx.barOptions.distributed ? seriesNumber : realIndex, - dataPointIndex: j, - color: fillColor, - value: series[i][j] - }); - return pathFill; - } - }, { - key: "getStrokeWidth", - value: function getStrokeWidth(i, j, realIndex) { - var strokeWidth = 0; - var w = this.w; - - if (typeof this.barCtx.series[i][j] === 'undefined' || this.barCtx.series[i][j] === null) { - this.barCtx.isNullValue = true; - } else { - this.barCtx.isNullValue = false; - } - - if (w.config.stroke.show) { - if (!this.barCtx.isNullValue) { - strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth; - } - } - - return strokeWidth; - } - }, { - key: "barBackground", - value: function barBackground(_ref) { - var bc = _ref.bc, - i = _ref.i, - x1 = _ref.x1, - x2 = _ref.x2, - y1 = _ref.y1, - y2 = _ref.y2, - elSeries = _ref.elSeries; - var w = this.w; - var graphics = new Graphics(this.barCtx.ctx); - var sr = new Series(this.barCtx.ctx); - var activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && activeSeriesIndex === i) { - if (bc >= this.barCtx.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barCtx.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(typeof x1 !== 'undefined' ? x1 : 0, typeof y1 !== 'undefined' ? y1 : 0, typeof x2 !== 'undefined' ? x2 : w.globals.gridWidth, typeof y2 !== 'undefined' ? y2 : w.globals.gridHeight, this.barCtx.barOptions.colors.backgroundBarRadius, bcolor, this.barCtx.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - } - }, { - key: "getColumnPaths", - value: function getColumnPaths(_ref2) { - var barWidth = _ref2.barWidth, - barXPosition = _ref2.barXPosition, - yRatio = _ref2.yRatio, - y1 = _ref2.y1, - y2 = _ref2.y2, - strokeWidth = _ref2.strokeWidth, - series = _ref2.series, - realIndex = _ref2.realIndex, - i = _ref2.i, - j = _ref2.j, - w = _ref2.w; - var graphics = new Graphics(this.barCtx.ctx); - strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth; - if (!strokeWidth) strokeWidth = 0; - var shapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - yRatio: yRatio, - barXPosition: barXPosition, - y1: y1, - y2: y2 - }; - var newPath = this.getRoundedBars(w, shapeOpts, series, i, j); - var x1 = barXPosition; - var x2 = barXPosition + barWidth; - var pathTo = graphics.move(x1, newPath.y1); - var pathFrom = graphics.move(x1, newPath.y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.barCtx.getPreviousPath(realIndex, j, false); - } - - pathTo = pathTo + graphics.line(x1, newPath.y2) + newPath.endingPath + graphics.line(x2 - strokeWidth, newPath.y2) + graphics.line(x2 - strokeWidth, newPath.y1) + newPath.startingPath + 'z'; - pathFrom = pathFrom + graphics.line(x1, y1) + graphics.line(x2 - strokeWidth, y1) + graphics.line(x2 - strokeWidth, y1) + graphics.line(x2 - strokeWidth, y1) + graphics.line(x1, y1); - return { - pathTo: pathTo, - pathFrom: pathFrom - }; - } - }, { - key: "getBarpaths", - value: function getBarpaths(_ref3) { - var barYPosition = _ref3.barYPosition, - barHeight = _ref3.barHeight, - x1 = _ref3.x1, - x2 = _ref3.x2, - strokeWidth = _ref3.strokeWidth, - series = _ref3.series, - realIndex = _ref3.realIndex, - i = _ref3.i, - j = _ref3.j, - w = _ref3.w; - var graphics = new Graphics(this.barCtx.ctx); - strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth; - if (!strokeWidth) strokeWidth = 0; - var shapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - barYPosition: barYPosition, - x2: x2, - x1: x1 - }; - var newPath = this.getRoundedBars(w, shapeOpts, series, i, j); - var pathTo = graphics.move(newPath.x1, barYPosition); - var pathFrom = graphics.move(newPath.x1, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.barCtx.getPreviousPath(realIndex, j, false); - } - - var y1 = barYPosition; - var y2 = barYPosition + barHeight; - pathTo = pathTo + graphics.line(newPath.x2, y1) + newPath.endingPath + graphics.line(newPath.x2, y2 - strokeWidth) + graphics.line(newPath.x1, y2 - strokeWidth) + newPath.startingPath + 'z'; - pathFrom = pathFrom + graphics.line(x1, y1) + graphics.line(x1, y2 - strokeWidth) + graphics.line(x1, y2 - strokeWidth) + graphics.line(x1, y2 - strokeWidth) + graphics.line(x1, y1); - return { - pathTo: pathTo, - pathFrom: pathFrom - }; - } - /** getRoundedBars draws border radius for bars/columns - * @memberof Bar - * @param {object} w - chart context - * @param {object} opts - consists several properties like barHeight/barWidth - * @param {array} series - global primary series - * @param {int} i - current iterating series's index - * @param {int} j - series's j of i - * @return {object} endingPath - ending shape path string - * startingPath - starting shape path string - * newY/newX - which is calculated from existing x/y based on rounded border - **/ - - }, { - key: "getRoundedBars", - value: function getRoundedBars(w, opts, series, i, j) { - var graphics = new Graphics(this.barCtx.ctx); - var strokeWidth = Array.isArray(opts.strokeWidth) ? opts.strokeWidth[i] : opts.strokeWidth; - if (!strokeWidth) strokeWidth = 0; - - if (this.barCtx.isHorizontal) { - var endingShape = null; - var startingShape = ''; - var x2 = opts.x2; - var x1 = opts.x1; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var inverse = series[i][j] < 0; - var eX = opts.barHeight / 2 - strokeWidth; - if (inverse) eX = -opts.barHeight / 2 - strokeWidth; - - if (eX > Math.abs(x2 - x1)) { - eX = Math.abs(x2 - x1); - } - - if (this.barCtx.barOptions.endingShape === 'rounded') { - x2 = opts.x2 - eX / 2; - } - - if (this.barCtx.barOptions.startingShape === 'rounded') { - x1 = opts.x1 + eX / 2; - } - - switch (this.barCtx.barOptions.endingShape) { - case 'flat': - endingShape = graphics.line(x2, opts.barYPosition + opts.barHeight - strokeWidth); - break; - - case 'rounded': - endingShape = graphics.quadraticCurve(x2 + eX, opts.barYPosition + (opts.barHeight - strokeWidth) / 2, x2, opts.barYPosition + opts.barHeight - strokeWidth); - break; - } - - switch (this.barCtx.barOptions.startingShape) { - case 'flat': - startingShape = graphics.line(x1, opts.barYPosition + opts.barHeight - strokeWidth); - break; - - case 'rounded': - startingShape = graphics.quadraticCurve(x1 - eX, opts.barYPosition + opts.barHeight / 2, x1, opts.barYPosition); - break; - } - } - - return { - endingPath: endingShape, - startingPath: startingShape, - x2: x2, - x1: x1 - }; - } else { - var _endingShape = null; - var _startingShape = ''; - var y2 = opts.y2; - var y1 = opts.y1; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var _inverse = series[i][j] < 0; - - var eY = opts.barWidth / 2 - strokeWidth; - if (_inverse) eY = -opts.barWidth / 2 - strokeWidth; - - if (eY > Math.abs(y2 - y1)) { - eY = Math.abs(y2 - y1); - } - - if (this.barCtx.barOptions.endingShape === 'rounded') { - // the shape exceeds the chart height, hence reduce y - y2 = y2 + eY / 2; - } - - if (this.barCtx.barOptions.startingShape === 'rounded') { - y1 = y1 - eY / 2; - } - - switch (this.barCtx.barOptions.endingShape) { - case 'flat': - _endingShape = graphics.line(opts.barXPosition + opts.barWidth - strokeWidth, y2); - break; - - case 'rounded': - _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - strokeWidth) / 2, y2 - eY, opts.barXPosition + opts.barWidth - strokeWidth, y2); - break; - } - - switch (this.barCtx.barOptions.startingShape) { - case 'flat': - _startingShape = graphics.line(opts.barXPosition + opts.barWidth - strokeWidth, y1); - break; - - case 'rounded': - _startingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - strokeWidth) / 2, y1 + eY, opts.barXPosition, y1); - break; - } - } - - return { - endingPath: _endingShape, - startingPath: _startingShape, - y2: y2, - y1: y1 - }; - } - } - }]); - - return Helpers; - }(); - - /** - * ApexCharts Bar Class responsible for drawing both Columns and Bars. - * - * @module Bar - **/ - - var Bar = /*#__PURE__*/function () { - function Bar(ctx, xyRatios) { - _classCallCheck(this, Bar); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.barOptions = w.config.plotOptions.bar; - this.isHorizontal = this.barOptions.horizontal; - this.strokeWidth = w.config.stroke.width; - this.isNullValue = false; - this.isTimelineBar = w.config.xaxis.type === 'datetime' && w.globals.seriesRangeBarTimeline.length; - this.xyRatios = xyRatios; - - if (this.xyRatios !== null) { - this.xRatio = xyRatios.xRatio; - this.initialXRatio = xyRatios.initialXRatio; - this.yRatio = xyRatios.yRatio; - this.invertedXRatio = xyRatios.invertedXRatio; - this.invertedYRatio = xyRatios.invertedYRatio; - this.baseLineY = xyRatios.baseLineY; - this.baseLineInvertedY = xyRatios.baseLineInvertedY; - } - - this.yaxisIndex = 0; - this.seriesLen = 0; - this.barHelpers = new Helpers$1(this); - } - /** primary draw method which is called on bar object - * @memberof Bar - * @param {array} series - user supplied series values - * @param {int} seriesIndex - the index by which series will be drawn on the svg - * @return {node} element which is supplied to parent chart draw method for appending - **/ - - - _createClass(Bar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.barHelpers.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - - if (w.config.dataLabels.enabled) { - if (this.totalItems > this.barOptions.dataLabels.maxItems) { - console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); - } - } - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - rel: i + 1, - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - 'data:realIndex': realIndex - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var initPositions = this.barHelpers.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - - if (!this.horizontal) { - xArrj.push(x + barWidth / 2); - } // eldatalabels - - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels', - 'data:realIndex': realIndex - }); - - for (var j = 0; j < w.globals.dataPoints; j++) { - var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex); - var paths = null; - var pathsParams = { - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - strokeWidth: strokeWidth, - elSeries: elSeries - }; - - if (this.isHorizontal) { - paths = this.drawBarPaths(_objectSpread2({}, pathsParams, { - barHeight: barHeight, - zeroW: zeroW, - yDivision: yDivision - })); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths(_objectSpread2({}, pathsParams, { - xDivision: xDivision, - barWidth: barWidth, - zeroH: zeroH - })); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = this.barHelpers.getPathFillColor(series, i, j, realIndex); - this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: paths.pathFrom, - pathTo: paths.pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'bar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "renderSeries", - value: function renderSeries(_ref) { - var realIndex = _ref.realIndex, - pathFill = _ref.pathFill, - lineFill = _ref.lineFill, - j = _ref.j, - i = _ref.i, - pathFrom = _ref.pathFrom, - pathTo = _ref.pathTo, - strokeWidth = _ref.strokeWidth, - elSeries = _ref.elSeries, - x = _ref.x, - y = _ref.y, - y1 = _ref.y1, - y2 = _ref.y2, - series = _ref.series, - barHeight = _ref.barHeight, - barWidth = _ref.barWidth, - barYPosition = _ref.barYPosition, - elDataLabelsWrap = _ref.elDataLabelsWrap, - visibleSeries = _ref.visibleSeries, - type = _ref.type; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (!lineFill) { - /* fix apexcharts#341 */ - lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { - lineFill = w.config.series[i].data[j].strokeColor; - } - - if (this.isNullValue) { - pathFill = 'none'; - } - - var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4; - var renderedPath = graphics.renderPaths({ - i: i, - j: j, - realIndex: realIndex, - pathFrom: pathFrom, - pathTo: pathTo, - stroke: lineFill, - strokeWidth: strokeWidth, - strokeLineCap: w.config.stroke.lineCap, - fill: pathFill, - animationDelay: delay, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type, "-area") - }); - renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - - if (typeof y1 !== 'undefined' && typeof y2 !== 'undefined') { - renderedPath.attr('data-range-y1', y1); - renderedPath.attr('data-range-y2', y2); - } - - var filters = new Filters(this.ctx); - filters.setSelectionFilter(renderedPath, realIndex, j); - elSeries.add(renderedPath); - var barDataLabels = new BarDataLabels(this); - var dataLabels = barDataLabels.handleBarDataLabels({ - x: x, - y: y, - y1: y1, - y2: y2, - i: i, - j: j, - series: series, - realIndex: realIndex, - barHeight: barHeight, - barWidth: barWidth, - barYPosition: barYPosition, - renderedPath: renderedPath, - visibleSeries: visibleSeries - }); - - if (dataLabels !== null) { - elDataLabelsWrap.add(dataLabels); - } - - elSeries.add(elDataLabelsWrap); - return elSeries; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref2) { - var indexes = _ref2.indexes, - barHeight = _ref2.barHeight, - strokeWidth = _ref2.strokeWidth, - zeroW = _ref2.zeroW, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - elSeries = _ref2.elSeries; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - x = zeroW; - } else { - x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var paths = this.barHelpers.getBarpaths({ - barYPosition: barYPosition, - barHeight: barHeight, - x1: zeroW, - x2: x, - strokeWidth: strokeWidth, - series: this.series, - realIndex: indexes.realIndex, - i: i, - j: j, - w: w - }); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - this.barHelpers.barBackground({ - bc: bc, - i: i, - y1: barYPosition - barHeight * this.visibleI, - y2: barHeight * this.seriesLen, - elSeries: elSeries - }); - return { - pathTo: paths.pathTo, - pathFrom: paths.pathFrom, - x: x, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref3) { - var indexes = _ref3.indexes, - x = _ref3.x, - y = _ref3.y, - xDivision = _ref3.xDivision, - barWidth = _ref3.barWidth, - zeroH = _ref3.zeroH, - strokeWidth = _ref3.strokeWidth, - elSeries = _ref3.elSeries; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - var sxI = i; - - if (!w.globals.seriesX[i].length) { - sxI = w.globals.maxValsInArrayIndex; - } - - x = (w.globals.seriesX[sxI][j] - w.globals.minX) / this.xRatio - barWidth * this.seriesLen / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y = zeroH; - } else { - y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - } - - var paths = this.barHelpers.getColumnPaths({ - barXPosition: barXPosition, - barWidth: barWidth, - y1: zeroH, - y2: y, - strokeWidth: strokeWidth, - series: this.series, - realIndex: indexes.realIndex, - i: i, - j: j, - w: w - }); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - this.barHelpers.barBackground({ - bc: bc, - i: i, - x1: barXPosition - strokeWidth / 2 - barWidth * this.visibleI, - x2: barWidth * this.seriesLen + strokeWidth / 2, - elSeries: elSeries - }); - return { - pathTo: paths.pathTo, - pathFrom: paths.pathFrom, - x: x, - y: y, - barXPosition: barXPosition - }; - } - /** getPreviousPath is a common function for bars/columns which is used to get previous paths when data changes. - * @memberof Bar - * @param {int} realIndex - current iterating i - * @param {int} j - current iterating series's j index - * @return {string} pathFrom is the string which will be appended in animations - **/ - - }, { - key: "getPreviousPath", - value: function getPreviousPath(realIndex, j) { - var w = this.w; - var pathFrom; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) { - if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[j].d; - } - } - } - - return pathFrom; - } - }]); - - return Bar; - }(); - - /** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - - var DateTime = /*#__PURE__*/function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getTimeStamp", - value: function getTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - var utc = this.w.config.xaxis.labels.datetimeUTC; - return !utc ? new Date(dateStr).getTime() : new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "getDate", - value: function getDate(timestamp) { - var utc = this.w.config.xaxis.labels.datetimeUTC; - return utc ? new Date(new Date(timestamp).toUTCString()) : new Date(timestamp); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getTimeStamp(output); - return output; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var locale = this.w.globals.locale; - var utc = this.w.config.xaxis.labels.datetimeUTC; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX, utc) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var tsMin = this.getDate(minX); - var tsMax = this.getDate(maxX); - var minD = this.formatDate(tsMin, 'yyyy MM dd HH mm').split(' '); - var maxD = this.formatDate(tsMax, 'yyyy MM dd HH mm').split(' '); - return { - minMinute: parseInt(minD[4], 10), - maxMinute: parseInt(maxD[4], 10), - minHour: parseInt(minD[3], 10), - maxHour: parseInt(maxD[3], 10), - minDate: parseInt(minD[2], 10), - maxDate: parseInt(maxD[2], 10), - minMonth: parseInt(minD[1], 10) - 1, - maxMonth: parseInt(maxD[1], 10) - 1, - minYear: parseInt(minD[0], 10), - maxYear: parseInt(maxD[0], 10) - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; - }(); - - /** - * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. - * - * @module RangeBar - **/ - - var RangeBar = /*#__PURE__*/function (_Bar) { - _inherits(RangeBar, _Bar); - - function RangeBar() { - _classCallCheck(this, RangeBar); - - return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); - } - - _createClass(RangeBar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - this.rangeBarOptions = this.w.config.plotOptions.rangeBar; - this.series = series; - this.seriesRangeStart = w.globals.seriesRangeStart; - this.seriesRangeEnd = w.globals.seriesRangeEnd; - this.barHelpers.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-rangebar-series apexcharts-plot-series' - }); - - for (var i = 0; i < series.length; i++) { - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.barHelpers.initialPositions(); - y = initPositions.y; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels', - 'data:realIndex': realIndex - }); - - for (var j = 0; j < w.globals.dataPoints; j++) { - var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex); - var y1 = this.seriesRangeStart[i][j]; - var y2 = this.seriesRangeEnd[i][j]; - var paths = null; - var barYPosition = null; - var params = { - x: x, - y: y, - strokeWidth: strokeWidth, - elSeries: elSeries - }; - yDivision = initPositions.yDivision; - barHeight = initPositions.barHeight; - - if (this.isHorizontal) { - barYPosition = y + barHeight * this.visibleI; - var srty = (yDivision - barHeight * this.seriesLen) / 2; - - if (typeof w.config.series[i].data[j] === 'undefined') { - // no data exists for further indexes, hence we need to get out the innr loop. - // As we are iterating over total datapoints, there is a possiblity the series might not have data for j index - break; - } - - if (this.isTimelineBar && w.config.series[i].data[j].x) { - var positions = this.detectOverlappingBars({ - i: i, - j: j, - barYPosition: barYPosition, - srty: srty, - barHeight: barHeight, - yDivision: yDivision, - initPositions: initPositions - }); - barHeight = positions.barHeight; - barYPosition = positions.barYPosition; - } - - paths = this.drawRangeBarPaths(_objectSpread2({ - indexes: { - i: i, - j: j, - realIndex: realIndex - }, - barHeight: barHeight, - barYPosition: barYPosition, - zeroW: zeroW, - yDivision: yDivision, - y1: y1, - y2: y2 - }, params)); - barWidth = paths.barWidth; - } else { - paths = this.drawRangeColumnPaths(_objectSpread2({ - indexes: { - i: i, - j: j, - realIndex: realIndex - }, - zeroH: zeroH, - barWidth: barWidth, - xDivision: xDivision - }, params)); - barHeight = paths.barHeight; - } - - y = paths.y; - x = paths.x; - var pathFill = this.barHelpers.getPathFillColor(series, i, j, realIndex); - var lineFill = w.globals.stroke.colors[realIndex]; - this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - x: x, - y: y, - y1: y1, - y2: y2, - pathFrom: paths.pathFrom, - pathTo: paths.pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - series: series, - barHeight: barHeight, - barYPosition: barYPosition, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'rangebar' - }); - } - - ret.add(elSeries); - } - - return ret; - } - }, { - key: "detectOverlappingBars", - value: function detectOverlappingBars(_ref) { - var i = _ref.i, - j = _ref.j, - barYPosition = _ref.barYPosition, - srty = _ref.srty, - barHeight = _ref.barHeight, - yDivision = _ref.yDivision, - initPositions = _ref.initPositions; - var w = this.w; - var overlaps = []; - var rangeName = w.config.series[i].data[j].rangeName; - var labelX = w.config.series[i].data[j].x; - var rowIndex = w.globals.labels.indexOf(labelX); - var overlappedIndex = w.globals.seriesRangeBarTimeline[i].findIndex(function (tx) { - return tx.x === labelX && tx.overlaps.length > 0; - }); - barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex; - - if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) { - overlaps = w.globals.seriesRangeBarTimeline[i][overlappedIndex].overlaps; - - if (overlaps.indexOf(rangeName) > -1) { - barHeight = initPositions.barHeight / overlaps.length; - barYPosition = barHeight * this.visibleI + yDivision * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + barHeight * (this.visibleI + overlaps.indexOf(rangeName)) + yDivision * rowIndex; - } - } - - return { - barYPosition: barYPosition, - barHeight: barHeight - }; - } - }, { - key: "drawRangeColumnPaths", - value: function drawRangeColumnPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - strokeWidth = _ref2.strokeWidth, - xDivision = _ref2.xDivision, - barWidth = _ref2.barWidth, - zeroH = _ref2.zeroH; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var range = this.getRangeValue(realIndex, j); - var y1 = Math.min(range.start, range.end); - var y2 = Math.max(range.start, range.end); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - } - - var barHeight = Math.abs(y2 - y1); - var paths = this.barHelpers.getColumnPaths({ - barXPosition: barXPosition, - barWidth: barWidth, - y1: y1, - y2: y2, - strokeWidth: this.strokeWidth, - series: this.seriesRangeEnd, - i: realIndex, - j: j, - w: w - }); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: paths.pathTo, - pathFrom: paths.pathFrom, - barHeight: barHeight, - x: x, - y: y2, - barXPosition: barXPosition - }; - } - }, { - key: "drawRangeBarPaths", - value: function drawRangeBarPaths(_ref3) { - var indexes = _ref3.indexes, - y = _ref3.y, - y1 = _ref3.y1, - y2 = _ref3.y2, - yDivision = _ref3.yDivision, - barHeight = _ref3.barHeight, - barYPosition = _ref3.barYPosition, - zeroW = _ref3.zeroW; - var w = this.w; - var x1 = zeroW + y1 / this.invertedYRatio; - var x2 = zeroW + y2 / this.invertedYRatio; - var barWidth = Math.abs(x2 - x1); - var paths = this.barHelpers.getBarpaths({ - barYPosition: barYPosition, - barHeight: barHeight, - x1: x1, - x2: x2, - strokeWidth: this.strokeWidth, - series: this.seriesRangeEnd, - i: indexes.realIndex, - j: indexes.j, - w: w - }); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - return { - pathTo: paths.pathTo, - pathFrom: paths.pathFrom, - barWidth: barWidth, - x: x2, - y: y - }; - } - }, { - key: "getRangeValue", - value: function getRangeValue(i, j) { - var w = this.w; - return { - start: w.globals.seriesRangeStart[i][j], - end: w.globals.seriesRangeEnd[i][j] - }; - } - }, { - key: "getTooltipValues", - value: function getTooltipValues(_ref4) { - var ctx = _ref4.ctx, - seriesIndex = _ref4.seriesIndex, - dataPointIndex = _ref4.dataPointIndex, - y1 = _ref4.y1, - y2 = _ref4.y2, - w = _ref4.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - var ylabel = w.globals.labels[dataPointIndex]; - var seriesName = w.config.series[seriesIndex].name; - var yLbFormatter = w.config.tooltip.y.formatter; - var yLbTitleFormatter = w.config.tooltip.y.title.formatter; - var opts = { - w: w, - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex - }; - - if (typeof yLbTitleFormatter === 'function') { - seriesName = yLbTitleFormatter(seriesName, opts); - } - - if (y1 && y2) { - start = y1; - end = y2; - - if (w.config.series[seriesIndex].data[dataPointIndex].x) { - ylabel = w.config.series[seriesIndex].data[dataPointIndex].x + ':'; - } - - if (typeof yLbFormatter === 'function') { - ylabel = yLbFormatter(ylabel, opts); - } - } - - var startVal = ''; - var endVal = ''; - var color = w.globals.colors[seriesIndex]; - - if (w.config.tooltip.x.formatter === undefined) { - if (w.config.xaxis.type === 'datetime') { - var datetimeObj = new DateTime(ctx); - startVal = datetimeObj.formatDate(datetimeObj.getDate(start), w.config.tooltip.x.format); - endVal = datetimeObj.formatDate(datetimeObj.getDate(end), w.config.tooltip.x.format); - } else { - startVal = start; - endVal = end; - } - } else { - startVal = w.config.tooltip.x.formatter(start); - endVal = w.config.tooltip.x.formatter(end); - } - - return { - start: start, - end: end, - startVal: startVal, - endVal: endVal, - ylabel: ylabel, - color: color, - seriesName: seriesName - }; - } - }, { - key: "buildCustomTooltipHTML", - value: function buildCustomTooltipHTML(_ref5) { - var color = _ref5.color, - seriesName = _ref5.seriesName, - ylabel = _ref5.ylabel, - start = _ref5.start, - end = _ref5.end; - return '
' + '
' + (seriesName ? seriesName : '') + '
' + '
' + ylabel + ' ' + start + ' - ' + end + '
' + '
'; - } - }]); - - return RangeBar; - }(Bar); - - /** - * ApexCharts Default Class for setting default options for all chart types. - * - * @module Defaults - **/ - - var Defaults = /*#__PURE__*/function () { - function Defaults(opts) { - _classCallCheck(this, Defaults); - - this.opts = opts; - } - - _createClass(Defaults, [{ - key: "line", - value: function line() { - return { - chart: { - animations: { - easing: 'swing' - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 5, - curve: 'straight' - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "sparkline", - value: function sparkline(defaults) { - this.opts.yaxis[0].show = false; - this.opts.yaxis[0].title.text = ''; - this.opts.yaxis[0].axisBorder.show = false; - this.opts.yaxis[0].axisTicks.show = false; - this.opts.yaxis[0].floating = true; - var ret = { - grid: { - show: false, - padding: { - left: 0, - right: 0, - top: 0, - bottom: 0 - } - }, - legend: { - show: false - }, - xaxis: { - labels: { - show: false - }, - tooltip: { - enabled: false - }, - axisBorder: { - show: false - }, - axisTicks: { - show: false - } - }, - chart: { - toolbar: { - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "bar", - value: function bar() { - return { - chart: { - stacked: false, - animations: { - easing: 'swing' - } - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - style: { - colors: ['#fff'] - }, - background: { - enabled: false - } - }, - stroke: { - width: 0, - lineCap: 'square' - }, - fill: { - opacity: 0.85 - }, - legend: { - markers: { - shape: 'square', - radius: 2, - size: 8 - } - }, - tooltip: { - shared: false - }, - xaxis: { - tooltip: { - enabled: false - }, - tickPlacement: 'between', - crosshairs: { - width: 'barWidth', - position: 'back', - fill: { - type: 'gradient' - }, - dropShadow: { - enabled: false - }, - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "candlestick", - value: function candlestick() { - return { - stroke: { - width: 1, - colors: ['#333'] - }, - fill: { - opacity: 1 - }, - dataLabels: { - enabled: false - }, - tooltip: { - shared: true, - custom: function custom(_ref) { - var seriesIndex = _ref.seriesIndex, - dataPointIndex = _ref.dataPointIndex, - w = _ref.w; - var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex]; - var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex]; - var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex]; - var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex]; - return '
' + '
Open: ' + o + '
' + '
High: ' + h + '
' + '
Low: ' + l + '
' + '
Close: ' + c + '
' + '
'; - } - }, - states: { - active: { - filter: { - type: 'none' - } - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "rangeBar", - value: function rangeBar() { - var handleTimelineTooltip = function handleTimelineTooltip(opts) { - var rangeCtx = new RangeBar(opts.ctx, null); - - var _rangeCtx$getTooltipV = rangeCtx.getTooltipValues(opts), - color = _rangeCtx$getTooltipV.color, - seriesName = _rangeCtx$getTooltipV.seriesName, - ylabel = _rangeCtx$getTooltipV.ylabel, - startVal = _rangeCtx$getTooltipV.startVal, - endVal = _rangeCtx$getTooltipV.endVal; - - return rangeCtx.buildCustomTooltipHTML({ - color: color, - seriesName: seriesName, - ylabel: ylabel, - start: startVal, - end: endVal - }); - }; - - var handleRangeColumnTooltip = function handleRangeColumnTooltip(opts) { - var rangeCtx = new RangeBar(opts.ctx, null); - - var _rangeCtx$getTooltipV2 = rangeCtx.getTooltipValues(opts), - color = _rangeCtx$getTooltipV2.color, - seriesName = _rangeCtx$getTooltipV2.seriesName, - ylabel = _rangeCtx$getTooltipV2.ylabel, - start = _rangeCtx$getTooltipV2.start, - end = _rangeCtx$getTooltipV2.end; - - return rangeCtx.buildCustomTooltipHTML({ - color: color, - seriesName: seriesName, - ylabel: ylabel, - start: start, - end: end - }); - }; - - return { - stroke: { - width: 0, - lineCap: 'square' - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - enabled: false, - formatter: function formatter(val, _ref2) { - var ctx = _ref2.ctx, - seriesIndex = _ref2.seriesIndex, - dataPointIndex = _ref2.dataPointIndex, - w = _ref2.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - return end - start; - }, - background: { - enabled: false - }, - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - followCursor: true, - custom: function custom(opts) { - if (opts.w.config.plotOptions && opts.w.config.plotOptions.bar && opts.w.config.plotOptions.bar.horizontal) { - return handleTimelineTooltip(opts); - } else { - return handleRangeColumnTooltip(opts); - } - } - }, - xaxis: { - tickPlacement: 'between', - tooltip: { - enabled: false - }, - crosshairs: { - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "area", - value: function area() { - return { - stroke: { - width: 4 - }, - fill: { - type: 'gradient', - gradient: { - inverseColors: false, - shade: 'light', - type: 'vertical', - opacityFrom: 0.65, - opacityTo: 0.5, - stops: [0, 100, 100] - } - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - tooltip: { - followCursor: false - } - }; - } - }, { - key: "brush", - value: function brush(defaults) { - var ret = { - chart: { - toolbar: { - autoSelected: 'selection', - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 1 - }, - tooltip: { - enabled: false - }, - xaxis: { - tooltip: { - enabled: false - } - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "stacked100", - value: function stacked100(opts) { - opts.dataLabels = opts.dataLabels || {}; - opts.dataLabels.formatter = opts.dataLabels.formatter || undefined; - var existingDataLabelFormatter = opts.dataLabels.formatter; - opts.yaxis.forEach(function (yaxe, index) { - opts.yaxis[index].min = 0; - opts.yaxis[index].max = 100; - }); - var isBar = opts.chart.type === 'bar'; - - if (isBar) { - opts.dataLabels.formatter = existingDataLabelFormatter || function (val) { - if (typeof val === 'number') { - return val ? val.toFixed(0) + '%' : val; - } - - return val; - }; - } - - return opts; - } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area - - }, { - key: "convertCatToNumeric", - value: function convertCatToNumeric(opts) { - opts.xaxis.convertedCatToNumeric = true; - return opts; - } - }, { - key: "convertCatToNumericXaxis", - value: function convertCatToNumericXaxis(opts, ctx, cats) { - opts.xaxis.type = 'numeric'; - opts.xaxis.labels = opts.xaxis.labels || {}; - - opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) { - return Utils.isNumber(val) ? Math.floor(val) : val; - }; - - var defaultFormatter = opts.xaxis.labels.formatter; - var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels; - - if (cats && cats.length) { - labels = cats.map(function (c) { - return c.toString(); - }); - } - - if (labels && labels.length) { - opts.xaxis.labels.formatter = function (val) { - return Utils.isNumber(val) ? defaultFormatter(labels[Math.floor(val) - 1]) : defaultFormatter(val); - }; - } - - opts.xaxis.categories = []; - opts.labels = []; - opts.xaxis.tickAmount = opts.xaxis.tickAmount || 'dataPoints'; - return opts; - } - }, { - key: "bubble", - value: function bubble() { - return { - dataLabels: { - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - intersect: true - }, - xaxis: { - crosshairs: { - width: 0 - } - }, - fill: { - type: 'solid', - gradient: { - shade: 'light', - inverse: true, - shadeIntensity: 0.55, - opacityFrom: 0.4, - opacityTo: 0.8 - } - } - }; - } - }, { - key: "scatter", - value: function scatter() { - return { - dataLabels: { - enabled: false - }, - tooltip: { - shared: false, - intersect: true - }, - markers: { - size: 6, - strokeWidth: 1, - hover: { - sizeOffset: 2 - } - } - }; - } - }, { - key: "heatmap", - value: function heatmap() { - return { - chart: { - stacked: false - }, - fill: { - opacity: 1 - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - colors: ['#fff'] - }, - tooltip: { - followCursor: true, - marker: { - show: false - }, - x: { - show: false - } - }, - legend: { - position: 'top', - markers: { - shape: 'square', - size: 10, - offsetY: 2 - } - }, - grid: { - padding: { - right: 20 - } - } - }; - } - }, { - key: "pie", - value: function pie() { - return { - chart: { - toolbar: { - show: false - } - }, - plotOptions: { - pie: { - donut: { - labels: { - show: false - } - } - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'light', - stops: [0, 100] - } - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "donut", - value: function donut() { - return { - chart: { - toolbar: { - show: false - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'light', - shadeIntensity: 0.35, - stops: [80, 100], - opacityFrom: 1, - opacityTo: 1 - } - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "polarArea", - value: function polarArea() { - this.opts.yaxis[0].tickAmount = this.opts.yaxis[0].tickAmount ? this.opts.yaxis[0].tickAmount : 6; - return { - chart: { - toolbar: { - show: false - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - enabled: false - }, - stroke: { - show: true, - width: 2 - }, - fill: { - opacity: 0.7 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "radar", - value: function radar() { - this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6; - return { - dataLabels: { - enabled: false, - style: { - fontSize: '11px' - } - }, - stroke: { - width: 2 - }, - markers: { - size: 3, - strokeWidth: 1, - strokeOpacity: 1 - }, - fill: { - opacity: 0.2 - }, - tooltip: { - shared: false, - intersect: true, - followCursor: true - }, - grid: { - show: false - }, - xaxis: { - labels: { - formatter: function formatter(val) { - return val; - }, - style: { - colors: ['#a8a8a8'], - fontSize: '11px' - } - }, - tooltip: { - enabled: false - }, - crosshairs: { - show: false - } - } - }; - } - }, { - key: "radialBar", - value: function radialBar() { - return { - chart: { - animations: { - dynamicAnimation: { - enabled: true, - speed: 800 - } - }, - toolbar: { - show: false - } - }, - fill: { - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'diagonal2', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - legend: { - show: false, - position: 'right' - }, - tooltip: { - enabled: false, - fillSeriesColor: true - } - }; - } - }]); - - return Defaults; - }(); - - /** - * ApexCharts Config Class for extending user options with pre-defined ApexCharts config. - * - * @module Config - **/ - - var Config = /*#__PURE__*/function () { - function Config(opts) { - _classCallCheck(this, Config); - - this.opts = opts; - } - - _createClass(Config, [{ - key: "init", - value: function init(_ref) { - var responsiveOverride = _ref.responsiveOverride; - var opts = this.opts; - var options = new Options(); - var defaults = new Defaults(opts); - this.chartType = opts.chart.type; - - if (this.chartType === 'histogram') { - // technically, a histogram can be drawn by a column chart with no spaces in between - opts.chart.type = 'bar'; - opts = Utils.extend({ - plotOptions: { - bar: { - columnWidth: '99.99%' - } - } - }, opts); - } - - opts = this.extendYAxis(opts); - opts = this.extendAnnotations(opts); - var config = options.init(); - var newDefaults = {}; - - if (opts && _typeof(opts) === 'object') { - var chartDefaults = {}; - var chartTypes = ['line', 'area', 'bar', 'candlestick', 'rangeBar', 'histogram', 'bubble', 'scatter', 'heatmap', 'pie', 'polarArea', 'donut', 'radar', 'radialBar']; - - if (chartTypes.indexOf(opts.chart.type) !== -1) { - chartDefaults = defaults[opts.chart.type](); - } else { - chartDefaults = defaults.line(); - } - - if (opts.chart.brush && opts.chart.brush.enabled) { - chartDefaults = defaults.brush(chartDefaults); - } - - if (opts.chart.stacked && opts.chart.stackType === '100%') { - opts = defaults.stacked100(opts); - } // If user has specified a dark theme, make the tooltip dark too - - - this.checkForDarkTheme(window.Apex); // check global window Apex options - - this.checkForDarkTheme(opts); // check locally passed options - - opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; // an important boolean needs to be set here - // otherwise all the charts will have this flag set to true window.Apex.xaxis is set globally - - if (!responsiveOverride) { - opts.xaxis.convertedCatToNumeric = false; - } - - opts = this.checkForCatToNumericXAxis(this.chartType, chartDefaults, opts); - - if (opts.chart.sparkline && opts.chart.sparkline.enabled || window.Apex.chart && window.Apex.chart.sparkline && window.Apex.chart.sparkline.enabled) { - chartDefaults = defaults.sparkline(chartDefaults); - } - - newDefaults = Utils.extend(config, chartDefaults); - } // config should cascade in this fashion - // default-config < global-apex-variable-config < user-defined-config - // get GLOBALLY defined options and merge with the default config - - - var mergedWithDefaultConfig = Utils.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config - - config = Utils.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled - - config = this.handleUserInputErrors(config); - return config; - } - }, { - key: "checkForCatToNumericXAxis", - value: function checkForCatToNumericXAxis(chartType, chartDefaults, opts) { - var defaults = new Defaults(opts); - var isBarHorizontal = chartType === 'bar' && opts.plotOptions && opts.plotOptions.bar && opts.plotOptions.bar.horizontal; - var unsupportedZoom = chartType === 'pie' || chartType === 'polarArea' || chartType === 'donut' || chartType === 'radar' || chartType === 'radialBar' || chartType === 'heatmap'; - var notNumericXAxis = opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric'; - var tickPlacement = opts.xaxis.tickPlacement ? opts.xaxis.tickPlacement : chartDefaults.xaxis && chartDefaults.xaxis.tickPlacement; - - if (!isBarHorizontal && !unsupportedZoom && notNumericXAxis && tickPlacement !== 'between') { - opts = defaults.convertCatToNumeric(opts); - } - - return opts; - } - }, { - key: "extendYAxis", - value: function extendYAxis(opts, w) { - var options = new Options(); - - if (typeof opts.yaxis === 'undefined' || !opts.yaxis || Array.isArray(opts.yaxis) && opts.yaxis.length === 0) { - opts.yaxis = {}; - } // extend global yaxis config (only if object is provided / not an array) - - - if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) { - opts.yaxis = Utils.extend(opts.yaxis, window.Apex.yaxis); - } // as we can't extend nested object's array with extend, we need to do it first - // user can provide either an array or object in yaxis config - - - if (opts.yaxis.constructor !== Array) { - // convert the yaxis to array if user supplied object - opts.yaxis = [Utils.extend(options.yAxis, opts.yaxis)]; - } else { - opts.yaxis = Utils.extendArray(opts.yaxis, options.yAxis); - } - - var isLogY = false; - opts.yaxis.forEach(function (y) { - if (y.logarithmic) { - isLogY = true; - } - }); - var series = opts.series; - - if (w && !series) { - series = w.config.series; - } // A logarithmic chart works correctly when each series has a corresponding y-axis - // If this is not the case, we manually create yaxis for multi-series log chart - - - if (isLogY && series.length !== opts.yaxis.length && series.length) { - opts.yaxis = series.map(function (s, i) { - if (!s.name) { - series[i].name = "series-".concat(i + 1); - } - - if (opts.yaxis[i]) { - opts.yaxis[i].seriesName = series[i].name; - return opts.yaxis[i]; - } else { - var newYaxis = Utils.extend(options.yAxis, opts.yaxis[0]); - newYaxis.show = false; - return newYaxis; - } - }); - } - - if (isLogY && series.length > 1 && series.length !== opts.yaxis.length) { - console.warn('A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.'); - } - - return opts; - } // annotations also accepts array, so we need to extend them manually - - }, { - key: "extendAnnotations", - value: function extendAnnotations(opts) { - if (typeof opts.annotations === 'undefined') { - opts.annotations = {}; - opts.annotations.yaxis = []; - opts.annotations.xaxis = []; - opts.annotations.points = []; - } - - opts = this.extendYAxisAnnotations(opts); - opts = this.extendXAxisAnnotations(opts); - opts = this.extendPointAnnotations(opts); - return opts; - } - }, { - key: "extendYAxisAnnotations", - value: function extendYAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.yaxis = Utils.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation); - return opts; - } - }, { - key: "extendXAxisAnnotations", - value: function extendXAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.xaxis = Utils.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation); - return opts; - } - }, { - key: "extendPointAnnotations", - value: function extendPointAnnotations(opts) { - var options = new Options(); - opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); - return opts; - } - }, { - key: "checkForDarkTheme", - value: function checkForDarkTheme(opts) { - if (opts.theme && opts.theme.mode === 'dark') { - if (!opts.tooltip) { - opts.tooltip = {}; - } - - if (opts.tooltip.theme !== 'light') { - opts.tooltip.theme = 'dark'; - } - - if (!opts.chart.foreColor) { - opts.chart.foreColor = '#f6f7f8'; - } - - if (!opts.theme.palette) { - opts.theme.palette = 'palette4'; - } - } - } - }, { - key: "handleUserInputErrors", - value: function handleUserInputErrors(opts) { - var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it - - if (config.tooltip.shared && config.tooltip.intersect) { - throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.'); - } - - if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { - // No multiple yaxis for bars - if (config.yaxis.length > 1) { - throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side - - - if (config.yaxis[0].reversed) { - config.yaxis[0].opposite = true; - } - - config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.chart.zoom.enabled = false; // no zooming for horz bars - } - - if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { - if (config.tooltip.shared) { - if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { - console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); - config.xaxis.crosshairs.width = 'tickWidth'; - } - - if (config.plotOptions.bar.horizontal) { - config.states.hover.type = 'none'; - config.tooltip.shared = false; - } - - if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); - config.tooltip.followCursor = true; - } - } - } - - if (config.chart.type === 'candlestick') { - if (config.yaxis[0].reversed) { - console.warn('Reversed y-axis in candlestick chart is not supported.'); - config.yaxis[0].reversed = false; - } - } - - if (config.chart.group && config.yaxis[0].labels.minWidth === 0) { - console.warn('It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.'); - } // if user supplied array for stroke width, it will only be applicable to line/area charts, for any other charts, revert back to Number - - - if (Array.isArray(config.stroke.width)) { - if (config.chart.type !== 'line' && config.chart.type !== 'area') { - console.warn('stroke.width option accepts array only for line and area charts. Reverted back to Number'); - config.stroke.width = config.stroke.width[0]; - } - } - - return config; - } - }]); - - return Config; - }(); - - var Globals = /*#__PURE__*/function () { - function Globals() { - _classCallCheck(this, Globals); - } - - _createClass(Globals, [{ - key: "initGlobalVars", - value: function initGlobalVars(gl) { - gl.series = []; // the MAIN series array (y values) - - gl.seriesCandleO = []; - gl.seriesCandleH = []; - gl.seriesCandleL = []; - gl.seriesCandleC = []; - gl.seriesRangeStart = []; - gl.seriesRangeEnd = []; - gl.seriesRangeBarTimeline = []; - gl.seriesPercent = []; - gl.seriesX = []; - gl.seriesZ = []; - gl.seriesNames = []; - gl.seriesTotals = []; - gl.seriesLog = []; - gl.stackedSeriesTotals = []; - gl.seriesXvalues = []; // we will need this in tooltip (it's x position) - // when we will have unequal x values, we will need - // some way to get x value depending on mouse pointer - - gl.seriesYvalues = []; // we will need this when deciding which series - // user hovered on - - gl.labels = []; - gl.categoryLabels = []; - gl.timescaleLabels = []; - gl.noLabelsProvided = false; - gl.resizeTimer = null; - gl.selectionResizeTimer = null; - gl.delayedElements = []; - gl.pointsArray = []; - gl.dataLabelsRects = []; - gl.isXNumeric = false; - gl.xaxisLabelsCount = 0; - gl.skipLastTimelinelabel = false; - gl.skipFirstTimelinelabel = false; - gl.x2SpaceAvailable = 0; - gl.isDataXYZ = false; - gl.isMultiLineX = false; - gl.isMultipleYAxis = false; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - gl.minYArr = []; - gl.maxYArr = []; - gl.maxX = -Number.MAX_VALUE; - gl.minX = Number.MAX_VALUE; - gl.initialMaxX = -Number.MAX_VALUE; - gl.initialMinX = Number.MAX_VALUE; - gl.maxDate = 0; - gl.minDate = Number.MAX_VALUE; - gl.minZ = Number.MAX_VALUE; - gl.maxZ = -Number.MAX_VALUE; - gl.minXDiff = Number.MAX_VALUE; - gl.yAxisScale = []; - gl.xAxisScale = null; - gl.xAxisTicksPositions = []; - gl.yLabelsCoords = []; - gl.yTitleCoords = []; - gl.barPadForNumericAxis = 0; - gl.padHorizontal = 0; - gl.xRange = 0; - gl.yRange = []; - gl.zRange = 0; - gl.dataPoints = 0; - gl.xTickAmount = 0; - } - }, { - key: "globalVars", - value: function globalVars(config) { - return { - chartID: null, - // chart ID - apexcharts-cuid - cuid: null, - // chart ID - random numbers excluding "apexcharts" part - events: { - beforeMount: [], - mounted: [], - updated: [], - clicked: [], - selection: [], - dataPointSelection: [], - zoomed: [], - scrolled: [] - }, - colors: [], - clientX: null, - clientY: null, - fill: { - colors: [] - }, - stroke: { - colors: [] - }, - dataLabels: { - style: { - colors: [] - } - }, - radarPolygons: { - fill: { - colors: [] - } - }, - markers: { - colors: [], - size: config.markers.size, - largestSize: 0 - }, - animationEnded: false, - isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints, - isDirty: false, - // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update - isExecCalled: false, - // whether user updated the chart through the exec method - initialConfig: null, - // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it - initialSeries: [], - lastXAxis: [], - lastYAxis: [], - columnSeries: null, - labels: [], - // store the text to draw on x axis - // Don't mutate the labels, many things including tooltips depends on it! - timescaleLabels: [], - // store the timescaleLabels Labels in another variable - noLabelsProvided: false, - // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4... - allSeriesCollapsed: false, - collapsedSeries: [], - // when user collapses a series, it goes into this array - collapsedSeriesIndices: [], - // this stores the index of the collapsedSeries instead of whole object for quick access - ancillaryCollapsedSeries: [], - // when user collapses an "alwaysVisible" series, it goes into this array - ancillaryCollapsedSeriesIndices: [], - // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible - risingSeries: [], - // when user re-opens a collapsed series, it goes here - dataFormatXNumeric: false, - // boolean value to indicate user has passed numeric x values - capturedSeriesIndex: -1, - capturedDataPointIndex: -1, - selectedDataPoints: [], - goldenPadding: 35, - // this value is used at a lot of places for spacing purpose - invalidLogScale: false, - // if a user enabled log scale but the data provided is not valid to generate a log scale, turn on this flag - ignoreYAxisIndexes: [], - // when series are being collapsed in multiple y axes, ignore certain index - yAxisSameScaleIndices: [], - maxValsInArrayIndex: 0, - radialSize: 0, - zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled, - panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan, - selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection, - yaxis: null, - mousedown: false, - lastClientPosition: {}, - // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning - visibleXRange: undefined, - yValueDecimal: 0, - // are there floating numbers in the series. If yes, this represent the len of the decimals - total: 0, - SVGNS: 'http://www.w3.org/2000/svg', - // svg namespace - svgWidth: 0, - // the whole svg width - svgHeight: 0, - // the whole svg height - noData: false, - // whether there is any data to display or not - locale: {}, - // the current locale values will be preserved here for global access - dom: {}, - // for storing all dom nodes in this particular property - memory: { - methodsToExec: [] - }, - shouldAnimate: true, - skipLastTimelinelabel: false, - // when last label is cropped, skip drawing it - skipFirstTimelinelabel: false, - // when first label is cropped, skip drawing it - delayedElements: [], - // element which appear after animation has finished - axisCharts: true, - // chart type = line or area or bar - // (refer them also as plot charts in the code) - isDataXYZ: false, - // bool: data was provided in a {[x,y,z]} pattern - resized: false, - // bool: user has resized - resizeTimer: null, - // timeout function to make a small delay before - // drawing when user resized - comboCharts: false, - // bool: whether it's a combination of line/column - dataChanged: false, - // bool: has data changed dynamically - previousPaths: [], - // array: when data is changed, it will animate from - // previous paths - allSeriesHasEqualX: true, - pointsArray: [], - // store the points positions here to draw later on hover - // format is - [[x,y],[x,y]... [x,y]] - dataLabelsRects: [], - // store the positions of datalabels to prevent collision - lastDrawnDataLabelsIndexes: [], - x2SpaceAvailable: 0, - // space available on the right side after grid area - hasNullValues: false, - // bool: whether series contains null values - easing: null, - // function: animation effect to apply - zoomed: false, - // whether user has zoomed or not - gridWidth: 0, - // drawable width of actual graphs (series paths) - gridHeight: 0, - // drawable height of actual graphs (series paths) - rotateXLabels: false, - defaultLabels: false, - xLabelFormatter: undefined, - // formatter for x axis labels - yLabelFormatters: [], - xaxisTooltipFormatter: undefined, - // formatter for x axis tooltip - ttKeyFormatter: undefined, - ttVal: undefined, - ttZFormatter: undefined, - LINE_HEIGHT_RATIO: 1.618, - xAxisLabelsHeight: 0, - yAxisLabelsWidth: 0, - scaleX: 1, - scaleY: 1, - translateX: 0, - translateY: 0, - translateYAxisX: [], - yAxisWidths: [], - translateXAxisY: 0, - translateXAxisX: 0, - tooltip: null - }; - } - }, { - key: "init", - value: function init(config) { - var globals = this.globalVars(config); - this.initGlobalVars(globals); - globals.initialConfig = Utils.extend({}, config); - globals.initialSeries = Utils.clone(config.series); - globals.lastXAxis = JSON.parse(JSON.stringify(globals.initialConfig.xaxis)); - globals.lastYAxis = JSON.parse(JSON.stringify(globals.initialConfig.yaxis)); - return globals; - } - }]); - - return Globals; - }(); - - /** - * ApexCharts Base Class for extending user options with pre-defined ApexCharts config. - * - * @module Base - **/ - - var Base = /*#__PURE__*/function () { - function Base(opts) { - _classCallCheck(this, Base); - - this.opts = opts; - } - - _createClass(Base, [{ - key: "init", - value: function init() { - var config = new Config(this.opts).init({ - responsiveOverride: false - }); - var globals = new Globals().init(config); - var w = { - config: config, - globals: globals - }; - return w; - } - }]); - - return Base; - }(); - - var Data = /*#__PURE__*/function () { - function Data(ctx) { - _classCallCheck(this, Data); - - this.ctx = ctx; - this.w = ctx.w; - this.twoDSeries = []; - this.threeDSeries = []; - this.twoDSeriesX = []; - this.coreUtils = new CoreUtils(this.ctx); - } - - _createClass(Data, [{ - key: "isMultiFormat", - value: function isMultiFormat() { - return this.isFormatXY() || this.isFormat2DArray(); - } // given format is [{x, y}, {x, y}] - - }, { - key: "isFormatXY", - value: function isFormatXY() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) { - return true; - } - } // given format is [[x, y], [x, y]] - - }, { - key: "isFormat2DArray", - value: function isFormat2DArray() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) { - return true; - } - } - }, { - key: "handleFormat2DArray", - value: function handleFormat2DArray(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - - if (cnf.xaxis.sorted) { - if (cnf.xaxis.type === 'datetime') { - ser[i].data.sort(function (a, b) { - return new Date(a[0]).getTime() - new Date(b[0]).getTime(); - }); - } else if (cnf.xaxis.type === 'numeric') { - ser[i].data.sort(function (a, b) { - return a[0] - b[0]; - }); - } - } - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j][1] !== 'undefined') { - if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4) { - // candlestick nested ohlc format - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1][3])); - } else if (ser[i].data[j].length === 5) { - // candlestick non-nested ohlc format - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][4])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); - } - - gl.dataFormatXNumeric = true; - } - - if (cnf.xaxis.type === 'datetime') { - // if timestamps are provided and xaxis type is datettime, - var ts = new Date(ser[i].data[j][0]); - ts = new Date(ts).getTime(); - this.twoDSeriesX.push(ts); - } else { - this.twoDSeriesX.push(ser[i].data[j][0]); - } - } - - for (var _j = 0; _j < ser[i].data.length; _j++) { - if (typeof ser[i].data[_j][2] !== 'undefined') { - this.threeDSeries.push(ser[i].data[_j][2]); - gl.isDataXYZ = true; - } - } - } - }, { - key: "handleFormatXY", - value: function handleFormatXY(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(this.ctx); - var activeI = i; - - if (gl.collapsedSeriesIndices.indexOf(i) > -1) { - // fix #368 - activeI = this.activeSeriesIndex; - } - - if (cnf.xaxis.sorted) { - if (cnf.xaxis.type === 'datetime') { - ser[i].data.sort(function (a, b) { - return new Date(a.x).getTime() - new Date(b.x).getTime(); - }); - } else if (cnf.xaxis.type === 'numeric') { - ser[i].data.sort(function (a, b) { - return a.x - b.x; - }); - } - } // get series - - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y)) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); - } - } - } // get seriesX - - - for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) { - var isXString = typeof ser[activeI].data[_j2].x === 'string'; - var isXArr = Array.isArray(ser[activeI].data[_j2].x); - var isXDate = !isXArr && !!dt.isValidDate(ser[activeI].data[_j2].x.toString()); - - if (isXString || isXDate) { - // user supplied '01/01/2017' or a date string (a JS date object is not supported) - if (isXString || cnf.xaxis.convertedCatToNumeric) { - var isRangeColumn = gl.isBarHorizontal && gl.isRangeData; - - if (cnf.xaxis.type === 'datetime' && !isRangeColumn) { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); - } else { - // a category and not a numeric x value - this.fallbackToCategory = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } else { - if (cnf.xaxis.type === 'datetime') { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); - } else { - gl.dataFormatXNumeric = true; - gl.isXNumeric = true; - this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); - } - } - } else if (isXArr) { - // a multiline label described in array format - this.fallbackToCategory = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } else { - // a numeric value in x property - gl.isXNumeric = true; - gl.dataFormatXNumeric = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } - - if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') { - for (var t = 0; t < ser[i].data.length; t++) { - this.threeDSeries.push(ser[i].data[t].z); - } - - gl.isDataXYZ = true; - } - } - }, { - key: "handleRangeData", - value: function handleRangeData(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - var range = {}; - - if (this.isFormat2DArray()) { - range = this.handleRangeDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - range = this.handleRangeDataFormat('xy', ser, i); - } - - gl.seriesRangeStart.push(range.start); - gl.seriesRangeEnd.push(range.end); - - if (cnf.xaxis.type === 'datetime') { - gl.seriesRangeBarTimeline.push(range.rangeUniques); - } // check for overlaps to avoid clashes in a timeline chart - - - gl.seriesRangeBarTimeline.forEach(function (sr, si) { - if (sr) { - sr.forEach(function (sarr, sarri) { - sarr.y.forEach(function (arr, arri) { - for (var sri = 0; sri < sarr.y.length; sri++) { - if (arri !== sri) { - var range1y1 = arr.y1; - var range1y2 = arr.y2; - var range2y1 = sarr.y[sri].y1; - var range2y2 = sarr.y[sri].y2; - - if (range1y1 <= range2y2 && range2y1 <= range1y2) { - if (sarr.overlaps.indexOf(arr.rangeName) < 0) { - sarr.overlaps.push(arr.rangeName); - } - - if (sarr.overlaps.indexOf(sarr.y[sri].rangeName) < 0) { - sarr.overlaps.push(sarr.y[sri].rangeName); - } - } - } - } - }); - }); - } - }); - return range; - } - }, { - key: "handleCandleStickData", - value: function handleCandleStickData(ser, i) { - var gl = this.w.globals; - var ohlc = {}; - - if (this.isFormat2DArray()) { - ohlc = this.handleCandleStickDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - ohlc = this.handleCandleStickDataFormat('xy', ser, i); - } - - gl.seriesCandleO[i] = ohlc.o; - gl.seriesCandleH[i] = ohlc.h; - gl.seriesCandleL[i] = ohlc.l; - gl.seriesCandleC[i] = ohlc.c; - return ohlc; - } - }, { - key: "handleRangeDataFormat", - value: function handleRangeDataFormat(format, ser, i) { - var rangeStart = []; - var rangeEnd = []; - var uniqueKeys = ser[i].data.filter(function (thing, index, self) { - return index === self.findIndex(function (t) { - return t.x === thing.x; - }); - }).map(function (r, index) { - return { - x: r.x, - overlaps: [], - y: [] - }; - }); - var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; - var serObj = new Series(this.ctx); - var activeIndex = serObj.getActiveConfigSeriesIndex(); - - if (format === 'array') { - if (ser[activeIndex].data[0][1].length !== 2) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - rangeStart.push(ser[i].data[j][1][0]); - rangeEnd.push(ser[i].data[j][1][1]); - } - } else if (format === 'xy') { - if (ser[activeIndex].data[0].y.length !== 2) { - throw new Error(err); - } - - var _loop = function _loop(_j3) { - var id = Utils.randomId(); - var x = ser[i].data[_j3].x; - var y = { - y1: ser[i].data[_j3].y[0], - y2: ser[i].data[_j3].y[1], - rangeName: id - }; // mutating config object by adding a new property - // TODO: As this is specifically for timeline rangebar charts, update the docs mentioning the series only supports xy format - - ser[i].data[_j3].rangeName = id; - var uI = uniqueKeys.findIndex(function (t) { - return t.x === x; - }); - uniqueKeys[uI].y.push(y); - rangeStart.push(y.y1); - rangeEnd.push(y.y2); - }; - - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - _loop(_j3); - } - } - - return { - start: rangeStart, - end: rangeEnd, - rangeUniques: uniqueKeys - }; - } - }, { - key: "handleCandleStickDataFormat", - value: function handleCandleStickDataFormat(format, ser, i) { - var serO = []; - var serH = []; - var serL = []; - var serC = []; - var err = 'Please provide [Open, High, Low and Close] values in valid format. Read more https://apexcharts.com/docs/series/#candlestick'; - - if (format === 'array') { - if (!Array.isArray(ser[i].data[0][1]) && ser[i].data[0].length !== 5 || Array.isArray(ser[i].data[0][1]) && ser[i].data[0][1].length !== 4) { - throw new Error(err); - } - - if (ser[i].data[0].length === 5) { - for (var j = 0; j < ser[i].data.length; j++) { - serO.push(ser[i].data[j][1]); - serH.push(ser[i].data[j][2]); - serL.push(ser[i].data[j][3]); - serC.push(ser[i].data[j][4]); - } - } else { - for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { - serO.push(ser[i].data[_j4][1][0]); - serH.push(ser[i].data[_j4][1][1]); - serL.push(ser[i].data[_j4][1][2]); - serC.push(ser[i].data[_j4][1][3]); - } - } - } else if (format === 'xy') { - if (ser[i].data[0].y.length !== 4) { - throw new Error(err); - } - - for (var _j5 = 0; _j5 < ser[i].data.length; _j5++) { - serO.push(ser[i].data[_j5].y[0]); - serH.push(ser[i].data[_j5].y[1]); - serL.push(ser[i].data[_j5].y[2]); - serC.push(ser[i].data[_j5].y[3]); - } - } - - return { - o: serO, - h: serH, - l: serL, - c: serC - }; - } - }, { - key: "parseDataAxisCharts", - value: function parseDataAxisCharts(ser) { - var _this = this; - - var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx; - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(ctx); - var xlabels = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - var handleDates = function handleDates() { - for (var j = 0; j < xlabels.length; j++) { - if (typeof xlabels[j] === 'string') { - // user provided date strings - var isDate = dt.isValidDate(xlabels[j]); - - if (isDate) { - _this.twoDSeriesX.push(dt.parseDate(xlabels[j])); - } else { - throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date'); - } - } else { - // user provided timestamps - if (String(xlabels[j]).length !== 13) { - throw new Error('Please provide a valid JavaScript timestamp'); - } else { - _this.twoDSeriesX.push(xlabels[j]); - } - } - } - }; - - for (var i = 0; i < ser.length; i++) { - this.twoDSeries = []; - this.twoDSeriesX = []; - this.threeDSeries = []; - - if (typeof ser[i].data === 'undefined') { - console.error("It is a possibility that you may have not included 'data' property in series."); - return; - } - - if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { - gl.isRangeData = true; - this.handleRangeData(ser, i); - } - - if (this.isMultiFormat()) { - if (this.isFormat2DArray()) { - this.handleFormat2DArray(ser, i); - } else if (this.isFormatXY()) { - this.handleFormatXY(ser, i); - } - - if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick') { - this.handleCandleStickData(ser, i); - } - - gl.series.push(this.twoDSeries); - gl.labels.push(this.twoDSeriesX); - gl.seriesX.push(this.twoDSeriesX); - - if (i === this.activeSeriesIndex && !this.fallbackToCategory) { - gl.isXNumeric = true; - } - } else { - if (cnf.xaxis.type === 'datetime') { - // user didn't supplied [{x,y}] or [[x,y]], but single array in data. - // Also labels/categories were supplied differently - gl.isXNumeric = true; - handleDates(); - gl.seriesX.push(this.twoDSeriesX); - } else if (cnf.xaxis.type === 'numeric') { - gl.isXNumeric = true; - - if (xlabels.length > 0) { - this.twoDSeriesX = xlabels; - gl.seriesX.push(this.twoDSeriesX); - } - } - - gl.labels.push(this.twoDSeriesX); - var singleArray = ser[i].data.map(function (d) { - return Utils.parseNumber(d); - }); - gl.series.push(singleArray); - } - - gl.seriesZ.push(this.threeDSeries); - - if (ser[i].name !== undefined) { - gl.seriesNames.push(ser[i].name); - } else { - gl.seriesNames.push('series-' + parseInt(i + 1, 10)); - } - } - - return this.w; - } - }, { - key: "parseDataNonAxisCharts", - value: function parseDataNonAxisCharts(ser) { - var gl = this.w.globals; - var cnf = this.w.config; - gl.series = ser.slice(); - gl.seriesNames = cnf.labels.slice(); - - for (var i = 0; i < gl.series.length; i++) { - if (gl.seriesNames[i] === undefined) { - gl.seriesNames.push('series-' + (i + 1)); - } - } - - return this.w; - } - /** User possibly set string categories in xaxis.categories or labels prop - * Or didn't set xaxis labels at all - in which case we manually do it. - * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], - * this shouldn't be called - * @param {array} ser - the series which user passed to the config - */ - - }, { - key: "handleExternalLabelsData", - value: function handleExternalLabelsData(ser) { - var cnf = this.w.config; - var gl = this.w.globals; - - if (cnf.xaxis.categories.length > 0) { - // user provided labels in xaxis.category prop - gl.labels = cnf.xaxis.categories; - } else if (cnf.labels.length > 0) { - // user provided labels in labels props - gl.labels = cnf.labels.slice(); - } else if (this.fallbackToCategory) { - // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array - gl.labels = gl.labels[0]; - - if (gl.seriesRangeBarTimeline.length) { - gl.seriesRangeBarTimeline.map(function (srt) { - srt.forEach(function (sr) { - if (gl.labels.indexOf(sr.x) < 0 && sr.x) { - gl.labels.push(sr.x); - } - }); - }); - gl.labels = gl.labels.filter(function (elem, pos, arr) { - return arr.indexOf(elem) === pos; - }); - } - - if (cnf.xaxis.convertedCatToNumeric) { - var defaults = new Defaults(cnf); - defaults.convertCatToNumericXaxis(cnf, this.ctx, gl.seriesX[0]); - - this._generateExternalLabels(ser); - } - } else { - this._generateExternalLabels(ser); - } - } - }, { - key: "_generateExternalLabels", - value: function _generateExternalLabels(ser) { - var gl = this.w.globals; - var cnf = this.w.config; // user didn't provided any labels, fallback to 1-2-3-4-5 - - var labelArr = []; - - if (gl.axisCharts) { - if (gl.series.length > 0) { - for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { - labelArr.push(i + 1); - } - } - - gl.seriesX = []; // create gl.seriesX as it will be used in calculations of x positions - - for (var _i = 0; _i < ser.length; _i++) { - gl.seriesX.push(labelArr); - } // turn on the isXNumeric flag to allow minX and maxX to function properly - - - gl.isXNumeric = true; - } // no series to pull labels from, put a 0-10 series - // possibly, user collapsed all series. Hence we can't work with above calc - - - if (labelArr.length === 0) { - labelArr = gl.axisCharts ? [] : gl.series.map(function (gls, glsi) { - return glsi + 1; - }); - - for (var _i2 = 0; _i2 < ser.length; _i2++) { - gl.seriesX.push(labelArr); - } - } // Finally, pass the labelArr in gl.labels which will be printed on x-axis - - - gl.labels = labelArr; - - if (cnf.xaxis.convertedCatToNumeric) { - gl.categoryLabels = labelArr.map(function (l) { - return cnf.xaxis.labels.formatter(l); - }); - } // Turn on this global flag to indicate no labels were provided by user - - - gl.noLabelsProvided = true; - } // Segregate user provided data into appropriate vars - - }, { - key: "parseData", - value: function parseData(ser) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis - - this.fallbackToCategory = false; - this.ctx.core.resetGlobals(); - this.ctx.core.isMultipleY(); - - if (gl.axisCharts) { - // axisCharts includes line / area / column / scatter - this.parseDataAxisCharts(ser); - } else { - // non-axis charts are pie / donut - this.parseDataNonAxisCharts(ser); - } - - this.coreUtils.getLargestSeries(); // set Null values to 0 in all series when user hides/shows some series - - if (cnf.chart.type === 'bar' && cnf.chart.stacked) { - var series = new Series(this.ctx); - gl.series = series.setNullSeriesToZeroValues(gl.series); - } - - this.coreUtils.getSeriesTotals(); - - if (gl.axisCharts) { - this.coreUtils.getStackedSeriesTotals(); - } - - this.coreUtils.getPercentSeries(); - - if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { - // x-axis labels couldn't be detected; hence try searching every option in config - this.handleExternalLabelsData(ser); - } // check for multiline xaxis - - - var catLabels = this.coreUtils.getCategoryLabels(gl.labels); - - for (var l = 0; l < catLabels.length; l++) { - if (Array.isArray(catLabels[l])) { - gl.isMultiLineX = true; - break; - } - } - } - }, { - key: "excludeCollapsedSeriesInYAxis", - value: function excludeCollapsedSeriesInYAxis() { - var _this2 = this; - - var w = this.w; - w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) { - // fix issue #1215 - // if stacked, not returning collapsed.index to preserve yaxis - if (_this2.w.globals.isMultipleYAxis && !w.config.chart.stacked) { - return collapsed.index; - } - }); - } - }]); - - return Data; - }(); - - /** - * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. - * - * @module Formatters - **/ - - var Formatters = /*#__PURE__*/function () { - function Formatters(ctx) { - _classCallCheck(this, Formatters); - - this.ctx = ctx; - this.w = ctx.w; - this.tooltipKeyFormat = 'dd MMM'; - } - - _createClass(Formatters, [{ - key: "xLabelFormat", - value: function xLabelFormat(fn, val, timestamp) { - var w = this.w; - - if (w.config.xaxis.type === 'datetime') { - if (w.config.xaxis.labels.formatter === undefined) { - // if user has not specified a custom formatter, use the default tooltip.x.format - if (w.config.tooltip.x.formatter === undefined) { - var datetimeObj = new DateTime(this.ctx); - return datetimeObj.formatDate(datetimeObj.getDate(val), w.config.tooltip.x.format); - } - } - } - - return fn(val, timestamp); - } - }, { - key: "defaultGeneralFormatter", - value: function defaultGeneralFormatter(val) { - if (Array.isArray(val)) { - return val.map(function (v) { - return v; - }); - } else { - return val; - } - } - }, { - key: "defaultYFormatter", - value: function defaultYFormatter(v, yaxe, i) { - var w = this.w; - - if (Utils.isNumber(v)) { - if (w.globals.yValueDecimal !== 0) { - v = v.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); - } else if (w.globals.maxYArr[i] - w.globals.minYArr[i] < 10) { - v = v.toFixed(1); - } else { - v = v.toFixed(0); - } - } - - return v; - } - }, { - key: "setLabelFormatters", - value: function setLabelFormatters() { - var _this = this; - - var w = this.w; - - w.globals.xLabelFormatter = function (val) { - return _this.defaultGeneralFormatter(val); - }; - - w.globals.xaxisTooltipFormatter = function (val) { - return _this.defaultGeneralFormatter(val); - }; - - w.globals.ttKeyFormatter = function (val) { - return _this.defaultGeneralFormatter(val); - }; - - w.globals.ttZFormatter = function (val) { - return val; - }; - - w.globals.legendFormatter = function (val) { - return _this.defaultGeneralFormatter(val); - }; // formatter function will always overwrite format property - - - if (w.config.xaxis.labels.formatter !== undefined) { - w.globals.xLabelFormatter = w.config.xaxis.labels.formatter; - } else { - w.globals.xLabelFormatter = function (val) { - if (Utils.isNumber(val)) { - // numeric xaxis may have smaller range, so defaulting to 1 decimal - if (!w.config.xaxis.convertedCatToNumeric && w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) { - return val.toFixed(1); - } - - if (w.globals.isBarHorizontal) { - var range = w.globals.maxY - w.globals.minYArr; - - if (range < 4) { - return val.toFixed(1); - } - } - - return val.toFixed(0); - } - - return val; - }; - } - - if (typeof w.config.tooltip.x.formatter === 'function') { - w.globals.ttKeyFormatter = w.config.tooltip.x.formatter; - } else { - w.globals.ttKeyFormatter = w.globals.xLabelFormatter; - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter; - } - - if (Array.isArray(w.config.tooltip.y)) { - w.globals.ttVal = w.config.tooltip.y; - } else { - if (w.config.tooltip.y.formatter !== undefined) { - w.globals.ttVal = w.config.tooltip.y; - } - } - - if (w.config.tooltip.z.formatter !== undefined) { - w.globals.ttZFormatter = w.config.tooltip.z.formatter; - } // legend formatter - if user wants to append any global values of series to legend text - - - if (w.config.legend.formatter !== undefined) { - w.globals.legendFormatter = w.config.legend.formatter; - } // formatter function will always overwrite format property - - - w.config.yaxis.forEach(function (yaxe, i) { - if (yaxe.labels.formatter !== undefined) { - w.globals.yLabelFormatters[i] = yaxe.labels.formatter; - } else { - w.globals.yLabelFormatters[i] = function (val) { - if (!w.globals.xyCharts) return val; - - if (Array.isArray(val)) { - return val.map(function (v) { - return _this.defaultYFormatter(v, yaxe, i); - }); - } else { - return _this.defaultYFormatter(val, yaxe, i); - } - }; - } - }); - return w.globals; - } - }, { - key: "heatmapLabelFormatters", - value: function heatmapLabelFormatters() { - var w = this.w; - - if (w.config.chart.type === 'heatmap') { - w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); // get the longest string from the labels array and also apply label formatter to it - - var longest = w.globals.seriesNames.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - w.globals.yAxisScale[0].niceMax = longest; - w.globals.yAxisScale[0].niceMin = longest; - } - } - }]); - - return Formatters; - }(); - - var AxesUtils = /*#__PURE__*/function () { - function AxesUtils(ctx) { - _classCallCheck(this, AxesUtils); - - this.ctx = ctx; - this.w = ctx.w; - } // Based on the formatter function, get the label text and position - - - _createClass(AxesUtils, [{ - key: "getLabel", - value: function getLabel(labels, timescaleLabels, x, i) { - var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var fontSize = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '12px'; - var w = this.w; - var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; - var label = rawLabel; - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; - var isBold = false; - var xFormat = new Formatters(this.ctx); - var timestamp = rawLabel; - label = xFormat.xLabelFormat(xlbFormatter, rawLabel, timestamp); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, labels[i], i); - } - - var determineHighestUnit = function determineHighestUnit(unit) { - var highestUnit = null; - timescaleLabels.forEach(function (t) { - if (t.unit === 'month') { - highestUnit = 'year'; - } else if (t.unit === 'day') { - highestUnit = 'month'; - } else if (t.unit === 'hour') { - highestUnit = 'day'; - } else if (t.unit === 'minute') { - highestUnit = 'hour'; - } - }); - return highestUnit === unit; - }; - - if (timescaleLabels.length > 0) { - isBold = determineHighestUnit(timescaleLabels[i].unit); - x = timescaleLabels[i].position; - label = timescaleLabels[i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - if (typeof label === 'undefined') label = ''; - label = Array.isArray(label) ? label : label.toString(); - var graphics = new Graphics(this.ctx); - var textRect = {}; - - if (w.globals.rotateXLabels) { - textRect = graphics.getTextRects(label, parseInt(fontSize, 10), null, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); - } else { - textRect = graphics.getTextRects(label, parseInt(fontSize, 10)); - } - - if (!Array.isArray(label) && (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates)) { - label = ''; - } - - return { - x: x, - text: label, - textRect: textRect, - isBold: isBold - }; - } - }, { - key: "checkForOverflowingLabels", - value: function checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects) { - var w = this.w; - - if (i === 0) { - // check if first label is being truncated - if (w.globals.skipFirstTimelinelabel) { - label.text = ''; - } - } - - if (i === labelsLen - 1) { - // check if last label is being truncated - if (w.globals.skipLastTimelinelabel) { - label.text = ''; - } - } - - if (w.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) { - var prev = drawnLabelsRects[drawnLabelsRects.length - 1]; - - if (label.x < prev.textRect.width / (w.globals.rotateXLabels ? Math.abs(w.config.xaxis.labels.rotate) / 12 : 1.01) + prev.x) { - label.text = ''; - } - } - - return label; - } - }, { - key: "checkForReversedLabels", - value: function checkForReversedLabels(i, labels) { - var w = this.w; - - if (w.config.yaxis[i] && w.config.yaxis[i].reversed) { - labels.reverse(); - } - - return labels; - } - }, { - key: "isYAxisHidden", - value: function isYAxisHidden(index) { - var w = this.w; - var coreUtils = new CoreUtils(this.ctx); - return !w.config.yaxis[index].show || !w.config.yaxis[index].showForNullSeries && coreUtils.isSeriesNull(index) && w.globals.collapsedSeriesIndices.indexOf(index) === -1; - } - }, { - key: "drawYAxisTicks", - value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show && tickAmount > 0) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (w.globals.isBarHorizontal) { - tY = labelsDivider * i; - } - - if (w.config.chart.type === 'heatmap') { - tY = tY + labelsDivider / 2; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisTicks.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }]); - - return AxesUtils; - }(); - - var Exports = /*#__PURE__*/function () { - function Exports(ctx) { - _classCallCheck(this, Exports); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Exports, [{ - key: "fixSvgStringForIe11", - value: function fixSvgStringForIe11(svgData) { - // IE11 generates broken SVG that we have to fix by using regex - if (!Utils.isIE11()) { - // not IE11 - noop - return svgData; - } // replace second occurence of "xmlns" attribute with "xmlns:xlink" with correct url + add xmlns:svgjs - - - var nXmlnsSeen = 0; - var result = svgData.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g, function (match) { - nXmlnsSeen++; - return nXmlnsSeen === 2 ? 'xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs"' : match; - }); // remove the invalid empty namespace declarations - - result = result.replace(/xmlns:NS\d+=""/g, ''); // remove these broken namespaces from attributes - - result = result.replace(/NS\d+:(\w+:\w+=")/g, '$1'); - return result; - } - }, { - key: "getSvgString", - value: function getSvgString() { - var svgString = this.w.globals.dom.Paper.svg(); - return this.fixSvgStringForIe11(svgString); - } - }, { - key: "cleanup", - value: function cleanup() { - var w = this.w; // hide some elements to avoid printing them on exported svg - - var xcrosshairs = w.globals.dom.baseEl.getElementsByClassName('apexcharts-xcrosshairs'); - var ycrosshairs = w.globals.dom.baseEl.getElementsByClassName('apexcharts-ycrosshairs'); - var zoomSelectionRects = w.globals.dom.baseEl.querySelectorAll('.apexcharts-zoom-rect, .apexcharts-selection-rect'); - Array.prototype.forEach.call(zoomSelectionRects, function (z) { - z.setAttribute('width', 0); - }); - - if (xcrosshairs && xcrosshairs[0]) { - xcrosshairs[0].setAttribute('x', -500); - xcrosshairs[0].setAttribute('x1', -500); - xcrosshairs[0].setAttribute('x2', -500); - } - - if (ycrosshairs && ycrosshairs[0]) { - ycrosshairs[0].setAttribute('y', -100); - ycrosshairs[0].setAttribute('y1', -100); - ycrosshairs[0].setAttribute('y2', -100); - } - } - }, { - key: "svgUrl", - value: function svgUrl() { - this.cleanup(); - var svgData = this.getSvgString(); - var svgBlob = new Blob([svgData], { - type: 'image/svg+xml;charset=utf-8' - }); - return URL.createObjectURL(svgBlob); - } - }, { - key: "dataURI", - value: function dataURI() { - var _this = this; - - return new Promise(function (resolve) { - var w = _this.w; - - _this.cleanup(); - - var canvas = document.createElement('canvas'); - canvas.width = w.globals.svgWidth; - canvas.height = parseInt(w.globals.dom.elWrap.style.height, 10); // because of resizeNonAxisCharts - - var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background; - var ctx = canvas.getContext('2d'); - ctx.fillStyle = canvasBg; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - var svgData = _this.getSvgString(); - - if (window.canvg && Utils.isIE11()) { - // use canvg as a polyfill to workaround ie11 considering a canvas with loaded svg 'unsafe' - // without ignoreClear we lose our background color; without ignoreDimensions some grid lines become invisible - var v = window.canvg.Canvg.fromString(ctx, svgData, { - ignoreClear: true, - ignoreDimensions: true - }); // render the svg to canvas - - v.start(); - var blob = canvas.msToBlob(); // dispose - missing this will cause a memory leak - - v.stop(); - resolve({ - blob: blob - }); - } else { - var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData); - var img = new Image(); - img.crossOrigin = 'anonymous'; - - img.onload = function () { - ctx.drawImage(img, 0, 0); - - if (canvas.msToBlob) { - // IE and Edge can't navigate to data urls, so we return the blob instead - var _blob = canvas.msToBlob(); - - resolve({ - blob: _blob - }); - } else { - var imgURI = canvas.toDataURL('image/png'); - resolve({ - imgURI: imgURI - }); - } - }; - - img.src = svgUrl; - } - }); - } - }, { - key: "exportToSVG", - value: function exportToSVG() { - this.triggerDownload(this.svgUrl(), '.svg'); - } - }, { - key: "exportToPng", - value: function exportToPng() { - var _this2 = this; - - this.dataURI().then(function (_ref) { - var imgURI = _ref.imgURI, - blob = _ref.blob; - - if (blob) { - navigator.msSaveOrOpenBlob(blob, _this2.w.globals.chartID + '.png'); - } else { - _this2.triggerDownload(imgURI, '.png'); - } - }); - } - }, { - key: "exportToCSV", - value: function exportToCSV(_ref2) { - var _this3 = this; - - var series = _ref2.series, - _ref2$columnDelimiter = _ref2.columnDelimiter, - columnDelimiter = _ref2$columnDelimiter === void 0 ? ',' : _ref2$columnDelimiter, - _ref2$lineDelimiter = _ref2.lineDelimiter, - lineDelimiter = _ref2$lineDelimiter === void 0 ? '\n' : _ref2$lineDelimiter; - var w = this.w; - var columns = []; - var rows = []; - var result = 'data:text/csv;charset=utf-8,'; - var dataFormat = new Data(this.ctx); - var axesUtils = new AxesUtils(this.ctx); - - var getCat = function getCat(i) { - var cat = ''; // pie / donut/ radial - - if (!w.globals.axisCharts) { - cat = w.config.labels[i]; - } else { - // xy charts - // non datetime - if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { - if (w.globals.isBarHorizontal) { - var lbFormatter = w.globals.yLabelFormatters[0]; - var sr = new Series(_this3.ctx); - var activeSeries = sr.getActiveConfigSeriesIndex(); - cat = lbFormatter(w.globals.labels[i], { - seriesIndex: activeSeries, - dataPointIndex: i, - w: w - }); - } else { - cat = axesUtils.getLabel(w.globals.labels, w.globals.timescaleLabels, 0, i).text; - } - } // datetime, but labels specified in categories or labels - - - if (w.config.xaxis.type === 'datetime') { - if (w.config.xaxis.categories.length) { - cat = w.config.xaxis.categories[i]; - } else if (w.config.labels.length) { - cat = w.config.labels[i]; - } - } - } - - return cat; - }; - - var handleAxisRowsColumns = function handleAxisRowsColumns(s, sI) { - if (columns.length && sI === 0) { - rows.push(columns.join(columnDelimiter)); - } - - if (s.data && s.data.length) { - for (var i = 0; i < s.data.length; i++) { - columns = []; - var cat = getCat(i); - - if (!cat) { - if (dataFormat.isFormatXY()) { - cat = series[sI].data[i].x; - } else if (dataFormat.isFormat2DArray()) { - cat = series[sI].data[i] ? series[sI].data[i][0] : ''; - } - } - - if (sI === 0) { - columns.push(cat); - - for (var ci = 0; ci < w.globals.series.length; ci++) { - columns.push(w.globals.series[ci][i]); - } - } - - if (w.config.chart.type === 'candlestick' || s.type && s.type === 'candlestick') { - columns.pop(); - columns.push(w.globals.seriesCandleO[sI][i]); - columns.push(w.globals.seriesCandleH[sI][i]); - columns.push(w.globals.seriesCandleL[sI][i]); - columns.push(w.globals.seriesCandleC[sI][i]); - } - - if (w.config.chart.type === 'rangeBar') { - columns.pop(); - columns.push(w.globals.seriesRangeStart[sI][i]); - columns.push(w.globals.seriesRangeEnd[sI][i]); - } - - if (columns.length) { - rows.push(columns.join(columnDelimiter)); - } - } - } - }; - - columns.push('category'); - series.map(function (s, sI) { - if (w.globals.axisCharts) { - columns.push(s.name ? s.name : "series-".concat(sI)); - } - }); - - if (!w.globals.axisCharts) { - columns.push('value'); - rows.push(columns.join(columnDelimiter)); - } - - series.map(function (s, sI) { - if (w.globals.axisCharts) { - handleAxisRowsColumns(s, sI); - } else { - columns = []; - columns.push(w.globals.labels[sI]); - columns.push(w.globals.series[sI]); - rows.push(columns.join(columnDelimiter)); - } - }); - result += rows.join(lineDelimiter); - this.triggerDownload(encodeURI(result), '.csv'); - } - }, { - key: "triggerDownload", - value: function triggerDownload(href, ext) { - var downloadLink = document.createElement('a'); - downloadLink.href = href; - downloadLink.download = this.w.globals.chartID + ext; - document.body.appendChild(downloadLink); - downloadLink.click(); - document.body.removeChild(downloadLink); - } - }]); - - return Exports; - }(); - - /** - * ApexCharts XAxis Class for drawing X-Axis. - * - * @module XAxis - **/ - - var XAxis = /*#__PURE__*/function () { - function XAxis(ctx) { - _classCallCheck(this, XAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.axesUtils = new AxesUtils(ctx); - this.xaxisLabels = w.globals.labels.slice(); - - if (w.globals.timescaleLabels.length > 0 && !w.globals.isBarHorizontal) { - // timeline labels are there and chart is not rangeabr timeline - this.xaxisLabels = w.globals.timescaleLabels.slice(); - } - - this.drawnLabels = []; - this.drawnLabelsRects = []; - - if (w.config.xaxis.position === 'top') { - this.offY = 0; - } else { - this.offY = w.globals.gridHeight + 1; - } - - this.offY = this.offY + w.config.xaxis.axisBorder.offsetY; - this.isCategoryBarHorizontal = w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xaxisBorderWidth = w.config.xaxis.axisBorder.width; - - if (this.isCategoryBarHorizontal) { - this.xaxisBorderWidth = w.config.yaxis[0].axisBorder.width.toString(); - } - - if (this.xaxisBorderWidth.indexOf('%') > -1) { - this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100; - } else { - this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10); - } - - this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais, - // as we are not providing multiple yaxis for bar charts - - this.yaxis = w.config.yaxis[0]; - } - - _createClass(XAxis, [{ - key: "drawXaxis", - value: function drawXaxis() { - var _this = this; - - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis', - transform: "translate(".concat(w.config.xaxis.offsetX, ", ").concat(w.config.xaxis.offsetY, ")") - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var colWidth; // initial x Position (keep adding column width in the loop) - - var xPos = w.globals.padHorizontal; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - var labelsLen = labels.length; - - if (w.globals.isXNumeric) { - var len = labelsLen > 1 ? labelsLen - 1 : labelsLen; - colWidth = w.globals.gridWidth / len; - xPos = xPos + colWidth / 2 + w.config.xaxis.labels.offsetX; - } else { - colWidth = w.globals.gridWidth / labels.length; - xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; - } - - if (w.config.xaxis.labels.show) { - var _loop = function _loop(_i) { - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - - if (_i === 0 && labelsLen === 1 && colWidth / 2 === xPos && w.globals.dataPoints === 1) { - // single datapoint - x = w.globals.gridWidth / 2; - } - - var label = _this.axesUtils.getLabel(labels, w.globals.timescaleLabels, x, _i, _this.drawnLabels, _this.xaxisFontSize); - - var offsetYCorrection = 28; - - if (w.globals.rotateXLabels) { - offsetYCorrection = 22; - } - - label = _this.axesUtils.checkForOverflowingLabels(_i, label, labelsLen, _this.drawnLabels, _this.drawnLabelsRects); - - var getCatForeColor = function getCatForeColor() { - return w.config.xaxis.convertedCatToNumeric ? _this.xaxisForeColors[w.globals.minX + _i - 1] : _this.xaxisForeColors[_i]; - }; - - if (label.text) { - w.globals.xaxisLabelsCount++; - } - - var elText = graphics.drawText({ - x: label.x, - y: _this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection - (w.config.xaxis.position === 'top' ? w.globals.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0), - text: label.text, - textAnchor: 'middle', - fontWeight: label.isBold ? 600 : w.config.xaxis.labels.style.fontWeight, - fontSize: _this.xaxisFontSize, - fontFamily: _this.xaxisFontFamily, - foreColor: Array.isArray(_this.xaxisForeColors) ? getCatForeColor() : _this.xaxisForeColors, - isPlainText: false, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elText); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label.text; - elText.node.appendChild(elTooltipTitle); - - if (label.text !== '') { - _this.drawnLabels.push(label.text); - - _this.drawnLabelsRects.push(label); - } - - xPos = xPos + colWidth; - }; - - for (var _i = 0; _i <= labelsLen - 1; _i++) { - _loop(_i); - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title' - }); - var elXAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, - y: this.offY - parseFloat(this.xaxisFontSize) + w.globals.xAxisLabelsHeight + w.config.xaxis.title.offsetY, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - fontWeight: w.config.xaxis.title.style.fontWeight, - foreColor: w.config.xaxis.title.style.color, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elXaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var offX = w.globals.barPadForNumericAxis; - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX - offX, this.offY, this.xaxisBorderWidth + offX, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elXaxis.add(elHorzLine); - } - - return elXaxis; - } // this actually becomes the vertical axis (for bar charts) - - }, { - key: "drawXaxisInversed", - value: function drawXaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis apexcharts-xaxis-inversed', - rel: realIndex - }); - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - elYaxis.add(elYaxisTexts); - var colHeight; // initial x Position (keep adding column width in the loop) - - var yPos; - var labels = []; - - if (w.config.yaxis[realIndex].show) { - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - } - - colHeight = w.globals.gridHeight / labels.length; - yPos = -(colHeight / 2.2); - var lbFormatter = w.globals.yLabelFormatters[0]; - var ylabels = w.config.yaxis[0].labels; - - if (ylabels.show) { - for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) { - var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2]; - label = lbFormatter(label, { - seriesIndex: realIndex, - dataPointIndex: _i2, - w: w - }); - var multiY = 0; - - if (Array.isArray(label)) { - multiY = label.length / 2 * parseInt(ylabels.style.fontSize, 10); - } - - var elLabel = graphics.drawText({ - x: ylabels.offsetX - 15, - y: yPos + colHeight + ylabels.offsetY - multiY, - text: label, - textAnchor: this.yaxis.opposite ? 'start' : 'end', - foreColor: Array.isArray(ylabels.style.colors) ? ylabels.style.colors[_i2] : ylabels.style.colors, - fontSize: ylabels.style.fontSize, - fontFamily: ylabels.style.fontFamily, - fontWeight: ylabels.style.fontWeight, - isPlainText: false, - cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); - elYaxisTexts.add(elLabel); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label.text; - elLabel.node.appendChild(elTooltipTitle); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); - elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " 0 ").concat(labelRotatingCenter.y, ")")); - } - - yPos = yPos + colHeight; - } - } - - if (w.config.yaxis[0].title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - var elXAxisTitleText = graphics.drawText({ - x: 0, - y: w.globals.gridHeight / 2, - text: w.config.yaxis[0].title.text, - textAnchor: 'middle', - foreColor: w.config.yaxis[0].title.style.color, - fontSize: w.config.yaxis[0].title.style.fontSize, - fontWeight: w.config.yaxis[0].title.style.fontWeight, - fontFamily: w.config.yaxis[0].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elYaxis.add(elXaxisTitle); - } - - var offX = 0; - - if (this.isCategoryBarHorizontal && w.config.yaxis[0].opposite) { - offX = w.globals.gridWidth; - } - - var axisBorder = w.config.xaxis.axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX + offX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX + offX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color, 0); - elYaxis.add(elVerticalLine); - } - - if (w.config.yaxis[0].axisTicks.show) { - this.axesUtils.drawYAxisTicks(offX, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); - } - - return elYaxis; - } - }, { - key: "drawXaxisTicks", - value: function drawXaxisTicks(x1, appendToElement) { - var w = this.w; - var x2 = x1; - if (x1 < 0 || x1 - 2 > w.globals.gridWidth) return; - var y1 = this.offY + w.config.xaxis.axisTicks.offsetY; - var y2 = y1 + w.config.xaxis.axisTicks.height; - - if (w.config.xaxis.position === 'top') { - y2 = y1 - w.config.xaxis.axisTicks.height; - } - - if (w.config.xaxis.axisTicks.show) { - var graphics = new Graphics(this.ctx); - var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element pased in param - - appendToElement.add(line); - line.node.classList.add('apexcharts-xaxis-tick'); - } - } - }, { - key: "getXAxisTicksPositions", - value: function getXAxisTicksPositions() { - var w = this.w; - var xAxisTicksPositions = []; - var xCount = this.xaxisLabels.length; - var x1 = w.globals.padHorizontal; - - if (w.globals.timescaleLabels.length > 0) { - for (var i = 0; i < xCount; i++) { - x1 = this.xaxisLabels[i].position; - xAxisTicksPositions.push(x1); - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - xAxisTicksPositions.push(x1); - } - } - - return xAxisTicksPositions; - } // to rotate x-axis labels or to put ... for longer text in xaxis - - }, { - key: "xAxisLabelCorrections", - value: function xAxisLabelCorrections() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g'); - var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text'); - var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text'); - var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text tspan'); - - if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) { - for (var xat = 0; xat < xAxisTexts.length; xat++) { - var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]); - textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4; - - textRotatingCenter.x = textRotatingCenter.x + 1; - xAxisTexts[xat].setAttribute('transform', "rotate(".concat(w.config.xaxis.labels.rotate, " ").concat(textRotatingCenter.x, " ").concat(textRotatingCenter.y, ")")); - xAxisTexts[xat].setAttribute('text-anchor', "end"); - var offsetHeight = 10; - xAxis.setAttribute('transform', "translate(0, ".concat(-offsetHeight, ")")); - var tSpan = xAxisTexts[xat].childNodes; - - if (w.config.xaxis.labels.trim) { - Array.prototype.forEach.call(tSpan, function (ts) { - graphics.placeTextWithEllipsis(ts, ts.textContent, w.config.xaxis.labels.maxHeight - (w.config.legend.position === 'bottom' ? 20 : 10)); - }); - } - } - } else { - (function () { - var width = w.globals.gridWidth / (w.globals.labels.length + 1); - - for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { - var _tSpan = xAxisTexts[_xat].childNodes; - - if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { - Array.prototype.forEach.call(_tSpan, function (ts) { - graphics.placeTextWithEllipsis(ts, ts.textContent, width); - }); - } - } - })(); - } - - if (yAxisTextsInversed.length > 0) { - // truncate rotated y axis in bar chart (x axis) - var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox(); - var lastLabelPosX = yAxisTextsInversed[0].getBBox(); - - if (firstLabelPosX.x < -20) { - yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]); - } - - if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth && !w.globals.isBarHorizontal) { - yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]); - } // truncate rotated x axis in bar chart (y axis) - - - for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) { - graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - parseFloat(w.config.yaxis[0].title.style.fontSize) * 2 - 20); - } - } - } // renderXAxisBands() { - // let w = this.w; - // let plotBand = document.createElementNS(w.globals.SVGNS, 'rect') - // w.globals.dom.elGraphical.add(plotBand) - // } - - }]); - - return XAxis; - }(); - - /** - * ApexCharts Grid Class for drawing Cartesian Grid. - * - * @module Grid - **/ - - var Grid = /*#__PURE__*/function () { - function Grid(ctx) { - _classCallCheck(this, Grid); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisLabels = w.globals.labels.slice(); - this.axesUtils = new AxesUtils(ctx); - this.isTimelineBar = w.config.xaxis.type === 'datetime' && w.globals.seriesRangeBarTimeline.length; - - if (w.globals.timescaleLabels.length > 0) { - // timescaleLabels labels are there - this.xaxisLabels = w.globals.timescaleLabels.slice(); - } - } // when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well - - - _createClass(Grid, [{ - key: "drawGridArea", - value: function drawGridArea() { - var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (elGrid === null) { - elGrid = graphics.group({ - class: 'apexcharts-grid' - }); - } - - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent'); - var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent'); - elGrid.add(elHorzLine); - elGrid.add(elVerticalLine); - return elGrid; - } - }, { - key: "drawGrid", - value: function drawGrid() { - var gl = this.w.globals; - var elgrid = null; - - if (gl.axisCharts) { - // grid is drawn after xaxis and yaxis are drawn - elgrid = this.renderGrid(); - this.drawGridArea(elgrid.el); - } - - return elgrid; - } // This mask will clip off overflowing graphics from the drawable area - - }, { - key: "createGridMask", - value: function createGridMask() { - var w = this.w; - var gl = w.globals; - var graphics = new Graphics(this.ctx); - var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width; - - if (Array.isArray(w.config.stroke.width)) { - var strokeMaxSize = 0; - w.config.stroke.width.forEach(function (m) { - strokeMaxSize = Math.max(strokeMaxSize, m); - }); - strokeSize = strokeMaxSize; - } - - gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMask.setAttribute('id', "gridRectMask".concat(gl.cuid)); - gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMarkerMask.setAttribute('id', "gridRectMarkerMask".concat(gl.cuid)); // let barHalfWidth = 0 - - var type = w.config.chart.type; - var hasBar = type === 'bar' || type === 'rangeBar' || w.globals.comboBarCount > 0; - var barWidthLeft = 0; - var barWidthRight = 0; - - if (hasBar && w.globals.isXNumeric && !w.globals.isBarHorizontal) { - barWidthLeft = w.config.grid.padding.left; - barWidthRight = w.config.grid.padding.right; - - if (gl.barPadForNumericAxis > barWidthLeft) { - barWidthLeft = gl.barPadForNumericAxis; - barWidthRight = gl.barPadForNumericAxis; - } - } - - gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2 - barWidthLeft - 2, -strokeSize / 2, gl.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4, gl.gridHeight + strokeSize, 0, '#fff'); - var coreUtils = new CoreUtils(this); - coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + 1; - gl.dom.elGridRectMarker = graphics.drawRect(-markerSize * 2, -markerSize * 2, gl.gridWidth + markerSize * 4, gl.gridHeight + markerSize * 4, 0, '#fff'); - gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); - gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); - var defs = gl.dom.baseEl.querySelector('defs'); - defs.appendChild(gl.dom.elGridRectMask); - defs.appendChild(gl.dom.elGridRectMarkerMask); - } - }, { - key: "_drawGridLines", - value: function _drawGridLines(_ref) { - var i = _ref.i, - x1 = _ref.x1, - y1 = _ref.y1, - x2 = _ref.x2, - y2 = _ref.y2, - xCount = _ref.xCount, - parent = _ref.parent; - var w = this.w; - - var shouldDraw = function shouldDraw() { - if (i === 0 && w.globals.skipFirstTimelinelabel) { - return false; - } - - if (i === xCount - 1 && w.globals.skipLastTimelinelabel) { - return false; - } - - if (w.config.chart.type === 'radar') { - return false; - } - - return true; - }; - - if (shouldDraw()) { - if (w.config.grid.xaxis.lines.show) { - this._drawGridLine({ - x1: x1, - y1: y1, - x2: x2, - y2: y2, - parent: parent - }); - } - - var xAxis = new XAxis(this.ctx); - xAxis.drawXaxisTicks(x1, this.elg); - } - } - }, { - key: "_drawGridLine", - value: function _drawGridLine(_ref2) { - var x1 = _ref2.x1, - y1 = _ref2.y1, - x2 = _ref2.x2, - y2 = _ref2.y2, - parent = _ref2.parent; - var w = this.w; - var isHorzLine = parent.node.classList.contains('apexcharts-gridlines-horizontal'); - var strokeDashArray = w.config.grid.strokeDashArray; - var offX = w.globals.barPadForNumericAxis; - var graphics = new Graphics(this); - var line = graphics.drawLine(x1 - (isHorzLine ? offX : 0), y1, x2 + (isHorzLine ? offX : 0), y2, w.config.grid.borderColor, strokeDashArray); - line.node.classList.add('apexcharts-gridline'); - parent.add(line); - } - }, { - key: "_drawGridBandRect", - value: function _drawGridBandRect(_ref3) { - var c = _ref3.c, - x1 = _ref3.x1, - y1 = _ref3.y1, - x2 = _ref3.x2, - y2 = _ref3.y2, - type = _ref3.type; - var w = this.w; - var graphics = new Graphics(this.ctx); - var offX = w.globals.barPadForNumericAxis; - if (type === 'column' && w.config.xaxis.type === 'datetime') return; - var color = w.config.grid[type].colors[c]; - var rect = graphics.drawRect(x1 - (type === 'row' ? offX : 0), y1, x2 + (type === 'row' ? offX * 2 : 0), y2, 0, color, w.config.grid[type].opacity); - this.elg.add(rect); - rect.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - rect.node.classList.add("apexcharts-grid-".concat(type)); - } - }, { - key: "_drawXYLines", - value: function _drawXYLines(_ref4) { - var _this = this; - - var xCount = _ref4.xCount, - tickAmount = _ref4.tickAmount; - var w = this.w; - - var datetimeLines = function datetimeLines(_ref5) { - var xC = _ref5.xC, - x1 = _ref5.x1, - y1 = _ref5.y1, - x2 = _ref5.x2, - y2 = _ref5.y2; - - for (var i = 0; i < xC; i++) { - x1 = _this.xaxisLabels[i].position; - x2 = _this.xaxisLabels[i].position; - - _this._drawGridLines({ - i: i, - x1: x1, - y1: y1, - x2: x2, - y2: y2, - xCount: xCount, - parent: _this.elgridLinesV - }); - } - }; - - var categoryLines = function categoryLines(_ref6) { - var xC = _ref6.xC, - x1 = _ref6.x1, - y1 = _ref6.y1, - x2 = _ref6.x2, - y2 = _ref6.y2; - - for (var i = 0; i < xC + (w.globals.isXNumeric ? 0 : 1); i++) { - if (i === 0 && xC === 1 && w.globals.dataPoints === 1) { - // single datapoint - x1 = w.globals.gridWidth / 2; - x2 = x1; - } - - _this._drawGridLines({ - i: i, - x1: x1, - y1: y1, - x2: x2, - y2: y2, - xCount: xCount, - parent: _this.elgridLinesV - }); - - x1 = x1 + w.globals.gridWidth / (w.globals.isXNumeric ? xC - 1 : xC); - x2 = x1; - } - }; // draw vertical lines - - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var x1 = w.globals.padHorizontal; - var y1 = 0; - var x2; - var y2 = w.globals.gridHeight; - - if (w.globals.timescaleLabels.length) { - datetimeLines({ - xC: xCount, - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }); - } else { - if (w.globals.isXNumeric) { - xCount = w.globals.xAxisScale.result.length; - } - - if (w.config.xaxis.convertedCatToNumeric) { - // in case of a convertedCatToNumeric, some labels might be skipped due to hideOverLapping labels, hence use this var to get the visible ticks - xCount = w.globals.xaxisLabelsCount; - } - - categoryLines({ - xC: xCount, - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }); - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x = 0; - var _y = 0; - var _y2 = 0; - var _x2 = w.globals.gridWidth; - var tA = tickAmount + 1; - - if (this.isTimelineBar) { - tA = w.globals.labels.length; - } - - for (var i = 0; i < tA + (this.isTimelineBar ? 1 : 0); i++) { - this._drawGridLine({ - x1: _x, - y1: _y, - x2: _x2, - y2: _y2, - parent: this.elgridLinesH - }); - - _y = _y + w.globals.gridHeight / (this.isTimelineBar ? tA : tickAmount); - _y2 = _y; - } - } - } - }, { - key: "_drawInvertedXYLines", - value: function _drawInvertedXYLines(_ref7) { - var xCount = _ref7.xCount; - var w = this.w; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var x1 = w.globals.padHorizontal; - var y1 = 0; - var x2; - var y2 = w.globals.gridHeight; - - for (var i = 0; i < xCount + 1; i++) { - if (w.config.grid.xaxis.lines.show) { - this._drawGridLine({ - x1: x1, - y1: y1, - x2: x2, - y2: y2, - parent: this.elgridLinesV - }); - } - - var xAxis = new XAxis(this.ctx); - xAxis.drawXaxisTicks(x1, this.elg); - x1 = x1 + w.globals.gridWidth / xCount + 0.3; - x2 = x1; - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x3 = 0; - var _y3 = 0; - var _y4 = 0; - var _x4 = w.globals.gridWidth; - - for (var _i = 0; _i < w.globals.dataPoints + 1; _i++) { - this._drawGridLine({ - x1: _x3, - y1: _y3, - x2: _x4, - y2: _y4, - parent: this.elgridLinesH - }); - - _y3 = _y3 + w.globals.gridHeight / w.globals.dataPoints; - _y4 = _y3; - } - } - } // actual grid rendering - - }, { - key: "renderGrid", - value: function renderGrid() { - var w = this.w; - var graphics = new Graphics(this.ctx); - this.elg = graphics.group({ - class: 'apexcharts-grid' - }); - this.elgridLinesH = graphics.group({ - class: 'apexcharts-gridlines-horizontal' - }); - this.elgridLinesV = graphics.group({ - class: 'apexcharts-gridlines-vertical' - }); - this.elg.add(this.elgridLinesH); - this.elg.add(this.elgridLinesV); - - if (!w.config.grid.show) { - this.elgridLinesV.hide(); - this.elgridLinesH.hide(); - } - - var yTickAmount = w.globals.yAxisScale.length ? w.globals.yAxisScale[0].result.length - 1 : 5; - - for (var i = 0; i < w.globals.series.length; i++) { - if (typeof w.globals.yAxisScale[i] !== 'undefined') { - yTickAmount = w.globals.yAxisScale[i].result.length - 1; - } - - if (yTickAmount > 2) break; - } - - var xCount; - - if (!w.globals.isBarHorizontal || this.isTimelineBar) { - xCount = this.xaxisLabels.length; - - if (this.isTimelineBar) { - yTickAmount = w.globals.labels.length; - } - - this._drawXYLines({ - xCount: xCount, - tickAmount: yTickAmount - }); - } else { - xCount = yTickAmount; // for horizontal bar chart, get the xaxis tickamount - - yTickAmount = w.globals.xTickAmount; - - this._drawInvertedXYLines({ - xCount: xCount, - tickAmount: yTickAmount - }); - } - - this.drawGridBands(xCount, yTickAmount); - return { - el: this.elg, - xAxisTickWidth: w.globals.gridWidth / xCount - }; - } - }, { - key: "drawGridBands", - value: function drawGridBands(xCount, tickAmount) { - var w = this.w; // rows background bands - - if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) { - var x1 = 0; - var y1 = 0; - var y2 = w.globals.gridHeight / tickAmount; - var x2 = w.globals.gridWidth; - - for (var i = 0, c = 0; i < tickAmount; i++, c++) { - if (c >= w.config.grid.row.colors.length) { - c = 0; - } - - this._drawGridBandRect({ - c: c, - x1: x1, - y1: y1, - x2: x2, - y2: y2, - type: 'row' - }); - - y1 = y1 + w.globals.gridHeight / tickAmount; - } - } // columns background bands - - - if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) { - var xc = !w.globals.isBarHorizontal && (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount; - var _x5 = w.globals.padHorizontal; - var _y5 = 0; - - var _x6 = w.globals.padHorizontal + w.globals.gridWidth / xc; - - var _y6 = w.globals.gridHeight; - - for (var _i2 = 0, _c = 0; _i2 < xCount; _i2++, _c++) { - if (_c >= w.config.grid.column.colors.length) { - _c = 0; - } - - this._drawGridBandRect({ - c: _c, - x1: _x5, - y1: _y5, - x2: _x6, - y2: _y6, - type: 'column' - }); - - _x5 = _x5 + w.globals.gridWidth / xc; - } - } - } - }]); - - return Grid; - }(); - - var Range = /*#__PURE__*/function () { - function Range(ctx) { - _classCallCheck(this, Range); - - this.ctx = ctx; - this.w = ctx.w; - } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss - // This routine creates the Y axis values for a graph. - - - _createClass(Range, [{ - key: "niceScale", - value: function niceScale(yMin, yMax) { - var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var NO_MIN_MAX_PROVIDED = arguments.length > 4 ? arguments[4] : undefined; - var w = this.w; - - if (ticks === 'dataPoints') { - ticks = w.globals.dataPoints - 1; - } - - if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { - // when all values are 0 - yMin = 0; - yMax = ticks; - var linearScale = this.linearScale(yMin, yMax, ticks); - return linearScale; - } - - if (yMin > yMax) { - // if somehow due to some wrong config, user sent max less than min, - // adjust the min/max again - console.warn('axis.min cannot be greater than axis.max'); - yMax = yMin + 0.1; - } else if (yMin === yMax) { - // If yMin and yMax are identical, then - // adjust the yMin and yMax values to actually - // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - - yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value - } // Calculate Min amd Max graphical labels and graph - // increments. The number of ticks defaults to - // 10 which is the SUGGESTED value. Any tick value - // entered is used as a suggested value which is - // adjusted to be a 'pretty' value. - // - // Output will be an array of the Y axis values that - // encompass the Y values. - - - var result = []; // Determine Range - - var range = Math.abs(yMax - yMin); - - if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ - yMax = yMax * 1.01; - } - - var tiks = ticks + 1; // Adjust ticks if needed - - if (tiks < 2) { - tiks = 2; - } else if (tiks > 2) { - tiks -= 2; - } // Get raw step value - - - var tempStep = range / tiks; // Calculate pretty step value - - var mag = Math.floor(Utils.log10(tempStep)); - var magPow = Math.pow(10, mag); - var magMsd = Math.round(tempStep / magPow); - - if (magMsd < 1) { - magMsd = 1; - } - - var stepSize = magMsd * magPow; // build Y label array. - // Lower and upper bounds calculations - - var lb = stepSize * Math.floor(yMin / stepSize); - var ub = stepSize * Math.ceil(yMax / stepSize); // Build array - - var val = lb; - - if (NO_MIN_MAX_PROVIDED && range > 2) { - while (1) { - result.push(val); - val += stepSize; - - if (val > ub) { - break; - } - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } else { - result = []; - var v = yMin; - result.push(v); - var valuesDivider = Math.abs(yMax - yMin) / ticks; - - for (var i = 0; i <= ticks; i++) { - v = v + valuesDivider; - result.push(v); - } - - if (result[result.length - 2] >= yMax) { - result.pop(); - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - } - }, { - key: "linearScale", - value: function linearScale(yMin, yMax) { - var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - var range = Math.abs(yMax - yMin); - var step = range / ticks; - - if (ticks === Number.MAX_VALUE) { - ticks = 10; - step = 1; - } - - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - }, { - key: "logarithmicScale", - value: function logarithmicScale(index, yMin, yMax, ticks) { - if (yMin < 0 || yMin === Number.MIN_VALUE) yMin = 0.01; - var base = 10; - var min = Math.log(yMin) / Math.log(base); - var max = Math.log(yMax) / Math.log(base); - var range = Math.abs(yMax - yMin); - var step = range / ticks; - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - var logs = result.map(function (niceNumber, i) { - if (niceNumber <= 0) { - niceNumber = 0.01; - } // calculate adjustment factor - - - var scale = (max - min) / (yMax - yMin); - var logVal = Math.pow(base, min + scale * (niceNumber - min)); - return Math.round(logVal / Utils.roundToBase(logVal, base)) * Utils.roundToBase(logVal, base); - }); // Math.floor may have rounded the value to 0, revert back to 1 - - if (logs[0] === 0) logs[0] = 1; - return { - result: logs, - niceMin: logs[0], - niceMax: logs[logs.length - 1] - }; - } - }, { - key: "setYScaleForIndex", - value: function setYScaleForIndex(index, minY, maxY) { - var gl = this.w.globals; - var cnf = this.w.config; - var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; - - if (typeof gl.yAxisScale[index] === 'undefined') { - gl.yAxisScale[index] = []; - } - - var diff = Math.abs(maxY - minY); - - if (y.logarithmic && diff <= 5) { - gl.invalidLogScale = true; - } - - if (y.logarithmic && diff > 5) { - gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.logarithmicScale(index, minY, maxY, y.tickAmount ? y.tickAmount : Math.floor(Math.log10(maxY))); - } else { - if (maxY === -Number.MAX_VALUE || !Utils.isNumber(maxY)) { - // no data in the chart. Either all series collapsed or user passed a blank array - gl.yAxisScale[index] = this.linearScale(0, 5, 5); - } else { - // there is some data. Turn off the allSeriesCollapsed flag - gl.allSeriesCollapsed = false; - - if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { - // fix https://github.com/apexcharts/apexcharts.js/issues/492 - gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); - } else { - var noMinMaxProvided = cnf.yaxis[index].max === undefined && cnf.yaxis[index].min === undefined || cnf.yaxis[index].forceNiceScale; - gl.yAxisScale[index] = this.niceScale(minY, maxY, y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 - noMinMaxProvided); - } - } - } - } - }, { - key: "setXScale", - value: function setXScale(minX, maxX) { - var w = this.w; - var gl = w.globals; - var x = w.config.xaxis; - var diff = Math.abs(maxX - minX); - - if (maxX === -Number.MAX_VALUE || !Utils.isNumber(maxX)) { - // no data in the chart. Either all series collapsed or user passed a blank array - gl.xAxisScale = this.linearScale(0, 5, 5); - } else { - gl.xAxisScale = this.niceScale(minX, maxX, x.tickAmount ? x.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5, 0); - } - - return gl.xAxisScale; - } - }, { - key: "setMultipleYScales", - value: function setMultipleYScales() { - var _this = this; - - var gl = this.w.globals; - var cnf = this.w.config; - var minYArr = gl.minYArr.concat([]); - var maxYArr = gl.maxYArr.concat([]); - var scalesIndices = []; // here, we loop through the yaxis array and find the item which has "seriesName" property - - cnf.yaxis.forEach(function (yaxe, i) { - var index = i; - cnf.series.forEach(function (s, si) { - // if seriesName matches and that series is not collapsed, we use that scale - // fix issue #1215 - // proceed even if si is in gl.collapsedSeriesIndices - if (s.name === yaxe.seriesName) { - index = si; - - if (i !== si) { - scalesIndices.push({ - index: si, - similarIndex: i, - alreadyExists: true - }); - } else { - scalesIndices.push({ - index: si - }); - } - } - }); - var minY = minYArr[index]; - var maxY = maxYArr[index]; - - _this.setYScaleForIndex(i, minY, maxY); - }); - this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices); - } - }, { - key: "sameScaleInMultipleAxes", - value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) { - var _this2 = this; - - var cnf = this.w.config; - var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales - - var similarIndices = []; - scalesIndices.forEach(function (scale) { - if (scale.alreadyExists) { - if (typeof similarIndices[scale.index] === 'undefined') { - similarIndices[scale.index] = []; - } - - similarIndices[scale.index].push(scale.index); - similarIndices[scale.index].push(scale.similarIndex); - } - }); - - function intersect(a, b) { - return a.filter(function (value) { - return b.indexOf(value) !== -1; - }); - } - - gl.yAxisSameScaleIndices = similarIndices; - similarIndices.forEach(function (si, i) { - similarIndices.forEach(function (sj, j) { - if (i !== j) { - if (intersect(si, sj).length > 0) { - similarIndices[i] = similarIndices[i].concat(similarIndices[j]); - } - } - }); - }); // then, we remove duplicates from the similarScale array - - var uniqueSimilarIndices = similarIndices.map(function (item) { - return item.filter(function (i, pos) { - return item.indexOf(i) === pos; - }); - }); // sort further to remove whole duplicate arrays later - - var sortedIndices = uniqueSimilarIndices.map(function (s) { - return s.sort(); - }); // remove undefined items - - similarIndices = similarIndices.filter(function (s) { - return !!s; - }); - var indices = sortedIndices.slice(); - var stringIndices = indices.map(function (ind) { - return JSON.stringify(ind); - }); - indices = indices.filter(function (ind, p) { - return stringIndices.indexOf(JSON.stringify(ind)) === p; - }); - var sameScaleMinYArr = []; - var sameScaleMaxYArr = []; - minYArr.forEach(function (minYValue, yi) { - indices.forEach(function (scale, i) { - // we compare only the yIndex which exists in the indices array - if (scale.indexOf(yi) > -1) { - if (typeof sameScaleMinYArr[i] === 'undefined') { - sameScaleMinYArr[i] = []; - sameScaleMaxYArr[i] = []; - } - - sameScaleMinYArr[i].push({ - key: yi, - value: minYValue - }); - sameScaleMaxYArr[i].push({ - key: yi, - value: maxYArr[yi] - }); - } - }); - }); - var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE); - var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE); - sameScaleMinYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]); - }); - }); - sameScaleMaxYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]); - }); - }); - minYArr.forEach(function (min, i) { - sameScaleMaxYArr.forEach(function (s, si) { - var minY = sameScaleMin[si]; - var maxY = sameScaleMax[si]; - - if (cnf.chart.stacked) { - // for stacked charts, we need to add the values - maxY = 0; - s.forEach(function (ind, k) { - // fix incorrectly adjust y scale issue #1215 - if (ind.value !== -Number.MAX_VALUE) { - maxY += ind.value; - } - - if (minY !== Number.MIN_VALUE) { - minY += sameScaleMinYArr[si][k].value; - } - }); - } - - s.forEach(function (ind, k) { - if (s[k].key === i) { - if (cnf.yaxis[i].min !== undefined) { - if (typeof cnf.yaxis[i].min === 'function') { - minY = cnf.yaxis[i].min(gl.minY); - } else { - minY = cnf.yaxis[i].min; - } - } - - if (cnf.yaxis[i].max !== undefined) { - if (typeof cnf.yaxis[i].max === 'function') { - maxY = cnf.yaxis[i].max(gl.maxY); - } else { - maxY = cnf.yaxis[i].max; - } - } - - _this2.setYScaleForIndex(i, minY, maxY); - } - }); - }); - }); - } // experimental feature which scales the y-axis to a min/max based on x-axis range - - }, { - key: "autoScaleY", - value: function autoScaleY(ctx, yaxis, e) { - if (!ctx) { - ctx = this; - } - - var w = ctx.w; - - if (w.globals.isMultipleYAxis || w.globals.collapsedSeries.length) { - // The autoScale option for multiple y-axis is turned off as it leads to buggy behavior. - // Also, when a series is collapsed, it results in incorrect behavior. Hence turned it off for that too - fixes apexcharts.js#795 - console.warn('autoScaleYaxis is not supported in a multi-yaxis chart.'); - return yaxis; - } - - var seriesX = w.globals.seriesX[0]; - var isStacked = w.config.chart.stacked; - yaxis.forEach(function (yaxe, yi) { - var firstXIndex = 0; - - for (var xi = 0; xi < seriesX.length; xi++) { - if (seriesX[xi] >= e.xaxis.min) { - firstXIndex = xi; - break; - } - } - - var initialMin = w.globals.minYArr[yi]; - var initialMax = w.globals.maxYArr[yi]; - var min, max; - var stackedSer = w.globals.stackedSeriesTotals; - w.globals.series.forEach(function (serie, sI) { - var firstValue = serie[firstXIndex]; - - if (isStacked) { - firstValue = stackedSer[firstXIndex]; - min = max = firstValue; - stackedSer.forEach(function (y, yI) { - if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) { - if (y > max && y !== null) max = y; - if (serie[yI] < min && serie[yI] !== null) min = serie[yI]; - } - }); - } else { - min = max = firstValue; - serie.forEach(function (y, yI) { - if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) { - var valMin = y; - var valMax = y; - w.globals.series.forEach(function (wS, wSI) { - if (y !== null) { - valMin = Math.min(wS[yI], valMin); - valMax = Math.max(wS[yI], valMax); - } - }); - if (valMax > max && valMax !== null) max = valMax; - if (valMin < min && valMin !== null) min = valMin; - } - }); - } - - if (min === undefined && max === undefined) { - min = initialMin; - max = initialMax; - } - - min *= min < 0 ? 1.1 : 0.9; - max *= max < 0 ? 0.9 : 1.1; - - if (max < 0 && max < initialMax) { - max = initialMax; - } - - if (min < 0 && min > initialMin) { - min = initialMin; - } - - if (yaxis.length > 1) { - yaxis[sI].min = yaxe.min === undefined ? min : yaxe.min; - yaxis[sI].max = yaxe.max === undefined ? max : yaxe.max; - } else { - yaxis[0].min = yaxe.min === undefined ? min : yaxe.min; - yaxis[0].max = yaxe.max === undefined ? max : yaxe.max; - } - }); - }); - return yaxis; - } - }]); - - return Range; - }(); - - /** - * Range is used to generates values between min and max. - * - * @module Range - **/ - - var Range$1 = /*#__PURE__*/function () { - function Range$1(ctx) { - _classCallCheck(this, Range$1); - - this.ctx = ctx; - this.w = ctx.w; - this.scales = new Range(ctx); - } - - _createClass(Range$1, [{ - key: "init", - value: function init() { - this.setYRange(); - this.setXRange(); - this.setZRange(); - } - }, { - key: "getMinYMaxY", - value: function getMinYMaxY(startingIndex) { - var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; - var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE; - var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var cnf = this.w.config; - var gl = this.w.globals; - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - - if (len === null) { - len = startingIndex + 1; - } - - var series = gl.series; - var seriesMin = series; - var seriesMax = series; - - if (cnf.chart.type === 'candlestick') { - seriesMin = gl.seriesCandleL; - seriesMax = gl.seriesCandleH; - } else if (gl.isRangeData) { - seriesMin = gl.seriesRangeStart; - seriesMax = gl.seriesRangeEnd; - } - - for (var i = startingIndex; i < len; i++) { - gl.dataPoints = Math.max(gl.dataPoints, series[i].length); - - for (var j = 0; j < gl.series[i].length; j++) { - var val = series[i][j]; - - if (val !== null && Utils.isNumber(val)) { - maxY = Math.max(maxY, seriesMax[i][j]); - lowestY = Math.min(lowestY, seriesMin[i][j]); - highestY = Math.max(highestY, seriesMin[i][j]); - - if (this.w.config.chart.type === 'candlestick') { - maxY = Math.max(maxY, gl.seriesCandleO[i][j]); - maxY = Math.max(maxY, gl.seriesCandleH[i][j]); - maxY = Math.max(maxY, gl.seriesCandleL[i][j]); - maxY = Math.max(maxY, gl.seriesCandleC[i][j]); - highestY = maxY; - } - - if (Utils.isFloat(val)) { - val = Utils.noExponents(val); - gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); - } - - if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { - minY = seriesMin[i][j]; - } - } else { - gl.hasNullValues = true; - } - } - } - - if (cnf.chart.type === 'rangeBar' && gl.seriesRangeStart.length && gl.isBarHorizontal && cnf.xaxis.type === 'datetime') { - minY = lowestY; - } - - if (cnf.chart.type === 'bar') { - if (minY < 0 && maxY < 0) { - // all negative values in a bar chart, hence make the max to 0 - maxY = 0; - } - - if (minY === Number.MIN_VALUE) { - minY = 0; - } - } - - return { - minY: minY, - maxY: maxY, - lowestY: lowestY, - highestY: highestY - }; - } - }, { - key: "setYRange", - value: function setYRange() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - var lowestYInAllSeries = Number.MAX_VALUE; - - if (gl.isMultipleYAxis) { - // we need to get minY and maxY for multiple y axis - for (var i = 0; i < gl.series.length; i++) { - var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1); - gl.minYArr.push(minYMaxYArr.minY); - gl.maxYArr.push(minYMaxYArr.maxY); - lowestYInAllSeries = minYMaxYArr.lowestY; - } - } // and then, get the minY and maxY from all series - - - var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length); - gl.minY = minYMaxY.minY; - gl.maxY = minYMaxY.maxY; - lowestYInAllSeries = minYMaxY.lowestY; - - if (cnf.chart.stacked) { - this._setStackedMinMax(); - } // if the numbers are too big, reduce the range - // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks - - - if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick' || cnf.chart.type === 'rangeBar' && !gl.isBarHorizontal) { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility - ) { - var diff = gl.maxY - lowestYInAllSeries; - - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; - } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - /* fix https://github.com/apexcharts/apexcharts.js/issues/614 */ - - /* fix https://github.com/apexcharts/apexcharts.js/issues/968 */ - - if (lowestYInAllSeries > 0 && gl.minY < 0) { - gl.minY = 0; - } - /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ - - - gl.maxY = gl.maxY + diff * 5 / 100; - } - } - - cnf.yaxis.forEach(function (yaxe, index) { - // override all min/max values by user defined values (y axis) - if (yaxe.max !== undefined) { - if (typeof yaxe.max === 'number') { - gl.maxYArr[index] = yaxe.max; - } else if (typeof yaxe.max === 'function') { - gl.maxYArr[index] = yaxe.max(gl.maxY); - } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.maxY = gl.maxYArr[index]; - } - - if (yaxe.min !== undefined) { - if (typeof yaxe.min === 'number') { - gl.minYArr[index] = yaxe.min; - } else if (typeof yaxe.min === 'function') { - gl.minYArr[index] = yaxe.min(gl.minY); - } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.minY = gl.minYArr[index]; - } - }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - - if (gl.isBarHorizontal) { - var minmax = ['min', 'max']; - minmax.forEach(function (m) { - if (cnf.xaxis[m] !== undefined && typeof cnf.xaxis[m] === 'number') { - m === 'min' ? gl.minY = cnf.xaxis[m] : gl.maxY = cnf.xaxis[m]; - } - }); - } // for multi y-axis we need different scales for each - - - if (gl.isMultipleYAxis) { - this.scales.setMultipleYScales(); - gl.minY = lowestYInAllSeries; - gl.yAxisScale.forEach(function (scale, i) { - gl.minYArr[i] = scale.niceMin; - gl.maxYArr[i] = scale.niceMax; - }); - } else { - this.scales.setYScaleForIndex(0, gl.minY, gl.maxY); - gl.minY = gl.yAxisScale[0].niceMin; - gl.maxY = gl.yAxisScale[0].niceMax; - gl.minYArr[0] = gl.yAxisScale[0].niceMin; - gl.maxYArr[0] = gl.yAxisScale[0].niceMax; - } - - return { - minY: gl.minY, - maxY: gl.maxY, - minYArr: gl.minYArr, - maxYArr: gl.maxYArr - }; - } - }, { - key: "setXRange", - value: function setXRange() { - var gl = this.w.globals; - var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; - - var getInitialMinXMaxX = function getInitialMinXMaxX() { - for (var i = 0; i < gl.series.length; i++) { - if (gl.labels[i]) { - for (var j = 0; j < gl.labels[i].length; j++) { - if (gl.labels[i][j] !== null && Utils.isNumber(gl.labels[i][j])) { - gl.maxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.initialMaxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.minX = Math.min(gl.minX, gl.labels[i][j]); - gl.initialMinX = Math.min(gl.minX, gl.labels[i][j]); - } - } - } - } - }; // minX maxX starts here - - - if (gl.isXNumeric) { - getInitialMinXMaxX(); - } - - if (gl.noLabelsProvided) { - if (cnf.xaxis.categories.length === 0) { - gl.maxX = gl.labels[gl.labels.length - 1]; - gl.initialMaxX = gl.labels[gl.labels.length - 1]; - gl.minX = 1; - gl.initialMinX = 1; - } - } - - if (gl.isXNumeric || gl.noLabelsProvided || gl.dataFormatXNumeric) { - var ticks; - - if (cnf.xaxis.tickAmount === undefined) { - ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 30 - - if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 30) { - ticks = gl.dataPoints - 1; - } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels - - - if (ticks > gl.dataPoints && gl.dataPoints !== 0) { - ticks = gl.dataPoints - 1; - } - } else if (cnf.xaxis.tickAmount === 'dataPoints') { - if (gl.series.length > 1) { - ticks = gl.series[gl.maxValsInArrayIndex].length - 1; - } - - if (gl.isXNumeric) { - ticks = gl.maxX - gl.minX - 1; - } - } else { - ticks = cnf.xaxis.tickAmount; - } - - gl.xTickAmount = ticks; // override all min/max values by user defined values (x axis) - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxX = cnf.xaxis.max; - } - - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minX = cnf.xaxis.min; - } // if range is provided, adjust the new minX - - - if (cnf.xaxis.range !== undefined) { - gl.minX = gl.maxX - cnf.xaxis.range; - } - - if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) { - if (cnf.xaxis.convertedCatToNumeric && !gl.dataFormatXNumeric) { - var catScale = []; - - for (var i = gl.minX - 1; i < gl.maxX; i++) { - catScale.push(i + 1); - } - - gl.xAxisScale = { - result: catScale, - niceMin: catScale[0], - niceMax: catScale[catScale.length - 1] - }; - } else { - gl.xAxisScale = this.scales.setXScale(gl.minX, gl.maxX); - } - } else { - gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); - - if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated - - gl.seriesX = gl.labels.slice(); - } - } // we will still store these labels as the count for this will be different (to draw grid and labels placement) - - - if (isXNumeric) { - gl.labels = gl.xAxisScale.result.slice(); - } - } - - if (gl.isBarHorizontal && gl.labels.length) { - gl.xTickAmount = gl.labels.length; - } // single dataPoint - - - this._handleSingleDataPoint(); // minimum x difference to calculate bar width in numeric bars - - - this._getMinXDiff(); - - return { - minX: gl.minX, - maxX: gl.maxX - }; - } - }, { - key: "setZRange", - value: function setZRange() { - // minZ, maxZ starts here - var gl = this.w.globals; - if (!gl.isDataXYZ) return; - - for (var i = 0; i < gl.series.length; i++) { - if (typeof gl.seriesZ[i] !== 'undefined') { - for (var j = 0; j < gl.seriesZ[i].length; j++) { - if (gl.seriesZ[i][j] !== null && Utils.isNumber(gl.seriesZ[i][j])) { - gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]); - gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]); - } - } - } - } - } - }, { - key: "_handleSingleDataPoint", - value: function _handleSingleDataPoint() { - var gl = this.w.globals; - var cnf = this.w.config; - - if (gl.minX === gl.maxX) { - var datetimeObj = new DateTime(this.ctx); - - if (cnf.xaxis.type === 'datetime') { - var newMinX = datetimeObj.getDate(gl.minX); - newMinX.setUTCDate(newMinX.getDate() - 2); - gl.minX = new Date(newMinX).getTime(); - var newMaxX = datetimeObj.getDate(gl.maxX); - newMaxX.setUTCDate(newMaxX.getDate() + 2); - gl.maxX = new Date(newMaxX).getTime(); - } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) { - gl.minX = gl.minX - 2; - gl.initialMinX = gl.minX; - gl.maxX = gl.maxX + 2; - gl.initialMaxX = gl.maxX; - } - } - } - }, { - key: "_getMinXDiff", - value: function _getMinXDiff() { - var gl = this.w.globals; - - if (gl.isXNumeric) { - // get the least x diff if numeric x axis is present - gl.seriesX.forEach(function (sX, i) { - if (sX.length === 1) { - // a small hack to prevent overlapping multiple bars when there is just 1 datapoint in bar series. - // fix #811 - sX.push(gl.seriesX[gl.maxValsInArrayIndex][gl.seriesX[gl.maxValsInArrayIndex].length - 1]); - } // fix #983 (clone the array to avoid side effects) - - - var seriesX = sX.slice(); - seriesX.sort(function (a, b) { - return a - b; - }); - seriesX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - gl.seriesX[i][j - 1]; - - if (xDiff > 0) { - gl.minXDiff = Math.min(xDiff, gl.minXDiff); - } - } - }); - - if (gl.dataPoints === 1 && gl.minXDiff === Number.MAX_VALUE) { - gl.minXDiff = 0.5; - } - }); - } - } - }, { - key: "_setStackedMinMax", - value: function _setStackedMinMax() { - var gl = this.w.globals; // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it - - var stackedPoss = []; - var stackedNegs = []; - - if (gl.series.length) { - for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) { - var poss = 0; - var negs = 0; - - for (var i = 0; i < gl.series.length; i++) { - if (gl.series[i][j] !== null && Utils.isNumber(gl.series[i][j])) { - // 0.0001 fixes #185 when values are very small - gl.series[i][j] > 0 ? poss = poss + parseFloat(gl.series[i][j]) + 0.0001 : negs = negs + parseFloat(gl.series[i][j]); - } - - if (i === gl.series.length - 1) { - // push all the totals to the array for future use - stackedPoss.push(poss); - stackedNegs.push(negs); - } - } - } - } // get the max/min out of the added parallel values - - - for (var z = 0; z < stackedPoss.length; z++) { - gl.maxY = Math.max(gl.maxY, stackedPoss[z]); - gl.minY = Math.min(gl.minY, stackedNegs[z]); - } - } - }]); - - return Range$1; - }(); - - /** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - - var YAxis = /*#__PURE__*/function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.isCategoryBarHorizontal = w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal; - this.xAxisoffX = 0; - - if (w.config.xaxis.position === 'bottom') { - this.xAxisoffX = w.globals.gridHeight; - } - - this.drawnLabels = []; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisStyle = w.config.yaxis[realIndex].labels.style; - var yaxisFontSize = yaxisStyle.fontSize; - var yaxisFontFamily = yaxisStyle.fontFamily; - var yaxisFontWeight = yaxisStyle.fontWeight; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (this.axesUtils.isYAxisHidden(realIndex)) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - labels = this.axesUtils.checkForReversedLabels(realIndex, labels); - var firstLabel = ''; - - if (w.config.yaxis[realIndex].labels.show) { - var _loop = function _loop(i) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var getForeColor = function getForeColor() { - return Array.isArray(yaxisStyle.colors) ? yaxisStyle.colors[i] : yaxisStyle.colors; - }; - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - fontWeight: yaxisFontWeight, - foreColor: getForeColor(), - isPlainText: false, - cssClass: 'apexcharts-yaxis-label ' + yaxisStyle.cssClass - }); - - if (i === tickAmount) { - firstLabel = label; - } - - elYaxisTexts.add(label); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - var firstabelRotatingCenter = graphics.rotateAroundCenter(firstLabel.node); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(firstabelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - }; - - for (var i = tickAmount; i >= 0; i--) { - _loop(i); - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var _x = 0; - - if (w.config.yaxis[realIndex].opposite) { - _x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: _x, - y: w.globals.gridHeight / 2 + w.globals.translateY + w.config.yaxis[realIndex].title.offsetY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontWeight: w.config.yaxis[realIndex].title.style.fontWeight, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - var x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - x = -31 - axisBorder.offsetX; - } - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(x, w.globals.translateY + axisBorder.offsetY - 2, x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color, 0, axisBorder.width); - elYaxis.add(elVerticalLine); - } - - if (w.config.yaxis[realIndex].axisTicks.show) { - this.axesUtils.drawYAxisTicks(x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - var timescaleLabels = w.globals.timescaleLabels; - - if (timescaleLabels.length > 0) { - this.xaxisLabels = timescaleLabels.slice(); - labels = timescaleLabels.slice(); - tickAmount = labels.length; - } - - labels = this.axesUtils.checkForReversedLabels(realIndex, labels); - var tl = timescaleLabels.length; - - if (w.config.xaxis.labels.show) { - for (var i = tl ? 0 : tickAmount; tl ? i < tl : i >= 0; tl ? i++ : i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); - - if (timescaleLabels.length) { - var label = this.axesUtils.getLabel(labels, timescaleLabels, x, i, this.drawnLabels, this.xaxisFontSize); - x = label.x; - val = label.text; - this.drawnLabels.push(label.text); - - if (i === 0 && w.globals.skipFirstTimelinelabel) { - val = ''; - } - - if (i === labels.length - 1 && w.globals.skipLastTimelinelabel) { - val = ''; - } - } - - var elTick = graphics.drawText({ - x: x, - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30 - (w.config.xaxis.position === 'top' ? w.globals.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0), - text: val, - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - fontWeight: w.config.xaxis.labels.style.fontWeight, - isPlainText: false, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - this.inversedYAxisTitleText(elXaxis); - this.inversedYAxisBorder(elXaxis); - return elXaxis; - } - }, { - key: "inversedYAxisBorder", - value: function inversedYAxisBorder(parent) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var axisBorder = w.config.xaxis.axisBorder; - - if (axisBorder.show) { - var lineCorrection = 0; - - if (w.config.chart.type === 'bar' && w.globals.isXNumeric) { - lineCorrection = lineCorrection - 15; - } - - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + axisBorder.offsetX, this.xAxisoffX, w.globals.gridWidth, this.xAxisoffX, axisBorder.color, 0, axisBorder.height); - parent.add(elHorzLine); - } - } - }, { - key: "inversedYAxisTitleText", - value: function inversedYAxisTitleText(parent) { - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, - y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w.config.xaxis.title.style.fontSize) + w.config.xaxis.title.offsetY + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - fontWeight: w.config.xaxis.title.style.fontWeight, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - parent.add(elYaxisTitle); - } - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - yAxisTitle.setAttribute('transform', "rotate(".concat(yAxisOpposite ? '' : '-').concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (w.globals.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 18; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (w.globals.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }, { - key: "setYAxisTextAlignments", - value: function setYAxisTextAlignments() { - var w = this.w; - var yaxis = w.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis"); - yaxis = Utils.listToArray(yaxis); - yaxis.forEach(function (y, index) { - var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment - - if (yaxe.labels.align !== undefined) { - var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); - var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); - yAxisTexts = Utils.listToArray(yAxisTexts); - var rect = yAxisInner.getBoundingClientRect(); - - if (yaxe.labels.align === 'left') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'start'); - }); - - if (!yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); - } - } else if (yaxe.labels.align === 'center') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'middle'); - }); - yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); - } else if (yaxe.labels.align === 'right') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'end'); - }); - - if (yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); - } - } - } - }); - } - }]); - - return YAxis; - }(); - - var Events = /*#__PURE__*/function () { - function Events(ctx) { - _classCallCheck(this, Events); - - this.ctx = ctx; - this.w = ctx.w; - this.documentEvent = Utils.bind(this.documentEvent, this); - } - - _createClass(Events, [{ - key: "addEventListener", - value: function addEventListener(name, handler) { - var w = this.w; - - if (w.globals.events.hasOwnProperty(name)) { - w.globals.events[name].push(handler); - } else { - w.globals.events[name] = [handler]; - } - } - }, { - key: "removeEventListener", - value: function removeEventListener(name, handler) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name)) { - return; - } - - var index = w.globals.events[name].indexOf(handler); - - if (index !== -1) { - w.globals.events[name].splice(index, 1); - } - } - }, { - key: "fireEvent", - value: function fireEvent(name, args) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name)) { - return; - } - - if (!args || !args.length) { - args = []; - } - - var evs = w.globals.events[name]; - var l = evs.length; - - for (var i = 0; i < l; i++) { - evs[i].apply(null, args); - } - } - }, { - key: "setupEventHandlers", - value: function setupEventHandlers() { - var _this = this; - - var w = this.w; - var me = this.ctx; - var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - this.ctx.eventList.forEach(function (event) { - clickableArea.addEventListener(event, function (e) { - var opts = Object.assign({}, w, { - seriesIndex: w.globals.capturedSeriesIndex, - dataPointIndex: w.globals.capturedDataPointIndex - }); - - if (e.type === 'mousemove' || e.type === 'touchmove') { - if (typeof w.config.chart.events.mouseMove === 'function') { - w.config.chart.events.mouseMove(e, me, opts); - } - } else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') { - if (typeof w.config.chart.events.click === 'function') { - w.config.chart.events.click(e, me, opts); - } - - me.ctx.events.fireEvent('click', [e, me, opts]); - } - }, { - capture: false, - passive: true - }); - }); - this.ctx.eventList.forEach(function (event) { - document.addEventListener(event, _this.documentEvent); - }); - this.ctx.core.setupBrushHandler(); - } - }, { - key: "documentEvent", - value: function documentEvent(e) { - var w = this.w; - var target = e.target.className; - - if (e.type === 'click') { - var elMenu = w.globals.dom.baseEl.querySelector('.apexcharts-menu'); - - if (elMenu && elMenu.classList.contains('apexcharts-menu-open') && target !== 'apexcharts-menu-icon') { - elMenu.classList.remove('apexcharts-menu-open'); - } - } - - if (e.type === 'mousedown') { - var elAnnos = w.globals.dom.Paper.select('.apexcharts-resizable-element').members; - Array.prototype.forEach.call(elAnnos, function (el) { - // any shape annotations that might have selected by user for resizing, should be deselected - if (!e.target.classList.contains('apexcharts-resizable-element') && !e.target.classList.contains('svg_select_points')) { - el.selectize(false); - } - }); - } - - w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - } - }]); - - return Events; - }(); - - var Localization = /*#__PURE__*/function () { - function Localization(ctx) { - _classCallCheck(this, Localization); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Localization, [{ - key: "setCurrentLocaleValues", - value: function setCurrentLocaleValues(localeName) { - var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable - // if yes - then extend those with local chart's locale - - if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) { - locales = this.w.config.chart.locales.concat(window.Apex.chart.locales); - } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.) - - - var selectedLocale = locales.filter(function (c) { - return c.name === localeName; - })[0]; - - if (selectedLocale) { - // create a complete locale object by extending defaults so you don't get undefined errors. - var ret = Utils.extend(en, selectedLocale); // store these locale options in global var for ease access - - this.w.globals.locale = ret.options; - } else { - throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); - } - } - }]); - - return Localization; - }(); - - var Axes = /*#__PURE__*/function () { - function Axes(ctx) { - _classCallCheck(this, Axes); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Axes, [{ - key: "drawAxis", - value: function drawAxis(type, xyRatios) { - var gl = this.w.globals; - var cnf = this.w.config; - var xAxis = new XAxis(this.ctx); - var yAxis = new YAxis(this.ctx); - - if (gl.axisCharts && type !== 'radar') { - var elXaxis, elYaxis; - - if (gl.isBarHorizontal) { - elYaxis = yAxis.drawYaxisInversed(0); - elXaxis = xAxis.drawXaxisInversed(0); - gl.dom.elGraphical.add(elXaxis); - gl.dom.elGraphical.add(elYaxis); - } else { - elXaxis = xAxis.drawXaxis(); - gl.dom.elGraphical.add(elXaxis); - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - elYaxis = yAxis.drawYaxis(index); - gl.dom.Paper.add(elYaxis); - } - }); - } - } - - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - yAxis.yAxisTitleRotate(index, yaxe.opposite); - } - }); - } - }]); - - return Axes; - }(); - - var Crosshairs = /*#__PURE__*/function () { - function Crosshairs(ctx) { - _classCallCheck(this, Crosshairs); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Crosshairs, [{ - key: "drawXCrosshairs", - value: function drawXCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var filters = new Filters(this.ctx); - var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient; - var crosshairShadow = w.config.xaxis.crosshairs.dropShadow; - var fillType = w.config.xaxis.crosshairs.fill.type; - var gradientFrom = crosshairGradient.colorFrom; - var gradientTo = crosshairGradient.colorTo; - var opacityFrom = crosshairGradient.opacityFrom; - var opacityTo = crosshairGradient.opacityTo; - var stops = crosshairGradient.stops; - var shadow = 'none'; - var dropShadow = crosshairShadow.enabled; - var shadowLeft = crosshairShadow.left; - var shadowTop = crosshairShadow.top; - var shadowBlur = crosshairShadow.blur; - var shadowColor = crosshairShadow.color; - var shadowOpacity = crosshairShadow.opacity; - var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color; - - if (w.config.xaxis.crosshairs.show) { - if (fillType === 'gradient') { - xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null); - } - - var xcrosshairs = graphics.drawRect(); - - if (w.config.xaxis.crosshairs.width === 1) { - // to prevent drawing 2 lines, convert rect to line - xcrosshairs = graphics.drawLine(); - } - - xcrosshairs.attr({ - class: 'apexcharts-xcrosshairs', - x: 0, - y: 0, - y2: w.globals.gridHeight, - width: Utils.isNumber(w.config.xaxis.crosshairs.width) ? w.config.xaxis.crosshairs.width : 0, - height: w.globals.gridHeight, - fill: xcrosshairsFill, - filter: shadow, - 'fill-opacity': w.config.xaxis.crosshairs.opacity, - stroke: w.config.xaxis.crosshairs.stroke.color, - 'stroke-width': w.config.xaxis.crosshairs.stroke.width, - 'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray - }); - - if (dropShadow) { - xcrosshairs = filters.dropShadow(xcrosshairs, { - left: shadowLeft, - top: shadowTop, - blur: shadowBlur, - color: shadowColor, - opacity: shadowOpacity - }); - } - - w.globals.dom.elGraphical.add(xcrosshairs); - } - } - }, { - key: "drawYCrosshairs", - value: function drawYCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var crosshair = w.config.yaxis[0].crosshairs; - var offX = w.globals.barPadForNumericAxis; - - if (w.config.yaxis[0].crosshairs.show) { - var ycrosshairs = graphics.drawLine(-offX, 0, w.globals.gridWidth + offX, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width); - ycrosshairs.attr({ - class: 'apexcharts-ycrosshairs' - }); - w.globals.dom.elGraphical.add(ycrosshairs); - } // draw an invisible crosshair to help in positioning the yaxis tooltip - - - var ycrosshairsHidden = graphics.drawLine(-offX, 0, w.globals.gridWidth + offX, 0, crosshair.stroke.color, 0, 0); - ycrosshairsHidden.attr({ - class: 'apexcharts-ycrosshairs-hidden' - }); - w.globals.dom.elGraphical.add(ycrosshairsHidden); - } - }]); - - return Crosshairs; - }(); - - /** - * ApexCharts Responsive Class to override options for different screen sizes. - * - * @module Responsive - **/ - - var Responsive = /*#__PURE__*/function () { - function Responsive(ctx) { - _classCallCheck(this, Responsive); - - this.ctx = ctx; - this.w = ctx.w; - } // the opts parameter if not null has to be set overriding everything - // as the opts is set by user externally - - - _createClass(Responsive, [{ - key: "checkResponsiveConfig", - value: function checkResponsiveConfig(opts) { - var _this = this; - - var w = this.w; - var cnf = w.config; // check if responsive config exists - - if (cnf.responsive.length === 0) return; - var res = cnf.responsive.slice(); - res.sort(function (a, b) { - return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0; - }).reverse(); - var config = new Config({}); - - var iterateResponsiveOptions = function iterateResponsiveOptions() { - var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var largestBreakpoint = res[0].breakpoint; - var width = window.innerWidth > 0 ? window.innerWidth : screen.width; - - if (width > largestBreakpoint) { - var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig, w); - newOptions = Utils.extend(options, newOptions); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } else { - for (var i = 0; i < res.length; i++) { - if (width < res[i].breakpoint) { - newOptions = CoreUtils.extendArrayProps(config, res[i].options, w); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } - } - } - }; - - if (opts) { - var options = CoreUtils.extendArrayProps(config, opts, w); - options = Utils.extend(w.config, options); - options = Utils.extend(options, opts); - iterateResponsiveOptions(options); - } else { - iterateResponsiveOptions({}); - } - } - }, { - key: "overrideResponsiveOptions", - value: function overrideResponsiveOptions(newOptions) { - var newConfig = new Config(newOptions).init({ - responsiveOverride: true - }); - this.w.config = newConfig; - } - }]); - - return Responsive; - }(); - - /** - * ApexCharts Theme Class for setting the colors and palettes. - * - * @module Theme - **/ - - var Theme = /*#__PURE__*/function () { - function Theme(ctx) { - _classCallCheck(this, Theme); - - this.ctx = ctx; - this.colors = []; - this.w = ctx.w; - var w = this.w; - this.isColorFn = false; - this.isBarDistributed = w.config.plotOptions.bar.distributed && (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar'); - } - - _createClass(Theme, [{ - key: "init", - value: function init() { - this.setDefaultColors(); - } - }, { - key: "setDefaultColors", - value: function setDefaultColors() { - var _this = this; - - var w = this.w; - var utils = new Utils(); - w.globals.dom.elWrap.classList.add("apexcharts-theme-".concat(w.config.theme.mode)); - - if (w.config.colors === undefined) { - w.globals.colors = this.predefined(); - } else { - w.globals.colors = w.config.colors; // if user provided a function in colors, we need to eval here - - if (Array.isArray(w.config.colors) && w.config.colors.length > 0 && typeof w.config.colors[0] === 'function') { - w.globals.colors = w.config.series.map(function (s, i) { - var c = w.config.colors[i]; - if (!c) c = w.config.colors[0]; - - if (typeof c === 'function') { - _this.isColorFn = true; - return c({ - value: w.globals.axisCharts ? w.globals.series[i][0] ? w.globals.series[i][0] : 0 : w.globals.series[i], - seriesIndex: i, - dataPointIndex: i, - w: w - }); - } - - return c; - }); - } - } - - if (w.config.theme.monochrome.enabled) { - var monoArr = []; - var glsCnt = w.globals.series.length; - - if (this.isBarDistributed) { - glsCnt = w.globals.series[0].length * w.globals.series.length; - } - - var mainColor = w.config.theme.monochrome.color; - var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity); - var shade = w.config.theme.monochrome.shadeTo; - var percent = 0; - - for (var gsl = 0; gsl < glsCnt; gsl++) { - var newColor = void 0; - - if (shade === 'dark') { - newColor = utils.shadeColor(percent * -1, mainColor); - percent = percent + part; - } else { - newColor = utils.shadeColor(percent, mainColor); - percent = percent + part; - } - - monoArr.push(newColor); - } - - w.globals.colors = monoArr.slice(); - } - - var defaultColors = w.globals.colors.slice(); // if user specfied less colors than no. of series, push the same colors again - - this.pushExtraColors(w.globals.colors); - var colorTypes = ['fill', 'stroke']; - colorTypes.forEach(function (c) { - if (w.config[c].colors === undefined) { - w.globals[c].colors = _this.isColorFn ? w.config.colors : defaultColors; - } else { - w.globals[c].colors = w.config[c].colors.slice(); - } - - _this.pushExtraColors(w.globals[c].colors); - }); - - if (w.config.dataLabels.style.colors === undefined) { - w.globals.dataLabels.style.colors = defaultColors; - } else { - w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors.slice(); - } - - this.pushExtraColors(w.globals.dataLabels.style.colors, 50); - - if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#424242' : '#fff']; - } else { - w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors.slice(); - } - - this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors - - if (w.config.markers.colors === undefined) { - w.globals.markers.colors = defaultColors; - } else { - w.globals.markers.colors = w.config.markers.colors.slice(); - } - - this.pushExtraColors(w.globals.markers.colors); - } // When the number of colors provided is less than the number of series, this method - // will push same colors to the list - // params: - // distributed is only valid for distributed column/bar charts - - }, { - key: "pushExtraColors", - value: function pushExtraColors(colorSeries, length) { - var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var len = length || w.globals.series.length; - - if (distributed === null) { - distributed = this.isBarDistributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse; - } - - if (distributed) { - len = w.globals.series[0].length * w.globals.series.length; - } - - if (colorSeries.length < len) { - var diff = len - colorSeries.length; - - for (var i = 0; i < diff; i++) { - colorSeries.push(colorSeries[i]); - } - } - } - }, { - key: "updateThemeOptions", - value: function updateThemeOptions(options) { - options.chart = options.chart || {}; - options.tooltip = options.tooltip || {}; - var mode = options.theme.mode || 'light'; - var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; - var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; - options.tooltip.theme = mode; - options.chart.foreColor = foreColor; - options.theme.palette = palette; - return options; - } - }, { - key: "predefined", - value: function predefined() { - var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF - - switch (palette) { - case 'palette1': - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - - case 'palette2': - this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800']; - break; - - case 'palette3': - this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B']; - break; - - case 'palette4': - this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; - break; - - case 'palette5': - this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7']; - break; - - case 'palette6': - this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D']; - break; - - case 'palette7': - this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044']; - break; - - case 'palette8': - this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD']; - break; - - case 'palette9': - this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF']; - break; - - case 'palette10': - this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2']; - break; - - default: - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - } - - return this.colors; - } - }]); - - return Theme; - }(); - - var TitleSubtitle = /*#__PURE__*/function () { - function TitleSubtitle(ctx) { - _classCallCheck(this, TitleSubtitle); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(TitleSubtitle, [{ - key: "draw", - value: function draw() { - this.drawTitleSubtitle('title'); - this.drawTitleSubtitle('subtitle'); - } - }, { - key: "drawTitleSubtitle", - value: function drawTitleSubtitle(type) { - var w = this.w; - var tsConfig = type === 'title' ? w.config.title : w.config.subtitle; - var x = w.globals.svgWidth / 2; - var y = tsConfig.offsetY; - var textAnchor = 'middle'; - - if (tsConfig.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (tsConfig.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - x = x + tsConfig.offsetX; - y = y + parseInt(tsConfig.style.fontSize, 10) + tsConfig.margin / 2; - - if (tsConfig.text !== undefined) { - var graphics = new Graphics(this.ctx); - var titleText = graphics.drawText({ - x: x, - y: y, - text: tsConfig.text, - textAnchor: textAnchor, - fontSize: tsConfig.style.fontSize, - fontFamily: tsConfig.style.fontFamily, - fontWeight: tsConfig.style.fontWeight, - foreColor: tsConfig.style.color, - opacity: 1 - }); - titleText.node.setAttribute('class', "apexcharts-".concat(type, "-text")); - w.globals.dom.Paper.add(titleText); - } - } - }]); - - return TitleSubtitle; - }(); - - var Helpers$2 = /*#__PURE__*/function () { - function Helpers(dCtx) { - _classCallCheck(this, Helpers); - - this.w = dCtx.w; - this.dCtx = dCtx; - } - /** - * Get Chart Title/Subtitle Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - - _createClass(Helpers, [{ - key: "getTitleSubtitleCoords", - value: function getTitleSubtitleCoords(type) { - var w = this.w; - var width = 0; - var height = 0; - var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating; - var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-text")); - - if (el !== null && !floating) { - var coord = el.getBoundingClientRect(); - width = coord.width; - height = w.globals.axisCharts ? coord.height + 5 : coord.height; - } - - return { - width: width, - height: height - }; - } - }, { - key: "getLegendsRect", - value: function getLegendsRect() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var lgRect = Object.assign({}, Utils.getBoundingClientRect(elLegendWrap)); - - if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) { - this.dCtx.lgRect = { - x: lgRect.x, - y: lgRect.y, - height: lgRect.height, - width: lgRect.height === 0 ? 0 : lgRect.width - }; - } else { - this.dCtx.lgRect = { - x: 0, - y: 0, - height: 0, - width: 0 - }; - } // if legend takes up all of the chart space, we need to restrict it. - - - if (w.config.legend.position === 'left' || w.config.legend.position === 'right') { - if (this.dCtx.lgRect.width * 1.5 > w.globals.svgWidth) { - this.dCtx.lgRect.width = w.globals.svgWidth / 1.5; - } - } - - return this.dCtx.lgRect; - } - }, { - key: "getLargestStringFromMultiArr", - value: function getLargestStringFromMultiArr(val, arr) { - var w = this.w; - var valArr = val; - - if (w.globals.isMultiLineX) { - // if the xaxis labels has multiline texts (array) - var maxArrs = arr.map(function (xl, idx) { - return Array.isArray(xl) ? xl.length : 1; - }); - var maxArrLen = Math.max.apply(Math, _toConsumableArray(maxArrs)); - var maxArrIndex = maxArrs.indexOf(maxArrLen); - valArr = arr[maxArrIndex]; - } - - return valArr; - } - }]); - - return Helpers; - }(); - - var DimXAxis = /*#__PURE__*/function () { - function DimXAxis(dCtx) { - _classCallCheck(this, DimXAxis); - - this.w = dCtx.w; - this.dCtx = dCtx; - } - /** - * Get X Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - - _createClass(DimXAxis, [{ - key: "getxAxisLabelsCoords", - value: function getxAxisLabelsCoords() { - var w = this.w; - var xaxisLabels = w.globals.labels.slice(); - - if (w.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) { - xaxisLabels = w.globals.categoryLabels; - } - - var rect; - - if (w.globals.timescaleLabels.length > 0) { - var coords = this.getxAxisTimeScaleLabelsCoords(); - rect = { - width: coords.width, - height: coords.height - }; - w.globals.rotateXLabels = false; - } else { - this.dCtx.lgWidthForSideLegends = (w.config.legend.position === 'left' || w.config.legend.position === 'right') && !w.config.legend.floating ? this.dCtx.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter - - var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxes - fix #522 - - var val = Utils.getLargestStringFromArr(xaxisLabels); - var valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, xaxisLabels); // the labels gets changed for bar charts - - if (w.globals.isBarHorizontal) { - val = w.globals.yAxisScale[0].result.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - valArr = val; - } - - var xFormat = new Formatters(this.dCtx.ctx); - var timestamp = val; - val = xFormat.xLabelFormat(xlbFormatter, val, timestamp); - valArr = xFormat.xLabelFormat(xlbFormatter, valArr, timestamp); - - if (w.config.xaxis.convertedCatToNumeric && typeof val === 'undefined' || String(val).trim() === '') { - val = '1'; - valArr = val; - } - - var graphics = new Graphics(this.dCtx.ctx); - var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - var xArrLabelrect = xLabelrect; - - if (val !== valArr) { - xArrLabelrect = graphics.getTextRects(valArr, w.config.xaxis.labels.style.fontSize); - } - - rect = { - width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width, - height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height - }; - - if (rect.width * xaxisLabels.length > w.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w.config.xaxis.labels.rotate !== 0 || w.config.xaxis.labels.rotateAlways) { - if (!w.globals.isBarHorizontal) { - w.globals.rotateXLabels = true; - - var getRotatedTextRects = function getRotatedTextRects(text) { - return graphics.getTextRects(text, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); - }; - - xLabelrect = getRotatedTextRects(val); - - if (val !== valArr) { - xArrLabelrect = getRotatedTextRects(valArr); - } - - rect.height = (xLabelrect.height > xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height) / 1.5; - rect.width = xLabelrect.width > xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width; - } - } else { - w.globals.rotateXLabels = false; - } - } - - if (!w.config.xaxis.labels.show) { - rect = { - width: 0, - height: 0 - }; - } - - return { - width: rect.width, - height: rect.height - }; - } - /** - * Get X Axis Title Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisTitleCoords", - value: function getxAxisTitleCoords() { - var w = this.w; - var width = 0; - var height = 0; - - if (w.config.xaxis.title.text !== undefined) { - var graphics = new Graphics(this.dCtx.ctx); - var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize); - width = rect.width; - height = rect.height; - } - - return { - width: width, - height: height - }; - } - }, { - key: "getxAxisTimeScaleLabelsCoords", - value: function getxAxisTimeScaleLabelsCoords() { - var w = this.w; - var rect; - this.dCtx.timescaleLabels = w.globals.timescaleLabels.slice(); - var labels = this.dCtx.timescaleLabels.map(function (label) { - return label.value; - }); // get the longest string from the labels array and also apply label formatter to it - - var val = labels.reduce(function (a, b) { - // if undefined, maybe user didn't pass the datetime(x) values - if (typeof a === 'undefined') { - console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date'); - return 0; - } else { - return a.length > b.length ? a : b; - } - }, 0); - var graphics = new Graphics(this.dCtx.ctx); - rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - var totalWidthRotated = rect.width * 1.05 * labels.length; - - if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) { - w.globals.overlappingXLabels = true; - } - - return rect; - } // In certain cases, the last labels gets cropped in xaxis. - // Hence, we add some additional padding based on the label length to avoid the last label being cropped or we don't draw it at all - - }, { - key: "additionalPaddingXLabels", - value: function additionalPaddingXLabels(xaxisLabelCoords) { - var _this = this; - - var w = this.w; - var gl = w.globals; - var cnf = w.config; - var xtype = cnf.xaxis.type; // const predictedGridWidth = - // gl.svgWidth - - // this.dCtx.lgWidthForSideLegends - - // this.dCtx.yAxisWidth - - // this.dCtx.gridPad.left - - // this.dCtx.gridPad.right - - var lbWidth = xaxisLabelCoords.width; - gl.skipLastTimelinelabel = false; - gl.skipFirstTimelinelabel = false; - var isBarOpposite = w.config.yaxis[0].opposite && w.globals.isBarHorizontal; - - var isCollapsed = function isCollapsed(i) { - return gl.collapsedSeriesIndices.indexOf(i) !== -1; - }; - - var rightPad = function rightPad(yaxe) { - if (_this.dCtx.timescaleLabels && _this.dCtx.timescaleLabels.length) { - // for timeline labels, we take the last label and check if it exceeds gridWidth - var firstimescaleLabel = _this.dCtx.timescaleLabels[0]; - var lastTimescaleLabel = _this.dCtx.timescaleLabels[_this.dCtx.timescaleLabels.length - 1]; - var lastLabelPosition = lastTimescaleLabel.position + lbWidth / 1.75 - // replace + with - ; - // allow the last label to intersect with the right y axis - _this.dCtx.yAxisWidthRight; - var firstLabelPosition = firstimescaleLabel.position - lbWidth / 1.75 + // remove conditional since the first label is always at the very left - // allow the first label to intersect with the left y axes - _this.dCtx.yAxisWidthLeft; - - if (lastLabelPosition > gl.gridWidth) { - gl.skipLastTimelinelabel = true; - } - - if (firstLabelPosition < 0) { - gl.skipFirstTimelinelabel = true; - } - } else if (xtype === 'datetime') { - // If user has enabled DateTime, but uses own's formatter - if (_this.dCtx.gridPad.right < lbWidth && !gl.rotateXLabels) { - gl.skipLastTimelinelabel = true; - } - } else if (xtype !== 'datetime') { - if (_this.dCtx.gridPad.right < lbWidth / 2 - _this.dCtx.yAxisWidthRight && !gl.rotateXLabels && (w.config.xaxis.tickPlacement !== 'between' || w.globals.isBarHorizontal)) { - _this.dCtx.xPadRight = lbWidth / 2 + 1; - } - } - }; - - var padYAxe = function padYAxe(yaxe, i) { - if (isCollapsed(i)) return; - - if (xtype !== 'datetime') { - if (_this.dCtx.gridPad.left < lbWidth / 2 - _this.dCtx.yAxisWidthLeft && !gl.rotateXLabels && !cnf.xaxis.labels.trim) { - _this.dCtx.xPadLeft = lbWidth / 2 + 1; - } - } - - rightPad(); - }; - - cnf.yaxis.forEach(function (yaxe, i) { - if (isBarOpposite) { - if (_this.dCtx.gridPad.left < lbWidth) { - _this.dCtx.xPadLeft = lbWidth / 2 + 1; - } - - _this.dCtx.xPadRight = lbWidth / 2 + 1; - } else { - padYAxe(yaxe, i); - } - }); - } - }]); - - return DimXAxis; - }(); - - var DimYAxis = /*#__PURE__*/function () { - function DimYAxis(dCtx) { - _classCallCheck(this, DimYAxis); - - this.w = dCtx.w; - this.dCtx = dCtx; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - - _createClass(DimYAxis, [{ - key: "getyAxisLabelsCoords", - value: function getyAxisLabelsCoords() { - var _this = this; - - var w = this.w; - var width = 0; - var height = 0; - var ret = []; - var labelPad = 10; - var axesUtils = new AxesUtils(this.dCtx.ctx); - w.config.yaxis.map(function (yaxe, index) { - var yS = w.globals.yAxisScale[index]; - - if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yS.result.length) { - var lbFormatter = w.globals.yLabelFormatters[index]; - var longestStr = String(yS.niceMin).length > String(yS.niceMax).length ? yS.niceMin : yS.niceMax; // the second parameter -1 is the index of tick which user can use in the formatter - - var val = lbFormatter(longestStr, { - seriesIndex: index, - dataPointIndex: -1, - w: w - }); - var valArr = val; // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is. - - if (typeof val === 'undefined' || val.length === 0) { - val = longestStr; - } - - if (w.globals.isBarHorizontal) { - labelPad = 0; - var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it - - val = Utils.getLargestStringFromArr(barYaxisLabels); - val = lbFormatter(val, { - seriesIndex: index, - dataPointIndex: -1, - w: w - }); - valArr = _this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, barYaxisLabels); - } - - var graphics = new Graphics(_this.dCtx.ctx); - var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize); - var arrLabelrect = rect; - - if (val !== valArr) { - arrLabelrect = graphics.getTextRects(valArr, yaxe.labels.style.fontSize); - } - - ret.push({ - width: (arrLabelrect.width > rect.width ? arrLabelrect.width : rect.width) + labelPad, - height: arrLabelrect.height > rect.height ? arrLabelrect.height : rect.height - }); - } else { - ret.push({ - width: width, - height: height - }); - } - }); - return ret; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisTitleCoords", - value: function getyAxisTitleCoords() { - var _this2 = this; - - var w = this.w; - var ret = []; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.title.text !== undefined) { - var graphics = new Graphics(_this2.dCtx.ctx); - var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, 'rotate(-90 0 0)', false); - ret.push({ - width: rect.width, - height: rect.height - }); - } else { - ret.push({ - width: 0, - height: 0 - }); - } - }); - return ret; - } - }, { - key: "getTotalYAxisWidth", - value: function getTotalYAxisWidth() { - var w = this.w; - var yAxisWidth = 0; - var yAxisWidthLeft = 0; - var yAxisWidthRight = 0; - var padding = w.globals.yAxisScale.length > 1 ? 10 : 0; - var axesUtils = new AxesUtils(this.dCtx.ctx); - - var isHiddenYAxis = function isHiddenYAxis(index) { - return w.globals.ignoreYAxisIndexes.indexOf(index) > -1; - }; - - var padForLabelTitle = function padForLabelTitle(coord, index) { - var floating = w.config.yaxis[index].floating; - var width = 0; - - if (coord.width > 0 && !floating) { - width = coord.width + padding; - - if (isHiddenYAxis(index)) { - width = width - coord.width - padding; - } - } else { - width = floating || axesUtils.isYAxisHidden(index) ? 0 : 5; - } - - w.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width; - yAxisWidth = yAxisWidth + width; - }; - - w.globals.yLabelsCoords.map(function (yLabelCoord, index) { - padForLabelTitle(yLabelCoord, index); - }); - w.globals.yTitleCoords.map(function (yTitleCoord, index) { - padForLabelTitle(yTitleCoord, index); - }); - - if (w.globals.isBarHorizontal) { - yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; - } - - this.dCtx.yAxisWidthLeft = yAxisWidthLeft; - this.dCtx.yAxisWidthRight = yAxisWidthRight; - return yAxisWidth; - } - }]); - - return DimYAxis; - }(); - - var DimGrid = /*#__PURE__*/function () { - function DimGrid(dCtx) { - _classCallCheck(this, DimGrid); - - this.w = dCtx.w; - this.dCtx = dCtx; - } - - _createClass(DimGrid, [{ - key: "gridPadForColumnsInNumericAxis", - value: function gridPadForColumnsInNumericAxis(gridWidth) { - var w = this.w; - - if (w.globals.noData || w.globals.allSeriesCollapsed) { - return 0; - } - - var type = w.config.chart.type; - var barWidth = 0; - var seriesLen = type === 'bar' || type === 'rangeBar' ? w.config.series.length : 1; - - if (w.globals.comboBarCount > 0) { - seriesLen = w.globals.comboBarCount; - } - - w.globals.collapsedSeries.forEach(function (c) { - if (c.type === 'bar' || c.type === 'rangeBar') { - seriesLen = seriesLen - 1; - } - }); - - if (w.config.chart.stacked) { - seriesLen = 1; - } - - var hasBar = type === 'bar' || type === 'rangeBar' || w.globals.comboBarCount > 0; - - if (hasBar && w.globals.isXNumeric && !w.globals.isBarHorizontal && seriesLen > 0) { - var xRatio = 0; - var xRange = Math.abs(w.globals.initialMaxX - w.globals.initialMinX); - - if (xRange <= 3) { - xRange = w.globals.dataPoints; - } - - xRatio = xRange / gridWidth; - var xDivision; // max barwidth should be equal to minXDiff to avoid overlap - - if (w.globals.minXDiff && w.globals.minXDiff / xRatio > 0) { - xDivision = w.globals.minXDiff / xRatio; - } - - if (xDivision > gridWidth / 2) { - xDivision = xDivision / 2; - } - - barWidth = xDivision / seriesLen * parseInt(w.config.plotOptions.bar.columnWidth, 10) / 100; - - if (barWidth < 1) { - barWidth = 1; - } - - barWidth = barWidth / (seriesLen > 1 ? 1 : 1.5) + 5; - w.globals.barPadForNumericAxis = barWidth; - } - - return barWidth; - } - }, { - key: "gridPadFortitleSubtitle", - value: function gridPadFortitleSubtitle() { - var _this = this; - - var w = this.w; - var gl = w.globals; - var gridShrinkOffset = this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 10; - var titleSubtitle = ['title', 'subtitle']; - titleSubtitle.forEach(function (t) { - if (w.config[t].text !== undefined) { - gridShrinkOffset += w.config[t].margin; - } else { - gridShrinkOffset += _this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - }); - var nonAxisOrMultiSeriesCharts = w.config.series.length > 1 || !w.globals.axisCharts || w.config.legend.showForSingleSeries; - - if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && nonAxisOrMultiSeriesCharts) { - gridShrinkOffset += 10; - } - - var titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('title'); - var subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('subtitle'); - gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset; - gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset; - } - }, { - key: "setGridXPosForDualYAxis", - value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) { - var w = this.w; - var axesUtils = new AxesUtils(this.dCtx.ctx); - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) { - if (yaxe.opposite) { - w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize, 10) / 1.2 - 12; - } - } - }); - } - }]); - - return DimGrid; - }(); - - /** - * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn. - * - * @module Dimensions - **/ - - var Dimensions = /*#__PURE__*/function () { - function Dimensions(ctx) { - _classCallCheck(this, Dimensions); - - this.ctx = ctx; - this.w = ctx.w; - this.lgRect = {}; - this.yAxisWidth = 0; - this.yAxisWidthLeft = 0; - this.yAxisWidthRight = 0; - this.xAxisHeight = 0; - this.isSparkline = this.w.config.chart.sparkline.enabled; - this.dimHelpers = new Helpers$2(this); - this.dimYAxis = new DimYAxis(this); - this.dimXAxis = new DimXAxis(this); - this.dimGrid = new DimGrid(this); - this.lgWidthForSideLegends = 0; - this.gridPad = this.w.config.grid.padding; - this.xPadRight = 0; - this.xPadLeft = 0; - } - /** - * @memberof Dimensions - * @param {object} w - chart context - **/ - - - _createClass(Dimensions, [{ - key: "plotCoords", - value: function plotCoords() { - var w = this.w; - var gl = w.globals; - this.lgRect = this.dimHelpers.getLegendsRect(); - - if (gl.axisCharts) { - // for line / area / scatter / column - this.setDimensionsForAxisCharts(); - } else { - // for pie / donuts / circle - this.setDimensionsForNonAxisCharts(); - } - - this.dimGrid.gridPadFortitleSubtitle(); // after calculating everything, apply padding set by user - - gl.gridHeight = gl.gridHeight - this.gridPad.top - this.gridPad.bottom; - gl.gridWidth = gl.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft; - var barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(gl.gridWidth); - gl.gridWidth = gl.gridWidth - barWidth * 2; - gl.translateX = gl.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth + 4 : 0); - gl.translateY = gl.translateY + this.gridPad.top; - } - }, { - key: "setDimensionsForAxisCharts", - value: function setDimensionsForAxisCharts() { - var _this = this; - - var w = this.w; - var gl = w.globals; - var yaxisLabelCoords = this.dimYAxis.getyAxisLabelsCoords(); - var yTitleCoords = this.dimYAxis.getyAxisTitleCoords(); - w.globals.yLabelsCoords = []; - w.globals.yTitleCoords = []; - w.config.yaxis.map(function (yaxe, index) { - // store the labels and titles coords in global vars - w.globals.yLabelsCoords.push({ - width: yaxisLabelCoords[index].width, - index: index - }); - w.globals.yTitleCoords.push({ - width: yTitleCoords[index].width, - index: index - }); - }); - this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth(); - var xaxisLabelCoords = this.dimXAxis.getxAxisLabelsCoords(); - var xtitleCoords = this.dimXAxis.getxAxisTitleCoords(); - this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords); - gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; - gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - - if (w.globals.isBarHorizontal) { - gl.rotateXLabels = false; - gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize, 10) / 1.5); - } - - gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY; - gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX; - var yAxisWidth = this.yAxisWidth; - var xAxisHeight = this.xAxisHeight; - gl.xAxisLabelsHeight = this.xAxisHeight; - gl.xAxisHeight = this.xAxisHeight; - var translateY = 10; - - if (w.config.chart.type === 'radar' || this.isSparkline) { - yAxisWidth = 0; - xAxisHeight = gl.goldenPadding; - } - - if (this.isSparkline) { - this.lgRect = { - height: 0, - width: 0 - }; - xAxisHeight = 0; - yAxisWidth = 0; - translateY = 0; - } - - this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords); - - var legendTopBottom = function legendTopBottom() { - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - _this.lgRect.height - xAxisHeight - (!_this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - }; - - if (w.config.xaxis.position === 'top') translateY = gl.xAxisHeight - w.config.xaxis.axisTicks.height - 5; - - switch (w.config.legend.position) { - case 'bottom': - gl.translateY = translateY; - legendTopBottom(); - break; - - case 'top': - gl.translateY = this.lgRect.height + translateY; - legendTopBottom(); - break; - - case 'left': - gl.translateY = translateY; - gl.translateX = this.lgRect.width + yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth; - break; - - case 'right': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - 5; - break; - - default: - throw new Error('Legend position not supported'); - } - - this.dimGrid.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions - - var objyAxis = new YAxis(this.ctx); - objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords); - } - }, { - key: "setDimensionsForNonAxisCharts", - value: function setDimensionsForNonAxisCharts() { - var w = this.w; - var gl = w.globals; - var cnf = w.config; - var xPad = 0; - - if (w.config.legend.show && !w.config.legend.floating) { - xPad = 20; - } - - var type = cnf.chart.type === 'pie' || cnf.chart.type === 'polarArea' || cnf.chart.type === 'donut' ? 'pie' : 'radialBar'; - var offY = cnf.plotOptions[type].offsetY; - var offX = cnf.plotOptions[type].offsetX; - - if (!cnf.legend.show || cnf.legend.floating) { - gl.gridHeight = gl.svgHeight - cnf.grid.padding.left + cnf.grid.padding.right; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - return; - } - - switch (cnf.legend.position) { - case 'bottom': - gl.gridHeight = gl.svgHeight - this.lgRect.height - gl.goldenPadding; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 10; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'top': - gl.gridHeight = gl.svgHeight - this.lgRect.height - gl.goldenPadding; - gl.gridWidth = gl.gridHeight; - gl.translateY = this.lgRect.height + offY + 10; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'left': - gl.gridWidth = gl.svgWidth - this.lgRect.width - xPad; - gl.gridHeight = cnf.chart.height !== 'auto' ? gl.svgHeight : gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + this.lgRect.width + xPad; - break; - - case 'right': - gl.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5; - gl.gridHeight = cnf.chart.height !== 'auto' ? gl.svgHeight : gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + 10; - break; - - default: - throw new Error('Legend position not supported'); - } - } - }, { - key: "conditionalChecksForAxisCoords", - value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords) { - var w = this.w; - this.xAxisHeight = (xaxisLabelCoords.height + xtitleCoords.height) * (w.globals.isMultiLineX ? 1.2 : w.globals.LINE_HEIGHT_RATIO) + (w.globals.rotateXLabels ? 22 : 10); - this.xAxisWidth = xaxisLabelCoords.width; - - if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) { - this.xAxisHeight = w.config.xaxis.labels.maxHeight; - } - - if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) { - this.xAxisHeight = w.config.xaxis.labels.minHeight; - } - - if (w.config.xaxis.floating) { - this.xAxisHeight = 0; - } - - var minYAxisWidth = 0; - var maxYAxisWidth = 0; - w.config.yaxis.forEach(function (y) { - minYAxisWidth += y.labels.minWidth; - maxYAxisWidth += y.labels.maxWidth; - }); - - if (this.yAxisWidth < minYAxisWidth) { - this.yAxisWidth = minYAxisWidth; - } - - if (this.yAxisWidth > maxYAxisWidth) { - this.yAxisWidth = maxYAxisWidth; - } - } - }]); - - return Dimensions; - }(); - - var Helpers$3 = /*#__PURE__*/function () { - function Helpers(lgCtx) { - _classCallCheck(this, Helpers); - - this.w = lgCtx.w; - this.lgCtx = lgCtx; - } - - _createClass(Helpers, [{ - key: "getLegendStyles", - value: function getLegendStyles() { - var stylesheet = document.createElement('style'); - stylesheet.setAttribute('type', 'text/css'); - var text = "\t\n \t\n .apexcharts-legend {\t\n display: flex;\t\n overflow: auto;\t\n padding: 0 10px;\t\n }\t\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\t\n flex-wrap: wrap\t\n }\t\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\t\n flex-direction: column;\t\n bottom: 0;\t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-left, .apexcharts-legend.position-top.apexcharts-align-left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\t\n justify-content: flex-start;\t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-center, .apexcharts-legend.position-top.apexcharts-align-center {\t\n justify-content: center; \t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-right, .apexcharts-legend.position-top.apexcharts-align-right {\t\n justify-content: flex-end;\t\n }\t\n .apexcharts-legend-series {\t\n cursor: pointer;\t\n line-height: normal;\t\n }\t\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\t\n display: flex;\t\n align-items: center;\t\n }\t\n .apexcharts-legend-text {\t\n position: relative;\t\n font-size: 14px;\t\n }\t\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\t\n pointer-events: none;\t\n }\t\n .apexcharts-legend-marker {\t\n position: relative;\t\n display: inline-block;\t\n cursor: pointer;\t\n margin-right: 3px;\t\n border-style: solid;\n }\t\n \t\n .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\t\n display: inline-block;\t\n }\t\n .apexcharts-legend-series.apexcharts-no-click {\t\n cursor: auto;\t\n }\t\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\t\n display: none !important;\t\n }\t\n .apexcharts-inactive-legend {\t\n opacity: 0.45;\t\n }"; - var rules = document.createTextNode(text); - stylesheet.appendChild(rules); - return stylesheet; - } - }, { - key: "getLegendBBox", - value: function getLegendBBox() { - var w = this.w; - var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect(); - var currLegendsWrapWidth = currLegendsWrapRect.width; - var currLegendsWrapHeight = currLegendsWrapRect.height; - return { - clwh: currLegendsWrapHeight, - clww: currLegendsWrapWidth - }; - } - }, { - key: "appendToForeignObject", - value: function appendToForeignObject() { - var gl = this.w.globals; - gl.dom.elLegendForeign = document.createElementNS(gl.SVGNS, 'foreignObject'); - var elForeign = gl.dom.elLegendForeign; - elForeign.setAttribute('x', 0); - elForeign.setAttribute('y', 0); - elForeign.setAttribute('width', gl.svgWidth); - elForeign.setAttribute('height', gl.svgHeight); - gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); - elForeign.appendChild(gl.dom.elLegendWrap); - elForeign.appendChild(this.getLegendStyles()); - gl.dom.Paper.node.insertBefore(elForeign, gl.dom.elGraphical.node); - } - }, { - key: "toggleDataSeries", - value: function toggleDataSeries(seriesCnt, isHidden) { - var _this = this; - - var w = this.w; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - w.globals.resized = true; // we don't want initial animations again - - var seriesEl = null; - var realIndex = null; // yes, make it null. 1 series will rise at a time - - w.globals.risingSeries = []; - - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - realIndex = parseInt(seriesEl.getAttribute('data:realIndex'), 10); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - realIndex = parseInt(seriesEl.getAttribute('rel'), 10) - 1; - } - - if (isHidden) { - var seriesToMakeVisible = [{ - cs: w.globals.collapsedSeries, - csi: w.globals.collapsedSeriesIndices - }, { - cs: w.globals.ancillaryCollapsedSeries, - csi: w.globals.ancillaryCollapsedSeriesIndices - }]; - seriesToMakeVisible.forEach(function (r) { - _this.riseCollapsedSeries(r.cs, r.csi, realIndex); - }); - } else { - this.hideSeries({ - seriesEl: seriesEl, - realIndex: realIndex - }); - } - } else { - // for non-axis charts i.e pie / donuts - var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - - var type = w.config.chart.type; - - if (type === 'pie' || type === 'polarArea' || type === 'donut') { - var dataLabels = w.config.plotOptions.pie.donut.labels; - var graphics = new Graphics(this.lgCtx.ctx); - graphics.pathMouseDown(_seriesEl.members[0], null); - this.lgCtx.ctx.pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); - } - - _seriesEl.fire('click'); - } - } - }, { - key: "hideSeries", - value: function hideSeries(_ref) { - var seriesEl = _ref.seriesEl, - realIndex = _ref.realIndex; - var w = this.w; - var series = Utils.clone(w.config.series); - - if (w.globals.axisCharts) { - var shouldNotHideYAxis = false; - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) { - shouldNotHideYAxis = true; - - if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) { - w.globals.ancillaryCollapsedSeries.push({ - index: realIndex, - data: series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.ancillaryCollapsedSeriesIndices.push(realIndex); - } - } - - if (!shouldNotHideYAxis) { - w.globals.collapsedSeries.push({ - index: realIndex, - data: series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex); - w.globals.risingSeries.splice(removeIndexOfRising, 1); - } - - series[realIndex].data = []; - } else { - w.globals.collapsedSeries.push({ - index: realIndex, - data: series[realIndex] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - series[realIndex] = 0; - } - - var seriesChildren = seriesEl.childNodes; - - for (var sc = 0; sc < seriesChildren.length; sc++) { - if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) { - if (seriesChildren[sc].classList.contains('apexcharts-hide')) { - seriesChildren[sc].classList.remove('apexcharts-hide'); - } else { - seriesChildren[sc].classList.add('apexcharts-hide'); - } - } - } - - w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.config.series.length; - - this.lgCtx.ctx.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled); - } - }, { - key: "riseCollapsedSeries", - value: function riseCollapsedSeries(series, seriesIndices, realIndex) { - var w = this.w; - - if (series.length > 0) { - for (var c = 0; c < series.length; c++) { - if (series[c].index === realIndex) { - if (w.globals.axisCharts) { - w.config.series[realIndex].data = series[c].data.slice(); - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } else { - w.config.series[realIndex] = series[c].data; - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } - - this.lgCtx.ctx.updateHelpers._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - } - } - }]); - - return Helpers; - }(); - - /** - * ApexCharts Legend Class to draw legend. - * - * @module Legend - **/ - - var Legend = /*#__PURE__*/function () { - function Legend(ctx, opts) { - _classCallCheck(this, Legend); - - this.ctx = ctx; - this.w = ctx.w; - this.onLegendClick = this.onLegendClick.bind(this); - this.onLegendHovered = this.onLegendHovered.bind(this); - this.isBarsDistributed = this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1; - this.legendHelpers = new Helpers$3(this); - } - - _createClass(Legend, [{ - key: "init", - value: function init() { - var w = this.w; - var gl = w.globals; - var cnf = w.config; - var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || this.isBarsDistributed || gl.series.length > 1; - - if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) { - while (gl.dom.elLegendWrap.firstChild) { - gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild); - } - - this.drawLegends(); - - if (!Utils.isIE11()) { - this.legendHelpers.appendToForeignObject(); - } else { - // IE11 doesn't supports foreignObject, hence append it to - document.getElementsByTagName('head')[0].appendChild(this.legendHelpers.getLegendStyles()); - } - - if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') { - this.legendAlignHorizontal(); - } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') { - this.legendAlignVertical(); - } - } - } - }, { - key: "drawLegends", - value: function drawLegends() { - var self = this; - var w = this.w; - var fontFamily = w.config.legend.fontFamily; - var legendNames = w.globals.seriesNames; - var fillcolor = w.globals.colors.slice(); - - if (w.config.chart.type === 'heatmap') { - var ranges = w.config.plotOptions.heatmap.colorScale.ranges; - legendNames = ranges.map(function (colorScale) { - return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to; - }); - fillcolor = ranges.map(function (color) { - return color.color; - }); - } else if (this.isBarsDistributed) { - legendNames = w.globals.labels.slice(); - } - - var legendFormatter = w.globals.legendFormatter; - var isLegendInversed = w.config.legend.inverseOrder; - - for (var i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) { - var text = legendFormatter(legendNames[i], { - seriesIndex: i, - w: w - }); - var collapsedSeries = false; - var ancillaryCollapsedSeries = false; - - if (w.globals.collapsedSeries.length > 0) { - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - if (w.globals.collapsedSeries[c].index === i) { - collapsedSeries = true; - } - } - } - - if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) { - for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) { - if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) { - ancillaryCollapsedSeries = true; - } - } - } - - var elMarker = document.createElement('span'); - elMarker.classList.add('apexcharts-legend-marker'); - var mOffsetX = w.config.legend.markers.offsetX; - var mOffsetY = w.config.legend.markers.offsetY; - var mHeight = w.config.legend.markers.height; - var mWidth = w.config.legend.markers.width; - var mBorderWidth = w.config.legend.markers.strokeWidth; - var mBorderColor = w.config.legend.markers.strokeColor; - var mBorderRadius = w.config.legend.markers.radius; - var mStyle = elMarker.style; - mStyle.background = fillcolor[i]; - mStyle.color = fillcolor[i]; // override fill color with custom legend.markers.fillColors - - if (w.config.legend.markers.fillColors && w.config.legend.markers.fillColors[i]) { - mStyle.background = w.config.legend.markers.fillColors[i]; - } - - mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px'; - mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px'; - mStyle.left = Array.isArray(mOffsetX) ? mOffsetX[i] : mOffsetX; - mStyle.top = Array.isArray(mOffsetY) ? mOffsetY[i] : mOffsetY; - mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth; - mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor; - mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px'; - - if (w.config.legend.markers.customHTML) { - if (Array.isArray(w.config.legend.markers.customHTML)) { - if (w.config.legend.markers.customHTML[i]) { - elMarker.innerHTML = w.config.legend.markers.customHTML[i](); - } - } else { - elMarker.innerHTML = w.config.legend.markers.customHTML(); - } - } - - Graphics.setAttrs(elMarker, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elMarker.classList.add('apexcharts-inactive-legend'); - } - - var elLegend = document.createElement('div'); - var elLegendText = document.createElement('span'); - elLegendText.classList.add('apexcharts-legend-text'); - elLegendText.innerHTML = Array.isArray(text) ? text.join(' ') : text; - var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors; - - if (!textColor) { - textColor = w.config.chart.foreColor; - } - - elLegendText.style.color = textColor; - elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px'; - elLegendText.style.fontWeight = w.config.legend.fontWeight; - elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily; - Graphics.setAttrs(elLegendText, { - rel: i + 1, - i: i, - 'data:default-text': encodeURIComponent(text), - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - elLegend.appendChild(elMarker); - elLegend.appendChild(elLegendText); - var coreUtils = new CoreUtils(this.ctx); - - if (!w.config.legend.showForZeroSeries) { - var total = coreUtils.getSeriesTotalByIndex(i); - - if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-zero-series'); - } - } - - if (!w.config.legend.showForNullSeries) { - if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-null-series'); - } - } - - w.globals.dom.elLegendWrap.appendChild(elLegend); - w.globals.dom.elLegendWrap.classList.add("apexcharts-align-".concat(w.config.legend.horizontalAlign)); - w.globals.dom.elLegendWrap.classList.add('position-' + w.config.legend.position); - elLegend.classList.add('apexcharts-legend-series'); - elLegend.style.margin = "".concat(w.config.legend.itemMargin.vertical, "px ").concat(w.config.legend.itemMargin.horizontal, "px"); - w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : ''; - w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : ''; - Graphics.setAttrs(elLegend, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elLegend.classList.add('apexcharts-inactive-legend'); - } - - if (!w.config.legend.onItemClick.toggleDataSeries) { - elLegend.classList.add('apexcharts-no-click'); - } - } // for now - just prevent click on heatmap legend - and allow hover only - - - var clickAllowed = w.config.chart.type !== 'heatmap' && !this.isBarsDistributed; - - if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) { - w.globals.dom.elWrap.addEventListener('click', self.onLegendClick, true); - } - - if (w.config.legend.onItemHover.highlightDataSeries) { - w.globals.dom.elWrap.addEventListener('mousemove', self.onLegendHovered, true); - w.globals.dom.elWrap.addEventListener('mouseout', self.onLegendHovered, true); - } - } - }, { - key: "setLegendWrapXY", - value: function setLegendWrapXY(offsetX, offsetY) { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var legendRect = elLegendWrap.getBoundingClientRect(); - var x = 0; - var y = 0; - - if (w.config.legend.position === 'bottom') { - y = y + (w.globals.svgHeight - legendRect.height / 2); - } else if (w.config.legend.position === 'top') { - var dim = new Dimensions(this.ctx); - var titleH = dim.dimHelpers.getTitleSubtitleCoords('title').height; - var subtitleH = dim.dimHelpers.getTitleSubtitleCoords('subtitle').height; - y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0); - } - - elLegendWrap.style.position = 'absolute'; - x = x + offsetX + w.config.legend.offsetX; - y = y + offsetY + w.config.legend.offsetY; - elLegendWrap.style.left = x + 'px'; - elLegendWrap.style.top = y + 'px'; - - if (w.config.legend.position === 'bottom') { - elLegendWrap.style.top = 'auto'; - elLegendWrap.style.bottom = 5 - w.config.legend.offsetY + 'px'; - } else if (w.config.legend.position === 'right') { - elLegendWrap.style.left = 'auto'; - elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px'; - } - - var fixedHeigthWidth = ['width', 'height']; - fixedHeigthWidth.forEach(function (hw) { - if (elLegendWrap.style[hw]) { - elLegendWrap.style[hw] = parseInt(w.config.legend[hw], 10) + 'px'; - } - }); - } - }, { - key: "legendAlignHorizontal", - value: function legendAlignHorizontal() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - elLegendWrap.style.right = 0; - var lRect = this.legendHelpers.getLegendBBox(); - var dimensions = new Dimensions(this.ctx); - var titleRect = dimensions.dimHelpers.getTitleSubtitleCoords('title'); - var subtitleRect = dimensions.dimHelpers.getTitleSubtitleCoords('subtitle'); - var offsetX = 20; - var offsetY = 0; // the whole legend box is set to bottom - - if (w.config.legend.position === 'bottom') { - offsetY = -lRect.clwh / 1.8; - } else if (w.config.legend.position === 'top') { - offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 10; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "legendAlignVertical", - value: function legendAlignVertical() { - var w = this.w; - var lRect = this.legendHelpers.getLegendBBox(); - var offsetY = 20; - var offsetX = 0; - - if (w.config.legend.position === 'left') { - offsetX = 20; - } - - if (w.config.legend.position === 'right') { - offsetX = w.globals.svgWidth - lRect.clww - 10; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "onLegendHovered", - value: function onLegendHovered(e) { - var w = this.w; - var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker'); - - if (w.config.chart.type !== 'heatmap' && !this.isBarsDistributed) { - if (!e.target.classList.contains('apexcharts-inactive-legend') && hoverOverLegend) { - var series = new Series(this.ctx); - series.toggleSeriesOnHover(e, e.target); - } - } else { - // for heatmap handling - if (hoverOverLegend) { - var seriesCnt = parseInt(e.target.getAttribute('rel'), 10) - 1; - this.ctx.events.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]); - - var _series = new Series(this.ctx); - - _series.highlightRangeInSeries(e, e.target); - } - } - } - }, { - key: "onLegendClick", - value: function onLegendClick(e) { - if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) { - var seriesCnt = parseInt(e.target.getAttribute('rel'), 10) - 1; - var isHidden = e.target.getAttribute('data:collapsed') === 'true'; - var legendClick = this.w.config.chart.events.legendClick; - - if (typeof legendClick === 'function') { - legendClick(this.ctx, seriesCnt, this.w); - } - - this.ctx.events.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]); - var markerClick = this.w.config.legend.markers.onClick; - - if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) { - markerClick(this.ctx, seriesCnt, this.w); - this.ctx.events.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]); - } - - this.legendHelpers.toggleDataSeries(seriesCnt, isHidden); - } - } - }]); - - return Legend; - }(); - - var icoPan = "\n \n \n \n \n \n \n \n"; - - var icoZoom = "\n \n \n \n"; - - var icoReset = "\n \n \n"; - - var icoZoomIn = "\n \n \n\n"; - - var icoZoomOut = "\n \n \n\n"; - - var icoSelect = "\n \n \n"; - - var icoMenu = ""; - - /** - * ApexCharts Toolbar Class for creating toolbar in axis based charts. - * - * @module Toolbar - **/ - - var Toolbar = /*#__PURE__*/function () { - function Toolbar(ctx) { - _classCallCheck(this, Toolbar); - - this.ctx = ctx; - this.w = ctx.w; - this.ev = this.w.config.chart.events; - this.selectedClass = 'apexcharts-selected'; - this.localeValues = this.w.globals.locale.toolbar; - } - - _createClass(Toolbar, [{ - key: "createToolbar", - value: function createToolbar() { - var _this = this; - - var w = this.w; - - var createDiv = function createDiv() { - return document.createElement('div'); - }; - - var elToolbarWrap = createDiv(); - elToolbarWrap.setAttribute('class', 'apexcharts-toolbar'); - elToolbarWrap.style.top = w.config.chart.toolbar.offsetY + 'px'; - elToolbarWrap.style.right = -w.config.chart.toolbar.offsetX + 3 + 'px'; - w.globals.dom.elWrap.appendChild(elToolbarWrap); - this.elZoom = createDiv(); - this.elZoomIn = createDiv(); - this.elZoomOut = createDiv(); - this.elPan = createDiv(); - this.elSelection = createDiv(); - this.elZoomReset = createDiv(); - this.elMenuIcon = createDiv(); - this.elMenu = createDiv(); - this.elCustomIcons = []; - this.t = w.config.chart.toolbar.tools; - - if (Array.isArray(this.t.customIcons)) { - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons.push(createDiv()); - } - } - - var toolbarControls = []; - - var appendZoomControl = function appendZoomControl(type, el, ico) { - var tool = type.toLowerCase(); - - if (_this.t[tool] && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: el, - icon: typeof _this.t[tool] === 'string' ? _this.t[tool] : ico, - title: _this.localeValues[type], - class: "apexcharts-".concat(tool, "-icon") - }); - } - }; - - appendZoomControl('zoomIn', this.elZoomIn, icoZoomIn); - appendZoomControl('zoomOut', this.elZoomOut, icoZoomOut); - - var zoomSelectionCtrls = function zoomSelectionCtrls(z) { - if (_this.t[z] && w.config.chart[z].enabled) { - toolbarControls.push({ - el: z === 'zoom' ? _this.elZoom : _this.elSelection, - icon: typeof _this.t[z] === 'string' ? _this.t[z] : z === 'zoom' ? icoZoom : icoSelect, - title: _this.localeValues[z === 'zoom' ? 'selectionZoom' : 'selection'], - class: w.globals.isTouchDevice ? 'apexcharts-element-hidden' : "apexcharts-".concat(z, "-icon") - }); - } - }; - - zoomSelectionCtrls('zoom'); - zoomSelectionCtrls('selection'); - - if (this.t.pan && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elPan, - icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan, - title: this.localeValues.pan, - class: w.globals.isTouchDevice ? 'apexcharts-element-hidden' : 'apexcharts-pan-icon' - }); - } - - appendZoomControl('reset', this.elZoomReset, icoReset); - - if (this.t.download) { - toolbarControls.push({ - el: this.elMenuIcon, - icon: typeof this.t.download === 'string' ? this.t.download : icoMenu, - title: this.localeValues.menu, - class: 'apexcharts-menu-icon' - }); - } - - for (var _i = 0; _i < this.elCustomIcons.length; _i++) { - toolbarControls.push({ - el: this.elCustomIcons[_i], - icon: this.t.customIcons[_i].icon, - title: this.t.customIcons[_i].title, - index: this.t.customIcons[_i].index, - class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class - }); - } - - toolbarControls.forEach(function (t, index) { - if (t.index) { - Utils.moveIndexInArray(toolbarControls, index, t.index); - } - }); - - for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) { - Graphics.setAttrs(toolbarControls[_i2].el, { - class: toolbarControls[_i2].class, - title: toolbarControls[_i2].title - }); - toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon; - elToolbarWrap.appendChild(toolbarControls[_i2].el); - } - - this._createHamburgerMenu(elToolbarWrap); - - if (w.globals.zoomEnabled) { - this.elZoom.classList.add(this.selectedClass); - } else if (w.globals.panEnabled) { - this.elPan.classList.add(this.selectedClass); - } else if (w.globals.selectionEnabled) { - this.elSelection.classList.add(this.selectedClass); - } - - this.addToolbarEventListeners(); - } - }, { - key: "_createHamburgerMenu", - value: function _createHamburgerMenu(parent) { - this.elMenuItems = []; - parent.appendChild(this.elMenu); - Graphics.setAttrs(this.elMenu, { - class: 'apexcharts-menu' - }); - var menuItems = [{ - name: 'exportSVG', - title: this.localeValues.exportToSVG - }, { - name: 'exportPNG', - title: this.localeValues.exportToPNG - }, { - name: 'exportCSV', - title: this.localeValues.exportToCSV - }]; - - if (!this.w.globals.allSeriesHasEqualX) { - // if it is a multi series, and all series have variable x values, export CSV won't work - menuItems.splice(2, 1); - } - - for (var i = 0; i < menuItems.length; i++) { - this.elMenuItems.push(document.createElement('div')); - this.elMenuItems[i].innerHTML = menuItems[i].title; - Graphics.setAttrs(this.elMenuItems[i], { - class: "apexcharts-menu-item ".concat(menuItems[i].name), - title: menuItems[i].title - }); - this.elMenu.appendChild(this.elMenuItems[i]); - } - } - }, { - key: "addToolbarEventListeners", - value: function addToolbarEventListeners() { - var _this2 = this; - - this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.addEventListener('click', this.toggleZoomSelection.bind(this, 'selection')); - this.elZoom.addEventListener('click', this.toggleZoomSelection.bind(this, 'zoom')); - this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.addEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this)); - this.elMenuItems.forEach(function (m) { - if (m.classList.contains('exportSVG')) { - m.addEventListener('click', _this2.handleDownload.bind(_this2, 'svg')); - } else if (m.classList.contains('exportPNG')) { - m.addEventListener('click', _this2.handleDownload.bind(_this2, 'png')); - } else if (m.classList.contains('exportCSV')) { - m.addEventListener('click', _this2.handleDownload.bind(_this2, 'csv')); - } - }); - - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w)); - } - } - }, { - key: "toggleZoomSelection", - value: function toggleZoomSelection(type) { - var charts = this.ctx.getSyncedCharts(); - charts.forEach(function (ch) { - ch.ctx.toolbar.toggleOtherControls(); - var el = type === 'selection' ? ch.ctx.toolbar.elSelection : ch.ctx.toolbar.elZoom; - var enabledType = type === 'selection' ? 'selectionEnabled' : 'zoomEnabled'; - ch.w.globals[enabledType] = !ch.w.globals[enabledType]; - - if (!el.classList.contains(ch.ctx.toolbar.selectedClass)) { - el.classList.add(ch.ctx.toolbar.selectedClass); - } else { - el.classList.remove(ch.ctx.toolbar.selectedClass); - } - }); - } - }, { - key: "getToolbarIconsReference", - value: function getToolbarIconsReference() { - var w = this.w; - - if (!this.elZoom) { - this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon'); - } - - if (!this.elPan) { - this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon'); - } - - if (!this.elSelection) { - this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon'); - } - } - }, { - key: "enableZoomPanFromToolbar", - value: function enableZoomPanFromToolbar(type) { - this.toggleOtherControls(); - type === 'pan' ? this.w.globals.panEnabled = true : this.w.globals.zoomEnabled = true; - var el = type === 'pan' ? this.elPan : this.elZoom; - var el2 = type === 'pan' ? this.elZoom : this.elPan; - - if (el) { - el.classList.add(this.selectedClass); - } - - if (el2) { - el2.classList.remove(this.selectedClass); - } - } - }, { - key: "togglePanning", - value: function togglePanning() { - var charts = this.ctx.getSyncedCharts(); - charts.forEach(function (ch) { - ch.ctx.toolbar.toggleOtherControls(); - ch.w.globals.panEnabled = !ch.w.globals.panEnabled; - - if (!ch.ctx.toolbar.elPan.classList.contains(ch.ctx.toolbar.selectedClass)) { - ch.ctx.toolbar.elPan.classList.add(ch.ctx.toolbar.selectedClass); - } else { - ch.ctx.toolbar.elPan.classList.remove(ch.ctx.toolbar.selectedClass); - } - }); - } - }, { - key: "toggleOtherControls", - value: function toggleOtherControls() { - var _this3 = this; - - var w = this.w; - w.globals.panEnabled = false; - w.globals.zoomEnabled = false; - w.globals.selectionEnabled = false; - this.getToolbarIconsReference(); - var toggleEls = [this.elPan, this.elSelection, this.elZoom]; - toggleEls.forEach(function (el) { - if (el) { - el.classList.remove(_this3.selectedClass); - } - }); - } - }, { - key: "handleZoomIn", - value: function handleZoomIn() { - var w = this.w; - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = (w.globals.minX + centerX) / 2; - var newMaxX = (w.globals.maxX + centerX) / 2; - - var newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX); - - if (!w.globals.disableZoomIn) { - this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX); - } - } - }, { - key: "handleZoomOut", - value: function handleZoomOut() { - var w = this.w; // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis - - if (w.config.xaxis.type === 'datetime' && new Date(w.globals.minX).getUTCFullYear() < 1000) { - return; - } - - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = w.globals.minX - (centerX - w.globals.minX); - var newMaxX = w.globals.maxX - (centerX - w.globals.maxX); - - var newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX); - - if (!w.globals.disableZoomOut) { - this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX); - } - } - }, { - key: "_getNewMinXMaxX", - value: function _getNewMinXMaxX(newMinX, newMaxX) { - var shouldFloor = this.w.config.xaxis.convertedCatToNumeric; - return { - minX: shouldFloor ? Math.floor(newMinX) : newMinX, - maxX: shouldFloor ? Math.floor(newMaxX) : newMaxX - }; - } - }, { - key: "zoomUpdateOptions", - value: function zoomUpdateOptions(newMinX, newMaxX) { - var w = this.w; - - if (newMinX === undefined && newMaxX === undefined) { - this.handleZoomReset(); - return; - } - - if (w.config.xaxis.convertedCatToNumeric) { - // in category charts, avoid zooming out beyond min and max - if (newMinX < 1) { - newMinX = 1; - newMaxX = w.globals.dataPoints; - } - - if (newMaxX - newMinX < 2) { - return; - } - } - - var xaxis = { - min: newMinX, - max: newMaxX - }; - var beforeZoomRange = this.getBeforeZoomRange(xaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis; - } - - var options = { - xaxis: xaxis - }; - var yaxis = Utils.clone(w.globals.initialConfig.yaxis); - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(this.ctx); - yaxis = scale.autoScaleY(this.ctx, yaxis, { - xaxis: xaxis - }); - } - - if (!w.config.chart.group) { - // if chart in a group, prevent yaxis update here - // fix issue #650 - options.yaxis = yaxis; - } - - this.w.globals.zoomed = true; - - this.ctx.updateHelpers._updateOptions(options, false, this.w.config.chart.animations.dynamicAnimation.enabled); - - this.zoomCallback(xaxis, yaxis); - } - }, { - key: "zoomCallback", - value: function zoomCallback(xaxis, yaxis) { - if (typeof this.ev.zoomed === 'function') { - this.ev.zoomed(this.ctx, { - xaxis: xaxis, - yaxis: yaxis - }); - } - } - }, { - key: "getBeforeZoomRange", - value: function getBeforeZoomRange(xaxis, yaxis) { - var newRange = null; - - if (typeof this.ev.beforeZoom === 'function') { - newRange = this.ev.beforeZoom(this, { - xaxis: xaxis, - yaxis: yaxis - }); - } - - return newRange; - } - }, { - key: "toggleMenu", - value: function toggleMenu() { - var _this4 = this; - - window.setTimeout(function () { - if (_this4.elMenu.classList.contains('apexcharts-menu-open')) { - _this4.elMenu.classList.remove('apexcharts-menu-open'); - } else { - _this4.elMenu.classList.add('apexcharts-menu-open'); - } - }, 0); - } - }, { - key: "handleDownload", - value: function handleDownload(type) { - var w = this.w; - var exprt = new Exports(this.ctx); - - switch (type) { - case 'svg': - exprt.exportToSVG(this.ctx); - break; - - case 'png': - exprt.exportToPng(this.ctx); - break; - - case 'csv': - exprt.exportToCSV({ - series: w.config.series - }); - break; - } - } - }, { - key: "handleZoomReset", - value: function handleZoomReset(e) { - var charts = this.ctx.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; // forget lastXAxis min/max as reset button isn't resetting the x-axis completely if zoomX is called before - - w.globals.lastXAxis.min = undefined; - w.globals.lastXAxis.max = undefined; - ch.updateHelpers.revertDefaultAxisMinMax(); - - if (typeof w.config.chart.events.zoomed === 'function') { - ch.ctx.toolbar.zoomCallback({ - min: w.config.xaxis.min, - max: w.config.xaxis.max - }); - } - - w.globals.zoomed = false; // if user has some series collapsed before hitting zoom reset button, - // those series should stay collapsed - - var series = ch.ctx.series.emptyCollapsedSeries(Utils.clone(w.globals.initialSeries)); - - ch.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled); - }); - } - }, { - key: "destroy", - value: function destroy() { - this.elZoom = null; - this.elZoomIn = null; - this.elZoomOut = null; - this.elPan = null; - this.elSelection = null; - this.elZoomReset = null; - this.elMenuIcon = null; - } - }]); - - return Toolbar; - }(); - - /** - * ApexCharts Zoom Class for handling zooming and panning on axes based charts. - * - * @module ZoomPanSelection - **/ - - var ZoomPanSelection = /*#__PURE__*/function (_Toolbar) { - _inherits(ZoomPanSelection, _Toolbar); - - function ZoomPanSelection(ctx) { - var _this; - - _classCallCheck(this, ZoomPanSelection); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(ZoomPanSelection).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.dragged = false; - _this.graphics = new Graphics(_this.ctx); - _this.eventList = ['mousedown', 'mouseleave', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - _this.clientX = 0; - _this.clientY = 0; - _this.startX = 0; - _this.endX = 0; - _this.dragX = 0; - _this.startY = 0; - _this.endY = 0; - _this.dragY = 0; - _this.moveDirection = 'none'; - return _this; - } - - _createClass(ZoomPanSelection, [{ - key: "init", - value: function init(_ref) { - var _this2 = this; - - var xyRatios = _ref.xyRatios; - var w = this.w; - var me = this; - this.xyRatios = xyRatios; - this.zoomRect = this.graphics.drawRect(0, 0, 0, 0); - this.selectionRect = this.graphics.drawRect(0, 0, 0, 0); - this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - this.zoomRect.node.classList.add('apexcharts-zoom-rect'); - this.selectionRect.node.classList.add('apexcharts-selection-rect'); - w.globals.dom.elGraphical.add(this.zoomRect); - w.globals.dom.elGraphical.add(this.selectionRect); - - if (w.config.chart.selection.type === 'x') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else if (w.config.chart.selection.type === 'y') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - maxX: w.globals.gridWidth - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else { - this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } - - this.preselectedSelection(); - this.hoverArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - this.hoverArea.classList.add('apexcharts-zoomable'); - this.eventList.forEach(function (event) { - _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), { - capture: false, - passive: true - }); - }); - } // remove the event listeners which were previously added on hover area - - }, { - key: "destroy", - value: function destroy() { - if (this.slDraggableRect) { - this.slDraggableRect.draggable(false); - this.slDraggableRect.off(); - this.selectionRect.off(); - } - - this.selectionRect = null; - this.zoomRect = null; - this.gridRect = null; - } - }, { - key: "svgMouseEvents", - value: function svgMouseEvents(xyRatios, e) { - var w = this.w; - var me = this; - var toolbar = this.ctx.toolbar; - var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type; - - if (e.shiftKey) { - this.shiftWasPressed = true; - toolbar.enableZoomPanFromToolbar('pan'); - } else { - if (this.shiftWasPressed) { - toolbar.enableZoomPanFromToolbar('zoom'); - this.shiftWasPressed = false; - } - } - - var falsePositives = e.target.classList.contains('apexcharts-selection-rect') || e.target.parentNode.classList.contains('apexcharts-toolbar'); - if (falsePositives) return; - me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX; - me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY; - - if (e.type === 'mousedown' && e.which === 1) { - var gridRectDim = me.gridRect.getBoundingClientRect(); - me.startX = me.clientX - gridRectDim.left; - me.startY = me.clientY - gridRectDim.top; - me.dragged = false; - me.w.globals.mousedown = true; - } - - if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') { - me.dragged = true; - - if (w.globals.panEnabled) { - w.globals.selection = null; - - if (me.w.globals.mousedown) { - me.panDragging({ - context: me, - zoomtype: zoomtype, - xyRatios: xyRatios - }); - } - } else { - if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) { - me.selection = me.selectionDrawing({ - context: me, - zoomtype: zoomtype - }); - } - } - } - - if (e.type === 'mouseup' || e.type === 'touchend' || e.type === 'mouseleave') { - // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup - var _gridRectDim = me.gridRect.getBoundingClientRect(); - - if (me.w.globals.mousedown) { - // user released the drag, now do all the calculations - me.endX = me.clientX - _gridRectDim.left; - me.endY = me.clientY - _gridRectDim.top; - me.dragX = Math.abs(me.endX - me.startX); - me.dragY = Math.abs(me.endY - me.startY); - - if (w.globals.zoomEnabled || w.globals.selectionEnabled) { - me.selectionDrawn({ - context: me, - zoomtype: zoomtype - }); - } - - if (w.globals.panEnabled && w.config.xaxis.convertedCatToNumeric) { - me.delayedPanScrolled(); - } - } - - if (w.globals.zoomEnabled) { - me.hideSelectionRect(this.selectionRect); - } - - me.dragged = false; - me.w.globals.mousedown = false; - } - - this.makeSelectionRectDraggable(); - } - }, { - key: "makeSelectionRectDraggable", - value: function makeSelectionRectDraggable() { - var w = this.w; - if (!this.selectionRect) return; - var rectDim = this.selectionRect.node.getBoundingClientRect(); - - if (rectDim.width > 0 && rectDim.height > 0) { - this.slDraggableRect.selectize({ - points: 'l, r', - pointSize: 8, - pointType: 'rect' - }).resize({ - constraint: { - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - } - }).on('resizing', this.selectionDragging.bind(this, 'resizing')); - } - } - }, { - key: "preselectedSelection", - value: function preselectedSelection() { - var w = this.w; - var xyRatios = this.xyRatios; - - if (!w.globals.zoomEnabled) { - if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) { - this.drawSelectionRect(w.globals.selection); - } else { - if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) { - var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio; - var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x; - var selectionRect = { - x: x, - y: 0, - width: width, - height: w.globals.gridHeight, - translateX: 0, - translateY: 0, - selectionEnabled: true - }; - this.drawSelectionRect(selectionRect); - this.makeSelectionRectDraggable(); - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(this.ctx, { - xaxis: { - min: w.config.chart.selection.xaxis.min, - max: w.config.chart.selection.xaxis.max - }, - yaxis: {} - }); - } - } - } - } - } - }, { - key: "drawSelectionRect", - value: function drawSelectionRect(_ref2) { - var x = _ref2.x, - y = _ref2.y, - width = _ref2.width, - height = _ref2.height, - _ref2$translateX = _ref2.translateX, - translateX = _ref2$translateX === void 0 ? 0 : _ref2$translateX, - _ref2$translateY = _ref2.translateY, - translateY = _ref2$translateY === void 0 ? 0 : _ref2$translateY; - var w = this.w; - var zoomRect = this.zoomRect; - var selectionRect = this.selectionRect; - - if (this.dragged || w.globals.selection !== null) { - var scalingAttrs = { - transform: 'translate(' + translateX + ', ' + translateY + ')' - }; // change styles based on zoom or selection - // zoom is Enabled and user has dragged, so draw blue rect - - if (w.globals.zoomEnabled && this.dragged) { - if (width < 0) width = 1; // fixes apexcharts.js#1168 - - zoomRect.attr({ - x: x, - y: y, - width: width, - height: height, - fill: w.config.chart.zoom.zoomedArea.fill.color, - 'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity, - stroke: w.config.chart.zoom.zoomedArea.stroke.color, - 'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width, - 'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity - }); - Graphics.setAttrs(zoomRect.node, scalingAttrs); - } // selection is enabled - - - if (w.globals.selectionEnabled) { - selectionRect.attr({ - x: x, - y: y, - width: width > 0 ? width : 0, - height: height > 0 ? height : 0, - fill: w.config.chart.selection.fill.color, - 'fill-opacity': w.config.chart.selection.fill.opacity, - stroke: w.config.chart.selection.stroke.color, - 'stroke-width': w.config.chart.selection.stroke.width, - 'stroke-dasharray': w.config.chart.selection.stroke.dashArray, - 'stroke-opacity': w.config.chart.selection.stroke.opacity - }); - Graphics.setAttrs(selectionRect.node, scalingAttrs); - } - } - } - }, { - key: "hideSelectionRect", - value: function hideSelectionRect(rect) { - if (rect) { - rect.attr({ - x: 0, - y: 0, - width: 0, - height: 0 - }); - } - } - }, { - key: "selectionDrawing", - value: function selectionDrawing(_ref3) { - var context = _ref3.context, - zoomtype = _ref3.zoomtype; - var w = this.w; - var me = context; - var gridRectDim = this.gridRect.getBoundingClientRect(); - var startX = me.startX - 1; - var startY = me.startY; - var selectionWidth = me.clientX - gridRectDim.left - startX; - var selectionHeight = me.clientY - gridRectDim.top - startY; - var translateX = 0; - var translateY = 0; - var selectionRect = {}; - - if (Math.abs(selectionWidth + startX) > w.globals.gridWidth) { - // user dragged the mouse outside drawing area to the right - selectionWidth = w.globals.gridWidth - startX; - } else if (me.clientX - gridRectDim.left < 0) { - // user dragged the mouse outside drawing area to the left - selectionWidth = startX; - } // inverse selection X - - - if (startX > me.clientX - gridRectDim.left) { - selectionWidth = Math.abs(selectionWidth); - translateX = -selectionWidth; - } // inverse selection Y - - - if (startY > me.clientY - gridRectDim.top) { - selectionHeight = Math.abs(selectionHeight); - translateY = -selectionHeight; - } - - if (zoomtype === 'x') { - selectionRect = { - x: startX, - y: 0, - width: selectionWidth, - height: w.globals.gridHeight, - translateX: translateX, - translateY: 0 - }; - } else if (zoomtype === 'y') { - selectionRect = { - x: 0, - y: startY, - width: w.globals.gridWidth, - height: selectionHeight, - translateX: 0, - translateY: translateY - }; - } else { - selectionRect = { - x: startX, - y: startY, - width: selectionWidth, - height: selectionHeight, - translateX: translateX, - translateY: translateY - }; - } - - me.drawSelectionRect(selectionRect); - me.selectionDragging('resizing'); - return selectionRect; - } - }, { - key: "selectionDragging", - value: function selectionDragging(type, e) { - var _this3 = this; - - var w = this.w; - var xyRatios = this.xyRatios; - var selRect = this.selectionRect; - var timerInterval = 0; - - if (type === 'resizing') { - timerInterval = 30; - } // update selection when selection rect is dragged - - - var getSelAttr = function getSelAttr(attr) { - return parseFloat(selRect.node.getAttribute(attr)); - }; - - var draggedProps = { - x: getSelAttr('x'), - y: getSelAttr('y'), - width: getSelAttr('width'), - height: getSelAttr('height') - }; - w.globals.selection = draggedProps; // update selection ends - - if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { - // a small debouncer is required when resizing to avoid freezing the chart - clearTimeout(this.w.globals.selectionResizeTimer); - this.w.globals.selectionResizeTimer = window.setTimeout(function () { - var gridRectDim = _this3.gridRect.getBoundingClientRect(); - - var selectionRect = selRect.node.getBoundingClientRect(); - var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio; - var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio; - var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0]; - var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0]; - w.config.chart.events.selection(_this3.ctx, { - xaxis: { - min: minX, - max: maxX - }, - yaxis: { - min: minY, - max: maxY - } - }); - }, timerInterval); - } - } - }, { - key: "selectionDrawn", - value: function selectionDrawn(_ref4) { - var context = _ref4.context, - zoomtype = _ref4.zoomtype; - var w = this.w; - var me = context; - var xyRatios = this.xyRatios; - var toolbar = this.ctx.toolbar; - - if (me.startX > me.endX) { - var tempX = me.startX; - me.startX = me.endX; - me.endX = tempX; - } - - if (me.startY > me.endY) { - var tempY = me.startY; - me.startY = me.endY; - me.endY = tempY; - } - - var xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio; - var xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio; // TODO: we will consider the 1st y axis values here for getting highest and lowest y - - var yHighestValue = []; - var yLowestValue = []; - w.config.yaxis.forEach(function (yaxe, index) { - yHighestValue.push(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY); - yLowestValue.push(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY); - }); - - if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) { - if (w.globals.zoomEnabled) { - var yaxis = Utils.clone(w.globals.initialConfig.yaxis); - var xaxis = Utils.clone(w.globals.initialConfig.xaxis); - w.globals.zoomed = true; // before zooming in/out, store the last yaxis and xaxis range, so that when user hits the RESET button, we get the original range - // also - make sure user is not already zoomed in/out - otherwise we will store zoomed values in lastAxis - // DEAD code - the below condition will never run now as zoomed is made false above - - if (!w.globals.zoomed) { - w.globals.lastXAxis = Utils.clone(w.config.xaxis); - w.globals.lastYAxis = Utils.clone(w.config.yaxis); - } - - if (w.config.xaxis.convertedCatToNumeric) { - xLowestValue = Math.floor(xLowestValue); - xHighestValue = Math.floor(xHighestValue); - - if (xLowestValue < 1) { - xLowestValue = 1; - xHighestValue = w.globals.dataPoints; - } - - if (xHighestValue - xLowestValue < 2) { - xHighestValue = xLowestValue + 1; - } - } - - if (zoomtype === 'xy' || zoomtype === 'x') { - xaxis = { - min: xLowestValue, - max: xHighestValue - }; - } - - if (zoomtype === 'xy' || zoomtype === 'y') { - yaxis.forEach(function (yaxe, index) { - yaxis[index].min = yLowestValue[index]; - yaxis[index].max = yHighestValue[index]; - }); - } - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, yaxis, { - xaxis: xaxis - }); - } - - if (toolbar) { - var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis; - yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxe : yaxis; - } - } - - var options = { - xaxis: xaxis - }; - - if (!w.config.chart.group) { - // if chart in a group, prevent yaxis update here - // fix issue #650 - options.yaxis = yaxis; - } - - me.ctx.updateHelpers._updateOptions(options, false, me.w.config.chart.animations.dynamicAnimation.enabled); - - if (typeof w.config.chart.events.zoomed === 'function') { - toolbar.zoomCallback(xaxis, yaxis); - } - } else if (w.globals.selectionEnabled) { - var _yaxis = null; - var _xaxis = null; - _xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - _yaxis = Utils.clone(w.config.yaxis); - - _yaxis.forEach(function (yaxe, index) { - _yaxis[index].min = yLowestValue[index]; - _yaxis[index].max = yHighestValue[index]; - }); - } - - w.globals.selection = me.selection; - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(me.ctx, { - xaxis: _xaxis, - yaxis: _yaxis - }); - } - } - } - } - }, { - key: "panDragging", - value: function panDragging(_ref5) { - var context = _ref5.context; - var w = this.w; - var me = context; // check to make sure there is data to compare against - - if (typeof w.globals.lastClientPosition.x !== 'undefined') { - // get the change from last position to this position - var deltaX = w.globals.lastClientPosition.x - me.clientX; - var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero - - if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) { - this.moveDirection = 'left'; - } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) { - this.moveDirection = 'right'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) { - this.moveDirection = 'up'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) { - this.moveDirection = 'down'; - } - } // set the new last position to the current for next time (to get the position of drag) - - - w.globals.lastClientPosition = { - x: me.clientX, - y: me.clientY - }; - var xLowestValue = w.globals.minX; - var xHighestValue = w.globals.maxX; // on a category, we don't pan continuosly as it causes bugs - - if (!w.config.xaxis.convertedCatToNumeric) { - me.panScrolled(xLowestValue, xHighestValue); - } - } - }, { - key: "delayedPanScrolled", - value: function delayedPanScrolled() { - var w = this.w; - var newMinX = w.globals.minX; - var newMaxX = w.globals.maxX; - var centerX = (w.globals.maxX - w.globals.minX) / 2; - - if (this.moveDirection === 'left') { - newMinX = w.globals.minX + centerX; - newMaxX = w.globals.maxX + centerX; - } else if (this.moveDirection === 'right') { - newMinX = w.globals.minX - centerX; - newMaxX = w.globals.maxX - centerX; - } - - newMinX = Math.floor(newMinX); - newMaxX = Math.floor(newMaxX); - this.updateScrolledChart({ - xaxis: { - min: newMinX, - max: newMaxX - } - }, newMinX, newMaxX); - } - }, { - key: "panScrolled", - value: function panScrolled(xLowestValue, xHighestValue) { - var w = this.w; - var xyRatios = this.xyRatios; - var yaxis = Utils.clone(w.globals.initialConfig.yaxis); - - if (this.moveDirection === 'left') { - xLowestValue = w.globals.minX + w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX + w.globals.gridWidth / 15 * xyRatios.xRatio; - } else if (this.moveDirection === 'right') { - xLowestValue = w.globals.minX - w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX - w.globals.gridWidth / 15 * xyRatios.xRatio; - } - - if (xLowestValue < w.globals.initialMinX || xHighestValue > w.globals.initialMaxX) { - xLowestValue = w.globals.minX; - xHighestValue = w.globals.maxX; - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(this.ctx); - yaxis = scale.autoScaleY(this.ctx, yaxis, { - xaxis: xaxis - }); - } - - var options = { - xaxis: { - min: xLowestValue, - max: xHighestValue - } - }; - - if (!w.config.chart.group) { - // if chart in a group, prevent yaxis update here - // fix issue #650 - options.yaxis = yaxis; - } - - this.updateScrolledChart(options, xLowestValue, xHighestValue); - } - }, { - key: "updateScrolledChart", - value: function updateScrolledChart(options, xLowestValue, xHighestValue) { - var w = this.w; - - this.ctx.updateHelpers._updateOptions(options, false, false); - - if (typeof w.config.chart.events.scrolled === 'function') { - w.config.chart.events.scrolled(this.ctx, { - xaxis: { - min: xLowestValue, - max: xHighestValue - } - }); - } - } - }]); - - return ZoomPanSelection; - }(Toolbar); - - var Utils$1 = /*#__PURE__*/function () { - function Utils$1(tooltipContext) { - _classCallCheck(this, Utils$1); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - } - /** - ** When hovering over series, you need to capture which series is being hovered on. - ** This function will return both capturedseries index as well as inner index of that series - * @memberof Utils - * @param {object} - * - hoverArea = the rect on which user hovers - * - elGrid = dimensions of the hover rect (it can be different than hoverarea) - */ - - - _createClass(Utils$1, [{ - key: "getNearestValues", - value: function getNearestValues(_ref) { - var hoverArea = _ref.hoverArea, - elGrid = _ref.elGrid, - clientX = _ref.clientX, - clientY = _ref.clientY; - var w = this.w; - var hoverWidth = w.globals.gridWidth; - var xDivisor = hoverWidth / (w.globals.dataPoints - 1); - var seriesBound = elGrid.getBoundingClientRect(); - var hasBars = this.hasBars(); - - if (w.globals.comboCharts || hasBars) { - xDivisor = hoverWidth / w.globals.dataPoints; - } - - var hoverX = clientX - seriesBound.left; - var hoverY = clientY - seriesBound.top; - var notInRect = hoverX < 0 || hoverY < 0 || hoverX > w.globals.gridWidth || hoverY > w.globals.gridHeight; - - if (notInRect) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.remove('hovering-pan'); - } else { - if (w.globals.zoomEnabled) { - hoverArea.classList.remove('hovering-pan'); - hoverArea.classList.add('hovering-zoom'); - } else if (w.globals.panEnabled) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.add('hovering-pan'); - } - } - - var j = Math.round(hoverX / xDivisor); - - if (hasBars) { - j = Math.ceil(hoverX / xDivisor); - j = j - 1; - } - - var capturedSeries = null; - var closest = null; - var seriesXValArr = []; - var seriesYValArr = []; - - for (var s = 0; s < w.globals.seriesXvalues.length; s++) { - seriesXValArr.push([w.globals.seriesXvalues[s][0] - 0.000001].concat(w.globals.seriesXvalues[s])); - } - - seriesXValArr = seriesXValArr.map(function (seriesXVal) { - return seriesXVal.filter(function (s) { - return s; - }); - }); - seriesYValArr = w.globals.seriesYvalues.map(function (seriesYVal) { - return seriesYVal.filter(function (s) { - return Utils.isNumber(s); - }); - }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value - - if (w.globals.isXNumeric) { - closest = this.closestInMultiArray(hoverX, hoverY, seriesXValArr, seriesYValArr); - capturedSeries = closest.index; - j = closest.j; - - if (capturedSeries !== null) { - // initial push, it should be a little smaller than the 1st val - seriesXValArr = w.globals.seriesXvalues[capturedSeries]; - closest = this.closestInArray(hoverX, seriesXValArr); - j = closest.index; - } - } - - w.globals.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries; - if (!j || j < 1) j = 0; - w.globals.capturedDataPointIndex = j; - return { - capturedSeries: capturedSeries, - j: j, - hoverX: hoverX, - hoverY: hoverY - }; - } - }, { - key: "closestInMultiArray", - value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) { - var w = this.w; - var activeIndex = 0; - var currIndex = null; - var j = -1; - - if (w.globals.series.length > 1) { - activeIndex = this.getFirstActiveXArray(Xarrays); - } else { - currIndex = 0; - } - - var currY = Yarrays[activeIndex][0]; - var currX = Xarrays[activeIndex][0]; - var diffX = Math.abs(hoverX - currX); - var diffY = Math.abs(hoverY - currY); - var diff = diffY + diffX; - Yarrays.map(function (arrY, arrIndex) { - arrY.map(function (y, innerKey) { - var newdiffY = Math.abs(hoverY - Yarrays[arrIndex][innerKey]); - var newdiffX = Math.abs(hoverX - Xarrays[arrIndex][innerKey]); - var newdiff = newdiffX + newdiffY; - - if (newdiff < diff) { - diff = newdiff; - diffX = newdiffX; - diffY = newdiffY; - currIndex = arrIndex; - j = innerKey; - } - }); - }); - return { - index: currIndex, - j: j - }; - } - }, { - key: "getFirstActiveXArray", - value: function getFirstActiveXArray(Xarrays) { - var activeIndex = 0; - var coreUtils = new CoreUtils(this.ctx); - var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) { - return xarr.length > 0 ? index : -1; - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - var total = coreUtils.getSeriesTotalByIndex(a); - - if (firstActiveSeriesIndex[a] !== -1 && total !== 0 && !coreUtils.seriesHaveSameValues(a)) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - - return activeIndex; - } - }, { - key: "closestInArray", - value: function closestInArray(val, arr) { - var curr = arr[0]; - var currIndex = null; - var diff = Math.abs(val - curr); - - for (var i = 0; i < arr.length; i++) { - var newdiff = Math.abs(val - arr[i]); - - if (newdiff < diff) { - diff = newdiff; - currIndex = i; - } - } - - return { - index: currIndex - }; - } - /** - * When there are multiple series, it is possible to have different x values for each series. - * But it may be possible in those multiple series, that there is same x value for 2 or more - * series. - * @memberof Utils - * @param {int} - * - j = is the inner index of series -> (series[i][j]) - * @return {bool} - */ - - }, { - key: "isXoverlap", - value: function isXoverlap(j) { - var w = this.w; - var xSameForAllSeriesJArr = []; - var seriesX = w.globals.seriesX.filter(function (s) { - return typeof s[0] !== 'undefined'; - }); - - if (seriesX.length > 0) { - for (var i = 0; i < seriesX.length - 1; i++) { - if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') { - if (seriesX[i][j] !== seriesX[i + 1][j]) { - xSameForAllSeriesJArr.push('unEqual'); - } - } - } - } - - if (xSameForAllSeriesJArr.length === 0) { - return true; - } - - return false; - } - }, { - key: "isInitialSeriesSameLen", - value: function isInitialSeriesSameLen() { - var sameLen = true; - var initialSeries = this.w.globals.initialSeries; - - for (var i = 0; i < initialSeries.length - 1; i++) { - if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) { - sameLen = false; - break; - } - } - - return sameLen; - } - }, { - key: "getBarsHeight", - value: function getBarsHeight(allbars) { - var bars = _toConsumableArray(allbars); - - var totalHeight = bars.reduce(function (acc, bar) { - return acc + bar.getBBox().height; - }, 0); - return totalHeight; - } - }, { - key: "getElMarkers", - value: function getElMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll(' .apexcharts-series-markers'); - } - }, { - key: "getAllMarkers", - value: function getAllMarkers() { - // first get all marker parents. This parent class contains series-index - // which helps to sort the markers as they are dynamic - var markersWraps = this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers-wrap'); - markersWraps = _toConsumableArray(markersWraps); - markersWraps.sort(function (a, b) { - return Number(b.getAttribute('data:realIndex')) < Number(a.getAttribute('data:realIndex')) ? 0 : -1; - }); - var markers = []; - markersWraps.forEach(function (m) { - markers.push(m.querySelector('.apexcharts-marker')); - }); - return markers; - } - }, { - key: "hasMarkers", - value: function hasMarkers() { - var markers = this.getElMarkers(); - return markers.length > 0; - } - }, { - key: "getElBars", - value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); - } - }, { - key: "hasBars", - value: function hasBars() { - var bars = this.getElBars(); - return bars.length > 0; - } - }, { - key: "getHoverMarkerSize", - value: function getHoverMarkerSize(index) { - var w = this.w; - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - return hoverSize; - } - }, { - key: "toggleAllTooltipSeriesGroups", - value: function toggleAllTooltipSeriesGroups(state) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.allTooltipSeriesGroups.length === 0) { - ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group'); - } - - var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups; - - for (var i = 0; i < allTooltipSeriesGroups.length; i++) { - if (state === 'enable') { - allTooltipSeriesGroups[i].classList.add('apexcharts-active'); - allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display; - } else { - allTooltipSeriesGroups[i].classList.remove('apexcharts-active'); - allTooltipSeriesGroups[i].style.display = 'none'; - } - } - } - }]); - - return Utils$1; - }(); - - /** - * ApexCharts Tooltip.Labels Class to draw texts on the tooltip. - * - * @module Tooltip.Labels - **/ - - var Labels = /*#__PURE__*/function () { - function Labels(tooltipContext) { - _classCallCheck(this, Labels); - - this.w = tooltipContext.w; - this.ctx = tooltipContext.ctx; - this.ttCtx = tooltipContext; - this.tooltipUtil = new Utils$1(tooltipContext); - } - - _createClass(Labels, [{ - key: "drawSeriesTexts", - value: function drawSeriesTexts(_ref) { - var _ref$shared = _ref.shared, - shared = _ref$shared === void 0 ? true : _ref$shared, - ttItems = _ref.ttItems, - _ref$i = _ref.i, - i = _ref$i === void 0 ? 0 : _ref$i, - _ref$j = _ref.j, - j = _ref$j === void 0 ? null : _ref$j, - y1 = _ref.y1, - y2 = _ref.y2; - var w = this.w; - - if (w.config.tooltip.custom !== undefined) { - this.handleCustomTooltip({ - i: i, - j: j, - y1: y1, - y2: y2, - w: w - }); - } else { - this.toggleActiveInactiveSeries(shared); - } - - var values = this.getValuesToPrint({ - i: i, - j: j - }); - this.printLabels({ - i: i, - j: j, - values: values, - ttItems: ttItems, - shared: shared - }); // Re-calculate tooltip dimensions now that we have drawn the text - - var tooltipEl = this.ttCtx.getElTooltip(); - this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width; - this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height; - } - }, { - key: "printLabels", - value: function printLabels(_ref2) { - var _this = this; - - var i = _ref2.i, - j = _ref2.j, - values = _ref2.values, - ttItems = _ref2.ttItems, - shared = _ref2.shared; - var w = this.w; - var val; - var xVal = values.xVal, - zVal = values.zVal, - xAxisTTVal = values.xAxisTTVal; - var seriesName = ''; - var pColor = w.globals.colors[i]; - - if (j !== null && w.config.plotOptions.bar.distributed) { - pColor = w.globals.colors[j]; - } - - var _loop = function _loop(t, inverset) { - var f = _this.getFormatters(i); - - seriesName = _this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: i, - seriesIndex: i, - j: j - }); - var tIndex = w.config.tooltip.inverseOrder ? inverset : t; - - if (w.globals.axisCharts) { - var generalFormatter = function generalFormatter(index) { - return f.yLbFormatter(w.globals.series[index][j], { - series: w.globals.series, - seriesIndex: index, - dataPointIndex: j, - w: w - }); - }; - - if (shared) { - f = _this.getFormatters(tIndex); - seriesName = _this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: tIndex, - seriesIndex: i, - j: j - }); - pColor = w.globals.colors[tIndex]; - val = generalFormatter(tIndex); - } else { - val = generalFormatter(i); - } - } // for pie / donuts - - - if (j === null) { - val = f.yLbFormatter(w.globals.series[i], w); - } - - _this.DOMHandling({ - i: i, - t: tIndex, - j: j, - ttItems: ttItems, - values: { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }, - seriesName: seriesName, - shared: shared, - pColor: pColor - }); - }; - - for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) { - _loop(t, inverset); - } - } - }, { - key: "getFormatters", - value: function getFormatters(i) { - var w = this.w; - var yLbFormatter = w.globals.yLabelFormatters[i]; - var yLbTitleFormatter; - - if (w.globals.ttVal !== undefined) { - if (Array.isArray(w.globals.ttVal)) { - yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter; - yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter; - } else { - yLbFormatter = w.globals.ttVal.formatter; - - if (typeof w.globals.ttVal.title.formatter === 'function') { - yLbTitleFormatter = w.globals.ttVal.title.formatter; - } - } - } else { - yLbTitleFormatter = w.config.tooltip.y.title.formatter; - } - - if (typeof yLbFormatter !== 'function') { - if (w.globals.yLabelFormatters[0]) { - yLbFormatter = w.globals.yLabelFormatters[0]; - } else { - yLbFormatter = function yLbFormatter(label) { - return label; - }; - } - } - - if (typeof yLbTitleFormatter !== 'function') { - yLbTitleFormatter = function yLbTitleFormatter(label) { - return label; - }; - } - - return { - yLbFormatter: yLbFormatter, - yLbTitleFormatter: yLbTitleFormatter - }; - } - }, { - key: "getSeriesName", - value: function getSeriesName(_ref3) { - var fn = _ref3.fn, - index = _ref3.index, - seriesIndex = _ref3.seriesIndex, - j = _ref3.j; - var w = this.w; - return fn(String(w.globals.seriesNames[index]), { - series: w.globals.series, - seriesIndex: seriesIndex, - dataPointIndex: j, - w: w - }); - } - }, { - key: "DOMHandling", - value: function DOMHandling(_ref4) { - var i = _ref4.i, - t = _ref4.t, - j = _ref4.j, - ttItems = _ref4.ttItems, - values = _ref4.values, - seriesName = _ref4.seriesName, - shared = _ref4.shared, - pColor = _ref4.pColor; - var w = this.w; - var ttCtx = this.ttCtx; - var val = values.val, - xVal = values.xVal, - xAxisTTVal = values.xAxisTTVal, - zVal = values.zVal; - var ttItemsChildren = null; - ttItemsChildren = ttItems[t].children; - - if (w.config.tooltip.fillSeriesColor) { - // elTooltip.style.backgroundColor = pColor - ttItems[t].style.backgroundColor = pColor; - ttItemsChildren[0].style.display = 'none'; - } - - if (ttCtx.showTooltipTitle) { - if (ttCtx.tooltipTitle === null) { - // get it once if null, and store it in class property - ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title'); - } - - ttCtx.tooltipTitle.innerHTML = xVal; - } // if xaxis tooltip is constructed, we need to replace the innerHTML - - - if (ttCtx.blxaxisTooltip) { - ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal; - } - - var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-label'); - - if (ttYLabel) { - ttYLabel.innerHTML = seriesName ? seriesName + ': ' : ''; - } - - var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-value'); - - if (ttYVal) { - ttYVal.innerHTML = typeof val !== 'undefined' ? val : ''; - } - - if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) { - if (w.config.tooltip.marker.fillColors && Array.isArray(w.config.tooltip.marker.fillColors)) { - pColor = w.config.tooltip.marker.fillColors[i]; - } - - ttItemsChildren[0].style.backgroundColor = pColor; - } - - if (!w.config.tooltip.marker.show) { - ttItemsChildren[0].style.display = 'none'; - } - - if (zVal !== null) { - var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label'); - ttZLabel.innerHTML = w.config.tooltip.z.title; - var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value'); - ttZVal.innerHTML = typeof zVal !== 'undefined' ? zVal : ''; - } - - if (shared && ttItemsChildren[0]) { - // hide when no Val or series collapsed - if (typeof val === 'undefined' || val === null || w.globals.collapsedSeriesIndices.indexOf(t) > -1) { - ttItemsChildren[0].parentNode.style.display = 'none'; - } else { - ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display; - } // TODO: issue #1240 needs to be looked at again. commenting it because this also hides single series values with 0 in it (shared tooltip) - // if (w.globals.stackedSeriesTotals[j] === 0) { - // // shared tooltip and all values are null, so we need to hide the x value too - // let allYZeroForJ = false - // for (let si = 1; si < w.globals.seriesYvalues.length; si++) { - // if ( - // w.globals.seriesYvalues[si][j] === - // w.globals.seriesYvalues[si - 1][j] - // ) { - // allYZeroForJ = true - // } - // } - // if (allYZeroForJ) { - // ttCtx.tooltipTitle.style.display = 'none' - // } else { - // ttCtx.tooltipTitle.style.display = w.config.tooltip.items.display - // } - // } else { - // ttCtx.tooltipTitle.style.display = w.config.tooltip.items.display - // } - - } - } - }, { - key: "toggleActiveInactiveSeries", - value: function toggleActiveInactiveSeries(shared) { - var w = this.w; - - if (shared) { - // make all tooltips active - this.tooltipUtil.toggleAllTooltipSeriesGroups('enable'); - } else { - // disable all tooltip text groups - this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group - - var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group'); - - if (firstTooltipSeriesGroup) { - firstTooltipSeriesGroup.classList.add('apexcharts-active'); - firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "getValuesToPrint", - value: function getValuesToPrint(_ref5) { - var i = _ref5.i, - j = _ref5.j; - var w = this.w; - var filteredSeriesX = this.ctx.series.filteredSeriesX(); - var xVal = ''; - var xAxisTTVal = ''; - var zVal = null; - var val = null; - var customFormatterOpts = { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }; - var zFormatter = w.globals.ttZFormatter; - - if (j === null) { - val = w.globals.series[i]; - } else { - if (w.globals.isXNumeric) { - xVal = filteredSeriesX[i][j]; - - if (filteredSeriesX[i].length === 0) { - // a series (possibly the first one) might be collapsed, so get the next active index - var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX); - xVal = filteredSeriesX[firstActiveSeriesIndex][j]; - } - } else { - xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : ''; - } - } - - var bufferXVal = xVal; - - if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') { - var xFormat = new Formatters(this.ctx); - xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal, bufferXVal); - } else { - if (!w.globals.isBarHorizontal) { - xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts); - } - } // override default x-axis formatter with tooltip formatter - - - if (w.config.tooltip.x.formatter !== undefined) { - xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts); - } - - if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[0].length > 0) { - zVal = zFormatter(w.globals.seriesZ[i][j], w); - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts); - } else { - xAxisTTVal = xVal; - } - - return { - val: Array.isArray(val) ? val.join(' ') : val, - xVal: Array.isArray(xVal) ? xVal.join(' ') : xVal, - xAxisTTVal: Array.isArray(xAxisTTVal) ? xAxisTTVal.join(' ') : xAxisTTVal, - zVal: zVal - }; - } - }, { - key: "handleCustomTooltip", - value: function handleCustomTooltip(_ref6) { - var i = _ref6.i, - j = _ref6.j, - y1 = _ref6.y1, - y2 = _ref6.y2, - w = _ref6.w; - var tooltipEl = this.ttCtx.getElTooltip(); - var fn = w.config.tooltip.custom; - - if (Array.isArray(fn) && fn[i]) { - fn = fn[i]; - } // override everything with a custom html tooltip and replace it - - - tooltipEl.innerHTML = fn({ - ctx: this.ctx, - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - y1: y1, - y2: y2, - w: w - }); - } - }]); - - return Labels; - }(); - - /** - * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position. - * - * @module Tooltip.Position - **/ - - var Position = /*#__PURE__*/function () { - function Position(tooltipContext) { - _classCallCheck(this, Position); - - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.w = tooltipContext.w; - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - - _createClass(Position, [{ - key: "moveXCrosshairs", - value: function moveXCrosshairs(cx) { - var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var ttCtx = this.ttCtx; - var w = this.w; - var xcrosshairs = ttCtx.getElXCrosshairs(); - var x = cx - ttCtx.xcrosshairsWidth / 2; - var tickAmount = w.globals.labels.slice().length; - - if (j !== null) { - x = w.globals.gridWidth / tickAmount * j; - } - - if (xcrosshairs !== null) { - xcrosshairs.setAttribute('x', x); - xcrosshairs.setAttribute('x1', x); - xcrosshairs.setAttribute('x2', x); - xcrosshairs.setAttribute('y2', w.globals.gridHeight); - xcrosshairs.classList.add('apexcharts-active'); - } - - if (x < 0) { - x = 0; - } - - if (x > w.globals.gridWidth) { - x = w.globals.gridWidth; - } - - if (ttCtx.blxaxisTooltip) { - var tx = x; - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - tx = x + ttCtx.xcrosshairsWidth / 2; - } - - this.moveXAxisTooltip(tx); - } - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - }, { - key: "moveYCrosshairs", - value: function moveYCrosshairs(cy) { - var ttCtx = this.ttCtx; - - if (ttCtx.ycrosshairs !== null) { - Graphics.setAttrs(ttCtx.ycrosshairs, { - y1: cy, - y2: cy - }); - } - - if (ttCtx.ycrosshairsHidden !== null) { - Graphics.setAttrs(ttCtx.ycrosshairsHidden, { - y1: cy, - y2: cy - }); - } - } - /** - ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move - */ - - }, { - key: "moveXAxisTooltip", - value: function moveXAxisTooltip(cx) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.xaxisTooltip !== null) { - ttCtx.xaxisTooltip.classList.add('apexcharts-active'); - var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY; - var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect(); - var xaxisTTTextWidth = xaxisTTText.width; - cx = cx - xaxisTTTextWidth / 2; - - if (!isNaN(cx)) { - cx = cx + w.globals.translateX; - var textRect = 0; - var graphics = new Graphics(this.ctx); - textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML); - ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px'; - ttCtx.xaxisTooltip.style.left = cx + 'px'; - ttCtx.xaxisTooltip.style.top = cy + 'px'; - } - } - } - }, { - key: "moveYAxisTooltip", - value: function moveYAxisTooltip(index) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.yaxisTTEls === null) { - ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1'), 10); - var cy = w.globals.translateY + ycrosshairsHiddenRectY1; - var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect(); - var yAxisTTHeight = yAxisTTRect.height; - var cx = w.globals.translateYAxisX[index] - 2; - - if (w.config.yaxis[index].opposite) { - cx = cx - 26; - } - - cy = cy - yAxisTTHeight / 2; - - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) { - ttCtx.yaxisTTEls[index].classList.add('apexcharts-active'); - ttCtx.yaxisTTEls[index].style.top = cy + 'px'; - ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px'; - } else { - ttCtx.yaxisTTEls[index].classList.remove('apexcharts-active'); - } - } - /** - ** moves the whole tooltip by changing x, y attrs - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip - * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip - * @param {int} - r = point's radius - */ - - }, { - key: "moveTooltip", - value: function moveTooltip(cx, cy) { - var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var tooltipRect = ttCtx.tooltipRect; - var pointR = r !== null ? parseFloat(r) : 1; - var x = parseFloat(cx) + pointR + 5; - var y = parseFloat(cy) + pointR / 2; // - tooltipRect.ttHeight / 2 - - if (x > w.globals.gridWidth / 2) { - x = x - tooltipRect.ttWidth - pointR - 15; - } - - if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) { - x = w.globals.gridWidth - tooltipRect.ttWidth; - } - - if (x < -20) { - x = -20; - } - - if (w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; - } - - if (!w.config.tooltip.followCursor) { - var newPositions = this.positionChecks(tooltipRect, x, y); - x = newPositions.x; - y = newPositions.y; - } - - if (!isNaN(x)) { - x = x + w.globals.translateX; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } - } - }, { - key: "positionChecks", - value: function positionChecks(tooltipRect, x, y) { - var w = this.w; - - if (tooltipRect.ttHeight / 2 + y > w.globals.gridHeight) { - y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY; - } - - if (y < 0) { - y = 0; - } - - return { - x: x, - y: y - }; - } - }, { - key: "moveMarkers", - value: function moveMarkers(i, j) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (w.globals.markers.size[i] > 0) { - var allPoints = w.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(i, "'] .apexcharts-marker")); - - for (var p = 0; p < allPoints.length; p++) { - if (parseInt(allPoints[p].getAttribute('rel'), 10) === j) { - ttCtx.marker.resetPointsSize(); - ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]); - } - } - } else { - ttCtx.marker.resetPointsSize(); - this.moveDynamicPointOnHover(j, i); - } - } // This function is used when you need to show markers/points only on hover - - // DIFFERENT X VALUES in multiple series - - }, { - key: "moveDynamicPointOnHover", - value: function moveDynamicPointOnHover(j, capturedSeries) { - var w = this.w; - var ttCtx = this.ttCtx; - var cx = 0; - var cy = 0; - var pointsArr = w.globals.pointsArray; - var hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries); - var serType = w.config.series[capturedSeries].type; - - if (serType && (serType === 'column' || serType === 'candlestick')) { - // fix error mentioned in #811 - return; - } - - cx = pointsArr[capturedSeries][j][0]; - cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; - var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - - if (point && cy < w.globals.gridHeight && cy > 0) { - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); - } // point.style.opacity = w.config.markers.hover.opacity - - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - this.moveTooltip(cx, cy, hoverSize); - } - } // This function is used when you need to show markers/points only on hover - - // SAME X VALUES in multiple series - - }, { - key: "moveDynamicPointsOnHover", - value: function moveDynamicPointsOnHover(j) { - var ttCtx = this.ttCtx; - var w = ttCtx.w; - var cx = 0; - var cy = 0; - var activeSeries = 0; - var pointsArr = w.globals.pointsArray; - var series = new Series(this.ctx); - activeSeries = series.getActiveConfigSeriesIndex(true); - var hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(activeSeries); - - if (pointsArr[activeSeries]) { - cx = pointsArr[activeSeries][j][0]; - cy = pointsArr[activeSeries][j][1]; - } - - var points = ttCtx.tooltipUtil.getAllMarkers(); - - if (points !== null) { - for (var p = 0; p < w.globals.series.length; p++) { - var pointArr = pointsArr[p]; - - if (w.globals.comboCharts) { - // in a combo chart, if column charts are present, markers will not match with the number of series, hence this patch to push a null value in points array - if (typeof pointArr === 'undefined') { - // nodelist to array - points.splice(p, 0, null); - } - } - - if (pointArr && pointArr.length) { - var pcy = pointsArr[p][j][1]; - points[p].setAttribute('cx', cx); - - if (pcy !== null && !isNaN(pcy) && pcy < w.globals.gridHeight && pcy > 0) { - points[p] && points[p].setAttribute('r', hoverSize); - points[p] && points[p].setAttribute('cy', pcy); - } else { - points[p] && points[p].setAttribute('r', 0); - } - } - } - } - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - var tcy = cy || w.globals.gridHeight; - this.moveTooltip(cx, tcy, hoverSize); - } - } - }, { - key: "moveStickyTooltipOverBars", - value: function moveStickyTooltipOverBars(j) { - var w = this.w; - var ttCtx = this.ttCtx; - var barLen = w.globals.columnSeries ? w.globals.columnSeries.length : w.globals.series.length; - var i = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(i, "'] path[j='").concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(i, "'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(i, "'] path[j='").concat(j, "']")); - var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; - var bcy = 0; - var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; - - if (w.globals.isXNumeric) { - bcx = bcx - (barLen % 2 !== 0 ? bw / 2 : 0); - } else { - bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2; - - if (isNaN(bcx)) { - bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2; - } - } // tooltip will move vertically along with mouse as it is a shared tooltip - - - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2; - this.moveXCrosshairs(bcx); - - if (!ttCtx.fixedTooltip) { - var tcy = bcy || w.globals.gridHeight; - this.moveTooltip(bcx, tcy); - } - } - }]); - - return Position; - }(); - - /** - * ApexCharts Tooltip.Marker Class to draw texts on the tooltip. - * - * @module Tooltip.Marker - **/ - - var Marker = /*#__PURE__*/function () { - function Marker(tooltipContext) { - _classCallCheck(this, Marker); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.tooltipPosition = new Position(tooltipContext); - } - - _createClass(Marker, [{ - key: "drawDynamicPoints", - value: function drawDynamicPoints() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var marker = new Markers(this.ctx); - var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - elsSeries = _toConsumableArray(elsSeries); - elsSeries.sort(function (a, b) { - return Number(b.getAttribute('data:realIndex')) < Number(a.getAttribute('data:realIndex')) ? 0 : -1; - }); - - for (var i = 0; i < elsSeries.length; i++) { - var pointsMain = elsSeries[i].querySelector(".apexcharts-series-markers-wrap"); - - if (pointsMain !== null) { - // it can be null as we have tooltips in donut/bar charts - var point = void 0; - var PointClasses = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var elPointOptions = marker.getMarkerConfig(PointClasses, i); - point = graphics.drawMarker(0, 0, elPointOptions); - point.node.setAttribute('default-marker-size', 0); - var elPointsG = document.createElementNS(w.globals.SVGNS, 'g'); - elPointsG.classList.add('apexcharts-series-markers'); - elPointsG.appendChild(point.node); - pointsMain.appendChild(elPointsG); - } - } - } - }, { - key: "enlargeCurrentPoint", - value: function enlargeCurrentPoint(rel, point) { - var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var w = this.w; - - if (w.config.chart.type !== 'bubble') { - this.newPointSize(rel, point); - } - - var cx = point.getAttribute('cx'); - var cy = point.getAttribute('cy'); - - if (x !== null && y !== null) { - cx = x; - cy = y; - } - - this.tooltipPosition.moveXCrosshairs(cx); - - if (!this.fixedTooltip) { - if (w.config.chart.type === 'radar') { - var elGrid = this.ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - cx = this.ttCtx.e.clientX - seriesBound.left; - } - - this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size); - } - } - }, { - key: "enlargePoints", - value: function enlargePoints(j) { - var w = this.w; - var me = this; - var ttCtx = this.ttCtx; - var col = j; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - var newSize = w.config.markers.hover.size; - - for (var p = 0; p < points.length; p++) { - var rel = points[p].getAttribute('rel'); - var index = points[p].getAttribute('index'); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - if (col === parseInt(rel, 10)) { - me.newPointSize(col, points[p]); - var cx = points[p].getAttribute('cx'); - var cy = points[p].getAttribute('cy'); - me.tooltipPosition.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - me.tooltipPosition.moveTooltip(cx, cy, newSize); - } - } else { - me.oldPointSize(points[p]); - } - } - } - }, { - key: "newPointSize", - value: function newPointSize(rel, point) { - var w = this.w; - var newSize = w.config.markers.hover.size; - var elPoint = rel === 0 ? point.parentNode.firstChild : point.parentNode.lastChild; - - if (elPoint.getAttribute('default-marker-size') !== '0') { - var index = parseInt(elPoint.getAttribute('index'), 10); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - elPoint.setAttribute('r', newSize); - } - } - }, { - key: "oldPointSize", - value: function oldPointSize(point) { - var size = parseFloat(point.getAttribute('default-marker-size')); - point.setAttribute('r', size); - } - }, { - key: "resetPointsSize", - value: function resetPointsSize() { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - - for (var p = 0; p < points.length; p++) { - var size = parseFloat(points[p].getAttribute('default-marker-size')); - - if (Utils.isNumber(size)) { - points[p].setAttribute('r', size); - } else { - points[p].setAttribute('r', 0); - } - } - } - }]); - - return Marker; - }(); - - /** - * ApexCharts Tooltip.Intersect Class. - * - * @module Tooltip.Intersect - **/ - - var Intersect = /*#__PURE__*/function () { - function Intersect(tooltipContext) { - _classCallCheck(this, Intersect); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - - _createClass(Intersect, [{ - key: "getAttr", - value: function getAttr(e, attr) { - return parseFloat(e.target.getAttribute(attr)); - } - }, { - key: "handleHeatTooltip", - value: function handleHeatTooltip(_ref) { - var e = _ref.e, - opt = _ref.opt, - x = _ref.x, - y = _ref.y; - var ttCtx = this.ttCtx; - var w = this.w; - - if (e.target.classList.contains('apexcharts-heatmap-rect')) { - var i = this.getAttr(e, 'i'); - var j = this.getAttr(e, 'j'); - var cx = this.getAttr(e, 'cx'); - var cy = this.getAttr(e, 'cy'); - var width = this.getAttr(e, 'width'); - var height = this.getAttr(e, 'height'); - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: false - }); - w.globals.capturedSeriesIndex = i; - w.globals.capturedDataPointIndex = j; - x = cx + ttCtx.tooltipRect.ttWidth / 2 + width; - y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2; - ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2); - - if (x > w.globals.gridWidth / 2) { - x = cx - ttCtx.tooltipRect.ttWidth / 2 + width; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); // x = ttCtx.e.clientX - seriesBound.left - - y = ttCtx.e.clientY - seriesBound.top + w.globals.translateY / 2 - 10; - } - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleMarkerTooltip", - value: function handleMarkerTooltip(_ref2) { - var e = _ref2.e, - opt = _ref2.opt, - x = _ref2.x, - y = _ref2.y; - var w = this.w; - var ttCtx = this.ttCtx; - var i; - var j; - - if (e.target.classList.contains('apexcharts-marker')) { - var cx = parseInt(opt.paths.getAttribute('cx'), 10); - var cy = parseInt(opt.paths.getAttribute('cy'), 10); - var val = parseFloat(opt.paths.getAttribute('val')); - j = parseInt(opt.paths.getAttribute('rel'), 10); - i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel'), 10) - 1; - - if (ttCtx.intersect) { - var el = Utils.findAncestor(opt.paths, 'apexcharts-series'); - - if (el) { - i = parseInt(el.getAttribute('data:realIndex'), 10); - } - } - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (e.type === 'mouseup') { - ttCtx.markerClick(e, i, j); - } - - w.globals.capturedSeriesIndex = i; - w.globals.capturedDataPointIndex = j; - x = cx; - y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; - } - - if (val < 0) { - y = cy; - } - - ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleBarTooltip", - value: function handleBarTooltip(_ref3) { - var e = _ref3.e, - opt = _ref3.opt; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var bx = 0; - var x = 0; - var y = 0; - var i = 0; - var strokeWidth; - var barXY = this.getBarTooltipXY({ - e: e, - opt: opt - }); - i = barXY.i; - var barHeight = barXY.barHeight; - var j = barXY.j; - w.globals.capturedSeriesIndex = i; - w.globals.capturedDataPointIndex = j; - - if (w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w.config.tooltip.shared) { - x = barXY.x; - y = barXY.y; - strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; - bx = x; - } else { - if (!w.globals.comboCharts && !w.config.tooltip.shared) { - bx = bx / 2; - } - } // y is NaN, make it touch the bottom of grid area - - - if (isNaN(y)) { - y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight; - } else if (y < 0) { - y = 0; - } - - if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth) { - x = x - ttCtx.tooltipRect.ttWidth; - } else if (x < 0) { - x = 0; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; - } // if tooltip is still null, querySelector - - - if (ttCtx.tooltip === null) { - ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - - if (!w.config.tooltip.shared) { - if (w.globals.comboBarCount > 0) { - ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2); - } else { - ttCtx.tooltipPosition.moveXCrosshairs(bx); - } - } // move tooltip here - - - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) { - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - - if (isReversed) { - x = x - ttCtx.tooltipRect.ttWidth; - - if (x < 0) { - x = 0; - } - } - - tooltipEl.style.left = x + w.globals.translateX + 'px'; - var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex'), 10); - - if (isReversed && !(w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) { - y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; - } - - if (ttCtx.tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - ttCtx.tooltipRect.ttHeight + w.globals.translateY; - tooltipEl.style.top = y + 'px'; - } else { - tooltipEl.style.top = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2 + 'px'; - } - } - } - }, { - key: "getBarTooltipXY", - value: function getBarTooltipXY(_ref4) { - var e = _ref4.e, - opt = _ref4.opt; - var w = this.w; - var j = null; - var ttCtx = this.ttCtx; - var i = 0; - var x = 0; - var y = 0; - var barWidth = 0; - var barHeight = 0; - var cl = e.target.classList; - - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { - var bar = e.target; - var barRect = bar.getBoundingClientRect(); - var seriesBound = opt.elGrid.getBoundingClientRect(); - var bh = barRect.height; - barHeight = barRect.height; - var bw = barRect.width; - var cx = parseInt(bar.getAttribute('cx'), 10); - var cy = parseInt(bar.getAttribute('cy'), 10); - barWidth = parseFloat(bar.getAttribute('barWidth')); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - j = parseInt(bar.getAttribute('j'), 10); - i = parseInt(bar.parentNode.getAttribute('rel'), 10) - 1; - var y1 = bar.getAttribute('data-range-y1'); - var y2 = bar.getAttribute('data-range-y2'); - - if (w.globals.comboCharts) { - i = parseInt(bar.parentNode.getAttribute('data:realIndex'), 10); - } // if (w.config.tooltip.shared) { - // this check not needed at the moment - // const yDivisor = w.globals.gridHeight / (w.globals.series.length) - // const hoverY = ttCtx.clientY - ttCtx.seriesBound.top - // j = Math.ceil(hoverY / yDivisor) - // } - - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - y1: y1 ? parseInt(y1, 10) : null, - y2: y2 ? parseInt(y2, 10) : null, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (w.config.tooltip.followCursor) { - if (w.globals.isBarHorizontal) { - x = clientX - seriesBound.left + 15; - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; - } - } else { - if (w.globals.isBarHorizontal) { - x = cx; - - if (x < ttCtx.xyRatios.baseLineInvertedY) { - x = cx - ttCtx.tooltipRect.ttWidth; - } - - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - // if columns - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10 - } - } - } - - return { - x: x, - y: y, - barHeight: barHeight, - barWidth: barWidth, - i: i, - j: j - }; - } - }]); - - return Intersect; - }(); - - /** - * ApexCharts Tooltip.AxesTooltip Class. - * - * @module Tooltip.AxesTooltip - **/ - var AxesTooltip = /*#__PURE__*/function () { - function AxesTooltip(tooltipContext) { - _classCallCheck(this, AxesTooltip); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - - _createClass(AxesTooltip, [{ - key: "drawXaxisTooltip", - value: function drawXaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - var isBottom = w.config.xaxis.position === 'bottom'; - ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : -w.globals.xAxisHeight - w.config.xaxis.axisTicks.height + 3; - var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top'; - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blxaxisTooltip) { - var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip'); - - if (xaxisTooltip === null) { - ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' apexcharts-theme-' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.xaxisTooltip); - ttCtx.xaxisTooltipText = document.createElement('div'); - ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); - ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily; - ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize; - ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText); - } - } - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - }, { - key: "drawYaxisTooltip", - value: function drawYaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - - var _loop = function _loop(i) { - var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite; - ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1; - var tooltipCssClass = isRight ? "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-right") : "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-left"); - w.globals.yAxisSameScaleIndices.map(function (samescales, ssi) { - samescales.map(function (s, si) { - if (si === i) { - tooltipCssClass += w.config.yaxis[si].show ? " " : " apexcharts-yaxistooltip-hidden"; - } - }); - }); - var renderTo = w.globals.dom.elWrap; - var yaxisTooltip = w.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)); - - if (yaxisTooltip === null) { - ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' apexcharts-theme-' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.yaxisTooltip); - if (i === 0) ttCtx.yaxisTooltipText = []; - ttCtx.yaxisTooltipText[i] = document.createElement('div'); - ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text'); - ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]); - } - }; - - for (var i = 0; i < w.config.yaxis.length; i++) { - _loop(i); - } - } - /** - * @memberof Tooltip - **/ - - }, { - key: "setXCrosshairWidth", - value: function setXCrosshairWidth() { - var w = this.w; - var ttCtx = this.ttCtx; // set xcrosshairs width - - var xcrosshairs = ttCtx.getElXCrosshairs(); - ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width, 10); - - if (!w.globals.comboCharts) { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / count; - } else if (w.config.xaxis.crosshairs.width === 'barWidth') { - var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (bar !== null) { - var barWidth = parseFloat(bar.getAttribute('barWidth')); - ttCtx.xcrosshairsWidth = barWidth; - } else { - ttCtx.xcrosshairsWidth = 1; - } - } - } else { - var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') { - var _barWidth = parseFloat(_bar.getAttribute('barWidth')); - - ttCtx.xcrosshairsWidth = _barWidth; - } else { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var _count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count; - } - } - } - - if (w.globals.isBarHorizontal) { - ttCtx.xcrosshairsWidth = 0; - } - - if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) { - xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth); - } - } - }, { - key: "handleYCrosshair", - value: function handleYCrosshair() { - var w = this.w; - var ttCtx = this.ttCtx; // set ycrosshairs height - - ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden'); - } - }, { - key: "drawYaxisTooltipText", - value: function drawYaxisTooltipText(index, clientY, xyRatios) { - var ttCtx = this.ttCtx; - var w = this.w; - var lbFormatter = w.globals.yLabelFormatters[index]; - - if (ttCtx.yaxisTooltips[index]) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index]; - var height = w.globals.maxYArr[index] - w.globals.minYArr[index]; - var val = w.globals.minYArr[index] + (height - hoverY); - ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top); - ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val); - ttCtx.tooltipPosition.moveYAxisTooltip(index); - } - } - }]); - - return AxesTooltip; - }(); - - /** - * ApexCharts Core Tooltip Class to handle the tooltip generation. - * - * @module Tooltip - **/ - - var Tooltip = /*#__PURE__*/function () { - function Tooltip(ctx) { - _classCallCheck(this, Tooltip); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.tConfig = w.config.tooltip; - this.tooltipUtil = new Utils$1(this); - this.tooltipLabels = new Labels(this); - this.tooltipPosition = new Position(this); - this.marker = new Marker(this); - this.intersect = new Intersect(this); - this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = this.tConfig.intersect; - this.showTooltipTitle = this.tConfig.x.show; - this.fixedTooltip = this.tConfig.fixed.enabled; - this.xaxisTooltip = null; - this.yaxisTTEls = null; - this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; - } - - _createClass(Tooltip, [{ - key: "getElTooltip", - value: function getElTooltip(ctx) { - if (!ctx) ctx = this; - return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - }, { - key: "getElXCrosshairs", - value: function getElXCrosshairs() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - } - }, { - key: "getElGrid", - value: function getElGrid() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - } - }, { - key: "drawTooltip", - value: function drawTooltip(xyRatios) { - var w = this.w; - this.xyRatios = xyRatios; - this.blxaxisTooltip = w.config.xaxis.tooltip.enabled && w.globals.axisCharts; - this.yaxisTooltips = w.config.yaxis.map(function (y, i) { - return y.show && y.tooltip.enabled && w.globals.axisCharts ? true : false; - }); - this.allTooltipSeriesGroups = []; - - if (!w.globals.axisCharts) { - this.showTooltipTitle = false; - } - - var tooltipEl = document.createElement('div'); - tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add("apexcharts-theme-".concat(this.tConfig.theme)); - w.globals.dom.elWrap.appendChild(tooltipEl); - - if (w.globals.axisCharts) { - this.axesTooltip.drawXaxisTooltip(); - this.axesTooltip.drawYaxisTooltip(); - this.axesTooltip.setXCrosshairWidth(); - this.axesTooltip.handleYCrosshair(); - var xAxis = new XAxis(this.ctx); - this.xAxisTicksPositions = xAxis.getXAxisTicksPositions(); - } // we forcefully set intersect true for these conditions - - - if ((w.globals.comboCharts || this.tConfig.intersect || w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { - this.showOnIntersect = true; - } - - if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) { - // when user don't want to show points all the time, but only on when hovering on series - this.marker.drawDynamicPoints(this); - } // no visible series, exit - - - if (w.globals.collapsedSeries.length === w.globals.series.length) return; - this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - - if (this.showTooltipTitle) { - this.tooltipTitle = document.createElement('div'); - this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; - tooltipEl.appendChild(this.tooltipTitle); - } - - var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - - if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { - if (!this.showOnIntersect) { - ttItemsCnt = w.globals.series.length; - } else { - ttItemsCnt = 1; - } - } - - this.legendLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-legend-text'); - this.ttItems = this.createTTElements(ttItemsCnt); - this.addSVGEvents(); - } - }, { - key: "createTTElements", - value: function createTTElements(ttItemsCnt) { - var w = this.w; - var ttItems = []; - var tooltipEl = this.getElTooltip(); - - for (var i = 0; i < ttItemsCnt; i++) { - var gTxt = document.createElement('div'); - gTxt.classList.add('apexcharts-tooltip-series-group'); - - if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { - if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { - gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); - } - } - - var point = document.createElement('span'); - point.classList.add('apexcharts-tooltip-marker'); - point.style.backgroundColor = w.globals.colors[i]; - gTxt.appendChild(point); - var gYZ = document.createElement('div'); - gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group - - var gYValText = document.createElement('div'); - gYValText.classList.add('apexcharts-tooltip-y-group'); - var txtLabel = document.createElement('span'); - txtLabel.classList.add('apexcharts-tooltip-text-label'); - gYValText.appendChild(txtLabel); - var txtValue = document.createElement('span'); - txtValue.classList.add('apexcharts-tooltip-text-value'); - gYValText.appendChild(txtValue); // z values group - - var gZValText = document.createElement('div'); - gZValText.classList.add('apexcharts-tooltip-z-group'); - var txtZLabel = document.createElement('span'); - txtZLabel.classList.add('apexcharts-tooltip-text-z-label'); - gZValText.appendChild(txtZLabel); - var txtZValue = document.createElement('span'); - txtZValue.classList.add('apexcharts-tooltip-text-z-value'); - gZValText.appendChild(txtZValue); - gYZ.appendChild(gYValText); - gYZ.appendChild(gZValText); - gTxt.appendChild(gYZ); - tooltipEl.appendChild(gTxt); - ttItems.push(gTxt); - } - - return ttItems; - } - }, { - key: "addSVGEvents", - value: function addSVGEvents() { - var w = this.w; - var type = w.config.chart.type; - var tooltipEl = this.getElTooltip(); - var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); - var chartWithmarkers = type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble' || type === 'radar'; - var hoverArea = w.globals.dom.Paper.node; - var elGrid = this.getElGrid(); - - if (elGrid) { - this.seriesBound = elGrid.getBoundingClientRect(); - } - - var tooltipY = []; - var tooltipX = []; - var seriesHoverParams = { - hoverArea: hoverArea, - elGrid: elGrid, - tooltipEl: tooltipEl, - tooltipY: tooltipY, - tooltipX: tooltipX, - ttItems: this.ttItems - }; - var points; - - if (w.globals.axisCharts) { - if (chartWithmarkers) { - points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (commonBar) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); - } else if (type === 'heatmap') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); - } - - if (points && points.length) { - for (var p = 0; p < points.length; p++) { - tooltipY.push(points[p].getAttribute('cy')); - tooltipX.push(points[p].getAttribute('cx')); - } - } - } - - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared; - - if (validSharedChartTypes) { - this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (commonBar && !w.globals.comboCharts || chartWithmarkers && this.showOnIntersect) { - this.addDatapointEventsListeners(seriesHoverParams); - } else if (!w.globals.axisCharts || type === 'heatmap') { - var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - this.addPathsEventListeners(seriesAll, seriesHoverParams); - } - - if (this.showOnIntersect) { - var lineAreaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker'); - - if (lineAreaPoints.length > 0) { - // if we find any lineSeries, addEventListeners for them - this.addPathsEventListeners(lineAreaPoints, seriesHoverParams); - } // combo charts may have bars, so add event listeners here too - - - if (this.tooltipUtil.hasBars() && !this.tConfig.shared) { - this.addDatapointEventsListeners(seriesHoverParams); - } - } - } - }, { - key: "drawFixedTooltipRect", - value: function drawFixedTooltipRect() { - var w = this.w; - var tooltipEl = this.getElTooltip(); - var tooltipRect = tooltipEl.getBoundingClientRect(); - var ttWidth = tooltipRect.width + 10; - var ttHeight = tooltipRect.height + 10; - var x = this.tConfig.fixed.offsetX; - var y = this.tConfig.fixed.offsetY; - var fixed = this.tConfig.fixed.position.toLowerCase(); - - if (fixed.indexOf('right') > -1) { - x = x + w.globals.svgWidth - ttWidth + 10; - } - - if (fixed.indexOf('bottom') > -1) { - y = y + w.globals.svgHeight - ttHeight - 10; - } - - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - return { - x: x, - y: y, - ttWidth: ttWidth, - ttHeight: ttHeight - }; - } - }, { - key: "addDatapointEventsListeners", - value: function addDatapointEventsListeners(seriesHoverParams) { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); - this.addPathsEventListeners(points, seriesHoverParams); - } - }, { - key: "addPathsEventListeners", - value: function addPathsEventListeners(paths, opts) { - var self = this; - - var _loop = function _loop(p) { - var extendedOpts = { - paths: paths[p], - tooltipEl: opts.tooltipEl, - tooltipY: opts.tooltipY, - tooltipX: opts.tooltipX, - elGrid: opts.elGrid, - hoverArea: opts.hoverArea, - ttItems: opts.ttItems - }; - var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; - events.map(function (ev) { - return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { - capture: false, - passive: true - }); - }); - }; - - for (var p = 0; p < paths.length; p++) { - _loop(p); - } - } - /* - ** The actual series hover function - */ - - }, { - key: "seriesHover", - value: function seriesHover(opt, e) { - var _this = this; - - var chartGroups = []; - var w = this.w; // if user has more than one charts in group, we need to sync - - if (w.config.chart.group) { - chartGroups = this.ctx.getGroupedCharts(); - } - - if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) { - return; - } - - if (chartGroups.length) { - chartGroups.forEach(function (ch) { - var tooltipEl = _this.getElTooltip(ch); - - var newOpts = { - paths: opt.paths, - tooltipEl: tooltipEl, - tooltipY: opt.tooltipY, - tooltipX: opt.tooltipX, - elGrid: opt.elGrid, - hoverArea: opt.hoverArea, - ttItems: ch.w.globals.tooltip.ttItems - }; // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly - - if (ch.w.globals.minX === _this.w.globals.minX && ch.w.globals.maxX === _this.w.globals.maxX) { - ch.w.globals.tooltip.seriesHoverByContext({ - chartCtx: ch, - ttCtx: ch.w.globals.tooltip, - opt: newOpts, - e: e - }); - } - }); - } else { - this.seriesHoverByContext({ - chartCtx: this.ctx, - ttCtx: this.w.globals.tooltip, - opt: opt, - e: e - }); - } - } - }, { - key: "seriesHoverByContext", - value: function seriesHoverByContext(_ref) { - var chartCtx = _ref.chartCtx, - ttCtx = _ref.ttCtx, - opt = _ref.opt, - e = _ref.e; - var w = chartCtx.w; - var tooltipEl = this.getElTooltip(); // tooltipRect is calculated on every mousemove, because the text is dynamic - - ttCtx.tooltipRect = { - x: 0, - y: 0, - ttWidth: tooltipEl.getBoundingClientRect().width, - ttHeight: tooltipEl.getBoundingClientRect().height - }; - ttCtx.e = e; // highlight the current hovered bars - - if (ttCtx.tooltipUtil.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (this.tConfig.onDatasetHover.highlightDataSeries) { - var series = new Series(chartCtx); - series.toggleSeriesOnHover(e, e.target.parentNode); - } - } - - if (ttCtx.fixedTooltip) { - ttCtx.drawFixedTooltipRect(); - } - - if (w.globals.axisCharts) { - ttCtx.axisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } else { - // non-plot charts i.e pie/donut/circle - ttCtx.nonAxisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } - } // tooltip handling for line/area/bar/columns/scatter - - }, { - key: "axisChartsTooltips", - value: function axisChartsTooltips(_ref2) { - var e = _ref2.e, - opt = _ref2.opt; - var w = this.w; - var x, y; - var seriesBound = opt.elGrid.getBoundingClientRect(); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - this.clientY = clientY; - this.clientX = clientX; - w.globals.capturedSeriesIndex = -1; - w.globals.capturedDataPointIndex = -1; - - if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) { - this.handleMouseOut(opt); - return; - } - - if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) { - var index = parseInt(opt.paths.getAttribute('index'), 10); - - if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { - this.handleMouseOut(opt); - return; - } - } - - var tooltipEl = this.getElTooltip(); - var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.tooltipUtil.hasBars(); - - if (w.globals.isBarHorizontal && this.tooltipUtil.hasBars()) { - isStickyTooltip = false; - } - - if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { - if (xcrosshairs !== null) { - xcrosshairs.classList.add('apexcharts-active'); - } - - var hasYAxisTooltip = this.yaxisTooltips.filter(function (b) { - return b === true; - }); - - if (this.ycrosshairs !== null && hasYAxisTooltip.length) { - this.ycrosshairs.classList.add('apexcharts-active'); - } - - if (isStickyTooltip && !this.showOnIntersect) { - this.handleStickyTooltip(e, clientX, clientY, opt); - } else { - if (w.config.chart.type === 'heatmap') { - var markerXY = this.intersect.handleHeatTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - x = markerXY.x; - y = markerXY.y; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else { - if (this.tooltipUtil.hasBars()) { - this.intersect.handleBarTooltip({ - e: e, - opt: opt - }); - } - - if (this.tooltipUtil.hasMarkers()) { - // intersect - line/area/scatter/bubble - this.intersect.handleMarkerTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - } - } - } - - if (this.yaxisTooltips.length) { - for (var yt = 0; yt < w.config.yaxis.length; yt++) { - this.axesTooltip.drawYaxisTooltipText(yt, clientY, this.xyRatios); - } - } - - opt.tooltipEl.classList.add('apexcharts-active'); - } else if (e.type === 'mouseout' || e.type === 'touchend') { - this.handleMouseOut(opt); - } - } // tooltip handling for pie/donuts - - }, { - key: "nonAxisChartsTooltips", - value: function nonAxisChartsTooltips(_ref3) { - var e = _ref3.e, - opt = _ref3.opt, - tooltipRect = _ref3.tooltipRect; - var w = this.w; - var rel = opt.paths.getAttribute('rel'); - var tooltipEl = this.getElTooltip(); - var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); - - if (e.type === 'mousemove' || e.type === 'touchmove') { - tooltipEl.classList.add('apexcharts-active'); - this.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: parseInt(rel, 10) - 1, - shared: false - }); - var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; - var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else if (e.type === 'mouseout' || e.type === 'touchend') { - tooltipEl.classList.remove('apexcharts-active'); - } - } - }, { - key: "handleStickyTooltip", - value: function handleStickyTooltip(e, clientX, clientY, opt) { - var w = this.w; - var capj = this.tooltipUtil.getNearestValues({ - context: this, - hoverArea: opt.hoverArea, - elGrid: opt.elGrid, - clientX: clientX, - clientY: clientY - }); - var j = capj.j; - var capturedSeries = capj.capturedSeries; - - if (capj.hoverX < 0 || capj.hoverX > w.globals.gridWidth) { - this.handleMouseOut(opt); - return; - } - - if (capturedSeries !== null) { - this.handleStickyCapturedSeries(e, capturedSeries, opt, j); - } else { - // couldn't capture any series. check if shared X is same, - // if yes, draw a grouped tooltip - if (this.tooltipUtil.isXoverlap(j)) { - this.create(e, this, 0, j, opt.ttItems); - } - } - } - }, { - key: "handleStickyCapturedSeries", - value: function handleStickyCapturedSeries(e, capturedSeries, opt, j) { - var w = this.w; - var ignoreNull = w.globals.series[capturedSeries][j] === null; - - if (ignoreNull) { - this.handleMouseOut(opt); - return; - } - - if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) { - this.create(e, this, capturedSeries, j, opt.ttItems); - } else { - this.create(e, this, capturedSeries, j, opt.ttItems, false); - } - } else { - if (this.tooltipUtil.isXoverlap(j)) { - this.create(e, this, 0, j, opt.ttItems); - } - } - } - }, { - key: "deactivateHoverFilter", - value: function deactivateHoverFilter() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var allPaths = w.globals.dom.Paper.select(".apexcharts-bar-area"); - - for (var b = 0; b < allPaths.length; b++) { - graphics.pathMouseLeave(allPaths[b]); - } - } - }, { - key: "handleMouseOut", - value: function handleMouseOut(opt) { - var w = this.w; - var xcrosshairs = this.getElXCrosshairs(); - opt.tooltipEl.classList.remove('apexcharts-active'); - this.deactivateHoverFilter(); - - if (w.config.chart.type !== 'bubble') { - this.marker.resetPointsSize(); - } - - if (xcrosshairs !== null) { - xcrosshairs.classList.remove('apexcharts-active'); - } - - if (this.ycrosshairs !== null) { - this.ycrosshairs.classList.remove('apexcharts-active'); - } - - if (this.blxaxisTooltip) { - this.xaxisTooltip.classList.remove('apexcharts-active'); - } - - if (this.yaxisTooltips.length) { - if (this.yaxisTTEls === null) { - this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - for (var i = 0; i < this.yaxisTTEls.length; i++) { - this.yaxisTTEls[i].classList.remove('apexcharts-active'); - } - } - - if (w.config.legend.tooltipHoverFormatter) { - this.legendLabels.forEach(function (l) { - var defaultText = l.getAttribute('data:default-text'); - l.innerHTML = decodeURIComponent(defaultText); - }); - } - } - }, { - key: "markerClick", - value: function markerClick(e, seriesIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.config.chart.events.markerClick === 'function') { - w.config.chart.events.markerClick(e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }); - } - - this.ctx.events.fireEvent('markerClick', [e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }]); - } - }, { - key: "create", - value: function create(e, context, capturedSeries, j, ttItems) { - var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var w = this.w; - var ttCtx = context; - - if (e.type === 'mouseup') { - this.markerClick(e, capturedSeries, j); - } - - if (shared === null) shared = this.tConfig.shared; - var hasMarkers = this.tooltipUtil.hasMarkers(); - var bars = this.tooltipUtil.getElBars(); - - if (w.config.legend.tooltipHoverFormatter) { - var legendFormatter = w.config.legend.tooltipHoverFormatter; - var els = Array.from(this.legendLabels); // reset all legend values first - - els.forEach(function (l) { - var legendName = l.getAttribute('data:default-text'); - l.innerHTML = decodeURIComponent(legendName); - }); // for irregular time series - - for (var i = 0; i < els.length; i++) { - var l = els[i]; - var lsIndex = parseInt(l.getAttribute('i'), 10); - var legendName = decodeURIComponent(l.getAttribute('data:default-text')); - var text = legendFormatter(legendName, { - seriesIndex: shared ? lsIndex : capturedSeries, - dataPointIndex: j, - w: w - }); - - if (!shared) { - l.innerHTML = lsIndex === capturedSeries ? text : legendName; - - if (capturedSeries === lsIndex) { - break; - } - } else { - l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName; - } - } - } - - if (shared) { - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: ttItems, - i: capturedSeries, - j: j, - shared: this.showOnIntersect ? false : this.tConfig.shared - }); - - if (hasMarkers) { - if (w.globals.markers.largestSize > 0) { - ttCtx.marker.enlargePoints(j); - } else { - ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); - } - } - - if (this.tooltipUtil.hasBars()) { - this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars); - - if (this.barSeriesHeight > 0) { - // hover state, activate snap filter - var graphics = new Graphics(this.ctx); - var paths = w.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(j, "']")); // de-activate first - - this.deactivateHoverFilter(); - this.tooltipPosition.moveStickyTooltipOverBars(j); - - for (var b = 0; b < paths.length; b++) { - graphics.pathMouseEnter(paths[b]); - } - } - } - } else { - ttCtx.tooltipLabels.drawSeriesTexts({ - shared: false, - ttItems: ttItems, - i: capturedSeries, - j: j - }); - - if (this.tooltipUtil.hasBars()) { - ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); - } - - if (hasMarkers) { - ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); - } - } - } - }]); - - return Tooltip; - }(); - - /** - * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars. - * - * @module BarStacked - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar - **/ - - var BarStacked = /*#__PURE__*/function (_Bar) { - _inherits(BarStacked, _Bar); - - function BarStacked() { - _classCallCheck(this, BarStacked); - - return _possibleConstructorReturn(this, _getPrototypeOf(BarStacked).apply(this, arguments)); - } - - _createClass(BarStacked, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var _this = this; - - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.bar = new Bar(this.ctx, this.xyRatios); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.barHelpers.initVariables(series); - - if (w.config.chart.stackType === '100%') { - series = w.globals.seriesPercent.slice(); - } - - this.series = series; - this.totalItems = 0; - this.prevY = []; // y position on chart - - this.prevX = []; // x position on chart - - this.prevYF = []; // y position including shapes on chart - - this.prevXF = []; // x position including shapes on chart - - this.prevYVal = []; // y values (series[i][j]) in columns - - this.prevXVal = []; // x values (series[i][j]) in bars - - this.xArrj = []; // xj indicates x position on graph in bars - - this.xArrjF = []; // xjF indicates bar's x position + roundedShape's positions in bars - - this.xArrjVal = []; // x val means the actual series's y values in horizontal/bars - - this.yArrj = []; // yj indicates y position on graph in columns - - this.yArrjF = []; // yjF indicates bar's y position + roundedShape's positions in columns - - this.yArrjVal = []; // y val means the actual series's y values in columns - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.totalItems += series[sl].length; - } - } - - var ret = this.graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - var x = 0; - var y = 0; - - var _loop = function _loop(i, bc) { - var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - - var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - - var zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var xArrValues = []; - var yArrValues = []; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; - } - - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; // el to which series will be drawn - - var elSeries = _this.graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - _this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); // eldatalabels - - - var elDataLabelsWrap = _this.graphics.group({ - class: 'apexcharts-datalabels', - 'data:realIndex': realIndex - }); - - var barHeight = 0; - var barWidth = 0; - - var initPositions = _this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - _this.yArrj = []; - _this.yArrjF = []; - _this.yArrjVal = []; - _this.xArrj = []; - _this.xArrjF = []; - _this.xArrjVal = []; // if (!this.horizontal) { - // this.xArrj.push(x + barWidth / 2) - // } - // fix issue #1215; - // where all stack bar disappear after collapsing the first series - // sol: if only 1 arr in this.prevY(this.prevY.length === 1) and all are NaN - - if (_this.prevY.length === 1 && _this.prevY[0].every(function (val) { - return isNaN(val); - })) { - // make this.prevY[0] all zeroH - _this.prevY[0] = _this.prevY[0].map(function (val) { - return zeroH; - }); // make this.prevYF[0] all 0 - - _this.prevYF[0] = _this.prevYF[0].map(function (val) { - return 0; - }); - } - - for (var j = 0; j < w.globals.dataPoints; j++) { - var strokeWidth = _this.barHelpers.getStrokeWidth(i, j, realIndex); - - var commonPathOpts = { - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - strokeWidth: strokeWidth, - x: x, - y: y, - elSeries: elSeries - }; - var paths = null; - - if (_this.isHorizontal) { - paths = _this.drawStackedBarPaths(_objectSpread2({}, commonPathOpts, { - zeroW: zeroW, - barHeight: barHeight, - yDivision: yDivision - })); - barWidth = _this.series[i][j] / _this.invertedYRatio; - } else { - paths = _this.drawStackedColumnPaths(_objectSpread2({}, commonPathOpts, { - xDivision: xDivision, - barWidth: barWidth, - zeroH: zeroH - })); - barHeight = _this.series[i][j] / _this.yRatio[_this.yaxisIndex]; - } - - y = paths.y; - x = paths.x; - xArrValues.push(x); - yArrValues.push(y); - - var pathFill = _this.barHelpers.getPathFillColor(series, i, j, realIndex); - - elSeries = _this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: paths.pathFrom, - pathTo: paths.pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - type: 'bar', - visibleSeries: 0 - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrValues; - w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - - _this.prevY.push(_this.yArrj); - - _this.prevYF.push(_this.yArrjF); - - _this.prevYVal.push(_this.yArrjVal); - - _this.prevX.push(_this.xArrj); - - _this.prevXF.push(_this.xArrjF); - - _this.prevXVal.push(_this.xArrjVal); - - ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); - } - - return ret; - } - }, { - key: "initialPositions", - value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) { - var w = this.w; - var barHeight, barWidth; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision; - barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight, 10) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars - - y = (yDivision - barHeight) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / w.globals.dataPoints; - barWidth = xDivision; - - if (w.globals.isXNumeric) { - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision * parseInt(this.barOptions.columnWidth, 10) / 100; - } else { - barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth, 10) / 100; - } - - zeroH = this.baseLineY[this.yaxisIndex] + (this.isReversed ? w.globals.gridHeight : 0) - (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth - - x = w.globals.padHorizontal + (xDivision - barWidth) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawStackedBarPaths", - value: function drawStackedBarPaths(_ref) { - var indexes = _ref.indexes, - barHeight = _ref.barHeight, - strokeWidth = _ref.strokeWidth, - zeroW = _ref.zeroW, - x = _ref.x, - y = _ref.y, - yDivision = _ref.yDivision, - elSeries = _ref.elSeries; - var w = this.w; - var barYPosition = y; - var barXPosition; - var i = indexes.i; - var j = indexes.j; - var bc = indexes.bc; - var prevBarW = 0; - - for (var k = 0; k < this.prevXF.length; k++) { - prevBarW = prevBarW + this.prevXF[k][j]; - } - - if (i > 0) { - var bXP = zeroW; - - if (this.prevXVal[i - 1][j] < 0) { - bXP = this.series[i][j] >= 0 ? this.prevX[i - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2 : this.prevX[i - 1][j]; - } else if (this.prevXVal[i - 1][j] >= 0) { - bXP = this.series[i][j] >= 0 ? this.prevX[i - 1][j] : this.prevX[i - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2; - } - - barXPosition = bXP; - } else { - // the first series will not have prevX values - barXPosition = zeroW; - } - - if (this.series[i][j] === null) { - x = barXPosition; - } else { - x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - this.xArrj.push(x); - this.xArrjF.push(Math.abs(barXPosition - x)); - this.xArrjVal.push(this.series[i][j]); - var paths = this.barHelpers.getBarpaths({ - barYPosition: barYPosition, - barHeight: barHeight, - x1: barXPosition, - x2: x, - strokeWidth: strokeWidth, - series: this.series, - realIndex: indexes.realIndex, - i: i, - j: j, - w: w - }); - this.barHelpers.barBackground({ - bc: bc, - i: i, - y1: barYPosition, - y2: barHeight, - elSeries: elSeries - }); - y = y + yDivision; - return { - pathTo: paths.pathTo, - pathFrom: paths.pathFrom, - x: x, - y: y - }; - } - }, { - key: "drawStackedColumnPaths", - value: function drawStackedColumnPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - xDivision = _ref2.xDivision, - barWidth = _ref2.barWidth, - zeroH = _ref2.zeroH, - strokeWidth = _ref2.strokeWidth, - elSeries = _ref2.elSeries; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - var seriesVal = w.globals.seriesX[i][j]; - if (!seriesVal) seriesVal = 0; - x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x; - var barYPosition; - var prevBarH = 0; - - for (var k = 0; k < this.prevYF.length; k++) { - // fix issue #1215 - // in case where this.prevYF[k][j] is NaN, use 0 instead - prevBarH = prevBarH + (!isNaN(this.prevYF[k][j]) ? this.prevYF[k][j] : 0); - } - - if (i > 0 && !w.globals.isXNumeric || i > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) { - var bYP; - var prevYValue; - var p = Math.min(this.yRatio.length + 1, i + 1); - - if (this.prevY[i - 1] !== undefined) { - for (var ii = 1; ii < p; ii++) { - if (!isNaN(this.prevY[i - ii][j])) { - // find the previous available value to give prevYValue - prevYValue = this.prevY[i - ii][j]; // if found it, break the loop - - break; - } - } - } - - for (var _ii = 1; _ii < p; _ii++) { - // find the previous available value(non-NaN) to give bYP - if (this.prevYVal[i - _ii][j] < 0) { - bYP = this.series[i][j] >= 0 ? prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2 : prevYValue; // found it? break the loop - - break; - } else if (this.prevYVal[i - _ii][j] >= 0) { - bYP = this.series[i][j] >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2; // found it? break the loop - - break; - } - } - - if (typeof bYP === 'undefined') bYP = w.globals.gridHeight; // if this.prevYF[0] is all 0 resulted from line #486 - // AND every arr starting from the second only contains NaN - - if (this.prevYF[0].every(function (val) { - return val === 0; - }) && this.prevYF.slice(1, i).every(function (arr) { - return arr.every(function (val) { - return isNaN(val); - }); - })) { - // Use the same calc way as line #485 - barYPosition = w.globals.gridHeight - zeroH; - } else { - // Nothing special - barYPosition = bYP; - } - } else { - // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero - barYPosition = w.globals.gridHeight - zeroH; - } - - y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - this.yArrj.push(y); - this.yArrjF.push(Math.abs(barYPosition - y)); - this.yArrjVal.push(this.series[i][j]); - var paths = this.barHelpers.getColumnPaths({ - barXPosition: barXPosition, - barWidth: barWidth, - y1: barYPosition, - y2: y, - yRatio: this.yRatio[this.yaxisIndex], - strokeWidth: this.strokeWidth, - series: this.series, - realIndex: indexes.realIndex, - i: i, - j: j, - w: w - }); - this.barHelpers.barBackground({ - bc: bc, - i: i, - x1: barXPosition, - x2: barWidth, - elSeries: elSeries - }); - x = x + xDivision; - return { - pathTo: paths.pathTo, - pathFrom: paths.pathFrom, - x: w.globals.isXNumeric ? x - xDivision : x, - y: y - }; - } - }]); - - return BarStacked; - }(Bar); - - /** - * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. - * - * @module CandleStick - **/ - - var CandleStick = /*#__PURE__*/function (_Bar) { - _inherits(CandleStick, _Bar); - - function CandleStick() { - _classCallCheck(this, CandleStick); - - return _possibleConstructorReturn(this, _getPrototypeOf(CandleStick).apply(this, arguments)); - } - - _createClass(CandleStick, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.candlestickOptions = this.w.config.plotOptions.candlestick; - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.barHelpers.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-candlestick-series apexcharts-plot-series' - }); - - for (var i = 0; i < series.length; i++) { - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.barHelpers.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels', - 'data:realIndex': realIndex - }); - - for (var j = 0; j < w.globals.dataPoints; j++) { - var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex); - var color = void 0; - var paths = this.drawCandleStickPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex - }, - x: x, - y: y, - xDivision: xDivision, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - y = paths.y; - x = paths.x; - color = paths.color; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex, - dataPointIndex: j, - color: color, - value: series[i][j] - }); - var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; - this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: paths.pathFrom, - pathTo: paths.pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'candlestick' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawCandleStickPaths", - value: function drawCandleStickPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - xDivision = _ref.xDivision, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH, - strokeWidth = _ref.strokeWidth; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var isPositive = true; - var colorPos = w.config.plotOptions.candlestick.colors.upward; - var colorNeg = w.config.plotOptions.candlestick.colors.downward; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var ohlc = this.getOHLCValue(realIndex, j); - var l1 = zeroH; - var l2 = zeroH; - - if (ohlc.o > ohlc.c) { - isPositive = false; - } - - var y1 = Math.min(ohlc.o, ohlc.c); - var y2 = Math.max(ohlc.o, ohlc.c); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - l1 = zeroH - ohlc.h / yRatio; - l2 = zeroH - ohlc.l / yRatio; - } - - var pathTo = graphics.move(barXPosition, zeroH); - var pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPreviousPath(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y2, - barXPosition: barXPosition, - color: isPositive ? colorPos : colorNeg - }; - } - }, { - key: "getOHLCValue", - value: function getOHLCValue(i, j) { - var w = this.w; - return { - o: w.globals.seriesCandleO[i][j], - h: w.globals.seriesCandleH[i][j], - l: w.globals.seriesCandleL[i][j], - c: w.globals.seriesCandleC[i][j] - }; - } - }]); - - return CandleStick; - }(Bar); - - /** - * ApexCharts HeatMap Class. - * @module HeatMap - **/ - - var HeatMap = /*#__PURE__*/function () { - function HeatMap(ctx, xyRatios) { - _classCallCheck(this, HeatMap); - - this.ctx = ctx; - this.w = ctx.w; - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.negRange = false; - this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; - this.rectRadius = this.w.config.plotOptions.heatmap.radius; - this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0; - } - - _createClass(HeatMap, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-heatmap' - }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); // width divided into equal parts - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var yDivision = w.globals.gridHeight / w.globals.series.length; - var y1 = 0; - var rev = false; - this.checkColorRange(); - var heatSeries = series.slice(); - - if (w.config.yaxis[0].reversed) { - rev = true; - heatSeries.reverse(); - } - - for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { - // el to which series will be drawn - var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, i); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow, i); - } - - var x1 = 0; - - for (var j = 0; j < heatSeries[i].length; j++) { - var colorShadePercent = 1; - var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - var heatColorProps = this.determineHeatColor(i, j); - - if (w.globals.hasNegs || this.negRange) { - if (w.config.plotOptions.heatmap.reverseNegativeShade) { - if (heatColorProps.percent < 0) { - colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); - } - } else { - if (heatColorProps.percent <= 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; - } - } - } else { - colorShadePercent = 1 - heatColorProps.percent / 100; - } - - var color = heatColorProps.color; - var utils = new Utils(); - - if (w.config.plotOptions.heatmap.enableShades) { - if (colorShadePercent < 0) colorShadePercent = 0; - color = Utils.hexToRgba(utils.shadeColor(colorShadePercent, heatColorProps.color), w.config.fill.opacity); - } - - if (w.config.fill.type === 'image') { - var fill = new Fill(this.ctx); - color = fill.fillPath({ - seriesNumber: i, - dataPointIndex: j, - opacity: w.globals.hasNegs ? heatColorProps.percent < 0 ? 1 - (1 + heatColorProps.percent / 100) : shadeIntensity + heatColorProps.percent / 100 : heatColorProps.percent / 100, - patternID: Utils.randomId(), - width: w.config.fill.image.width ? w.config.fill.image.width : xDivision, - height: w.config.fill.image.height ? w.config.fill.image.height : yDivision - }); - } - - var radius = this.rectRadius; - var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius); - rect.attr({ - cx: x1, - cy: y1 - }); - rect.node.classList.add('apexcharts-heatmap-rect'); - elSeries.add(rect); - rect.attr({ - fill: color, - i: i, - index: i, - j: j, - val: heatSeries[i][j], - 'stroke-width': this.strokeWidth, - stroke: w.config.plotOptions.heatmap.useFillColorAsStroke ? color : w.globals.stroke.colors[0], - color: color - }); - rect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, rect)); - rect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, rect)); - rect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, rect)); - - if (w.config.chart.animations.enabled && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed); - } - - if (w.globals.dataChanged) { - var _speed = 1; - - if (this.dynamicAnim.enabled && w.globals.shouldAnimate) { - _speed = this.dynamicAnim.speed; - var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color; - if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)'; - this.animateHeatColor(rect, Utils.isColorHex(colorFrom) ? colorFrom : Utils.rgb2hex(colorFrom), Utils.isColorHex(color) ? color : Utils.rgb2hex(color), _speed); - } - } - - var dataLabels = this.calculateHeatmapDataLabels({ - x: x1, - y: y1, - i: i, - j: j, - heatColorProps: heatColorProps, - series: heatSeries, - rectHeight: yDivision, - rectWidth: xDivision - }); - - if (dataLabels !== null) { - elSeries.add(dataLabels); - } - - x1 = x1 + xDivision; - } - - y1 = y1 + yDivision; - ret.add(elSeries); - } // adjust yaxis labels for heatmap - - - var yAxisScale = w.globals.yAxisScale[0].result.slice(); - - if (w.config.yaxis[0].reversed) { - yAxisScale.unshift(''); - } else { - yAxisScale.push(''); - } - - w.globals.yAxisScale[0].result = yAxisScale; - var divisor = w.globals.gridHeight / w.globals.series.length; - w.config.yaxis[0].labels.offsetY = -(divisor / 2); - return ret; - } - }, { - key: "checkColorRange", - value: function checkColorRange() { - var _this = this; - - var w = this.w; - var heatmap = w.config.plotOptions.heatmap; - - if (heatmap.colorScale.ranges.length > 0) { - heatmap.colorScale.ranges.map(function (range, index) { - if (range.from <= 0) { - _this.negRange = true; - } - }); - } - } - }, { - key: "determineHeatColor", - value: function determineHeatColor(i, j) { - var w = this.w; - var val = w.globals.series[i][j]; - var heatmap = w.config.plotOptions.heatmap; - var seriesNumber = heatmap.colorScale.inverse ? j : i; - var color = w.globals.colors[seriesNumber]; - var foreColor = null; - var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i])); - var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i])); - - if (!heatmap.distributed) { - min = w.globals.minY; - max = w.globals.maxY; - } - - if (typeof heatmap.colorScale.min !== 'undefined') { - min = heatmap.colorScale.min < w.globals.minY ? heatmap.colorScale.min : w.globals.minY; - max = heatmap.colorScale.max > w.globals.maxY ? heatmap.colorScale.max : w.globals.maxY; - } - - var total = Math.abs(max) + Math.abs(min); - var percent = 100 * val / (total === 0 ? total - 0.000001 : total); - - if (heatmap.colorScale.ranges.length > 0) { - var colorRange = heatmap.colorScale.ranges; - colorRange.map(function (range, index) { - if (val >= range.from && val <= range.to) { - color = range.color; - foreColor = range.foreColor ? range.foreColor : null; - min = range.from; - max = range.to; - var rTotal = Math.abs(max) + Math.abs(min); - percent = 100 * val / (rTotal === 0 ? rTotal - 0.000001 : rTotal); - } - }); - } - - return { - color: color, - foreColor: foreColor, - percent: percent - }; - } - }, { - key: "calculateHeatmapDataLabels", - value: function calculateHeatmapDataLabels(_ref) { - var x = _ref.x, - y = _ref.y, - i = _ref.i, - j = _ref.j, - heatColorProps = _ref.heatColorProps, - series = _ref.series, - rectHeight = _ref.rectHeight, - rectWidth = _ref.rectWidth; - var w = this.w; // let graphics = new Graphics(this.ctx) - - var dataLabelsConfig = w.config.dataLabels; - var graphics = new Graphics(this.ctx); - var dataLabels = new DataLabels(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - - if (dataLabelsConfig.enabled) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var dataLabelsX = x + rectWidth / 2 + offX; - var dataLabelsY = y + rectHeight / 2 + parseFloat(dataLabelsConfig.style.fontSize) / 3 + offY; - var text = formatter(w.globals.series[i][j], { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - dataLabels.plotDataLabelsText({ - x: dataLabelsX, - y: dataLabelsY, - text: text, - i: i, - j: j, - color: heatColorProps.foreColor, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig - }); - } - - return elDataLabelsWrap; - } - }, { - key: "animateHeatMap", - value: function animateHeatMap(el, x, y, width, height, speed) { - var animations = new Animations(this.ctx); - animations.animateRect(el, { - x: x + width / 2, - y: y + height / 2, - width: 0, - height: 0 - }, { - x: x, - y: y, - width: width, - height: height - }, speed, function () { - animations.animationCompleted(el); - }); - } - }, { - key: "animateHeatColor", - value: function animateHeatColor(el, colorFrom, colorTo, speed) { - el.attr({ - fill: colorFrom - }).animate(speed).attr({ - fill: colorTo - }); - } - }]); - - return HeatMap; - }(); - - var CircularChartsHelpers = /*#__PURE__*/function () { - function CircularChartsHelpers(ctx) { - _classCallCheck(this, CircularChartsHelpers); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(CircularChartsHelpers, [{ - key: "drawYAxisTexts", - value: function drawYAxisTexts(x, y, i, text) { - var w = this.w; - var yaxisConfig = w.config.yaxis[0]; - var formatter = w.globals.yLabelFormatters[0]; - var graphics = new Graphics(this.ctx); - var yaxisLabel = graphics.drawText({ - x: x + yaxisConfig.labels.offsetX, - y: y + yaxisConfig.labels.offsetY, - text: formatter(text, i), - textAnchor: 'middle', - fontSize: yaxisConfig.labels.style.fontSize, - fontFamily: yaxisConfig.labels.style.fontFamily, - foreColor: Array.isArray(yaxisConfig.labels.style.colors) ? yaxisConfig.labels.style.colors[i] : yaxisConfig.labels.style.colors - }); - return yaxisLabel; - } - }]); - - return CircularChartsHelpers; - }(); - - /** - * ApexCharts Pie Class for drawing Pie / Donut Charts. - * @module Pie - **/ - - var Pie = /*#__PURE__*/function () { - function Pie(ctx) { - _classCallCheck(this, Pie); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animBeginArr = [0]; - this.animDur = 0; - this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels; - var w = this.w; - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.gridHeight : w.globals.gridWidth; - this.centerY = this.defaultSize / 2; - this.centerX = w.globals.gridWidth / 2; - this.fullAngle = 360; - w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0); - this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size, 10) / 100; - this.maxY = 0; - this.sliceLabels = []; - this.sliceSizes = []; - this.prevSectorAngleArr = []; // for dynamic animations - } - - _createClass(Pie, [{ - key: "draw", - value: function draw(series) { - var _this = this; - - var self = this; - var w = this.w; - var graphics = new Graphics(this.ctx); - this.ret = graphics.group({ - class: 'apexcharts-pie' - }); - if (w.globals.noData) return this.ret; - var total = 0; - - for (var k = 0; k < series.length; k++) { - // CALCULATE THE TOTAL - total += Utils.negToZero(series[k]); - } - - var sectorAngleArr = []; // el to which series will be drawn - - var elSeries = graphics.group(); // prevent division by zero error if there is no data - - if (total === 0) { - total = 0.00001; - } - - series.forEach(function (m) { - _this.maxY = Math.max(_this.maxY, m); - }); - - if (this.chartType === 'polarArea') { - this.drawPolarElements(); - } - - for (var i = 0; i < series.length; i++) { - // CALCULATE THE ANGLES - var angle = this.fullAngle * Utils.negToZero(series[i]) / total; - sectorAngleArr.push(angle); - - if (this.chartType === 'polarArea') { - sectorAngleArr[i] = this.fullAngle / series.length; - this.sliceSizes.push(w.globals.radialSize * series[i] / this.maxY); - } else { - this.sliceSizes.push(w.globals.radialSize); - } - } - - if (w.globals.dataChanged) { - var prevTotal = 0; - - for (var _k = 0; _k < w.globals.previousPaths.length; _k++) { - // CALCULATE THE PREV TOTAL - prevTotal += Utils.negToZero(w.globals.previousPaths[_k]); - } - - var previousAngle; - - for (var _i = 0; _i < w.globals.previousPaths.length; _i++) { - // CALCULATE THE PREVIOUS ANGLES - previousAngle = this.fullAngle * Utils.negToZero(w.globals.previousPaths[_i]) / prevTotal; - this.prevSectorAngleArr.push(previousAngle); - } - } // on small chart size after few count of resizes browser window donutSize can be negative - - - if (this.donutSize < 0) { - this.donutSize = 0; - } - - var scaleSize = w.config.plotOptions.pie.customScale; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW - w.globals.gridWidth / 2 * scaleSize; - var translateY = halfH - w.globals.gridHeight / 2 * scaleSize; - - if (this.chartType === 'donut') { - // draw the inner circle and add some text to it - var circle = graphics.drawCircle(this.donutSize); - circle.attr({ - cx: this.centerX, - cy: this.centerY, - fill: w.config.plotOptions.pie.donut.background ? w.config.plotOptions.pie.donut.background : 'transparent' - }); - elSeries.add(circle); - } - - var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end - - this.sliceLabels.forEach(function (s) { - elG.add(s); - }); - elSeries.attr({ - transform: "translate(".concat(translateX, ", ").concat(translateY, ") scale(").concat(scaleSize, ")") - }); - elSeries.add(elG); - this.ret.add(elSeries); - - if (this.donutDataLabels.show) { - var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, { - hollowSize: this.donutSize, - centerX: this.centerX, - centerY: this.centerY, - opacity: this.donutDataLabels.show, - translateX: translateX, - translateY: translateY - }); - this.ret.add(dataLabels); - } - - return this.ret; - } // core function for drawing pie arcs - - }, { - key: "drawArcs", - value: function drawArcs(sectorAngleArr, series) { - var w = this.w; - var filters = new Filters(this.ctx); - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var g = graphics.group({ - class: 'apexcharts-slices' - }); - var startAngle = 0; - var prevStartAngle = 0; - var endAngle = 0; - var prevEndAngle = 0; - this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; - - for (var i = 0; i < sectorAngleArr.length; i++) { - var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - g.add(elPieArc); - startAngle = endAngle; - prevStartAngle = prevEndAngle; - endAngle = startAngle + sectorAngleArr[i]; - prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i]; - var angle = endAngle - startAngle; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: this.sliceSizes[i], - value: series[i] - }); // additionaly, pass size for gradient drawing in the fillPath function - - var path = this.getChangedPath(prevStartAngle, prevEndAngle); - var elPath = graphics.drawPath({ - d: path, - stroke: this.lineColorArr instanceof Array ? this.lineColorArr[i] : this.lineColorArr, - strokeWidth: 0, - fill: pathFill, - fillOpacity: w.config.fill.opacity, - classes: "apexcharts-pie-area apexcharts-".concat(this.chartType.toLowerCase(), "-slice-").concat(i) - }); - elPath.attr({ - index: 0, - j: i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow, i); - } - - this.addListeners(elPath, this.donutDataLabels); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:startAngle': startAngle, - 'data:strokeWidth': this.strokeWidth, - 'data:value': series[i] - }); - var labelPosition = { - x: 0, - y: 0 - }; - - if (this.chartType === 'pie' || this.chartType === 'polarArea') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } else if (this.chartType === 'donut') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } - - elPieArc.add(elPath); // Animation code starts - - var dur = 0; - - if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / this.fullAngle * w.config.chart.animations.speed; - if (dur === 0) dur = 1; - this.animDur = dur + this.animDur; - this.animBeginArr.push(this.animDur); - } else { - this.animBeginArr.push(0); - } - - if (this.dynamicAnim && w.globals.dataChanged) { - this.animatePaths(elPath, { - size: this.sliceSizes[i], - endAngle: endAngle, - startAngle: startAngle, - prevStartAngle: prevStartAngle, - prevEndAngle: prevEndAngle, - animateStartingPos: true, - i: i, - animBeginArr: this.animBeginArr, - shouldSetPrevPaths: true, - dur: w.config.chart.animations.dynamicAnimation.speed - }); - } else { - this.animatePaths(elPath, { - size: this.sliceSizes[i], - endAngle: endAngle, - startAngle: startAngle, - i: i, - totalItems: sectorAngleArr.length - 1, - animBeginArr: this.animBeginArr, - dur: dur - }); - } // animation code ends - - - if (w.config.plotOptions.pie.expandOnClick && this.chartType !== 'polarArea') { - elPath.click(this.pieClicked.bind(this, i)); - } - - if (w.config.dataLabels.enabled) { - var xPos = labelPosition.x; - var yPos = labelPosition.y; - var text = 100 * (endAngle - startAngle) / 360 + '%'; - - if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { - var formatter = w.config.dataLabels.formatter; - - if (formatter !== undefined) { - text = formatter(w.globals.seriesPercent[i][0], { - seriesIndex: i, - w: w - }); - } - - var foreColor = w.globals.dataLabels.style.colors[i]; - var elPieLabel = graphics.drawText({ - x: xPos, - y: yPos, - text: text, - textAnchor: 'middle', - fontSize: w.config.dataLabels.style.fontSize, - fontFamily: w.config.dataLabels.style.fontFamily, - fontWeight: w.config.dataLabels.style.fontWeight, - foreColor: foreColor - }); - - if (w.config.dataLabels.dropShadow.enabled) { - var textShadow = w.config.dataLabels.dropShadow; - filters.dropShadow(elPieLabel, textShadow); - } - - elPieLabel.node.classList.add('apexcharts-pie-label'); - - if (w.config.chart.animations.animate && w.globals.resized === false) { - elPieLabel.node.classList.add('apexcharts-pie-label-delay'); - elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's'; - } - - this.sliceLabels.push(elPieLabel); - } - } - } - - return g; - } - }, { - key: "addListeners", - value: function addListeners(elPath, dataLabels) { - var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave - - elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath)); - elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath)); - elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath)); - - if (!this.donutDataLabels.total.showAlways) { - elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - } - } // This function can be used for other circle charts too - - }, { - key: "animatePaths", - value: function animatePaths(el, opts) { - var w = this.w; - var me = this; - var angle = opts.endAngle - opts.startAngle; - var prevAngle = angle; - var fromStartAngle = opts.startAngle; - var toStartAngle = opts.startAngle; - - if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) { - fromStartAngle = opts.prevEndAngle; - prevAngle = opts.prevEndAngle - opts.prevStartAngle; - } - - if (opts.i === w.config.series.length - 1) { - // some adjustments for the last overlapping paths - if (angle + toStartAngle > this.fullAngle) { - opts.endAngle = opts.endAngle - (angle + toStartAngle); - } else if (angle + toStartAngle < this.fullAngle) { - opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle)); - } - } - - if (angle === this.fullAngle) angle = this.fullAngle - 0.01; - me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts); - } - }, { - key: "animateArc", - value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) { - var me = this; - var w = this.w; - var animations = new Animations(this.ctx); - var size = opts.size; - var path; - - if (isNaN(fromStartAngle) || isNaN(prevAngle)) { - fromStartAngle = toStartAngle; - prevAngle = angle; - opts.dur = 0; - } - - var currAngle = angle; - var startAngle = toStartAngle; - var fromAngle = fromStartAngle - toStartAngle; - - if (w.globals.dataChanged && opts.shouldSetPrevPaths) { - // to avoid flicker when updating, set prev path first and then animate from there - if (opts.prevEndAngle) { - path = me.getPiePath({ - me: me, - startAngle: opts.prevStartAngle, - angle: opts.prevEndAngle - opts.prevStartAngle, - size: size - }); - el.attr({ - d: path - }); - } - } - - if (opts.dur !== 0) { - el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () { - if (me.chartType === 'pie' || me.chartType === 'donut' || me.chartType === 'polarArea') { - this.animate(w.config.chart.animations.dynamicAnimation.speed).attr({ - 'stroke-width': me.strokeWidth - }); - } - - if (opts.i === w.config.series.length - 1) { - animations.animationCompleted(el); - } - }).during(function (pos) { - currAngle = fromAngle + (angle - fromAngle) * pos; - - if (opts.animateStartingPos) { - currAngle = prevAngle + (angle - prevAngle) * pos; - startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos; - } - - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: currAngle, - size: size - }); - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - }); - } else { - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - - if (!opts.isTrack) { - w.globals.animationEnded = true; - } - - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path, - 'stroke-width': me.strokeWidth - }); - } - } - }, { - key: "pieClicked", - value: function pieClicked(i) { - var w = this.w; - var me = this; - var path; - var size = me.sliceSizes[i] + (w.config.plotOptions.pie.expandOnClick ? 4 : 0); - var elPath = w.globals.dom.Paper.select(".apexcharts-".concat(me.chartType.toLowerCase(), "-slice-").concat(i)).members[0]; - - if (elPath.attr('data:pieClicked') === 'true') { - elPath.attr({ - 'data:pieClicked': 'false' - }); - this.revertDataLabelsInner(elPath.node, this.donutDataLabels); - var origPath = elPath.attr('data:pathOrig'); - elPath.attr({ - d: origPath - }); - return; - } else { - // reset all elems - var allEls = w.globals.dom.baseEl.getElementsByClassName('apexcharts-pie-area'); - Array.prototype.forEach.call(allEls, function (pieSlice) { - pieSlice.setAttribute('data:pieClicked', 'false'); - var origPath = pieSlice.getAttribute('data:pathOrig'); - pieSlice.setAttribute('d', origPath); - }); - elPath.attr('data:pieClicked', 'true'); - } - - var startAngle = parseInt(elPath.attr('data:startAngle'), 10); - var angle = parseInt(elPath.attr('data:angle'), 10); - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - if (angle === 360) return; - elPath.plot(path); - } - }, { - key: "getChangedPath", - value: function getChangedPath(prevStartAngle, prevEndAngle) { - var path = ''; - - if (this.dynamicAnim && this.w.globals.dataChanged) { - path = this.getPiePath({ - me: this, - startAngle: prevStartAngle, - angle: prevEndAngle - prevStartAngle, - size: this.size - }); - } - - return path; - } - }, { - key: "getPiePath", - value: function getPiePath(_ref) { - var me = _ref.me, - startAngle = _ref.startAngle, - angle = _ref.angle, - size = _ref.size; - var path; - var startDeg = startAngle; - var startRadians = Math.PI * (startDeg - 90) / 180; - var endDeg = angle + startAngle; - if (Math.ceil(endDeg) >= 360) endDeg = 359.99; - var endRadians = Math.PI * (endDeg - 90) / 180; - var x1 = me.centerX + size * Math.cos(startRadians); - var y1 = me.centerY + size * Math.sin(startRadians); - var x2 = me.centerX + size * Math.cos(endRadians); - var y2 = me.centerY + size * Math.sin(endRadians); - var startInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg); - var endInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg); - var largeArc = angle > 180 ? 1 : 0; - var pathBeginning = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2]; - - if (me.chartType === 'donut') { - path = [].concat(pathBeginning, ['L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z']).join(' '); - } else if (me.chartType === 'pie' || me.chartType === 'polarArea') { - path = [].concat(pathBeginning, ['L', me.centerX, me.centerY, 'L', x1, y1]).join(' '); - } else { - path = [].concat(pathBeginning).join(' '); - } - - return path; - } - }, { - key: "drawPolarElements", - value: function drawPolarElements() { - var w = this.w; - var scale = new Range(this.ctx); - var graphics = new Graphics(this.ctx); - var helpers = new CircularChartsHelpers(this.ctx); - var gCircles = graphics.group(); - var gYAxis = graphics.group(); - var noMinMaxProvided = w.config.yaxis[0].max === undefined && w.config.yaxis[0].min === undefined; - var yScale = scale.niceScale(0, Math.ceil(this.maxY), w.config.yaxis[0].tickAmount, 0, noMinMaxProvided); - var yTexts = yScale.result.reverse(); - var len = yScale.result.length; - this.maxY = yScale.niceMax; - var circleSize = w.globals.radialSize; - var diff = circleSize / (len - 1); - - for (var i = 0; i < len - 1; i++) { - var circle = graphics.drawCircle(circleSize); - circle.attr({ - cx: this.centerX, - cy: this.centerY, - fill: 'none', - 'stroke-width': w.config.plotOptions.polarArea.rings.strokeWidth, - stroke: w.config.plotOptions.polarArea.rings.strokeColor - }); - - if (w.config.yaxis[0].show) { - var yLabel = helpers.drawYAxisTexts(this.centerX, this.centerY - circleSize + parseInt(w.config.yaxis[0].labels.style.fontSize, 10) / 2, i, yTexts[i]); - gYAxis.add(yLabel); - } - - gCircles.add(circle); - circleSize = circleSize - diff; - } - - this.ret.add(gCircles); - this.ret.add(gYAxis); - } - }, { - key: "renderInnerDataLabels", - value: function renderInnerDataLabels(dataLabelsConfig, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group({ - class: 'apexcharts-datalabels-group', - transform: "translate(".concat(opts.translateX ? opts.translateX : 0, ", ").concat(opts.translateY ? opts.translateY : 0, ") scale(").concat(w.config.plotOptions.pie.customScale, ")") - }); - var showTotal = dataLabelsConfig.total.show; - g.node.style.opacity = opts.opacity; - var x = opts.centerX; - var y = opts.centerY; - var labelColor, valueColor; - - if (dataLabelsConfig.name.color === undefined) { - labelColor = w.globals.colors[0]; - } else { - labelColor = dataLabelsConfig.name.color; - } - - var labelFontSize = dataLabelsConfig.name.fontSize; - var labelFontFamily = dataLabelsConfig.name.fontFamily; - var labelFontWeight = dataLabelsConfig.value.fontWeight; - - if (dataLabelsConfig.value.color === undefined) { - valueColor = w.config.chart.foreColor; - } else { - valueColor = dataLabelsConfig.value.color; - } - - var lbFormatter = dataLabelsConfig.value.formatter; - var val = ''; - var name = ''; - - if (showTotal) { - labelColor = dataLabelsConfig.total.color; - labelFontSize = dataLabelsConfig.total.fontSize; - labelFontFamily = dataLabelsConfig.total.fontFamily; - labelFontWeight = dataLabelsConfig.total.fontWeight; - name = dataLabelsConfig.total.label; - val = dataLabelsConfig.total.formatter(w); - } else { - if (w.globals.series.length === 1) { - val = lbFormatter(w.globals.series[0], w); - name = w.globals.seriesNames[0]; - } - } - - if (name) { - name = dataLabelsConfig.name.formatter(name, dataLabelsConfig.total.show, w); - } - - if (dataLabelsConfig.name.show) { - var elLabel = graphics.drawText({ - x: x, - y: y + parseFloat(dataLabelsConfig.name.offsetY), - text: name, - textAnchor: 'middle', - foreColor: labelColor, - fontSize: labelFontSize, - fontWeight: labelFontWeight, - fontFamily: labelFontFamily - }); - elLabel.node.classList.add('apexcharts-datalabel-label'); - g.add(elLabel); - } - - if (dataLabelsConfig.value.show) { - var valOffset = dataLabelsConfig.name.show ? parseFloat(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY; - var elValue = graphics.drawText({ - x: x, - y: y + valOffset, - text: val, - textAnchor: 'middle', - foreColor: valueColor, - fontWeight: dataLabelsConfig.value.fontWeight, - fontSize: dataLabelsConfig.value.fontSize, - fontFamily: dataLabelsConfig.value.fontFamily - }); - elValue.node.classList.add('apexcharts-datalabel-value'); - g.add(elValue); - } // for a multi-series circle chart, we need to show total value instead of first series labels - - - return g; - } - /** - * - * @param {string} name - The name of the series - * @param {string} val - The value of that series - * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total - */ - - }, { - key: "printInnerLabels", - value: function printInnerLabels(labelsConfig, name, val, el) { - var w = this.w; - var labelColor; - - if (el) { - if (labelsConfig.name.color === undefined) { - labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel'), 10) - 1]; - } else { - labelColor = labelsConfig.name.color; - } - } else { - if (w.globals.series.length > 1 && labelsConfig.total.show) { - labelColor = labelsConfig.total.color; - } - } - - var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label'); - var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value'); - var lbFormatter = labelsConfig.value.formatter; - val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it - - if (!el && typeof labelsConfig.total.formatter === 'function') { - val = labelsConfig.total.formatter(w); - } - - var isTotal = name === labelsConfig.total.label; - name = labelsConfig.name.formatter(name, isTotal, w); - - if (elLabel !== null) { - elLabel.textContent = name; - } - - if (elValue !== null) { - elValue.textContent = val; - } - - if (elLabel !== null) { - elLabel.style.fill = labelColor; - } - } - }, { - key: "printDataLabelsInner", - value: function printDataLabelsInner(el, dataLabelsConfig) { - var w = this.w; - var val = el.getAttribute('data:value'); - var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel'), 10) - 1]; - - if (w.globals.series.length > 1) { - this.printInnerLabels(dataLabelsConfig, name, val, el); - } - - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsGroup !== null) { - dataLabelsGroup.style.opacity = 1; - } - } - }, { - key: "revertDataLabelsInner", - value: function revertDataLabelsInner(elem, dataLabelsConfig, event) { - var _this2 = this; - - var w = this.w; - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - var sliceOut = false; - var slices = w.globals.dom.baseEl.getElementsByClassName("apexcharts-pie-area"); - - var selectSlice = function selectSlice(_ref2) { - var makeSliceOut = _ref2.makeSliceOut, - printLabel = _ref2.printLabel; - Array.prototype.forEach.call(slices, function (s) { - if (s.getAttribute('data:pieClicked') === 'true') { - if (makeSliceOut) { - sliceOut = true; - } - - if (printLabel) { - _this2.printDataLabelsInner(s, dataLabelsConfig); - } - } - }); - }; - - selectSlice({ - makeSliceOut: true, - printLabel: false - }); - - if (dataLabelsConfig.total.show && w.globals.series.length > 1) { - if (sliceOut && !dataLabelsConfig.total.showAlways) { - selectSlice({ - makeSliceOut: false, - printLabel: true - }); - } else { - this.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); - } - } else { - selectSlice({ - makeSliceOut: false, - printLabel: true - }); - - if (!sliceOut) { - if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; - var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(this.chartType.toLowerCase(), "-slice-").concat(index)); - this.printDataLabelsInner(el, dataLabelsConfig); - } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { - dataLabelsGroup.style.opacity = 0; - } - } else { - if (dataLabelsGroup && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; - } - } - } - } - } - }]); - - return Pie; - }(); - - /** - * ApexCharts Radar Class for Spider/Radar Charts. - * @module Radar - **/ - - var Radar = /*#__PURE__*/function () { - function Radar(ctx) { - _classCallCheck(this, Radar); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animDur = 0; - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.gridHeight + w.globals.goldenPadding * 1.5 : w.globals.gridWidth; - this.maxValue = this.w.globals.maxY; - this.minValue = this.w.globals.minY; - this.polygons = w.config.plotOptions.radar.polygons; - var longestXaxisLabel = w.globals.labels.slice().sort(function (a, b) { - return b.length - a.length; - })[0]; - var labelWidth = this.graphics.getTextRects(longestXaxisLabel, w.config.xaxis.labels.style.fontSize); - this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; - this.size = this.defaultSize / 2.1 - this.strokeWidth - w.config.chart.dropShadow.blur; - - if (w.config.xaxis.labels.show) { - this.size = this.size - labelWidth.width / 1.75; - } - - if (w.config.plotOptions.radar.size !== undefined) { - this.size = w.config.plotOptions.radar.size; - } - - this.dataRadiusOfPercent = []; - this.dataRadius = []; - this.angleArr = []; - this.yaxisLabelsTextsPos = []; - } - - _createClass(Radar, [{ - key: "draw", - value: function draw(series) { - var _this = this; - - var w = this.w; - var fill = new Fill(this.ctx); - var allSeries = []; - var dataLabels = new DataLabels(this.ctx); - - if (series.length) { - this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length; - } - - this.disAngle = Math.PI * 2 / this.dataPointsLen; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW + w.config.plotOptions.radar.offsetX; - var translateY = halfH + w.config.plotOptions.radar.offsetY; - var ret = this.graphics.group({ - class: 'apexcharts-radar-series apexcharts-plot-series', - transform: "translate(".concat(translateX || 0, ", ").concat(translateY || 0, ")") - }); - var dataPointsPos = []; - var elPointsMain = null; - var elDataPointsMain = null; - this.yaxisLabels = this.graphics.group({ - class: 'apexcharts-yaxis' - }); - series.forEach(function (s, i) { - var longestSeries = s.length === w.globals.dataPoints; // el to which series will be drawn - - var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series", - 'data:longestSeries': longestSeries, - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - _this.dataRadiusOfPercent[i] = []; - _this.dataRadius[i] = []; - _this.angleArr[i] = []; - s.forEach(function (dv, j) { - var range = Math.abs(_this.maxValue - _this.minValue); - dv = dv + Math.abs(_this.minValue); - _this.dataRadiusOfPercent[i][j] = dv / range; - _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size; - _this.angleArr[i][j] = j * _this.disAngle; - }); - dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]); - - var paths = _this.createPaths(dataPointsPos, { - x: 0, - y: 0 - }); // points - - - elPointsMain = _this.graphics.group({ - class: 'apexcharts-series-markers-wrap apexcharts-element-hidden' - }); // datapoints - - elDataPointsMain = _this.graphics.group({ - class: "apexcharts-datalabels", - 'data:realIndex': i - }); - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: i - }); - var defaultRenderedPathOptions = { - i: i, - realIndex: i, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-radar", - shouldClipToGrid: false, - bindEventsOnPaths: false, - stroke: w.globals.stroke.colors[i], - strokeLineCap: w.config.stroke.lineCap - }; - var pathFrom = null; - - if (w.globals.previousPaths.length > 0) { - pathFrom = _this.getPreviousPath(i); - } - - for (var p = 0; p < paths.linePathsTo.length; p++) { - var renderedLinePath = _this.graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, - pathTo: paths.linePathsTo[p], - strokeWidth: Array.isArray(_this.strokeWidth) ? _this.strokeWidth[i] : _this.strokeWidth, - fill: 'none', - drawShadow: false - })); - - elSeries.add(renderedLinePath); - var pathFill = fill.fillPath({ - seriesNumber: i - }); - - var renderedAreaPath = _this.graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, - pathTo: paths.areaPathsTo[p], - strokeWidth: 0, - fill: pathFill, - drawShadow: false - })); - - if (w.config.chart.dropShadow.enabled) { - var filters = new Filters(_this.ctx); - var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { - noUserSpaceOnUse: true - }), i); - } - - elSeries.add(renderedAreaPath); - } - - s.forEach(function (sj, j) { - var markers = new Markers(_this.ctx); - var opts = markers.getMarkerConfig('apexcharts-marker', i, j); - - var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts); - - point.attr('rel', j); - point.attr('j', j); - point.attr('index', i); - point.node.setAttribute('default-marker-size', opts.pSize); - - var elPointsWrap = _this.graphics.group({ - class: 'apexcharts-series-markers' - }); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - - elPointsMain.add(elPointsWrap); - elSeries.add(elPointsMain); - var dataLabelsConfig = w.config.dataLabels; - - if (dataLabelsConfig.enabled) { - var text = dataLabelsConfig.formatter(w.globals.series[i][j], { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - dataLabels.plotDataLabelsText({ - x: dataPointsPos[j].x, - y: dataPointsPos[j].y, - text: text, - textAnchor: 'middle', - i: i, - j: i, - parent: elDataPointsMain, - offsetCorrection: false, - dataLabelsConfig: _objectSpread2({}, dataLabelsConfig) - }); - } - - elSeries.add(elDataPointsMain); - }); - allSeries.push(elSeries); - }); - this.drawPolygons({ - parent: ret - }); - - if (w.config.xaxis.labels.show) { - var xaxisTexts = this.drawXAxisTexts(); - ret.add(xaxisTexts); - } - - ret.add(this.yaxisLabels); - allSeries.forEach(function (elS) { - ret.add(elS); - }); - return ret; - } - }, { - key: "drawPolygons", - value: function drawPolygons(opts) { - var _this2 = this; - - var w = this.w; - var parent = opts.parent; - var helpers = new CircularChartsHelpers(this.ctx); - var yaxisTexts = w.globals.yAxisScale[0].result.reverse(); - var layers = yaxisTexts.length; - var radiusSizes = []; - var layerDis = this.size / (layers - 1); - - for (var i = 0; i < layers; i++) { - radiusSizes[i] = layerDis * i; - } - - radiusSizes.reverse(); - var polygonStrings = []; - var lines = []; - radiusSizes.forEach(function (radiusSize, r) { - var polygon = _this2.getPolygonPos(radiusSize); - - var string = ''; - polygon.forEach(function (p, i) { - if (r === 0) { - var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors); - - lines.push(line); - } - - if (i === 0) { - _this2.yaxisLabelsTextsPos.push({ - x: p.x, - y: p.y - }); - } - - string += p.x + ',' + p.y + ' '; - }); - polygonStrings.push(string); - }); - polygonStrings.forEach(function (p, i) { - var strokeColors = _this2.polygons.strokeColors; - var strokeWidth = _this2.polygons.strokeWidth; - - var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, Array.isArray(strokeWidth) ? strokeWidth[i] : strokeWidth, w.globals.radarPolygons.fill.colors[i]); - - parent.add(polygon); - }); - lines.forEach(function (l) { - parent.add(l); - }); - - if (w.config.yaxis[0].show) { - this.yaxisLabelsTextsPos.forEach(function (p, i) { - var yText = helpers.drawYAxisTexts(p.x, p.y, i, yaxisTexts[i]); - - _this2.yaxisLabels.add(yText); - }); - } - } - }, { - key: "drawXAxisTexts", - value: function drawXAxisTexts() { - var _this3 = this; - - var w = this.w; - var xaxisLabelsConfig = w.config.xaxis.labels; - var elXAxisWrap = this.graphics.group({ - class: 'apexcharts-xaxis' - }); - var polygonPos = this.getPolygonPos(this.size); - w.globals.labels.forEach(function (label, i) { - var formatter = w.config.xaxis.labels.formatter; - var dataLabels = new DataLabels(_this3.ctx); - - if (polygonPos[i]) { - var textPos = _this3.getTextPos(polygonPos[i], _this3.size); - - var text = formatter(label, { - seriesIndex: -1, - dataPointIndex: i, - w: w - }); - dataLabels.plotDataLabelsText({ - x: textPos.newX, - y: textPos.newY, - text: text, - textAnchor: textPos.textAnchor, - i: i, - j: i, - parent: elXAxisWrap, - color: xaxisLabelsConfig.style.colors[i] ? xaxisLabelsConfig.style.colors[i] : '#a8a8a8', - dataLabelsConfig: _objectSpread2({ - textAnchor: textPos.textAnchor, - dropShadow: { - enabled: false - } - }, xaxisLabelsConfig), - offsetCorrection: false - }); - } - }); - return elXAxisWrap; - } - }, { - key: "createPaths", - value: function createPaths(pos, origin) { - var _this4 = this; - - var linePathsTo = []; - var linePathsFrom = []; - var areaPathsTo = []; - var areaPathsFrom = []; - - if (pos.length) { - linePathsFrom = [this.graphics.move(origin.x, origin.y)]; - areaPathsFrom = [this.graphics.move(origin.x, origin.y)]; - var linePathTo = this.graphics.move(pos[0].x, pos[0].y); - var areaPathTo = this.graphics.move(pos[0].x, pos[0].y); - pos.forEach(function (p, i) { - linePathTo += _this4.graphics.line(p.x, p.y); - areaPathTo += _this4.graphics.line(p.x, p.y); - - if (i === pos.length - 1) { - linePathTo += 'Z'; - areaPathTo += 'Z'; - } - }); - linePathsTo.push(linePathTo); - areaPathsTo.push(areaPathTo); - } - - return { - linePathsFrom: linePathsFrom, - linePathsTo: linePathsTo, - areaPathsFrom: areaPathsFrom, - areaPathsTo: areaPathsTo - }; - } - }, { - key: "getTextPos", - value: function getTextPos(pos, polygonSize) { - var limit = 10; - var textAnchor = 'middle'; - var newX = pos.x; - var newY = pos.y; - - if (Math.abs(pos.x) >= limit) { - if (pos.x > 0) { - textAnchor = 'start'; - newX += 10; - } else if (pos.x < 0) { - textAnchor = 'end'; - newX -= 10; - } - } else { - textAnchor = 'middle'; - } - - if (Math.abs(pos.y) >= polygonSize - limit) { - if (pos.y < 0) { - newY -= 10; - } else if (pos.y > 0) { - newY += 10; - } - } - - return { - textAnchor: textAnchor, - newX: newX, - newY: newY - }; - } - }, { - key: "getPreviousPath", - value: function getPreviousPath(realIndex) { - var w = this.w; - var pathFrom = null; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) { - if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[0].d; - } - } - } - - return pathFrom; - } - }, { - key: "getDataPointsPos", - value: function getDataPointsPos(dataRadiusArr, angleArr) { - var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen; - dataRadiusArr = dataRadiusArr || []; - angleArr = angleArr || []; - var dataPointsPosArray = []; - - for (var j = 0; j < dataPointsLen; j++) { - var curPointPos = {}; - curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]); - curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]); - dataPointsPosArray.push(curPointPos); - } - - return dataPointsPosArray; - } - }, { - key: "getPolygonPos", - value: function getPolygonPos(size) { - var dotsArray = []; - var angle = Math.PI * 2 / this.dataPointsLen; - - for (var i = 0; i < this.dataPointsLen; i++) { - var curPos = {}; - curPos.x = size * Math.sin(i * angle); - curPos.y = -size * Math.cos(i * angle); - dotsArray.push(curPos); - } - - return dotsArray; - } - }]); - - return Radar; - }(); - - /** - * ApexCharts Radial Class for drawing Circle / Semi Circle Charts. - * @module Radial - **/ - - var Radial = /*#__PURE__*/function (_Pie) { - _inherits(Radial, _Pie); - - function Radial(ctx) { - var _this; - - _classCallCheck(this, Radial); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(Radial).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.animBeginArr = [0]; - _this.animDur = 0; - var w = _this.w; - _this.startAngle = w.config.plotOptions.radialBar.startAngle; - _this.endAngle = w.config.plotOptions.radialBar.endAngle; - _this.totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle); - _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle; - _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle; - _this.radialDataLabels = w.config.plotOptions.radialBar.dataLabels; - if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle; - if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle; - if (_this.endAngle === 360) _this.endAngle = 359.99; - _this.fullAngle = 360 - w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle; - _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin, 10); - return _this; - } - - _createClass(Radial, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-radialbar' - }); - if (w.globals.noData) return ret; - var elSeries = graphics.group(); - var centerY = this.defaultSize / 2; - var centerX = w.globals.gridWidth / 2; - var size = this.defaultSize / 2.05; - - if (!w.config.chart.sparkline.enabled) { - size = size - w.config.stroke.width - w.config.chart.dropShadow.blur; - } - - var colorArr = w.globals.fill.colors; - - if (w.config.plotOptions.radialBar.track.show) { - var elTracks = this.drawTracks({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elTracks); - } - - var elG = this.drawArcs({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - var totalAngle = 360; - - if (w.config.plotOptions.radialBar.startAngle < 0) { - totalAngle = this.totalAngle; - } - - var angleRatio = (360 - totalAngle) / 360; - w.globals.radialSize = size - size * angleRatio; - - if (this.radialDataLabels.value.show) { - var offset = Math.max(this.radialDataLabels.value.offsetY, this.radialDataLabels.name.offsetY); - w.globals.radialSize += offset * angleRatio; - } - - elSeries.add(elG.g); - - if (w.config.plotOptions.radialBar.hollow.position === 'front') { - elG.g.add(elG.elHollow); - - if (elG.dataLabels) { - elG.g.add(elG.dataLabels); - } - } - - ret.add(elSeries); - return ret; - } - }, { - key: "drawTracks", - value: function drawTracks(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group({ - class: 'apexcharts-tracks' - }); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - - for (var i = 0; i < opts.series.length; i++) { - var elRadialBarTrack = graphics.group({ - class: 'apexcharts-radialbar-track apexcharts-track' - }); - g.add(elRadialBarTrack); - elRadialBarTrack.attr({ - rel: i + 1 - }); - opts.size = opts.size - strokeWidth - this.margin; - var trackConfig = w.config.plotOptions.radialBar.track; - var pathFill = fill.fillPath({ - seriesNumber: 0, - size: opts.size, - fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background, - solid: true - }); - var startAngle = this.trackStartAngle; - var endAngle = this.trackEndAngle; - if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth, 10) / 100, - fill: 'none', - strokeOpacity: trackConfig.opacity, - classes: 'apexcharts-radialbar-area' - }); - - if (trackConfig.dropShadow.enabled) { - var shadow = trackConfig.dropShadow; - filters.dropShadow(elPath, shadow); - } - - elRadialBarTrack.add(elPath); - elPath.attr('id', 'apexcharts-radialbarTrack-' + i); - this.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: 0, - dur: 0, - isTrack: true, - easing: w.globals.easing - }); - } - - return g; - } - }, { - key: "drawArcs", - value: function drawArcs(opts) { - var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series - - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var filters = new Filters(this.ctx); - var g = graphics.group(); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - var hollowFillID = w.config.plotOptions.radialBar.hollow.background; - var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2; - var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin; - - if (w.config.plotOptions.radialBar.hollow.image !== undefined) { - hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID); - } - - var elHollow = this.drawHollow({ - size: hollowRadius, - centerX: opts.centerX, - centerY: opts.centerY, - fill: hollowFillID ? hollowFillID : 'transparent' - }); - - if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) { - var shadow = w.config.plotOptions.radialBar.hollow.dropShadow; - filters.dropShadow(elHollow, shadow); - } - - var shown = 1; - - if (!this.radialDataLabels.total.show && w.globals.series.length > 1) { - shown = 0; - } - - var dataLabels = null; - - if (this.radialDataLabels.show) { - dataLabels = this.renderInnerDataLabels(this.radialDataLabels, { - hollowSize: hollowSize, - centerX: opts.centerX, - centerY: opts.centerY, - opacity: shown - }); - } - - if (w.config.plotOptions.radialBar.hollow.position === 'back') { - g.add(elHollow); - - if (dataLabels) { - g.add(dataLabels); - } - } - - var reverseLoop = false; - - if (w.config.plotOptions.radialBar.inverseOrder) { - reverseLoop = true; - } - - for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { - var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]) - }); - g.add(elRadialBarArc); - elRadialBarArc.attr({ - rel: i + 1, - 'data:realIndex': i - }); - this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i); - opts.size = opts.size - strokeWidth - this.margin; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: opts.size, - value: opts.series[i] - }); - var startAngle = this.startAngle; - var prevStartAngle = void 0; // if data exceeds 100, make it 100 - - var dataValue = Utils.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100; - var endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle; - var prevEndAngle = void 0; - - if (w.globals.dataChanged) { - prevStartAngle = this.startAngle; - prevEndAngle = Math.round(this.totalAngle * Utils.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle; - } - - var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle); - - if (currFullAngle >= 360) { - endAngle = endAngle - 0.01; - } - - var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle); - - if (prevFullAngle >= 360) { - prevEndAngle = prevEndAngle - 0.01; - } - - var angle = endAngle - startAngle; - var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth, - fill: 'none', - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-radialbar-area apexcharts-radialbar-slice-' + i, - strokeDashArray: dashArray - }); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:value': opts.series[i] - }); - - if (w.config.chart.dropShadow.enabled) { - var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow, i); - } - - this.addListeners(elPath, this.radialDataLabels); - elRadialBarArc.add(elPath); - elPath.attr({ - index: 0, - j: i - }); - var dur = 0; - - if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - if (w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.dynamicAnimation.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - this.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - prevEndAngle: prevEndAngle, - prevStartAngle: prevStartAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: this.animBeginArr, - dur: dur, - shouldSetPrevPaths: true, - easing: w.globals.easing - }); - } - - return { - g: g, - elHollow: elHollow, - dataLabels: dataLabels - }; - } - }, { - key: "drawHollow", - value: function drawHollow(opts) { - var graphics = new Graphics(this.ctx); - var circle = graphics.drawCircle(opts.size * 2); - circle.attr({ - class: 'apexcharts-radialbar-hollow', - cx: opts.centerX, - cy: opts.centerY, - r: opts.size, - fill: opts.fill - }); - return circle; - } - }, { - key: "drawHollowImage", - value: function drawHollowImage(opts, g, hollowSize, hollowFillID) { - var w = this.w; - var fill = new Fill(this.ctx); - var randID = Utils.randomId(); - var hollowFillImg = w.config.plotOptions.radialBar.hollow.image; - - if (w.config.plotOptions.radialBar.hollow.imageClipped) { - fill.clippedImgArea({ - width: hollowSize, - height: hollowSize, - image: hollowFillImg, - patternID: "pattern".concat(w.globals.cuid).concat(randID) - }); - hollowFillID = "url(#pattern".concat(w.globals.cuid).concat(randID, ")"); - } else { - var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth; - var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight; - - if (imgWidth === undefined && imgHeight === undefined) { - var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - }); - g.add(image); - } else { - var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - this.size(imgWidth, imgHeight); - }); - - g.add(_image); - } - } - - return hollowFillID; - } - }, { - key: "getStrokeWidth", - value: function getStrokeWidth(opts) { - var w = this.w; - return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin; - } - }]); - - return Radial; - }(Pie); - - var Helpers$4 = /*#__PURE__*/function () { - function Helpers(lineCtx) { - _classCallCheck(this, Helpers); - - this.w = lineCtx.w; - this.lineCtx = lineCtx; - } - - _createClass(Helpers, [{ - key: "sameValueSeriesFix", - value: function sameValueSeriesFix(i, series) { - var w = this.w; - - if (w.config.chart.type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { - var coreUtils = new CoreUtils(this.lineCtx.ctx, w); // a small adjustment to allow gradient line to draw correctly for all same values - - /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ - - if (coreUtils.seriesHaveSameValues(i)) { - var gSeries = series[i].slice(); - gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; - series[i] = gSeries; - } - } - - return series; - } - }, { - key: "calculatePoints", - value: function calculatePoints(_ref) { - var series = _ref.series, - realIndex = _ref.realIndex, - x = _ref.x, - y = _ref.y, - i = _ref.i, - j = _ref.j, - prevY = _ref.prevY; - var w = this.w; - var ptX = []; - var ptY = []; - - if (j === 0) { - var xPT1st = this.lineCtx.categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series - // we need to check whether it's not a time series, because a time series may - // start from the middle of the x axis - - if (w.globals.isXNumeric) { - xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / this.lineCtx.xRatio + w.config.markers.offsetX; - } // push 2 points for the first data values - - - ptX.push(xPT1st); - ptY.push(Utils.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null); - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } else { - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } - - var pointsPos = { - x: ptX, - y: ptY - }; - return pointsPos; - } - }, { - key: "checkPreviousPaths", - value: function checkPreviousPaths(_ref2) { - var pathFromLine = _ref2.pathFromLine, - pathFromArea = _ref2.pathFromArea, - realIndex = _ref2.realIndex; - var w = this.w; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) { - if (gpp.type === 'line') { - this.lineCtx.appendPathFrom = false; - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - } else if (gpp.type === 'area') { - this.lineCtx.appendPathFrom = false; - pathFromArea = w.globals.previousPaths[pp].paths[0].d; - - if (w.config.stroke.show && w.globals.previousPaths[pp].paths[1]) { - pathFromLine = w.globals.previousPaths[pp].paths[1].d; - } - } - } - } - - return { - pathFromLine: pathFromLine, - pathFromArea: pathFromArea - }; - } - }, { - key: "determineFirstPrevY", - value: function determineFirstPrevY(_ref3) { - var i = _ref3.i, - series = _ref3.series, - prevY = _ref3.prevY, - lineYPosition = _ref3.lineYPosition; - var w = this.w; - - if (typeof series[i][0] !== 'undefined') { - if (w.config.chart.stacked) { - if (i > 0) { - // 1st y value of previous series - lineYPosition = this.lineCtx.prevSeriesY[i - 1][0]; - } else { - // the first series will not have prevY values - lineYPosition = this.lineCtx.zeroY; - } - } else { - lineYPosition = this.lineCtx.zeroY; - } - - prevY = lineYPosition - series[i][0] / this.lineCtx.yRatio[this.lineCtx.yaxisIndex] + (this.lineCtx.isReversed ? series[i][0] / this.lineCtx.yRatio[this.lineCtx.yaxisIndex] : 0) * 2; - } else { - // the first value in the current series is null - if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') { - // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses) - for (var s = i - 1; s >= 0; s--) { - // for loop to get to 1st previous value until we get it - if (series[s][0] !== null && typeof series[s][0] !== 'undefined') { - lineYPosition = this.lineCtx.prevSeriesY[s][0]; - prevY = lineYPosition; - break; - } - } - } - } - - return { - prevY: prevY, - lineYPosition: lineYPosition - }; - } - }]); - - return Helpers; - }(); - - /** - * ApexCharts Line Class responsible for drawing Line / Area Charts. - * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions - * @module Line - **/ - - var Line = /*#__PURE__*/function () { - function Line(ctx, xyRatios, isPointsChart) { - _classCallCheck(this, Line); - - this.ctx = ctx; - this.w = ctx.w; - this.xyRatios = xyRatios; - this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart; - this.scatter = new Scatter(this.ctx); - this.noNegatives = this.w.globals.minX === Number.MAX_VALUE; - this.lineHelpers = new Helpers$4(this); - this.markers = new Markers(this.ctx); - this.prevSeriesY = []; - this.categoryAxisCorrection = 0; - this.yaxisIndex = 0; - } - - _createClass(Line, [{ - key: "draw", - value: function draw(series, ptype, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var type = w.globals.comboCharts ? ptype : w.config.chart.type; - var ret = graphics.group({ - class: "apexcharts-".concat(type, "-series apexcharts-plot-series") - }); - var coreUtils = new CoreUtils(this.ctx, w); - this.yRatio = this.xyRatios.yRatio; - this.zRatio = this.xyRatios.zRatio; - this.xRatio = this.xyRatios.xRatio; - this.baseLineY = this.xyRatios.baseLineY; - series = coreUtils.getLogSeries(series); - this.yRatio = coreUtils.getLogYRatios(this.yRatio); // push all series in an array, so we can draw in reverse order (for stacked charts) - - var allSeries = []; - - for (var i = 0; i < series.length; i++) { - series = this.lineHelpers.sameValueSeriesFix(i, series); - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - this._initSerieVariables(series, i, realIndex); - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var x = w.globals.padHorizontal + this.categoryAxisCorrection; - var y = 1; - var linePaths = []; - var areaPaths = []; - this.ctx.series.addCollapsedClassToSeries(this.elSeries, realIndex); - - if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { - x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / this.xRatio; - } - - xArrj.push(x); - var pX = x; - var pY = void 0; - var prevX = pX; - var prevY = this.zeroY; - var lineYPosition = 0; // the first value in the current series is not null or undefined - - var firstPrevY = this.lineHelpers.determineFirstPrevY({ - i: i, - series: series, - prevY: prevY, - lineYPosition: lineYPosition - }); - prevY = firstPrevY.prevY; - yArrj.push(prevY); - pY = prevY; - - var pathsFrom = this._calculatePathsFrom({ - series: series, - i: i, - realIndex: realIndex, - prevX: prevX, - prevY: prevY - }); - - var paths = this._iterateOverDataPoints({ - series: series, - realIndex: realIndex, - i: i, - x: x, - y: y, - pX: pX, - pY: pY, - pathsFrom: pathsFrom, - linePaths: linePaths, - areaPaths: areaPaths, - seriesIndex: seriesIndex, - lineYPosition: lineYPosition, - xArrj: xArrj, - yArrj: yArrj - }); - - this._handlePaths({ - type: type, - realIndex: realIndex, - i: i, - paths: paths - }); - - this.elSeries.add(this.elPointsMain); - this.elSeries.add(this.elDataLabelsWrap); - allSeries.push(this.elSeries); - } - - for (var s = allSeries.length; s > 0; s--) { - ret.add(allSeries[s - 1]); - } - - return ret; - } - }, { - key: "_initSerieVariables", - value: function _initSerieVariables(series, i, realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); // width divided into equal parts - - this.xDivision = w.globals.gridWidth / (w.globals.dataPoints - (w.config.xaxis.tickPlacement === 'on' ? 1 : 0)); - this.strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // zeroY is the 0 value in y series which can be used in negative charts - - this.zeroY = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); - this.areaBottomY = this.zeroY; - - if (this.zeroY > w.globals.gridHeight) { - this.areaBottomY = w.globals.gridHeight; - } - - this.categoryAxisCorrection = this.xDivision / 2; // el to which series will be drawn - - this.elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) - }); // points - - this.elPointsMain = graphics.group({ - class: 'apexcharts-series-markers-wrap', - 'data:realIndex': realIndex - }); // eldatalabels - - this.elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels', - 'data:realIndex': realIndex - }); - var longestSeries = series[i].length === w.globals.dataPoints; - this.elSeries.attr({ - 'data:longestSeries': longestSeries, - rel: i + 1, - 'data:realIndex': realIndex - }); - this.appendPathFrom = true; - } - }, { - key: "_calculatePathsFrom", - value: function _calculatePathsFrom(_ref) { - var series = _ref.series, - i = _ref.i, - realIndex = _ref.realIndex, - prevX = _ref.prevX, - prevY = _ref.prevY; - var w = this.w; - var graphics = new Graphics(this.ctx); - var linePath, areaPath, pathFromLine, pathFromArea; - - if (series[i][0] === null) { - // when the first value itself is null, we need to move the pointer to a location where a null value is not found - for (var s = 0; s < series[i].length; s++) { - if (series[i][s] !== null) { - prevX = this.xDivision * s; - prevY = this.zeroY - series[i][s] / this.yRatio[this.yaxisIndex]; - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, this.areaBottomY); - break; - } - } - } else { - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, this.areaBottomY) + graphics.line(prevX, prevY); - } - - pathFromLine = graphics.move(-1, this.zeroY) + graphics.line(-1, this.zeroY); - pathFromArea = graphics.move(-1, this.zeroY) + graphics.line(-1, this.zeroY); - - if (w.globals.previousPaths.length > 0) { - var pathFrom = this.lineHelpers.checkPreviousPaths({ - pathFromLine: pathFromLine, - pathFromArea: pathFromArea, - realIndex: realIndex - }); - pathFromLine = pathFrom.pathFromLine; - pathFromArea = pathFrom.pathFromArea; - } - - return { - prevX: prevX, - prevY: prevY, - linePath: linePath, - areaPath: areaPath, - pathFromLine: pathFromLine, - pathFromArea: pathFromArea - }; - } - }, { - key: "_handlePaths", - value: function _handlePaths(_ref2) { - var type = _ref2.type, - realIndex = _ref2.realIndex, - i = _ref2.i, - paths = _ref2.paths; - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); // push all current y values array to main PrevY Array - - this.prevSeriesY.push(paths.yArrj); // push all x val arrays into main xArr - - w.globals.seriesXvalues[realIndex] = paths.xArrj; - w.globals.seriesYvalues[realIndex] = paths.yArrj; // these elements will be shown after area path animation completes - - if (!this.pointsChart) { - w.globals.delayedElements.push({ - el: this.elPointsMain.node, - index: realIndex - }); - } - - var defaultRenderedPathOptions = { - i: i, - realIndex: realIndex, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type) - }; - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var p = 0; p < paths.areaPaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { - pathFrom: paths.pathFromArea, - pathTo: paths.areaPaths[p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); - this.elSeries.add(renderedPath); - } - } - - if (w.config.stroke.show && !this.pointsChart) { - var lineFill = null; - - if (type === 'line') { - // fillable lines only for lineChart - lineFill = fill.fillPath({ - seriesNumber: realIndex, - i: i - }); - } else { - lineFill = w.globals.stroke.colors[realIndex]; - } - - for (var _p = 0; _p < paths.linePaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { - pathFrom: paths.pathFromLine, - pathTo: paths.linePaths[_p], - stroke: lineFill, - strokeWidth: this.strokeWidth, - strokeLineCap: w.config.stroke.lineCap, - fill: 'none' - })); - - this.elSeries.add(_renderedPath); - } - } - } - }, { - key: "_iterateOverDataPoints", - value: function _iterateOverDataPoints(_ref3) { - var series = _ref3.series, - realIndex = _ref3.realIndex, - i = _ref3.i, - x = _ref3.x, - y = _ref3.y, - pX = _ref3.pX, - pY = _ref3.pY, - pathsFrom = _ref3.pathsFrom, - linePaths = _ref3.linePaths, - areaPaths = _ref3.areaPaths, - seriesIndex = _ref3.seriesIndex, - lineYPosition = _ref3.lineYPosition, - xArrj = _ref3.xArrj, - yArrj = _ref3.yArrj; - var w = this.w; - var graphics = new Graphics(this.ctx); - var yRatio = this.yRatio; - var prevY = pathsFrom.prevY, - linePath = pathsFrom.linePath, - areaPath = pathsFrom.areaPath, - pathFromLine = pathsFrom.pathFromLine, - pathFromArea = pathsFrom.pathFromArea; - var minY = Utils.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY; - var iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints; - - for (var j = 0; j < iterations; j++) { - var isNull = typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null; - - if (w.globals.isXNumeric) { - var sX = w.globals.seriesX[realIndex][j + 1]; - - if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') { - /* fix #374 */ - sX = w.globals.seriesX[realIndex][iterations - 1]; - } - - x = (sX - w.globals.minX) / this.xRatio; - } else { - x = x + this.xDivision; - } - - if (w.config.chart.stacked) { - if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) { - // a collapsed series in a stacked bar chart may provide wrong result for the next series, hence find the prevIndex of prev series which is not collapsed - fixes apexcharts.js#1372 - var prevIndex = function prevIndex(pi) { - var pii = pi; - - for (var cpi = 0; cpi < w.globals.series.length; cpi++) { - if (w.globals.collapsedSeriesIndices.indexOf(pi) > -1) { - pii--; - break; - } - } - - return pii >= 0 ? pii : 0; - }; - - lineYPosition = this.prevSeriesY[prevIndex(i - 1)][j + 1]; - } else { - // the first series will not have prevY values - lineYPosition = this.zeroY; - } - } else { - lineYPosition = this.zeroY; - } - - if (isNull) { - y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } // push current X - - - xArrj.push(x); // push current Y that will be used as next series's bottom position - - yArrj.push(y); - var pointsPos = this.lineHelpers.calculatePoints({ - series: series, - x: x, - y: y, - realIndex: realIndex, - i: i, - j: j, - prevY: prevY - }); - - var calculatedPaths = this._createPaths({ - series: series, - i: i, - realIndex: realIndex, - j: j, - x: x, - y: y, - pX: pX, - pY: pY, - linePath: linePath, - areaPath: areaPath, - linePaths: linePaths, - areaPaths: areaPaths, - seriesIndex: seriesIndex - }); - - areaPaths = calculatedPaths.areaPaths; - linePaths = calculatedPaths.linePaths; - pX = calculatedPaths.pX; - pY = calculatedPaths.pY; - areaPath = calculatedPaths.areaPath; - linePath = calculatedPaths.linePath; - - if (this.appendPathFrom) { - pathFromLine = pathFromLine + graphics.line(x, this.zeroY); - pathFromArea = pathFromArea + graphics.line(x, this.zeroY); - } - - this.handleNullDataPoints(series, pointsPos, i, j, realIndex); - - this._handleMarkersAndLabels({ - pointsPos: pointsPos, - series: series, - x: x, - y: y, - prevY: prevY, - i: i, - j: j, - realIndex: realIndex - }); - } - - return { - yArrj: yArrj, - xArrj: xArrj, - pathFromArea: pathFromArea, - areaPaths: areaPaths, - pathFromLine: pathFromLine, - linePaths: linePaths - }; - } - }, { - key: "_handleMarkersAndLabels", - value: function _handleMarkersAndLabels(_ref4) { - var pointsPos = _ref4.pointsPos, - series = _ref4.series, - x = _ref4.x, - y = _ref4.y, - prevY = _ref4.prevY, - i = _ref4.i, - j = _ref4.j, - realIndex = _ref4.realIndex; - var w = this.w; - var dataLabels = new DataLabels(this.ctx); - - if (!this.pointsChart) { - if (w.globals.series[i].length > 1) { - this.elPointsMain.node.classList.add('apexcharts-element-hidden'); - } - - var elPointsWrap = this.markers.plotChartMarkers(pointsPos, realIndex, j + 1); - - if (elPointsWrap !== null) { - this.elPointsMain.add(elPointsWrap); - } - } else { - // scatter / bubble chart points creation - this.scatter.draw(this.elSeries, j, { - realIndex: realIndex, - pointsPos: pointsPos, - zRatio: this.zRatio, - elParent: this.elPointsMain - }); - } - - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null); - - if (drawnLabels !== null) { - this.elDataLabelsWrap.add(drawnLabels); - } - } - }, { - key: "_createPaths", - value: function _createPaths(_ref5) { - var series = _ref5.series, - i = _ref5.i, - realIndex = _ref5.realIndex, - j = _ref5.j, - x = _ref5.x, - y = _ref5.y, - pX = _ref5.pX, - pY = _ref5.pY, - linePath = _ref5.linePath, - areaPath = _ref5.areaPath, - linePaths = _ref5.linePaths, - areaPaths = _ref5.areaPaths, - seriesIndex = _ref5.seriesIndex; - var w = this.w; - var graphics = new Graphics(this.ctx); - var curve = w.config.stroke.curve; - var areaBottomY = this.areaBottomY; - - if (Array.isArray(w.config.stroke.curve)) { - if (Array.isArray(seriesIndex)) { - curve = w.config.stroke.curve[seriesIndex[i]]; - } else { - curve = w.config.stroke.curve[i]; - } - } // logic of smooth curve derived from chartist - // CREDITS: https://gionkunz.github.io/chartist-js/ - - - if (curve === 'smooth') { - var length = (x - pX) * 0.35; - - if (w.globals.hasNullValues) { - if (series[i][j] !== null) { - if (series[i][j + 1] !== null) { - linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y); - areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z'; - } else { - linePath = graphics.move(pX, pY); - areaPath = graphics.move(pX, pY) + 'z'; - } - } - - linePaths.push(linePath); - areaPaths.push(areaPath); - } else { - linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y); - areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y); - } - - pX = x; - pY = y; - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z'; - - if (!w.globals.hasNullValues) { - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - } else { - if (series[i][j + 1] === null) { - linePath = linePath + graphics.move(x, y); - var numericOrCatX = w.globals.isXNumeric ? (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.xRatio : x - this.xDivision; - areaPath = areaPath + graphics.line(numericOrCatX, areaBottomY) + graphics.move(x, y) + 'z'; - } - - if (series[i][j] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.move(x, areaBottomY); - } - - if (curve === 'stepline') { - linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - } else if (curve === 'straight') { - linePath = linePath + graphics.line(x, y); - areaPath = areaPath + graphics.line(x, y); - } - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z'; - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - - return { - linePaths: linePaths, - areaPaths: areaPaths, - pX: pX, - pY: pY, - linePath: linePath, - areaPath: areaPath - }; - } - }, { - key: "handleNullDataPoints", - value: function handleNullDataPoints(series, pointsPos, i, j, realIndex) { - var w = this.w; - - if (series[i][j] === null && w.config.markers.showNullDataPoints || series[i].length === 1) { - // fixes apexcharts.js#1282, #1252 - var elPointsWrap = this.markers.plotChartMarkers(pointsPos, realIndex, j + 1, this.strokeWidth - w.config.markers.strokeWidth / 2, true); - - if (elPointsWrap !== null) { - this.elPointsMain.add(elPointsWrap); - } - } - } - }]); - - return Line; - }(); - - /** - * ApexCharts TimeScale Class for generating time ticks for x-axis. - * - * @module TimeScale - **/ - - var TimeScale = /*#__PURE__*/function () { - function TimeScale(ctx) { - _classCallCheck(this, TimeScale); - - this.ctx = ctx; - this.w = ctx.w; - this.timeScaleArray = []; - this.utc = this.w.config.xaxis.labels.datetimeUTC; - } - - _createClass(TimeScale, [{ - key: "calculateTimeScaleTicks", - value: function calculateTimeScaleTicks(minX, maxX) { - var _this = this; - - var w = this.w; // null check when no series to show - - if (w.globals.allSeriesCollapsed) { - w.globals.labels = []; - w.globals.timescaleLabels = []; - return []; - } - - var dt = new DateTime(this.ctx); - var daysDiff = (maxX - minX) / (1000 * 60 * 60 * 24); - this.determineInterval(daysDiff); - w.globals.disableZoomIn = false; - w.globals.disableZoomOut = false; - - if (daysDiff < 0.005) { - w.globals.disableZoomIn = true; - } else if (daysDiff > 50000) { - w.globals.disableZoomOut = true; - } - - var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX, this.utc); - var daysWidthOnXAxis = w.globals.gridWidth / daysDiff; - var hoursWidthOnXAxis = daysWidthOnXAxis / 24; - var minutesWidthOnXAxis = hoursWidthOnXAxis / 60; - var numberOfHours = Math.floor(daysDiff * 24); - var numberOfMinutes = Math.floor(daysDiff * 24 * 60); - var numberOfDays = Math.floor(daysDiff); - var numberOfMonths = Math.floor(daysDiff / 30); - var numberOfYears = Math.floor(daysDiff / 365); - var firstVal = { - minMinute: timeIntervals.minMinute, - minHour: timeIntervals.minHour, - minDate: timeIntervals.minDate, - minMonth: timeIntervals.minMonth, - minYear: timeIntervals.minYear - }; - var currentMinute = firstVal.minMinute; - var currentHour = firstVal.minHour; - var currentMonthDate = firstVal.minDate; - var currentDate = firstVal.minDate; - var currentMonth = firstVal.minMonth; - var currentYear = firstVal.minYear; - var params = { - firstVal: firstVal, - currentMinute: currentMinute, - currentHour: currentHour, - currentMonthDate: currentMonthDate, - currentDate: currentDate, - currentMonth: currentMonth, - currentYear: currentYear, - daysWidthOnXAxis: daysWidthOnXAxis, - hoursWidthOnXAxis: hoursWidthOnXAxis, - minutesWidthOnXAxis: minutesWidthOnXAxis, - numberOfMinutes: numberOfMinutes, - numberOfHours: numberOfHours, - numberOfDays: numberOfDays, - numberOfMonths: numberOfMonths, - numberOfYears: numberOfYears - }; - - switch (this.tickInterval) { - case 'years': - { - this.generateYearScale(params); - break; - } - - case 'months': - case 'half_year': - { - this.generateMonthScale(params); - break; - } - - case 'months_days': - case 'months_fortnight': - case 'days': - case 'week_days': - { - this.generateDayScale(params); - break; - } - - case 'hours': - { - this.generateHourScale(params); - break; - } - - case 'minutes': - this.generateMinuteScale(params); - break; - } // first, we will adjust the month values index - // as in the upper function, it is starting from 0 - // we will start them from 1 - - - var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) { - var defaultReturn = { - position: ts.position, - unit: ts.unit, - year: ts.year, - day: ts.day ? ts.day : 1, - hour: ts.hour ? ts.hour : 0, - month: ts.month + 1 - }; - - if (ts.unit === 'month') { - return _objectSpread2({}, defaultReturn, { - day: 1, - value: ts.value + 1 - }); - } else if (ts.unit === 'day' || ts.unit === 'hour') { - return _objectSpread2({}, defaultReturn, { - value: ts.value - }); - } else if (ts.unit === 'minute') { - return _objectSpread2({}, defaultReturn, { - value: ts.value, - minute: ts.value - }); - } - - return ts; - }); - var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) { - var modulo = 1; - var ticks = Math.ceil(w.globals.gridWidth / 120); - var value = ts.value; - - if (w.config.xaxis.tickAmount !== undefined) { - ticks = w.config.xaxis.tickAmount; - } - - if (adjustedMonthInTimeScaleArray.length > ticks) { - modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks); - } - - var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months - - var shouldNotPrint = false; // should skip these values - - switch (_this.tickInterval) { - case 'years': - // make years label denser - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'half_year': - modulo = 7; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months': - modulo = 1; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months_fortnight': - modulo = 15; - - if (ts.unit === 'year' || ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'months_days': - modulo = 10; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'week_days': - modulo = 8; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'days': - modulo = 1; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'hours': - if (ts.unit === 'day') { - shouldNotSkipUnit = true; - } - - break; - - case 'minutes': - if (value % 5 !== 0) { - shouldNotPrint = true; - } - - break; - } - - if (_this.tickInterval === 'minutes' || _this.tickInterval === 'hours') { - if (!shouldNotPrint) { - return true; - } - } else { - if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) { - return true; - } - } - }); - return filteredTimeScale; - } - }, { - key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { - var w = this.w; - var reformattedTimescaleArray = this.formatDates(filteredTimeScale); - var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - w.globals.timescaleLabels = removedOverlappingTS.slice(); // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords - // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX - // Dependency on Dimensions(), need to refactor correctly - // TODO - find an alternate way to avoid calling this Heavy method twice - - var dimensions = new Dimensions(this.ctx); - dimensions.plotCoords(); - } - }, { - key: "determineInterval", - value: function determineInterval(daysDiff) { - switch (true) { - case daysDiff > 1825: - // difference is more than 5 years - this.tickInterval = 'years'; - break; - - case daysDiff > 800 && daysDiff <= 1825: - this.tickInterval = 'half_year'; - break; - - case daysDiff > 180 && daysDiff <= 800: - this.tickInterval = 'months'; - break; - - case daysDiff > 90 && daysDiff <= 180: - this.tickInterval = 'months_fortnight'; - break; - - case daysDiff > 60 && daysDiff <= 90: - this.tickInterval = 'months_days'; - break; - - case daysDiff > 30 && daysDiff <= 60: - this.tickInterval = 'week_days'; - break; - - case daysDiff > 2 && daysDiff <= 30: - this.tickInterval = 'days'; - break; - - case daysDiff > 0.1 && daysDiff <= 2: - // less than 2 days - this.tickInterval = 'hours'; - break; - - case daysDiff < 0.1: - this.tickInterval = 'minutes'; - break; - - default: - this.tickInterval = 'days'; - break; - } - } - }, { - key: "generateYearScale", - value: function generateYearScale(_ref) { - var firstVal = _ref.firstVal, - currentMonth = _ref.currentMonth, - currentYear = _ref.currentYear, - daysWidthOnXAxis = _ref.daysWidthOnXAxis, - numberOfYears = _ref.numberOfYears; - var firstTickValue = firstVal.minYear; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'year'; - - if (firstVal.minDate > 1 || firstVal.minMonth > 0) { - var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position - - var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis; - firstTickValue = firstVal.minYear + 1; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: firstTickValue, - month: Utils.monthMod(currentMonth + 1) - }); - } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth + 1) - }); - } - - var year = firstTickValue; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfYears; i++) { - year++; - pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos; - this.timeScaleArray.push({ - position: pos, - value: year, - unit: unit, - year: year, - month: 1 - }); - } - } - }, { - key: "generateMonthScale", - value: function generateMonthScale(_ref2) { - var firstVal = _ref2.firstVal, - currentMonthDate = _ref2.currentMonthDate, - currentMonth = _ref2.currentMonth, - currentYear = _ref2.currentYear, - daysWidthOnXAxis = _ref2.daysWidthOnXAxis, - numberOfMonths = _ref2.numberOfMonths; - var firstTickValue = currentMonth; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'month'; - var yrCounter = 0; - - if (firstVal.minDate > 1) { - // remainingDaysofFirstMonth is used to reacht the 2nd tick position - var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis; - firstTickValue = Utils.monthMod(currentMonth + 1); - var year = currentYear + yrCounter; - - var _month = Utils.monthMod(firstTickValue); - - var value = firstTickValue; // it's Jan, so update the year - - if (firstTickValue === 0) { - unit = 'year'; - value = year; - _month = 1; - yrCounter += 1; - year = year + yrCounter; - } // push the first tick in the array - - - this.timeScaleArray.push({ - position: firstTickPosition, - value: value, - unit: unit, - year: year, - month: _month - }); - } else { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth) - }); - } - - var month = firstTickValue + 1; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0, j = 1; i < numberOfMonths; i++, j++) { - month = Utils.monthMod(month); - - if (month === 0) { - unit = 'year'; - yrCounter += 1; - } else { - unit = 'month'; - } - - var _year = this._getYear(currentYear, month, yrCounter); - - pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos; - var monthVal = month === 0 ? _year : month; - this.timeScaleArray.push({ - position: pos, - value: monthVal, - unit: unit, - year: _year, - month: month === 0 ? 1 : month - }); - month++; - } - } - }, { - key: "generateDayScale", - value: function generateDayScale(_ref3) { - var firstVal = _ref3.firstVal, - currentMonth = _ref3.currentMonth, - currentYear = _ref3.currentYear, - hoursWidthOnXAxis = _ref3.hoursWidthOnXAxis, - numberOfDays = _ref3.numberOfDays; - var dt = new DateTime(this.ctx); - var unit = 'day'; - var firstTickValue = firstVal.minDate + 1; - var date = firstTickValue; - - var changeMonth = function changeMonth(dateVal, month, year) { - var monthdays = dt.determineDaysOfMonths(month + 1, year); - - if (dateVal > monthdays) { - month = month + 1; - date = 1; - unit = 'month'; - val = month; - return month; - } - - return month; - }; - - var remainingHours = 24 - firstVal.minHour; - var yrCounter = 0; // calculate the first tick position - - var firstTickPosition = remainingHours * hoursWidthOnXAxis; - var val = firstTickValue; - var month = changeMonth(date, currentMonth, currentYear); - - if (firstVal.minHour === 0 && firstVal.minDate === 1) { - // the first value is the first day of month - firstTickPosition = 0; - val = Utils.monthMod(firstVal.minMonth); - unit = 'month'; - date = firstVal.minDate; - numberOfDays++; - } // push the first tick in the array - - - this.timeScaleArray.push({ - position: firstTickPosition, - value: val, - unit: unit, - year: this._getYear(currentYear, month, yrCounter), - month: Utils.monthMod(month), - day: date - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfDays; i++) { - date += 1; - unit = 'day'; - month = changeMonth(date, month, this._getYear(currentYear, month, yrCounter)); - - var year = this._getYear(currentYear, month, yrCounter); - - pos = 24 * hoursWidthOnXAxis + pos; - var value = date === 1 ? Utils.monthMod(month) : date; - this.timeScaleArray.push({ - position: pos, - value: value, - unit: unit, - year: year, - month: Utils.monthMod(month), - day: value - }); - } - } - }, { - key: "generateHourScale", - value: function generateHourScale(_ref4) { - var firstVal = _ref4.firstVal, - currentDate = _ref4.currentDate, - currentMonth = _ref4.currentMonth, - currentYear = _ref4.currentYear, - minutesWidthOnXAxis = _ref4.minutesWidthOnXAxis, - numberOfHours = _ref4.numberOfHours; - var dt = new DateTime(this.ctx); - var yrCounter = 0; - var unit = 'hour'; - - var changeDate = function changeDate(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - date = 1; - month = month + 1; - } - - return { - month: month, - date: date - }; - }; - - var changeMonth = function changeMonth(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - month = month + 1; - return month; - } - - return month; - }; - - var remainingMins = 60 - firstVal.minMinute; - var firstTickPosition = remainingMins * minutesWidthOnXAxis; - var firstTickValue = firstVal.minHour + 1; - var hour = firstTickValue + 1; - - if (remainingMins === 60) { - firstTickPosition = 0; - firstTickValue = firstVal.minHour; - hour = firstTickValue + 1; - } - - var date = currentDate; - var month = changeMonth(date, currentMonth); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - year: currentYear, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfHours; i++) { - unit = 'hour'; - - if (hour >= 24) { - hour = 0; - date += 1; - unit = 'day'; - var checkNextMonth = changeDate(date, month); - month = checkNextMonth.month; - month = changeMonth(date, month); - } - - var year = this._getYear(currentYear, month, yrCounter); - - pos = hour === 0 && i === 0 ? remainingMins * minutesWidthOnXAxis : 60 * minutesWidthOnXAxis + pos; - var val = hour === 0 ? date : hour; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - day: date, - year: year, - month: Utils.monthMod(month) - }); - hour++; - } - } - }, { - key: "generateMinuteScale", - value: function generateMinuteScale(_ref5) { - var firstVal = _ref5.firstVal, - currentMinute = _ref5.currentMinute, - currentHour = _ref5.currentHour, - currentDate = _ref5.currentDate, - currentMonth = _ref5.currentMonth, - currentYear = _ref5.currentYear, - minutesWidthOnXAxis = _ref5.minutesWidthOnXAxis, - numberOfMinutes = _ref5.numberOfMinutes; - var yrCounter = 0; - var unit = 'minute'; - var remainingMins = currentMinute - firstVal.minMinute; - var firstTickPosition = minutesWidthOnXAxis - remainingMins; - var firstTickValue = firstVal.minMinute + 1; - var minute = firstTickValue + 1; - var date = currentDate; - var month = currentMonth; - var year = currentYear; - var hour = currentHour; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - minute: minute, - year: year, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfMinutes; i++) { - if (minute >= 60) { - minute = 0; - hour += 1; - - if (hour === 24) { - hour = 0; - } - } - - pos = minutesWidthOnXAxis + pos; - this.timeScaleArray.push({ - position: pos, - value: minute, - unit: unit, - hour: hour, - minute: minute, - day: date, - year: this._getYear(currentYear, month, yrCounter), - month: Utils.monthMod(month) - }); - minute++; - } - } - }, { - key: "createRawDateString", - value: function createRawDateString(ts, value) { - var raw = ts.year; - raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day - - if (ts.unit === 'day') { - raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01'; - } else { - raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2); - } // unit is hour - - - if (ts.unit === 'hour') { - raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00'; - } else { - raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2); - } // unit is minute - - - raw += ts.unit === 'minute' ? ':' + ('0' + value).slice(-2) + ':00' : ':00:00'; - - if (this.utc) { - raw += '.000Z'; - } - - return raw; - } - }, { - key: "formatDates", - value: function formatDates(filteredTimeScale) { - var _this2 = this; - - var w = this.w; - var reformattedTimescaleArray = filteredTimeScale.map(function (ts) { - var value = ts.value.toString(); - var dt = new DateTime(_this2.ctx); - - var raw = _this2.createRawDateString(ts, value); - - var dateToFormat = dt.getDate(raw); - - if (w.config.xaxis.labels.format === undefined) { - var customFormat = 'dd MMM'; - var dtFormatter = w.config.xaxis.labels.datetimeFormatter; - if (ts.unit === 'year') customFormat = dtFormatter.year; - if (ts.unit === 'month') customFormat = dtFormatter.month; - if (ts.unit === 'day') customFormat = dtFormatter.day; - if (ts.unit === 'hour') customFormat = dtFormatter.hour; - if (ts.unit === 'minute') customFormat = dtFormatter.minute; - value = dt.formatDate(dateToFormat, customFormat); - } else { - value = dt.formatDate(dateToFormat, w.config.xaxis.labels.format); - } - - return { - dateString: raw, - position: ts.position, - value: value, - unit: ts.unit, - year: ts.year, - month: ts.month - }; - }); - return reformattedTimescaleArray; - } - }, { - key: "removeOverlappingTS", - value: function removeOverlappingTS(arr) { - var _this3 = this; - - var graphics = new Graphics(this.ctx); - var equalLabelLengthFlag = false; // These labels got same length? - - var constantLabelWidth; // If true, what is the constant length to use - - if (arr.length > 0 && // check arr length - arr[0].value && // check arr[0] contains value - arr.every(function (lb) { - return lb.value.length === arr[0].value.length; - }) // check every arr label value is the same as the first one - ) { - equalLabelLengthFlag = true; // These labels got same length - - constantLabelWidth = graphics.getTextRects(arr[0].value).width; // The constant label width to use - } - - var lastDrawnIndex = 0; - var filteredArray = arr.map(function (item, index) { - if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) { - var prevLabelWidth = !equalLabelLengthFlag // if vary in label length - ? graphics.getTextRects(arr[lastDrawnIndex].value).width // get individual length - : constantLabelWidth; // else: use constant length - - var prevPos = arr[lastDrawnIndex].position; - var pos = item.position; - - if (pos > prevPos + prevLabelWidth + 10) { - lastDrawnIndex = index; - return item; - } else { - return null; - } - } else { - return item; - } - }); - filteredArray = filteredArray.filter(function (f) { - return f !== null; - }); - return filteredArray; - } - }, { - key: "_getYear", - value: function _getYear(currentYear, month, yrCounter) { - return currentYear + Math.floor(month / 12) + yrCounter; - } - }]); - - return TimeScale; - }(); - - /** - * ApexCharts Core Class responsible for major calculations and creating elements. - * - * @module Core - **/ - - var Core = /*#__PURE__*/function () { - function Core(el, ctx) { - _classCallCheck(this, Core); - - this.ctx = ctx; - this.w = ctx.w; - this.el = el; - } // get data and store into appropriate vars - - - _createClass(Core, [{ - key: "setupElements", - value: function setupElements() { - var gl = this.w.globals; - var cnf = this.w.config; // const graphics = new Graphics(this.ctx) - - var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', 'candlestick', 'scatter', 'bubble', 'radar', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', 'candlestick', 'scatter', 'bubble']; - gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; - gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; - gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; - gl.chartClass = '.apexcharts' + gl.cuid; - gl.dom.baseEl = this.el; - gl.dom.elWrap = document.createElement('div'); - Graphics.setAttrs(gl.dom.elWrap, { - id: gl.chartClass.substring(1), - class: 'apexcharts-canvas ' + gl.chartClass.substring(1) - }); - this.el.appendChild(gl.dom.elWrap); - gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap); - gl.dom.Paper.attr({ - class: 'apexcharts-svg', - 'xmlns:data': 'ApexChartsNS', - transform: "translate(".concat(cnf.chart.offsetX, ", ").concat(cnf.chart.offsetY, ")") - }); - gl.dom.Paper.node.style.background = cnf.chart.background; - this.setSVGDimensions(); - gl.dom.elGraphical = gl.dom.Paper.group().attr({ - class: 'apexcharts-inner apexcharts-graphical' - }); - gl.dom.elAnnotations = gl.dom.Paper.group().attr({ - class: 'apexcharts-annotations' - }); - gl.dom.elDefs = gl.dom.Paper.defs(); - gl.dom.elLegendWrap = document.createElement('div'); - gl.dom.elLegendWrap.classList.add('apexcharts-legend'); - gl.dom.elWrap.appendChild(gl.dom.elLegendWrap); - gl.dom.Paper.add(gl.dom.elGraphical); - gl.dom.elGraphical.add(gl.dom.elDefs); - } - }, { - key: "plotChartType", - value: function plotChartType(ser, xyRatios) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - var lineSeries = { - series: [], - i: [] - }; - var areaSeries = { - series: [], - i: [] - }; - var scatterSeries = { - series: [], - i: [] - }; - var bubbleSeries = { - series: [], - i: [] - }; - var columnSeries = { - series: [], - i: [] - }; - var candlestickSeries = { - series: [], - i: [] - }; - gl.series.map(function (series, st) { - // if user has specified a particular type for particular series - if (typeof ser[st].type !== 'undefined') { - if (ser[st].type === 'column' || ser[st].type === 'bar') { - if (gl.series.length > 1 && cnf.plotOptions.bar.horizontal) { - // horizontal bars not supported in mixed charts, hence show a warning - console.warn('Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`'); - } - - columnSeries.series.push(series); - columnSeries.i.push(st); - w.globals.columnSeries = columnSeries.series; - } else if (ser[st].type === 'area') { - areaSeries.series.push(series); - areaSeries.i.push(st); - } else if (ser[st].type === 'line') { - lineSeries.series.push(series); - lineSeries.i.push(st); - } else if (ser[st].type === 'scatter') { - scatterSeries.series.push(series); - scatterSeries.i.push(st); - } else if (ser[st].type === 'bubble') { - bubbleSeries.series.push(series); - bubbleSeries.i.push(st); - } else if (ser[st].type === 'candlestick') { - candlestickSeries.series.push(series); - candlestickSeries.i.push(st); - } else { - // user has specified type, but it is not valid (other than line/area/column) - console.warn('You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble'); - } - - gl.comboCharts = true; - } else { - lineSeries.series.push(series); - lineSeries.i.push(st); - } - }); - var line = new Line(this.ctx, xyRatios); - var candlestick = new CandleStick(this.ctx, xyRatios); - this.ctx.pie = new Pie(this.ctx); - var radialBar = new Radial(this.ctx); - var rangeBar = new RangeBar(this.ctx, xyRatios); - var radar = new Radar(this.ctx); - var elGraph = []; - - if (gl.comboCharts) { - if (areaSeries.series.length > 0) { - elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i)); - } - - if (columnSeries.series.length > 0) { - if (w.config.chart.stacked) { - var barStacked = new BarStacked(this.ctx, xyRatios); - elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i)); - } else { - var bar = new Bar(this.ctx, xyRatios); - elGraph.push(bar.draw(columnSeries.series, columnSeries.i)); - } - } - - if (lineSeries.series.length > 0) { - elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i)); - } - - if (candlestickSeries.series.length > 0) { - elGraph.push(candlestick.draw(candlestickSeries.series, candlestickSeries.i)); - } - - if (scatterSeries.series.length > 0) { - var scatterLine = new Line(this.ctx, xyRatios, true); - elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i)); - } - - if (bubbleSeries.series.length > 0) { - var bubbleLine = new Line(this.ctx, xyRatios, true); - elGraph.push(bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i)); - } - } else { - switch (cnf.chart.type) { - case 'line': - elGraph = line.draw(gl.series, 'line'); - break; - - case 'area': - elGraph = line.draw(gl.series, 'area'); - break; - - case 'bar': - if (cnf.chart.stacked) { - var _barStacked = new BarStacked(this.ctx, xyRatios); - - elGraph = _barStacked.draw(gl.series); - } else { - var _bar = new Bar(this.ctx, xyRatios); - - elGraph = _bar.draw(gl.series); - } - - break; - - case 'candlestick': - var candleStick = new CandleStick(this.ctx, xyRatios); - elGraph = candleStick.draw(gl.series); - break; - - case 'rangeBar': - elGraph = rangeBar.draw(gl.series); - break; - - case 'heatmap': - var heatmap = new HeatMap(this.ctx, xyRatios); - elGraph = heatmap.draw(gl.series); - break; - - case 'pie': - case 'donut': - case 'polarArea': - elGraph = this.ctx.pie.draw(gl.series); - break; - - case 'radialBar': - elGraph = radialBar.draw(gl.series); - break; - - case 'radar': - elGraph = radar.draw(gl.series); - break; - - default: - elGraph = line.draw(gl.series); - } - } - - return elGraph; - } - }, { - key: "setSVGDimensions", - value: function setSVGDimensions() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.svgWidth = cnf.chart.width; - gl.svgHeight = cnf.chart.height; - var elDim = Utils.getDimensions(this.el); - var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop(); - - if (widthUnit === '%') { - if (Utils.isNumber(elDim[0])) { - if (elDim[0].width === 0) { - elDim = Utils.getDimensions(this.el.parentNode); - } - - gl.svgWidth = elDim[0] * parseInt(cnf.chart.width, 10) / 100; - } - } else if (widthUnit === 'px' || widthUnit === '') { - gl.svgWidth = parseInt(cnf.chart.width, 10); - } - - if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') { - var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop(); - - if (heightUnit === '%') { - var elParentDim = Utils.getDimensions(this.el.parentNode); - gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height, 10) / 100; - } else { - gl.svgHeight = parseInt(cnf.chart.height, 10); - } - } else { - if (gl.axisCharts) { - gl.svgHeight = gl.svgWidth / 1.61; - } else { - gl.svgHeight = gl.svgWidth / 1.2; - } - } - - if (gl.svgWidth < 0) gl.svgWidth = 0; - if (gl.svgHeight < 0) gl.svgHeight = 0; - Graphics.setAttrs(gl.dom.Paper.node, { - width: gl.svgWidth, - height: gl.svgHeight - }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; - gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; - gl.dom.elWrap.style.width = gl.svgWidth + 'px'; - gl.dom.elWrap.style.height = gl.svgHeight + 'px'; - } - }, { - key: "shiftGraphPosition", - value: function shiftGraphPosition() { - var gl = this.w.globals; - var tY = gl.translateY; - var tX = gl.translateX; - var scalingAttrs = { - transform: 'translate(' + tX + ', ' + tY + ')' - }; - Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs); - gl.x2SpaceAvailable = gl.svgWidth - gl.dom.elGraphical.x() - gl.gridWidth; - } // To prevent extra spacings in the bottom of the chart, we need to recalculate the height for pie/donut/radialbar charts - - }, { - key: "resizeNonAxisCharts", - value: function resizeNonAxisCharts() { - var w = this.w; - var gl = w.globals; - var legendHeight = 0; - var offY = w.config.chart.sparkline.enabled ? 1 : 15; - offY = offY + w.config.grid.padding.bottom; - - if ((w.config.legend.position === 'top' || w.config.legend.position === 'bottom') && w.config.legend.show && !w.config.legend.floating) { - legendHeight = new Legend(this.ctx).legendHelpers.getLegendBBox().clwh + 10; - } - - var radialEl = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar'); - var chartInnerDimensions = w.globals.radialSize * 2.05; - - if (radialEl && !w.config.chart.sparkline.enabled) { - var elRadialRect = Utils.getBoundingClientRect(radialEl); - chartInnerDimensions = elRadialRect.bottom; - var maxHeight = elRadialRect.bottom - elRadialRect.top; - chartInnerDimensions = Math.max(w.globals.radialSize * 2.05, maxHeight); - } - - var newHeight = chartInnerDimensions + gl.translateY + legendHeight + offY; - - if (gl.dom.elLegendForeign) { - gl.dom.elLegendForeign.setAttribute('height', newHeight); - } - - gl.dom.elWrap.style.height = newHeight + 'px'; - Graphics.setAttrs(gl.dom.Paper.node, { - height: newHeight - }); - gl.dom.Paper.node.parentNode.parentNode.style.minHeight = newHeight + 'px'; - } - /* - ** All the calculations for setting range in charts will be done here - */ - - }, { - key: "coreCalculations", - value: function coreCalculations() { - var range = new Range$1(this.ctx); - range.init(); - } - }, { - key: "resetGlobals", - value: function resetGlobals() { - var _this = this; - - var resetxyValues = function resetxyValues() { - return _this.w.config.series.map(function (s) { - return []; - }); - }; - - var globalObj = new Globals(); - var gl = this.w.globals; - globalObj.initGlobalVars(gl); - gl.seriesXvalues = resetxyValues(); - gl.seriesYvalues = resetxyValues(); - } - }, { - key: "isMultipleY", - value: function isMultipleY() { - // user has supplied an array in yaxis property. So, turn on multipleYAxis flag - if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) { - this.w.globals.isMultipleYAxis = true; - return true; - } - } - }, { - key: "xySettings", - value: function xySettings() { - var xyRatios = null; - var w = this.w; - - if (w.globals.axisCharts) { - if (w.config.xaxis.crosshairs.position === 'back') { - var crosshairs = new Crosshairs(this.ctx); - crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'back') { - var _crosshairs = new Crosshairs(this.ctx); - - _crosshairs.drawYCrosshairs(); - } - - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { - var ts = new TimeScale(this.ctx); - var formattedTimeScale = []; - - if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - } else if (w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); - } - - ts.recalcDimensionsBasedOnFormat(formattedTimeScale); - } - - var coreUtils = new CoreUtils(this.ctx); - xyRatios = coreUtils.getCalculatedRatios(); - } - - return xyRatios; - } - }, { - key: "updateSourceChart", - value: function updateSourceChart(targetChart) { - this.ctx.w.globals.selection = undefined; - - this.ctx.updateHelpers._updateOptions({ - chart: { - selection: { - xaxis: { - min: targetChart.w.globals.minX, - max: targetChart.w.globals.maxX - } - } - } - }, false, false); - } - }, { - key: "setupBrushHandler", - value: function setupBrushHandler() { - var _this2 = this; - - var w = this.w; // only for brush charts - - if (!w.config.chart.brush.enabled) { - return; - } // if user has not defined a custom function for selection - we handle the brush chart - // otherwise we leave it to the user to define the functionality for selection - - - if (typeof w.config.chart.events.selection !== 'function') { - var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option - - targets.forEach(function (target) { - var targetChart = ApexCharts.getChartByID(target); - targetChart.w.globals.brushSource = _this2.ctx; - - if (typeof targetChart.w.config.chart.events.zoomed !== 'function') { - targetChart.w.config.chart.events.zoomed = function () { - _this2.updateSourceChart(targetChart); - }; - } - - if (typeof targetChart.w.config.chart.events.scrolled !== 'function') { - targetChart.w.config.chart.events.scrolled = function () { - _this2.updateSourceChart(targetChart); - }; - } - }); - - w.config.chart.events.selection = function (chart, e) { - targets.forEach(function (target) { - var targetChart = ApexCharts.getChartByID(target); - var yaxis = Utils.clone(w.config.yaxis); - - if (w.config.chart.brush.autoScaleYaxis && targetChart.w.globals.series.length === 1) { - var scale = new Range(targetChart); - yaxis = scale.autoScaleY(targetChart, yaxis, e); - } - - targetChart.ctx.updateHelpers._updateOptions({ - xaxis: { - min: e.xaxis.min, - max: e.xaxis.max - }, - yaxis: _objectSpread2({}, targetChart.w.config.yaxis[0], { - min: yaxis[0].min, - max: yaxis[0].max - }) - }, false, false, false, false); - }); - }; - } - } - }]); - - return Core; - }(); - - var UpdateHelpers = /*#__PURE__*/function () { - function UpdateHelpers(ctx) { - _classCallCheck(this, UpdateHelpers); - - this.ctx = ctx; - this.w = ctx.w; - } - /** - * private method to update Options. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - * @param {boolean} overwriteInitialConfig - should update the initial config or not - */ - - - _createClass(UpdateHelpers, [{ - key: "_updateOptions", - value: function _updateOptions(options) { - var _this = this; - - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - var charts = [this.ctx]; - - if (updateSyncedCharts) { - charts = this.ctx.getSyncedCharts(); - } - - if (this.ctx.w.globals.isExecCalled) { - // If the user called exec method, we don't want to get grouped charts as user specifically provided a chartID to update - charts = [this.ctx]; - this.ctx.w.globals.isExecCalled = false; - } - - charts.forEach(function (ch) { - var w = ch.w; - w.globals.shouldAnimate = animate; - - if (!redraw) { - w.globals.resized = true; - w.globals.dataChanged = true; - - if (animate) { - ch.series.getPreviousPaths(); - } - } - - if (options && _typeof(options) === 'object') { - ch.config = new Config(options); - options = CoreUtils.extendArrayProps(ch.config, options, w); // fixes #914, #623 - - if (ch.w.globals.chartID !== _this.ctx.w.globals.chartID) { - // don't overwrite series of synchronized charts - delete options.series; - } - - w.config = Utils.extend(w.config, options); - - if (overwriteInitialConfig) { - // we need to forget the lastXAxis and lastYAxis is user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user. - w.globals.lastXAxis = []; - w.globals.lastYAxis = []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries - - w.globals.initialConfig = Utils.extend({}, w.config); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - } - - return ch.update(options); - }); - } - /** - * Private method to update Series. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "_updateSeries", - value: function _updateSeries(newSeries, animate) { - var _this2 = this; - - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var w = this.w; - w.globals.shouldAnimate = animate; - w.globals.dataChanged = true; - - if (animate) { - this.ctx.series.getPreviousPaths(); - } - - var existingSeries; // axis charts - - if (w.globals.axisCharts) { - existingSeries = newSeries.map(function (s, i) { - return _this2._extendSeries(s, i); - }); - - if (existingSeries.length === 0) { - existingSeries = [{ - data: [] - }]; - } - - w.config.series = existingSeries; - } else { - // non-axis chart (pie/radialbar) - w.config.series = newSeries.slice(); - } - - if (overwriteInitialSeries) { - w.globals.initialConfig.series = JSON.parse(JSON.stringify(w.config.series)); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - - return this.ctx.update(); - } - }, { - key: "_extendSeries", - value: function _extendSeries(s, i) { - var w = this.w; - return _objectSpread2({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - } - }, { - key: "toggleDataPointSelection", - value: function toggleDataPointSelection(seriesIndex, dataPointIndex) { - var w = this.w; - var elPath = null; - var parent = ".apexcharts-series[data\\:realIndex='".concat(seriesIndex, "']"); - - if (w.globals.axisCharts) { - elPath = w.globals.dom.Paper.select("".concat(parent, " path[j='").concat(dataPointIndex, "'], ").concat(parent, " circle[j='").concat(dataPointIndex, "'], ").concat(parent, " rect[j='").concat(dataPointIndex, "']")).members[0]; - } else { - // dataPointIndex will be undefined here, hence using seriesIndex - if (typeof dataPointIndex === 'undefined') { - elPath = w.globals.dom.Paper.select("".concat(parent, " path[j='").concat(seriesIndex, "']")).members[0]; - - if (w.config.chart.type === 'pie' || w.config.chart.type === 'polarArea' || w.config.chart.type === 'donut') { - this.ctx.pie.pieClicked(seriesIndex); - } - } - } - - if (elPath) { - var graphics = new Graphics(this.ctx); - graphics.pathMouseDown(elPath, null); - } else { - console.warn('toggleDataPointSelection: Element not found'); - return null; - } - - return elPath.node ? elPath.node : null; - } - }, { - key: "forceXAxisUpdate", - value: function forceXAxisUpdate(options) { - var w = this.w; - var minmax = ['min', 'max']; - minmax.forEach(function (a) { - if (typeof options.xaxis[a] !== 'undefined') { - w.config.xaxis[a] = options.xaxis[a]; - w.globals.lastXAxis[a] = options.xaxis[a]; - } - }); - - if (options.xaxis.categories && options.xaxis.categories.length) { - w.config.xaxis.categories = options.xaxis.categories; - } - - if (w.config.xaxis.convertedCatToNumeric) { - var defaults = new Defaults(options); - options = defaults.convertCatToNumericXaxis(options, this.ctx); - } - - return options; - } - }, { - key: "forceYAxisUpdate", - value: function forceYAxisUpdate(options) { - var w = this.w; - - if (w.config.chart.stacked && w.config.chart.stackType === '100%') { - if (Array.isArray(options.yaxis)) { - options.yaxis.forEach(function (yaxe, index) { - options.yaxis[index].min = 0; - options.yaxis[index].max = 100; - }); - } else { - options.yaxis.min = 0; - options.yaxis.max = 100; - } - } - - return options; - } - /** - * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined. - * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max - * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally - */ - - }, { - key: "revertDefaultAxisMinMax", - value: function revertDefaultAxisMinMax() { - var _this3 = this; - - var w = this.w; - w.config.xaxis.min = w.globals.lastXAxis.min; - w.config.xaxis.max = w.globals.lastXAxis.max; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.zoomed) { - // user has zoomed, check the last yaxis - if (typeof w.globals.lastYAxis[index] !== 'undefined') { - yaxe.min = w.globals.lastYAxis[index].min; - yaxe.max = w.globals.lastYAxis[index].max; - } - } else { - // user hasn't zoomed, check the original yaxis - if (typeof _this3.ctx.opts.yaxis[index] !== 'undefined') { - yaxe.min = _this3.ctx.opts.yaxis[index].min; - yaxe.max = _this3.ctx.opts.yaxis[index].max; - } - } - }); - } - }]); - - return UpdateHelpers; - }(); - - (function (root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(function () { - return factory(root, root.document); - }); - /* below check fixes #412 */ - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { - module.exports = root.document ? factory(root, root.document) : function (w) { - return factory(w, w.document); - }; - } else { - root.SVG = factory(root, root.document); - } - })(typeof window !== 'undefined' ? window : undefined, function (window, document) { - // Find global reference - uses 'this' by default when available, - // falls back to 'window' otherwise (for bundlers like Webpack) - var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element - - var SVG = globalRef.SVG = function (element) { - if (SVG.supported) { - element = new SVG.Doc(element); - - if (!SVG.parser.draw) { - SVG.prepare(); - } - - return element; - } - }; // Default namespaces - - - SVG.ns = 'http://www.w3.org/2000/svg'; - SVG.xmlns = 'http://www.w3.org/2000/xmlns/'; - SVG.xlink = 'http://www.w3.org/1999/xlink'; - SVG.svgjs = 'http://svgjs.com/svgjs'; // Svg support test - - SVG.supported = function () { - return true; // !!document.createElementNS && - // !! document.createElementNS(SVG.ns,'svg').createSVGRect - }(); // Don't bother to continue if SVG is not supported - - - if (!SVG.supported) return false; // Element id sequence - - SVG.did = 1000; // Get next named element id - - SVG.eid = function (name) { - return 'Svgjs' + capitalize(name) + SVG.did++; - }; // Method for element creation - - - SVG.create = function (name) { - // create element - var element = document.createElementNS(this.ns, name); // apply unique id - - element.setAttribute('id', this.eid(name)); - return element; - }; // Method for extending objects - - - SVG.extend = function () { - var modules, methods; // Get list of modules - - modules = [].slice.call(arguments); // Get object with extensions - - methods = modules.pop(); - - for (var i = modules.length - 1; i >= 0; i--) { - if (modules[i]) { - for (var key in methods) { - modules[i].prototype[key] = methods[key]; - } - } - } // Make sure SVG.Set inherits any newly added methods - - - if (SVG.Set && SVG.Set.inherit) { - SVG.Set.inherit(); - } - }; // Invent new element - - - SVG.invent = function (config) { - // Create element initializer - var initializer = typeof config.create === 'function' ? config.create : function () { - this.constructor.call(this, SVG.create(config.create)); - }; // Inherit prototype - - if (config.inherit) { - initializer.prototype = new config.inherit(); - } // Extend with methods - - - if (config.extend) { - SVG.extend(initializer, config.extend); - } // Attach construct method to parent - - - if (config.construct) { - SVG.extend(config.parent || SVG.Container, config.construct); - } - - return initializer; - }; // Adopt existing svg elements - - - SVG.adopt = function (node) { - // check for presence of node - if (!node) return null; // make sure a node isn't already adopted - - if (node.instance) return node.instance; // initialize variables - - var element; // adopt with element-specific settings - - if (node.nodeName == 'svg') { - element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc(); - } else if (node.nodeName == 'linearGradient') { - element = new SVG.Gradient('linear'); - } else if (node.nodeName == 'radialGradient') { - element = new SVG.Gradient('radial'); - } else if (SVG[capitalize(node.nodeName)]) { - element = new SVG[capitalize(node.nodeName)](); - } else { - element = new SVG.Element(node); - } // ensure references - - - element.type = node.nodeName; - element.node = node; - node.instance = element; // SVG.Class specific preparations - - if (element instanceof SVG.Doc) { - element.namespace().defs(); - } // pull svgjs data from the dom (getAttributeNS doesn't work in html5) - - - element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {}); - return element; - }; // Initialize parsing element - - - SVG.prepare = function () { - // Select document body and create invisible svg element - var body = document.getElementsByTagName('body')[0], - draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object - - SVG.parser = { - body: body || document.documentElement, - draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node, - poly: draw.polyline().node, - path: draw.path().node, - native: SVG.create('svg') - }; - }; - - SVG.parser = { - native: SVG.create('svg') - }; - document.addEventListener('DOMContentLoaded', function () { - if (!SVG.parser.draw) { - SVG.prepare(); - } - }, false); // Storage for regular expressions - - SVG.regex = { - // Parse unit value - numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, - // Parse hex value - hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, - // Parse rgb value - rgb: /rgb\((\d+),(\d+),(\d+)\)/, - // Parse reference id - reference: /#([a-z0-9\-_]+)/i, - // splits a transformation chain - transforms: /\)\s*,?\s*/, - // Whitespace - whitespace: /\s/g, - // Test hex value - isHex: /^#[a-f0-9]{3,6}$/i, - // Test rgb value - isRgb: /^rgb\(/, - // Test css declaration - isCss: /[^:]+:[^;]+;?/, - // Test for blank string - isBlank: /^(\s+)?$/, - // Test for numeric string - isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - // Test for percent value - isPercent: /^-?[\d\.]+%$/, - // Test for image url - isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, - // split at whitespace and comma - delimiter: /[\s,]+/, - // The following regex are used to parse the d attribute of a path - // Matches all hyphens which are not after an exponent - hyphen: /([^e])\-/gi, - // Replaces and tests for all path letters - pathLetters: /[MLHVCSQTAZ]/gi, - // yes we need this one, too - isPathLetter: /[MLHVCSQTAZ]/i, - // matches 0.154.23.45 - numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, - // matches . - dots: /\./g - }; - SVG.utils = { - // Map function - map: function map(array, block) { - var il = array.length, - result = []; - - for (var i = 0; i < il; i++) { - result.push(block(array[i])); - } - - return result; - }, - // Filter function - filter: function filter(array, block) { - var il = array.length, - result = []; - - for (var i = 0; i < il; i++) { - if (block(array[i])) { - result.push(array[i]); - } - } - - return result; - }, - filterSVGElements: function filterSVGElements(nodes) { - return this.filter(nodes, function (el) { - return el instanceof window.SVGElement; - }); - } - }; - SVG.defaults = { - // Default attribute values - attrs: { - // fill and stroke - 'fill-opacity': 1, - 'stroke-opacity': 1, - 'stroke-width': 0, - 'stroke-linejoin': 'miter', - 'stroke-linecap': 'butt', - fill: '#000000', - stroke: '#000000', - opacity: 1, - // position - x: 0, - y: 0, - cx: 0, - cy: 0, - // size - width: 0, - height: 0, - // radius - r: 0, - rx: 0, - ry: 0, - // gradient - offset: 0, - 'stop-opacity': 1, - 'stop-color': '#000000', - // text - 'font-size': 16, - 'font-family': 'Helvetica, Arial, sans-serif', - 'text-anchor': 'start' - } - }; // Module for color convertions - - SVG.Color = function (color) { - var match; // initialize defaults - - this.r = 0; - this.g = 0; - this.b = 0; - if (!color) return; // parse color - - if (typeof color === 'string') { - if (SVG.regex.isRgb.test(color)) { - // get rgb values - match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values - - this.r = parseInt(match[1]); - this.g = parseInt(match[2]); - this.b = parseInt(match[3]); - } else if (SVG.regex.isHex.test(color)) { - // get hex values - match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values - - this.r = parseInt(match[1], 16); - this.g = parseInt(match[2], 16); - this.b = parseInt(match[3], 16); - } - } else if (_typeof(color) === 'object') { - this.r = color.r; - this.g = color.g; - this.b = color.b; - } - }; - - SVG.extend(SVG.Color, { - // Default to hex conversion - toString: function toString() { - return this.toHex(); - }, - // Build hex value - toHex: function toHex() { - return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b); - }, - // Build rgb value - toRgb: function toRgb() { - return 'rgb(' + [this.r, this.g, this.b].join() + ')'; - }, - // Calculate true brightness - brightness: function brightness() { - return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11; - }, - // Make color morphable - morph: function morph(color) { - this.destination = new SVG.Color(color); - return this; - }, - // Get morphed color at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // normalise pos - - pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color - - return new SVG.Color({ - r: ~~(this.r + (this.destination.r - this.r) * pos), - g: ~~(this.g + (this.destination.g - this.g) * pos), - b: ~~(this.b + (this.destination.b - this.b) * pos) - }); - } - }); // Testers - // Test if given value is a color string - - SVG.Color.test = function (color) { - color += ''; - return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color); - }; // Test if given value is a rgb object - - - SVG.Color.isRgb = function (color) { - return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number'; - }; // Test if given value is a color - - - SVG.Color.isColor = function (color) { - return SVG.Color.isRgb(color) || SVG.Color.test(color); - }; // Module for array conversion - - - SVG.Array = function (array, fallback) { - array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback - - if (array.length == 0 && fallback) { - array = fallback.valueOf(); - } // parse array - - - this.value = this.parse(array); - }; - - SVG.extend(SVG.Array, { - // Convert array to string - toString: function toString() { - return this.value.join(' '); - }, - // Real value - valueOf: function valueOf() { - return this.value; - }, - // Parse whitespace separated string - parse: function parse(array) { - array = array.valueOf(); // if already is an array, no need to parse it - - if (Array.isArray(array)) return array; - return this.split(array); - } - }); // Poly points array - - SVG.PointArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [[0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PointArray.prototype = new SVG.Array(); - SVG.PointArray.prototype.constructor = SVG.PointArray; - var pathHandlers = { - M: function M(c, p, p0) { - p.x = p0.x = c[0]; - p.y = p0.y = c[1]; - return ['M', p.x, p.y]; - }, - L: function L(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['L', c[0], c[1]]; - }, - H: function H(c, p) { - p.x = c[0]; - return ['H', c[0]]; - }, - V: function V(c, p) { - p.y = c[0]; - return ['V', c[0]]; - }, - C: function C(c, p) { - p.x = c[4]; - p.y = c[5]; - return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]; - }, - Q: function Q(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['Q', c[0], c[1], c[2], c[3]]; - }, - Z: function Z(c, p, p0) { - p.x = p0.x; - p.y = p0.y; - return ['Z']; - } - }; - var mlhvqtcsa = 'mlhvqtcsaz'.split(''); - - for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) { - pathHandlers[mlhvqtcsa[i]] = function (i) { - return function (c, p, p0) { - if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') { - c[5] = c[5] + p.x, c[6] = c[6] + p.y; - } else { - for (var j = 0, jl = c.length; j < jl; ++j) { - c[j] = c[j] + (j % 2 ? p.y : p.x); - } - } - return pathHandlers[i](c, p, p0); - }; - }(mlhvqtcsa[i].toUpperCase()); - } // Path points array - - - SVG.PathArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [['M', 0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PathArray.prototype = new SVG.Array(); - SVG.PathArray.prototype.constructor = SVG.PathArray; - SVG.extend(SVG.PathArray, { - // Convert array to string - toString: function toString() { - return arrayToString(this.value); - }, - // Move path string - move: function move(x, y) { - // get bounding box of current situation - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; - return this; - }, - // Get morphed path array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; - var sourceArray = this.value, - destinationArray = this.destination.value, - array = [], - pathArray = new SVG.PathArray(), - il, - jl; // Animate has specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/paths.html#PathElement - - for (var i = 0, il = sourceArray.length; i < il; i++) { - array[i] = [sourceArray[i][0]]; - - for (var j = 1, jl = sourceArray[i].length; j < jl; j++) { - array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos; - } // For the two flags of the elliptical arc command, the SVG spec say: - // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true - // Elliptical arc command as an array followed by corresponding indexes: - // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y] - // 0 1 2 3 4 5 6 7 - - - if (array[i][0] === 'A') { - array[i][4] = +(array[i][4] != 0); - array[i][5] = +(array[i][5] != 0); - } - } // Directly modify the value of a path array, this is done this way for performance - - - pathArray.value = array; - return pathArray; - }, - // Absolutize and parse path to array - parse: function parse(array) { - // if it's already a patharray, no need to parse it - if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing - - var s, - arr, - paramCnt = { - 'M': 2, - 'L': 2, - 'H': 1, - 'V': 1, - 'C': 6, - 'S': 4, - 'Q': 4, - 'T': 2, - 'A': 7, - 'Z': 0 - }; - - if (typeof array === 'string') { - array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123 - .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers - .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen - .trim() // trim - .split(SVG.regex.delimiter); // split into array - } else { - array = array.reduce(function (prev, curr) { - return [].concat.call(prev, curr); - }, []); - } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...] - - - var arr = [], - p = new SVG.Point(), - p0 = new SVG.Point(), - index = 0, - len = array.length; - - do { - // Test if we have a path letter - if (SVG.regex.isPathLetter.test(array[index])) { - s = array[index]; - ++index; // If last letter was a move command and we got no new, it defaults to [L]ine - } else if (s == 'M') { - s = 'L'; - } else if (s == 'm') { - s = 'l'; - } - - arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0)); - } while (len > index); - - return arr; - }, - // Get bounding box of path - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.path.setAttribute('d', this.toString()); - return SVG.parser.path.getBBox(); - } - }); // Module for unit convertions - - SVG.Number = SVG.invent({ - // Initialize - create: function create(value, unit) { - // initialize defaults - this.value = 0; - this.unit = unit || ''; // parse value - - if (typeof value === 'number') { - // ensure a valid numeric value - this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value; - } else if (typeof value === 'string') { - unit = value.match(SVG.regex.numberAndUnit); - - if (unit) { - // make value numeric - this.value = parseFloat(unit[1]); // normalize - - if (unit[5] == '%') { - this.value /= 100; - } else if (unit[5] == 's') { - this.value *= 1000; - } // store unit - - - this.unit = unit[5]; - } - } else { - if (value instanceof SVG.Number) { - this.value = value.valueOf(); - this.unit = value.unit; - } - } - }, - // Add methods - extend: { - // Stringalize - toString: function toString() { - return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit; - }, - toJSON: function toJSON() { - return this.toString(); - }, - // Convert to primitive - valueOf: function valueOf() { - return this.value; - }, - // Add number - plus: function plus(number) { - number = new SVG.Number(number); - return new SVG.Number(this + number, this.unit || number.unit); - }, - // Subtract number - minus: function minus(number) { - number = new SVG.Number(number); - return new SVG.Number(this - number, this.unit || number.unit); - }, - // Multiply number - times: function times(number) { - number = new SVG.Number(number); - return new SVG.Number(this * number, this.unit || number.unit); - }, - // Divide number - divide: function divide(number) { - number = new SVG.Number(number); - return new SVG.Number(this / number, this.unit || number.unit); - }, - // Convert to different unit - to: function to(unit) { - var number = new SVG.Number(this); - - if (typeof unit === 'string') { - number.unit = unit; - } - - return number; - }, - // Make number morphable - morph: function morph(number) { - this.destination = new SVG.Number(number); - - if (number.relative) { - this.destination.value += this.value; - } - - return this; - }, - // Get morphed number at given position - at: function at(pos) { - // Make sure a destination is defined - if (!this.destination) return this; // Generate new morphed number - - return new SVG.Number(this.destination).minus(this).times(pos).plus(this); - } - } - }); - SVG.Element = SVG.invent({ - // Initialize node - create: function create(node) { - // make stroke value accessible dynamically - this._stroke = SVG.defaults.attrs.stroke; - this._event = null; // initialize data object - - this.dom = {}; // create circular reference - - if (this.node = node) { - this.type = node.nodeName; - this.node.instance = this; // store current attribute value - - this._stroke = node.getAttribute('stroke') || this._stroke; - } - }, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x) { - return this.attr('x', _x); - }, - // Move over y-axis - y: function y(_y) { - return this.attr('y', _y); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2); - }, - // Move element to given x and y values - move: function move(x, y) { - return this.x(x).y(y); - }, - // Move element by its center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Set width of element - width: function width(_width) { - return this.attr('width', _width); - }, - // Set height of element - height: function height(_height) { - return this.attr('height', _height); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height)); - }, - // Clone element - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // clone element and assign new id - - var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) parent.add(clone);else this.after(clone); - return clone; - }, - // Remove element - remove: function remove() { - if (this.parent()) { - this.parent().removeElement(this); - } - - return this; - }, - // Replace element - replace: function replace(element) { - this.after(element).remove(); - return element; - }, - // Add element to given container and return self - addTo: function addTo(parent) { - return parent.put(this); - }, - // Add element to given container and return container - putIn: function putIn(parent) { - return parent.add(this); - }, - // Get / set id - id: function id(_id) { - return this.attr('id', _id); - }, - // Show element - show: function show() { - return this.style('display', ''); - }, - // Hide element - hide: function hide() { - return this.style('display', 'none'); - }, - // Is element visible? - visible: function visible() { - return this.style('display') != 'none'; - }, - // Return id on string conversion - toString: function toString() { - return this.attr('id'); - }, - // Return array of classes on the node - classes: function classes() { - var attr = this.attr('class'); - return attr == null ? [] : attr.trim().split(SVG.regex.delimiter); - }, - // Return true if class exists on the node, false otherwise - hasClass: function hasClass(name) { - return this.classes().indexOf(name) != -1; - }, - // Add class to the node - addClass: function addClass(name) { - if (!this.hasClass(name)) { - var array = this.classes(); - array.push(name); - this.attr('class', array.join(' ')); - } - - return this; - }, - // Remove class from the node - removeClass: function removeClass(name) { - if (this.hasClass(name)) { - this.attr('class', this.classes().filter(function (c) { - return c != name; - }).join(' ')); - } - - return this; - }, - // Toggle the presence of a class on the node - toggleClass: function toggleClass(name) { - return this.hasClass(name) ? this.removeClass(name) : this.addClass(name); - }, - // Get referenced element form attribute value - reference: function reference(attr) { - return SVG.get(this.attr(attr)); - }, - // Returns the parent element instance - parent: function parent(type) { - var parent = this; // check for parent - - if (!parent.node.parentNode) return null; // get parent element - - parent = SVG.adopt(parent.node.parentNode); - if (!type) return parent; // loop trough ancestors if type is given - - while (parent && parent.node instanceof window.SVGElement) { - if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent; - if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720 - - parent = SVG.adopt(parent.node.parentNode); - } - }, - // Get parent document - doc: function doc() { - return this instanceof SVG.Doc ? this : this.parent(SVG.Doc); - }, - // return array of all ancestors of given type up to the root svg - parents: function parents(type) { - var parents = [], - parent = this; - - do { - parent = parent.parent(type); - if (!parent || !parent.node) break; - parents.push(parent); - } while (parent.parent); - - return parents; - }, - // matches the element vs a css selector - matches: function matches(selector) { - return _matches(this.node, selector); - }, - // Returns the svg node to call native svg methods on it - native: function native() { - return this.node; - }, - // Import raw svg - svg: function svg(_svg) { - // create temporary holder - var well = document.createElement('svg'); // act as a setter if svg is given - - if (_svg && this instanceof SVG.Parent) { - // dump raw svg - well.innerHTML = '' + _svg.replace(/\n/, '').replace(/<([\w:-]+)([^<]+?)\/>/g, '<$1$2>') + ''; // transplant nodes - - for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) { - this.node.appendChild(well.firstChild.firstChild); - } // otherwise act as a getter - - } else { - // create a wrapping svg element in case of partial content - well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom - - this.writeDataToDom(); // insert a copy of this node - - _svg.appendChild(this.node.cloneNode(true)); // return target element - - - return well.innerHTML.replace(/^/, '').replace(/<\/svg>$/, ''); - } - - return this; - }, - // write svgjs data to the dom - writeDataToDom: function writeDataToDom() { - // dump variables recursively - if (this.each || this.lines) { - var fn = this.each ? this : this.lines(); - fn.each(function () { - this.writeDataToDom(); - }); - } // remove previously set data - - - this.node.removeAttribute('svgjs:data'); - - if (Object.keys(this.dom).length) { - this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); - } // see #428 - - - return this; - }, - // set given data to the elements data property - setData: function setData(o) { - this.dom = o; - return this; - }, - is: function is(obj) { - return _is(this, obj); - } - } - }); - SVG.easing = { - '-': function _(pos) { - return pos; - }, - '<>': function _(pos) { - return -Math.cos(pos * Math.PI) / 2 + 0.5; - }, - '>': function _(pos) { - return Math.sin(pos * Math.PI / 2); - }, - '<': function _(pos) { - return -Math.cos(pos * Math.PI / 2) + 1; - } - }; - - SVG.morph = function (pos) { - return function (from, to) { - return new SVG.MorphObj(from, to).at(pos); - }; - }; - - SVG.Situation = SVG.invent({ - create: function create(o) { - this.init = false; - this.reversed = false; - this.reversing = false; - this.duration = new SVG.Number(o.duration).valueOf(); - this.delay = new SVG.Number(o.delay).valueOf(); - this.start = +new Date() + this.delay; - this.finish = this.start + this.duration; - this.ease = o.ease; // this.loop is incremented from 0 to this.loops - // it is also incremented when in an infinite loop (when this.loops is true) - - this.loop = 0; - this.loops = false; - this.animations = {// functionToCall: [list of morphable objects] - // e.g. move: [SVG.Number, SVG.Number] - }; - this.attrs = {// holds all attributes which are not represented from a function svg.js provides - // e.g. someAttr: SVG.Number - }; - this.styles = {// holds all styles which should be animated - // e.g. fill-color: SVG.Color - }; - this.transforms = [// holds all transformations as transformation objects - // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix] - ]; - this.once = {// functions to fire at a specific position - // e.g. "0.5": function foo(){} - }; - } - }); - SVG.FX = SVG.invent({ - create: function create(element) { - this._target = element; - this.situations = []; - this.active = false; - this.situation = null; - this.paused = false; - this.lastPos = 0; - this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops) - // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1 - - this.absPos = 0; - this._speed = 1; - }, - extend: { - /** - * sets or returns the target of this animation - * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation - * @param ease function || string Function which should be used for easing or easing keyword - * @param delay Number indicating the delay before the animation starts - * @return target || this - */ - animate: function animate(o, ease, delay) { - if (_typeof(o) === 'object') { - ease = o.ease; - delay = o.delay; - o = o.duration; - } - - var situation = new SVG.Situation({ - duration: o || 1000, - delay: delay || 0, - ease: SVG.easing[ease || '-'] || ease - }); - this.queue(situation); - return this; - }, - - /** - * sets a delay before the next element of the queue is called - * @param delay Duration of delay in milliseconds - * @return this.target() - */ - - /** - * sets or returns the target of this animation - * @param null || target SVG.Element which should be set as new target - * @return target || this - */ - target: function target(_target) { - if (_target && _target instanceof SVG.Element) { - this._target = _target; - return this; - } - - return this._target; - }, - // returns the absolute position at a given time - timeToAbsPos: function timeToAbsPos(timestamp) { - return (timestamp - this.situation.start) / (this.situation.duration / this._speed); - }, - // returns the timestamp from a given absolute positon - absPosToTime: function absPosToTime(absPos) { - return this.situation.duration / this._speed * absPos + this.situation.start; - }, - // starts the animationloop - startAnimFrame: function startAnimFrame() { - this.stopAnimFrame(); - this.animationFrame = window.requestAnimationFrame(function () { - this.step(); - }.bind(this)); - }, - // cancels the animationframe - stopAnimFrame: function stopAnimFrame() { - window.cancelAnimationFrame(this.animationFrame); - }, - // kicks off the animation - only does something when the queue is currently not active and at least one situation is set - start: function start() { - // dont start if already started - if (!this.active && this.situation) { - this.active = true; - this.startCurrent(); - } - - return this; - }, - // start the current situation - startCurrent: function startCurrent() { - this.situation.start = +new Date() + this.situation.delay / this._speed; - this.situation.finish = this.situation.start + this.situation.duration / this._speed; - return this.initAnimations().step(); - }, - - /** - * adds a function / Situation to the animation queue - * @param fn function / situation to add - * @return this - */ - queue: function queue(fn) { - if (typeof fn === 'function' || fn instanceof SVG.Situation) { - this.situations.push(fn); - } - - if (!this.situation) this.situation = this.situations.shift(); - return this; - }, - - /** - * pulls next element from the queue and execute it - * @return this - */ - dequeue: function dequeue() { - // stop current animation - this.stop(); // get next animation from queue - - this.situation = this.situations.shift(); - - if (this.situation) { - if (this.situation instanceof SVG.Situation) { - this.start(); - } else { - // If it is not a SVG.Situation, then it is a function, we execute it - this.situation.call(this); - } - } - - return this; - }, - // updates all animations to the current state of the element - // this is important when one property could be changed from another property - initAnimations: function initAnimations() { - var source; - var s = this.situation; - if (s.init) return this; - - for (var i in s.animations) { - source = this.target()[i](); - - if (!Array.isArray(source)) { - source = [source]; - } - - if (!Array.isArray(s.animations[i])) { - s.animations[i] = [s.animations[i]]; - } // if(s.animations[i].length > source.length) { - // source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length)) - // } - - - for (var j = source.length; j--;) { - // The condition is because some methods return a normal number instead - // of a SVG.Number - if (s.animations[i][j] instanceof SVG.Number) { - source[j] = new SVG.Number(source[j]); - } - - s.animations[i][j] = source[j].morph(s.animations[i][j]); - } - } - - for (var i in s.attrs) { - s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]); - } - - for (var i in s.styles) { - s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]); - } - - s.initialTransformation = this.target().matrixify(); - s.init = true; - return this; - }, - clearQueue: function clearQueue() { - this.situations = []; - return this; - }, - clearCurrent: function clearCurrent() { - this.situation = null; - return this; - }, - - /** stops the animation immediately - * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. - * @param clearQueue A Boolean indicating whether to remove queued animation as well. - * @return this - */ - stop: function stop(jumpToEnd, clearQueue) { - var active = this.active; - this.active = false; - - if (clearQueue) { - this.clearQueue(); - } - - if (jumpToEnd && this.situation) { - // initialize the situation if it was not - !active && this.startCurrent(); - this.atEnd(); - } - - this.stopAnimFrame(); - return this.clearCurrent(); - }, - after: function after(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, c); - this.off('finished.fx', wrapper); // prevent memory leak - } - }; - - this.target().on('finished.fx', wrapper); - return this._callStart(); - }, - // adds a callback which is called whenever one animation step is performed - during: function during(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c); - } - }; // see above - - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.after(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - // calls after ALL animations in the queue are finished - afterAll: function afterAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this); - this.off('allfinished.fx', wrapper); - }; // see above - - - this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper); - return this._callStart(); - }, - last: function last() { - return this.situations.length ? this.situations[this.situations.length - 1] : this.situation; - }, - // adds one property to the animations - add: function add(method, args, type) { - this.last()[type || 'animations'][method] = args; - return this._callStart(); - }, - - /** perform one step of the animation - * @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time - * @return this - */ - step: function step(ignoreTime) { - // convert current time to an absolute position - if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position - - if (this.situation.loops !== false) { - var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0 - - absPos = Math.max(this.absPos, 0); - absPosInt = Math.floor(absPos); - - if (this.situation.loops === true || absPosInt < this.situation.loops) { - this.pos = absPos - absPosInt; - lastLoop = this.situation.loop; - this.situation.loop = absPosInt; - } else { - this.absPos = this.situation.loops; - this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed - - lastLoop = this.situation.loop - 1; - this.situation.loop = this.situation.loops; - } - - if (this.situation.reversing) { - // Toggle reversed if an odd number of loops as occured since the last call of step - this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2); - } - } else { - // If there are no loop, the absolute position must not be above 1 - this.absPos = Math.min(this.absPos, 1); - this.pos = this.absPos; - } // while the absolute position can be below 0, the position must not be below 0 - - - if (this.pos < 0) this.pos = 0; - if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing - - var eased = this.situation.ease(this.pos); // call once-callbacks - - for (var i in this.situation.once) { - if (i > this.lastPos && i <= eased) { - this.situation.once[i].call(this.target(), this.pos, eased); - delete this.situation.once[i]; - } - } // fire during callback with position, eased position and current situation as parameter - - - if (this.active) this.target().fire('during', { - pos: this.pos, - eased: eased, - fx: this, - situation: this.situation - }); // the user may call stop or finish in the during callback - // so make sure that we still have a valid situation - - if (!this.situation) { - return this; - } // apply the actual animation to every property - - - this.eachAt(); // do final code when situation is finished - - if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) { - // stop animation callback - this.stopAnimFrame(); // fire finished callback with current situation as parameter - - this.target().fire('finished', { - fx: this, - situation: this.situation - }); - - if (!this.situations.length) { - this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback - - if (!this.situations.length) { - this.target().off('.fx'); // there shouldnt be any binding left, but to make sure... - - this.active = false; - } - } // start next animation - - - if (this.active) this.dequeue();else this.clearCurrent(); - } else if (!this.paused && this.active) { - // we continue animating when we are not at the end - this.startAnimFrame(); - } // save last eased position for once callback triggering - - - this.lastPos = eased; - return this; - }, - // calculates the step for every property and calls block with it - eachAt: function eachAt() { - var len, - at, - self = this, - target = this.target(), - s = this.situation; // apply animations which can be called trough a method - - for (var i in s.animations) { - at = [].concat(s.animations[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target[i].apply(target, at); - } // apply animation which has to be applied with attr() - - - for (var i in s.attrs) { - at = [i].concat(s.attrs[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.attr.apply(target, at); - } // apply animation which has to be applied with style() - - - for (var i in s.styles) { - at = [i].concat(s.styles[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.style.apply(target, at); - } // animate initialTransformation which has to be chained - - - if (s.transforms.length) { - // get initial initialTransformation - at = s.initialTransformation; - - for (var i = 0, len = s.transforms.length; i < len; i++) { - // get next transformation in chain - var a = s.transforms[i]; // multiply matrix directly - - if (a instanceof SVG.Matrix) { - if (a.relative) { - at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos))); - } else { - at = at.morph(a).at(s.ease(this.pos)); - } - - continue; - } // when transformation is absolute we have to reset the needed transformation first - - - if (!a.relative) { - a.undo(at.extract()); - } // and reapply it after - - - at = at.multiply(a.at(s.ease(this.pos))); - } // set new matrix on element - - - target.matrix(at); - } - - return this; - }, - // adds an once-callback which is called at a specific position and never again - once: function once(pos, fn, isEased) { - var c = this.last(); - if (!isEased) pos = c.ease(pos); - c.once[pos] = fn; - return this; - }, - _callStart: function _callStart() { - setTimeout(function () { - this.start(); - }.bind(this), 0); - return this; - } - }, - parent: SVG.Element, - // Add method to parent elements - construct: { - // Get fx module or create a new one, then animate with given duration and ease - animate: function animate(o, ease, delay) { - return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay); - }, - delay: function delay(_delay) { - return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay); - }, - stop: function stop(jumpToEnd, clearQueue) { - if (this.fx) { - this.fx.stop(jumpToEnd, clearQueue); - } - - return this; - }, - finish: function finish() { - if (this.fx) { - this.fx.finish(); - } - - return this; - } - } - }); // MorphObj is used whenever no morphable object is given - - SVG.MorphObj = SVG.invent({ - create: function create(from, to) { - // prepare color for morphing - if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values - - if (SVG.regex.delimiter.test(from)) { - // prepare path for morphing - if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing - else return new SVG.Array(from).morph(to); - } // prepare number for morphing - - - if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing - - this.value = from; - this.destination = to; - }, - extend: { - at: function at(pos, real) { - return real < 1 ? this.value : this.destination; - }, - valueOf: function valueOf() { - return this.value; - } - } - }); - SVG.extend(SVG.FX, { - // Add animatable attributes - attr: function attr(a, v, relative) { - // apply attributes individually - if (_typeof(a) === 'object') { - for (var key in a) { - this.attr(key, a[key]); - } - } else { - this.add(a, v, 'attrs'); - } - - return this; - }, - // Add animatable plot - plot: function plot(a, b, c, d) { - // Lines can be plotted with 4 arguments - if (arguments.length == 4) { - return this.plot([a, b, c, d]); - } - - return this.add('plot', new (this.target().morphArray)(a)); - } - }); - SVG.Box = SVG.invent({ - create: function create(x, y, width, height) { - if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) { - // chromes getBoundingClientRect has no x and y property - return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height); - } else if (arguments.length == 4) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } // add center, right, bottom... - - - fullBox(this); - } - }); - SVG.BBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given - - if (element instanceof SVG.Element) { - var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered - - try { - if (!document.documentElement.contains) { - // This is IE - it does not support contains() for top-level SVGs - var topParent = element.node; - - while (topParent.parentNode) { - topParent = topParent.parentNode; - } - - if (topParent != document) throw new Error('Element not in the dom'); - } else {} // the element is NOT in the dom, throw error - // disabling the check below which fixes issue #76 - // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom') - // find native bbox - - - box = element.node.getBBox(); - } catch (e) { - if (element instanceof SVG.Shape) { - if (!SVG.parser.draw) { - // fixes apexcharts/vue-apexcharts #14 - SVG.prepare(); - } - - var clone = element.clone(SVG.parser.draw.instance).show(); - box = clone.node.getBBox(); - clone.remove(); - } else { - box = { - x: element.node.clientLeft, - y: element.node.clientTop, - width: element.node.clientWidth, - height: element.node.clientHeight - }; - } - } - - SVG.Box.call(this, box); - } - }, - // Define ancestor - inherit: SVG.Box, - // Define Parent - parent: SVG.Element, - // Constructor - construct: { - // Get bounding box - bbox: function bbox() { - return new SVG.BBox(this); - } - } - }); - SVG.BBox.prototype.constructor = SVG.BBox; - SVG.Matrix = SVG.invent({ - // Initialize - create: function create(source) { - var base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object - - source = source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : _typeof(source) === 'object' ? source : base; // merge source - - for (var i = abcdef.length - 1; i >= 0; --i) { - this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]]; - } - }, - // Add methods - extend: { - // Extract individual transformations - extract: function extract() { - // find delta transform points - var px = deltaTransformPoint(this, 0, 1), - py = deltaTransformPoint(this, 1, 0), - skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90; - return { - // translation - x: this.e, - y: this.f, - transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), - transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), - // rotation - rotation: skewX, - a: this.a, - b: this.b, - c: this.c, - d: this.d, - e: this.e, - f: this.f, - matrix: new SVG.Matrix(this) - }; - }, - // Clone matrix - clone: function clone() { - return new SVG.Matrix(this); - }, - // Morph one matrix into another - morph: function morph(matrix) { - // store new destination - this.destination = new SVG.Matrix(matrix); - return this; - }, - // Multiplies by given matrix - multiply: function multiply(matrix) { - return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native())); - }, - // Inverses matrix - inverse: function inverse() { - return new SVG.Matrix(this.native().inverse()); - }, - // Translate matrix - translate: function translate(x, y) { - return new SVG.Matrix(this.native().translate(x || 0, y || 0)); - }, - // Convert to native SVGMatrix - native: function native() { - // create new matrix - var matrix = SVG.parser.native.createSVGMatrix(); // update with current values - - for (var i = abcdef.length - 1; i >= 0; i--) { - matrix[abcdef[i]] = this[abcdef[i]]; - } - - return matrix; - }, - // Convert matrix to string - toString: function toString() { - // Construct the matrix directly, avoid values that are too small - return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')'; - } - }, - // Define parent - parent: SVG.Element, - // Add parent method - construct: { - // Get current matrix - ctm: function ctm() { - return new SVG.Matrix(this.node.getCTM()); - }, - // Get current screen matrix - screenCTM: function screenCTM() { - /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537 - This is needed because FF does not return the transformation matrix - for the inner coordinate system when getScreenCTM() is called on nested svgs. - However all other Browsers do that */ - if (this instanceof SVG.Nested) { - var rect = this.rect(1, 1); - var m = rect.node.getScreenCTM(); - rect.remove(); - return new SVG.Matrix(m); - } - - return new SVG.Matrix(this.node.getScreenCTM()); - } - } - }); - SVG.Point = SVG.invent({ - // Initialize - create: function create(x, y) { - var source, - base = { - x: 0, - y: 0 - }; // ensure source as object - - source = Array.isArray(x) ? { - x: x[0], - y: x[1] - } : _typeof(x) === 'object' ? { - x: x.x, - y: x.y - } : x != null ? { - x: x, - y: y != null ? y : x - } : base; // If y has no value, then x is used has its value - // merge source - - this.x = source.x; - this.y = source.y; - }, - // Add methods - extend: { - // Clone point - clone: function clone() { - return new SVG.Point(this); - }, - // Morph one point into another - morph: function morph(x, y) { - // store new destination - this.destination = new SVG.Point(x, y); - return this; - } - } - }); - SVG.extend(SVG.Element, { - // Get point - point: function point(x, y) { - return new SVG.Point(x, y).transform(this.screenCTM().inverse()); - } - }); - SVG.extend(SVG.Element, { - // Set svg element attribute - attr: function attr(a, v, n) { - // act as full getter - if (a == null) { - // get an object of attributes - a = {}; - v = this.node.attributes; - - for (var n = v.length - 1; n >= 0; n--) { - a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue; - } - - return a; - } else if (_typeof(a) === 'object') { - // apply every attribute individually if an object is passed - for (var v_ in a) { - this.attr(v_, a[v_]); - } - } else if (v === null) { - // remove value - this.node.removeAttribute(a); - } else if (v == null) { - // act as a getter if the first and only argument is not an object - v = this.node.getAttribute(a); - return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v; - } else { - // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0 - if (a == 'stroke-width') { - this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null); - } else if (a == 'stroke') { - this._stroke = v; - } // convert image fill and stroke to patterns - - - if (a == 'fill' || a == 'stroke') { - if (SVG.regex.isImage.test(v)) { - v = this.doc().defs().image(v, 0, 0); - } - - if (v instanceof SVG.Image) { - v = this.doc().defs().pattern(0, 0, function () { - this.add(v); - }); - } - } // ensure correct numeric values (also accepts NaN and Infinity) - - - if (typeof v === 'number') { - v = new SVG.Number(v); - } // ensure full hex color - else if (SVG.Color.isColor(v)) { - v = new SVG.Color(v); - } // parse array values - else if (Array.isArray(v)) { - v = new SVG.Array(v); - } // if the passed attribute is leading... - - - if (a == 'leading') { - // ... call the leading method instead - if (this.leading) { - this.leading(v); - } - } else { - // set given attribute on node - typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString()); - } // rebuild if required - - - if (this.rebuild && (a == 'font-size' || a == 'x')) { - this.rebuild(a, v); - } - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Add transformations - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this, - matrix; - // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // get current matrix - - - matrix = new SVG.Matrix(target); // ensure relative flag - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = relative // relative - ? matrix.multiply(new SVG.Matrix(o)) // absolute - : new SVG.Matrix(o); - } - - return this.attr('transform', matrix); - } - }); - SVG.extend(SVG.Element, { - // Reset all transformations - untransform: function untransform() { - return this.attr('transform', null); - }, - // merge the whole transformation chain into one matrix and returns it - matrixify: function matrixify() { - var matrix = (this.attr('transform') || ''). // split transformations - split(SVG.regex.transforms).slice(0, -1).map(function (str) { - // generate key => value pairs - var kv = str.trim().split('('); - return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { - return parseFloat(str); - })]; - }) // merge every transformation into one matrix - .reduce(function (matrix, transform) { - if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1])); - return matrix[transform[0]].apply(matrix, transform[1]); - }, new SVG.Matrix()); - return matrix; - }, - // add an element to another parent without changing the visual representation on the screen - toParent: function toParent(parent) { - if (this == parent) return this; - var ctm = this.screenCTM(); - var pCtm = parent.screenCTM().inverse(); - this.addTo(parent).untransform().transform(pCtm.multiply(ctm)); - return this; - }, - // same as above with parent equals root-svg - toDoc: function toDoc() { - return this.toParent(this.doc()); - } - }); - SVG.Transformation = SVG.invent({ - create: function create(source, inversed) { - if (arguments.length > 1 && typeof inversed !== 'boolean') { - return this.constructor.call(this, [].slice.call(arguments)); - } - - if (Array.isArray(source)) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[i]; - } - } else if (_typeof(source) === 'object') { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[this.arguments[i]]; - } - } - - this.inversed = false; - - if (inversed === true) { - this.inversed = true; - } - } - }); - SVG.Translate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['transformedX', 'transformedY'], - method: 'translate' - } - }); - SVG.extend(SVG.Element, { - // Dynamic style generator - style: function style(s, v) { - if (arguments.length == 0) { - // get full style - return this.node.style.cssText || ''; - } else if (arguments.length < 2) { - // apply every style individually if an object is passed - if (_typeof(s) === 'object') { - for (var v_ in s) { - this.style(v_, s[v_]); - } - } else if (SVG.regex.isCss.test(s)) { - // parse css string - s = s.split(/\s*;\s*/) // filter out suffix ; and stuff like ;; - .filter(function (e) { - return !!e; - }).map(function (e) { - return e.split(/\s*:\s*/); - }); // apply every definition individually - - while (v = s.pop()) { - this.style(v[0], v[1]); - } - } else { - // act as a getter if the first and only argument is not an object - return this.node.style[camelCase(s)]; - } - } else { - this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v; - } - - return this; - } - }); - SVG.Parent = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // Returns all child elements - children: function children() { - return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) { - return SVG.adopt(node); - }); - }, - // Add given element at a position - add: function add(element, i) { - if (i == null) { - this.node.appendChild(element.node); - } else if (element.node != this.node.childNodes[i]) { - this.node.insertBefore(element.node, this.node.childNodes[i]); - } - - return this; - }, - // Basically does the same as `add()` but returns the added element instead - put: function put(element, i) { - this.add(element, i); - return element; - }, - // Checks if the given element is a child - has: function has(element) { - return this.index(element) >= 0; - }, - // Gets index of given element - index: function index(element) { - return [].slice.call(this.node.childNodes).indexOf(element.node); - }, - // Get a element at the given index - get: function get(i) { - return SVG.adopt(this.node.childNodes[i]); - }, - // Get first child - first: function first() { - return this.get(0); - }, - // Get the last child - last: function last() { - return this.get(this.node.childNodes.length - 1); - }, - // Iterates over all children and invokes a given block - each: function each(block, deep) { - var il, - children = this.children(); - - for (var i = 0, il = children.length; i < il; i++) { - if (children[i] instanceof SVG.Element) { - block.apply(children[i], [i, children]); - } - - if (deep && children[i] instanceof SVG.Container) { - children[i].each(block, deep); - } - } - - return this; - }, - // Remove a given child - removeElement: function removeElement(element) { - this.node.removeChild(element.node); - return this; - }, - // Remove all elements in this container - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; - return this; - }, - // Get defs - defs: function defs() { - return this.doc().defs(); - } - } - }); - SVG.extend(SVG.Parent, { - ungroup: function ungroup(parent, depth) { - if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this; - parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent)); - depth = depth || Infinity; - this.each(function () { - if (this instanceof SVG.Defs) return this; - if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1); - return this.toParent(parent); - }); - this.node.firstChild || this.remove(); - return this; - }, - flatten: function flatten(parent, depth) { - return this.ungroup(parent, depth); - } - }); - SVG.Container = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Parent - }); - SVG.ViewBox = SVG.invent({ - // Define parent - parent: SVG.Container, - // Add parent method - construct: {} - }) // Add events to elements - ; - ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE - // , 'mouseleave' -> not supported by IE - 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) { - // add event to SVG.Element - SVG.Element.prototype[event] = function (f) { - // bind event to element rather than element node - SVG.on(this.node, event, f); - return this; - }; - }); // Initialize listeners stack - - SVG.listeners = []; - SVG.handlerMap = []; - SVG.listenerId = 0; // Add event binder in the SVG namespace - - SVG.on = function (node, event, listener, binding, options) { - // create listener, get object-index - var l = listener.bind(binding || node.instance || node), - index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1, - ev = event.split('.')[0], - ns = event.split('.')[1] || '*'; // ensure valid object - - SVG.listeners[index] = SVG.listeners[index] || {}; - SVG.listeners[index][ev] = SVG.listeners[index][ev] || {}; - SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {}; - - if (!listener._svgjsListenerId) { - listener._svgjsListenerId = ++SVG.listenerId; - } // reference listener - - - SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener - - node.addEventListener(ev, l, options || false); - }; // Add event unbinder in the SVG namespace - - - SVG.off = function (node, event, listener) { - var index = SVG.handlerMap.indexOf(node), - ev = event && event.split('.')[0], - ns = event && event.split('.')[1], - namespace = ''; - if (index == -1) return; - - if (listener) { - if (typeof listener === 'function') listener = listener._svgjsListenerId; - if (!listener) return; // remove listener reference - - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) { - // remove listener - node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false); - delete SVG.listeners[index][ev][ns || '*'][listener]; - } - } else if (ns && ev) { - // remove all listeners for a namespaced event - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) { - for (var listener_ in SVG.listeners[index][ev][ns]) { - SVG.off(node, [ev, ns].join('.'), listener_); - } - - delete SVG.listeners[index][ev][ns]; - } - } else if (ns) { - // remove all listeners for a specific namespace - for (var event_ in SVG.listeners[index]) { - for (var namespace in SVG.listeners[index][event_]) { - if (ns === namespace) { - SVG.off(node, [event_, ns].join('.')); - } - } - } - } else if (ev) { - // remove all listeners for the event - if (SVG.listeners[index][ev]) { - for (var namespace in SVG.listeners[index][ev]) { - SVG.off(node, [ev, namespace].join('.')); - } - - delete SVG.listeners[index][ev]; - } - } else { - // remove all listeners on a given node - for (var event_ in SVG.listeners[index]) { - SVG.off(node, event_); - } - - delete SVG.listeners[index]; - delete SVG.handlerMap[index]; - } - }; // - - - SVG.extend(SVG.Element, { - // Bind given event to listener - on: function on(event, listener, binding, options) { - SVG.on(this.node, event, listener, binding, options); - return this; - }, - // Unbind event from listener - off: function off(event, listener) { - SVG.off(this.node, event, listener); - return this; - }, - // Fire given event - fire: function fire(event, data) { - // Dispatch event - if (event instanceof window.Event) { - this.node.dispatchEvent(event); - } else { - this.node.dispatchEvent(event = new SVG.CustomEvent(event, { - detail: data, - cancelable: true - })); - } - - this._event = event; - return this; - }, - event: function event() { - return this._event; - } - }); - SVG.Defs = SVG.invent({ - // Initialize node - create: 'defs', - // Inherit from - inherit: SVG.Container - }); - SVG.G = SVG.invent({ - // Initialize node - create: 'g', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x2) { - return _x2 == null ? this.transform('x') : this.transform({ - x: _x2 - this.x() - }, true); - } - }, - // Add parent method - construct: { - // Create a group element - group: function group() { - return this.put(new SVG.G()); - } - } - }); - SVG.Doc = SVG.invent({ - // Initialize node - create: function create(element) { - if (element) { - // ensure the presence of a dom element - element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper. - // This allows svg.js to work with svg documents as well. - - if (element.nodeName == 'svg') { - this.constructor.call(this, element); - } else { - this.constructor.call(this, SVG.create('svg')); - element.appendChild(this.node); - this.size('100%', '100%'); - } // set svg element attributes and ensure defs node - - - this.namespace().defs(); - } - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add namespaces - namespace: function namespace() { - return this.attr({ - xmlns: SVG.ns, - version: '1.1' - }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns); - }, - // Creates and returns defs element - defs: function defs() { - if (!this._defs) { - var defs; // Find or create a defs element in this instance - - if (defs = this.node.getElementsByTagName('defs')[0]) { - this._defs = SVG.adopt(defs); - } else { - this._defs = new SVG.Defs(); - } // Make sure the defs node is at the end of the stack - - - this.node.appendChild(this._defs.node); - } - - return this._defs; - }, - // custom parent method - parent: function parent() { - if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null; - return this.node.parentNode; - }, - // Removes the doc from the DOM - remove: function remove() { - if (this.parent()) { - this.parent().removeChild(this.node); - } - - return this; - }, - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; // add back parser - - if (SVG.parser.draw && !SVG.parser.draw.parentNode) { - this.node.appendChild(SVG.parser.draw); - } - - return this; - }, - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // get reference to node - - var node = this.node; // clone element and assign new id - - var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) { - (parent.node || parent).appendChild(clone.node); - } else { - node.parentNode.insertBefore(clone.node, node.nextSibling); - } - - return clone; - } - } - }); // ### This module adds backward / forward functionality to elements. - // - - SVG.extend(SVG.Element, {// Get all siblings, including myself - }); - SVG.Gradient = SVG.invent({ - // Initialize node - create: function create(type) { - this.constructor.call(this, SVG.create(type + 'Gradient')); // store type - - this.type = type; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add a color stop - at: function at(offset, color, opacity) { - return this.put(new SVG.Stop()).update(offset, color, opacity); - }, - // Update gradient - update: function update(block) { - // remove all stops - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'gradientTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create gradient element in defs - gradient: function gradient(type, block) { - return this.defs().gradient(type, block); - } - } - }); // Add animatable methods to both gradient and fx module - - SVG.extend(SVG.Gradient, SVG.FX, { - // From position - from: function from(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - fx: new SVG.Number(x), - fy: new SVG.Number(y) - }) : this.attr({ - x1: new SVG.Number(x), - y1: new SVG.Number(y) - }); - }, - // To position - to: function to(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - cx: new SVG.Number(x), - cy: new SVG.Number(y) - }) : this.attr({ - x2: new SVG.Number(x), - y2: new SVG.Number(y) - }); - } - }); // Base gradient generation - - SVG.extend(SVG.Defs, { - // define gradient - gradient: function gradient(type, block) { - return this.put(new SVG.Gradient(type)).update(block); - } - }); - SVG.Stop = SVG.invent({ - // Initialize node - create: 'stop', - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // add color stops - update: function update(o) { - if (typeof o === 'number' || o instanceof SVG.Number) { - o = { - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }; - } // set attributes - - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', new SVG.Number(o.offset)); - return this; - } - } - }); - SVG.Pattern = SVG.invent({ - // Initialize node - create: 'pattern', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Update pattern by rebuilding - update: function update(block) { - // remove content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'patternTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create pattern element in defs - pattern: function pattern(width, height, block) { - return this.defs().pattern(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Define gradient - pattern: function pattern(width, height, block) { - return this.put(new SVG.Pattern()).update(block).attr({ - x: 0, - y: 0, - width: width, - height: height, - patternUnits: 'userSpaceOnUse' - }); - } - }); - SVG.Shape = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element - }); - SVG.Symbol = SVG.invent({ - // Initialize node - create: 'symbol', - // Inherit from - inherit: SVG.Container, - construct: { - // create symbol - symbol: function symbol() { - return this.put(new SVG.Symbol()); - } - } - }); - SVG.Use = SVG.invent({ - // Initialize node - create: 'use', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Use element as a reference - element: function element(_element, file) { - // Set lined element - return this.attr('href', (file || '') + '#' + _element, SVG.xlink); - } - }, - // Add parent method - construct: { - // Create a use element - use: function use(element, file) { - return this.put(new SVG.Use()).element(element, file); - } - } - }); - SVG.Rect = SVG.invent({ - // Initialize node - create: 'rect', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a rect element - rect: function rect(width, height) { - return this.put(new SVG.Rect()).size(width, height); - } - } - }); - SVG.Circle = SVG.invent({ - // Initialize node - create: 'circle', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create circle element, based on ellipse - circle: function circle(size) { - return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0); - } - } - }); - SVG.extend(SVG.Circle, SVG.FX, { - // Radius x value - rx: function rx(_rx) { - return this.attr('r', _rx); - }, - // Alias radius x value - ry: function ry(_ry) { - return this.rx(_ry); - } - }); - SVG.Ellipse = SVG.invent({ - // Initialize node - create: 'ellipse', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create an ellipse - ellipse: function ellipse(width, height) { - return this.put(new SVG.Ellipse()).size(width, height).move(0, 0); - } - } - }); - SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, { - // Radius x value - rx: function rx(_rx2) { - return this.attr('rx', _rx2); - }, - // Radius y value - ry: function ry(_ry2) { - return this.attr('ry', _ry2); - } - }); // Add common method - - SVG.extend(SVG.Circle, SVG.Ellipse, { - // Move over x-axis - x: function x(_x3) { - return _x3 == null ? this.cx() - this.rx() : this.cx(_x3 + this.rx()); - }, - // Move over y-axis - y: function y(_y2) { - return _y2 == null ? this.cy() - this.ry() : this.cy(_y2 + this.ry()); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.attr('cx') : this.attr('cx', x); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.attr('cy') : this.attr('cy', y); - }, - // Set width of element - width: function width(_width2) { - return _width2 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width2).divide(2)); - }, - // Set height of element - height: function height(_height2) { - return _height2 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height2).divide(2)); - }, - // Custom size function - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2)); - } - }); - SVG.Line = SVG.invent({ - // Initialize node - create: 'line', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Get array - array: function array() { - return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]); - }, - // Overwrite native plot() method - plot: function plot(x1, y1, x2, y2) { - if (x1 == null) { - return this.array(); - } else if (typeof y1 !== 'undefined') { - x1 = { - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }; - } else { - x1 = new SVG.PointArray(x1).toLine(); - } - - return this.attr(x1); - }, - // Move by left top corner - move: function move(x, y) { - return this.attr(this.array().move(x, y).toLine()); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr(this.array().size(p.width, p.height).toLine()); - } - }, - // Add parent method - construct: { - // Create a line element - line: function line(x1, y1, x2, y2) { - // make sure plot is called as a setter - // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray - return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]); - } - } - }); - SVG.Polyline = SVG.invent({ - // Initialize node - create: 'polyline', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polyline element - polyline: function polyline(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray()); - } - } - }); - SVG.Polygon = SVG.invent({ - // Initialize node - create: 'polygon', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polygon element - polygon: function polygon(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray()); - } - } - }); // Add polygon-specific functions - - SVG.extend(SVG.Polyline, SVG.Polygon, { - // Get array - array: function array() { - return this._array || (this._array = new SVG.PointArray(this.attr('points'))); - }, - // Plot new path - plot: function plot(p) { - return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('points', this.array().move(x, y)); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('points', this.array().size(p.width, p.height)); - } - }); // unify all point to point elements - - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, { - // Define morphable array - morphArray: SVG.PointArray, - // Move by left top corner over x-axis - x: function x(_x4) { - return _x4 == null ? this.bbox().x : this.move(_x4, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y3) { - return _y3 == null ? this.bbox().y : this.move(this.bbox().x, _y3); - }, - // Set width of element - width: function width(_width3) { - var b = this.bbox(); - return _width3 == null ? b.width : this.size(_width3, b.height); - }, - // Set height of element - height: function height(_height3) { - var b = this.bbox(); - return _height3 == null ? b.height : this.size(b.width, _height3); - } - }); - SVG.Path = SVG.invent({ - // Initialize node - create: 'path', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Define morphable array - morphArray: SVG.PathArray, - // Get array - array: function array() { - return this._array || (this._array = new SVG.PathArray(this.attr('d'))); - }, - // Plot new path - plot: function plot(d) { - return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - } - }, - // Add parent method - construct: { - // Create a wrapped path element - path: function path(d) { - // make sure plot is called as a setter - return this.put(new SVG.Path()).plot(d || new SVG.PathArray()); - } - } - }); - SVG.Image = SVG.invent({ - // Initialize node - create: 'image', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // (re)load image - load: function load(url) { - if (!url) return this; - var self = this, - img = new window.Image(); // preload image - - SVG.on(img, 'load', function () { - SVG.off(img); - var p = self.parent(SVG.Pattern); - if (p === null) return; // ensure image size - - if (self.width() == 0 && self.height() == 0) { - self.size(img.width, img.height); - } // ensure pattern size if not set - - - if (p && p.width() == 0 && p.height() == 0) { - p.size(self.width(), self.height()); - } // callback - - - if (typeof self._loaded === 'function') { - self._loaded.call(self, { - width: img.width, - height: img.height, - ratio: img.width / img.height, - url: url - }); - } - }); - SVG.on(img, 'error', function (e) { - SVG.off(img); - - if (typeof self._error === 'function') { - self._error.call(self, e); - } - }); - return this.attr('href', img.src = this.src = url, SVG.xlink); - }, - // Add loaded callback - loaded: function loaded(_loaded) { - this._loaded = _loaded; - return this; - }, - error: function error(_error) { - this._error = _error; - return this; - } - }, - // Add parent method - construct: { - // create image element, load image and set its size - image: function image(source, width, height) { - return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0); - } - } - }); - SVG.Text = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('text')); - this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding - - this._rebuild = true; // enable automatic updating of dy values - - this._build = false; // disable build mode for adding multiple lines - // set default font - - this.attr('font-family', SVG.defaults.attrs['font-family']); - }, - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x5) { - // act as getter - if (_x5 == null) { - return this.attr('x'); - } - - return this.attr('x', _x5); - }, - // Set the text content - text: function text(_text) { - // act as getter - if (typeof _text === 'undefined') { - var _text = ''; - var children = this.node.childNodes; - - for (var i = 0, len = children.length; i < len; ++i) { - // add newline if its not the first child and newLined is set to true - if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) { - _text += '\n'; - } // add content of this node - - - _text += children[i].textContent; - } - - return _text; - } // remove existing content - - - this.clear().build(true); - - if (typeof _text === 'function') { - // call block - _text.call(this, this); - } else { - // store text and make sure text is not blank - _text = _text.split('\n'); // build new lines - - for (var i = 0, il = _text.length; i < il; i++) { - this.tspan(_text[i]).newLine(); - } - } // disable build mode and rebuild lines - - - return this.build(false).rebuild(); - }, - // Set font size - size: function size(_size) { - return this.attr('font-size', _size).rebuild(); - }, - // Set / get leading - leading: function leading(value) { - // act as getter - if (value == null) { - return this.dom.leading; - } // act as setter - - - this.dom.leading = new SVG.Number(value); - return this.rebuild(); - }, - // Get all the first level lines - lines: function lines() { - var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances - - var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) { - return SVG.adopt(el); - }); // return an instance of SVG.set - - return new SVG.Set(lines); - }, - // Rebuild appearance type - rebuild: function rebuild(_rebuild) { - // store new rebuild flag if given - if (typeof _rebuild === 'boolean') { - this._rebuild = _rebuild; - } // define position of all lines - - - if (this._rebuild) { - var self = this, - blankLineOffset = 0, - dy = this.dom.leading * new SVG.Number(this.attr('font-size')); - this.lines().each(function () { - if (this.dom.newLined) { - if (!self.textPath()) { - this.attr('x', self.attr('x')); - } - - if (this.text() == '\n') { - blankLineOffset += dy; - } else { - this.attr('dy', dy + blankLineOffset); - blankLineOffset = 0; - } - } - }); - this.fire('rebuild'); - } - - return this; - }, - // Enable / disable build mode - build: function build(_build) { - this._build = !!_build; - return this; - }, - // overwrite method from parent to set data properly - setData: function setData(o) { - this.dom = o; - this.dom.leading = new SVG.Number(o.leading || 1.3); - return this; - } - }, - // Add parent method - construct: { - // Create text element - text: function text(_text2) { - return this.put(new SVG.Text()).text(_text2); - }, - // Create plain text element - plain: function plain(text) { - return this.put(new SVG.Text()).plain(text); - } - } - }); - SVG.Tspan = SVG.invent({ - // Initialize node - create: 'tspan', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Set text content - text: function text(_text3) { - if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\n' : ''); - typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3); - return this; - }, - // Shortcut dx - dx: function dx(_dx) { - return this.attr('dx', _dx); - }, - // Shortcut dy - dy: function dy(_dy) { - return this.attr('dy', _dy); - }, - // Create new line - newLine: function newLine() { - // fetch text parent - var t = this.parent(SVG.Text); // mark new line - - this.dom.newLined = true; // apply new hy¡n - - return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x()); - } - } - }); - SVG.extend(SVG.Text, SVG.Tspan, { - // Create plain text node - plain: function plain(text) { - // clear if build mode is disabled - if (this._build === false) { - this.clear(); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - }, - // Create a tspan - tspan: function tspan(text) { - var node = (this.textPath && this.textPath() || this).node, - tspan = new SVG.Tspan(); // clear if build mode is disabled - - if (this._build === false) { - this.clear(); - } // add new tspan - - - node.appendChild(tspan.node); - return tspan.text(text); - }, - // Clear all lines - clear: function clear() { - var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes - - while (node.hasChildNodes()) { - node.removeChild(node.lastChild); - } - - return this; - }, - // Get length of text element - length: function length() { - return this.node.getComputedTextLength(); - } - }); - SVG.TextPath = SVG.invent({ - // Initialize node - create: 'textPath', - // Inherit from - inherit: SVG.Parent, - // Define parent class - parent: SVG.Text, - // Add parent method - construct: { - morphArray: SVG.PathArray, - // return the array of the path track element - array: function array() { - var track = this.track(); - return track ? track.array() : null; - }, - // Plot path if any - plot: function plot(d) { - var track = this.track(), - pathArray = null; - - if (track) { - pathArray = track.plot(d); - } - - return d == null ? pathArray : this; - }, - // Get the path track element - track: function track() { - var path = this.textPath(); - - if (path) { - return path.reference('href'); - } - }, - // Get the textPath child - textPath: function textPath() { - if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') { - return SVG.adopt(this.node.firstChild); - } - } - } - }); - SVG.Nested = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('svg')); - this.style('overflow', 'visible'); - }, - // Inherit from - inherit: SVG.Container, - // Add parent method - construct: { - // Create nested svg document - nested: function nested() { - return this.put(new SVG.Nested()); - } - } - }); // Define list of available attributes for stroke and fill - - var sugar = { - stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'], - fill: ['color', 'opacity', 'rule'], - prefix: function prefix(t, a) { - return a == 'color' ? t : t + '-' + a; - } - } // Add sugar for fill and stroke - ; - ['fill', 'stroke'].forEach(function (m) { - var extension = {}; - - extension[m] = function (o) { - if (typeof o === 'undefined') { - return this; - } - - if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') { - this.attr(m, o); - } else // set all attributes from sugar.fill and sugar.stroke list - { - for (var i = sugar[m].length - 1; i >= 0; i--) { - if (o[sugar[m][i]] != null) { - this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]); - } - } - } - - return this; - }; - - SVG.extend(SVG.Element, SVG.FX, extension); - }); - SVG.extend(SVG.Element, SVG.FX, { - // Map translate to transform - translate: function translate(x, y) { - return this.transform({ - x: x, - y: y - }); - }, - // Map matrix to transform - matrix: function matrix(m) { - return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m)); - }, - // Opacity - opacity: function opacity(value) { - return this.attr('opacity', value); - }, - // Relative move over x axis - dx: function dx(x) { - return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true); - }, - // Relative move over y axis - dy: function dy(y) { - return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true); - } - }); - SVG.extend(SVG.Path, { - // Get path length - length: function length() { - return this.node.getTotalLength(); - }, - // Get point at length - pointAt: function pointAt(length) { - return this.node.getPointAtLength(length); - } - }); - SVG.Set = SVG.invent({ - // Initialize - create: function create(members) { - // Set initial state - Array.isArray(members) ? this.members = members : this.clear(); - }, - // Add class methods - extend: { - // Add element to set - add: function add() { - var il, - elements = [].slice.call(arguments); - - for (var i = 0, il = elements.length; i < il; i++) { - this.members.push(elements[i]); - } - - return this; - }, - // Remove element from set - remove: function remove(element) { - var i = this.index(element); // remove given child - - if (i > -1) { - this.members.splice(i, 1); - } - - return this; - }, - // Iterate over all members - each: function each(block) { - for (var i = 0, il = this.members.length; i < il; i++) { - block.apply(this.members[i], [i, this.members]); - } - - return this; - }, - // Restore to defaults - clear: function clear() { - // initialize store - this.members = []; - return this; - }, - // Get the length of a set - length: function length() { - return this.members.length; - }, - // Checks if a given element is present in set - has: function has(element) { - return this.index(element) >= 0; - }, - // retuns index of given element in set - index: function index(element) { - return this.members.indexOf(element); - }, - // Get member at given index - get: function get(i) { - return this.members[i]; - }, - // Get first member - first: function first() { - return this.get(0); - }, - // Get last member - last: function last() { - return this.get(this.members.length - 1); - }, - // Default value - valueOf: function valueOf() { - return this.members; - } - }, - // Add parent method - construct: { - // Create a new set - set: function set(members) { - return new SVG.Set(members); - } - } - }); - SVG.FX.Set = SVG.invent({ - // Initialize node - create: function create(set) { - // store reference to set - this.set = set; - } - }); // Alias methods - - SVG.Set.inherit = function () { - var methods = []; // gather shape methods - - for (var m in SVG.Shape.prototype) { - if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply shape aliasses - - - methods.forEach(function (method) { - SVG.Set.prototype[method] = function () { - for (var i = 0, il = this.members.length; i < il; i++) { - if (this.members[i] && typeof this.members[i][method] === 'function') { - this.members[i][method].apply(this.members[i], arguments); - } - } - - return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this; - }; - }); // clear methods for the next round - - methods = []; // gather fx methods - - for (var m in SVG.FX.prototype) { - if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply fx aliasses - - - methods.forEach(function (method) { - SVG.FX.Set.prototype[method] = function () { - for (var i = 0, il = this.set.members.length; i < il; i++) { - this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments); - } - - return this; - }; - }); - }; - - SVG.extend(SVG.Element, {}); - SVG.extend(SVG.Element, { - // Remember arbitrary data - remember: function remember(k, v) { - // remember every item in an object individually - if (_typeof(arguments[0]) === 'object') { - for (var v_ in k) { - this.remember(v_, k[v_]); - } - } // retrieve memory - else if (arguments.length == 1) { - return this.memory()[k]; - } // store memory - else { - this.memory()[k] = v; - } - - return this; - }, - // Erase a given memory - forget: function forget() { - if (arguments.length == 0) { - this._memory = {}; - } else { - for (var i = arguments.length - 1; i >= 0; i--) { - delete this.memory()[arguments[i]]; - } - } - - return this; - }, - // Initialize or return local memory object - memory: function memory() { - return this._memory || (this._memory = {}); - } - }); // Method for getting an element by id - - SVG.get = function (id) { - var node = document.getElementById(idFromReference(id) || id); - return SVG.adopt(node); - }; // Select elements by query string - - - SVG.select = function (query, parent) { - return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) { - return SVG.adopt(node); - })); - }; - - SVG.extend(SVG.Parent, { - // Scoped select method - select: function select(query) { - return SVG.select(query, this.node); - } - }); - - function pathRegReplace(a, b, c, d) { - return c + d.replace(SVG.regex.dots, ' .'); - } // creates deep clone of array - - - function _is(el, obj) { - return el instanceof obj; - } // tests if a given selector matches an element - - - function _matches(el, selector) { - return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); - } // Convert dash-separated-string to camelCase - - - function camelCase(s) { - return s.toLowerCase().replace(/-(.)/g, function (m, g) { - return g.toUpperCase(); - }); - } // Capitalize first letter of a string - - - function capitalize(s) { - return s.charAt(0).toUpperCase() + s.slice(1); - } // Ensure to six-based hex - - - function fullHex(hex) { - return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex; - } // Component to hex value - - - function compToHex(comp) { - var hex = comp.toString(16); - return hex.length == 1 ? '0' + hex : hex; - } // Calculate proportional width and height values when necessary - - - function proportionalSize(element, width, height) { - if (width == null || height == null) { - var box = element.bbox(); - - if (width == null) { - width = box.width / box.height * height; - } else if (height == null) { - height = box.height / box.width * width; - } - } - - return { - width: width, - height: height - }; - } // Delta transform point - - - function deltaTransformPoint(matrix, x, y) { - return { - x: x * matrix.a + y * matrix.c + 0, - y: x * matrix.b + y * matrix.d + 0 - }; - } // Map matrix array to object - - - function arrayToMatrix(a) { - return { - a: a[0], - b: a[1], - c: a[2], - d: a[3], - e: a[4], - f: a[5] - }; - } // Parse matrix if required - - - function parseMatrix(matrix) { - if (!(matrix instanceof SVG.Matrix)) { - matrix = new SVG.Matrix(matrix); - } - - return matrix; - } // Add centre point to transform object - - - function arrayToString(a) { - for (var i = 0, il = a.length, s = ''; i < il; i++) { - s += a[i][0]; - - if (a[i][1] != null) { - s += a[i][1]; - - if (a[i][2] != null) { - s += ' '; - s += a[i][2]; - - if (a[i][3] != null) { - s += ' '; - s += a[i][3]; - s += ' '; - s += a[i][4]; - - if (a[i][5] != null) { - s += ' '; - s += a[i][5]; - s += ' '; - s += a[i][6]; - - if (a[i][7] != null) { - s += ' '; - s += a[i][7]; - } - } - } - } - } - } - - return s + ' '; - } // Deep new id assignment - - - function assignNewId(node) { - // do the same for SVG child nodes as well - for (var i = node.childNodes.length - 1; i >= 0; i--) { - if (node.childNodes[i] instanceof window.SVGElement) { - assignNewId(node.childNodes[i]); - } - } - - return SVG.adopt(node).id(SVG.eid(node.nodeName)); - } // Add more bounding box properties - - - function fullBox(b) { - if (b.x == null) { - b.x = 0; - b.y = 0; - b.width = 0; - b.height = 0; - } - - b.w = b.width; - b.h = b.height; - b.x2 = b.x + b.width; - b.y2 = b.y + b.height; - b.cx = b.x + b.width / 2; - b.cy = b.y + b.height / 2; - return b; - } // Get id from reference string - - - function idFromReference(url) { - var m = (url || '').toString().match(SVG.regex.reference); - if (m) return m[1]; - } // If values like 1e-88 are passed, this is not a valid 32 bit float, - // but in those cases, we are so close to 0 that 0 works well! - - - function float32String(v) { - return Math.abs(v) > 1e-37 ? v : 0; - } // Create matrix array for looping - - - var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10 - - if (typeof window.CustomEvent !== 'function') { - // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent - var CustomEventPoly = function CustomEventPoly(event, options) { - options = options || { - bubbles: false, - cancelable: false, - detail: undefined - }; - var e = document.createEvent('CustomEvent'); - e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail); - return e; - }; - - CustomEventPoly.prototype = window.Event.prototype; - SVG.CustomEvent = CustomEventPoly; - } else { - SVG.CustomEvent = window.CustomEvent; - } - - return SVG; - }); - - /*! svg.filter.js - v2.0.2 - 2016-02-24 - * https://github.com/wout/svg.filter.js - * Copyright (c) 2016 Wout Fierens; Licensed MIT */ - (function() { - - // Main filter class - SVG.Filter = SVG.invent({ - create: 'filter', - inherit: SVG.Parent, - extend: { - // Static strings - source: 'SourceGraphic', - sourceAlpha: 'SourceAlpha', - background: 'BackgroundImage', - backgroundAlpha: 'BackgroundAlpha', - fill: 'FillPaint', - stroke: 'StrokePaint', - - autoSetIn: true, - // Custom put method for leaner code - put: function(element, i) { - this.add(element, i); - - if(!element.attr('in') && this.autoSetIn){ - element.attr('in',this.source); - } - if(!element.attr('result')){ - element.attr('result',element); - } - - return element - }, - // Blend effect - blend: function(in1, in2, mode) { - return this.put(new SVG.BlendEffect(in1, in2, mode)) - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.put(new SVG.ColorMatrixEffect(type, values)) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.put(new SVG.ConvolveMatrixEffect(matrix)) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.put(new SVG.ComponentTransferEffect(components)) - }, - // Composite effect - composite: function(in1, in2, operator) { - return this.put(new SVG.CompositeEffect(in1, in2, operator)) - }, - // Flood effect - flood: function(color, opacity) { - return this.put(new SVG.FloodEffect(color, opacity)) - }, - // Offset effect - offset: function(x, y) { - return this.put(new SVG.OffsetEffect(x,y)) - }, - // Image effect - image: function(src) { - return this.put(new SVG.ImageEffect(src)) - }, - // Merge effect - merge: function() { - //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments - var args = [undefined]; - for(var i in arguments) args.push(arguments[i]); - return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args))) - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.put(new SVG.GaussianBlurEffect(x,y)) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.put(new SVG.MorphologyEffect(operator,radius)) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength)) - }, - // DisplacementMap effect - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector)) - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength)) - }, - // Tile effect - tile: function(){ - return this.put(new SVG.TileEffect()); - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type)) - }, - // Default string value - toString: function() { - return 'url(#' + this.attr('id') + ')' - } - } - }); - - //add .filter function - SVG.extend(SVG.Defs, { - // Define filter - filter: function(block) { - var filter = this.put(new SVG.Filter); - - /* invoke passed block */ - if (typeof block === 'function') - block.call(filter, filter); - - return filter - } - }); - SVG.extend(SVG.Container, { - // Define filter on defs - filter: function(block) { - return this.defs().filter(block) - } - }); - SVG.extend(SVG.Element, SVG.G, SVG.Nested, { - // Create filter element in defs and store reference - filter: function(block) { - this.filterer = block instanceof SVG.Element ? - block : this.doc().filter(block); - - if(this.doc() && this.filterer.doc() !== this.doc()){ - this.doc().defs().add(this.filterer); - } - - this.attr('filter', this.filterer); - - return this.filterer - }, - // Remove filter - unfilter: function(remove) { - /* also remove the filter node */ - if (this.filterer && remove === true) - this.filterer.remove(); - - /* delete reference to filterer */ - delete this.filterer; - - /* remove filter attribute */ - return this.attr('filter', null) - } - }); - - // Create SVG.Effect class - SVG.Effect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - // create class for parent effects like merge - // Inherit from SVG.Parent - SVG.ParentEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Parent, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - //chaining - var chainingEffects = { - // Blend effect - blend: function(in2, mode) { - return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.parent() && this.parent().colorMatrix(type, values).in(this) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.parent() && this.parent().convolveMatrix(matrix).in(this) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.parent() && this.parent().componentTransfer(components).in(this) - }, - // Composite effect - composite: function(in2, operator) { - return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input - }, - // Flood effect - flood: function(color, opacity) { - return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs - }, - // Offset effect - offset: function(x, y) { - return this.parent() && this.parent().offset(x,y).in(this) - }, - // Image effect - image: function(src) { - return this.parent() && this.parent().image(src) //this effect dont have inputs - }, - // Merge effect - merge: function() { - return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.parent() && this.parent().gaussianBlur(x,y).in(this) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.parent() && this.parent().morphology(operator,radius).in(this) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this) - }, - // DisplacementMap effect - displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){ - return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this) - }, - // Tile effect - tile: function(){ - return this.parent() && this.parent().tile().in(this) - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this) - } - }; - SVG.extend(SVG.Effect,chainingEffects); - SVG.extend(SVG.ParentEffect,chainingEffects); - - //crea class for child effects, like MergeNode, FuncR and lights - SVG.ChildEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - in: function(effect){ - this.attr('in',effect); - } - //dont include any "result" functions because these types of nodes dont have them - } - }); - - // Create all different effects - var effects = { - blend: function(in1,in2,mode){ - this.attr({ - in: in1, - in2: in2, - mode: mode || 'normal' - }); - }, - colorMatrix: function(type,values){ - if (type == 'matrix') - values = normaliseMatrix(values); - - this.attr({ - type: type - , values: typeof values == 'undefined' ? null : values - }); - }, - convolveMatrix: function(matrix){ - matrix = normaliseMatrix(matrix); - - this.attr({ - order: Math.sqrt(matrix.split(' ').length) - , kernelMatrix: matrix - }); - }, - composite: function(in1, in2, operator){ - this.attr({ - in: in1, - in2: in2, - operator: operator - }); - }, - flood: function(color,opacity){ - this.attr('flood-color',color); - if(opacity != null) this.attr('flood-opacity',opacity); - }, - offset: function(x,y){ - this.attr({ - dx: x, - dy: y - }); - }, - image: function(src){ - this.attr('href', src, SVG.xlink); - }, - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - this.attr({ - in: in1, - in2: in2, - scale: scale, - xChannelSelector: xChannelSelector, - yChannelSelector: yChannelSelector - }); - }, - gaussianBlur: function(x,y){ - if(x != null || y != null) - this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments))); - else - this.attr('stdDeviation', '0 0'); - }, - morphology: function(operator,radius){ - this.attr({ - operator: operator, - radius: radius - }); - }, - tile: function(){ - - }, - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - this.attr({ - numOctaves: numOctaves, - seed: seed, - stitchTiles: stitchTiles, - baseFrequency: baseFrequency, - type: type - }); - } - }; - - // Create all parent effects - var parentEffects = { - merge: function(){ - var children; - - //test to see if we have a set - if(arguments[0] instanceof SVG.Set){ - var that = this; - arguments[0].each(function(i){ - if(this instanceof SVG.MergeNode) - that.put(this); - else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect) - that.put(new SVG.MergeNode(this)); - }); - } - else{ - //if the first argument is an array use it - if(Array.isArray(arguments[0])) - children = arguments[0]; - else - children = arguments; - - for(var i = 0; i < children.length; i++){ - if(children[i] instanceof SVG.MergeNode){ - this.put(children[i]); - } - else this.put(new SVG.MergeNode(children[i])); - } - } - }, - componentTransfer: function(compontents){ - /* create rgb set */ - this.rgb = new SVG.Set - - /* create components */ - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create component */ - this[c] = new SVG['Func' + c.toUpperCase()]('identity'); - - /* store component in set */ - this.rgb.add(this[c]); - - /* add component node */ - this.node.appendChild(this[c].node); - }.bind(this)); //lost context in foreach - - /* set components */ - if (compontents) { - if (compontents.rgb) { - (['r', 'g', 'b']).forEach(function(c) { - this[c].attr(compontents.rgb); - }.bind(this)); - - delete compontents.rgb; - } - - /* set individual components */ - for (var c in compontents) - this[c].attr(compontents[c]); - } - }, - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - kernelUnitLength: kernelUnitLength - }); - }, - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - specularExponent: specularExponent, - kernelUnitLength: kernelUnitLength - }); - }, - }; - - // Create child effects like PointLight and MergeNode - var childEffects = { - distantLight: function(azimuth, elevation){ - this.attr({ - azimuth: azimuth, - elevation: elevation - }); - }, - pointLight: function(x,y,z){ - this.attr({ - x: x, - y: y, - z: z - }); - }, - spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){ - this.attr({ - x: x, - y: y, - z: z, - pointsAtX: pointsAtX, - pointsAtY: pointsAtY, - pointsAtZ: pointsAtZ - }); - }, - mergeNode: function(in1){ - this.attr('in',in1); - } - } - - // Create compontent functions - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create class */ - childEffects['Func' + c.toUpperCase()] = function(type) { - this.attr('type',type); - - // take diffent arguments based on the type - switch(type){ - case 'table': - this.attr('tableValues',arguments[1]); - break - case 'linear': - this.attr('slope',arguments[1]); - this.attr('intercept',arguments[2]); - break - case 'gamma': - this.attr('amplitude',arguments[1]); - this.attr('exponent',arguments[2]); - this.attr('offset',arguments[2]); - break - } - }; - }); - - //create effects - foreach(effects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.Effect, - extend: proto - }); - }); - - //create parent effects - foreach(parentEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.ParentEffect, - extend: proto - }); - }); - - //create child effects - foreach(childEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - }, - inherit: SVG.ChildEffect, - extend: proto - }); - }); - - // Effect-specific extensions - SVG.extend(SVG.MergeEffect,{ - in: function(effect){ - if(effect instanceof SVG.MergeNode) - this.add(effect,0); - else - this.add(new SVG.MergeNode(effect),0); - - return this - } - }); - SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{ - in2: function(effect){ - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in2')+'"]').get(0) || this.attr('in2') : this.attr('in2', effect) - } - }); - - // Presets - SVG.filter = { - sepiatone: [ .343, .669, .119, 0, 0 - , .249, .626, .130, 0, 0 - , .172, .334, .111, 0, 0 - , .000, .000, .000, 1, 0 ] - }; - - // Helpers - function normaliseMatrix(matrix) { - /* convert possible array value to string */ - if (Array.isArray(matrix)) - matrix = new SVG.Array(matrix); - - /* ensure there are no leading, tailing or double spaces */ - return matrix.toString().replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/g, ' ') - } - - function listString(list) { - if (!Array.isArray(list)) - return list - - for (var i = 0, l = list.length, s = []; i < l; i++) - s.push(list[i]); - - return s.join(' ') - } - - function foreach(){ //loops through mutiple objects - var fn = function(){}; - if(typeof arguments[arguments.length-1] == 'function'){ - fn = arguments[arguments.length-1]; - Array.prototype.splice.call(arguments,arguments.length-1,1); - } - for(var k in arguments){ - for(var i in arguments[k]){ - fn(arguments[k][i],i,arguments[k]); - } - } - } - - }).call(undefined); - - (function() { - - SVG.extend(SVG.PathArray, { - morph: function(array) { - - var startArr = this.value - , destArr = this.parse(array); - - var startOffsetM = 0 - , destOffsetM = 0; - - var startOffsetNextM = false - , destOffsetNextM = false; - - while(true){ - // stop if there is no M anymore - if(startOffsetM === false && destOffsetM === false) break - - // find the next M in path array - startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1); - destOffsetNextM = findNextM( destArr, destOffsetM === false ? false : destOffsetM+1); - - // We have to add one M to the startArray - if(startOffsetM === false){ - var bbox = new SVG.PathArray(result.start).bbox(); - - // when the last block had no bounding box we simply take the first M we got - if(bbox.height == 0 || bbox.width == 0){ - startOffsetM = startArr.push(startArr[0]) - 1; - }else{ - // we take the middle of the bbox instead when we got one - startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // We have to add one M to the destArray - if( destOffsetM === false){ - var bbox = new SVG.PathArray(result.dest).bbox(); - - if(bbox.height == 0 || bbox.width == 0){ - destOffsetM = destArr.push(destArr[0]) - 1; - }else{ - destOffsetM = destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // handle block from M to next M - var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM); - - // update the arrays to their new values - startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)); - destArr = destArr.slice(0, destOffsetM).concat(result.dest , destOffsetNextM === false ? [] : destArr.slice( destOffsetNextM)); - - // update offsets - startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length; - destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length; - - } - - // copy back arrays - this.value = startArr; - this.destination = new SVG.PathArray(); - this.destination.value = destArr; - - return this - } - }); - - - - // sorry for the long declaration - // slices out one block (from M to M) and syncronize it so the types and length match - function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined$1){ - - // slice out the block we need - var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined$1) - , destArrTemp = destArr.slice( destOffsetM, destOffsetNextM || undefined$1); - - var i = 0 - , posStart = {pos:[0,0], start:[0,0]} - , posDest = {pos:[0,0], start:[0,0]}; - - do{ - - // convert shorthand types to long form - startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]); - destArrTemp[i] = simplyfy.call(posDest , destArrTemp[i]); - - // check if both shape types match - // 2 elliptical arc curve commands ('A'), are considered different if the - // flags (large-arc-flag, sweep-flag) don't match - if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' || - (startArrTemp[i][0] == 'A' && - (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5]) - ) - ) { - - // if not, convert shapes to beziere - Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i]))); - Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i]))); - - } else { - - // only update positions otherwise - startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]); - destArrTemp[i] = setPosAndReflection.call(posDest , destArrTemp[i]); - - } - - // we are at the end at both arrays. stop here - if(++i == startArrTemp.length && i == destArrTemp.length) break - - // destArray is longer. Add one element - if(i == startArrTemp.length){ - startArrTemp.push([ - 'C', - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - ]); - } - - // startArr is longer. Add one element - if(i == destArrTemp.length){ - destArrTemp.push([ - 'C', - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1] - ]); - } - - - }while(true) - - // return the updated block - return {start:startArrTemp, dest:destArrTemp} - } - - // converts shorthand types to long form - function simplyfy(val){ - - switch(val[0]){ - case 'z': // shorthand line to start - case 'Z': - val[0] = 'L'; - val[1] = this.start[0]; - val[2] = this.start[1]; - break - case 'H': // shorthand horizontal line - val[0] = 'L'; - val[2] = this.pos[1]; - break - case 'V': // shorthand vertical line - val[0] = 'L'; - val[2] = val[1]; - val[1] = this.pos[0]; - break - case 'T': // shorthand quadratic beziere - val[0] = 'Q'; - val[3] = val[1]; - val[4] = val[2]; - val[1] = this.reflection[1]; - val[2] = this.reflection[0]; - break - case 'S': // shorthand cubic beziere - val[0] = 'C'; - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[2]; - val[3] = val[1]; - val[2] = this.reflection[1]; - val[1] = this.reflection[0]; - break - } - - return val - - } - - // updates reflection point and current position - function setPosAndReflection(val){ - - var len = val.length; - - this.pos = [ val[len-2], val[len-1] ]; - - if('SCQT'.indexOf(val[0]) != -1) - this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ]; - - return val - } - - // converts all types to cubic beziere - function toBeziere(val){ - var retVal = [val]; - - switch(val[0]){ - case 'M': // special handling for M - this.pos = this.start = [val[1], val[2]]; - return retVal - case 'L': - val[5] = val[3] = val[1]; - val[6] = val[4] = val[2]; - val[1] = this.pos[0]; - val[2] = this.pos[1]; - break - case 'Q': - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[4] * 1/3 + val[2] * 2/3; - val[3] = val[3] * 1/3 + val[1] * 2/3; - val[2] = this.pos[1] * 1/3 + val[2] * 2/3; - val[1] = this.pos[0] * 1/3 + val[1] * 2/3; - break - case 'A': - retVal = arcToBeziere(this.pos, val); - val = retVal[0]; - break - } - - val[0] = 'C'; - this.pos = [val[5], val[6]]; - this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]]; - - return retVal - - } - - // finds the next position of type M - function findNextM(arr, offset){ - - if(offset === false) return false - - for(var i = offset, len = arr.length;i < len;++i){ - - if(arr[i][0] == 'M') return i - - } - - return false - } - - - - // Convert an arc segment into equivalent cubic Bezier curves - // Depending on the arc, up to 4 curves might be used to represent it since a - // curve gives a good approximation for only a quarter of an ellipse - // The curves are returned as an array of SVG curve commands: - // [ ['C', x1, y1, x2, y2, x, y] ... ] - function arcToBeziere(pos, val) { - // Parameters extraction, handle out-of-range parameters as specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters - var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360 - , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7] - , A = new SVG.Point(pos), B = new SVG.Point(x, y) - , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd - , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il - , retVal = [], x1, y1, x2, y2; - - // Ensure radii are non-zero - if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) { - // treat this arc as a straight line segment - return [['C', A.x, A.y, B.x, B.y, B.x, B.y]] - } - - // Ensure radii are large enough using the algorithm provided in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii - primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation)); - lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry); - if(lambda > 1) { - lambda = Math.sqrt(lambda); - rx = lambda*rx; - ry = lambda*ry; - } - - // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation); - A = A.transform(mat); - B = B.transform(mat); - - // Calculate the horizontal and vertical distance between the initial and final point of the arc - k = [B.x-A.x, B.y-A.y]; - - // Find the length of the chord formed by A and B - cSquare = k[0]*k[0] + k[1]*k[1]; - c = Math.sqrt(cSquare); - - // Calculate the ratios of the horizontal and vertical distance on the length of the chord - k[0] /= c; - k[1] /= c; - - // Calculate the distance between the circle center and the chord midpoint - // using this formula: t = sqrt(r^2 - c^2 / 4) - // where t is the distance between the cirle center and the chord midpoint, - // r is the rayon of the circle and c is the chord length - // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php - // Because of the imprecision of floating point numbers, cSquare might end - // up being slightly above 4 which would result in a negative radicand - // To prevent that, a test is made before computing the square root - t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0; - - // For most situations, there are actually two different ellipses that - // satisfy the constraints imposed by the points A and B, the radii rx and ry, - // and the xAxisRotation - // When the flags largeArcFlag and sweepFlag are equal, it means that the - // second ellipse is used as a solution - // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands - if(largeArcFlag === sweepFlag) { - t *= -1; - } - - // Calculate the coordinates of the center of the circle from the midpoint of the chord - // This is done by multiplying the ratios calculated previously by the distance between - // the circle center and the chord midpoint and using these values to go from the midpoint - // to the center of the circle - // The negative of the vertical distance ratio is used to modify the x coordinate while - // the horizontal distance ratio is used to modify the y coordinate - // That is because the center of the circle is perpendicular to the chord and perpendicular - // lines are negative reciprocals - O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]); - // Move the center of the circle at the origin - OA = new SVG.Point(A.x-O.x, A.y-O.y); - OB = new SVG.Point(B.x-O.x, B.y-O.y); - - // Calculate the start and end angle - tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y)); - if (OA.y < 0) { - tetaStart *= -1; - } - tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y)); - if (OB.y < 0) { - tetaEnd *= -1; - } - - // If sweep-flag is '1', then the arc will be drawn in a "positive-angle" direction, - // make sure that the end angle is above the start angle - if (sweepFlag && tetaStart > tetaEnd) { - tetaEnd += 2*Math.PI; - } - // If sweep-flag is '0', then the arc will be drawn in a "negative-angle" direction, - // make sure that the end angle is below the start angle - if (!sweepFlag && tetaStart < tetaEnd) { - tetaEnd -= 2*Math.PI; - } - - // Find the number of Bezier curves that are required to represent the arc - // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle - nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI); - - // Calculate the coordinates of the points of all the Bezier curves required to represent the arc - // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic - arcSegPoints = []; - angle = tetaStart; - deltaTeta = (tetaEnd-tetaStart)/nbSectors; - f = 4*Math.tan(deltaTeta/4)/3; - for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint - cosAngle = Math.cos(angle); - sinAngle = Math.sin(angle); - - pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle); - arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)]; - - angle += deltaTeta; - } - - // Remove the first control point of the first segment point and remove the second control point of the last segment point - // These two control points are not used in the approximation of the arc, that is why they are removed - arcSegPoints[0][0] = arcSegPoints[0][1].clone(); - arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone(); - - // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation); - for (i = 0, il = arcSegPoints.length; i < il; i++) { - arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat); - arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat); - arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat); - } - - - // Convert the segments points to SVG curve commands - for (i = 1, il = arcSegPoints.length; i < il; i++) { - pt = arcSegPoints[i-1][2]; - x1 = pt.x; - y1 = pt.y; - - pt = arcSegPoints[i][0]; - x2 = pt.x; - y2 = pt.y; - - pt = arcSegPoints[i][1]; - x = pt.x; - y = pt.y; - - retVal.push(['C', x1, y1, x2, y2, x, y]); - } - - return retVal - } - }()); - - /*! svg.draggable.js - v2.2.2 - 2019-01-08 - * https://github.com/svgdotjs/svg.draggable.js - * Copyright (c) 2019 Wout Fierens; Licensed MIT */ - (function() { - - // creates handler, saves it - function DragHandler(el){ - el.remember('_draggable', this); - this.el = el; - } - - - // Sets new parameter, starts dragging - DragHandler.prototype.init = function(constraint, val){ - var _this = this; - this.constraint = constraint; - this.value = val; - this.el.on('mousedown.drag', function(e){ _this.start(e); }); - this.el.on('touchstart.drag', function(e){ _this.start(e); }); - }; - - // transforms one point from screen to user coords - DragHandler.prototype.transformPoint = function(event, offset){ - event = event || window.event; - var touches = event.changedTouches && event.changedTouches[0] || event; - this.p.x = touches.clientX - (offset || 0); - this.p.y = touches.clientY; - return this.p.matrixTransform(this.m) - }; - - // gets elements bounding box with special handling of groups, nested and use - DragHandler.prototype.getBBox = function(){ - - var box = this.el.bbox(); - - if(this.el instanceof SVG.Nested) box = this.el.rbox(); - - if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) { - box.x = this.el.x(); - box.y = this.el.y(); - } - - return box - }; - - // start dragging - DragHandler.prototype.start = function(e){ - - // check for left button - if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){ - if((e.which || e.buttons) != 1){ - return - } - } - - var _this = this; - - // fire beforedrag event - this.el.fire('beforedrag', { event: e, handler: this }); - if(this.el.event().defaultPrevented) return; - - // prevent browser drag behavior as soon as possible - e.preventDefault(); - - // prevent propagation to a parent that might also have dragging enabled - e.stopPropagation(); - - // search for parent on the fly to make sure we can call - // draggable() even when element is not in the dom currently - this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc); - this.p = this.parent.node.createSVGPoint(); - - // save current transformation matrix - this.m = this.el.node.getScreenCTM().inverse(); - - var box = this.getBBox(); - - var anchorOffset; - - // fix text-anchor in text-element (#37) - if(this.el instanceof SVG.Text){ - anchorOffset = this.el.node.getComputedTextLength(); - - switch(this.el.attr('text-anchor')){ - case 'middle': - anchorOffset /= 2; - break - case 'start': - anchorOffset = 0; - break; - } - } - - this.startPoints = { - // We take absolute coordinates since we are just using a delta here - point: this.transformPoint(e, anchorOffset), - box: box, - transform: this.el.transform() - }; - - // add drag and end events to window - SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); }); - SVG.on(window, 'touchend.drag', function(e){ _this.end(e); }); - - // fire dragstart event - this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this}); - }; - - // while dragging - DragHandler.prototype.drag = function(e){ - - var box = this.getBBox() - , p = this.transformPoint(e) - , x = this.startPoints.box.x + p.x - this.startPoints.point.x - , y = this.startPoints.box.y + p.y - this.startPoints.point.y - , c = this.constraint - , gx = p.x - this.startPoints.point.x - , gy = p.y - this.startPoints.point.y; - - this.el.fire('dragmove', { - event: e - , p: p - , m: this.m - , handler: this - }); - - if(this.el.event().defaultPrevented) return p - - // move the element to its new position, if possible by constraint - if (typeof c == 'function') { - - var coord = c.call(this.el, x, y, this.m); - - // bool, just show us if movement is allowed or not - if (typeof coord == 'boolean') { - coord = { - x: coord, - y: coord - }; - } - - // if true, we just move. If !false its a number and we move it there - if (coord.x === true) { - this.el.x(x); - } else if (coord.x !== false) { - this.el.x(coord.x); - } - - if (coord.y === true) { - this.el.y(y); - } else if (coord.y !== false) { - this.el.y(coord.y); - } - - } else if (typeof c == 'object') { - - // keep element within constrained box - if (c.minX != null && x < c.minX) { - x = c.minX; - gx = x - this.startPoints.box.x; - } else if (c.maxX != null && x > c.maxX - box.width) { - x = c.maxX - box.width; - gx = x - this.startPoints.box.x; - } if (c.minY != null && y < c.minY) { - y = c.minY; - gy = y - this.startPoints.box.y; - } else if (c.maxY != null && y > c.maxY - box.height) { - y = c.maxY - box.height; - gy = y - this.startPoints.box.y; - } - - if (c.snapToGrid != null) { - x = x - (x % c.snapToGrid); - y = y - (y % c.snapToGrid); - gx = gx - (gx % c.snapToGrid); - gy = gy - (gy % c.snapToGrid); - } - - if(this.el instanceof SVG.G) - this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true); - else - this.el.move(x, y); - } - - // so we can use it in the end-method, too - return p - }; - - DragHandler.prototype.end = function(e){ - - // final drag - var p = this.drag(e); - - // fire dragend event - this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this }); - - // unbind events - SVG.off(window, 'mousemove.drag'); - SVG.off(window, 'touchmove.drag'); - SVG.off(window, 'mouseup.drag'); - SVG.off(window, 'touchend.drag'); - - }; - - SVG.extend(SVG.Element, { - // Make element draggable - // Constraint might be an object (as described in readme.md) or a function in the form "function (x, y)" that gets called before every move. - // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. "False" skips moving, true moves to raw x, y. - draggable: function(value, constraint) { - - // Check the parameters and reassign if needed - if (typeof value == 'function' || typeof value == 'object') { - constraint = value; - value = true; - } - - var dragHandler = this.remember('_draggable') || new DragHandler(this); - - // When no parameter is given, value is true - value = typeof value === 'undefined' ? true : value; - - if(value) dragHandler.init(constraint || {}, value); - else { - this.off('mousedown.drag'); - this.off('touchstart.drag'); - } - - return this - } - - }); - - }).call(undefined); - - (function() { - - function SelectHandler(el) { - - this.el = el; - el.remember('_selectHandler', this); - this.pointSelection = {isSelected: false}; - this.rectSelection = {isSelected: false}; - - // helper list with position settings of each type of point - this.pointsList = { - lt: [ 0, 0 ], - rt: [ 'width', 0 ], - rb: [ 'width', 'height' ], - lb: [ 0, 'height' ], - t: [ 'width', 0 ], - r: [ 'width', 'height' ], - b: [ 'width', 'height' ], - l: [ 0, 'height' ] - }; - - // helper function to get point coordinates based on settings above and an object (bbox in our case) - this.pointCoord = function (setting, object, isPointCentered) { - var coord = typeof setting !== 'string' ? setting : object[setting]; - // Top, bottom, right and left points are placed in the center of element width/height - return isPointCentered ? coord / 2 : coord - }; - - this.pointCoords = function (point, object) { - var settings = this.pointsList[point]; - - return { - x: this.pointCoord(settings[0], object, (point === 't' || point === 'b')), - y: this.pointCoord(settings[1], object, (point === 'r' || point === 'l')) - } - }; - } - - SelectHandler.prototype.init = function (value, options) { - - var bbox = this.el.bbox(); - this.options = {}; - - // store defaults list of points in order to verify users config - var points = this.el.selectize.defaults.points; - - // Merging the defaults and the options-object together - for (var i in this.el.selectize.defaults) { - this.options[i] = this.el.selectize.defaults[i]; - if (options[i] !== undefined) { - this.options[i] = options[i]; - } - } - - // prepare & validate list of points to be added (or excluded) - var pointsLists = ['points', 'pointsExclude']; - - for (var i in pointsLists) { - var option = this.options[pointsLists[i]]; - - if (typeof option === 'string') { - if (option.length > 0) { - // if set as comma separated string list => convert it into an array - option = option.split(/\s*,\s*/i); - } else { - option = []; - } - } else if (typeof option === 'boolean' && pointsLists[i] === 'points') { - // this is not needed, but let's have it for legacy support - option = option ? points : []; - } - - this.options[pointsLists[i]] = option; - } - - // intersect correct all points options with users config (exclude unwanted points) - // ES5 -> NO arrow functions nor Array.includes() - this.options.points = [ points, this.options.points ].reduce( - function (a, b) { - return a.filter( - function (c) { - return b.indexOf(c) > -1; - } - ) - } - ); - - // exclude pointsExclude, if wanted - this.options.points = [ this.options.points, this.options.pointsExclude ].reduce( - function (a, b) { - return a.filter( - function (c) { - return b.indexOf(c) < 0; - } - ) - } - ); - - this.parent = this.el.parent(); - this.nested = (this.nested || this.parent.group()); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving - if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) { - this.selectPoints(value); - } else { - this.selectRect(value); - } - - this.observe(); - this.cleanup(); - - }; - - SelectHandler.prototype.selectPoints = function (value) { - - this.pointSelection.isSelected = value; - - // When set is already there we dont have to create one - if (this.pointSelection.set) { - return this; - } - - // Create our set of elements - this.pointSelection.set = this.parent.set(); - // draw the points and mark the element as selected - this.drawPoints(); - - return this; - - }; - - // create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon - SelectHandler.prototype.getPointArray = function () { - var bbox = this.el.bbox(); - - return this.el.array().valueOf().map(function (el) { - return [el[0] - bbox.x, el[1] - bbox.y]; - }); - }; - - // Draws a points - SelectHandler.prototype.drawPoints = function () { - - var _this = this, array = this.getPointArray(); - - // go through the array of points - for (var i = 0, len = array.length; i < len; ++i) { - - var curriedEvent = (function (k) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('point', {x: x, y: y, i: k, event: ev}); - }; - })(i); - - // add every point to the set - // add css-classes and a touchstart-event which fires our event for moving points - var point = this.drawPoint(array[i][0], array[i][1]) - .addClass(this.options.classPoints) - .addClass(this.options.classPoints + '_point') - .on('touchstart', curriedEvent) - .on('mousedown', curriedEvent); - this.pointSelection.set.add(point); - } - }; - - // The function to draw single point - SelectHandler.prototype.drawPoint = function (cx, cy) { - var pointType = this.options.pointType; - - switch (pointType) { - case 'circle': - return this.drawCircle(cx, cy); - case 'rect': - return this.drawRect(cx, cy); - default: - if (typeof pointType === 'function') { - return pointType.call(this, cx, cy); - } - - throw new Error('Unknown ' + pointType + ' point type!'); - } - }; - - // The function to draw the circle point - SelectHandler.prototype.drawCircle = function (cx, cy) { - return this.nested.circle(this.options.pointSize) - .center(cx, cy); - }; - - // The function to draw the rect point - SelectHandler.prototype.drawRect = function (cx, cy) { - return this.nested.rect(this.options.pointSize, this.options.pointSize) - .center(cx, cy); - }; - - // every time a point is moved, we have to update the positions of our point - SelectHandler.prototype.updatePointSelection = function () { - var array = this.getPointArray(); - - this.pointSelection.set.each(function (i) { - if (this.cx() === array[i][0] && this.cy() === array[i][1]) { - return; - } - this.center(array[i][0], array[i][1]); - }); - }; - - SelectHandler.prototype.updateRectSelection = function () { - var _this = this, bbox = this.el.bbox(); - - this.rectSelection.set.get(0).attr({ - width: bbox.width, - height: bbox.height - }); - - // set.get(1) is always in the upper left corner. no need to move it - if (this.options.points.length) { - this.options.points.map(function (point, index) { - var coords = _this.pointCoords(point, bbox); - - _this.rectSelection.set.get(index + 1).center(coords.x, coords.y); - }); - } - - if (this.options.rotationPoint) { - var length = this.rectSelection.set.length(); - - this.rectSelection.set.get(length - 1).center(bbox.width / 2, 20); - } - }; - - SelectHandler.prototype.selectRect = function (value) { - - var _this = this, bbox = this.el.bbox(); - - this.rectSelection.isSelected = value; - - // when set is already p - this.rectSelection.set = this.rectSelection.set || this.parent.set(); - - // helperFunction to create a mouse-down function which triggers the event specified in `eventName` - function getMoseDownFunc(eventName) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire(eventName, {x: x, y: y, event: ev}); - }; - } - - // create the selection-rectangle and add the css-class - if (!this.rectSelection.set.get(0)) { - this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect)); - } - - // Draw Points at the edges, if enabled - if (this.options.points.length && this.rectSelection.set.length() < 2) { - var ename ="touchstart", mname = "mousedown"; - - this.options.points.map(function (point, index) { - var coords = _this.pointCoords(point, bbox); - - var pointElement = _this.drawPoint(coords.x, coords.y) - .attr('class', _this.options.classPoints + '_' + point) - .on(mname, getMoseDownFunc(point)) - .on(ename, getMoseDownFunc(point)); - _this.rectSelection.set.add(pointElement); - }); - - this.rectSelection.set.each(function () { - this.addClass(_this.options.classPoints); - }); - } - - // draw rotationPint, if enabled - if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) { - - var curriedEvent = function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('rot', {x: x, y: y, event: ev}); - }; - - var pointElement = this.drawPoint(bbox.width / 2, 20) - .attr('class', this.options.classPoints + '_rot') - .on("touchstart", curriedEvent) - .on("mousedown", curriedEvent); - this.rectSelection.set.add(pointElement); - } - - }; - - SelectHandler.prototype.handler = function () { - - var bbox = this.el.bbox(); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - if (this.rectSelection.isSelected) { - this.updateRectSelection(); - } - - if (this.pointSelection.isSelected) { - this.updatePointSelection(); - } - - }; - - SelectHandler.prototype.observe = function () { - var _this = this; - - if (MutationObserver) { - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.observerInst = this.observerInst || new MutationObserver(function () { - _this.handler(); - }); - this.observerInst.observe(this.el.node, {attributes: true}); - } else { - try { - this.observerInst.disconnect(); - delete this.observerInst; - } catch (e) { - } - } - } else { - this.el.off('DOMAttrModified.select'); - - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.el.on('DOMAttrModified.select', function () { - _this.handler(); - }); - } - } - }; - - SelectHandler.prototype.cleanup = function () { - - //var _this = this; - - if (!this.rectSelection.isSelected && this.rectSelection.set) { - // stop watching the element, remove the selection - this.rectSelection.set.each(function () { - this.remove(); - }); - - this.rectSelection.set.clear(); - delete this.rectSelection.set; - } - - if (!this.pointSelection.isSelected && this.pointSelection.set) { - // Remove all points, clear the set, stop watching the element - this.pointSelection.set.each(function () { - this.remove(); - }); - - this.pointSelection.set.clear(); - delete this.pointSelection.set; - } - - if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) { - this.nested.remove(); - delete this.nested; - - } - }; - - - SVG.extend(SVG.Element, { - // Select element with mouse - selectize: function (value, options) { - - // Check the parameters and reassign if needed - if (typeof value === 'object') { - options = value; - value = true; - } - - var selectHandler = this.remember('_selectHandler') || new SelectHandler(this); - - selectHandler.init(value === undefined ? true : value, options || {}); - - return this; - - } - }); - - SVG.Element.prototype.selectize.defaults = { - points: ['lt', 'rt', 'rb', 'lb', 't', 'r', 'b', 'l'], // which points to draw, default all - pointsExclude: [], // easier option if to exclude few than rewrite all - classRect: 'svg_select_boundingRect', // Css-class added to the rect - classPoints: 'svg_select_points', // Css-class added to the points - pointSize: 7, // size of point - rotationPoint: true, // If true, rotation point is drawn. Needed for rotation! - deepSelect: false, // If true, moving of single points is possible (only line, polyline, polyon) - pointType: 'circle' // Point type: circle or rect, default circle - }; - }()); - - (function() { - (function () { - - function ResizeHandler(el) { - - el.remember('_resizeHandler', this); - - this.el = el; - this.parameters = {}; - this.lastUpdateCall = null; - this.p = el.doc().node.createSVGPoint(); - } - - ResizeHandler.prototype.transformPoint = function(x, y, m){ - - this.p.x = x - (this.offset.x - window.pageXOffset); - this.p.y = y - (this.offset.y - window.pageYOffset); - - return this.p.matrixTransform(m || this.m); - - }; - - ResizeHandler.prototype._extractPosition = function(event) { - // Extract a position from a mouse/touch event. - // Returns { x: .., y: .. } - return { - x: event.clientX != null ? event.clientX : event.touches[0].clientX, - y: event.clientY != null ? event.clientY : event.touches[0].clientY - } - }; - - ResizeHandler.prototype.init = function (options) { - - var _this = this; - - this.stop(); - - if (options === 'stop') { - return; - } - - this.options = {}; - - // Merge options and defaults - for (var i in this.el.resize.defaults) { - this.options[i] = this.el.resize.defaults[i]; - if (typeof options[i] !== 'undefined') { - this.options[i] = options[i]; - } - } - - // We listen to all these events which are specifying different edges - this.el.on('lt.resize', function(e){ _this.resize(e || window.event); }); // Left-Top - this.el.on('rt.resize', function(e){ _this.resize(e || window.event); }); // Right-Top - this.el.on('rb.resize', function(e){ _this.resize(e || window.event); }); // Right-Bottom - this.el.on('lb.resize', function(e){ _this.resize(e || window.event); }); // Left-Bottom - - this.el.on('t.resize', function(e){ _this.resize(e || window.event); }); // Top - this.el.on('r.resize', function(e){ _this.resize(e || window.event); }); // Right - this.el.on('b.resize', function(e){ _this.resize(e || window.event); }); // Bottom - this.el.on('l.resize', function(e){ _this.resize(e || window.event); }); // Left - - this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation - - this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving - - // This call ensures, that the plugin reacts to a change of snapToGrid immediately - this.update(); - - }; - - ResizeHandler.prototype.stop = function(){ - this.el.off('lt.resize'); - this.el.off('rt.resize'); - this.el.off('rb.resize'); - this.el.off('lb.resize'); - - this.el.off('t.resize'); - this.el.off('r.resize'); - this.el.off('b.resize'); - this.el.off('l.resize'); - - this.el.off('rot.resize'); - - this.el.off('point.resize'); - - return this; - }; - - ResizeHandler.prototype.resize = function (event) { - - var _this = this; - - this.m = this.el.node.getScreenCTM().inverse(); - this.offset = { x: window.pageXOffset, y: window.pageYOffset }; - - var txPt = this._extractPosition(event.detail.event); - this.parameters = { - type: this.el.type, // the type of element - p: this.transformPoint(txPt.x, txPt.y), - x: event.detail.x, // x-position of the mouse when resizing started - y: event.detail.y, // y-position of the mouse when resizing started - box: this.el.bbox(), // The bounding-box of the element - rotation: this.el.transform().rotation // The current rotation of the element - }; - - // Add font-size parameter if the element type is text - if (this.el.type === "text") { - this.parameters.fontSize = this.el.attr()["font-size"]; - } - - // the i-param in the event holds the index of the point which is moved, when using `deepSelect` - if (event.detail.i !== undefined) { - - // get the point array - var array = this.el.array().valueOf(); - - // Save the index and the point which is moved - this.parameters.i = event.detail.i; - this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]]; - } - - // Lets check which edge of the bounding-box was clicked and resize the this.el according to this - switch (event.type) { - - // Left-Top-Edge - case 'lt': - // We build a calculating function for every case which gives us the new position of the this.el - this.calc = function (diffX, diffY) { - // The procedure is always the same - // First we snap the edge to the given grid (snapping to 1px grid is normal resizing) - var snap = this.snapToGrid(diffX, diffY); - - // Now we check if the new height and width still valid (> 0) - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized) - - /* - * but first check if the element is text box, so we can change the font size instead of - * the width and height - */ - - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Top - case 'rt': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap, true); - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Bottom - case 'rb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Left-Bottom - case 'lb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap, true); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Top - case 't': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.height - snap[1] > 0) { - // Disable the font-resizing if it is not from the corner of bounding-box - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]); - } - }; - break; - - // Right - case 'r': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]); - } - }; - break; - - // Bottom - case 'b': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]); - } - }; - break; - - // Left - case 'l': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]); - } - }; - break; - - // Rotation - case 'rot': - // s.a. - this.calc = function (diffX, diffY) { - - // yes this is kinda stupid but we need the mouse coords back... - var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y}; - - // start minus middle - var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2)); - - // end minus middle - var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2)); - - var angle = this.parameters.rotation + (pAngle - sAngle) * 180 / Math.PI + this.options.snapToAngle / 2; - - // We have to move the element to the center of the box first and change the rotation afterwards - // because rotation always works around a rotation-center, which is changed when moving the element - // We also set the new rotation center to the center of the box. - this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(angle - (angle % this.options.snapToAngle), this.parameters.box.cx, this.parameters.box.cy); - }; - break; - - // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object) - case 'point': - this.calc = function (diffX, diffY) { - - // Snapping the point to the grid - var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]); - - // Get the point array - var array = this.el.array().valueOf(); - - // Changing the moved point in the array - array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0]; - array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1]; - - // And plot the new this.el - this.el.plot(array); - }; - } - - this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event}); - // When resizing started, we have to register events for... - // Touches. - SVG.on(window, 'touchmove.resize', function(e) { - _this.update(e || window.event); - }); - SVG.on(window, 'touchend.resize', function() { - _this.done(); - }); - // Mouse. - SVG.on(window, 'mousemove.resize', function (e) { - _this.update(e || window.event); - }); - SVG.on(window, 'mouseup.resize', function () { - _this.done(); - }); - - }; - - // The update-function redraws the element every time the mouse is moving - ResizeHandler.prototype.update = function (event) { - - if (!event) { - if (this.lastUpdateCall) { - this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]); - } - return; - } - - // Calculate the difference between the mouseposition at start and now - var txPt = this._extractPosition(event); - var p = this.transformPoint(txPt.x, txPt.y); - - var diffX = p.x - this.parameters.p.x, - diffY = p.y - this.parameters.p.y; - - this.lastUpdateCall = [diffX, diffY]; - - // Calculate the new position and height / width of the element - this.calc(diffX, diffY); - - // Emit an event to say we have changed. - this.el.fire('resizing', {dx: diffX, dy: diffY, event: event}); - }; - - // Is called on mouseup. - // Removes the update-function from the mousemove event - ResizeHandler.prototype.done = function () { - this.lastUpdateCall = null; - SVG.off(window, 'mousemove.resize'); - SVG.off(window, 'mouseup.resize'); - SVG.off(window, 'touchmove.resize'); - SVG.off(window, 'touchend.resize'); - this.el.fire('resizedone'); - }; - - // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit) - // In this cases the temp-values are calculated differently - ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) { - - var temp; - - // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value - if (typeof pointCoordsY !== 'undefined') { - // Note that flag = pointCoordsX in this case - temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid]; - } else { - // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge) - flag = flag == null ? 1 | 1 << 1 : flag; - temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid]; - } - - if(diffX < 0) { - temp[0] -= this.options.snapToGrid; - } - if(diffY < 0) { - temp[1] -= this.options.snapToGrid; - } - - diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ? - temp[0] : - temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ? - temp[1] : - temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - - return this.constraintToBox(diffX, diffY, flag, pointCoordsY); - - }; - - // keep element within constrained box - ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) { - //return [diffX, diffY] - var c = this.options.constraint || {}; - var orgX, orgY; - - if (typeof pointCoordsY !== 'undefined') { - orgX = flag; - orgY = pointCoordsY; - } else { - orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width); - orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height); - } - - if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) { - diffX = c.minX - orgX; - } - - if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) { - diffX = c.maxX - orgX; - } - - if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) { - diffY = c.minY - orgY; - } - - if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) { - diffY = c.maxY - orgY; - } - - return [diffX, diffY]; - }; - - ResizeHandler.prototype.checkAspectRatio = function (snap, isReverse) { - if (!this.options.saveAspectRatio) { - return snap; - } - - var updatedSnap = snap.slice(); - var aspectRatio = this.parameters.box.width / this.parameters.box.height; - var newW = this.parameters.box.width + snap[0]; - var newH = this.parameters.box.height - snap[1]; - var newAspectRatio = newW / newH; - - if (newAspectRatio < aspectRatio) { - // Height is too big. Adapt it - updatedSnap[1] = newW / aspectRatio - this.parameters.box.height; - isReverse && (updatedSnap[1] = -updatedSnap[1]); - } else if (newAspectRatio > aspectRatio) { - // Width is too big. Adapt it - updatedSnap[0] = this.parameters.box.width - newH * aspectRatio; - isReverse && (updatedSnap[0] = -updatedSnap[0]); - } - - return updatedSnap; - }; - - SVG.extend(SVG.Element, { - // Resize element with mouse - resize: function (options) { - - (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {}); - - return this; - - } - - }); - - SVG.Element.prototype.resize.defaults = { - snapToAngle: 0.1, // Specifies the speed the rotation is happening when moving the mouse - snapToGrid: 1, // Snaps to a grid of `snapToGrid` Pixels - constraint: {}, // keep element within constrained box - saveAspectRatio: false // Save aspect ratio when resizing using lt, rt, rb or lb points - }; - - }).call(this); - }()); - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0, 0, 0, .5);\n box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n}\n\n.apexcharts-canvas.apexcharts-theme-dark {\n background: #424242;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.apexcharts-text tspan {\n font-family: inherit;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n color: #fff;\n background: rgba(30, 30, 30, 0.8);\n}\n\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active,\n.apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n\n.apexcharts-tooltip-candlestick>div {\n margin: 4px 0;\n}\n\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after,\n.apexcharts-xaxistooltip:before {\n left: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-left: -6px;\n}\n\n.apexcharts-xaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after,\n.apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after,\n.apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1\n}\n\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after,\n.apexcharts-yaxistooltip:before {\n top: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-yaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-top: -6px;\n}\n\n.apexcharts-yaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after,\n.apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after,\n.apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n opacity: 1;\n}\n\n.apexcharts-yaxistooltip-hidden {\n display: none;\n}\n\n.apexcharts-xcrosshairs,\n.apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,\n.apexcharts-ycrosshairs.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_boundingRect, .svg_select_points_rot {\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n}\n.apexcharts-selection-rect + g .svg_select_boundingRect,\n.apexcharts-selection-rect + g .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n\n.apexcharts-selection-rect + g .svg_select_points_l,\n.apexcharts-selection-rect + g .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n}\n\n.svg_select_points {\n fill: #efefef;\n stroke: #333;\n rx: 2;\n}\n\n.apexcharts-canvas.apexcharts-zoomable .hovering-zoom {\n cursor: crosshair\n}\n\n.apexcharts-canvas.apexcharts-zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon,\n.apexcharts-reset-icon,\n.apexcharts-pan-icon,\n.apexcharts-selection-icon,\n.apexcharts-menu-icon,\n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg,\n.apexcharts-zoomin-icon svg,\n.apexcharts-zoomout-icon svg,\n.apexcharts-reset-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.apexcharts-theme-dark .apexcharts-zoom-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomin-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomout-icon svg,\n.apexcharts-theme-dark .apexcharts-reset-icon svg,\n.apexcharts-theme-dark .apexcharts-pan-icon svg,\n.apexcharts-theme-dark .apexcharts-selection-icon svg,\n.apexcharts-theme-dark .apexcharts-menu-icon svg,\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {\n fill: #008FFB;\n}\n\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,\n.apexcharts-theme-light .apexcharts-reset-icon:hover svg,\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon,\n.apexcharts-menu-icon {\n position: relative;\n}\n\n.apexcharts-reset-icon {\n margin-left: 5px;\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-reset-icon,\n.apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoomout-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n\n.apexcharts-pan-icon.apexcharts-selected svg {\n stroke: #008FFB;\n}\n\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n background: #eee;\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n }\n}\n\n.apexcharts-datalabel.apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabels,\n.apexcharts-datalabel,\n.apexcharts-datalabel-label,\n.apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-gridline,\n.apexcharts-annotation-rect,\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line,\n.apexcharts-zoom-rect,\n.apexcharts-toolbar svg,\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-radar-series path,\n.apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n\n/* Resize generated styles */\n\n@keyframes resizeanim {\n from {\n opacity: 0;\n }\n to {\n opacity: 0;\n }\n}\n\n.resize-triggers {\n animation: 1ms resizeanim;\n visibility: hidden;\n opacity: 0;\n}\n\n.resize-triggers,\n.resize-triggers>div,\n.contract-trigger:before {\n content: \" \";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.resize-triggers>div {\n background: #eee;\n overflow: auto;\n}\n\n.contract-trigger:before {\n width: 200%;\n height: 200%;\n}"; - styleInject(css); - - /** - * Detect Element Resize - * - * https://github.com/sdecima/javascript-detect-element-resize - * Sebastian Decima - * - * version: 0.5.3 - **/ - - (function () { - function resetTriggers(element) { - var triggers = element.__resizeTriggers__, - expand = triggers.firstElementChild, - contract = triggers.lastElementChild, - expandChild = expand ? expand.firstElementChild : null; - - if (contract) { - contract.scrollLeft = contract.scrollWidth; - contract.scrollTop = contract.scrollHeight; - } - - if (expandChild) { - expandChild.style.width = expand.offsetWidth + 1 + 'px'; - expandChild.style.height = expand.offsetHeight + 1 + 'px'; - } - - if (expand) { - expand.scrollLeft = expand.scrollWidth; - expand.scrollTop = expand.scrollHeight; - } - } - - function checkTriggers(element) { - return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height; - } - - function scrollListener(e) { - var element = this; - resetTriggers(this); - if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__); - this.__resizeRAF__ = requestFrame(function () { - if (checkTriggers(element)) { - element.__resizeLast__.width = element.offsetWidth; - element.__resizeLast__.height = element.offsetHeight; - - element.__resizeListeners__.forEach(function (fn) { - fn.call(e); - }); - } - }); - } - - var requestFrame = function () { - var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) { - return window.setTimeout(fn, 20); - }; - - return function (fn) { - return raf(fn); - }; - }(); - - var cancelFrame = function () { - var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout; - return function (id) { - return cancel(id); - }; - }(); - /* Detect CSS Animations support to detect element display/re-attach */ - - - var animation = false, - animationstartevent = 'animationstart', - domPrefixes = 'Webkit Moz O ms'.split(' '), - startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '); - { - var elm = document.createElement('fakeelement'); - - if (elm.style.animationName !== undefined) { - animation = true; - } - - if (animation === false) { - for (var i = 0; i < domPrefixes.length; i++) { - if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { - animationstartevent = startEvents[i]; - break; - } - } - } - } - var animationName = 'resizeanim'; - - window.addResizeListener = function (element, fn) { - if (!element.__resizeTriggers__) { - if (getComputedStyle(element).position == 'static') element.style.position = 'relative'; - element.__resizeLast__ = {}; - element.__resizeListeners__ = []; - (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers'; - element.__resizeTriggers__.innerHTML = '
' + '
'; - element.appendChild(element.__resizeTriggers__); - resetTriggers(element); - element.addEventListener('scroll', scrollListener, true); - /* Listen for a css animation to detect element display/re-attach */ - - animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function (e) { - if (e.animationName == animationName) { - resetTriggers(element); - } - }); - } - - element.__resizeListeners__.push(fn); - }; - - window.removeResizeListener = function (element, fn) { - if (element) { - element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); - - if (!element.__resizeListeners__.length) { - element.removeEventListener('scroll', scrollListener); - - if (element.__resizeTriggers__.parentNode) { - element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__); - } - } - } - }; - })(); - - window.Apex = {}; - - var InitCtxVariables = /*#__PURE__*/function () { - function InitCtxVariables(ctx) { - _classCallCheck(this, InitCtxVariables); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(InitCtxVariables, [{ - key: "initModules", - value: function initModules() { - this.ctx.publicMethods = ['updateOptions', 'updateSeries', 'appendData', 'appendSeries', 'toggleSeries', 'showSeries', 'hideSeries', 'setLocale', 'resetSeries', 'zoomX', 'toggleDataPointSelection', 'dataURI', 'addXaxisAnnotation', 'addYaxisAnnotation', 'addPointAnnotation', 'clearAnnotations', 'removeAnnotation', 'paper', 'destroy']; - this.ctx.eventList = ['click', 'mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - this.ctx.animations = new Animations(this.ctx); - this.ctx.axes = new Axes(this.ctx); - this.ctx.core = new Core(this.ctx.el, this.ctx); - this.ctx.config = new Config({}); - this.ctx.data = new Data(this.ctx); - this.ctx.grid = new Grid(this.ctx); - this.ctx.graphics = new Graphics(this.ctx); - this.ctx.coreUtils = new CoreUtils(this.ctx); - this.ctx.crosshairs = new Crosshairs(this.ctx); - this.ctx.events = new Events(this.ctx); - this.ctx.exports = new Exports(this.ctx); - this.ctx.localization = new Localization(this.ctx); - this.ctx.options = new Options(); - this.ctx.responsive = new Responsive(this.ctx); - this.ctx.series = new Series(this.ctx); - this.ctx.theme = new Theme(this.ctx); - this.ctx.formatters = new Formatters(this.ctx); - this.ctx.titleSubtitle = new TitleSubtitle(this.ctx); - this.ctx.legend = new Legend(this.ctx); - this.ctx.toolbar = new Toolbar(this.ctx); - this.ctx.dimensions = new Dimensions(this.ctx); - this.ctx.updateHelpers = new UpdateHelpers(this.ctx); - this.ctx.zoomPanSelection = new ZoomPanSelection(this.ctx); - this.ctx.w.globals.tooltip = new Tooltip(this.ctx); - } - }]); - - return InitCtxVariables; - }(); - - var Destroy = /*#__PURE__*/function () { - function Destroy(ctx) { - _classCallCheck(this, Destroy); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Destroy, [{ - key: "clear", - value: function clear() { - if (this.ctx.zoomPanSelection) { - this.ctx.zoomPanSelection.destroy(); - } - - if (this.ctx.toolbar) { - this.ctx.toolbar.destroy(); - } - - this.ctx.animations = null; - this.ctx.axes = null; - this.ctx.annotations = null; - this.ctx.core = null; - this.ctx.data = null; - this.ctx.grid = null; - this.ctx.series = null; - this.ctx.responsive = null; - this.ctx.theme = null; - this.ctx.formatters = null; - this.ctx.titleSubtitle = null; - this.ctx.legend = null; - this.ctx.dimensions = null; - this.ctx.options = null; - this.ctx.crosshairs = null; - this.ctx.zoomPanSelection = null; - this.ctx.updateHelpers = null; - this.ctx.toolbar = null; - this.ctx.localization = null; - this.ctx.w.globals.tooltip = null; - this.clearDomElements(); - } - }, { - key: "killSVG", - value: function killSVG(draw) { - draw.each(function (i, children) { - this.removeClass('*'); - this.off(); - this.stop(); - }, true); - draw.ungroup(); - draw.clear(); - } - }, { - key: "clearDomElements", - value: function clearDomElements() { - var _this = this; - - // detach document event - this.ctx.eventList.forEach(function (event) { - document.removeEventListener(event, _this.ctx.events.documentEvent); - }); - var domEls = this.w.globals.dom; - - if (this.ctx.el !== null) { - // remove all child elements - resetting the whole chart - while (this.ctx.el.firstChild) { - this.ctx.el.removeChild(this.ctx.el.firstChild); - } - } - - this.killSVG(domEls.Paper); - domEls.Paper.remove(); - domEls.elWrap = null; - domEls.elGraphical = null; - domEls.elAnnotations = null; - domEls.elLegendWrap = null; - domEls.baseEl = null; - domEls.elGridRect = null; - domEls.elGridRectMask = null; - domEls.elGridRectMarkerMask = null; - domEls.elDefs = null; - } - }]); - - return Destroy; - }(); - - /** - * - * @module ApexCharts - **/ - - var ApexCharts$1 = /*#__PURE__*/function () { - function ApexCharts(el, opts) { - _classCallCheck(this, ApexCharts); - - this.opts = opts; - this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase. - - this.w = new Base(opts).init(); - this.el = el; - this.w.globals.cuid = Utils.randomId(); - this.w.globals.chartID = this.w.config.chart.id ? this.w.config.chart.id : this.w.globals.cuid; - var initCtx = new InitCtxVariables(this); - initCtx.initModules(); - this.create = Utils.bind(this.create, this); - this.windowResizeHandler = this._windowResize.bind(this); - } - /** - * The primary method user will call to render the chart. - */ - - - _createClass(ApexCharts, [{ - key: "render", - value: function render() { - var _this = this; - - // main method - return new Promise(function (resolve, reject) { - // only draw chart, if element found - if (_this.el !== null) { - if (typeof Apex._chartInstances === 'undefined') { - Apex._chartInstances = []; - } - - if (_this.w.config.chart.id) { - Apex._chartInstances.push({ - id: _this.w.globals.chartID, - group: _this.w.config.chart.group, - chart: _this - }); - } // set the locale here - - - _this.setLocale(_this.w.config.chart.defaultLocale); - - var beforeMount = _this.w.config.chart.events.beforeMount; - - if (typeof beforeMount === 'function') { - beforeMount(_this, _this.w); - } - - _this.events.fireEvent('beforeMount', [_this, _this.w]); - - window.addEventListener('resize', _this.windowResizeHandler); - window.addResizeListener(_this.el.parentNode, _this._parentResizeCallback.bind(_this)); - - var graphData = _this.create(_this.w.config.series, {}); - - if (!graphData) return resolve(_this); - - _this.mount(graphData).then(function () { - if (typeof _this.w.config.chart.events.mounted === 'function') { - _this.w.config.chart.events.mounted(_this, _this.w); - } - - _this.events.fireEvent('mounted', [_this, _this.w]); - - resolve(graphData); - }).catch(function (e) { - reject(e); // handle error in case no data or element not found - }); - } else { - reject(new Error('Element not found')); - } - }); - } - }, { - key: "create", - value: function create(ser, opts) { - var w = this.w; - var initCtx = new InitCtxVariables(this); - initCtx.initModules(); - var gl = this.w.globals; - gl.noData = false; - gl.animationEnded = false; - this.responsive.checkResponsiveConfig(opts); - - if (w.config.xaxis.convertedCatToNumeric) { - var defaults = new Defaults(w.config); - defaults.convertCatToNumericXaxis(w.config, this.ctx); - } - - if (this.el === null) { - gl.animationEnded = true; - return null; - } - - this.core.setupElements(); - - if (gl.svgWidth === 0) { - // if the element is hidden, skip drawing - gl.animationEnded = true; - return null; - } - - var combo = CoreUtils.checkComboSeries(ser); - gl.comboCharts = combo.comboCharts; - gl.comboBarCount = combo.comboBarCount; - - if (ser.length === 0 || ser.length === 1 && ser[0].data && ser[0].data.length === 0) { - this.series.handleNoData(); - } - - this.events.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time - - this.data.parseData(ser); // this is a good time to set theme colors first - - this.theme.init(); // as markers accepts array, we need to setup global markers for easier access - - var markers = new Markers(this); - markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - - this.formatters.setLabelFormatters(); - this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area - // if there is some data to show or user collapsed all series, then proceed drawing legend - - if (!gl.noData || gl.collapsedSeries.length === gl.series.length) { - this.legend.init(); - } // check whether in multiple series, all series share the same X - - - this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals - - if (gl.axisCharts) { - this.core.coreCalculations(); - - if (w.config.xaxis.type !== 'category') { - // as we have minX and maxX values, determine the default DateTimeFormat for time series - this.formatters.setLabelFormatters(); - } - } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function - // Also we need to do this before calcuting Dimentions plotCoords() method of Dimensions - - - this.formatters.heatmapLabelFormatters(); // We got plottable area here, next task would be to calculate axis areas - - this.dimensions.plotCoords(); - var xyRatios = this.core.xySettings(); - this.grid.createGridMask(); - var elGraph = this.core.plotChartType(ser, xyRatios); - var dataLabels = new DataLabels(this); - dataLabels.bringForward(); - - if (w.config.dataLabels.background.enabled) { - dataLabels.dataLabelsBackground(); - } // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends - - - this.core.shiftGraphPosition(); - var dim = { - plot: { - left: w.globals.translateX, - top: w.globals.translateY, - width: w.globals.gridWidth, - height: w.globals.gridHeight - } - }; - return { - elGraph: elGraph, - xyRatios: xyRatios, - elInner: w.globals.dom.elGraphical, - dimensions: dim - }; - } - }, { - key: "mount", - value: function mount() { - var _this2 = this; - - var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var me = this; - var w = me.w; - return new Promise(function (resolve, reject) { - // no data to display - if (me.el === null) { - return reject(new Error('Not enough data to display or target element not found')); - } else if (graphData === null || w.globals.allSeriesCollapsed) { - me.series.handleNoData(); - } - - me.axes.drawAxis(w.config.chart.type, graphData.xyRatios); - me.grid = new Grid(me); - var elgrid = me.grid.drawGrid(); - me.annotations = new Annotations(me); - me.annotations.drawShapeAnnos(); - me.annotations.drawImageAnnos(); - me.annotations.drawTextAnnos(); - - if (w.config.grid.position === 'back' && elgrid) { - w.globals.dom.elGraphical.add(elgrid.el); - } - - var xAxis = new XAxis(_this2.ctx); - var yaxis = new YAxis(_this2.ctx); - - if (elgrid !== null) { - xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); - yaxis.setYAxisTextAlignments(); - } - - if (w.config.annotations.position === 'back') { - w.globals.dom.Paper.add(w.globals.dom.elAnnotations); - me.annotations.drawAxesAnnotations(); - } - - if (graphData.elGraph instanceof Array) { - for (var g = 0; g < graphData.elGraph.length; g++) { - w.globals.dom.elGraphical.add(graphData.elGraph[g]); - } - } else { - w.globals.dom.elGraphical.add(graphData.elGraph); - } - - if (w.config.grid.position === 'front' && elgrid) { - w.globals.dom.elGraphical.add(elgrid.el); - } - - if (w.config.xaxis.crosshairs.position === 'front') { - me.crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'front') { - me.crosshairs.drawYCrosshairs(); - } - - if (w.config.annotations.position === 'front') { - w.globals.dom.Paper.add(w.globals.dom.elAnnotations); - me.annotations.drawAxesAnnotations(); - } - - if (!w.globals.noData) { - // draw tooltips at the end - if (w.config.tooltip.enabled && !w.globals.noData) { - me.w.globals.tooltip.drawTooltip(graphData.xyRatios); - } - - if (w.globals.axisCharts && (w.globals.isXNumeric || w.config.xaxis.convertedCatToNumeric)) { - if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) { - me.zoomPanSelection.init({ - xyRatios: graphData.xyRatios - }); - } - } else { - var tools = w.config.chart.toolbar.tools; - var toolsArr = ['zoom', 'zoomin', 'zoomout', 'selection', 'pan', 'reset']; - toolsArr.forEach(function (t) { - tools[t] = false; - }); - } - - if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) { - me.toolbar.createToolbar(); - } - } - - if (w.globals.memory.methodsToExec.length > 0) { - w.globals.memory.methodsToExec.forEach(function (fn) { - fn.method(fn.params, false, fn.context); - }); - } - - if (!w.globals.axisCharts && !w.globals.noData) { - me.core.resizeNonAxisCharts(); - } - - resolve(me); - }); - } - /** - * Destroy the chart instance by removing all elements which also clean up event listeners on those elements. - */ - - }, { - key: "destroy", - value: function destroy() { - window.removeEventListener('resize', this.windowResizeHandler); - window.removeResizeListener(this.el.parentNode, this._parentResizeCallback.bind(this)); // remove the chart's instance from the global Apex._chartInstances - - var chartID = this.w.config.chart.id; - - if (chartID) { - Apex._chartInstances.forEach(function (c, i) { - if (c.id === chartID) { - Apex._chartInstances.splice(i, 1); - } - }); - } - - new Destroy(this.ctx).clear(); - } - /** - * Allows users to update Options after the chart has rendered. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - */ - - }, { - key: "updateOptions", - value: function updateOptions(options) { - var _this3 = this; - - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var w = this.w; - - if (options.series) { - this.series.resetSeries(false, true, false); - - if (options.series.length && options.series[0].data) { - options.series = options.series.map(function (s, i) { - return _this3.updateHelpers._extendSeries(s, i); - }); - } // user updated the series via updateOptions() function. - // Hence, we need to reset axis min/max to avoid zooming issues - - - this.updateHelpers.revertDefaultAxisMinMax(); - } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max - - - if (options.xaxis) { - options = this.updateHelpers.forceXAxisUpdate(options); - } - - if (options.yaxis) { - options = this.updateHelpers.forceYAxisUpdate(options); - } - - if (w.globals.collapsedSeriesIndices.length > 0) { - this.series.clearPreviousPaths(); - } - /* update theme mode#459 */ - - - if (options.theme) { - options = this.theme.updateThemeOptions(options); - } - - return this.updateHelpers._updateOptions(options, redraw, animate, updateSyncedCharts, overwriteInitialConfig); - } - /** - * Allows users to update Series after the chart has rendered. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "updateSeries", - value: function updateSeries() { - var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - this.series.resetSeries(false); - this.updateHelpers.revertDefaultAxisMinMax(); - return this.updateHelpers._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Allows users to append a new series after the chart has rendered. - * - * @param {array} newSerie - New serie which will be appended to the existing series - */ - - }, { - key: "appendSeries", - value: function appendSeries(newSerie) { - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var newSeries = this.w.config.series.slice(); - newSeries.push(newSerie); - this.series.resetSeries(false); - this.updateHelpers.revertDefaultAxisMinMax(); - return this.updateHelpers._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Allows users to append Data to series. - * - * @param {array} newData - New data in the same format as series - */ - - }, { - key: "appendData", - value: function appendData(newData) { - var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var me = this; - me.w.globals.dataChanged = true; - me.series.getPreviousPaths(); - var newSeries = me.w.config.series.slice(); - - for (var i = 0; i < newSeries.length; i++) { - if (newData[i] !== null && typeof newData[i] !== 'undefined') { - for (var j = 0; j < newData[i].data.length; j++) { - newSeries[i].data.push(newData[i].data[j]); - } - } - } - - me.w.config.series = newSeries; - - if (overwriteInitialSeries) { - me.w.globals.initialSeries = JSON.parse(JSON.stringify(me.w.config.series)); - } - - return this.update(); - } - }, { - key: "update", - value: function update(options) { - var _this4 = this; - - return new Promise(function (resolve, reject) { - new Destroy(_this4.ctx).clear(); - - var graphData = _this4.create(_this4.w.config.series, options); - - if (!graphData) return resolve(_this4); - - _this4.mount(graphData).then(function () { - if (typeof _this4.w.config.chart.events.updated === 'function') { - _this4.w.config.chart.events.updated(_this4, _this4.w); - } - - _this4.events.fireEvent('updated', [_this4, _this4.w]); - - _this4.w.globals.isDirty = true; - resolve(_this4); - }).catch(function (e) { - reject(e); - }); - }); - } - /** - * Get all charts in the same "group" (including the instance which is called upon) to sync them when user zooms in/out or pan. - */ - - }, { - key: "getSyncedCharts", - value: function getSyncedCharts() { - var chartGroups = this.getGroupedCharts(); - var allCharts = [this]; - - if (chartGroups.length) { - allCharts = []; - chartGroups.forEach(function (ch) { - allCharts.push(ch); - }); - } - - return allCharts; - } - /** - * Get charts in the same "group" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering) - */ - - }, { - key: "getGroupedCharts", - value: function getGroupedCharts() { - var _this5 = this; - - return Apex._chartInstances.filter(function (ch) { - if (ch.group) { - return true; - } - }).map(function (ch) { - return _this5.w.config.chart.group === ch.group ? ch.chart : _this5; - }); - } - }, { - key: "toggleSeries", - value: function toggleSeries(seriesName) { - return this.series.toggleSeries(seriesName); - } - }, { - key: "showSeries", - value: function showSeries(seriesName) { - this.series.showSeries(seriesName); - } - }, { - key: "hideSeries", - value: function hideSeries(seriesName) { - this.series.hideSeries(seriesName); - } - }, { - key: "resetSeries", - value: function resetSeries() { - var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - var shouldResetZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this.series.resetSeries(shouldUpdateChart, shouldResetZoom); - } // Public method to add event listener on chart context - - }, { - key: "addEventListener", - value: function addEventListener(name, handler) { - this.events.addEventListener(name, handler); - } // Public method to remove event listener on chart context - - }, { - key: "removeEventListener", - value: function removeEventListener(name, handler) { - this.events.removeEventListener(name, handler); - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addPointAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "clearAnnotations", - value: function clearAnnotations() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.clearAnnotations(me); - } - }, { - key: "removeAnnotation", - value: function removeAnnotation(id) { - var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.removeAnnotation(me, id); - } - }, { - key: "getChartArea", - value: function getChartArea() { - var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner'); - return el; - } - }, { - key: "getSeriesTotalXRange", - value: function getSeriesTotalXRange(minX, maxX) { - return this.coreUtils.getSeriesTotalsXRange(minX, maxX); - } - }, { - key: "getHighestValueInSeries", - value: function getHighestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - return range.getMinYMaxY(seriesIndex).highestY; - } - }, { - key: "getLowestValueInSeries", - value: function getLowestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - return range.getMinYMaxY(seriesIndex).lowestY; - } - }, { - key: "getSeriesTotal", - value: function getSeriesTotal() { - return this.w.globals.seriesTotals; - } - }, { - key: "toggleDataPointSelection", - value: function toggleDataPointSelection(seriesIndex, dataPointIndex) { - return this.updateHelpers.toggleDataPointSelection(seriesIndex, dataPointIndex); - } - }, { - key: "zoomX", - value: function zoomX(min, max) { - this.ctx.toolbar.zoomUpdateOptions(min, max); - } - }, { - key: "setLocale", - value: function setLocale(localeName) { - this.localization.setCurrentLocaleValues(localeName); - } - }, { - key: "dataURI", - value: function dataURI() { - var exp = new Exports(this.ctx); - return exp.dataURI(); - } - }, { - key: "paper", - value: function paper() { - return this.w.globals.dom.Paper; - } - }, { - key: "_parentResizeCallback", - value: function _parentResizeCallback() { - if (!this.w.globals.noData && this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize) { - this._windowResize(); - } - } - /** - * Handle window resize and re-draw the whole chart. - */ - - }, { - key: "_windowResize", - value: function _windowResize() { - var _this6 = this; - - clearTimeout(this.w.globals.resizeTimer); - this.w.globals.resizeTimer = window.setTimeout(function () { - _this6.w.globals.resized = true; - _this6.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay). - - _this6.ctx.update(); - }, 150); - } - }], [{ - key: "getChartByID", - value: function getChartByID(chartID) { - var c = Apex._chartInstances.filter(function (ch) { - return ch.id === chartID; - })[0]; - - return c && c.chart; - } - /** - * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute - */ - - }, { - key: "initOnLoad", - value: function initOnLoad() { - var els = document.querySelectorAll('[data-apexcharts]'); - - for (var i = 0; i < els.length; i++) { - var el = els[i]; - var options = JSON.parse(els[i].getAttribute('data-options')); - var apexChart = new ApexCharts(el, options); - apexChart.render(); - } - } - /** - * This static method allows users to call chart methods without necessarily from the - * instance of the chart in case user has assigned chartID to the targetted chart. - * The chartID is used for mapping the instance stored in Apex._chartInstances global variable - * - * This is helpful in cases when you don't have reference of the chart instance - * easily and need to call the method from anywhere. - * For eg, in React/Vue applications when you have many parent/child components, - * and need easy reference to other charts for performing dynamic operations - * - * @param {string} chartID - The unique identifier which will be used to call methods - * on that chart instance - * @param {function} fn - The method name to call - * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order. - */ - - }, { - key: "exec", - value: function exec(chartID, fn) { - var chart = this.getChartByID(chartID); - if (!chart) return; // turn on the global exec flag to indicate this method was called - - chart.w.globals.isExecCalled = true; - var ret = null; - - if (chart.publicMethods.indexOf(fn) !== -1) { - for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - opts[_key - 2] = arguments[_key]; - } - - ret = chart[fn].apply(chart, opts); - } - - return ret; - } - }, { - key: "merge", - value: function merge(target, source) { - return Utils.extend(target, source); - } - }]); - - return ApexCharts; - }(); - - return ApexCharts$1; - -}))); diff --git a/assets/plugins/apexcharts-bundle/js/apexcharts.min.js b/assets/plugins/apexcharts-bundle/js/apexcharts.min.js deleted file mode 100644 index d954062..0000000 --- a/assets/plugins/apexcharts-bundle/js/apexcharts.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * ApexCharts v3.19.0 - * (c) 2018-2020 Juned Chhipa - * Released under the MIT License. - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).ApexCharts=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var i=0;i>16,n=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-n)*s)+n)+(Math.round((a-o)*s)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(t,e){return i.isColorHex(e)?this.shadeHexColor(t,e):this.shadeRGBColor(t,e)}}],[{key:"bind",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:"isObject",value:function(e){return e&&"object"===t(e)&&!Array.isArray(e)&&null!=e}},{key:"listToArray",value:function(t){var e,i=[];for(e=0;ee.length?t:e}))),t.length>e.length?t:e}),0)}},{key:"hexToRgba",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"#999999",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;"#"!==t.substring(0,1)&&(t="#999999");var i=t.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:"x",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>{}[\]\\/]/gi,e)}},{key:"negToZero",value:function(t){return t<0?0:t}},{key:"moveIndexInArray",value:function(t,e,i){if(i>=t.length)for(var a=i-t.length+1;a--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:"extractNumber",value:function(t){return parseFloat(t.replace(/[^\d.]*/g,""))}},{key:"findAncestor",value:function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}},{key:"setELstyles",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t.style.key=e[i])}},{key:"isNumber",value:function(t){return!isNaN(t)&&parseFloat(Number(t))===t&&!isNaN(parseInt(t,10))}},{key:"isFloat",value:function(t){return Number(t)===t&&t%1!=0}},{key:"isSafari",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:"isFirefox",value:function(){return navigator.userAgent.toLowerCase().indexOf("firefox")>-1}},{key:"isIE11",value:function(){if(-1!==window.navigator.userAgent.indexOf("MSIE")||window.navigator.appVersion.indexOf("Trident/")>-1)return!0}},{key:"isIE",value:function(){var t=window.navigator.userAgent,e=t.indexOf("MSIE ");if(e>0)return parseInt(t.substring(e+5,t.indexOf(".",e)),10);if(t.indexOf("Trident/")>0){var i=t.indexOf("rv:");return parseInt(t.substring(i+3,t.indexOf(".",i)),10)}var a=t.indexOf("Edge/");return a>0&&parseInt(t.substring(a+5,t.indexOf(".",a)),10)}}]),i}(),u=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"getDefaultFilter",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size("120%","180%","-5%","-40%"),"none"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:"addNormalFilter",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&!t.node.classList.contains("apexcharts-marker")&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:"addLightenFilter",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;if(!g.isFirefox()){t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:r}})})),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(t.filterer.node)}}},{key:"addDarkenFilter",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;if(!g.isFirefox()){t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:"linear",slope:r}})})),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(t.filterer.node)}}},{key:"applyFilter",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(t,e);break;case"lighten":this.addLightenFilter(t,e,{intensity:a});break;case"darken":this.addDarkenFilter(t,e,{intensity:a})}}},{key:"addShadow",value:function(t,e,i){var a=i.blur,s=i.top,r=i.left,n=i.color,o=i.opacity,l=t.flood(Array.isArray(n)?n[e]:n,o).composite(t.sourceAlpha,"in").offset(r,s).gaussianBlur(a).merge(t.source);return t.blend(t.source,l)}},{key:"dropShadow",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=e.top,s=e.left,r=e.blur,n=e.color,o=e.opacity,l=e.noUserSpaceOnUse,h=this.w;return t.unfilter(!0),g.isIE()&&"radialBar"===h.config.chart.type?t:(n=Array.isArray(n)?n[i]:n,t.filter((function(t){var e=null;e=g.isSafari()||g.isFirefox()||g.isIE()?t.flood(n,o).composite(t.sourceAlpha,"in").offset(s,a).gaussianBlur(r):t.flood(n,o).composite(t.sourceAlpha,"in").offset(s,a).gaussianBlur(r).merge(t.source),t.blend(t.source,e)})),l||t.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(t.filterer.node),t)}},{key:"setSelectionFilter",value:function(t,e,i){var a=this.w;if(void 0!==a.globals.selectedDataPoints[e]&&a.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute("selected",!0);var s=a.config.states.active.filter;"none"!==s&&this.applyFilter(t,e,s.type,s.value)}}},{key:"_scaleFilterSize",value:function(t){!function(e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}({width:"200%",height:"200%",x:"-50%",y:"-50%"})}}]),t}(),f=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.setEasingFunctions()}return a(t,[{key:"setEasingFunctions",value:function(){var t;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case"linear":t="-";break;case"easein":t="<";break;case"easeout":t=">";break;case"easeinout":t="<>";break;case"swing":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case"bounce":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1};break;default:t="<>"}this.w.globals.easing=t}}},{key:"animateLine",value:function(t,e,i,a){t.attr(e).animate(a).attr(i)}},{key:"animateCircleRadius",value:function(t,e,i,a,s,r){e||(e=0),t.attr({r:e}).animate(a,s).attr({r:i}).afterAll((function(){r()}))}},{key:"animateCircle",value:function(t,e,i,a,s){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(a,s).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:"animateRect",value:function(t,e,i,a,s){t.attr(e).animate(a).attr(i).afterAll((function(){return s()}))}},{key:"animatePathsGradually",value:function(t){var e=t.el,i=t.realIndex,a=t.j,s=t.fill,r=t.pathFrom,n=t.pathTo,o=t.speed,l=t.delay,h=this.w,c=0;h.config.chart.animations.animateGradually.enabled&&(c=h.config.chart.animations.animateGradually.delay),h.config.chart.animations.dynamicAnimation.enabled&&h.globals.dataChanged&&"bar"!==h.config.chart.type&&(c=0),this.morphSVG(e,i,a,"line"!==h.config.chart.type||h.globals.comboCharts?s:"stroke",r,n,o,l*c)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach((function(t){t.el.classList.remove("apexcharts-element-hidden")}))}},{key:"animationCompleted",value:function(t){var e=this.w;e.globals.animationEnded||(e.globals.animationEnded=!0,this.showDelayedElements(),"function"==typeof e.config.chart.events.animationEnd&&e.config.chart.events.animationEnd(this.ctx,{el:t,w:e}))}},{key:"morphSVG",value:function(t,e,i,a,s,r,n,o){var l=this,h=this.w;s||(s=t.attr("pathFrom")),r||(r=t.attr("pathTo"));var c=function(t){return"radar"===h.config.chart.type&&(n=1),"M 0 ".concat(h.globals.gridHeight)};(!s||s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s=c()),(r.indexOf("undefined")>-1||r.indexOf("NaN")>-1)&&(r=c()),h.globals.shouldAnimate||(n=1),t.plot(s).animate(1,h.globals.easing,o).plot(s).animate(n,h.globals.easing,o).plot(r).afterAll((function(){g.isNumber(i)?i===h.globals.series[h.globals.maxValsInArrayIndex].length-2&&h.globals.shouldAnimate&&l.animationCompleted(t):"none"!==a&&h.globals.shouldAnimate&&(!h.globals.comboCharts&&e===h.globals.series.length-1||h.globals.comboCharts)&&l.animationCompleted(t),l.showDelayedElements()}))}}]),t}(),p=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"drawLine",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"#a8a8a8",r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,o=this.w,l=o.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:a,stroke:s,"stroke-dasharray":r,"stroke-width":n});return l}},{key:"drawRect",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"#fefefe",n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w,d=c.globals.dom.Paper.rect();return d.attr({x:t,y:e,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:n,"stroke-width":null!==o?o:0,stroke:null!==l?l:"none","stroke-dasharray":h}),d.node.setAttribute("fill",r),d}},{key:"drawPolygon",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#e1e1e1",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=this.w,r=s.globals.dom.Paper.polygon(t).attr({fill:a,stroke:e,"stroke-width":i});return r}},{key:"drawCircle",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w,a=i.globals.dom.Paper.circle(2*t);return null!==e&&a.attr(e),a}},{key:"drawPath",value:function(t){var e=t.d,i=void 0===e?"":e,a=t.stroke,s=void 0===a?"#a8a8a8":a,r=t.strokeWidth,n=void 0===r?1:r,o=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,g=t.classes,u=t.strokeLinecap,f=void 0===u?null:u,p=t.strokeDashArray,x=void 0===p?0:p,b=this.w;return null===f&&(f=b.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":h,stroke:s,"stroke-opacity":d,"stroke-linecap":f,"stroke-width":n,"stroke-dasharray":x,class:g})}},{key:"group",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=e.globals.dom.Paper.group();return null!==t&&i.attr(t),i}},{key:"move",value:function(t,e){var i=["M",t,e].join(" ");return i}},{key:"line",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=null;return null===i?a=["L",t,e].join(" "):"H"===i?a=["H",t].join(" "):"V"===i&&(a=["V",e].join(" ")),a}},{key:"curve",value:function(t,e,i,a,s,r){var n=["C",t,e,i,a,s,r].join(" ");return n}},{key:"quadraticCurve",value:function(t,e,i,a){return["Q",t,e,i,a].join(" ")}},{key:"arc",value:function(t,e,i,a,s,r,n){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l="A";o&&(l="a");var h=[l,t,e,i,a,s,r,n].join(" ");return h}},{key:"renderPaths",value:function(t){var e,i=t.j,a=t.realIndex,s=t.pathFrom,r=t.pathTo,o=t.stroke,l=t.strokeWidth,h=t.strokeLinecap,c=t.fill,d=t.animationDelay,g=t.initialSpeed,p=t.dataChangeSpeed,x=t.className,b=t.shouldClipToGrid,m=void 0===b||b,v=t.bindEventsOnPaths,y=void 0===v||v,w=t.drawShadow,k=void 0===w||w,A=this.w,S=new u(this.ctx),C=new f(this.ctx),L=this.w.config.chart.animations.enabled,P=L&&this.w.config.chart.animations.dynamicAnimation.enabled,T=!!(L&&!A.globals.resized||P&&A.globals.dataChanged&&A.globals.shouldAnimate);T?e=s:(e=r,A.globals.animationEnded=!0);var z=A.config.stroke.dashArray,I=0;I=Array.isArray(z)?z[a]:A.config.stroke.dashArray;var M=this.drawPath({d:e,stroke:o,strokeWidth:l,fill:c,fillOpacity:1,classes:x,strokeLinecap:h,strokeDashArray:I});if(M.attr("index",a),m&&M.attr({"clip-path":"url(#gridRectMask".concat(A.globals.cuid,")")}),"none"!==A.config.states.normal.filter.type)S.getDefaultFilter(M,a);else if(A.config.chart.dropShadow.enabled&&k&&(!A.config.chart.dropShadow.enabledOnSeries||A.config.chart.dropShadow.enabledOnSeries&&-1!==A.config.chart.dropShadow.enabledOnSeries.indexOf(a))){var X=A.config.chart.dropShadow;S.dropShadow(M,X,a)}y&&(M.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,M)),M.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,M)),M.node.addEventListener("mousedown",this.pathMouseDown.bind(this,M))),M.attr({pathTo:r,pathFrom:s});var E={el:M,j:i,realIndex:a,pathFrom:s,pathTo:r,fill:c,strokeWidth:l,delay:d};return!L||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(n({},E,{speed:g})),A.globals.dataChanged&&P&&T&&C.animatePathsGradually(n({},E,{speed:p})),M}},{key:"drawPattern",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#a8a8a8",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=this.w,n=r.globals.dom.Paper.pattern(e,i,(function(r){"horizontalLines"===t?r.line(0,0,i,0).stroke({color:a,width:s+1}):"verticalLines"===t?r.line(0,0,0,e).stroke({color:a,width:s+1}):"slantedLines"===t?r.line(0,0,e,i).stroke({color:a,width:s}):"squares"===t?r.rect(e,i).fill("none").stroke({color:a,width:s}):"circles"===t&&r.circle(e).fill("none").stroke({color:a,width:s})}));return n}},{key:"drawGradient",value:function(t,e,i,a,s){var r,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e.length<9&&0===e.indexOf("#")&&(e=g.hexToRgba(e,a)),i.length<9&&0===i.indexOf("#")&&(i=g.hexToRgba(i,s));var d=0,u=1,f=1,p=null;null!==o&&(d=void 0!==o[0]?o[0]/100:0,u=void 0!==o[1]?o[1]/100:1,f=void 0!==o[2]?o[2]/100:1,p=void 0!==o[3]?o[3]/100:null);var x=!("donut"!==c.config.chart.type&&"pie"!==c.config.chart.type&&"polarArea"!==c.config.chart.type&&"bubble"!==c.config.chart.type);if(r=null===l||0===l.length?c.globals.dom.Paper.gradient(x?"radial":"linear",(function(t){t.at(d,e,a),t.at(u,i,s),t.at(f,i,s),null!==p&&t.at(p,e,a)})):c.globals.dom.Paper.gradient(x?"radial":"linear",(function(t){(Array.isArray(l[h])?l[h]:l).forEach((function(e){t.at(e.offset/100,e.color,e.opacity)}))})),x){var b=c.globals.gridWidth/2,m=c.globals.gridHeight/2;"bubble"!==c.config.chart.type?r.attr({gradientUnits:"userSpaceOnUse",cx:b,cy:m,r:n}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else"vertical"===t?r.from(0,0).to(0,1):"diagonal"===t?r.from(0,0).to(1,1):"horizontal"===t?r.from(0,1).to(1,1):"diagonal2"===t&&r.from(1,0).to(0,1);return r}},{key:"drawText",value:function(t){var e,i=t.x,a=t.y,s=t.text,r=t.textAnchor,n=t.fontSize,o=t.fontFamily,l=t.fontWeight,h=t.foreColor,c=t.opacity,d=t.cssClass,g=void 0===d?"":d,u=t.isPlainText,f=void 0===u||u,p=this.w;return void 0===s&&(s=""),r||(r="start"),h&&h.length||(h=p.config.chart.foreColor),o=o||p.config.chart.fontFamily,l=l||"regular",(e=Array.isArray(s)?p.globals.dom.Paper.text((function(t){for(var e=0;e-1){var o=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(".apexcharts-series path").members,h=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members,c=function(t){Array.prototype.forEach.call(t,(function(t){t.node.setAttribute("selected","false"),a.getDefaultFilter(t,s)}))};c(l),c(h)}t.node.setAttribute("selected","true"),n="true",void 0===i.globals.selectedDataPoints[s]&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if("true"===n){var d=i.config.states.active.filter;"none"!==d&&a.applyFilter(t,s,d.type,d.value)}else"none"!==i.config.states.active.filter.type&&a.getDefaultFilter(t,s);"function"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),e&&this.ctx.events.fireEvent("dataPointSelection",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:"rotateAroundCenter",value:function(t){var e=t.getBBox();return{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:"getTextRects",value:function(t,e,i,a){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.w,n=this.drawText({x:-200,y:-200,text:t,textAnchor:"start",fontSize:e,fontFamily:i,foreColor:"#fff",opacity:0});a&&n.attr("transform",a),r.globals.dom.Paper.add(n);var o=n.bbox();return s||(o=n.node.getBoundingClientRect()),n.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(t,e,i){if("function"==typeof t.getComputedTextLength&&(t.textContent=e,e.length>0&&t.getComputedTextLength()>=i/.8)){for(var a=e.length-3;a>0;a-=3)if(t.getSubStringLength(0,a)<=i/.8)return void(t.textContent=e.substring(0,a)+"...");t.textContent="."}}}],[{key:"setAttrs",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}(),x=function(){function t(i){e(this,t),this.w=i.w,this.annoCtx=i}return a(t,[{key:"setOrientations",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if("vertical"===t.label.orientation){var a=null!==e?e:0,s=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a,"']"));if(null!==s){var r=s.getBoundingClientRect();s.setAttribute("x",parseFloat(s.getAttribute("x"))-r.height+4),"top"===t.label.position?s.setAttribute("y",parseFloat(s.getAttribute("y"))+r.width):s.setAttribute("y",parseFloat(s.getAttribute("y"))-r.width);var n=this.annoCtx.graphics.rotateAroundCenter(s),o=n.x,l=n.y;s.setAttribute("transform","rotate(-90 ".concat(o," ").concat(l,")"))}}}},{key:"addBackgroundToAnno",value:function(t,e){var i=this.w;if(!e.label.text||e.label.text&&!e.label.text.trim())return null;var a=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),s=t.getBoundingClientRect(),r=e.label.style.padding.left,n=e.label.style.padding.right,o=e.label.style.padding.top,l=e.label.style.padding.bottom;"vertical"===e.label.orientation&&(o=e.label.style.padding.left,l=e.label.style.padding.right,r=e.label.style.padding.top,n=e.label.style.padding.bottom);var h=s.left-a.left-r,c=s.top-a.top-o,d=this.annoCtx.graphics.drawRect(h-i.globals.barPadForNumericAxis,c,s.width+r+n,s.height+o+l,e.label.borderRadius,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0);return e.id&&d.node.classList.add(e.id),d}},{key:"annotationsBackground",value:function(){var t=this,e=this.w,i=function(i,a,s){var r=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations .apexcharts-").concat(s,"-annotation-label[rel='").concat(a,"']"));if(r){var n=r.parentNode,o=t.addBackgroundToAnno(r,i);o&&n.insertBefore(o.node,r)}};e.config.annotations.xaxis.map((function(t,e){i(t,e,"xaxis")})),e.config.annotations.yaxis.map((function(t,e){i(t,e,"yaxis")})),e.config.annotations.points.map((function(t,e){i(t,e,"point")}))}},{key:"makeAnnotationDraggable",value:function(t,e,i){var a=this.w.config.annotations[e][i];t.draggable().on("dragend",(function(t){var e=t.target.getAttribute("x"),i=t.target.getAttribute("y"),s=t.target.getAttribute("cx"),r=t.target.getAttribute("cy");a.x=e,a.y=i,s&&r&&(a.x=s,a.y=r)})),t.node.addEventListener("mousedown",(function(e){e.stopPropagation(),t.selectize({pointSize:8,rotationPoint:!1,pointType:"rect"}),t.resize().on("resizedone",(function(t){var e=t.target.getAttribute("width"),i=t.target.getAttribute("height"),s=t.target.getAttribute("r");a.width=e,a.height=i,s&&(a.radius=s)}))}))}},{key:"getStringX",value:function(t){var e=this.w,i=t;e.config.xaxis.convertedCatToNumeric&&e.globals.categoryLabels.length&&(t=e.globals.categoryLabels.indexOf(t)+1);var a=e.globals.labels.indexOf(t),s=e.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(a+1)+")");return s&&(i=parseFloat(s.getAttribute("x"))),i}}]),t}(),b=function(){function t(i){e(this,t),this.w=i.w,this.annoCtx=i,this.invertAxis=this.annoCtx.invertAxis}return a(t,[{key:"addXaxisAnnotation",value:function(t,e,i){var a=this.w,s=this.invertAxis?a.globals.minY:a.globals.minX,r=this.invertAxis?a.globals.maxY:a.globals.maxX,n=this.invertAxis?a.globals.yRange[0]:a.globals.xRange,o=(t.x-s)/(n/a.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(o=(r-t.x)/(n/a.globals.gridWidth));var l=t.label.text;"category"!==a.config.xaxis.type&&!a.config.xaxis.convertedCatToNumeric||this.invertAxis||a.globals.dataFormatXNumeric||(o=this.annoCtx.helpers.getStringX(t.x));var h=t.strokeDashArray;if(g.isNumber(o)){if(null===t.x2||void 0===t.x2){var c=this.annoCtx.graphics.drawLine(o+t.offsetX,0+t.offsetY,o+t.offsetX,a.globals.gridHeight+t.offsetY,t.borderColor,h,t.borderWidth);e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}else{var d=(t.x2-s)/(n/a.globals.gridWidth);if(this.annoCtx.inversedReversedAxis&&(d=(r-t.x2)/(n/a.globals.gridWidth)),"category"!==a.config.xaxis.type&&!a.config.xaxis.convertedCatToNumeric||this.invertAxis||a.globals.dataFormatXNumeric||(d=this.annoCtx.helpers.getStringX(t.x2)),d0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce((function(t,e){return t+e}),0):this.w.globals.series[t].reduce((function(t,e){return t+e}),0)}},{key:"isSeriesNull",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter((function(t){return null!==t})):this.w.config.series[t].data.filter((function(t){return null!==t}))).length}},{key:"seriesHaveSameValues",value:function(t){return this.w.globals.series[t].every((function(t,e,i){return t===i[0]}))}},{key:"getCategoryLabels",value:function(t){var e=this.w,i=t.slice();return e.config.xaxis.convertedCatToNumeric&&(i=t.map((function(t){return e.config.xaxis.labels.formatter(t-e.globals.minX+1)}))),i}},{key:"getLargestSeries",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map((function(t){return t.length})).indexOf(Math.max.apply(Math,t.globals.series.map((function(t){return t.length}))))}},{key:"getLargestMarkerSize",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach((function(t){e=Math.max(e,t)})),t.globals.markers.largestSize=e,e}},{key:"getSeriesTotals",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map((function(t,e){var i=0;if(Array.isArray(t))for(var a=0;at&&i.globals.seriesX[s][n]n){var h=n;n=a,a=h}var c=this.annoCtx.graphics.drawRect(0+t.offsetX,a+t.offsetY,s.globals.gridWidth+t.offsetX,n-a,0,t.fillColor,t.opacity,1,t.borderColor,r);c.node.classList.add("apexcharts-annotation-rect"),c.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d="right"===t.label.position?s.globals.gridWidth:0,g=this.annoCtx.graphics.drawText({x:d+t.label.offsetX,y:(a||n)+t.label.offsetY-3,text:o,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:"apexcharts-yaxis-annotation-label ".concat(t.label.style.cssClass," ").concat(t.id?t.id:"")});g.attr({rel:i}),e.appendChild(g.node)}},{key:"_getY1Y2",value:function(t,e){var i,a="y1"===t?e.y:e.y2,s=this.w;if(this.annoCtx.invertAxis){var r=s.globals.labels.indexOf(a);s.config.xaxis.convertedCatToNumeric&&(r=s.globals.categoryLabels.indexOf(a));var n=s.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child("+(r+1)+")");n&&(i=parseFloat(n.getAttribute("y")))}else{var o;if(s.config.yaxis[e.yAxisIndex].logarithmic)o=(a=new m(this.annoCtx.ctx).getLogVal(a,e.yAxisIndex))/s.globals.yLogRatio[e.yAxisIndex];else o=(a-s.globals.minYArr[e.yAxisIndex])/(s.globals.yRange[e.yAxisIndex]/s.globals.gridHeight);i=s.globals.gridHeight-o,s.config.yaxis[e.yAxisIndex]&&s.config.yaxis[e.yAxisIndex].reversed&&(i=o)}return i}},{key:"drawYAxisAnnotations",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-yaxis-annotations"});return e.config.annotations.yaxis.map((function(e,a){t.addYaxisAnnotation(e,i.node,a)})),i}}]),t}(),y=function(){function t(i){e(this,t),this.w=i.w,this.annoCtx=i}return a(t,[{key:"addPointAnnotation",value:function(t,e,i){var a=this.w,s=0,r=0,n=0;this.annoCtx.invertAxis&&console.warn("Point annotation is not supported in horizontal bar charts.");var o,l=parseFloat(t.y);if("string"==typeof t.x){var h=a.globals.labels.indexOf(t.x);a.config.xaxis.convertedCatToNumeric&&(h=a.globals.categoryLabels.indexOf(t.x)),s=this.annoCtx.helpers.getStringX(t.x),null===t.y&&(l=a.globals.series[t.seriesIndex][h])}else s=(t.x-a.globals.minX)/(a.globals.xRange/a.globals.gridWidth);a.config.yaxis[t.yAxisIndex].logarithmic?o=(l=new m(this.annoCtx.ctx).getLogVal(l,t.yAxisIndex))/a.globals.yLogRatio[t.yAxisIndex]:o=(l-a.globals.minYArr[t.yAxisIndex])/(a.globals.yRange[t.yAxisIndex]/a.globals.gridHeight);if(r=a.globals.gridHeight-o-parseFloat(t.label.style.fontSize)-t.marker.size,n=a.globals.gridHeight-o,a.config.yaxis[t.yAxisIndex]&&a.config.yaxis[t.yAxisIndex].reversed&&(r=o+parseFloat(t.label.style.fontSize)+t.marker.size,n=o),g.isNumber(s)){var c={pSize:t.marker.size,pWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,pRadius:t.marker.radius,class:"apexcharts-point-annotation-marker ".concat(t.marker.cssClass," ").concat(t.id?t.id:"")},d=this.annoCtx.graphics.drawMarker(s+t.marker.offsetX,n+t.marker.offsetY,c);e.appendChild(d.node);var u=t.label.text?t.label.text:"",f=this.annoCtx.graphics.drawText({x:s+t.label.offsetX,y:r+t.label.offsetY,text:u,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:"apexcharts-point-annotation-label ".concat(t.label.style.cssClass," ").concat(t.id?t.id:"")});if(f.attr({rel:i}),e.appendChild(f.node),t.customSVG.SVG){var p=this.annoCtx.graphics.group({class:"apexcharts-point-annotations-custom-svg "+t.customSVG.cssClass});p.attr({transform:"translate(".concat(s+t.customSVG.offsetX,", ").concat(r+t.customSVG.offsetY,")")}),p.node.innerHTML=t.customSVG.SVG,e.appendChild(p.node)}if(t.image.path){var x=t.image.width?t.image.width:20,b=t.image.height?t.image.height:20;this.annoCtx.addImage({x:s+t.image.offsetX-x/2,y:r+t.image.offsetY-b/2,width:x,height:b,path:t.image.path,appendTo:".apexcharts-point-annotations"})}}}},{key:"drawPointAnnotations",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-point-annotations"});return e.config.annotations.points.map((function(e,a){t.addPointAnnotation(e,i.node,a)})),i}}]),t}();var w,k,A={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",exportToCSV:"Download CSV",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},S=function(){function t(){e(this,t),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontWeight:400,fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#e0e0e0",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#e0e0e0",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontWeight:900,fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.pointAnnotation={x:0,y:null,yAxisIndex:0,seriesIndex:0,marker:{size:4,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,radius:2,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",offsetX:0,offsetY:0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:"",textAnchor:"start",foreColor:void 0,fontSize:"13px",fontFamily:void 0,fontWeight:400,appendTo:".apexcharts-annotations",backgroundColor:"transparent",borderColor:"#c2c2c2",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2},this.shape={x:0,y:0,type:"rect",width:"100%",height:50,appendTo:".apexcharts-annotations",backgroundColor:"#fff",opacity:1,borderWidth:0,borderRadius:4,borderColor:"#c2c2c2"}}return a(t,[{key:"init",value:function(){return{annotations:{position:"front",yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"transparent",locales:[A],defaultLocale:"en",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,zoomed:void 0,scrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,redrawOnParentResize:!0,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0},stacked:!1,stackType:"normal",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",autoScaleYaxis:!1,zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,startingShape:"flat",endingShape:"flat",rangeBarOverlap:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:"top",maxItems:100,hideOverflowingLabels:!0,orientation:"horizontal"}},bubble:{minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(t){return t}},value:{show:!0,fontSize:"14px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(t){return t+"%"}},total:{show:!1,label:"Total",fontSize:"16px",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)/t.globals.series.length+"%"}}}},pie:{customScale:1,offsetX:0,offsetY:0,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(t){return t}},value:{show:!0,fontSize:"20px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,showAlways:!1,label:"Total",fontSize:"16px",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:"#e8e8e8"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return null!==t?t:""},textAnchor:"middle",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:"#fff",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:"#fff",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"squares",width:6,height:6,strokeWidth:2}},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",inverseOrder:!1,fontSize:"12px",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:0,labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,fillColors:void 0,strokeColor:"#fff",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:5,vertical:0},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:"circle",radius:2,offsetX:0,offsetY:0,onClick:void 0,onDblClick:void 0,showNullDataPoints:!0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.15}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.65}}},title:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0,fillColors:void 0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],convertedCatToNumeric:!1,sorted:!1,offsetX:0,offsetY:0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss"}},axisBorder:{show:!0,color:"#e0e0e0",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#e0e0e0",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontWeight:900,fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"light",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),t}(),C=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.graphics=new p(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new x(this),this.xAxisAnnotations=new b(this),this.yAxisAnnotations=new v(this),this.pointsAnnotations=new y(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return a(t,[{key:"drawAxesAnnotations",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=t.config.chart.animations.enabled,r=[e,i,a],n=[i.node,e.node,a.node],o=0;o<3;o++)t.globals.dom.elGraphical.add(r[o]),!s||t.globals.resized||t.globals.dataChanged||"scatter"!==t.config.chart.type&&"bubble"!==t.config.chart.type&&t.globals.dataPoints>1&&n[o].classList.add("apexcharts-element-hidden"),t.globals.delayedElements.push({el:n[o],index:0});this.helpers.annotationsBackground()}}},{key:"drawShapeAnnos",value:function(){var t=this;this.w.config.annotations.shapes.map((function(e,i){t.addShape(e,i)}))}},{key:"drawImageAnnos",value:function(){var t=this;this.w.config.annotations.images.map((function(e,i){t.addImage(e,i)}))}},{key:"drawTextAnnos",value:function(){var t=this;this.w.config.annotations.texts.map((function(e,i){t.addText(e,i)}))}},{key:"addXaxisAnnotation",value:function(t,e,i){this.xAxisAnnotations.addXaxisAnnotation(t,e,i)}},{key:"addYaxisAnnotation",value:function(t,e,i){this.yAxisAnnotations.addYaxisAnnotation(t,e,i)}},{key:"addPointAnnotation",value:function(t,e,i){this.pointsAnnotations.addPointAnnotation(t,e,i)}},{key:"addText",value:function(t,e){var i=t.x,a=t.y,s=t.text,r=t.textAnchor,n=t.foreColor,o=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.cssClass,d=t.backgroundColor,g=t.borderWidth,u=t.strokeDashArray,f=t.borderRadius,p=t.borderColor,x=t.appendTo,b=void 0===x?".apexcharts-annotations":x,m=t.paddingLeft,v=void 0===m?4:m,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=this.w,P=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||"start",fontSize:o||"12px",fontWeight:h||"regular",fontFamily:l||L.config.chart.fontFamily,foreColor:n||L.config.chart.foreColor,cssClass:c}),T=L.globals.dom.baseEl.querySelector(b);T&&T.appendChild(P.node);var z=P.bbox();if(t.draggable&&this.helpers.makeAnnotationDraggable(P,"texts",e),s){var I=this.graphics.drawRect(z.x-v,z.y-C,z.width+v+w,z.height+A+C,f,d||"transparent",1,g,p,u);T.insertBefore(I.node,P.node)}}},{key:"addShape",value:function(t,e){var i={type:t.type,x:t.x||0,y:t.y||0,width:t.width||"100%",height:t.height||50,circleRadius:t.radius||25,backgroundColor:t.backgroundColor||"#fff",opacity:t.opacity||1,borderWidth:t.borderWidth||0,borderRadius:t.borderRadius||4,borderColor:t.borderColor||"#c2c2c2",appendTo:t.appendTo||".apexcharts-annotations"},a=this.w;String(i.width).indexOf("%")>-1&&(i.width=parseInt(i.width,10)*parseInt(a.globals.svgWidth,10)/100);var s=null;s="circle"===i.type?this.graphics.drawCircle(i.circleRadius,{fill:i.backgroundColor,stroke:i.borderColor,"stroke-width":i.borderWidth,opacity:i.opacity,cx:i.x,cy:i.y}):this.graphics.drawRect(i.x,i.y,i.width,i.height,i.borderRadius,i.backgroundColor,i.opacity,i.borderWidth,i.borderColor);var r=a.globals.dom.baseEl.querySelector(i.appendTo);r&&r.appendChild(s.node),t.draggable&&(this.helpers.makeAnnotationDraggable(s,"shapes",e),s.node.classList.add("apexcharts-resizable-element"))}},{key:"addImage",value:function(t,e){var i=this.w,a=t.path,s=t.x,r=void 0===s?0:s,n=t.y,o=void 0===n?0:n,l=t.width,h=void 0===l?20:l,c=t.height,d=void 0===c?20:c,g=t.appendTo,u=void 0===g?".apexcharts-annotations":g,f=i.globals.dom.Paper.image(a);f.size(h,d).move(r,o);var p=i.globals.dom.baseEl.querySelector(u);p&&p.appendChild(f.node),t.draggable&&(this.helpers.makeAnnotationDraggable(f,"images",e),f.node.classList.add("apexcharts-resizable-element"))}},{key:"addXaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addPointAnnotationExternal",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addAnnotationExternal",value:function(t){var e=t.params,i=t.pushToMemory,a=t.context,s=t.type,r=t.contextMethod,n=a,o=n.w,l=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations")),h=l.childNodes.length+1,c=new S,d=Object.assign({},"xaxis"===s?c.xAxisAnnotation:"yaxis"===s?c.yAxisAnnotation:c.pointAnnotation),u=g.extend(d,e);switch(s){case"xaxis":this.addXaxisAnnotation(u,l,h);break;case"yaxis":this.addYaxisAnnotation(u,l,h);break;case"point":this.addPointAnnotation(u,l,h)}var f=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations .apexcharts-").concat(s,"-annotation-label[rel='").concat(h,"']")),p=this.helpers.addBackgroundToAnno(f,u);return p&&l.insertBefore(p.node,f),i&&o.globals.memory.methodsToExec.push({context:n,id:u.id?u.id:g.randomId(),method:r,label:"addAnnotation",params:e}),a}},{key:"clearAnnotations",value:function(t){var e=t.w,i=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations");e.globals.memory.methodsToExec.map((function(t,i){"addText"!==t.label&&"addAnnotation"!==t.label||e.globals.memory.methodsToExec.splice(i,1)})),i=g.listToArray(i),Array.prototype.forEach.call(i,(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)}))}},{key:"removeAnnotation",value:function(t,e){var i=t.w,a=i.globals.dom.baseEl.querySelectorAll(".".concat(e));a&&(i.globals.memory.methodsToExec.map((function(t,a){t.id===e&&i.globals.memory.methodsToExec.splice(a,1)})),Array.prototype.forEach.call(a,(function(t){t.parentElement.removeChild(t)})))}}]),t}(),L=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.opts=null,this.seriesIndex=0}return a(t,[{key:"clippedImgArea",value:function(t){var e=this.w,i=e.config,a=parseInt(e.globals.gridWidth,10),s=parseInt(e.globals.gridHeight,10),r=a>s?a:s,n=t.image,o=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(o=i.fill.image.width+1,l=i.fill.image.height):(o=r+1,l=r):(o=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,"pattern");p.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:"userSpaceOnUse",width:o+"px",height:l+"px"});var c=document.createElementNS(e.globals.SVGNS,"image");h.appendChild(c),c.setAttributeNS(window.SVG.xlink,"href",n),p.setAttrs(c,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:l+"px"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:"getSeriesIndex",value:function(t){var e=this.w;return("bar"===e.config.chart.type||"rangeBar"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||"heatmap"===e.config.chart.type?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(t){var e=this.w;this.opts=t;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var n=this.getFillColors()[this.seriesIndex];"function"==typeof n&&(n=n({seriesIndex:this.seriesIndex,dataPointIndex:t.dataPointIndex,value:t.value,w:e}));var o=this.getFillType(this.seriesIndex),l=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity,h=n;if(t.color&&(n=t.color),-1===n.indexOf("rgb")?n.length<9&&(h=g.hexToRgba(n,l)):n.indexOf("rgba")>-1&&(l=g.getOpacityFromRGBA(n)),t.opacity&&(l=t.opacity),"pattern"===o&&(a=this.handlePatternFill(a,n,l,h)),"gradient"===o&&(s=this.handleGradientFill(n,l,this.seriesIndex)),"image"===o){var c=r.fill.image.src,d=t.patternID?t.patternID:"";this.clippedImgArea({opacity:l,image:Array.isArray(c)?t.seriesNumber-1&&(c=g.getOpacityFromRGBA(h));var d=void 0===s.fill.gradient.opacityTo?e:Array.isArray(s.fill.gradient.opacityTo)?s.fill.gradient.opacityTo[i]:s.fill.gradient.opacityTo;if(void 0===s.fill.gradient.gradientToColors||0===s.fill.gradient.gradientToColors.length)a="dark"===s.fill.gradient.shade?o.shadeColor(-1*parseFloat(s.fill.gradient.shadeIntensity),t.indexOf("rgb")>-1?g.rgb2hex(t):t):o.shadeColor(parseFloat(s.fill.gradient.shadeIntensity),t.indexOf("rgb")>-1?g.rgb2hex(t):t);else{var u=s.fill.gradient.gradientToColors[r.seriesNumber];a=u,u.indexOf("rgba")>-1&&(d=g.getOpacityFromRGBA(u))}if(s.fill.gradient.inverseColors){var f=h;h=a,a=f}return h.indexOf("rgb")>-1&&(h=g.rgb2hex(h)),a.indexOf("rgb")>-1&&(a=g.rgb2hex(a)),n.drawGradient(l,h,a,c,d,r.size,s.fill.gradient.stops,s.fill.gradient.colorStops,i)}}]),t}(),P=function(){function t(i,a){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"setGlobalMarkerSize",value:function(){var t=this.w;if(t.globals.markers.size=Array.isArray(t.config.markers.size)?t.config.markers.size:[t.config.markers.size],t.globals.markers.size.length>0){if(t.globals.markers.size.length4&&void 0!==arguments[4]&&arguments[4],n=this.w,o=e,l=t,h=null,c=new p(this.ctx);if((n.globals.markers.size[e]>0||r)&&(h=c.group({class:r?"":"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),l.x instanceof Array)for(var d=0;d0:n.config.markers.size>0;if(b||r){g.isNumber(l.y[d])?x+=" w".concat(g.randomId()):x="apexcharts-nullpoint";var m=this.getMarkerConfig(x,e,f);n.config.series[o].data[i]&&(n.config.series[o].data[i].fillColor&&(m.pointFillColor=n.config.series[o].data[i].fillColor),n.config.series[o].data[i].strokeColor&&(m.pointStrokeColor=n.config.series[o].data[i].strokeColor)),a&&(m.pSize=a),(s=c.drawMarker(l.x[d],l.y[d],m)).attr("rel",f),s.attr("j",f),s.attr("index",e),s.node.setAttribute("default-marker-size",m.pSize);var v=new u(this.ctx);v.setSelectionFilter(s,e,f),this.addEvents(s),h&&h.add(s)}else void 0===n.globals.pointsArray[e]&&(n.globals.pointsArray[e]=[]),n.globals.pointsArray[e].push([l.x[d],l.y[d]])}return h}},{key:"getMarkerConfig",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.getMarkerStyle(e),r=a.globals.markers.size[e],n=a.config.markers;return null!==i&&n.discrete.length&&n.discrete.map((function(t){t.seriesIndex===e&&t.dataPointIndex===i&&(s.pointStrokeColor=t.strokeColor,s.pointFillColor=t.fillColor,r=t.size)})),{pSize:r,pRadius:n.radius,pWidth:n.strokeWidth instanceof Array?n.strokeWidth[e]:n.strokeWidth,pointStrokeColor:s.pointStrokeColor,pointFillColor:s.pointFillColor,shape:n.shape instanceof Array?n.shape[e]:n.shape,class:t,pointStrokeOpacity:n.strokeOpacity instanceof Array?n.strokeOpacity[e]:n.strokeOpacity,pointStrokeDashArray:n.strokeDashArray instanceof Array?n.strokeDashArray[e]:n.strokeDashArray,pointFillOpacity:n.fillOpacity instanceof Array?n.fillOpacity[e]:n.fillOpacity,seriesIndex:e}}},{key:"addEvents",value:function(t){var e=this.w,i=new p(this.ctx);t.node.addEventListener("mouseenter",i.pathMouseEnter.bind(this.ctx,t)),t.node.addEventListener("mouseleave",i.pathMouseLeave.bind(this.ctx,t)),t.node.addEventListener("mousedown",i.pathMouseDown.bind(this.ctx,t)),t.node.addEventListener("click",e.config.markers.onClick),t.node.addEventListener("dblclick",e.config.markers.onDblClick),t.node.addEventListener("touchstart",i.pathMouseDown.bind(this.ctx,t),{passive:!0})}},{key:"getMarkerStyle",value:function(t){var e=this.w,i=e.globals.markers.colors,a=e.config.markers.strokeColor||e.config.markers.strokeColors;return{pointStrokeColor:a instanceof Array?a[t]:a,pointFillColor:i instanceof Array?i[t]:i}}}]),t}(),T=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}return a(t,[{key:"draw",value:function(t,e,i){var a=this.w,s=new p(this.ctx),r=i.realIndex,n=i.pointsPos,o=i.zRatio,l=i.elParent,h=s.group({class:"apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type)});if(h.attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")")),n.x instanceof Array)for(var c=0;cx.maxBubbleRadius&&(f=x.maxBubbleRadius)}a.config.chart.animations.enabled||(u=f);var b=n.x[c],m=n.y[c];if(u=u||0,null!==m&&void 0!==a.globals.series[r][d]||(g=!1),g){var v=this.drawPoint(b,m,u,f,r,d,e);h.add(v)}l.add(h)}}},{key:"drawPoint",value:function(t,e,i,a,s,r,n){var o=this.w,l=s,h=new f(this.ctx),c=new u(this.ctx),d=new L(this.ctx),g=new P(this.ctx),x=new p(this.ctx),b=g.getMarkerConfig("apexcharts-marker",l),m=d.fillPath({seriesNumber:s,dataPointIndex:r,patternUnits:"objectBoundingBox",value:o.globals.series[s][n]}),v=x.drawCircle(i);if(o.config.series[l].data[r]&&o.config.series[l].data[r].fillColor&&(m=o.config.series[l].data[r].fillColor),v.attr({cx:t,cy:e,fill:m,stroke:b.pointStrokeColor,"stroke-width":b.pWidth,"stroke-dasharray":b.pointStrokeDashArray,"stroke-opacity":b.pointStrokeOpacity}),o.config.chart.dropShadow.enabled){var y=o.config.chart.dropShadow;c.dropShadow(v,y,s)}if(this.initialAnim&&!o.globals.dataChanged){var w=1;o.globals.resized||(w=o.config.chart.animations.speed),h.animateCircleRadius(v,0,a,w,o.globals.easing,(function(){window.setTimeout((function(){h.animationCompleted(v)}),100)}))}if(o.globals.dataChanged)if(this.dynamicAnim){var k,A,S,C,T=o.config.chart.animations.dynamicAnimation.speed;null!=(C=o.globals.previousPaths[s]&&o.globals.previousPaths[s][n])&&(k=C.x,A=C.y,S=void 0!==C.r?C.r:a);for(var z=0;zf.x+f.width+2||e>f.y+f.height+2||t+c4&&void 0!==arguments[4]?arguments[4]:2,r=this.w,n=new p(this.ctx),o=r.config.dataLabels,l=0,h=0,c=i,d=null;if(!o.enabled||t.x instanceof Array!=!0)return d;d=n.group({class:"apexcharts-data-labels"});for(var g=0;ge.globals.gridWidth+20)&&(o="");var b=e.globals.dataLabels.style.colors[r];(("bar"===e.config.chart.type||"rangeBar"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||e.config.dataLabels.distributed)&&(b=e.globals.dataLabels.style.colors[n]),d&&(b=d);var m=c.offsetX,v=c.offsetY;if("bar"!==e.config.chart.type&&"rangeBar"!==e.config.chart.type||(m=0,v=0),x.drawnextLabel){var y=i.drawText({width:100,height:parseInt(c.style.fontSize,10),x:a+m,y:s+v,foreColor:b,textAnchor:l||c.textAnchor,text:o,fontSize:c.style.fontSize,fontFamily:c.style.fontFamily,fontWeight:c.style.fontWeight||"normal"});if(y.attr({class:"apexcharts-datalabel",cx:a,cy:s}),c.dropShadow.enabled){var w=c.dropShadow;new u(this.ctx).dropShadow(y,w)}h.add(y),void 0===e.globals.lastDrawnDataLabelsIndexes[r]&&(e.globals.lastDrawnDataLabelsIndexes[r]=[]),e.globals.lastDrawnDataLabelsIndexes[r].push(n)}}}},{key:"addBackgroundToDataLabel",value:function(t,e){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,n=e.width,o=e.height,l=new p(this.ctx).drawRect(e.x-s,e.y-r/2,n+2*s,o+r,a.borderRadius,"transparent"===i.config.chart.background?"#fff":i.config.chart.background,a.opacity,a.borderWidth,a.borderColor);a.dropShadow.enabled&&new u(this.ctx).dropShadow(l,a.dropShadow);return l}},{key:"dataLabelsBackground",value:function(){var t=this.w;if("bubble"!==t.config.chart.type)for(var e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"),i=0;iString(f.globals.maxY).length?f.globals.minY:f.globals.maxY;P=x.getTextRects(f.globals.yLabelFormatters[0](T),parseFloat(A.style.fontSize))}var z={x:e,y:i,i:r,j:n,renderedPath:u,bcx:m,bcy:v,barHeight:h,barWidth:c,textRects:P,strokeWidth:b,dataLabelsX:y,dataLabelsY:w,barDataLabelsConfig:S,offX:C,offY:L};return k=this.barCtx.isHorizontal?this.calculateBarsDataLabelsPosition(z):this.calculateColumnsDataLabelsPosition(z),u.attr({cy:k.bcy,cx:k.bcx,j:n,val:l[r][n],barHeight:h,barWidth:c}),this.drawCalculatedDataLabels({x:k.dataLabelsX,y:k.dataLabelsY,val:this.barCtx.isTimelineBar?[a,s]:l[r][n],i:o,j:n,barWidth:c,barHeight:h,textRects:P,dataLabelsConfig:A})}},{key:"calculateColumnsDataLabelsPosition",value:function(t){var e,i=this.w,a=t.i,s=t.j,r=t.y,n=t.bcx,o=t.barWidth,l=t.barHeight,h=t.textRects,c=t.dataLabelsY,d=t.barDataLabelsConfig,g=t.strokeWidth,u=t.offX,f=t.offY;l=Math.abs(l);var p="vertical"===i.config.plotOptions.bar.dataLabels.orientation;n-=g/2;var x=i.globals.gridWidth/i.globals.dataPoints;if(e=i.globals.isXNumeric?n-o/2+u:n-x+o/2+u,p){e=e+h.height/2-g/2-2}var b=this.barCtx.series[a][s]<0,m=r;switch(this.barCtx.isReversed&&(m=r-l+(b?2*l:0),r-=l),d.position){case"center":c=p?b?m+l/2+f:m+l/2-f:b?m-l/2+h.height/2+f:m+l/2+h.height/2-f;break;case"bottom":c=p?b?m+l+f:m+l-f:b?m-l+h.height+g+f:m+l-h.height/2+g-f;break;case"top":c=p?b?m+f:m-f:b?m-h.height/2-f:m+h.height+f}return i.config.chart.stacked||(c<0?c=0+g:c+h.height/3>i.globals.gridHeight&&(c=i.globals.gridHeight-g)),{bcx:n,bcy:r,dataLabelsX:e,dataLabelsY:c}}},{key:"calculateBarsDataLabelsPosition",value:function(t){var e=this.w,i=t.x,a=t.i,s=t.j,r=t.bcy,n=t.barHeight,o=t.barWidth,l=t.textRects,h=t.dataLabelsX,c=t.strokeWidth,d=t.barDataLabelsConfig,g=t.offX,u=t.offY,f=e.globals.gridHeight/e.globals.dataPoints;o=Math.abs(o);var p=r-(this.barCtx.isTimelineBar?0:f)+n/2+l.height/2+u-3,x=this.barCtx.series[a][s]<0,b=i;switch(this.barCtx.isReversed&&(b=i+o-(x?2*o:0),i=e.globals.gridWidth-o),d.position){case"center":h=x?b+o/2-g:b-o/2+g;break;case"bottom":h=x?b+o-c-Math.round(l.width/2)-g:b-o+c+Math.round(l.width/2)+g;break;case"top":h=x?b-c+Math.round(l.width/2)-g:b-c-Math.round(l.width/2)+g}return e.config.chart.stacked||(h<0?h=h+l.width+c:h+l.width/2>e.globals.gridWidth&&(h=e.globals.gridWidth-l.width-c)),{bcx:i,bcy:r,dataLabelsX:h,dataLabelsY:p}}},{key:"drawCalculatedDataLabels",value:function(t){var e=t.x,i=t.y,a=t.val,s=t.i,r=t.j,o=t.textRects,l=t.barHeight,h=t.barWidth,c=t.dataLabelsConfig,d=this.w,g="rotate(0)";"vertical"===d.config.plotOptions.bar.dataLabels.orientation&&(g="rotate(-90, ".concat(e,", ").concat(i,")"));var u=new z(this.barCtx.ctx),f=new p(this.barCtx.ctx),x=c.formatter,b=null,m=d.globals.collapsedSeriesIndices.indexOf(s)>-1;if(c.enabled&&!m){b=f.group({class:"apexcharts-data-labels",transform:g});var v="";void 0!==a&&(v=x(a,{seriesIndex:s,dataPointIndex:r,w:d})),0===a&&d.config.chart.stacked&&(v="");var y=d.globals.series[s][r]<=0,w=d.config.plotOptions.bar.dataLabels.position;if("vertical"===d.config.plotOptions.bar.dataLabels.orientation&&("top"===w&&(c.textAnchor=y?"end":"start"),"center"===w&&(c.textAnchor="middle"),"bottom"===w&&(c.textAnchor=y?"end":"start")),this.barCtx.isTimelineBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels)h0&&o.width/1.6>h||h<0&&o.width/1.6l&&(v="")));var k=n({},c);this.barCtx.isHorizontal&&a<0&&("start"===c.textAnchor?k.textAnchor="end":"end"===c.textAnchor&&(k.textAnchor="start")),u.plotDataLabelsText({x:e,y:i,text:v,i:s,j:r,parent:b,dataLabelsConfig:k,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return b}}]),t}(),M=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.legendInactiveClass="legend-mouseover-inactive"}return a(t,[{key:"getAllSeriesEls",value:function(){return this.w.globals.dom.baseEl.getElementsByClassName("apexcharts-series")}},{key:"getSeriesByName",value:function(t){return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(g.escapeString(t),"']"))}},{key:"isSeriesHidden",value:function(t){var e=this.getSeriesByName(t),i=parseInt(e.getAttribute("data:realIndex"),10);return{isHidden:e.classList.contains("apexcharts-series-collapsed"),realIndex:i}}},{key:"addCollapsedClassToSeries",value:function(t,e){var i=this.w;function a(i){for(var a=0;a0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w,s=g.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,t&&(e&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:"emptyCollapsedSeries",value:function(t){for(var e=this.w,i=0;i-1&&(t[i].data=[]);return t}},{key:"toggleSeriesOnHover",value:function(t,e){var i=this.w,a=i.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels");if("mousemove"===t.type){var s=parseInt(e.getAttribute("rel"),10)-1,r=null,n=null;i.globals.axisCharts||"radialBar"===i.config.chart.type?i.globals.axisCharts?(r=i.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(s,"']")),n=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(s,"']"))):r=i.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(s+1,"']")):r=i.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(s+1,"'] path"));for(var o=0;o=t.from&&a<=t.to&&s[e].classList.remove(i.legendInactiveClass)}}(a.config.plotOptions.heatmap.colorScale.ranges[n])}else"mouseout"===t.type&&r("remove")}},{key:"getActiveConfigSeriesIndex",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.w,i=0;if(e.config.series.length>1)for(var a=e.config.series.map((function(i,a){var s=!1;return t&&(s="bar"===e.config.series[a].type||"column"===e.config.series[a].type),i.data&&i.data.length>0&&!s?a:-1})),s=0;s0)for(var a=0;a0)for(var a=0;a0?t:[]}));return t}}]),t}(),X=function(){function t(i){e(this,t),this.w=i.w,this.barCtx=i}return a(t,[{key:"initVariables",value:function(t){var e=this.w;this.barCtx.series=t,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=t[i].length),e.globals.isXNumeric)for(var a=0;ae.globals.minX&&e.globals.seriesX[i][a]0&&(a=l.globals.minXDiff/c),(r=a/this.barCtx.seriesLen*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}n=l.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.yaxisIndex]-(this.barCtx.isReversed?l.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.yaxisIndex]:0),t=l.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:n,zeroW:o}}},{key:"getPathFillColor",value:function(t,e,i,a){var s=this.w,r=new L(this.barCtx.ctx),n=null,o=this.barCtx.barOptions.distributed?i:e;this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(a){t[e][i]>=a.from&&t[e][i]<=a.to&&(n=a.color)}));return s.config.series[e].data[i]&&s.config.series[e].data[i].fillColor&&(n=s.config.series[e].data[i].fillColor),r.fillPath({seriesNumber:this.barCtx.barOptions.distributed?o:a,dataPointIndex:i,color:n,value:t[e][i]})}},{key:"getStrokeWidth",value:function(t,e,i){var a=0,s=this.w;return void 0===this.barCtx.series[t][e]||null===this.barCtx.series[t][e]?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:"barBackground",value:function(t){var e=t.bc,i=t.i,a=t.x1,s=t.x2,r=t.y1,n=t.y2,o=t.elSeries,l=this.w,h=new p(this.barCtx.ctx),c=new M(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&c===i){e>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(e=0);var d=this.barCtx.barOptions.colors.backgroundBarColors[e],g=h.drawRect(void 0!==a?a:0,void 0!==r?r:0,void 0!==s?s:l.globals.gridWidth,void 0!==n?n:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,d,this.barCtx.barOptions.colors.backgroundBarOpacity);o.add(g),g.node.classList.add("apexcharts-backgroundBar")}}},{key:"getColumnPaths",value:function(t){var e=t.barWidth,i=t.barXPosition,a=t.yRatio,s=t.y1,r=t.y2,n=t.strokeWidth,o=t.series,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new p(this.barCtx.ctx);(n=Array.isArray(n)?n[l]:n)||(n=0);var u={barWidth:e,strokeWidth:n,yRatio:a,barXPosition:i,y1:s,y2:r},f=this.getRoundedBars(d,u,o,h,c),x=i,b=i+e,m=g.move(x,f.y1),v=g.move(x,f.y1);return d.globals.previousPaths.length>0&&(v=this.barCtx.getPreviousPath(l,c,!1)),{pathTo:m=m+g.line(x,f.y2)+f.endingPath+g.line(b-n,f.y2)+g.line(b-n,f.y1)+f.startingPath+"z",pathFrom:v=v+g.line(x,s)+g.line(b-n,s)+g.line(b-n,s)+g.line(b-n,s)+g.line(x,s)}}},{key:"getBarpaths",value:function(t){var e=t.barYPosition,i=t.barHeight,a=t.x1,s=t.x2,r=t.strokeWidth,n=t.series,o=t.realIndex,l=t.i,h=t.j,c=t.w,d=new p(this.barCtx.ctx);(r=Array.isArray(r)?r[o]:r)||(r=0);var g={barHeight:i,strokeWidth:r,barYPosition:e,x2:s,x1:a},u=this.getRoundedBars(c,g,n,l,h),f=d.move(u.x1,e),x=d.move(u.x1,e);c.globals.previousPaths.length>0&&(x=this.barCtx.getPreviousPath(o,h,!1));var b=e,m=e+i;return{pathTo:f=f+d.line(u.x2,b)+u.endingPath+d.line(u.x2,m-r)+d.line(u.x1,m-r)+u.startingPath+"z",pathFrom:x=x+d.line(a,b)+d.line(a,m-r)+d.line(a,m-r)+d.line(a,m-r)+d.line(a,b)}}},{key:"getRoundedBars",value:function(t,e,i,a,s){var r=new p(this.barCtx.ctx),n=Array.isArray(e.strokeWidth)?e.strokeWidth[a]:e.strokeWidth;if(n||(n=0),this.barCtx.isHorizontal){var o=null,l="",h=e.x2,c=e.x1;if(void 0!==i[a][s]||null!==i[a][s]){var d=i[a][s]<0,g=e.barHeight/2-n;switch(d&&(g=-e.barHeight/2-n),g>Math.abs(h-c)&&(g=Math.abs(h-c)),"rounded"===this.barCtx.barOptions.endingShape&&(h=e.x2-g/2),"rounded"===this.barCtx.barOptions.startingShape&&(c=e.x1+g/2),this.barCtx.barOptions.endingShape){case"flat":o=r.line(h,e.barYPosition+e.barHeight-n);break;case"rounded":o=r.quadraticCurve(h+g,e.barYPosition+(e.barHeight-n)/2,h,e.barYPosition+e.barHeight-n)}switch(this.barCtx.barOptions.startingShape){case"flat":l=r.line(c,e.barYPosition+e.barHeight-n);break;case"rounded":l=r.quadraticCurve(c-g,e.barYPosition+e.barHeight/2,c,e.barYPosition)}}return{endingPath:o,startingPath:l,x2:h,x1:c}}var u=null,f="",x=e.y2,b=e.y1;if(void 0!==i[a][s]||null!==i[a][s]){var m=i[a][s]<0,v=e.barWidth/2-n;switch(m&&(v=-e.barWidth/2-n),v>Math.abs(x-b)&&(v=Math.abs(x-b)),"rounded"===this.barCtx.barOptions.endingShape&&(x+=v/2),"rounded"===this.barCtx.barOptions.startingShape&&(b-=v/2),this.barCtx.barOptions.endingShape){case"flat":u=r.line(e.barXPosition+e.barWidth-n,x);break;case"rounded":u=r.quadraticCurve(e.barXPosition+(e.barWidth-n)/2,x-v,e.barXPosition+e.barWidth-n,x)}switch(this.barCtx.barOptions.startingShape){case"flat":f=r.line(e.barXPosition+e.barWidth-n,b);break;case"rounded":f=r.quadraticCurve(e.barXPosition+(e.barWidth-n)/2,b+v,e.barXPosition,b)}}return{endingPath:u,startingPath:f,y2:x,y1:b}}}]),t}(),E=function(){function t(i,a){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.barOptions=s.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=s.config.stroke.width,this.isNullValue=!1,this.isTimelineBar="datetime"===s.config.xaxis.type&&s.globals.seriesRangeBarTimeline.length,this.xyRatios=a,null!==this.xyRatios&&(this.xRatio=a.xRatio,this.initialXRatio=a.initialXRatio,this.yRatio=a.yRatio,this.invertedXRatio=a.invertedXRatio,this.invertedYRatio=a.invertedYRatio,this.baseLineY=a.baseLineY,this.baseLineInvertedY=a.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0,this.barHelpers=new X(this)}return a(t,[{key:"draw",value:function(t,e){var i=this.w,a=new p(this.ctx),s=new m(this.ctx,i);t=s.getLogSeries(t),this.series=t,this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);var r=a.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.");for(var o=0,l=0;o0&&(this.visibleI=this.visibleI+1);var k=0,A=0;this.yRatio.length>1&&(this.yaxisIndex=y),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var S=this.barHelpers.initialPositions();x=S.y,k=S.barHeight,c=S.yDivision,u=S.zeroW,f=S.x,A=S.barWidth,h=S.xDivision,d=S.zeroH,this.horizontal||v.push(f+A/2);for(var C=a.group({class:"apexcharts-datalabels","data:realIndex":y}),L=0;L0&&v.push(f+A/2),b.push(x);var I=this.barHelpers.getPathFillColor(t,o,L,y);this.renderSeries({realIndex:y,pathFill:I,j:L,i:o,pathFrom:T.pathFrom,pathTo:T.pathTo,strokeWidth:P,elSeries:w,x:f,y:x,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:C,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=b,r.add(w)}return r}},{key:"renderSeries",value:function(t){var e=t.realIndex,i=t.pathFill,a=t.lineFill,s=t.j,r=t.i,n=t.pathFrom,o=t.pathTo,l=t.strokeWidth,h=t.elSeries,c=t.x,d=t.y,g=t.y1,f=t.y2,x=t.series,b=t.barHeight,m=t.barWidth,v=t.barYPosition,y=t.elDataLabelsWrap,w=t.visibleSeries,k=t.type,A=this.w,S=new p(this.ctx);a||(a=this.barOptions.distributed?A.globals.stroke.colors[s]:A.globals.stroke.colors[e]),A.config.series[r].data[s]&&A.config.series[r].data[s].strokeColor&&(a=A.config.series[r].data[s].strokeColor),this.isNullValue&&(i="none");var C=s/A.config.chart.animations.animateGradually.delay*(A.config.chart.animations.speed/A.globals.dataPoints)/2.4,L=S.renderPaths({i:r,j:s,realIndex:e,pathFrom:n,pathTo:o,stroke:a,strokeWidth:l,strokeLineCap:A.config.stroke.lineCap,fill:i,animationDelay:C,initialSpeed:A.config.chart.animations.speed,dataChangeSpeed:A.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(k,"-area")});L.attr("clip-path","url(#gridRectMask".concat(A.globals.cuid,")")),void 0!==g&&void 0!==f&&(L.attr("data-range-y1",g),L.attr("data-range-y2",f)),new u(this.ctx).setSelectionFilter(L,e,s),h.add(L);var P=new I(this).handleBarDataLabels({x:c,y:d,y1:g,y2:f,i:r,j:s,series:x,realIndex:e,barHeight:b,barWidth:m,barYPosition:v,renderedPath:L,visibleSeries:w});return null!==P&&y.add(P),h.add(y),h}},{key:"drawBarPaths",value:function(t){var e=t.indexes,i=t.barHeight,a=t.strokeWidth,s=t.zeroW,r=t.x,n=t.y,o=t.yDivision,l=t.elSeries,h=this.w,c=e.i,d=e.j,g=e.bc;h.globals.isXNumeric&&(n=(h.globals.seriesX[c][d]-h.globals.minX)/this.invertedXRatio-i);var u=n+i*this.visibleI;r=void 0===this.series[c][d]||null===this.series[c][d]?s:s+this.series[c][d]/this.invertedYRatio-2*(this.isReversed?this.series[c][d]/this.invertedYRatio:0);var f=this.barHelpers.getBarpaths({barYPosition:u,barHeight:i,x1:s,x2:r,strokeWidth:a,series:this.series,realIndex:e.realIndex,i:c,j:d,w:h});return h.globals.isXNumeric||(n+=o),this.barHelpers.barBackground({bc:g,i:c,y1:u-i*this.visibleI,y2:i*this.seriesLen,elSeries:l}),{pathTo:f.pathTo,pathFrom:f.pathFrom,x:r,y:n,barYPosition:u}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,n=t.zeroH,o=t.strokeWidth,l=t.elSeries,h=this.w,c=e.i,d=e.j,g=e.bc;if(h.globals.isXNumeric){var u=c;h.globals.seriesX[c].length||(u=h.globals.maxValsInArrayIndex),i=(h.globals.seriesX[u][d]-h.globals.minX)/this.xRatio-r*this.seriesLen/2}var f=i+r*this.visibleI;a=void 0===this.series[c][d]||null===this.series[c][d]?n:n-this.series[c][d]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[c][d]/this.yRatio[this.yaxisIndex]:0);var p=this.barHelpers.getColumnPaths({barXPosition:f,barWidth:r,y1:n,y2:a,strokeWidth:o,series:this.series,realIndex:e.realIndex,i:c,j:d,w:h});return h.globals.isXNumeric||(i+=s),this.barHelpers.barBackground({bc:g,i:c,x1:f-o/2-r*this.visibleI,x2:r*this.seriesLen+o/2,elSeries:l}),{pathTo:p.pathTo,pathFrom:p.pathFrom,x:i,y:a,barXPosition:f}}},{key:"getPreviousPath",value:function(t,e){for(var i,a=this.w,s=0;s0&&parseInt(r.realIndex,10)===parseInt(t,10)&&void 0!==a.globals.previousPaths[s].paths[e]&&(i=a.globals.previousPaths[s].paths[e].d)}return i}}]),t}(),Y=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return a(t,[{key:"isValidDate",value:function(t){return!isNaN(this.parseDate(t))}},{key:"getTimeStamp",value:function(t){return Date.parse(t)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toISOString().substr(0,25)).getTime():new Date(t).getTime():t}},{key:"getDate",value:function(t){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toUTCString()):new Date(t)}},{key:"parseDate",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getTimeStamp(t);var i=Date.parse(t.replace(/-/g,"/").replace(/[a-z]+/gi," "));return i=this.getTimeStamp(i)}},{key:"formatDate",value:function(t,e){var i=this.w.globals.locale,a=this.w.config.xaxis.labels.datetimeUTC,s=["\0"].concat(d(i.months)),r=["\x01"].concat(d(i.shortMonths)),n=["\x02"].concat(d(i.days)),o=["\x03"].concat(d(i.shortDays));function l(t,e){var i=t+"";for(e=e||2;i.length12?u-12:0===u?12:u;e=(e=(e=(e=e.replace(/(^|[^\\])HH+/g,"$1"+l(u))).replace(/(^|[^\\])H/g,"$1"+u)).replace(/(^|[^\\])hh+/g,"$1"+l(f))).replace(/(^|[^\\])h/g,"$1"+f);var p=a?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\])mm+/g,"$1"+l(p))).replace(/(^|[^\\])m/g,"$1"+p);var x=a?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\])ss+/g,"$1"+l(x))).replace(/(^|[^\\])s/g,"$1"+x);var b=a?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\])fff+/g,"$1"+l(b,3)),b=Math.round(b/10),e=e.replace(/(^|[^\\])ff/g,"$1"+l(b)),b=Math.round(b/10);var m=u<12?"AM":"PM";e=(e=(e=e.replace(/(^|[^\\])f/g,"$1"+b)).replace(/(^|[^\\])TT+/g,"$1"+m)).replace(/(^|[^\\])T/g,"$1"+m.charAt(0));var v=m.toLowerCase();e=(e=e.replace(/(^|[^\\])tt+/g,"$1"+v)).replace(/(^|[^\\])t/g,"$1"+v.charAt(0));var y=-t.getTimezoneOffset(),w=a||!y?"Z":y>0?"+":"-";if(!a){var k=(y=Math.abs(y))%60;w+=l(Math.floor(y/60))+":"+l(k)}e=e.replace(/(^|[^\\])K/g,"$1"+w);var A=(a?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(n[0],"g"),n[A])).replace(new RegExp(o[0],"g"),o[A])).replace(new RegExp(s[0],"g"),s[c])).replace(new RegExp(r[0],"g"),r[c])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(t,e,i){var a=this.w;void 0!==a.config.xaxis.min&&(t=a.config.xaxis.min),void 0!==a.config.xaxis.max&&(e=a.config.xaxis.max);var s=this.getDate(t),r=this.getDate(e),n=this.formatDate(s,"yyyy MM dd HH mm").split(" "),o=this.formatDate(r,"yyyy MM dd HH mm").split(" ");return{minMinute:parseInt(n[4],10),maxMinute:parseInt(o[4],10),minHour:parseInt(n[3],10),maxHour:parseInt(o[3],10),minDate:parseInt(n[2],10),maxDate:parseInt(o[2],10),minMonth:parseInt(n[1],10)-1,maxMonth:parseInt(o[1],10)-1,minYear:parseInt(n[0],10),maxYear:parseInt(o[0],10)}}},{key:"isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"calculcateLastDaysOfMonth",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:"determineDaysOfYear",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:"determineRemainingDaysOfYear",value:function(t,e,i){var a=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&a++,a}},{key:"determineDaysOfMonths",value:function(t,e){var i=30;switch(t=g.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),F=function(t){function i(){return e(this,i),c(this,l(i).apply(this,arguments))}return o(i,t),a(i,[{key:"draw",value:function(t,e){var i=this.w,a=new p(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=i.globals.seriesRangeStart,this.seriesRangeEnd=i.globals.seriesRangeEnd,this.barHelpers.initVariables(t);for(var s=a.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),r=0;r0&&(this.visibleI=this.visibleI+1);var b=0,m=0;this.yRatio.length>1&&(this.yaxisIndex=f);var v=this.barHelpers.initialPositions();d=v.y,h=v.zeroW,c=v.x,m=v.barWidth,o=v.xDivision,l=v.zeroH;for(var y=a.group({class:"apexcharts-datalabels","data:realIndex":f}),w=0;w0}));return a=s+r*this.visibleI+n*g,u>-1&&!l.config.plotOptions.bar.rangeBarOverlap&&(h=l.globals.seriesRangeBarTimeline[e][u].overlaps).indexOf(c)>-1&&(a=(r=o.barHeight/h.length)*this.visibleI+n*(100-parseInt(this.barOptions.barHeight,10))/100/2+r*(this.visibleI+h.indexOf(c))+n*g),{barYPosition:a,barHeight:r}}},{key:"drawRangeColumnPaths",value:function(t){var e=t.indexes,i=t.x,a=(t.strokeWidth,t.xDivision),s=t.barWidth,r=t.zeroH,n=this.w,o=e.i,l=e.j,h=this.yRatio[this.yaxisIndex],c=e.realIndex,d=this.getRangeValue(c,l),g=Math.min(d.start,d.end),u=Math.max(d.start,d.end);n.globals.isXNumeric&&(i=(n.globals.seriesX[o][l]-n.globals.minX)/this.xRatio-s/2);var f=i+s*this.visibleI;void 0===this.series[o][l]||null===this.series[o][l]?g=r:(g=r-g/h,u=r-u/h);var p=Math.abs(u-g),x=this.barHelpers.getColumnPaths({barXPosition:f,barWidth:s,y1:g,y2:u,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:c,j:l,w:n});return n.globals.isXNumeric||(i+=a),{pathTo:x.pathTo,pathFrom:x.pathFrom,barHeight:p,x:i,y:u,barXPosition:f}}},{key:"drawRangeBarPaths",value:function(t){var e=t.indexes,i=t.y,a=t.y1,s=t.y2,r=t.yDivision,n=t.barHeight,o=t.barYPosition,l=t.zeroW,h=this.w,c=l+a/this.invertedYRatio,d=l+s/this.invertedYRatio,g=Math.abs(d-c),u=this.barHelpers.getBarpaths({barYPosition:o,barHeight:n,x1:c,x2:d,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:e.realIndex,j:e.j,w:h});return h.globals.isXNumeric||(i+=r),{pathTo:u.pathTo,pathFrom:u.pathFrom,barWidth:g,x:d,y:i}}},{key:"getRangeValue",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}},{key:"getTooltipValues",value:function(t){var e=t.ctx,i=t.seriesIndex,a=t.dataPointIndex,s=t.y1,r=t.y2,n=t.w,o=n.globals.seriesRangeStart[i][a],l=n.globals.seriesRangeEnd[i][a],h=n.globals.labels[a],c=n.config.series[i].name,d=n.config.tooltip.y.formatter,g=n.config.tooltip.y.title.formatter,u={w:n,seriesIndex:i,dataPointIndex:a};"function"==typeof g&&(c=g(c,u)),s&&r&&(o=s,l=r,n.config.series[i].data[a].x&&(h=n.config.series[i].data[a].x+":"),"function"==typeof d&&(h=d(h,u)));var f="",p="",x=n.globals.colors[i];if(void 0===n.config.tooltip.x.formatter)if("datetime"===n.config.xaxis.type){var b=new Y(e);f=b.formatDate(b.getDate(o),n.config.tooltip.x.format),p=b.formatDate(b.getDate(l),n.config.tooltip.x.format)}else f=o,p=l;else f=n.config.tooltip.x.formatter(o),p=n.config.tooltip.x.formatter(l);return{start:o,end:l,startVal:f,endVal:p,ylabel:h,color:x,seriesName:c}}},{key:"buildCustomTooltipHTML",value:function(t){var e=t.color,i=t.seriesName;return'
'+(i||"")+'
'+t.ylabel+' '+t.start+' - '+t.end+"
"}}]),i}(E),R=function(){function t(i){e(this,t),this.opts=i}return a(t,[{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(t){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text="",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0;return g.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]},background:{enabled:!1}},stroke:{width:0,lineCap:"square"},fill:{opacity:.85},legend:{markers:{shape:"square",radius:2,size:8}},tooltip:{shared:!1},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"candlestick",value:function(){return{stroke:{width:1,colors:["#333"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var e=t.seriesIndex,i=t.dataPointIndex,a=t.w;return'
Open: '+a.globals.seriesCandleO[e][i]+'
High: '+a.globals.seriesCandleH[e][i]+'
Low: '+a.globals.seriesCandleL[e][i]+'
Close: '+a.globals.seriesCandleC[e][i]+"
"}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{stroke:{width:0,lineCap:"square"},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,a=e.dataPointIndex,s=e.w,r=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-r},background:{enabled:!1},style:{colors:["#fff"]}},tooltip:{shared:!1,followCursor:!0,custom:function(t){return t.w.config.plotOptions&&t.w.config.plotOptions.bar&&t.w.config.plotOptions.bar.horizontal?function(t){var e=new F(t.ctx,null),i=e.getTooltipValues(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.startVal,o=i.endVal;return e.buildCustomTooltipHTML({color:a,seriesName:s,ylabel:r,start:n,end:o})}(t):function(t){var e=new F(t.ctx,null),i=e.getTooltipValues(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return e.buildCustomTooltipHTML({color:a,seriesName:s,ylabel:r,start:n,end:o})}(t)}},xaxis:{tickPlacement:"between",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"area",value:function(){return{stroke:{width:4},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"brush",value:function(t){return g.extend(t,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(t){t.dataLabels=t.dataLabels||{},t.dataLabels.formatter=t.dataLabels.formatter||void 0;var e=t.dataLabels.formatter;return t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})),"bar"===t.chart.type&&(t.dataLabels.formatter=e||function(t){return"number"==typeof t&&t?t.toFixed(0)+"%":t}),t}},{key:"convertCatToNumeric",value:function(t){return t.xaxis.convertedCatToNumeric=!0,t}},{key:"convertCatToNumericXaxis",value:function(t,e,i){t.xaxis.type="numeric",t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return g.isNumber(t)?Math.floor(t):t};var a=t.xaxis.labels.formatter,s=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(s=i.map((function(t){return t.toString()}))),s&&s.length&&(t.xaxis.labels.formatter=function(t){return g.isNumber(t)?a(s[Math.floor(t)-1]):a(t)}),t.xaxis.categories=[],t.labels=[],t.xaxis.tickAmount=t.xaxis.tickAmount||"dataPoints",t}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",stops:[0,100]}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"polarArea",value:function(){return this.opts.yaxis[0].tickAmount=this.opts.yaxis[0].tickAmount?this.opts.yaxis[0].tickAmount:6,{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:"11px"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(t){return t},style:{colors:["#a8a8a8"],fontSize:"11px"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}}]),t}(),D=function(){function i(t){e(this,i),this.opts=t}return a(i,[{key:"init",value:function(e){var i=e.responsiveOverride,a=this.opts,s=new S,r=new R(a);this.chartType=a.chart.type,"histogram"===this.chartType&&(a.chart.type="bar",a=g.extend({plotOptions:{bar:{columnWidth:"99.99%"}}},a)),a=this.extendYAxis(a),a=this.extendAnnotations(a);var n=s.init(),o={};if(a&&"object"===t(a)){var l={};l=-1!==["line","area","bar","candlestick","rangeBar","histogram","bubble","scatter","heatmap","pie","polarArea","donut","radar","radialBar"].indexOf(a.chart.type)?r[a.chart.type]():r.line(),a.chart.brush&&a.chart.brush.enabled&&(l=r.brush(l)),a.chart.stacked&&"100%"===a.chart.stackType&&(a=r.stacked100(a)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(a),a.xaxis=a.xaxis||window.Apex.xaxis||{},i||(a.xaxis.convertedCatToNumeric=!1),((a=this.checkForCatToNumericXAxis(this.chartType,l,a)).chart.sparkline&&a.chart.sparkline.enabled||window.Apex.chart&&window.Apex.chart.sparkline&&window.Apex.chart.sparkline.enabled)&&(l=r.sparkline(l)),o=g.extend(n,l)}var h=g.extend(o,window.Apex);return n=g.extend(h,a),n=this.handleUserInputErrors(n)}},{key:"checkForCatToNumericXAxis",value:function(t,e,i){var a=new R(i),s="bar"===t&&i.plotOptions&&i.plotOptions.bar&&i.plotOptions.bar.horizontal,r="pie"===t||"polarArea"===t||"donut"===t||"radar"===t||"radialBar"===t||"heatmap"===t,n="datetime"!==i.xaxis.type&&"numeric"!==i.xaxis.type,o=i.xaxis.tickPlacement?i.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return s||r||!n||"between"===o||(i=a.convertCatToNumeric(i)),i}},{key:"extendYAxis",value:function(t,e){var i=new S;(void 0===t.yaxis||!t.yaxis||Array.isArray(t.yaxis)&&0===t.yaxis.length)&&(t.yaxis={}),t.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(t.yaxis=g.extend(t.yaxis,window.Apex.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[g.extend(i.yAxis,t.yaxis)]:t.yaxis=g.extendArray(t.yaxis,i.yAxis);var a=!1;t.yaxis.forEach((function(t){t.logarithmic&&(a=!0)}));var s=t.series;return e&&!s&&(s=e.config.series),a&&s.length!==t.yaxis.length&&s.length&&(t.yaxis=s.map((function(e,a){if(e.name||(s[a].name="series-".concat(a+1)),t.yaxis[a])return t.yaxis[a].seriesName=s[a].name,t.yaxis[a];var r=g.extend(i.yAxis,t.yaxis[0]);return r.show=!1,r}))),a&&s.length>1&&s.length!==t.yaxis.length&&console.warn("A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both."),t}},{key:"extendAnnotations",value:function(t){return void 0===t.annotations&&(t.annotations={},t.annotations.yaxis=[],t.annotations.xaxis=[],t.annotations.points=[]),t=this.extendYAxisAnnotations(t),t=this.extendXAxisAnnotations(t),t=this.extendPointAnnotations(t)}},{key:"extendYAxisAnnotations",value:function(t){var e=new S;return t.annotations.yaxis=g.extendArray(void 0!==t.annotations.yaxis?t.annotations.yaxis:[],e.yAxisAnnotation),t}},{key:"extendXAxisAnnotations",value:function(t){var e=new S;return t.annotations.xaxis=g.extendArray(void 0!==t.annotations.xaxis?t.annotations.xaxis:[],e.xAxisAnnotation),t}},{key:"extendPointAnnotations",value:function(t){var e=new S;return t.annotations.points=g.extendArray(void 0!==t.annotations.points?t.annotations.points:[],e.pointAnnotation),t}},{key:"checkForDarkTheme",value:function(t){t.theme&&"dark"===t.theme.mode&&(t.tooltip||(t.tooltip={}),"light"!==t.tooltip.theme&&(t.tooltip.theme="dark"),t.chart.foreColor||(t.chart.foreColor="#f6f7f8"),t.theme.palette||(t.theme.palette="palette4"))}},{key:"handleUserInputErrors",value:function(t){var e=t;if(e.tooltip.shared&&e.tooltip.intersect)throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.");if(("bar"===e.chart.type||"rangeBar"===e.chart.type)&&e.plotOptions.bar.horizontal){if(e.yaxis.length>1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return"bar"!==e.chart.type&&"rangeBar"!==e.chart.type||e.tooltip.shared&&("barWidth"===e.xaxis.crosshairs.width&&e.series.length>1&&(console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'),e.xaxis.crosshairs.width="tickWidth"),e.plotOptions.bar.horizontal&&(e.states.hover.type="none",e.tooltip.shared=!1),e.tooltip.followCursor||(console.warn("followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true","color: blue;"),e.tooltip.followCursor=!0)),"candlestick"===e.chart.type&&e.yaxis[0].reversed&&(console.warn("Reversed y-axis in candlestick chart is not supported."),e.yaxis[0].reversed=!1),e.chart.group&&0===e.yaxis[0].labels.minWidth&&console.warn("It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour."),Array.isArray(e.stroke.width)&&"line"!==e.chart.type&&"area"!==e.chart.type&&(console.warn("stroke.width option accepts array only for line and area charts. Reverted back to Number"),e.stroke.width=e.stroke.width[0]),e}}]),i}(),H=function(){function t(){e(this,t)}return a(t,[{key:"initGlobalVars",value:function(t){t.series=[],t.seriesCandleO=[],t.seriesCandleH=[],t.seriesCandleL=[],t.seriesCandleC=[],t.seriesRangeStart=[],t.seriesRangeEnd=[],t.seriesRangeBarTimeline=[],t.seriesPercent=[],t.seriesX=[],t.seriesZ=[],t.seriesNames=[],t.seriesTotals=[],t.seriesLog=[],t.stackedSeriesTotals=[],t.seriesXvalues=[],t.seriesYvalues=[],t.labels=[],t.categoryLabels=[],t.timescaleLabels=[],t.noLabelsProvided=!1,t.resizeTimer=null,t.selectionResizeTimer=null,t.delayedElements=[],t.pointsArray=[],t.dataLabelsRects=[],t.isXNumeric=!1,t.xaxisLabelsCount=0,t.skipLastTimelinelabel=!1,t.skipFirstTimelinelabel=!1,t.x2SpaceAvailable=0,t.isDataXYZ=!1,t.isMultiLineX=!1,t.isMultipleYAxis=!1,t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE,t.minYArr=[],t.maxYArr=[],t.maxX=-Number.MAX_VALUE,t.minX=Number.MAX_VALUE,t.initialMaxX=-Number.MAX_VALUE,t.initialMinX=Number.MAX_VALUE,t.maxDate=0,t.minDate=Number.MAX_VALUE,t.minZ=Number.MAX_VALUE,t.maxZ=-Number.MAX_VALUE,t.minXDiff=Number.MAX_VALUE,t.yAxisScale=[],t.xAxisScale=null,t.xAxisTicksPositions=[],t.yLabelsCoords=[],t.yTitleCoords=[],t.barPadForNumericAxis=0,t.padHorizontal=0,t.xRange=0,t.yRange=[],t.zRange=0,t.dataPoints=0,t.xTickAmount=0}},{key:"globalVars",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],yAxisSameScaleIndices:[],maxValsInArrayIndex:0,radialSize:0,zoomEnabled:"zoom"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:"pan"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:"selection"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],x2SpaceAvailable:0,hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:"init",value:function(t){var e=this.globalVars(t);return this.initGlobalVars(e),e.initialConfig=g.extend({},t),e.initialSeries=g.clone(t.series),e.lastXAxis=JSON.parse(JSON.stringify(e.initialConfig.xaxis)),e.lastYAxis=JSON.parse(JSON.stringify(e.initialConfig.yaxis)),e}}]),t}(),N=function(){function t(i){e(this,t),this.opts=i}return a(t,[{key:"init",value:function(){var t=new D(this.opts).init({responsiveOverride:!1});return{config:t,globals:(new H).init(t)}}}]),t}(),O=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.coreUtils=new m(this.ctx)}return a(t,[{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var t=this.w.config.series.slice(),e=new M(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:"isFormat2DArray",value:function(){var t=this.w.config.series.slice(),e=new M(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(t,e){var i=this.w.config,a=this.w.globals;i.xaxis.sorted&&("datetime"===i.xaxis.type?t[e].data.sort((function(t,e){return new Date(t[0]).getTime()-new Date(e[0]).getTime()})):"numeric"===i.xaxis.type&&t[e].data.sort((function(t,e){return t[0]-e[0]})));for(var s=0;s-1&&(r=this.activeSeriesIndex),i.xaxis.sorted&&("datetime"===i.xaxis.type?t[e].data.sort((function(t,e){return new Date(t.x).getTime()-new Date(e.x).getTime()})):"numeric"===i.xaxis.type&&t[e].data.sort((function(t,e){return t.x-e.x})));for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new Y(i),n=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice(),o=function(){for(var t=0;t0&&(this.twoDSeriesX=n,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var h=t[l].data.map((function(t){return g.parseNumber(t)}));s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==t[l].name?s.seriesNames.push(t[l].name):s.seriesNames.push("series-"+parseInt(l+1,10))}return this.w}},{key:"parseDataNonAxisCharts",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var a=0;a0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory){if(i.labels=i.labels[0],i.seriesRangeBarTimeline.length&&(i.seriesRangeBarTimeline.map((function(t){t.forEach((function(t){i.labels.indexOf(t.x)<0&&t.x&&i.labels.push(t.x)}))})),i.labels=i.labels.filter((function(t,e,i){return i.indexOf(t)===e}))),e.xaxis.convertedCatToNumeric)new R(e).convertCatToNumericXaxis(e,this.ctx,i.seriesX[0]),this._generateExternalLabels(t)}else this._generateExternalLabels(t)}},{key:"_generateExternalLabels",value:function(t){var e=this.w.globals,i=this.w.config,a=[];if(e.axisCharts){if(e.series.length>0)for(var s=0;se.length?t:e}),0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),B=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"getLabel",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"12px",n=this.w,o=void 0===t[a]?"":t[a],l=o,h=n.globals.xLabelFormatter,c=n.config.xaxis.labels.formatter,d=!1,g=new W(this.ctx),u=o;l=g.xLabelFormat(h,o,u),void 0!==c&&(l=c(o,t[a],a));var f=function(t){var i=null;return e.forEach((function(t){"month"===t.unit?i="year":"day"===t.unit?i="month":"hour"===t.unit?i="day":"minute"===t.unit&&(i="hour")})),i===t};e.length>0?(d=f(e[a].unit),i=e[a].position,l=e[a].value):"datetime"===n.config.xaxis.type&&void 0===c&&(l=""),void 0===l&&(l=""),l=Array.isArray(l)?l:l.toString();var x=new p(this.ctx),b={};return b=n.globals.rotateXLabels?x.getTextRects(l,parseInt(r,10),null,"rotate(".concat(n.config.xaxis.labels.rotate," 0 0)"),!1):x.getTextRects(l,parseInt(r,10)),!Array.isArray(l)&&(0===l.indexOf("NaN")||0===l.toLowerCase().indexOf("invalid")||l.toLowerCase().indexOf("infinity")>=0||s.indexOf(l)>=0&&!n.config.xaxis.labels.showDuplicates)&&(l=""),{x:i,text:l,textRect:b,isBold:d}}},{key:"checkForOverflowingLabels",value:function(t,e,i,a,s){var r=this.w;if(0===t&&r.globals.skipFirstTimelinelabel&&(e.text=""),t===i-1&&r.globals.skipLastTimelinelabel&&(e.text=""),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var n=s[s.length-1];e.x0){!0===o.config.yaxis[s].opposite&&(t+=a.width);for(var c=e;c>=0;c--){var d=h+e/10+o.config.yaxis[s].labels.offsetY-1;o.globals.isBarHorizontal&&(d=r*c),"heatmap"===o.config.chart.type&&(d+=r/2);var g=l.drawLine(t+i.offsetX-a.width+a.offsetX,d+a.offsetY,t+i.offsetX+a.offsetX,d+a.offsetY,a.color);n.add(g),h+=r}}}}]),t}(),V=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"fixSvgStringForIe11",value:function(t){if(!g.isIE11())return t;var e=0,i=t.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g,(function(t){return 2===++e?'xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs"':t}));return i=(i=i.replace(/xmlns:NS\d+=""/g,"")).replace(/NS\d+:(\w+:\w+=")/g,"$1")}},{key:"getSvgString",value:function(){var t=this.w.globals.dom.Paper.svg();return this.fixSvgStringForIe11(t)}},{key:"cleanup",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"),i=t.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"),a=t.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect");Array.prototype.forEach.call(a,(function(t){t.setAttribute("width",0)})),e&&e[0]&&(e[0].setAttribute("x",-500),e[0].setAttribute("x1",-500),e[0].setAttribute("x2",-500)),i&&i[0]&&(i[0].setAttribute("y",-100),i[0].setAttribute("y1",-100),i[0].setAttribute("y2",-100))}},{key:"svgUrl",value:function(){this.cleanup();var t=this.getSvgString(),e=new Blob([t],{type:"image/svg+xml;charset=utf-8"});return URL.createObjectURL(e)}},{key:"dataURI",value:function(){var t=this;return new Promise((function(e){var i=t.w;t.cleanup();var a=document.createElement("canvas");a.width=i.globals.svgWidth,a.height=parseInt(i.globals.dom.elWrap.style.height,10);var s="transparent"===i.config.chart.background?"#fff":i.config.chart.background,r=a.getContext("2d");r.fillStyle=s,r.fillRect(0,0,a.width,a.height);var n=t.getSvgString();if(window.canvg&&g.isIE11()){var o=window.canvg.Canvg.fromString(r,n,{ignoreClear:!0,ignoreDimensions:!0});o.start();var l=a.msToBlob();o.stop(),e({blob:l})}else{var h="data:image/svg+xml,"+encodeURIComponent(n),c=new Image;c.crossOrigin="anonymous",c.onload=function(){if(r.drawImage(c,0,0),a.msToBlob){var t=a.msToBlob();e({blob:t})}else{var i=a.toDataURL("image/png");e({imgURI:i})}},c.src=h}}))}},{key:"exportToSVG",value:function(){this.triggerDownload(this.svgUrl(),".svg")}},{key:"exportToPng",value:function(){var t=this;this.dataURI().then((function(e){var i=e.imgURI,a=e.blob;a?navigator.msSaveOrOpenBlob(a,t.w.globals.chartID+".png"):t.triggerDownload(i,".png")}))}},{key:"exportToCSV",value:function(t){var e=this,i=t.series,a=t.columnDelimiter,s=void 0===a?",":a,r=t.lineDelimiter,n=void 0===r?"\n":r,o=this.w,l=[],h=[],c="data:text/csv;charset=utf-8,",d=new O(this.ctx),g=new B(this.ctx),u=function(t){var i="";if(o.globals.axisCharts){if("category"===o.config.xaxis.type||o.config.xaxis.convertedCatToNumeric)if(o.globals.isBarHorizontal){var a=o.globals.yLabelFormatters[0],s=new M(e.ctx).getActiveConfigSeriesIndex();i=a(o.globals.labels[t],{seriesIndex:s,dataPointIndex:t,w:o})}else i=g.getLabel(o.globals.labels,o.globals.timescaleLabels,0,t).text;"datetime"===o.config.xaxis.type&&(o.config.xaxis.categories.length?i=o.config.xaxis.categories[t]:o.config.labels.length&&(i=o.config.labels[t]))}else i=o.config.labels[t];return i};l.push("category"),i.map((function(t,e){o.globals.axisCharts&&l.push(t.name?t.name:"series-".concat(e))})),o.globals.axisCharts||(l.push("value"),h.push(l.join(s))),i.map((function(t,e){o.globals.axisCharts?function(t,e){if(l.length&&0===e&&h.push(l.join(s)),t.data&&t.data.length)for(var a=0;a0&&!a.globals.isBarHorizontal&&(this.xaxisLabels=a.globals.timescaleLabels.slice()),this.drawnLabels=[],this.drawnLabelsRects=[],"top"===a.config.xaxis.position?this.offY=0:this.offY=a.globals.gridHeight+1,this.offY=this.offY+a.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal="bar"===a.config.chart.type&&a.config.plotOptions.bar.horizontal,this.xaxisFontSize=a.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=a.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=a.config.xaxis.labels.style.colors,this.xaxisBorderWidth=a.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=a.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=a.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=a.config.xaxis.axisBorder.height,this.yaxis=a.config.yaxis[0]}return a(t,[{key:"drawXaxis",value:function(){var t,e=this,i=this.w,a=new p(this.ctx),s=a.group({class:"apexcharts-xaxis",transform:"translate(".concat(i.config.xaxis.offsetX,", ").concat(i.config.xaxis.offsetY,")")}),r=a.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(i.globals.translateXAxisX,", ").concat(i.globals.translateXAxisY,")")});s.add(r);for(var n=i.globals.padHorizontal,o=[],l=0;l1?h-1:h;t=i.globals.gridWidth/c,n=n+t/2+i.config.xaxis.labels.offsetX}else t=i.globals.gridWidth/o.length,n=n+t+i.config.xaxis.labels.offsetX;if(i.config.xaxis.labels.show)for(var d=function(s){var l=n-t/2+i.config.xaxis.labels.offsetX;0===s&&1===h&&t/2===n&&1===i.globals.dataPoints&&(l=i.globals.gridWidth/2);var c=e.axesUtils.getLabel(o,i.globals.timescaleLabels,l,s,e.drawnLabels,e.xaxisFontSize),d=28;i.globals.rotateXLabels&&(d=22);(c=e.axesUtils.checkForOverflowingLabels(s,c,h,e.drawnLabels,e.drawnLabelsRects)).text&&i.globals.xaxisLabelsCount++;var g=a.drawText({x:c.x,y:e.offY+i.config.xaxis.labels.offsetY+d-("top"===i.config.xaxis.position?i.globals.xAxisHeight+i.config.xaxis.axisTicks.height-2:0),text:c.text,textAnchor:"middle",fontWeight:c.isBold?600:i.config.xaxis.labels.style.fontWeight,fontSize:e.xaxisFontSize,fontFamily:e.xaxisFontFamily,foreColor:Array.isArray(e.xaxisForeColors)?i.config.xaxis.convertedCatToNumeric?e.xaxisForeColors[i.globals.minX+s-1]:e.xaxisForeColors[s]:e.xaxisForeColors,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+i.config.xaxis.labels.style.cssClass});r.add(g);var u=document.createElementNS(i.globals.SVGNS,"title");u.textContent=c.text,g.node.appendChild(u),""!==c.text&&(e.drawnLabels.push(c.text),e.drawnLabelsRects.push(c)),n+=t},g=0;g<=h-1;g++)d(g);if(void 0!==i.config.xaxis.title.text){var u=a.group({class:"apexcharts-xaxis-title"}),f=a.drawText({x:i.globals.gridWidth/2+i.config.xaxis.title.offsetX,y:this.offY-parseFloat(this.xaxisFontSize)+i.globals.xAxisLabelsHeight+i.config.xaxis.title.offsetY,text:i.config.xaxis.title.text,textAnchor:"middle",fontSize:i.config.xaxis.title.style.fontSize,fontFamily:i.config.xaxis.title.style.fontFamily,fontWeight:i.config.xaxis.title.style.fontWeight,foreColor:i.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+i.config.xaxis.title.style.cssClass});u.add(f),s.add(u)}if(i.config.xaxis.axisBorder.show){var x=i.globals.barPadForNumericAxis,b=a.drawLine(i.globals.padHorizontal+i.config.xaxis.axisBorder.offsetX-x,this.offY,this.xaxisBorderWidth+x,this.offY,i.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);s.add(b)}return s}},{key:"drawXaxisInversed",value:function(t){var e,i,a=this.w,s=new p(this.ctx),r=a.config.yaxis[0].opposite?a.globals.translateYAxisX[t]:0,n=s.group({class:"apexcharts-yaxis apexcharts-xaxis-inversed",rel:t}),o=s.group({class:"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g",transform:"translate("+r+", 0)"});n.add(o);var l=[];if(a.config.yaxis[t].show)for(var h=0;hi.globals.gridWidth)){var s=this.offY+i.config.xaxis.axisTicks.offsetY,r=s+i.config.xaxis.axisTicks.height;if("top"===i.config.xaxis.position&&(r=s-i.config.xaxis.axisTicks.height),i.config.xaxis.axisTicks.show){var n=new p(this.ctx).drawLine(t+i.config.xaxis.axisTicks.offsetX,s+i.config.xaxis.offsetY,a+i.config.xaxis.axisTicks.offsetX,r+i.config.xaxis.offsetY,i.config.xaxis.axisTicks.color);e.add(n),n.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,a=t.globals.padHorizontal;if(t.globals.timescaleLabels.length>0)for(var s=0;s0){var h=s[s.length-1].getBBox(),c=s[0].getBBox();h.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),c.x+c.width>t.globals.gridWidth&&!t.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var d=0;d0&&(this.xaxisLabels=a.globals.timescaleLabels.slice())}return a(t,[{key:"drawGridArea",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new p(this.ctx);null===t&&(t=i.group({class:"apexcharts-grid"}));var a=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,"transparent"),s=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,"transparent");return t.add(s),t.add(a),t}},{key:"drawGrid",value:function(){var t=null;return this.w.globals.axisCharts&&(t=this.renderGrid(),this.drawGridArea(t.el)),t}},{key:"createGridMask",value:function(){var t=this.w,e=t.globals,i=new p(this.ctx),a=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var s=0;t.config.stroke.width.forEach((function(t){s=Math.max(s,t)})),a=s}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(e.cuid));var r=t.config.chart.type,n=0,o=0;("bar"===r||"rangeBar"===r||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&(n=t.config.grid.padding.left,o=t.config.grid.padding.right,e.barPadForNumericAxis>n&&(n=e.barPadForNumericAxis,o=e.barPadForNumericAxis)),e.dom.elGridRect=i.drawRect(-a/2-n-2,-a/2,e.gridWidth+a+o+n+4,e.gridHeight+a,0,"#fff"),new m(this).getLargestMarkerSize();var l=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,e.gridWidth+4*l,e.gridHeight+4*l,0,"#fff"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var h=e.dom.baseEl.querySelector("defs");h.appendChild(e.dom.elGridRectMask),h.appendChild(e.dom.elGridRectMarkerMask)}},{key:"_drawGridLines",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,n=t.xCount,o=t.parent,l=this.w;0===e&&l.globals.skipFirstTimelinelabel||e===n-1&&l.globals.skipLastTimelinelabel||"radar"===l.config.chart.type||(l.config.grid.xaxis.lines.show&&this._drawGridLine({x1:i,y1:a,x2:s,y2:r,parent:o}),new G(this.ctx).drawXaxisTicks(i,this.elg))}},{key:"_drawGridLine",value:function(t){var e=t.x1,i=t.y1,a=t.x2,s=t.y2,r=t.parent,n=this.w,o=r.node.classList.contains("apexcharts-gridlines-horizontal"),l=n.config.grid.strokeDashArray,h=n.globals.barPadForNumericAxis,c=new p(this).drawLine(e-(o?h:0),i,a+(o?h:0),s,n.config.grid.borderColor,l);c.node.classList.add("apexcharts-gridline"),r.add(c)}},{key:"_drawGridBandRect",value:function(t){var e=t.c,i=t.x1,a=t.y1,s=t.x2,r=t.y2,n=t.type,o=this.w,l=new p(this.ctx),h=o.globals.barPadForNumericAxis;if("column"!==n||"datetime"!==o.config.xaxis.type){var c=o.config.grid[n].colors[e],d=l.drawRect(i-("row"===n?h:0),a,s+("row"===n?2*h:0),r,0,c,o.config.grid[n].opacity);this.elg.add(d),d.attr("clip-path","url(#gridRectMask".concat(o.globals.cuid,")")),d.node.classList.add("apexcharts-grid-".concat(n))}}},{key:"_drawXYLines",value:function(t){var e=this,i=t.xCount,a=t.tickAmount,s=this.w;if(s.config.grid.xaxis.lines.show||s.config.xaxis.axisTicks.show){var r=s.globals.padHorizontal,n=s.globals.gridHeight;s.globals.timescaleLabels.length?function(t){for(var a=t.xC,s=t.x1,r=t.y1,n=t.x2,o=t.y2,l=0;l2));s++);return!t.globals.isBarHorizontal||this.isTimelineBar?(i=this.xaxisLabels.length,this.isTimelineBar&&(a=t.globals.labels.length),this._drawXYLines({xCount:i,tickAmount:a})):(i=a,a=t.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:a})),this.drawGridBands(i,a),{el:this.elg,xAxisTickWidth:t.globals.gridWidth/i}}},{key:"drawGridBands",value:function(t,e){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/e,r=i.globals.gridWidth,n=0,o=0;n=i.config.grid.row.colors.length&&(o=0),this._drawGridBandRect({c:o,x1:0,y1:a,x2:r,y2:s,type:"row"}),a+=i.globals.gridHeight/e;if(void 0!==i.config.grid.column.colors&&i.config.grid.column.colors.length>0)for(var l=i.globals.isBarHorizontal||"category"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric?t:t-1,h=i.globals.padHorizontal,c=i.globals.padHorizontal+i.globals.gridWidth/l,d=i.globals.gridHeight,g=0,u=0;g=i.config.grid.column.colors.length&&(u=0),this._drawGridBandRect({c:u,x1:h,y1:0,x2:c,y2:d,type:"column"}),h+=i.globals.gridWidth/l}}]),t}(),j=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"niceScale",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4?arguments[4]:void 0,r=this.w;if("dataPoints"===i&&(i=r.globals.dataPoints-1),t===Number.MIN_VALUE&&0===e||!g.isNumber(t)&&!g.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE){t=0,e=i;var n=this.linearScale(t,e,i);return n}t>e?(console.warn("axis.min cannot be greater than axis.max"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var o=[],l=Math.abs(e-t);l<1&&s&&("candlestick"===r.config.chart.type||"candlestick"===r.config.series[a].type||r.globals.isRangeData)&&(e*=1.01);var h=i+1;h<2?h=2:h>2&&(h-=2);var c=l/h,d=Math.floor(g.log10(c)),u=Math.pow(10,d),f=Math.round(c/u);f<1&&(f=1);var p=f*u,x=p*Math.floor(t/p),b=p*Math.ceil(e/p),m=x;if(s&&l>2){for(;o.push(m),!((m+=p)>b););return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}var v=t;(o=[]).push(v);for(var y=Math.abs(e-t)/i,w=0;w<=i;w++)v+=y,o.push(v);return o[o.length-2]>=e&&o.pop(),{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:"linearScale",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=Math.abs(e-t),s=a/i;i===Number.MAX_VALUE&&(i=10,s=1);for(var r=[],n=t;i>=0;)r.push(n),n+=s,i-=1;return{result:r,niceMin:r[0],niceMax:r[r.length-1]}}},{key:"logarithmicScale",value:function(t,e,i,a){(e<0||e===Number.MIN_VALUE)&&(e=.01);for(var s=Math.log(e)/Math.log(10),r=Math.log(i)/Math.log(10),n=Math.abs(i-e)/a,o=[],l=e;a>=0;)o.push(l),l+=n,a-=1;var h=o.map((function(t,a){t<=0&&(t=.01);var n=(r-s)/(i-e),o=Math.pow(10,s+n*(t-s));return Math.round(o/g.roundToBase(o,10))*g.roundToBase(o,10)}));return 0===h[0]&&(h[0]=1),{result:h,niceMin:h[0],niceMax:h[h.length-1]}}},{key:"setYScaleForIndex",value:function(t,e,i){var a=this.w.globals,s=this.w.config,r=a.isBarHorizontal?s.xaxis:s.yaxis[t];void 0===a.yAxisScale[t]&&(a.yAxisScale[t]=[]);var n=Math.abs(i-e);if(r.logarithmic&&n<=5&&(a.invalidLogScale=!0),r.logarithmic&&n>5)a.allSeriesCollapsed=!1,a.yAxisScale[t]=this.logarithmicScale(t,e,i,r.tickAmount?r.tickAmount:Math.floor(Math.log10(i)));else if(i!==-Number.MAX_VALUE&&g.isNumber(i))if(a.allSeriesCollapsed=!1,void 0===r.min&&void 0===r.max||r.forceNiceScale){var o=void 0===s.yaxis[t].max&&void 0===s.yaxis[t].min||s.yaxis[t].forceNiceScale;a.yAxisScale[t]=this.niceScale(e,i,r.tickAmount?r.tickAmount:n<5&&n>1?n+1:5,t,o)}else a.yAxisScale[t]=this.linearScale(e,i,r.tickAmount);else a.yAxisScale[t]=this.linearScale(0,5,5)}},{key:"setXScale",value:function(t,e){var i=this.w,a=i.globals,s=i.config.xaxis,r=Math.abs(e-t);return e!==-Number.MAX_VALUE&&g.isNumber(e)?a.xAxisScale=this.niceScale(t,e,s.tickAmount?s.tickAmount:r<5&&r>1?r+1:5,0):a.xAxisScale=this.linearScale(0,5,5),a.xAxisScale}},{key:"setMultipleYScales",value:function(){var t=this,e=this.w.globals,i=this.w.config,a=e.minYArr.concat([]),s=e.maxYArr.concat([]),r=[];i.yaxis.forEach((function(e,n){var o=n;i.series.forEach((function(t,i){t.name===e.seriesName&&(o=i,n!==i?r.push({index:i,similarIndex:n,alreadyExists:!0}):r.push({index:i}))}));var l=a[o],h=s[o];t.setYScaleForIndex(n,l,h)})),this.sameScaleInMultipleAxes(a,s,r)}},{key:"sameScaleInMultipleAxes",value:function(t,e,i){var a=this,s=this.w.config,r=this.w.globals,n=[];i.forEach((function(t){t.alreadyExists&&(void 0===n[t.index]&&(n[t.index]=[]),n[t.index].push(t.index),n[t.index].push(t.similarIndex))})),r.yAxisSameScaleIndices=n,n.forEach((function(t,e){n.forEach((function(i,a){var s,r;e!==a&&(s=t,r=i,s.filter((function(t){return-1!==r.indexOf(t)}))).length>0&&(n[e]=n[e].concat(n[a]))}))}));var o=n.map((function(t){return t.filter((function(e,i){return t.indexOf(e)===i}))})).map((function(t){return t.sort()}));n=n.filter((function(t){return!!t}));var l=o.slice(),h=l.map((function(t){return JSON.stringify(t)}));l=l.filter((function(t,e){return h.indexOf(JSON.stringify(t))===e}));var c=[],d=[];t.forEach((function(t,i){l.forEach((function(a,s){a.indexOf(i)>-1&&(void 0===c[s]&&(c[s]=[],d[s]=[]),c[s].push({key:i,value:t}),d[s].push({key:i,value:e[i]}))}))}));var g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach((function(t,e){t.forEach((function(t,i){g[e]=Math.min(t.value,g[e])}))})),d.forEach((function(t,e){t.forEach((function(t,i){u[e]=Math.max(t.value,u[e])}))})),t.forEach((function(t,e){d.forEach((function(t,i){var n=g[i],o=u[i];s.chart.stacked&&(o=0,t.forEach((function(t,e){t.value!==-Number.MAX_VALUE&&(o+=t.value),n!==Number.MIN_VALUE&&(n+=c[i][e].value)}))),t.forEach((function(i,l){t[l].key===e&&(void 0!==s.yaxis[e].min&&(n="function"==typeof s.yaxis[e].min?s.yaxis[e].min(r.minY):s.yaxis[e].min),void 0!==s.yaxis[e].max&&(o="function"==typeof s.yaxis[e].max?s.yaxis[e].max(r.maxY):s.yaxis[e].max),a.setYScaleForIndex(e,n,o))}))}))}))}},{key:"autoScaleY",value:function(t,e,i){t||(t=this);var a=t.w;if(a.globals.isMultipleYAxis||a.globals.collapsedSeries.length)return console.warn("autoScaleYaxis is not supported in a multi-yaxis chart."),e;var s=a.globals.seriesX[0],r=a.config.chart.stacked;return e.forEach((function(t,n){for(var o=0,l=0;l=i.xaxis.min){o=l;break}var h,c,d=a.globals.minYArr[n],g=a.globals.maxYArr[n],u=a.globals.stackedSeriesTotals;a.globals.series.forEach((function(n,l){var f=n[o];r?(f=u[o],h=c=f,u.forEach((function(t,e){s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min&&(t>c&&null!==t&&(c=t),n[e]=i.xaxis.min){var r=t,n=t;a.globals.series.forEach((function(i,a){null!==t&&(r=Math.min(i[e],r),n=Math.max(i[e],n))})),n>c&&null!==n&&(c=n),rd&&(h=d),e.length>1?(e[l].min=void 0===t.min?h:t.min,e[l].max=void 0===t.max?c:t.max):(e[0].min=void 0===t.min?h:t.min,e[0].max=void 0===t.max?c:t.max)}))})),e}}]),t}(),U=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.scales=new j(i)}return a(t,[{key:"init",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:"getMinYMaxY",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w.config,r=this.w.globals,n=-Number.MAX_VALUE,o=Number.MIN_VALUE;null===a&&(a=t+1);var l=r.series,h=l,c=l;"candlestick"===s.chart.type?(h=r.seriesCandleL,c=r.seriesCandleH):r.isRangeData&&(h=r.seriesRangeStart,c=r.seriesRangeEnd);for(var d=t;dh[d][u]&&h[d][u]<0&&(o=h[d][u])):r.hasNullValues=!0}}return"rangeBar"===s.chart.type&&r.seriesRangeStart.length&&r.isBarHorizontal&&"datetime"===s.xaxis.type&&(o=e),"bar"===s.chart.type&&(o<0&&n<0&&(n=0),o===Number.MIN_VALUE&&(o=0)),{minY:o,maxY:n,lowestY:e,highestY:i}}},{key:"setYRange",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var a=0;a=0&&i<=10&&(n=0),t.minY=i-5*n/100,i>0&&t.minY<0&&(t.minY=0),t.maxY=t.maxY+5*n/100}if(e.yaxis.forEach((function(e,i){void 0!==e.max&&("number"==typeof e.max?t.maxYArr[i]=e.max:"function"==typeof e.max&&(t.maxYArr[i]=e.max(t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&("number"==typeof e.min?t.minYArr[i]=e.min:"function"==typeof e.min&&(t.minYArr[i]=e.min(t.minY)),t.minY=t.minYArr[i])})),t.isBarHorizontal){["min","max"].forEach((function(i){void 0!==e.xaxis[i]&&"number"==typeof e.xaxis[i]&&("min"===i?t.minY=e.xaxis[i]:t.maxY=e.xaxis[i])}))}return t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach((function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax}))):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr}}},{key:"setXRange",value:function(){var t=this.w.globals,e=this.w.config,i="numeric"===e.xaxis.type||"datetime"===e.xaxis.type||"category"===e.xaxis.type&&!t.noLabelsProvided||t.noLabelsProvided||t.isXNumeric;if(t.isXNumeric&&function(){for(var e=0;et.dataPoints&&0!==t.dataPoints&&(a=t.dataPoints-1)):"dataPoints"===e.xaxis.tickAmount?(t.series.length>1&&(a=t.series[t.maxValsInArrayIndex].length-1),t.isXNumeric&&(a=t.maxX-t.minX-1)):a=e.xaxis.tickAmount,t.xTickAmount=a,void 0!==e.xaxis.max&&"number"==typeof e.xaxis.max&&(t.maxX=e.xaxis.max),void 0!==e.xaxis.min&&"number"==typeof e.xaxis.min&&(t.minX=e.xaxis.min),void 0!==e.xaxis.range&&(t.minX=t.maxX-e.xaxis.range),t.minX!==Number.MAX_VALUE&&t.maxX!==-Number.MAX_VALUE)if(e.xaxis.convertedCatToNumeric&&!t.dataFormatXNumeric){for(var s=[],r=t.minX-1;r0&&(t.xAxisScale=this.scales.linearScale(1,t.labels.length,a-1),t.seriesX=t.labels.slice());i&&(t.labels=t.xAxisScale.result.slice())}return t.isBarHorizontal&&t.labels.length&&(t.xTickAmount=t.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:t.minX,maxX:t.maxX}}},{key:"setZRange",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e0){var s=e-t.seriesX[i][a-1];s>0&&(t.minXDiff=Math.min(s,t.minXDiff))}})),1===t.dataPoints&&t.minXDiff===Number.MAX_VALUE&&(t.minXDiff=.5)}))}},{key:"_setStackedMinMax",value:function(){var t=this.w.globals,e=[],i=[];if(t.series.length)for(var a=0;a0?s=s+parseFloat(t.series[n][a])+1e-4:r+=parseFloat(t.series[n][a])),n===t.series.length-1&&(e.push(s),i.push(r));for(var o=0;o=0;b--)x(b);if(void 0!==e.config.yaxis[t].title.text){var m=i.group({class:"apexcharts-yaxis-title"}),v=0;e.config.yaxis[t].opposite&&(v=e.globals.translateYAxisX[t]);var y=i.drawText({x:v,y:e.globals.gridHeight/2+e.globals.translateY+e.config.yaxis[t].title.offsetY,text:e.config.yaxis[t].title.text,textAnchor:"end",foreColor:e.config.yaxis[t].title.style.color,fontSize:e.config.yaxis[t].title.style.fontSize,fontWeight:e.config.yaxis[t].title.style.fontWeight,fontFamily:e.config.yaxis[t].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+e.config.yaxis[t].title.style.cssClass});m.add(y),o.add(m)}var w=e.config.yaxis[t].axisBorder,k=31+w.offsetX;if(e.config.yaxis[t].opposite&&(k=-31-w.offsetX),w.show){var A=i.drawLine(k,e.globals.translateY+w.offsetY-2,k,e.globals.gridHeight+e.globals.translateY+w.offsetY+2,w.color,0,w.width);o.add(A)}return e.config.yaxis[t].axisTicks.show&&this.axesUtils.drawYAxisTicks(k,h,w,e.config.yaxis[t].axisTicks,t,c,o),o}},{key:"drawYaxisInversed",value:function(t){var e=this.w,i=new p(this.ctx),a=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),s=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});a.add(s);var r=e.globals.yAxisScale[t].result.length-1,n=e.globals.gridWidth/r+.1,o=n+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.timescaleLabels;c.length>0&&(this.xaxisLabels=c.slice(),r=(h=c.slice()).length),h=this.axesUtils.checkForReversedLabels(t,h);var d=c.length;if(e.config.xaxis.labels.show)for(var g=d?0:r;d?g=0;d?g++:g--){var u=h[g];u=l(u,g);var f=e.globals.gridWidth+e.globals.padHorizontal-(o-n+e.config.xaxis.labels.offsetX);if(c.length){var x=this.axesUtils.getLabel(h,c,f,g,this.drawnLabels,this.xaxisFontSize);f=x.x,u=x.text,this.drawnLabels.push(x.text),0===g&&e.globals.skipFirstTimelinelabel&&(u=""),g===h.length-1&&e.globals.skipLastTimelinelabel&&(u="")}var b=i.drawText({x:f,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30-("top"===e.config.xaxis.position?e.globals.xAxisHeight+e.config.xaxis.axisTicks.height-2:0),text:u,textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:e.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+e.config.xaxis.labels.style.cssClass});s.add(b),b.tspan(u);var m=document.createElementNS(e.globals.SVGNS,"title");m.textContent=u,b.node.appendChild(m),o+=n}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:"inversedYAxisBorder",value:function(t){var e=this.w,i=new p(this.ctx),a=e.config.xaxis.axisBorder;if(a.show){var s=0;"bar"===e.config.chart.type&&e.globals.isXNumeric&&(s-=15);var r=i.drawLine(e.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,e.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);t.add(r)}}},{key:"inversedYAxisTitleText",value:function(t){var e=this.w,i=new p(this.ctx);if(void 0!==e.config.xaxis.title.text){var a=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),s=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(e.config.xaxis.title.style.fontSize)+e.config.xaxis.title.offsetY+20,text:e.config.xaxis.title.text,textAnchor:"middle",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,fontWeight:e.config.xaxis.title.style.fontWeight,cssClass:"apexcharts-xaxis-title-text "+e.config.xaxis.title.style.cssClass});a.add(s),t.add(a)}}},{key:"yAxisTitleRotate",value:function(t,e){var i=this.w,a=new p(this.ctx),s={width:0,height:0},r={width:0,height:0},n=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-texts-g"));null!==n&&(s=n.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-title text"));if(null!==o&&(r=o.getBoundingClientRect()),null!==o){var l=this.xPaddingForYAxisTitle(t,s,r,e);o.setAttribute("x",l.xPos-(e?10:0))}if(null!==o){var h=a.rotateAroundCenter(o);o.setAttribute("transform","rotate(".concat(e?"":"-").concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(t,e,i,a){var s=this.w,r=0,n=0,o=10;return void 0===s.config.yaxis[t].title.text||t<0?{xPos:n,padd:0}:(a?(n=e.width+s.config.yaxis[t].title.offsetX+i.width/2+o/2,0===(r+=1)&&(n-=o/2)):(n=-1*e.width+s.config.yaxis[t].title.offsetX+o/2+i.width/2,s.globals.isBarHorizontal&&(o=25,n=-1*e.width-s.config.yaxis[t].title.offsetX-o)),{xPos:n,padd:o})}},{key:"setYAxisXPosition",value:function(t,e){var i=this.w,a=0,s=0,r=18,n=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(o,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!o.show||o.floating||0===t[l].width,c=t[l].width+e[l].width;o.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=s-o.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+n,h||(n=n+c+20),i.globals.translateYAxisX[l]=s-o.labels.offsetX+20):(a=i.globals.translateX-r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a+o.labels.offsetX)}))}},{key:"setYAxisTextAlignments",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis");(e=g.listToArray(e)).forEach((function(e,i){var a=t.config.yaxis[i];if(void 0!==a.labels.align){var s=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-texts-g")),r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-label"));r=g.listToArray(r);var n=s.getBoundingClientRect();"left"===a.labels.align?(r.forEach((function(t,e){t.setAttribute("text-anchor","start")})),a.opposite||s.setAttribute("transform","translate(-".concat(n.width,", 0)"))):"center"===a.labels.align?(r.forEach((function(t,e){t.setAttribute("text-anchor","middle")})),s.setAttribute("transform","translate(".concat(n.width/2*(a.opposite?1:-1),", 0)"))):"right"===a.labels.align&&(r.forEach((function(t,e){t.setAttribute("text-anchor","end")})),a.opposite&&s.setAttribute("transform","translate(".concat(n.width,", 0)")))}}))}}]),t}(),Z=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.documentEvent=g.bind(this.documentEvent,this)}return a(t,[{key:"addEventListener",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:"removeEventListener",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var a=i.globals.events[t].indexOf(e);-1!==a&&i.globals.events[t].splice(a,1)}}},{key:"fireEvent",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var a=i.globals.events[t],s=a.length,r=0;r0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter((function(e){return e.name===t}))[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var a=g.extend(A,i);this.w.globals.locale=a.options}}]),t}(),J=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"drawAxis",value:function(t,e){var i,a,s=this.w.globals,r=this.w.config,n=new G(this.ctx),o=new q(this.ctx);s.axisCharts&&"radar"!==t&&(s.isBarHorizontal?(a=o.drawYaxisInversed(0),i=n.drawXaxisInversed(0),s.dom.elGraphical.add(i),s.dom.elGraphical.add(a)):(i=n.drawXaxis(),s.dom.elGraphical.add(i),r.yaxis.map((function(t,e){-1===s.ignoreYAxisIndexes.indexOf(e)&&(a=o.drawYaxis(e),s.dom.Paper.add(a))}))));r.yaxis.map((function(t,e){-1===s.ignoreYAxisIndexes.indexOf(e)&&o.yAxisTitleRotate(e,t.opposite)}))}}]),t}(),Q=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"drawXCrosshairs",value:function(){var t=this.w,e=new p(this.ctx),i=new u(this.ctx),a=t.config.xaxis.crosshairs.fill.gradient,s=t.config.xaxis.crosshairs.dropShadow,r=t.config.xaxis.crosshairs.fill.type,n=a.colorFrom,o=a.colorTo,l=a.opacityFrom,h=a.opacityTo,c=a.stops,d=s.enabled,f=s.left,x=s.top,b=s.blur,m=s.color,v=s.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){"gradient"===r&&(y=e.drawGradient("vertical",n,o,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine()),w.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:t.globals.gridHeight,width:g.isNumber(t.config.xaxis.crosshairs.width)?t.config.xaxis.crosshairs.width:0,height:t.globals.gridHeight,fill:y,filter:"none","fill-opacity":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,"stroke-width":t.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":t.config.xaxis.crosshairs.stroke.dashArray}),d&&(w=i.dropShadow(w,{left:f,top:x,blur:b,color:m,opacity:v})),t.globals.dom.elGraphical.add(w)}}},{key:"drawYCrosshairs",value:function(){var t=this.w,e=new p(this.ctx),i=t.config.yaxis[0].crosshairs,a=t.globals.barPadForNumericAxis;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),t.globals.dom.elGraphical.add(s)}var r=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:"apexcharts-ycrosshairs-hidden"}),t.globals.dom.elGraphical.add(r)}}]),t}(),K=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"checkResponsiveConfig",value:function(t){var e=this,i=this.w,a=i.config;if(0!==a.responsive.length){var s=a.responsive.slice();s.sort((function(t,e){return t.breakpoint>e.breakpoint?1:e.breakpoint>t.breakpoint?-1:0})).reverse();var r=new D({}),n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s[0].breakpoint,n=window.innerWidth>0?window.innerWidth:screen.width;if(n>a){var o=m.extendArrayProps(r,i.globals.initialConfig,i);t=g.extend(o,t),t=g.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l0&&"function"==typeof e.config.colors[0]&&(e.globals.colors=e.config.series.map((function(i,a){var s=e.config.colors[a];return s||(s=e.config.colors[0]),"function"==typeof s?(t.isColorFn=!0,s({value:e.globals.axisCharts?e.globals.series[a][0]?e.globals.series[a][0]:0:e.globals.series[a],seriesIndex:a,dataPointIndex:a,w:e})):s})))),e.config.theme.monochrome.enabled){var a=[],s=e.globals.series.length;this.isBarDistributed&&(s=e.globals.series[0].length*e.globals.series.length);for(var r=e.config.theme.monochrome.color,n=1/(s/e.config.theme.monochrome.shadeIntensity),o=e.config.theme.monochrome.shadeTo,l=0,h=0;h2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=e||a.globals.series.length;if(null===i&&(i=this.isBarDistributed||"heatmap"===a.config.chart.type&&a.config.plotOptions.heatmap.colorScale.inverse),i&&(s=a.globals.series[0].length*a.globals.series.length),t.lengtht.globals.svgWidth&&(this.dCtx.lgRect.width=t.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:"getLargestStringFromMultiArr",value:function(t,e){var i=t;if(this.w.globals.isMultiLineX){var a=e.map((function(t,e){return Array.isArray(t)?t.length:1})),s=Math.max.apply(Math,d(a));i=e[a.indexOf(s)]}return i}}]),t}(),at=function(){function t(i){e(this,t),this.w=i.w,this.dCtx=i}return a(t,[{key:"getxAxisLabelsCoords",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=e.globals.categoryLabels),e.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();t={width:a.width,height:a.height},e.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends="left"!==e.config.legend.position&&"right"!==e.config.legend.position||e.config.legend.floating?0:this.dCtx.lgRect.width;var s=e.globals.xLabelFormatter,r=g.getLargestStringFromArr(i),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);e.globals.isBarHorizontal&&(n=r=e.globals.yAxisScale[0].result.reduce((function(t,e){return t.length>e.length?t:e}),0));var o=new W(this.dCtx.ctx),l=r;r=o.xLabelFormat(s,r,l),n=o.xLabelFormat(s,n,l),(e.config.xaxis.convertedCatToNumeric&&void 0===r||""===String(r).trim())&&(n=r="1");var h=new p(this.dCtx.ctx),c=h.getTextRects(r,e.config.xaxis.labels.style.fontSize),d=c;if(r!==n&&(d=h.getTextRects(n,e.config.xaxis.labels.style.fontSize)),(t={width:c.width>=d.width?c.width:d.width,height:c.height>=d.height?c.height:d.height}).width*i.length>e.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==e.config.xaxis.labels.rotate||e.config.xaxis.labels.rotateAlways){if(!e.globals.isBarHorizontal){e.globals.rotateXLabels=!0;var u=function(t){return h.getTextRects(t,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,"rotate(".concat(e.config.xaxis.labels.rotate," 0 0)"),!1)};c=u(r),r!==n&&(d=u(n)),t.height=(c.height>d.height?c.height:d.height)/1.5,t.width=c.width>d.width?c.width:d.width}}else e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:"getxAxisTitleCoords",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var a=new p(this.dCtx.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=a.width,i=a.height}return{width:e,height:i}}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var t,e=this.w;this.dCtx.timescaleLabels=e.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(t){return t.value})),a=i.reduce((function(t,e){return void 0===t?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):t.length>e.length?t:e}),0);return 1.05*(t=new p(this.dCtx.ctx).getTextRects(a,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:"additionalPaddingXLabels",value:function(t){var e=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,n=t.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var o=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,l=function(t,o){(function(t){return-1!==a.collapsedSeriesIndices.indexOf(t)})(o)||("datetime"!==r&&e.dCtx.gridPad.lefta.gridWidth&&(a.skipLastTimelinelabel=!0),l<0&&(a.skipFirstTimelinelabel=!0)}else"datetime"===r?e.dCtx.gridPad.rightString(o.niceMax).length?o.niceMin:o.niceMax,c=l(h,{seriesIndex:n,dataPointIndex:-1,w:e}),d=c;if(void 0!==c&&0!==c.length||(c=h),e.globals.isBarHorizontal){a=0;var u=e.globals.labels.slice();c=l(c=g.getLargestStringFromArr(u),{seriesIndex:n,dataPointIndex:-1,w:e}),d=t.dCtx.dimHelpers.getLargestStringFromMultiArr(c,u)}var f=new p(t.dCtx.ctx),x=f.getTextRects(c,r.labels.style.fontSize),b=x;c!==d&&(b=f.getTextRects(d,r.labels.style.fontSize)),i.push({width:(b.width>x.width?b.width:x.width)+a,height:b.height>x.height?b.height:x.height})}else i.push({width:0,height:0})})),i}},{key:"getyAxisTitleCoords",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map((function(e,a){if(e.show&&void 0!==e.title.text){var s=new p(t.dCtx.ctx).getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,"rotate(-90 0 0)",!1);i.push({width:s.width,height:s.height})}else i.push({width:0,height:0})})),i}},{key:"getTotalYAxisWidth",value:function(){var t=this.w,e=0,i=0,a=0,s=t.globals.yAxisScale.length>1?10:0,r=new B(this.dCtx.ctx),n=function(n,o){var l=t.config.yaxis[o].floating,h=0;n.width>0&&!l?(h=n.width+s,function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1}(o)&&(h=h-n.width-s)):h=l||r.isYAxisHidden(o)?0:5,t.config.yaxis[o].opposite?a+=h:i+=h,e+=h};return t.globals.yLabelsCoords.map((function(t,e){n(t,e)})),t.globals.yTitleCoords.map((function(t,e){n(t,e)})),t.globals.isBarHorizontal&&(e=t.globals.yLabelsCoords[0].width+t.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,e}}]),t}(),rt=function(){function t(i){e(this,t),this.w=i.w,this.dCtx=i}return a(t,[{key:"gridPadForColumnsInNumericAxis",value:function(t){var e=this.w;if(e.globals.noData||e.globals.allSeriesCollapsed)return 0;var i=e.config.chart.type,a=0,s="bar"===i||"rangeBar"===i?e.config.series.length:1;if(e.globals.comboBarCount>0&&(s=e.globals.comboBarCount),e.globals.collapsedSeries.forEach((function(t){"bar"!==t.type&&"rangeBar"!==t.type||(s-=1)})),e.config.chart.stacked&&(s=1),("bar"===i||"rangeBar"===i||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&s>0){var r,n,o=Math.abs(e.globals.initialMaxX-e.globals.initialMinX);o<=3&&(o=e.globals.dataPoints),r=o/t,e.globals.minXDiff&&e.globals.minXDiff/r>0&&(n=e.globals.minXDiff/r),n>t/2&&(n/=2),(a=n/s*parseInt(e.config.plotOptions.bar.columnWidth,10)/100)<1&&(a=1),a=a/(s>1?1:1.5)+5,e.globals.barPadForNumericAxis=a}return a}},{key:"gridPadFortitleSubtitle",value:function(){var t=this,e=this.w,i=e.globals,a=this.dCtx.isSparkline||!e.globals.axisCharts?0:10;["title","subtitle"].forEach((function(i){void 0!==e.config[i].text?a+=e.config[i].margin:a+=t.dCtx.isSparkline||!e.globals.axisCharts?0:5}));var s=e.config.series.length>1||!e.globals.axisCharts||e.config.legend.showForSingleSeries;e.config.legend.show&&"bottom"===e.config.legend.position&&!e.config.legend.floating&&s&&(a+=10);var r=this.dCtx.dimHelpers.getTitleSubtitleCoords("title"),n=this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle");i.gridHeight=i.gridHeight-r.height-n.height-a,i.translateY=i.translateY+r.height+n.height+a}},{key:"setGridXPosForDualYAxis",value:function(t,e){var i=this.w,a=new B(this.dCtx.ctx);i.config.yaxis.map((function(s,r){-1!==i.globals.ignoreYAxisIndexes.indexOf(r)||s.floating||a.isYAxisHidden(r)||s.opposite&&(i.globals.translateX=i.globals.translateX-(e[r].width+t[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12)}))}}]),t}(),nt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new it(this),this.dimYAxis=new st(this),this.dimXAxis=new at(this),this.dimGrid=new rt(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return a(t,[{key:"plotCoords",value:function(){var t=this.w.globals;this.lgRect=this.dimHelpers.getLegendsRect(),t.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),t.gridHeight=t.gridHeight-this.gridPad.top-this.gridPad.bottom,t.gridWidth=t.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var e=this.dimGrid.gridPadForColumnsInNumericAxis(t.gridWidth);t.gridWidth=t.gridWidth-2*e,t.translateX=t.translateX+this.gridPad.left+this.xPadLeft+(e>0?e+4:0),t.translateY=t.translateY+this.gridPad.top}},{key:"setDimensionsForAxisCharts",value:function(){var t=this,e=this.w,i=e.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map((function(t,i){e.globals.yLabelsCoords.push({width:a[i].width,index:i}),e.globals.yTitleCoords.push({width:s[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),n=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,n),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var o=this.yAxisWidth,l=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight,i.xAxisHeight=this.xAxisHeight;var h=10;("radar"===e.config.chart.type||this.isSparkline)&&(o=0,l=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0},l=0,o=0,h=0),this.dimXAxis.additionalPaddingXLabels(r);var c=function(){i.translateX=o,i.gridHeight=i.svgHeight-t.lgRect.height-l-(t.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o};switch("top"===e.config.xaxis.position&&(h=i.xAxisHeight-e.config.xaxis.axisTicks.height-5),e.config.legend.position){case"bottom":i.translateY=h,c();break;case"top":i.translateY=this.lgRect.height+h,c();break;case"left":i.translateY=h,i.translateX=this.lgRect.width+o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-this.lgRect.width-o;break;case"right":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-this.lgRect.width-o-5;break;default:throw new Error("Legend position not supported")}this.dimGrid.setGridXPosForDualYAxis(s,a),new q(this.ctx).setYAxisXPosition(a,s)}},{key:"setDimensionsForNonAxisCharts",value:function(){var t=this.w,e=t.globals,i=t.config,a=0;t.config.legend.show&&!t.config.legend.floating&&(a=20);var s="pie"===i.chart.type||"polarArea"===i.chart.type||"donut"===i.chart.type?"pie":"radialBar",r=i.plotOptions[s].offsetY,n=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating)return e.gridHeight=e.svgHeight-i.grid.padding.left+i.grid.padding.right,e.gridWidth=e.gridHeight,e.translateY=r,void(e.translateX=n+(e.svgWidth-e.gridWidth)/2);switch(i.legend.position){case"bottom":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.gridHeight,e.translateY=r-10,e.translateX=n+(e.svgWidth-e.gridWidth)/2;break;case"top":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.gridHeight,e.translateY=this.lgRect.height+r+10,e.translateX=n+(e.svgWidth-e.gridWidth)/2;break;case"left":e.gridWidth=e.svgWidth-this.lgRect.width-a,e.gridHeight="auto"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=n+this.lgRect.width+a;break;case"right":e.gridWidth=e.svgWidth-this.lgRect.width-a-5,e.gridHeight="auto"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"conditionalChecksForAxisCoords",value:function(t,e){var i=this.w;this.xAxisHeight=(t.height+e.height)*(i.globals.isMultiLineX?1.2:i.globals.LINE_HEIGHT_RATIO)+(i.globals.rotateXLabels?22:10),this.xAxisWidth=t.width,this.xAxisHeight-e.height>i.config.xaxis.labels.maxHeight&&(this.xAxisHeight=i.config.xaxis.labels.maxHeight),i.config.xaxis.labels.minHeight&&this.xAxisHeights&&(this.yAxisWidth=s)}}]),t}(),ot=function(){function t(i){e(this,t),this.w=i.w,this.lgCtx=i}return a(t,[{key:"getLegendStyles",value:function(){var t=document.createElement("style");t.setAttribute("type","text/css");var e=document.createTextNode("\t\n \t\n .apexcharts-legend {\t\n display: flex;\t\n overflow: auto;\t\n padding: 0 10px;\t\n }\t\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\t\n flex-wrap: wrap\t\n }\t\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\t\n flex-direction: column;\t\n bottom: 0;\t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-left, .apexcharts-legend.position-top.apexcharts-align-left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\t\n justify-content: flex-start;\t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-center, .apexcharts-legend.position-top.apexcharts-align-center {\t\n justify-content: center; \t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-right, .apexcharts-legend.position-top.apexcharts-align-right {\t\n justify-content: flex-end;\t\n }\t\n .apexcharts-legend-series {\t\n cursor: pointer;\t\n line-height: normal;\t\n }\t\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\t\n display: flex;\t\n align-items: center;\t\n }\t\n .apexcharts-legend-text {\t\n position: relative;\t\n font-size: 14px;\t\n }\t\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\t\n pointer-events: none;\t\n }\t\n .apexcharts-legend-marker {\t\n position: relative;\t\n display: inline-block;\t\n cursor: pointer;\t\n margin-right: 3px;\t\n border-style: solid;\n }\t\n \t\n .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\t\n display: inline-block;\t\n }\t\n .apexcharts-legend-series.apexcharts-no-click {\t\n cursor: auto;\t\n }\t\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\t\n display: none !important;\t\n }\t\n .apexcharts-inactive-legend {\t\n opacity: 0.45;\t\n }");return t.appendChild(e),t}},{key:"getLegendBBox",value:function(){var t=this.w.globals.dom.baseEl.querySelector(".apexcharts-legend").getBoundingClientRect(),e=t.width;return{clwh:t.height,clww:e}}},{key:"appendToForeignObject",value:function(){var t=this.w.globals;t.dom.elLegendForeign=document.createElementNS(t.SVGNS,"foreignObject");var e=t.dom.elLegendForeign;e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("width",t.svgWidth),e.setAttribute("height",t.svgHeight),t.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.appendChild(t.dom.elLegendWrap),e.appendChild(this.getLegendStyles()),t.dom.Paper.node.insertBefore(e,t.dom.elGraphical.node)}},{key:"toggleDataSeries",value:function(t,e){var i=this,a=this.w;if(a.globals.axisCharts||"radialBar"===a.config.chart.type){a.globals.resized=!0;var s=null,r=null;if(a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(t,"']")),r=parseInt(s.getAttribute("data:realIndex"),10)):(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(t+1,"']")),r=parseInt(s.getAttribute("rel"),10)-1),e)[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach((function(t){i.riseCollapsedSeries(t.cs,t.csi,r)}));else this.hideSeries({seriesEl:s,realIndex:r})}else{var n=a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(t+1,"'] path")),o=a.config.chart.type;if("pie"===o||"polarArea"===o||"donut"===o){var l=a.config.plotOptions.pie.donut.labels;new p(this.lgCtx.ctx).pathMouseDown(n.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node,l)}n.fire("click")}}},{key:"hideSeries",value:function(t){var e=t.seriesEl,i=t.realIndex,a=this.w,s=g.clone(a.config.series);if(a.globals.axisCharts){var r=!1;if(a.config.yaxis[i]&&a.config.yaxis[i].show&&a.config.yaxis[i].showAlways&&(r=!0,a.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(a.globals.ancillaryCollapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split("-")[1]}),a.globals.ancillaryCollapsedSeriesIndices.push(i))),!r){a.globals.collapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split("-")[1]}),a.globals.collapsedSeriesIndices.push(i);var n=a.globals.risingSeries.indexOf(i);a.globals.risingSeries.splice(n,1)}s[i].data=[]}else a.globals.collapsedSeries.push({index:i,data:s[i]}),a.globals.collapsedSeriesIndices.push(i),s[i]=0;for(var o=e.childNodes,l=0;l0)for(var s=0;s1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),g.isIE11()?document.getElementsByTagName("head")[0].appendChild(this.legendHelpers.getLegendStyles()):this.legendHelpers.appendToForeignObject(),"bottom"===i.legend.position||"top"===i.legend.position?this.legendAlignHorizontal():"right"!==i.legend.position&&"left"!==i.legend.position||this.legendAlignVertical()}}},{key:"drawLegends",value:function(){var t=this.w,e=t.config.legend.fontFamily,i=t.globals.seriesNames,a=t.globals.colors.slice();if("heatmap"===t.config.chart.type){var s=t.config.plotOptions.heatmap.colorScale.ranges;i=s.map((function(t){return t.name?t.name:t.from+" - "+t.to})),a=s.map((function(t){return t.color}))}else this.isBarsDistributed&&(i=t.globals.labels.slice());for(var r=t.globals.legendFormatter,n=t.config.legend.inverseOrder,o=n?i.length-1:0;n?o>=0:o<=i.length-1;n?o--:o++){var l=r(i[o],{seriesIndex:o,w:t}),h=!1,c=!1;if(t.globals.collapsedSeries.length>0)for(var d=0;d0)for(var g=0;g0?l-10:0)+(h>0?h-10:0)}a.style.position="absolute",r=r+t+i.config.legend.offsetX,n=n+e+i.config.legend.offsetY,a.style.left=r+"px",a.style.top=n+"px","bottom"===i.config.legend.position?(a.style.top="auto",a.style.bottom=5-i.config.legend.offsetY+"px"):"right"===i.config.legend.position&&(a.style.left="auto",a.style.right=25+i.config.legend.offsetX+"px");["width","height"].forEach((function(t){a.style[t]&&(a.style[t]=parseInt(i.config.legend[t],10)+"px")}))}},{key:"legendAlignHorizontal",value:function(){var t=this.w;t.globals.dom.baseEl.querySelector(".apexcharts-legend").style.right=0;var e=this.legendHelpers.getLegendBBox(),i=new nt(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords("title"),s=i.dimHelpers.getTitleSubtitleCoords("subtitle"),r=0;"bottom"===t.config.legend.position?r=-e.clwh/1.8:"top"===t.config.legend.position&&(r=a.height+s.height+t.config.title.margin+t.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:"legendAlignVertical",value:function(){var t=this.w,e=this.legendHelpers.getLegendBBox(),i=0;"left"===t.config.legend.position&&(i=20),"right"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(t){var e=this.w,i=t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker");if("heatmap"===e.config.chart.type||this.isBarsDistributed){if(i){var a=parseInt(t.target.getAttribute("rel"),10)-1;this.ctx.events.fireEvent("legendHover",[this.ctx,a,this.w]),new M(this.ctx).highlightRangeInSeries(t,t.target)}}else!t.target.classList.contains("apexcharts-inactive-legend")&&i&&new M(this.ctx).toggleSeriesOnHover(t,t.target)}},{key:"onLegendClick",value:function(t){if(t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker")){var e=parseInt(t.target.getAttribute("rel"),10)-1,i="true"===t.target.getAttribute("data:collapsed"),a=this.w.config.chart.events.legendClick;"function"==typeof a&&a(this.ctx,e,this.w),this.ctx.events.fireEvent("legendClick",[this.ctx,e,this.w]);var s=this.w.config.legend.markers.onClick;"function"==typeof s&&t.target.classList.contains("apexcharts-legend-marker")&&(s(this.ctx,e,this.w),this.ctx.events.fireEvent("legendMarkerClick",[this.ctx,e,this.w])),this.legendHelpers.toggleDataSeries(e,i)}}}]),t}(),ht=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.ev=this.w.config.chart.events,this.selectedClass="apexcharts-selected",this.localeValues=this.w.globals.locale.toolbar}return a(t,[{key:"createToolbar",value:function(){var t=this,e=this.w,i=function(){return document.createElement("div")},a=i();if(a.setAttribute("class","apexcharts-toolbar"),a.style.top=e.config.chart.toolbar.offsetY+"px",a.style.right=3-e.config.chart.toolbar.offsetX+"px",e.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=e.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s\n \n \n\n'),n("zoomOut",this.elZoomOut,'\n \n \n\n');var o=function(i){t.t[i]&&e.config.chart[i].enabled&&r.push({el:"zoom"===i?t.elZoom:t.elSelection,icon:"string"==typeof t.t[i]?t.t[i]:"zoom"===i?'\n \n \n \n':'\n \n \n',title:t.localeValues["zoom"===i?"selectionZoom":"selection"],class:e.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-".concat(i,"-icon")})};o("zoom"),o("selection"),this.t.pan&&e.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:"string"==typeof this.t.pan?this.t.pan:'\n \n \n \n \n \n \n \n',title:this.localeValues.pan,class:e.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-pan-icon"}),n("reset",this.elZoomReset,'\n \n \n'),this.t.download&&r.push({el:this.elMenuIcon,icon:"string"==typeof this.t.download?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var l=0;l0&&e.height>0&&this.slDraggableRect.selectize({points:"l, r",pointSize:8,pointType:"rect"}).resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,a={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(a),this.makeSelectionRectDraggable(),"function"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:"drawSelectionRect",value:function(t){var e=t.x,i=t.y,a=t.width,s=t.height,r=t.translateX,n=void 0===r?0:r,o=t.translateY,l=void 0===o?0:o,h=this.w,c=this.zoomRect,d=this.selectionRect;if(this.dragged||null!==h.globals.selection){var g={transform:"translate("+n+", "+l+")"};h.globals.zoomEnabled&&this.dragged&&(a<0&&(a=1),c.attr({x:e,y:i,width:a,height:s,fill:h.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":h.config.chart.zoom.zoomedArea.fill.opacity,stroke:h.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":h.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":h.config.chart.zoom.zoomedArea.stroke.opacity}),p.setAttrs(c.node,g)),h.globals.selectionEnabled&&(d.attr({x:e,y:i,width:a>0?a:0,height:s>0?s:0,fill:h.config.chart.selection.fill.color,"fill-opacity":h.config.chart.selection.fill.opacity,stroke:h.config.chart.selection.stroke.color,"stroke-width":h.config.chart.selection.stroke.width,"stroke-dasharray":h.config.chart.selection.stroke.dashArray,"stroke-opacity":h.config.chart.selection.stroke.opacity}),p.setAttrs(d.node,g))}}},{key:"hideSelectionRect",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.gridRect.getBoundingClientRect(),n=s.startX-1,o=s.startY,l=s.clientX-r.left-n,h=s.clientY-r.top-o,c=0,d=0,g={};return Math.abs(l+n)>a.globals.gridWidth?l=a.globals.gridWidth-n:s.clientX-r.left<0&&(l=n),n>s.clientX-r.left&&(c=-(l=Math.abs(l))),o>s.clientY-r.top&&(d=-(h=Math.abs(h))),g="x"===i?{x:n,y:0,width:l,height:a.globals.gridHeight,translateX:c,translateY:0}:"y"===i?{x:0,y:o,width:a.globals.gridWidth,height:h,translateX:0,translateY:d}:{x:n,y:o,width:l,height:h,translateX:c,translateY:d},s.drawSelectionRect(g),s.selectionDragging("resizing"),g}},{key:"selectionDragging",value:function(t,e){var i=this,a=this.w,s=this.xyRatios,r=this.selectionRect,n=0;"resizing"===t&&(n=30);var o=function(t){return parseFloat(r.node.getAttribute(t))},l={x:o("x"),y:o("y"),width:o("width"),height:o("height")};a.globals.selection=l,"function"==typeof a.config.chart.events.selection&&a.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var t=i.gridRect.getBoundingClientRect(),e=r.node.getBoundingClientRect(),n=a.globals.xAxisScale.niceMin+(e.left-t.left)*s.xRatio,o=a.globals.xAxisScale.niceMin+(e.right-t.left)*s.xRatio,l=a.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*s.yRatio[0],h=a.globals.yAxisScale[0].niceMax-(e.top-t.top)*s.yRatio[0];a.config.chart.events.selection(i.ctx,{xaxis:{min:n,max:o},yaxis:{min:l,max:h}})}),n))}},{key:"selectionDrawn",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.xyRatios,n=this.ctx.toolbar;if(s.startX>s.endX){var o=s.startX;s.startX=s.endX,s.endX=o}if(s.startY>s.endY){var l=s.startY;s.startY=s.endY,s.endY=l}var h=a.globals.xAxisScale.niceMin+s.startX*r.xRatio,c=a.globals.xAxisScale.niceMin+s.endX*r.xRatio,d=[],u=[];if(a.config.yaxis.forEach((function(t,e){d.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.startY),u.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.endY)})),s.dragged&&(s.dragX>10||s.dragY>10)&&h!==c)if(a.globals.zoomEnabled){var f=g.clone(a.globals.initialConfig.yaxis),p=g.clone(a.globals.initialConfig.xaxis);if(a.globals.zoomed=!0,a.globals.zoomed||(a.globals.lastXAxis=g.clone(a.config.xaxis),a.globals.lastYAxis=g.clone(a.config.yaxis)),a.config.xaxis.convertedCatToNumeric&&(h=Math.floor(h),c=Math.floor(c),h<1&&(h=1,c=a.globals.dataPoints),c-h<2&&(c=h+1)),"xy"!==i&&"x"!==i||(p={min:h,max:c}),"xy"!==i&&"y"!==i||f.forEach((function(t,e){f[e].min=u[e],f[e].max=d[e]})),a.config.chart.zoom.autoScaleYaxis){var x=new j(s.ctx);f=x.autoScaleY(s.ctx,f,{xaxis:p})}if(n){var b=n.getBeforeZoomRange(p,f);b&&(p=b.xaxis?b.xaxis:p,f=b.yaxis?b.yaxe:f)}var m={xaxis:p};a.config.chart.group||(m.yaxis=f),s.ctx.updateHelpers._updateOptions(m,!1,s.w.config.chart.animations.dynamicAnimation.enabled),"function"==typeof a.config.chart.events.zoomed&&n.zoomCallback(p,f)}else if(a.globals.selectionEnabled){var v,y=null;v={min:h,max:c},"xy"!==i&&"y"!==i||(y=g.clone(a.config.yaxis)).forEach((function(t,e){y[e].min=u[e],y[e].max=d[e]})),a.globals.selection=s.selection,"function"==typeof a.config.chart.events.selection&&a.config.chart.events.selection(s.ctx,{xaxis:v,yaxis:y})}}},{key:"panDragging",value:function(t){var e=t.context,i=this.w,a=e;if(void 0!==i.globals.lastClientPosition.x){var s=i.globals.lastClientPosition.x-a.clientX,r=i.globals.lastClientPosition.y-a.clientY;Math.abs(s)>Math.abs(r)&&s>0?this.moveDirection="left":Math.abs(s)>Math.abs(r)&&s<0?this.moveDirection="right":Math.abs(r)>Math.abs(s)&&r>0?this.moveDirection="up":Math.abs(r)>Math.abs(s)&&r<0&&(this.moveDirection="down")}i.globals.lastClientPosition={x:a.clientX,y:a.clientY};var n=i.globals.minX,o=i.globals.maxX;i.config.xaxis.convertedCatToNumeric||a.panScrolled(n,o)}},{key:"delayedPanScrolled",value:function(){var t=this.w,e=t.globals.minX,i=t.globals.maxX,a=(t.globals.maxX-t.globals.minX)/2;"left"===this.moveDirection?(e=t.globals.minX+a,i=t.globals.maxX+a):"right"===this.moveDirection&&(e=t.globals.minX-a,i=t.globals.maxX-a),e=Math.floor(e),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:e,max:i}},e,i)}},{key:"panScrolled",value:function(t,e){var i=this.w,a=this.xyRatios,s=g.clone(i.globals.initialConfig.yaxis);"left"===this.moveDirection?(t=i.globals.minX+i.globals.gridWidth/15*a.xRatio,e=i.globals.maxX+i.globals.gridWidth/15*a.xRatio):"right"===this.moveDirection&&(t=i.globals.minX-i.globals.gridWidth/15*a.xRatio,e=i.globals.maxX-i.globals.gridWidth/15*a.xRatio),(ti.globals.initialMaxX)&&(t=i.globals.minX,e=i.globals.maxX);var r={min:t,max:e};i.config.chart.zoom.autoScaleYaxis&&(s=new j(this.ctx).autoScaleY(this.ctx,s,{xaxis:r}));var n={xaxis:{min:t,max:e}};i.config.chart.group||(n.yaxis=s),this.updateScrolledChart(n,t,e)}},{key:"updateScrolledChart",value:function(t,e,i){var a=this.w;this.ctx.updateHelpers._updateOptions(t,!1,!1),"function"==typeof a.config.chart.events.scrolled&&a.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(ht),dt=function(){function t(i){e(this,t),this.w=i.w,this.ttCtx=i,this.ctx=i.ctx}return a(t,[{key:"getNearestValues",value:function(t){var e=t.hoverArea,i=t.elGrid,a=t.clientX,s=t.clientY,r=this.w,n=r.globals.gridWidth,o=n/(r.globals.dataPoints-1),l=i.getBoundingClientRect(),h=this.hasBars();(r.globals.comboCharts||h)&&(o=n/r.globals.dataPoints);var c=a-l.left,d=s-l.top;c<0||d<0||c>r.globals.gridWidth||d>r.globals.gridHeight?(e.classList.remove("hovering-zoom"),e.classList.remove("hovering-pan")):r.globals.zoomEnabled?(e.classList.remove("hovering-pan"),e.classList.add("hovering-zoom")):r.globals.panEnabled&&(e.classList.remove("hovering-zoom"),e.classList.add("hovering-pan"));var u=Math.round(c/o);h&&(u=Math.ceil(c/o),u-=1);for(var f,p=null,x=null,b=[],m=0;m1?r=this.getFirstActiveXArray(i):n=0;var l=a[r][0],h=i[r][0],c=Math.abs(t-h),d=Math.abs(e-l),g=d+c;return a.map((function(s,r){s.map((function(s,l){var h=Math.abs(e-a[r][l]),u=Math.abs(t-i[r][l]),f=u+h;f0?e:-1})),s=0;s0)for(var a=0;a0}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"getHoverMarkerSize",value:function(t){var e=this.w,i=e.config.markers.hover.size;return void 0===i&&(i=e.globals.markers.size[t]+e.config.markers.hover.sizeOffset),i}},{key:"toggleAllTooltipSeriesGroups",value:function(t){var e=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=e.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group"));for(var a=i.allTooltipSeriesGroups,s=0;s-1?f[0].parentNode.style.display="none":f[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:"toggleActiveInactiveSeries",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var i=e.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group");i&&(i.classList.add("apexcharts-active"),i.style.display=e.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(t){var e=t.i,i=t.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r="",n="",o=null,l=null,h={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},c=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric?(r=s[e][i],0===s[e].length&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=void 0!==a.globals.labels[i]?a.globals.labels[i]:"";var d=r;a.globals.isXNumeric&&"datetime"===a.config.xaxis.type?r=new W(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d):a.globals.isBarHorizontal||(r=a.globals.xLabelFormatter(d,h));return void 0!==a.config.tooltip.x.formatter&&(r=a.globals.ttKeyFormatter(d,h)),a.globals.seriesZ.length>0&&a.globals.seriesZ[0].length>0&&(o=c(a.globals.seriesZ[e][i],a)),n="function"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,h):r,{val:Array.isArray(l)?l.join(" "):l,xVal:Array.isArray(r)?r.join(" "):r,xAxisTTVal:Array.isArray(n)?n.join(" "):n,zVal:o}}},{key:"handleCustomTooltip",value:function(t){var e=t.i,i=t.j,a=t.y1,s=t.y2,r=t.w,n=this.ttCtx.getElTooltip(),o=r.config.tooltip.custom;Array.isArray(o)&&o[e]&&(o=o[e]),n.innerHTML=o({ctx:this.ctx,series:r.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:s,w:r})}}]),t}(),ut=function(){function t(i){e(this,t),this.ttCtx=i,this.ctx=i.ctx,this.w=i.w}return a(t,[{key:"moveXCrosshairs",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=t-i.xcrosshairsWidth/2,n=a.globals.labels.slice().length;if(null!==e&&(r=a.globals.gridWidth/n*e),null!==s&&(s.setAttribute("x",r),s.setAttribute("x1",r),s.setAttribute("x2",r),s.setAttribute("y2",a.globals.gridHeight),s.classList.add("apexcharts-active")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.blxaxisTooltip){var o=r;"tickWidth"!==a.config.xaxis.crosshairs.width&&"barWidth"!==a.config.xaxis.crosshairs.width||(o=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&p.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&p.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:"moveXAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip){i.xaxisTooltip.classList.add("apexcharts-active");var a=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var s;s=new p(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+"px",i.xaxisTooltip.style.left=t+"px",i.xaxisTooltip.style.top=a+"px"}}}},{key:"moveYAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var a=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),s=e.globals.translateY+a,r=i.yaxisTTEls[t].getBoundingClientRect().height,n=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(n-=26),s-=r/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add("apexcharts-active"),i.yaxisTTEls[t].style.top=s+"px",i.yaxisTTEls[t].style.left=n+e.config.yaxis[t].tooltip.offsetX+"px"):i.yaxisTTEls[t].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),n=s.tooltipRect,o=null!==i?parseFloat(i):1,l=parseFloat(t)+o+5,h=parseFloat(e)+o/2;if(l>a.globals.gridWidth/2&&(l=l-n.ttWidth-o-15),l>a.globals.gridWidth-n.ttWidth-10&&(l=a.globals.gridWidth-n.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var c=s.getElGrid(),d=c.getBoundingClientRect();h=s.e.clientY+a.globals.translateY-d.top-n.ttHeight/2}if(!a.config.tooltip.followCursor){var g=this.positionChecks(n,l,h);l=g.x,h=g.y}isNaN(l)||(l+=a.globals.translateX,r.style.left=l+"px",r.style.top=h+"px")}},{key:"positionChecks",value:function(t,e,i){var a=this.w;return t.ttHeight/2+i>a.globals.gridHeight&&(i=a.globals.gridHeight-t.ttHeight+a.globals.translateY),i<0&&(i=0),{x:e,y:i}}},{key:"moveMarkers",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(t,"'] .apexcharts-marker")),r=0;r0&&(h.setAttribute("r",o),h.setAttribute("cx",i),h.setAttribute("cy",a)),this.moveXCrosshairs(i),r.fixedTooltip||this.moveTooltip(i,a,o)}}},{key:"moveDynamicPointsOnHover",value:function(t){var e,i=this.ttCtx,a=i.w,s=0,r=0,n=a.globals.pointsArray;e=new M(this.ctx).getActiveConfigSeriesIndex(!0);var o=i.tooltipUtil.getHoverMarkerSize(e);n[e]&&(s=n[e][t][0],r=n[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var h=0;h0?(l[h]&&l[h].setAttribute("r",o),l[h]&&l[h].setAttribute("cy",d)):l[h]&&l[h].setAttribute("r",0)}}if(this.moveXCrosshairs(s),!i.fixedTooltip){var g=r||a.globals.gridHeight;this.moveTooltip(s,g,o)}}},{key:"moveStickyTooltipOverBars",value:function(t){var e,i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1,n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r,"'] path[j='").concat(t,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(t,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(t,"']")),o=n?parseFloat(n.getAttribute("cx")):0,l=n?parseFloat(n.getAttribute("barWidth")):0;i.globals.isXNumeric?o-=s%2!=0?l/2:0:(o=a.xAxisTicksPositions[t-1]+a.dataPointsDividedWidth/2,isNaN(o)&&(o=a.xAxisTicksPositions[t]-a.dataPointsDividedWidth/2));var h=a.getElGrid().getBoundingClientRect();if(e=a.e.clientY-h.top-a.tooltipRect.ttHeight/2,this.moveXCrosshairs(o),!a.fixedTooltip){var c=e||i.globals.gridHeight;this.moveTooltip(o,c)}}}]),t}(),ft=function(){function t(i){e(this,t),this.w=i.w,this.ttCtx=i,this.ctx=i.ctx,this.tooltipPosition=new ut(i)}return a(t,[{key:"drawDynamicPoints",value:function(){var t=this.w,e=new p(this.ctx),i=new P(this.ctx),a=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series");(a=d(a)).sort((function(t,e){return Number(e.getAttribute("data:realIndex"))2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w;"bubble"!==s.config.chart.type&&this.newPointSize(t,e);var r=e.getAttribute("cx"),n=e.getAttribute("cy");if(null!==i&&null!==a&&(r=i,n=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if("radar"===s.config.chart.type){var o=this.ttCtx.getElGrid(),l=o.getBoundingClientRect();r=this.ttCtx.e.clientX-l.left}this.tooltipPosition.moveTooltip(r,n,s.config.markers.hover.size)}}},{key:"enlargePoints",value:function(t){for(var e=this.w,i=this.ttCtx,a=t,s=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),r=e.config.markers.hover.size,n=0;nn.globals.gridWidth/2&&(a=h-r.tooltipRect.ttWidth/2+d),r.w.config.tooltip.followCursor){var u=r.getElGrid().getBoundingClientRect();s=r.e.clientY-u.top+n.globals.translateY/2-10}}return{x:a,y:s}}},{key:"handleMarkerTooltip",value:function(t){var e,i,a=t.e,s=t.opt,r=t.x,n=t.y,o=this.w,l=this.ttCtx;if(a.target.classList.contains("apexcharts-marker")){var h=parseInt(s.paths.getAttribute("cx"),10),c=parseInt(s.paths.getAttribute("cy"),10),d=parseFloat(s.paths.getAttribute("val"));if(i=parseInt(s.paths.getAttribute("rel"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,l.intersect){var u=g.findAncestor(s.paths,"apexcharts-series");u&&(e=parseInt(u.getAttribute("data:realIndex"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!l.showOnIntersect&&o.config.tooltip.shared}),"mouseup"===a.type&&l.markerClick(a,e,i),o.globals.capturedSeriesIndex=e,o.globals.capturedDataPointIndex=i,r=h,n=c+o.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var f=l.getElGrid().getBoundingClientRect();n=l.e.clientY+o.globals.translateY-f.top}d<0&&(n=c),l.marker.enlargeCurrentPoint(i,s.paths,r,n)}return{x:r,y:n}}},{key:"handleBarTooltip",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,n=this.ttCtx,o=n.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:a,opt:s});e=d.i;var g=d.barHeight,u=d.j;if(r.globals.capturedSeriesIndex=e,r.globals.capturedDataPointIndex=u,r.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||!r.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[e]:r.config.stroke.width,l=h):r.globals.comboCharts||r.config.tooltip.shared||(l/=2),isNaN(c)?c=r.globals.svgHeight-n.tooltipRect.ttHeight:c<0&&(c=0),h+n.tooltipRect.ttWidth>r.globals.gridWidth?h-=n.tooltipRect.ttWidth:h<0&&(h=0),n.w.config.tooltip.followCursor){var f=n.getElGrid().getBoundingClientRect();c=n.e.clientY-f.top}if(null===n.tooltip&&(n.tooltip=r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),r.config.tooltip.shared||(r.globals.comboBarCount>0?n.tooltipPosition.moveXCrosshairs(l+i/2):n.tooltipPosition.moveXCrosshairs(l)),!n.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&n.tooltipUtil.hasBars())){var p=r.globals.isMultipleYAxis?r.config.yaxis[x]&&r.config.yaxis[x].reversed:r.config.yaxis[0].reversed;p&&(h-=n.tooltipRect.ttWidth)<0&&(h=0),o.style.left=h+r.globals.translateX+"px";var x=parseInt(s.paths.parentNode.getAttribute("data:realIndex"),10);!p||r.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||(c=c+g-2*(r.globals.series[e][u]<0?g:0)),n.tooltipRect.ttHeight+c>r.globals.gridHeight?(c=r.globals.gridHeight-n.tooltipRect.ttHeight+r.globals.translateY,o.style.top=c+"px"):o.style.top=c+r.globals.translateY-n.tooltipRect.ttHeight/2+"px"}}},{key:"getBarTooltipXY",value:function(t){var e=t.e,i=t.opt,a=this.w,s=null,r=this.ttCtx,n=0,o=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains("apexcharts-bar-area")||d.contains("apexcharts-candlestick-area")||d.contains("apexcharts-rangebar-area")){var g=e.target,u=g.getBoundingClientRect(),f=i.elGrid.getBoundingClientRect(),p=u.height;c=u.height;var x=u.width,b=parseInt(g.getAttribute("cx"),10),m=parseInt(g.getAttribute("cy"),10);h=parseFloat(g.getAttribute("barWidth"));var v="touchmove"===e.type?e.touches[0].clientX:e.clientX;s=parseInt(g.getAttribute("j"),10),n=parseInt(g.parentNode.getAttribute("rel"),10)-1;var y=g.getAttribute("data-range-y1"),w=g.getAttribute("data-range-y2");a.globals.comboCharts&&(n=parseInt(g.parentNode.getAttribute("data:realIndex"),10)),r.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:n,j:s,y1:y?parseInt(y,10):null,y2:w?parseInt(w,10):null,shared:!r.showOnIntersect&&a.config.tooltip.shared}),a.config.tooltip.followCursor?a.globals.isBarHorizontal?(o=v-f.left+15,l=m-r.dataPointsDividedHeight+p/2-r.tooltipRect.ttHeight/2):(o=a.globals.isXNumeric?b-x/2:b-r.dataPointsDividedWidth+x/2,l=e.clientY-f.top-r.tooltipRect.ttHeight/2-15):a.globals.isBarHorizontal?((o=b)0&&i.setAttribute("width",e.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(t,e,i){var a=this.ttCtx,s=this.w,r=s.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var n=a.getElGrid().getBoundingClientRect(),o=(e-n.top)*i.yRatio[t],l=s.globals.maxYArr[t]-s.globals.minYArr[t],h=s.globals.minYArr[t]+(l-o);a.tooltipPosition.moveYCrosshairs(e-n.top),a.yaxisTooltipText[t].innerHTML=r(h),a.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),bt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var a=this.w;this.tConfig=a.config.tooltip,this.tooltipUtil=new dt(this),this.tooltipLabels=new gt(this),this.tooltipPosition=new ut(this),this.marker=new ft(this),this.intersect=new pt(this),this.axesTooltip=new xt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!a.globals.isBarHorizontal&&this.tConfig.shared}return a(t,[{key:"getElTooltip",value:function(t){return t||(t=this),t.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip")}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(t){var e=this.w;this.xyRatios=t,this.blxaxisTooltip=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new G(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&"bar"!==e.config.chart.type&&"rangeBar"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:"createTTElements",value:function(t){for(var e=this.w,i=[],a=this.getElTooltip(),s=0;s0&&this.addPathsEventListeners(u,c),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(c)}}},{key:"drawFixedTooltipRect",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,n=this.tConfig.fixed.offsetY,o=this.tConfig.fixed.position.toLowerCase();return o.indexOf("right")>-1&&(r=r+t.globals.svgWidth-a+10),o.indexOf("bottom")>-1&&(n=n+t.globals.svgHeight-s-10),e.style.left=r+"px",e.style.top=n+"px",{x:r,y:n,ttWidth:a,ttHeight:s}}},{key:"addDatapointEventsListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area");this.addPathsEventListeners(e,t)}},{key:"addPathsEventListeners",value:function(t,e){for(var i=this,a=function(a){var s={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map((function(e){return t[a].addEventListener(e,i.seriesHover.bind(i,s),{capture:!1,passive:!0})}))},s=0;sn.top+n.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var h=parseInt(s.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(h)<0)return void this.handleMouseOut(s)}var c=this.getElTooltip(),d=this.getElXCrosshairs(),g=r.globals.xyCharts||"bar"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&(g=!1),"mousemove"===a.type||"touchmove"===a.type||"mouseup"===a.type){null!==d&&d.classList.add("apexcharts-active");var u=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&u.length&&this.ycrosshairs.classList.add("apexcharts-active"),g&&!this.showOnIntersect)this.handleStickyTooltip(a,o,l,s);else if("heatmap"===r.config.chart.type){var f=this.intersect.handleHeatTooltip({e:a,opt:s,x:e,y:i});e=f.x,i=f.y,c.style.left=e+"px",c.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:e,y:i});if(this.yaxisTooltips.length)for(var p=0;ps.globals.gridWidth?this.handleMouseOut(a):null!==o?this.handleStickyCapturedSeries(t,o,a,n):this.tooltipUtil.isXoverlap(n)&&this.create(t,this,0,n,a.ttItems)}},{key:"handleStickyCapturedSeries",value:function(t,e,i,a){var s=this.w;null===s.globals.series[e][a]?this.handleMouseOut(i):void 0!==s.globals.series[e][a]?this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1):this.tooltipUtil.isXoverlap(a)&&this.create(t,this,0,a,i.ttItems)}},{key:"deactivateHoverFilter",value:function(){for(var t=this.w,e=new p(this.ctx),i=t.globals.dom.Paper.select(".apexcharts-bar-area"),a=0;a5&&void 0!==arguments[5]?arguments[5]:null,n=this.w,o=e;"mouseup"===t.type&&this.markerClick(t,i,a),null===r&&(r=this.tConfig.shared);var l=this.tooltipUtil.hasMarkers(),h=this.tooltipUtil.getElBars();if(n.config.legend.tooltipHoverFormatter){var c=n.config.legend.tooltipHoverFormatter,d=Array.from(this.legendLabels);d.forEach((function(t){var e=t.getAttribute("data:default-text");t.innerHTML=decodeURIComponent(e)}));for(var g=0;g0?o.marker.enlargePoints(a):o.tooltipPosition.moveDynamicPointsOnHover(a)),this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(h),this.barSeriesHeight>0)){var m=new p(this.ctx),v=n.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a);for(var y=0;y0&&(this.totalItems+=t[r].length);for(var o=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),l=0,h=0,c=function(s,r){var c=void 0,d=void 0,u=void 0,f=void 0,p=[],x=[],b=a.globals.comboCharts?e[s]:s;i.yRatio.length>1&&(i.yaxisIndex=b),i.isReversed=a.config.yaxis[i.yaxisIndex]&&a.config.yaxis[i.yaxisIndex].reversed;var m=i.graphics.group({class:"apexcharts-series",seriesName:g.escapeString(a.globals.seriesNames[b]),rel:s+1,"data:realIndex":b});i.ctx.series.addCollapsedClassToSeries(m,b);var v=i.graphics.group({class:"apexcharts-datalabels","data:realIndex":b}),y=0,w=0,k=i.initialPositions(l,h,c,d,u,f);h=k.y,y=k.barHeight,d=k.yDivision,f=k.zeroW,l=k.x,w=k.barWidth,c=k.xDivision,u=k.zeroH,i.yArrj=[],i.yArrjF=[],i.yArrjVal=[],i.xArrj=[],i.xArrjF=[],i.xArrjVal=[],1===i.prevY.length&&i.prevY[0].every((function(t){return isNaN(t)}))&&(i.prevY[0]=i.prevY[0].map((function(t){return u})),i.prevYF[0]=i.prevYF[0].map((function(t){return 0})));for(var A=0;A0){var b=r;this.prevXVal[g-1][u]<0?b=this.series[g][u]>=0?this.prevX[g-1][u]+p-2*(this.isReversed?p:0):this.prevX[g-1][u]:this.prevXVal[g-1][u]>=0&&(b=this.series[g][u]>=0?this.prevX[g-1][u]:this.prevX[g-1][u]-p+2*(this.isReversed?p:0)),e=b}else e=r;n=null===this.series[g][u]?e:e+this.series[g][u]/this.invertedYRatio-2*(this.isReversed?this.series[g][u]/this.invertedYRatio:0),this.xArrj.push(n),this.xArrjF.push(Math.abs(e-n)),this.xArrjVal.push(this.series[g][u]);var m=this.barHelpers.getBarpaths({barYPosition:d,barHeight:a,x1:e,x2:n,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:u,w:c});return this.barHelpers.barBackground({bc:f,i:g,y1:d,y2:a,elSeries:h}),o+=l,{pathTo:m.pathTo,pathFrom:m.pathFrom,x:n,y:o}}},{key:"drawStackedColumnPaths",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,n=t.zeroH,o=(t.strokeWidth,t.elSeries),l=this.w,h=e.i,c=e.j,d=e.bc;if(l.globals.isXNumeric){var g=l.globals.seriesX[h][c];g||(g=0),i=(g-l.globals.minX)/this.xRatio-r/2}for(var u,f=i,p=0,x=0;x0&&!l.globals.isXNumeric||h>0&&l.globals.isXNumeric&&l.globals.seriesX[h-1][c]===l.globals.seriesX[h][c]){var b,m,v=Math.min(this.yRatio.length+1,h+1);if(void 0!==this.prevY[h-1])for(var y=1;y=0?m-p+2*(this.isReversed?p:0):m;break}if(this.prevYVal[h-w][c]>=0){b=this.series[h][c]>=0?m:m+p-2*(this.isReversed?p:0);break}}void 0===b&&(b=l.globals.gridHeight),u=this.prevYF[0].every((function(t){return 0===t}))&&this.prevYF.slice(1,h).every((function(t){return t.every((function(t){return isNaN(t)}))}))?l.globals.gridHeight-n:b}else u=l.globals.gridHeight-n;a=u-this.series[h][c]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[h][c]/this.yRatio[this.yaxisIndex]:0),this.yArrj.push(a),this.yArrjF.push(Math.abs(u-a)),this.yArrjVal.push(this.series[h][c]);var k=this.barHelpers.getColumnPaths({barXPosition:f,barWidth:r,y1:u,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,realIndex:e.realIndex,i:h,j:c,w:l});return this.barHelpers.barBackground({bc:d,i:h,x1:f,x2:r,elSeries:o}),i+=s,{pathTo:k.pathTo,pathFrom:k.pathFrom,x:l.globals.isXNumeric?i-s:i,y:a}}}]),i}(E),vt=function(t){function i(){return e(this,i),c(this,l(i).apply(this,arguments))}return o(i,t),a(i,[{key:"draw",value:function(t,e){var i=this.w,a=new p(this.ctx),s=new L(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick;var r=new m(this.ctx,i);t=r.getLogSeries(t),this.series=t,this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var n=a.group({class:"apexcharts-candlestick-series apexcharts-plot-series"}),o=0;o0&&(this.visibleI=this.visibleI+1);var v,y;this.yRatio.length>1&&(this.yaxisIndex=x);var w=this.barHelpers.initialPositions();d=w.y,v=w.barHeight,c=w.x,y=w.barWidth,l=w.xDivision,h=w.zeroH,f.push(c+y/2);for(var k=a.group({class:"apexcharts-datalabels","data:realIndex":x}),A=0;A0&&f.push(c+y/2),u.push(d);var T=s.fillPath({seriesNumber:x,dataPointIndex:A,color:S,value:t[o][A]}),z=this.candlestickOptions.wick.useFillColor?S:void 0;this.renderSeries({realIndex:x,pathFill:T,lineFill:z,j:A,i:o,pathFrom:P.pathFrom,pathTo:P.pathTo,strokeWidth:C,elSeries:b,x:c,y:d,series:t,barHeight:v,barWidth:y,elDataLabelsWrap:k,visibleSeries:this.visibleI,type:"candlestick"})}i.globals.seriesXvalues[x]=f,i.globals.seriesYvalues[x]=u,n.add(b)}return n}},{key:"drawCandleStickPaths",value:function(t){var e=t.indexes,i=t.x,a=(t.y,t.xDivision),s=t.barWidth,r=t.zeroH,n=t.strokeWidth,o=this.w,l=new p(this.ctx),h=e.i,c=e.j,d=!0,g=o.config.plotOptions.candlestick.colors.upward,u=o.config.plotOptions.candlestick.colors.downward,f=this.yRatio[this.yaxisIndex],x=e.realIndex,b=this.getOHLCValue(x,c),m=r,v=r;b.o>b.c&&(d=!1);var y=Math.min(b.o,b.c),w=Math.max(b.o,b.c);o.globals.isXNumeric&&(i=(o.globals.seriesX[x][c]-o.globals.minX)/this.xRatio-s/2);var k=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?y=r:(y=r-y/f,w=r-w/f,m=r-b.h/f,v=r-b.l/f);var A=l.move(k,r),S=l.move(k,y);return o.globals.previousPaths.length>0&&(S=this.getPreviousPath(x,c,!0)),A=l.move(k,w)+l.line(k+s/2,w)+l.line(k+s/2,m)+l.line(k+s/2,w)+l.line(k+s,w)+l.line(k+s,y)+l.line(k+s/2,y)+l.line(k+s/2,v)+l.line(k+s/2,y)+l.line(k,y)+l.line(k,w-n/2),S+=l.move(k,y),o.globals.isXNumeric||(i+=a),{pathTo:A,pathFrom:S,x:i,y:w,barXPosition:k,color:d?g:u}}},{key:"getOHLCValue",value:function(t,e){var i=this.w;return{o:i.globals.seriesCandleO[t][e],h:i.globals.seriesCandleH[t][e],l:i.globals.seriesCandleL[t][e],c:i.globals.seriesCandleC[t][e]}}}]),i}(E),yt=function(){function t(i,a){e(this,t),this.ctx=i,this.w=i.w,this.xRatio=a.xRatio,this.yRatio=a.yRatio,this.negRange=!1,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return a(t,[{key:"draw",value:function(t){var e=this.w,i=new p(this.ctx),a=i.group({class:"apexcharts-heatmap"});a.attr("clip-path","url(#gridRectMask".concat(e.globals.cuid,")"));var s=e.globals.gridWidth/e.globals.dataPoints,r=e.globals.gridHeight/e.globals.series.length,n=0,o=!1;this.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(o=!0,l.reverse());for(var h=o?0:l.length-1;o?h=0;o?h++:h--){var c=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:g.escapeString(e.globals.seriesNames[h]),rel:h+1,"data:realIndex":h});if(this.ctx.series.addCollapsedClassToSeries(c,h),e.config.chart.dropShadow.enabled){var d=e.config.chart.dropShadow;new u(this.ctx).dropShadow(c,d,h)}for(var f=0,x=0;x0&&e.colorScale.ranges.map((function(e,i){e.from<=0&&(t.negRange=!0)}))}},{key:"determineHeatColor",value:function(t,e){var i=this.w,a=i.globals.series[t][e],s=i.config.plotOptions.heatmap,r=s.colorScale.inverse?e:t,n=i.globals.colors[r],o=null,l=Math.min.apply(Math,d(i.globals.series[t])),h=Math.max.apply(Math,d(i.globals.series[t]));s.distributed||(l=i.globals.minY,h=i.globals.maxY),void 0!==s.colorScale.min&&(l=s.colorScale.mini.globals.maxY?s.colorScale.max:i.globals.maxY);var c=Math.abs(h)+Math.abs(l),g=100*a/(0===c?c-1e-6:c);s.colorScale.ranges.length>0&&s.colorScale.ranges.map((function(t,e){if(a>=t.from&&a<=t.to){n=t.color,o=t.foreColor?t.foreColor:null,l=t.from,h=t.to;var i=Math.abs(h)+Math.abs(l);g=100*a/(0===i?i-1e-6:i)}}));return{color:n,foreColor:o,percent:g}}},{key:"calculateHeatmapDataLabels",value:function(t){var e=t.x,i=t.y,a=t.i,s=t.j,r=t.heatColorProps,n=(t.series,t.rectHeight),o=t.rectWidth,l=this.w,h=l.config.dataLabels,c=new p(this.ctx),d=new z(this.ctx),g=h.formatter,u=null;if(h.enabled){u=c.group({class:"apexcharts-data-labels"});var f=h.offsetX,x=h.offsetY,b=e+o/2+f,m=i+n/2+parseFloat(h.style.fontSize)/3+x,v=g(l.globals.series[a][s],{seriesIndex:a,dataPointIndex:s,w:l});d.plotDataLabelsText({x:b,y:m,text:v,i:a,j:s,color:r.foreColor,parent:u,dataLabelsConfig:h})}return u}},{key:"animateHeatMap",value:function(t,e,i,a,s,r){var n=new f(this.ctx);n.animateRect(t,{x:e+a/2,y:i+s/2,width:0,height:0},{x:e,y:i,width:a,height:s},r,(function(){n.animationCompleted(t)}))}},{key:"animateHeatColor",value:function(t,e,i,a){t.attr({fill:e}).animate(a).attr({fill:i})}}]),t}(),wt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"drawYAxisTexts",value:function(t,e,i,a){var s=this.w,r=s.config.yaxis[0],n=s.globals.yLabelFormatters[0];return new p(this.ctx).drawText({x:t+r.labels.offsetX,y:e+r.labels.offsetY,text:n(a,i),textAnchor:"middle",fontSize:r.labels.style.fontSize,fontFamily:r.labels.style.fontFamily,foreColor:Array.isArray(r.labels.style.colors)?r.labels.style.colors[i]:r.labels.style.colors})}}]),t}(),kt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels;var a=this.w;this.lineColorArr=void 0!==a.globals.stroke.colors?a.globals.stroke.colors:a.globals.colors,this.defaultSize=a.globals.svgHeightthis.fullAngle?e.endAngle=e.endAngle-(a+n):a+n=360&&(o=359.99);var l=Math.PI*(o-90)/180,h=e.centerX+s*Math.cos(n),c=e.centerY+s*Math.sin(n),d=e.centerX+s*Math.cos(l),u=e.centerY+s*Math.sin(l),f=g.polarToCartesian(e.centerX,e.centerY,e.donutSize,o),p=g.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),x=a>180?1:0,b=["M",h,c,"A",s,s,0,x,1,d,u];return"donut"===e.chartType?[].concat(b,["L",f.x,f.y,"A",e.donutSize,e.donutSize,0,x,0,p.x,p.y,"L",h,c,"z"]).join(" "):"pie"===e.chartType||"polarArea"===e.chartType?[].concat(b,["L",e.centerX,e.centerY,"L",h,c]).join(" "):[].concat(b).join(" ")}},{key:"drawPolarElements",value:function(){var t=this.w,e=new j(this.ctx),i=new p(this.ctx),a=new wt(this.ctx),s=i.group(),r=i.group(),n=void 0===t.config.yaxis[0].max&&void 0===t.config.yaxis[0].min,o=e.niceScale(0,Math.ceil(this.maxY),t.config.yaxis[0].tickAmount,0,n),l=o.result.reverse(),h=o.result.length;this.maxY=o.niceMax;for(var c=t.globals.radialSize,d=c/(h-1),g=0;g1&&t.total.show&&(s=t.total.color);var n=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,t.value.formatter)(i,r),a||"function"!=typeof t.total.formatter||(i=t.total.formatter(r));var l=e===t.total.label;e=t.name.formatter(e,l,r),null!==n&&(n.textContent=e),null!==o&&(o.textContent=i),null!==n&&(n.style.fill=s)}},{key:"printDataLabelsInner",value:function(t,e){var i=this.w,a=t.getAttribute("data:value"),s=i.globals.seriesNames[parseInt(t.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,s,a,t);var r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");null!==r&&(r.style.opacity=1)}},{key:"revertDataLabelsInner",value:function(t,e,i){var a=this,s=this.w,r=s.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group"),n=!1,o=s.globals.dom.baseEl.getElementsByClassName("apexcharts-pie-area"),l=function(t){var i=t.makeSliceOut,s=t.printLabel;Array.prototype.forEach.call(o,(function(t){"true"===t.getAttribute("data:pieClicked")&&(i&&(n=!0),s&&a.printDataLabelsInner(t,e))}))};if(l({makeSliceOut:!0,printLabel:!1}),e.total.show&&s.globals.series.length>1)n&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(s));else if(l({makeSliceOut:!1,printLabel:!0}),!n)if(s.globals.selectedDataPoints.length&&s.globals.series.length>1)if(s.globals.selectedDataPoints[0].length>0){var h=s.globals.selectedDataPoints[0],c=s.globals.dom.baseEl.querySelector(".apexcharts-".concat(this.chartType.toLowerCase(),"-slice-").concat(h));this.printDataLabelsInner(c,e)}else r&&s.globals.selectedDataPoints.length&&0===s.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&s.globals.series.length>1&&(r.style.opacity=0)}}]),t}(),At=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var a=this.w;this.graphics=new p(this.ctx),this.lineColorArr=void 0!==a.globals.stroke.colors?a.globals.stroke.colors:a.globals.colors,this.defaultSize=a.globals.svgHeight0&&(b=e.getPreviousPath(o));for(var m=0;m=10?t.x>0?(i="start",a+=10):t.x<0&&(i="end",a-=10):i="middle",Math.abs(t.y)>=e-10&&(t.y<0?s-=10:t.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:"getPreviousPath",value:function(t){for(var e=this.w,i=null,a=0;a0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],s=0;s=360&&(g=360-Math.abs(this.startAngle)-.1);var f=i.drawPath({d:"",stroke:c,strokeWidth:n*parseInt(h.strokeWidth,10)/100,fill:"none",strokeOpacity:h.opacity,classes:"apexcharts-radialbar-area"});if(h.dropShadow.enabled){var x=h.dropShadow;s.dropShadow(f,x)}l.add(f),f.attr("id","apexcharts-radialbarTrack-"+o),this.animatePaths(f,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:o,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:"drawArcs",value:function(t){var e=this.w,i=new p(this.ctx),a=new L(this.ctx),s=new u(this.ctx),r=i.group(),n=this.getStrokeWidth(t);t.size=t.size-n/2;var o=e.config.plotOptions.radialBar.hollow.background,l=t.size-n*t.series.length-this.margin*t.series.length-n*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(o=this.drawHollowImage(t,r,l,o));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:o||"transparent"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var d=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(c,d)}var f=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(f=0);var x=null;this.radialDataLabels.show&&(x=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:f})),"back"===e.config.plotOptions.radialBar.hollow.position&&(r.add(c),x&&r.add(x));var b=!1;e.config.plotOptions.radialBar.inverseOrder&&(b=!0);for(var m=b?t.series.length-1:0;b?m>=0:m100?100:t.series[m])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*g.negToZero(e.globals.previousPaths[m])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var P=S-w,T=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[m]:e.config.stroke.dashArray,z=i.drawPath({d:"",stroke:y,strokeWidth:n,fill:"none",fillOpacity:e.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+m,strokeDashArray:T});if(p.setAttrs(z.node,{"data:angle":P,"data:value":t.series[m]}),e.config.chart.dropShadow.enabled){var I=e.config.chart.dropShadow;s.dropShadow(z,I,m)}this.addListeners(z,this.radialDataLabels),v.add(z),z.attr({index:0,j:m});var M=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(M=(S-w)/360*e.config.chart.animations.speed,this.animDur=M/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),e.globals.dataChanged&&(M=(S-w)/360*e.config.chart.animations.dynamicAnimation.speed,this.animDur=M/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),this.animatePaths(z,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:m,totalItems:2,animBeginArr:this.animBeginArr,dur:M,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:r,elHollow:c,dataLabels:x}}},{key:"drawHollow",value:function(t){var e=new p(this.ctx).drawCircle(2*t.size);return e.attr({class:"apexcharts-radialbar-hollow",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:"drawHollowImage",value:function(t,e,i,a){var s=this.w,r=new L(this.ctx),n=g.randomId(),o=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)r.clippedImgArea({width:i,height:i,image:o,patternID:"pattern".concat(s.globals.cuid).concat(n)}),a="url(#pattern".concat(s.globals.cuid).concat(n,")");else{var l=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=s.globals.dom.Paper.image(o).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(c)}else{var d=s.globals.dom.Paper.image(o).loaded((function(e){this.move(t.centerX-l/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)}));e.add(d)}}return a}},{key:"getStrokeWidth",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}]),i}(kt),Ct=function(){function t(i){e(this,t),this.w=i.w,this.lineCtx=i}return a(t,[{key:"sameValueSeriesFix",value:function(t,e){var i=this.w;if("line"===i.config.chart.type&&("gradient"===i.config.fill.type||"gradient"===i.config.fill.type[t])&&new m(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:"calculatePoints",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,r=t.i,n=t.j,o=t.prevY,l=this.w,h=[],c=[];if(0===n){var d=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(d=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),h.push(d),c.push(g.isNumber(e[r][0])?o+l.config.markers.offsetY:null),h.push(a+l.config.markers.offsetX),c.push(g.isNumber(e[r][n+1])?s+l.config.markers.offsetY:null)}else h.push(a+l.config.markers.offsetX),c.push(g.isNumber(e[r][n+1])?s+l.config.markers.offsetY:null);return{x:h,y:c}}},{key:"checkPreviousPaths",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,s=this.w,r=0;r0&&parseInt(n.realIndex,10)===parseInt(a,10)&&("line"===n.type?(this.lineCtx.appendPathFrom=!1,e=s.globals.previousPaths[r].paths[0].d):"area"===n.type&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(e=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(t){var e=t.i,i=t.series,a=t.prevY,s=t.lineYPosition,r=this.w;if(void 0!==i[e][0])a=(s=r.config.chart.stacked&&e>0?this.lineCtx.prevSeriesY[e-1][0]:this.lineCtx.zeroY)-i[e][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?i[e][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(r.config.chart.stacked&&e>0&&void 0===i[e][0])for(var n=e-1;n>=0;n--)if(null!==i[n][0]&&void 0!==i[n][0]){a=s=this.lineCtx.prevSeriesY[n][0];break}return{prevY:a,lineYPosition:s}}}]),t}(),Lt=function(){function t(i,a,s){e(this,t),this.ctx=i,this.w=i.w,this.xyRatios=a,this.pointsChart=!("bubble"!==this.w.config.chart.type&&"scatter"!==this.w.config.chart.type)||s,this.scatter=new T(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new Ct(this),this.markers=new P(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return a(t,[{key:"draw",value:function(t,e,i){var a=this.w,s=new p(this.ctx),r=a.globals.comboCharts?e:a.config.chart.type,n=s.group({class:"apexcharts-".concat(r,"-series apexcharts-plot-series")}),o=new m(this.ctx,a);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=o.getLogSeries(t),this.yRatio=o.getLogYRatios(this.yRatio);for(var l=[],h=0;h0&&(u=(a.globals.seriesX[c][0]-a.globals.minX)/this.xRatio),g.push(u);var f,x=u,b=x,v=this.zeroY;v=this.lineHelpers.determineFirstPrevY({i:h,series:t,prevY:v,lineYPosition:0}).prevY,d.push(v),f=v;var y=this._calculatePathsFrom({series:t,i:h,realIndex:c,prevX:b,prevY:v}),w=this._iterateOverDataPoints({series:t,realIndex:c,i:h,x:u,y:1,pX:x,pY:f,pathsFrom:y,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:g,yArrj:d});this._handlePaths({type:r,realIndex:c,i:h,paths:w}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),l.push(this.elSeries)}for(var k=l.length;k>0;k--)n.add(l[k-1]);return n}},{key:"_initSerieVariables",value:function(t,e,i){var a=this.w,s=new p(this.ctx);this.xDivision=a.globals.gridWidth/(a.globals.dataPoints-("on"===a.config.xaxis.tickPlacement?1:0)),this.strokeWidth=Array.isArray(a.config.stroke.width)?a.config.stroke.width[i]:a.config.stroke.width,this.yRatio.length>1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,this.zeroY>a.globals.gridHeight&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:"apexcharts-series",seriesName:g.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=s.group({class:"apexcharts-datalabels","data:realIndex":i});var r=t[e].length===a.globals.dataPoints;this.elSeries.attr({"data:longestSeries":r,rel:e+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(t){var e,i,a,s,r=t.series,n=t.i,o=t.realIndex,l=t.prevX,h=t.prevY,c=this.w,d=new p(this.ctx);if(null===r[n][0]){for(var g=0;g0){var u=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:o});a=u.pathFromLine,s=u.pathFromArea}return{prevX:l,prevY:h,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:"_handlePaths",value:function(t){var e=t.type,i=t.realIndex,a=t.i,s=t.paths,r=this.w,o=new p(this.ctx),l=new L(this.ctx);this.prevSeriesY.push(s.yArrj),r.globals.seriesXvalues[i]=s.xArrj,r.globals.seriesYvalues[i]=s.yArrj,this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var h={i:a,realIndex:i,animationDelay:a,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(e)};if("area"===e)for(var c=l.fillPath({seriesNumber:i}),d=0;d1?b.globals.dataPoints-1:b.globals.dataPoints,P=0;P0&&b.globals.collapsedSeries.length-1){e--;break}return e>=0?e:0}(a-1)][P+1]}else u=this.zeroY;else u=this.zeroY;r=T?u-C/v[this.yaxisIndex]+2*(this.isReversed?C/v[this.yaxisIndex]:0):u-e[a][P+1]/v[this.yaxisIndex]+2*(this.isReversed?e[a][P+1]/v[this.yaxisIndex]:0),f.push(s),x.push(r);var I=this.lineHelpers.calculatePoints({series:e,x:s,y:r,realIndex:i,i:a,j:P,prevY:y}),M=this._createPaths({series:e,i:a,realIndex:i,j:P,x:s,y:r,pX:n,pY:o,linePath:w,areaPath:k,linePaths:h,areaPaths:c,seriesIndex:d});c=M.areaPaths,h=M.linePaths,n=M.pX,o=M.pY,k=M.areaPath,w=M.linePath,this.appendPathFrom&&(A+=m.line(s,this.zeroY),S+=m.line(s,this.zeroY)),this.handleNullDataPoints(e,I,a,P,i),this._handleMarkersAndLabels({pointsPos:I,series:e,x:s,y:r,prevY:y,i:a,j:P,realIndex:i})}return{yArrj:x,xArrj:f,pathFromArea:S,areaPaths:c,pathFromLine:A,linePaths:h}}},{key:"_handleMarkersAndLabels",value:function(t){var e=t.pointsPos,i=(t.series,t.x,t.y,t.prevY,t.i),a=t.j,s=t.realIndex,r=this.w,n=new z(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,a,{realIndex:s,pointsPos:e,zRatio:this.zRatio,elParent:this.elPointsMain});else{r.globals.series[i].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var o=this.markers.plotChartMarkers(e,s,a+1);null!==o&&this.elPointsMain.add(o)}var l=n.drawDataLabel(e,s,a+1,null);null!==l&&this.elDataLabelsWrap.add(l)}},{key:"_createPaths",value:function(t){var e=t.series,i=t.i,a=t.realIndex,s=t.j,r=t.x,n=t.y,o=t.pX,l=t.pY,h=t.linePath,c=t.areaPath,d=t.linePaths,g=t.areaPaths,u=t.seriesIndex,f=this.w,x=new p(this.ctx),b=f.config.stroke.curve,m=this.areaBottomY;if(Array.isArray(f.config.stroke.curve)&&(b=Array.isArray(u)?f.config.stroke.curve[u[i]]:f.config.stroke.curve[i]),"smooth"===b){var v=.35*(r-o);f.globals.hasNullValues?(null!==e[i][s]&&(null!==e[i][s+1]?(h=x.move(o,l)+x.curve(o+v,l,r-v,n,r+1,n),c=x.move(o+1,l)+x.curve(o+v,l,r-v,n,r+1,n)+x.line(r,m)+x.line(o,m)+"z"):(h=x.move(o,l),c=x.move(o,l)+"z")),d.push(h),g.push(c)):(h+=x.curve(o+v,l,r-v,n,r,n),c+=x.curve(o+v,l,r-v,n,r,n)),o=r,l=n,s===e[i].length-2&&(c=c+x.curve(o,l,r,n,r,m)+x.move(r,n)+"z",f.globals.hasNullValues||(d.push(h),g.push(c)))}else{if(null===e[i][s+1]){h+=x.move(r,n);var y=f.globals.isXNumeric?(f.globals.seriesX[a][s]-f.globals.minX)/this.xRatio:r-this.xDivision;c=c+x.line(y,m)+x.move(r,n)+"z"}null===e[i][s]&&(h+=x.move(r,n),c+=x.move(r,m)),"stepline"===b?(h=h+x.line(r,null,"H")+x.line(null,n,"V"),c=c+x.line(r,null,"H")+x.line(null,n,"V")):"straight"===b&&(h+=x.line(r,n),c+=x.line(r,n)),s===e[i].length-2&&(c=c+x.line(r,m)+x.move(r,n)+"z",d.push(h),g.push(c))}return{linePaths:d,areaPaths:g,pX:o,pY:l,linePath:h,areaPath:c}}},{key:"handleNullDataPoints",value:function(t,e,i,a,s){var r=this.w;if(null===t[i][a]&&r.config.markers.showNullDataPoints||1===t[i].length){var n=this.markers.plotChartMarkers(e,s,a+1,this.strokeWidth-r.config.markers.strokeWidth/2,!0);null!==n&&this.elPointsMain.add(n)}}}]),t}(),Pt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return a(t,[{key:"calculateTimeScaleTicks",value:function(t,e){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var s=new Y(this.ctx),r=(e-t)/864e5;this.determineInterval(r),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,r<.005?a.globals.disableZoomIn=!0:r>5e4&&(a.globals.disableZoomOut=!0);var o=s.getTimeUnitsfromTimestamp(t,e,this.utc),l=a.globals.gridWidth/r,h=l/24,c=h/60,d=Math.floor(24*r),g=Math.floor(24*r*60),u=Math.floor(r),f=Math.floor(r/30),p=Math.floor(r/365),x={minMinute:o.minMinute,minHour:o.minHour,minDate:o.minDate,minMonth:o.minMonth,minYear:o.minYear},b={firstVal:x,currentMinute:x.minMinute,currentHour:x.minHour,currentMonthDate:x.minDate,currentDate:x.minDate,currentMonth:x.minMonth,currentYear:x.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,numberOfMinutes:g,numberOfHours:d,numberOfDays:u,numberOfMonths:f,numberOfYears:p};switch(this.tickInterval){case"years":this.generateYearScale(b);break;case"months":case"half_year":this.generateMonthScale(b);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(b);break;case"hours":this.generateHourScale(b);break;case"minutes":this.generateMinuteScale(b)}var m=this.timeScaleArray.map((function(t){var e={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return"month"===t.unit?n({},e,{day:1,value:t.value+1}):"day"===t.unit||"hour"===t.unit?n({},e,{value:t.value}):"minute"===t.unit?n({},e,{value:t.value,minute:t.value}):t}));return m.filter((function(t){var e=1,s=Math.ceil(a.globals.gridWidth/120),r=t.value;void 0!==a.config.xaxis.tickAmount&&(s=a.config.xaxis.tickAmount),m.length>s&&(e=Math.floor(m.length/s));var n=!1,o=!1;switch(i.tickInterval){case"years":"year"===t.unit&&(n=!0);break;case"half_year":e=7,"year"===t.unit&&(n=!0);break;case"months":e=1,"year"===t.unit&&(n=!0);break;case"months_fortnight":e=15,"year"!==t.unit&&"month"!==t.unit||(n=!0),30===r&&(o=!0);break;case"months_days":e=10,"month"===t.unit&&(n=!0),30===r&&(o=!0);break;case"week_days":e=8,"month"===t.unit&&(n=!0);break;case"days":e=1,"month"===t.unit&&(n=!0);break;case"hours":"day"===t.unit&&(n=!0);break;case"minutes":r%5!=0&&(o=!0)}if("minutes"===i.tickInterval||"hours"===i.tickInterval){if(!o)return!0}else if((r%e==0||n)&&!o)return!0}))}},{key:"recalcDimensionsBasedOnFormat",value:function(t,e){var i=this.w,a=this.formatDates(t),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new nt(this.ctx).plotCoords()}},{key:"determineInterval",value:function(t){switch(!0){case t>1825:this.tickInterval="years";break;case t>800&&t<=1825:this.tickInterval="half_year";break;case t>180&&t<=800:this.tickInterval="months";break;case t>90&&t<=180:this.tickInterval="months_fortnight";break;case t>60&&t<=90:this.tickInterval="months_days";break;case t>30&&t<=60:this.tickInterval="week_days";break;case t>2&&t<=30:this.tickInterval="days";break;case t>.1&&t<=2:this.tickInterval="hours";break;case t<.1:this.tickInterval="minutes";break;default:this.tickInterval="days"}}},{key:"generateYearScale",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,r=t.numberOfYears,n=e.minYear,o=0,l=new Y(this.ctx);if(e.minDate>1||e.minMonth>0){var h=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);o=(l.determineDaysOfYear(e.minYear)-h+1)*s,n=e.minYear+1,this.timeScaleArray.push({position:o,value:n,unit:"year",year:n,month:g.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:o,value:n,unit:"year",year:a,month:g.monthMod(i+1)});for(var c=n,d=o,u=0;u1){l=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*r,o=g.monthMod(a+1);var u=s+d,f=g.monthMod(o),p=o;0===o&&(c="year",p=u,f=1,u+=d+=1),this.timeScaleArray.push({position:l,value:p,unit:c,year:u,month:f})}else this.timeScaleArray.push({position:l,value:o,unit:c,year:s,month:g.monthMod(a)});for(var x=o+1,b=l,m=0,v=1;mn.determineDaysOfMonths(e+1,i)?(h=1,o="month",u=e+=1,e):e},d=(24-e.minHour)*s,u=l,f=c(h,i,a);0===e.minHour&&1===e.minDate&&(d=0,u=g.monthMod(e.minMonth),o="month",h=e.minDate,r++),this.timeScaleArray.push({position:d,value:u,unit:o,year:this._getYear(a,f,0),month:g.monthMod(f),day:h});for(var p=d,x=0;xo.determineDaysOfMonths(e+1,s)&&(x=1,e+=1),{month:e,date:x}},c=function(t,e){return t>o.determineDaysOfMonths(e+1,s)?e+=1:e},d=60-e.minMinute,u=d*r,f=e.minHour+1,p=f+1;60===d&&(u=0,p=(f=e.minHour)+1);var x=i,b=c(x,a);this.timeScaleArray.push({position:u,value:f,unit:l,day:x,hour:p,year:s,month:g.monthMod(b)});for(var m=u,v=0;v=24)p=0,l="day",b=h(x+=1,b).month,b=c(x,b);var y=this._getYear(s,b,0);m=0===p&&0===v?d*r:60*r+m;var w=0===p?x:p;this.timeScaleArray.push({position:m,value:w,unit:l,hour:p,day:x,year:y,month:g.monthMod(b)}),p++}}},{key:"generateMinuteScale",value:function(t){var e=t.firstVal,i=t.currentMinute,a=t.currentHour,s=t.currentDate,r=t.currentMonth,n=t.currentYear,o=t.minutesWidthOnXAxis,l=t.numberOfMinutes,h=o-(i-e.minMinute),c=e.minMinute+1,d=c+1,u=s,f=r,p=n,x=a;this.timeScaleArray.push({position:h,value:c,unit:"minute",day:u,hour:x,minute:d,year:p,month:g.monthMod(f)});for(var b=h,m=0;m=60&&(d=0,24===(x+=1)&&(x=0)),b=o+b,this.timeScaleArray.push({position:b,value:d,unit:"minute",hour:x,minute:d,day:u,year:this._getYear(n,f,0),month:g.monthMod(f)}),d++}},{key:"createRawDateString",value:function(t,e){var i=t.year;return i+="-"+("0"+t.month.toString()).slice(-2),"day"===t.unit?i+="day"===t.unit?"-"+("0"+e).slice(-2):"-01":i+="-"+("0"+(t.day?t.day:"1")).slice(-2),"hour"===t.unit?i+="hour"===t.unit?"T"+("0"+e).slice(-2):"T00":i+="T"+("0"+(t.hour?t.hour:"0")).slice(-2),i+="minute"===t.unit?":"+("0"+e).slice(-2)+":00":":00:00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),s=new Y(e.ctx),r=e.createRawDateString(t,a),n=s.getDate(r);if(void 0===i.config.xaxis.labels.format){var o="dd MMM",l=i.config.xaxis.labels.datetimeFormatter;"year"===t.unit&&(o=l.year),"month"===t.unit&&(o=l.month),"day"===t.unit&&(o=l.day),"hour"===t.unit&&(o=l.hour),"minute"===t.unit&&(o=l.minute),a=s.formatDate(n,o)}else a=s.formatDate(n,i.config.xaxis.labels.format);return{dateString:r,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:"removeOverlappingTS",value:function(t){var e,i=this,a=new p(this.ctx),s=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(s=!0,e=a.getTextRects(t[0].value).width);var r=0,n=t.map((function(n,o){if(o>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=s?e:a.getTextRects(t[r].value).width,h=t[r].position;return n.position>h+l+10?(r=o,n):null}return n}));return n=n.filter((function(t){return null!==t}))}},{key:"_getYear",value:function(t,e,i){return t+Math.floor(e/12)+i}}]),t}(),Tt=function(){function t(i,a){e(this,t),this.ctx=a,this.w=a.w,this.el=i}return a(t,[{key:"setupElements",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=["line","area","bar","rangeBar","candlestick","scatter","bubble","radar","heatmap"].indexOf(i)>-1,t.xyCharts=["line","area","bar","rangeBar","candlestick","scatter","bubble"].indexOf(i)>-1,t.isBarHorizontal=("bar"===e.chart.type||"rangeBar"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=".apexcharts"+t.cuid,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement("div"),p.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:"apexcharts-canvas "+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(e.chart.offsetX,", ").concat(e.chart.offsetY,")")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),t.dom.elAnnotations=t.dom.Paper.group().attr({class:"apexcharts-annotations"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement("div"),t.dom.elLegendWrap.classList.add("apexcharts-legend"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:"plotChartType",value:function(t,e){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},n={series:[],i:[]},o={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]};s.series.map((function(e,d){void 0!==t[d].type?("column"===t[d].type||"bar"===t[d].type?(s.series.length>1&&a.plotOptions.bar.horizontal&&console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"),h.series.push(e),h.i.push(d),i.globals.columnSeries=h.series):"area"===t[d].type?(n.series.push(e),n.i.push(d)):"line"===t[d].type?(r.series.push(e),r.i.push(d)):"scatter"===t[d].type?(o.series.push(e),o.i.push(d)):"bubble"===t[d].type?(l.series.push(e),l.i.push(d)):"candlestick"===t[d].type?(c.series.push(e),c.i.push(d)):console.warn("You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble"),s.comboCharts=!0):(r.series.push(e),r.i.push(d))}));var d=new Lt(this.ctx,e),g=new vt(this.ctx,e);this.ctx.pie=new kt(this.ctx);var u=new St(this.ctx),f=new F(this.ctx,e),p=new At(this.ctx),x=[];if(s.comboCharts){if(n.series.length>0&&x.push(d.draw(n.series,"area",n.i)),h.series.length>0)if(i.config.chart.stacked){var b=new mt(this.ctx,e);x.push(b.draw(h.series,h.i))}else{var m=new E(this.ctx,e);x.push(m.draw(h.series,h.i))}if(r.series.length>0&&x.push(d.draw(r.series,"line",r.i)),c.series.length>0&&x.push(g.draw(c.series,c.i)),o.series.length>0){var v=new Lt(this.ctx,e,!0);x.push(v.draw(o.series,"scatter",o.i))}if(l.series.length>0){var y=new Lt(this.ctx,e,!0);x.push(y.draw(l.series,"bubble",l.i))}}else switch(a.chart.type){case"line":x=d.draw(s.series,"line");break;case"area":x=d.draw(s.series,"area");break;case"bar":if(a.chart.stacked)x=new mt(this.ctx,e).draw(s.series);else x=new E(this.ctx,e).draw(s.series);break;case"candlestick":x=new vt(this.ctx,e).draw(s.series);break;case"rangeBar":x=f.draw(s.series);break;case"heatmap":x=new yt(this.ctx,e).draw(s.series);break;case"pie":case"donut":case"polarArea":x=this.ctx.pie.draw(s.series);break;case"radialBar":x=u.draw(s.series);break;case"radar":x=p.draw(s.series);break;default:x=d.draw(s.series)}return x}},{key:"setSVGDimensions",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=g.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();if("%"===a?g.isNumber(i[0])&&(0===i[0].width&&(i=g.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):"px"!==a&&""!==a||(t.svgWidth=parseInt(e.chart.width,10)),"auto"!==t.svgHeight&&""!==t.svgHeight)if("%"===e.chart.height.toString().split(/[0-9]+/g).pop()){var s=g.getDimensions(this.el.parentNode);t.svgHeight=s[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),p.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight});var r=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+r+"px",t.dom.elWrap.style.width=t.svgWidth+"px",t.dom.elWrap.style.height=t.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var t=this.w.globals,e=t.translateY,i={transform:"translate("+t.translateX+", "+e+")"};p.setAttrs(t.dom.elGraphical.node,i),t.x2SpaceAvailable=t.svgWidth-t.dom.elGraphical.x()-t.gridWidth}},{key:"resizeNonAxisCharts",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,"top"!==t.config.legend.position&&"bottom"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new lt(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(".apexcharts-radialbar"),r=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled){var n=g.getBoundingClientRect(s);r=n.bottom;var o=n.bottom-n.top;r=Math.max(2.05*t.globals.radialSize,o)}var l=r+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute("height",l),e.dom.elWrap.style.height=l+"px",p.setAttrs(e.dom.Paper.node,{height:l}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=l+"px"}},{key:"coreCalculations",value:function(){new U(this.ctx).init()}},{key:"resetGlobals",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new H,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:"xySettings",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if("back"===e.config.xaxis.crosshairs.position)new Q(this.ctx).drawXCrosshairs();if("back"===e.config.yaxis[0].crosshairs.position)new Q(this.ctx).drawYCrosshairs();if("datetime"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){var i=new Pt(this.ctx),a=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?a=i.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(a=i.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),i.recalcDimensionsBasedOnFormat(a)}t=new m(this.ctx).getCalculatedRatios()}return t}},{key:"updateSourceChart",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var t=this,e=this.w;if(e.config.chart.brush.enabled&&"function"!=typeof e.config.chart.events.selection){var i=e.config.chart.brush.targets||[e.config.chart.brush.target];i.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,"function"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),"function"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),e.config.chart.events.selection=function(t,a){i.forEach((function(t){var i=ApexCharts.getChartByID(t),s=g.clone(e.config.yaxis);e.config.chart.brush.autoScaleYaxis&&1===i.w.globals.series.length&&(s=new j(i).autoScaleY(i,s,a));i.ctx.updateHelpers._updateOptions({xaxis:{min:a.xaxis.min,max:a.xaxis.max},yaxis:n({},i.w.config.yaxis[0],{min:s[0].min,max:s[0].max})},!1,!1,!1,!1)}))}}}}]),t}(),zt=function(){function i(t){e(this,i),this.ctx=t,this.w=t.w}return a(i,[{key:"_updateOptions",value:function(e){var i=this,a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=[this.ctx];r&&(o=this.ctx.getSyncedCharts()),this.ctx.w.globals.isExecCalled&&(o=[this.ctx],this.ctx.w.globals.isExecCalled=!1),o.forEach((function(r){var o=r.w;return o.globals.shouldAnimate=s,a||(o.globals.resized=!0,o.globals.dataChanged=!0,s&&r.series.getPreviousPaths()),e&&"object"===t(e)&&(r.config=new D(e),e=m.extendArrayProps(r.config,e,o),r.w.globals.chartID!==i.ctx.w.globals.chartID&&delete e.series,o.config=g.extend(o.config,e),n&&(o.globals.lastXAxis=[],o.globals.lastYAxis=[],o.globals.initialConfig=g.extend({},o.config),o.globals.initialSeries=JSON.parse(JSON.stringify(o.config.series)))),r.update(e)}))}},{key:"_updateSeries",value:function(t,e){var i,a=this,s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this.w;return r.globals.shouldAnimate=e,r.globals.dataChanged=!0,e&&this.ctx.series.getPreviousPaths(),r.globals.axisCharts?(0===(i=t.map((function(t,e){return a._extendSeries(t,e)}))).length&&(i=[{data:[]}]),r.config.series=i):r.config.series=t.slice(),s&&(r.globals.initialConfig.series=JSON.parse(JSON.stringify(r.config.series)),r.globals.initialSeries=JSON.parse(JSON.stringify(r.config.series))),this.ctx.update()}},{key:"_extendSeries",value:function(t,e){var i=this.w;return n({},i.config.series[e],{name:t.name?t.name:i.config.series[e]&&i.config.series[e].name,type:t.type?t.type:i.config.series[e]&&i.config.series[e].type,data:t.data?t.data:i.config.series[e]&&i.config.series[e].data})}},{key:"toggleDataPointSelection",value:function(t,e){var i=this.w,a=null,s=".apexcharts-series[data\\:realIndex='".concat(t,"']");return i.globals.axisCharts?a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(e,"'], ").concat(s," circle[j='").concat(e,"'], ").concat(s," rect[j='").concat(e,"']")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(t,"']")).members[0],"pie"!==i.config.chart.type&&"polarArea"!==i.config.chart.type&&"donut"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new p(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(t){var e=this.w;if(["min","max"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new R(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:"forceYAxisUpdate",value:function(t){var e=this.w;return e.config.chart.stacked&&"100%"===e.config.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:"revertDefaultAxisMinMax",value:function(){var t=this,e=this.w;e.config.xaxis.min=e.globals.lastXAxis.min,e.config.xaxis.max=e.globals.lastXAxis.max,e.config.yaxis.map((function(i,a){e.globals.zoomed?void 0!==e.globals.lastYAxis[a]&&(i.min=e.globals.lastYAxis[a].min,i.max=e.globals.lastYAxis[a].max):void 0!==t.ctx.opts.yaxis[a]&&(i.min=t.ctx.opts.yaxis[a].min,i.max=t.ctx.opts.yaxis[a].max)}))}}]),i}();w="undefined"!=typeof window?window:void 0,k=function(e,i){var a=(void 0!==this?this:e).SVG=function(t){if(a.supported)return t=new a.Doc(t),a.parser.draw||a.prepare(),t};if(a.ns="http://www.w3.org/2000/svg",a.xmlns="http://www.w3.org/2000/xmlns/",a.xlink="http://www.w3.org/1999/xlink",a.svgjs="http://svgjs.com/svgjs",a.supported=!0,!a.supported)return!1;a.did=1e3,a.eid=function(t){return"Svgjs"+d(t)+a.did++},a.create=function(t){var e=i.createElementNS(this.ns,t);return e.setAttribute("id",this.eid(t)),e},a.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var i=t.length-1;i>=0;i--)if(t[i])for(var s in e)t[i].prototype[s]=e[s];a.Set&&a.Set.inherit&&a.Set.inherit()},a.invent=function(t){var e="function"==typeof t.create?t.create:function(){this.constructor.call(this,a.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&a.extend(e,t.extend),t.construct&&a.extend(t.parent||a.Container,t.construct),e},a.adopt=function(t){return t?t.instance?t.instance:((i="svg"==t.nodeName?t.parentNode instanceof e.SVGElement?new a.Nested:new a.Doc:"linearGradient"==t.nodeName?new a.Gradient("linear"):"radialGradient"==t.nodeName?new a.Gradient("radial"):a[d(t.nodeName)]?new(a[d(t.nodeName)]):new a.Element(t)).type=t.nodeName,i.node=t,t.instance=i,i instanceof a.Doc&&i.namespace().defs(),i.setData(JSON.parse(t.getAttribute("svgjs:data"))||{}),i):null;var i},a.prepare=function(){var t=i.getElementsByTagName("body")[0],e=(t?new a.Doc(t):a.adopt(i.documentElement).nested()).size(2,0);a.parser={body:t||i.documentElement,draw:e.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:e.polyline().node,path:e.path().node,native:a.create("svg")}},a.parser={native:a.create("svg")},i.addEventListener("DOMContentLoaded",(function(){a.parser.draw||a.prepare()}),!1),a.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},a.utils={map:function(t,e){for(var i=t.length,a=[],s=0;s1?1:t,new a.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),a.Color.test=function(t){return t+="",a.regex.isHex.test(t)||a.regex.isRgb.test(t)},a.Color.isRgb=function(t){return t&&"number"==typeof t.r&&"number"==typeof t.g&&"number"==typeof t.b},a.Color.isColor=function(t){return a.Color.isRgb(t)||a.Color.test(t)},a.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},a.extend(a.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),a.PointArray=function(t,e){a.Array.call(this,t,e||[[0,0]])},a.PointArray.prototype=new a.Array,a.PointArray.prototype.constructor=a.PointArray;for(var s={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],["M",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],["L",t[0],t[1]]},H:function(t,e){return e.x=t[0],["H",t[0]]},V:function(t,e){return e.y=t[0],["V",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],["C",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],["Q",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,["Z"]}},r="mlhvqtcsaz".split(""),n=0,o=r.length;nl);return r},bbox:function(){return a.parser.draw||a.prepare(),a.parser.path.setAttribute("d",this.toString()),a.parser.path.getBBox()}}),a.Number=a.invent({create:function(t,e){this.value=0,this.unit=e||"","number"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:"string"==typeof t?(e=t.match(a.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),"%"==e[5]?this.value/=100:"s"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof a.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return("%"==this.unit?~~(1e8*this.value)/1e6:"s"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new a.Number(t),new a.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new a.Number(t),new a.Number(this-t,this.unit||t.unit)},times:function(t){return t=new a.Number(t),new a.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new a.Number(t),new a.Number(this/t,this.unit||t.unit)},to:function(t){var e=new a.Number(this);return"string"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new a.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new a.Number(this.destination).minus(this).times(t).plus(this):this}}}),a.Element=a.invent({create:function(t){this._stroke=a.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute("stroke")||this._stroke)},extend:{x:function(t){return this.attr("x",t)},y:function(t){return this.attr("y",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr("width",t)},height:function(t){return this.attr("height",t)},size:function(t,e){var i=u(this,t,e);return this.width(new a.Number(i.width)).height(new a.Number(i.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr("id",t)},show:function(){return this.style("display","")},hide:function(){return this.style("display","none")},visible:function(){return"none"!=this.style("display")},toString:function(){return this.attr("id")},classes:function(){var t=this.attr("class");return null==t?[]:t.trim().split(a.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr("class",e.join(" "))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr("class",this.classes().filter((function(e){return e!=t})).join(" ")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return a.get(this.attr(t))},parent:function(t){var i=this;if(!i.node.parentNode)return null;if(i=a.adopt(i.node.parentNode),!t)return i;for(;i&&i.node instanceof e.SVGElement;){if("string"==typeof t?i.matches(t):i instanceof t)return i;if(!i.node.parentNode||"#document"==i.node.parentNode.nodeName)return null;i=a.adopt(i.node.parentNode)}},doc:function(){return this instanceof a.Doc?this:this.parent(a.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var e=i.createElement("svg");if(!(t&&this instanceof a.Parent))return e.appendChild(t=i.createElement("svg")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),e.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");e.innerHTML=""+t.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var s=0,r=e.firstChild.childNodes.length;s":function(t){return-Math.cos(t*Math.PI)/2+.5},">":function(t){return Math.sin(t*Math.PI/2)},"<":function(t){return 1-Math.cos(t*Math.PI/2)}},a.morph=function(t){return function(e,i){return new a.MorphObj(e,i).at(t)}},a.Situation=a.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new a.Number(t.duration).valueOf(),this.delay=new a.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),a.FX=a.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(e,i,s){"object"===t(e)&&(i=e.ease,s=e.delay,e=e.duration);var r=new a.Situation({duration:e||1e3,delay:s||0,ease:a.easing[i||"-"]||i});return this.queue(r),this},target:function(t){return t&&t instanceof a.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=e.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){e.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return("function"==typeof t||t instanceof a.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof a.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var i in e.animations){t=this.target()[i](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[i])||(e.animations[i]=[e.animations[i]]);for(var s=t.length;s--;)e.animations[i][s]instanceof a.Number&&(t[s]=new a.Number(t[s])),e.animations[i][s]=t[s].morph(e.animations[i][s])}for(var i in e.attrs)e.attrs[i]=new a.MorphObj(this.target().attr(i),e.attrs[i]);for(var i in e.styles)e.styles[i]=new a.MorphObj(this.target().style(i),e.styles[i]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on("finished.fx",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off("finished.fx",i))})),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,a.morph(i.detail.pos),i.detail.eased,e)};return this.target().off("during.fx",i).on("during.fx",i),this.after((function(){this.off("during.fx",i)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off("allfinished.fx",e)};return this.target().off("allfinished.fx",e).on("allfinished.fx",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||"animations"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||ithis.lastPos&&r<=s&&(this.situation.once[r].call(this.target(),this.pos,s),delete this.situation.once[r]);return this.active&&this.target().fire("during",{pos:this.pos,eased:s,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=s,this):this},eachAt:function(){var t,e=this,i=this.target(),s=this.situation;for(var r in s.animations)t=[].concat(s.animations[r]).map((function(t){return"string"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i[r].apply(i,t);for(var r in s.attrs)t=[r].concat(s.attrs[r]).map((function(t){return"string"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.attr.apply(i,t);for(var r in s.styles)t=[r].concat(s.styles[r]).map((function(t){return"string"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.style.apply(i,t);if(s.transforms.length){t=s.initialTransformation,r=0;for(var n=s.transforms.length;r=0;--s)this[v[s]]=null!=e[v[s]]?e[v[s]]:i[v[s]]},extend:{extract:function(){var t=f(this,0,1),e=(f(this,1,0),180/Math.PI*Math.atan2(t.y,t.x)-90);return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new a.Matrix(this)}},clone:function(){return new a.Matrix(this)},morph:function(t){return this.destination=new a.Matrix(t),this},multiply:function(t){return new a.Matrix(this.native().multiply(function(t){return t instanceof a.Matrix||(t=new a.Matrix(t)),t}(t).native()))},inverse:function(){return new a.Matrix(this.native().inverse())},translate:function(t,e){return new a.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=a.parser.native.createSVGMatrix(),e=v.length-1;e>=0;e--)t[v[e]]=this[v[e]];return t},toString:function(){return"matrix("+m(this.a)+","+m(this.b)+","+m(this.c)+","+m(this.d)+","+m(this.e)+","+m(this.f)+")"}},parent:a.Element,construct:{ctm:function(){return new a.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof a.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new a.Matrix(e)}return new a.Matrix(this.node.getScreenCTM())}}}),a.Point=a.invent({create:function(e,i){var a;a=Array.isArray(e)?{x:e[0],y:e[1]}:"object"===t(e)?{x:e.x,y:e.y}:null!=e?{x:e,y:null!=i?i:e}:{x:0,y:0},this.x=a.x,this.y=a.y},extend:{clone:function(){return new a.Point(this)},morph:function(t,e){return this.destination=new a.Point(t,e),this}}}),a.extend(a.Element,{point:function(t,e){return new a.Point(t,e).transform(this.screenCTM().inverse())}}),a.extend(a.Element,{attr:function(e,i,s){if(null==e){for(e={},s=(i=this.node.attributes).length-1;s>=0;s--)e[i[s].nodeName]=a.regex.isNumber.test(i[s].nodeValue)?parseFloat(i[s].nodeValue):i[s].nodeValue;return e}if("object"===t(e))for(var r in e)this.attr(r,e[r]);else if(null===i)this.node.removeAttribute(e);else{if(null==i)return null==(i=this.node.getAttribute(e))?a.defaults.attrs[e]:a.regex.isNumber.test(i)?parseFloat(i):i;"stroke-width"==e?this.attr("stroke",parseFloat(i)>0?this._stroke:null):"stroke"==e&&(this._stroke=i),"fill"!=e&&"stroke"!=e||(a.regex.isImage.test(i)&&(i=this.doc().defs().image(i,0,0)),i instanceof a.Image&&(i=this.doc().defs().pattern(0,0,(function(){this.add(i)})))),"number"==typeof i?i=new a.Number(i):a.Color.isColor(i)?i=new a.Color(i):Array.isArray(i)&&(i=new a.Array(i)),"leading"==e?this.leading&&this.leading(i):"string"==typeof s?this.node.setAttributeNS(s,e,i.toString()):this.node.setAttribute(e,i.toString()),!this.rebuild||"font-size"!=e&&"x"!=e||this.rebuild(e,i)}return this}}),a.extend(a.Element,{transform:function(e,i){var s;return"object"!==t(e)?(s=new a.Matrix(this).extract(),"string"==typeof e?s[e]:s):(s=new a.Matrix(this),i=!!i||!!e.relative,null!=e.a&&(s=i?s.multiply(new a.Matrix(e)):new a.Matrix(e)),this.attr("transform",s))}}),a.extend(a.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(a.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split("(");return[e[0],e[1].split(a.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return"matrix"==e[0]?t.multiply(p(e[1])):t[e[0]].apply(t,e[1])}),new a.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),a.Transformation=a.invent({create:function(e,i){if(arguments.length>1&&"boolean"!=typeof i)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(e))for(var a=0,s=this.arguments.length;a=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return a.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var i=this.children(),s=0,r=i.length;s=0;i--)t.childNodes[i]instanceof e.SVGElement&&x(t.childNodes[i]);return a.adopt(t).id(a.eid(t.nodeName))}function b(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function m(t){return Math.abs(t)>1e-37?t:0}["fill","stroke"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if("string"==typeof e||a.Color.isRgb(e)||e&&"function"==typeof e.fill)this.attr(t,e);else for(var i=l[t].length-1;i>=0;i--)null!=e[l[t][i]]&&this.attr(l.prefix(t,l[t][i]),e[l[t][i]]);return this},a.extend(a.Element,a.FX,e)})),a.extend(a.Element,a.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr("transform",new a.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr("opacity",t)},dx:function(t){return this.x(new a.Number(t).plus(this instanceof a.FX?0:this.x()),!0)},dy:function(t){return this.y(new a.Number(t).plus(this instanceof a.FX?0:this.y()),!0)}}),a.extend(a.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),a.Set=a.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new a.Set(t)}}}),a.FX.Set=a.invent({create:function(t){this.set=t}}),a.Set.inherit=function(){var t=[];for(var e in a.Shape.prototype)"function"==typeof a.Shape.prototype[e]&&"function"!=typeof a.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){a.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),a.get=function(t){var e=i.getElementById(function(t){var e=(t||"").toString().match(a.regex.reference);if(e)return e[1]}(t)||t);return a.adopt(e)},a.select=function(t,e){return new a.Set(a.utils.map((e||i).querySelectorAll(t),(function(t){return a.adopt(t)})))},a.extend(a.Parent,{select:function(t){return a.select(t,this.node)}});var v="abcdef".split("");if("function"!=typeof e.CustomEvent){var y=function(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var a=i.createEvent("CustomEvent");return a.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),a};y.prototype=e.Event.prototype,a.CustomEvent=y}else a.CustomEvent=e.CustomEvent;return a},"function"==typeof define&&define.amd?define((function(){return k(w,w.document)})):"object"===("undefined"==typeof exports?"undefined":t(exports))&&"undefined"!=typeof module?module.exports=w.document?k(w,w.document):function(t){return k(t,t.document)}:w.SVG=k(w,w.document), -/*! svg.filter.js - v2.0.2 - 2016-02-24 - * https://github.com/wout/svg.filter.js - * Copyright (c) 2016 Wout Fierens; Licensed MIT */ -function(){SVG.Filter=SVG.invent({create:"filter",inherit:SVG.Parent,extend:{source:"SourceGraphic",sourceAlpha:"SourceAlpha",background:"BackgroundImage",backgroundAlpha:"BackgroundAlpha",fill:"FillPaint",stroke:"StrokePaint",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr("in")&&this.autoSetIn&&t.attr("in",this.source),t.attr("result")||t.attr("result",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,s){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,s))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,s){return this.put(new SVG.TurbulenceEffect(t,e,i,a,s))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return"function"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr("filter",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",t)},result:function(t){return null==t?this.attr("result"):this.attr("result",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",t)},result:function(t){return null==t?this.attr("result"):this.attr("result",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,s){return this.parent()&&this.parent().turbulence(t,e,i,a,s).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr("in",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||"normal"})},colorMatrix:function(t,e){"matrix"==t&&(e=s(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=s(t),this.attr({order:Math.sqrt(t.split(" ").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr("flood-color",t),null!=e&&this.attr("flood-opacity",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr("href",t,SVG.xlink)},displacementMap:function(t,e,i,a,s){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:s})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr("stdDeviation",r(Array.prototype.slice.call(arguments))):this.attr("stdDeviation","0 0")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,s){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:s})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i1&&(a=Math.sqrt(a),T*=a,z*=a);s=(new SVG.Matrix).rotate(I).scale(1/T,1/z).rotate(-I),F=F.transform(s),R=R.transform(s),r=[R.x-F.x,R.y-F.y],o=r[0]*r[0]+r[1]*r[1],n=Math.sqrt(o),r[0]/=n,r[1]/=n,l=o<4?Math.sqrt(1-o/4):0,M===X&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-r[1],(R.y+F.y)/2+l*r[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),g=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(g*=-1);u=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(u*=-1);X&&g>u&&(u+=2*Math.PI);!X&&gr.maxX-e.width&&(n=(a=r.maxX-e.width)-this.startPoints.box.x),null!=r.minY&&sr.maxY-e.height&&(o=(s=r.maxY-e.height)-this.startPoints.box.y),null!=r.snapToGrid&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,n-=n%r.snapToGrid,o-=o%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:n,y:o},!0):this.el.move(a,s));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire("dragend",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,i){"function"!=typeof e&&"object"!=typeof e||(i=e,e=!0);var a=this.remember("_draggable")||new t(this);return(e=void 0===e||e)?a.init(i||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:["width",0],rb:["width","height"],lb:[0,"height"],t:["width",0],r:["width","height"],b:["width","height"],l:[0,"height"]},this.pointCoord=function(t,e,i){var a="string"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,"t"===t||"b"===t),y:this.pointCoord(i[1],e,"r"===t||"l"===t)}}}t.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);var r=["points","pointsExclude"];for(var s in r){var n=this.options[r[s]];"string"==typeof n?n=n.length>0?n.split(/\s*,\s*/i):[]:"boolean"==typeof n&&"points"===r[s]&&(n=n?a:[]),this.options[r[s]]=n}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==["line","polyline","polygon"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set?this:(this.pointSelection.set=this.parent.set(),this.drawPoints(),this)},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},t.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case"rt":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case"rb":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case"lb":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case"t":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case"r":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case"b":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case"l":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case"rot":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,s=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),r=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),n=this.parameters.rotation+180*(r-s)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(n-n%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,"touchmove.resize",(function(t){e.update(t||window.event)})),SVG.on(window,"touchend.resize",(function(){e.done()})),SVG.on(window,"mousemove.resize",(function(t){e.update(t||window.event)})),SVG.on(window,"mouseup.resize",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire("resizing",{dx:a,dy:s,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},t.prototype.snapToGrid=function(t,e,i,a){var s;return void 0!==a?s=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,s=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(s[0]-=this.options.snapToGrid),e<0&&(s[1]-=this.options.snapToGrid),t-=Math.abs(s[0])n.maxX&&(t=n.maxX-s),void 0!==n.minY&&r+en.maxY&&(e=n.maxY-r),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],r=this.parameters.box.height-t[1],n=s/r;return na&&(i[0]=this.parameters.box.width-r*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}();!function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===i&&a.firstChild?a.insertBefore(s,a.firstChild):a.appendChild(s),s.styleSheet?s.styleSheet.cssText=t:s.appendChild(document.createTextNode(t))}}('.apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0, 0, 0, .5);\n box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n}\n\n.apexcharts-canvas.apexcharts-theme-dark {\n background: #424242;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.apexcharts-text tspan {\n font-family: inherit;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n color: #fff;\n background: rgba(30, 30, 30, 0.8);\n}\n\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active,\n.apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n\n.apexcharts-tooltip-candlestick>div {\n margin: 4px 0;\n}\n\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after,\n.apexcharts-xaxistooltip:before {\n left: 50%;\n border: solid transparent;\n content: " ";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-left: -6px;\n}\n\n.apexcharts-xaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after,\n.apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after,\n.apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1\n}\n\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after,\n.apexcharts-yaxistooltip:before {\n top: 50%;\n border: solid transparent;\n content: " ";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-yaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-top: -6px;\n}\n\n.apexcharts-yaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after,\n.apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after,\n.apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n opacity: 1;\n}\n\n.apexcharts-yaxistooltip-hidden {\n display: none;\n}\n\n.apexcharts-xcrosshairs,\n.apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,\n.apexcharts-ycrosshairs.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_boundingRect, .svg_select_points_rot {\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n}\n.apexcharts-selection-rect + g .svg_select_boundingRect,\n.apexcharts-selection-rect + g .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n\n.apexcharts-selection-rect + g .svg_select_points_l,\n.apexcharts-selection-rect + g .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n}\n\n.svg_select_points {\n fill: #efefef;\n stroke: #333;\n rx: 2;\n}\n\n.apexcharts-canvas.apexcharts-zoomable .hovering-zoom {\n cursor: crosshair\n}\n\n.apexcharts-canvas.apexcharts-zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon,\n.apexcharts-reset-icon,\n.apexcharts-pan-icon,\n.apexcharts-selection-icon,\n.apexcharts-menu-icon,\n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg,\n.apexcharts-zoomin-icon svg,\n.apexcharts-zoomout-icon svg,\n.apexcharts-reset-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.apexcharts-theme-dark .apexcharts-zoom-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomin-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomout-icon svg,\n.apexcharts-theme-dark .apexcharts-reset-icon svg,\n.apexcharts-theme-dark .apexcharts-pan-icon svg,\n.apexcharts-theme-dark .apexcharts-selection-icon svg,\n.apexcharts-theme-dark .apexcharts-menu-icon svg,\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {\n fill: #008FFB;\n}\n\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,\n.apexcharts-theme-light .apexcharts-reset-icon:hover svg,\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon,\n.apexcharts-menu-icon {\n position: relative;\n}\n\n.apexcharts-reset-icon {\n margin-left: 5px;\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-reset-icon,\n.apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoomout-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n\n.apexcharts-pan-icon.apexcharts-selected svg {\n stroke: #008FFB;\n}\n\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n background: #eee;\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n }\n}\n\n.apexcharts-datalabel.apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabels,\n.apexcharts-datalabel,\n.apexcharts-datalabel-label,\n.apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-gridline,\n.apexcharts-annotation-rect,\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line,\n.apexcharts-zoom-rect,\n.apexcharts-toolbar svg,\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-radar-series path,\n.apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n\n/* Resize generated styles */\n\n@keyframes resizeanim {\n from {\n opacity: 0;\n }\n to {\n opacity: 0;\n }\n}\n\n.resize-triggers {\n animation: 1ms resizeanim;\n visibility: hidden;\n opacity: 0;\n}\n\n.resize-triggers,\n.resize-triggers>div,\n.contract-trigger:before {\n content: " ";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.resize-triggers>div {\n background: #eee;\n overflow: auto;\n}\n\n.contract-trigger:before {\n width: 200%;\n height: 200%;\n}'),function(){function t(t){var e=t.__resizeTriggers__,i=e.firstElementChild,a=e.lastElementChild,s=i?i.firstElementChild:null;a&&(a.scrollLeft=a.scrollWidth,a.scrollTop=a.scrollHeight),s&&(s.style.width=i.offsetWidth+1+"px",s.style.height=i.offsetHeight+1+"px"),i&&(i.scrollLeft=i.scrollWidth,i.scrollTop=i.scrollHeight)}function e(e){var i=this;t(this),this.__resizeRAF__&&r(this.__resizeRAF__),this.__resizeRAF__=s((function(){(function(t){return t.offsetWidth!=t.__resizeLast__.width||t.offsetHeight!=t.__resizeLast__.height})(i)&&(i.__resizeLast__.width=i.offsetWidth,i.__resizeLast__.height=i.offsetHeight,i.__resizeListeners__.forEach((function(t){t.call(e)})))}))}var i,a,s=(i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){return window.setTimeout(t,20)},function(t){return i(t)}),r=(a=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.clearTimeout,function(t){return a(t)}),n=!1,o="animationstart",l="Webkit Moz O ms".split(" "),h="webkitAnimationStart animationstart oAnimationStart MSAnimationStart".split(" "),c=document.createElement("fakeelement");if(void 0!==c.style.animationName&&(n=!0),!1===n)for(var d=0;d
',i.appendChild(i.__resizeTriggers__),t(i),i.addEventListener("scroll",e,!0),o&&i.__resizeTriggers__.addEventListener(o,(function(e){"resizeanim"==e.animationName&&t(i)}))),i.__resizeListeners__.push(a)},window.removeResizeListener=function(t,i){t&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(i),1),t.__resizeListeners__.length||(t.removeEventListener("scroll",e),t.__resizeTriggers__.parentNode&&(t.__resizeTriggers__=!t.removeChild(t.__resizeTriggers__))))}}(),window.Apex={};var It=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","touchstart","touchmove","mouseup","touchend"],this.ctx.animations=new f(this.ctx),this.ctx.axes=new J(this.ctx),this.ctx.core=new Tt(this.ctx.el,this.ctx),this.ctx.config=new D({}),this.ctx.data=new O(this.ctx),this.ctx.grid=new _(this.ctx),this.ctx.graphics=new p(this.ctx),this.ctx.coreUtils=new m(this.ctx),this.ctx.crosshairs=new Q(this.ctx),this.ctx.events=new Z(this.ctx),this.ctx.exports=new V(this.ctx),this.ctx.localization=new $(this.ctx),this.ctx.options=new S,this.ctx.responsive=new K(this.ctx),this.ctx.series=new M(this.ctx),this.ctx.theme=new tt(this.ctx),this.ctx.formatters=new W(this.ctx),this.ctx.titleSubtitle=new et(this.ctx),this.ctx.legend=new lt(this.ctx),this.ctx.toolbar=new ht(this.ctx),this.ctx.dimensions=new nt(this.ctx),this.ctx.updateHelpers=new zt(this.ctx),this.ctx.zoomPanSelection=new ct(this.ctx),this.ctx.w.globals.tooltip=new bt(this.ctx)}}]),t}(),Mt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"clear",value:function(){this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements()}},{key:"killSVG",value:function(t){t.each((function(t,e){this.removeClass("*"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:"clearDomElements",value:function(){var t=this;this.ctx.eventList.forEach((function(e){document.removeEventListener(e,t.ctx.events.documentEvent)}));var e=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(e.Paper),e.Paper.remove(),e.elWrap=null,e.elGraphical=null,e.elAnnotations=null,e.elLegendWrap=null,e.baseEl=null,e.elGridRect=null,e.elGridRectMask=null,e.elGridRectMarkerMask=null,e.elDefs=null}}]),t}();return function(){function t(i,a){e(this,t),this.opts=a,this.ctx=this,this.w=new N(a).init(),this.el=i,this.w.globals.cuid=g.randomId(),this.w.globals.chartID=this.w.config.chart.id?this.w.config.chart.id:this.w.globals.cuid,new It(this).initModules(),this.create=g.bind(this.create,this),this.windowResizeHandler=this._windowResize.bind(this)}return a(t,[{key:"render",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;"function"==typeof a&&a(t,t.w),t.events.fireEvent("beforeMount",[t,t.w]),window.addEventListener("resize",t.windowResizeHandler),window.addResizeListener(t.el.parentNode,t._parentResizeCallback.bind(t));var s=t.create(t.w.config.series,{});if(!s)return e(t);t.mount(s).then((function(){"function"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent("mounted",[t,t.w]),e(s)})).catch((function(t){i(t)}))}else i(new Error("Element not found"))}))}},{key:"create",value:function(t,e){var i=this.w;new It(this).initModules();var a=this.w.globals;(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric)&&new R(i.config).convertCatToNumericXaxis(i.config,this.ctx);if(null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),0===a.svgWidth)return a.animationEnded=!0,null;var s=m.checkComboSeries(t);a.comboCharts=s.comboCharts,a.comboBarCount=s.comboBarCount,(0===t.length||1===t.length&&t[0].data&&0===t[0].data.length)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new P(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),"category"!==i.config.xaxis.type&&this.formatters.setLabelFormatters()),this.formatters.heatmapLabelFormatters(),this.dimensions.plotCoords();var r=this.core.xySettings();this.grid.createGridMask();var n=this.core.plotChartType(t,r),o=new z(this);o.bringForward(),i.config.dataLabels.background.enabled&&o.dataLabelsBackground(),this.core.shiftGraphPosition();var l={plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}};return{elGraph:n,xyRatios:r,elInner:i.globals.dom.elGraphical,dimensions:l}}},{key:"mount",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(s,r){if(null===i.el)return r(new Error("Not enough data to display or target element not found"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.axes.drawAxis(a.config.chart.type,e.xyRatios),i.grid=new _(i);var n=i.grid.drawGrid();i.annotations=new C(i),i.annotations.drawShapeAnnos(),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),"back"===a.config.grid.position&&n&&a.globals.dom.elGraphical.add(n.el);var o=new G(t.ctx),l=new q(t.ctx);if(null!==n&&(o.xAxisLabelCorrections(n.xAxisTickWidth),l.setYAxisTextAlignments()),"back"===a.config.annotations.position&&(a.globals.dom.Paper.add(a.globals.dom.elAnnotations),i.annotations.drawAxesAnnotations()),e.elGraph instanceof Array)for(var h=0;h0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)}))}},{key:"destroy",value:function(){window.removeEventListener("resize",this.windowResizeHandler),window.removeResizeListener(this.el.parentNode,this._parentResizeCallback.bind(this));var t=this.w.config.chart.id;t&&Apex._chartInstances.forEach((function(e,i){e.id===t&&Apex._chartInstances.splice(i,1)})),new Mt(this.ctx).clear()}},{key:"updateOptions",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],n=this.w;return t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),n.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,s,r)}},{key:"updateSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:"appendSeries",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:"appendData",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:"addEventListener",value:function(t,e){this.events.addEventListener(t,e)}},{key:"removeEventListener",value:function(t,e){this.events.removeEventListener(t,e)}},{key:"addXaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:"addYaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:"addPointAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:"clearAnnotations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:"removeAnnotation",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:"getHighestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).highestY}},{key:"getLowestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:"zoomX",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:"setLocale",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:"dataURI",value:function(){return new V(this.ctx).dataURI()}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){!this.w.globals.noData&&this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}}],[{key:"getChartByID",value:function(t){var e=Apex._chartInstances.filter((function(e){return e.id===t}))[0];return e&&e.chart}},{key:"initOnLoad",value:function(){for(var e=document.querySelectorAll("[data-apexcharts]"),i=0;i2?s-2:0),n=2;n.dtp-content { - background: #fff; - max-width: 300px; - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .16), 0 2px 10px 0 rgba(0, 0, 0, .12); - max-height: 520px; - position: relative; - left: 50% -} -.dtp>.dtp-content>.dtp-date-view>header.dtp-header { - background: #1062dc; - color: #fff; - text-align: center; - padding: .3em -} -.dtp div.dtp-date, .dtp div.dtp-time { - background: #0d6efd; - text-align: center; - color: #fff; - padding: 10px -} -.dtp div.dtp-date>div { - padding: 0; - margin: 0 -} -.dtp div.dtp-actual-month { - font-size: 1.5em -} -.dtp div.dtp-actual-maxtime, .dtp div.dtp-actual-num { - font-size: 3em; - line-height: .9 -} -.dtp div.dtp-actual-year { - font-size: 1.5em; - color: #DCEDC8 -} -.dtp div.dtp-picker { - padding: 1em; - text-align: center -} -.dtp div.dtp-actual-time, .dtp div.dtp-picker-month { - font-weight: 500; - text-align: center -} -.dtp div.dtp-picker-month { - padding-bottom: 20px!important; - text-transform: uppercase!important -} -.dtp .dtp-close { - position: absolute; - top: .5em; - right: 1em -} -.dtp .dtp-close>a { - color: #fff -} -.dtp .dtp-close>a>i { - font-size: 1em -} -.dtp table.dtp-picker-days { - margin: 0; - min-height: 251px -} -.dtp table.dtp-picker-days, .dtp table.dtp-picker-days tr, .dtp table.dtp-picker-days tr>td { - border: none -} -.dtp table.dtp-picker-days tr>td { - font-weight: 700; - font-size: .8em; - text-align: center; - padding: .5em .3em -} -.dtp table.dtp-picker-days tr>td>span.dtp-select-day { - color: #BDBDBD!important -} -.dtp .dtp-picker-time>a, .dtp table.dtp-picker-days tr>td>a { - color: #212121; - text-decoration: none; - padding: .4em .5em .5em .6em; - border-radius: 50%!important -} -.dtp table.dtp-picker-days tr>td>a.selected { - background: #0d6efd; - color: #fff -} -.dtp table.dtp-picker-days tr>th { - color: #757575; - text-align: center; - font-weight: 700; - padding: .4em .3em -} -.dtp .p10>a { - color: #fff; - text-decoration: none -} -.dtp .p10 { - width: 10% -} -.dtp .p20 { - width: 20% -} -.dtp .p60 { - width: 60% -} -.dtp .p80 { - width: 80% -} -.dtp a.dtp-meridien-am, .dtp a.dtp-meridien-pm { - position: relative; - top: 10px; - color: #212121; - font-weight: 500; - padding: .7em .5em; - border-radius: 50%!important; - text-decoration: none; - background: #eee; - font-size: 1em -} -.dtp .dtp-actual-meridien a.selected { - background: #689F38; - color: #fff -} -.dtp .dtp-picker-time>.dtp-select-hour, .dtp .dtp-picker-time>.dtp-select-minute { - cursor: pointer -} -.dtp .dtp-buttons { - padding: 0 1em 1em; - text-align: right -} -.dtp .hidden, .dtp.hidden { - display: none -} -.dtp .invisible { - visibility: hidden -} -.dtp .left { - float: left -} -.dtp .right { - float: right -} -.dtp .clearfix { - clear: both -} -.dtp .center { - text-align: center -} -/*# sourceMappingURL=bootstrap-material-datetimepicker.min.css.map */ \ No newline at end of file diff --git a/assets/plugins/bootstrap-material-datetimepicker/css/bootstrap-material-datetimepicker.min.css.map b/assets/plugins/bootstrap-material-datetimepicker/css/bootstrap-material-datetimepicker.min.css.map deleted file mode 100644 index 827819d..0000000 --- a/assets/plugins/bootstrap-material-datetimepicker/css/bootstrap-material-datetimepicker.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap-material-datetimepicker.css"],"names":[],"mappings":"AA4BA,UACA,UACA,UACA,UAAwB,QAAS,aA/BjC,KAAO,SAAU,MAAO,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,WAAY,eAAoB,QAAS,KAAM,UAAW,KAAM,oBAAqB,KAAM,iBAAkB,KAAM,gBAAiB,KAAM,YAAa,KACrN,kBAAsB,WAAY,KAAM,UAAW,MAAO,WAAY,EAAE,IAAI,IAAI,EAAE,gBAAqB,EAAE,IAAI,KAAK,EAAE,gBAAqB,WAAY,MAAO,SAAU,SAAU,KAAM,IACtL,mDAA2D,WAAY,QAAS,MAAO,KAAM,WAAY,OAAQ,QAAS,KAE1H,kBAAmB,kBAAoB,WAAY,QAAS,WAAY,OAAQ,MAAO,KAAM,QAAS,KACtG,sBAA0B,QAAS,EAAG,OAAQ,EAC9C,0BAA4B,UAAW,MAEvC,4BADA,wBAA0B,UAAW,IAAK,YAAa,GAEvD,yBAA2B,UAAW,MAAO,MAAO,QACpD,oBAAsB,QAAS,IAAK,WAAY,OAErB,yBAA3B,0BAAsD,YAAa,IAAK,WAAY,OACpF,0BAA4B,eAAe,eAAgB,eAAgB,oBAE3E,gBAAkB,SAAU,SAAU,IAAK,KAAO,MAAO,IACzD,kBAAsB,MAAO,KAC7B,oBAA0B,UAAW,IAErC,2BAA6B,OAAQ,EAAG,WAAY,MACpD,2BAA4B,8BAA+B,iCAAqC,YAChG,iCAAsC,YAAa,IAAK,UAAW,KAAO,WAAY,OAAQ,QAAS,KAAM,KAC7G,qDAA2D,MAAO,kBAC1B,wBAAxC,mCAAoE,MAAO,QAAS,gBAAiB,KAAM,QAAS,KAAM,KAAM,KAAM,KAAO,cAAe,cAC5J,4CAAiD,WAAY,QAAS,MAAO,KAC7E,iCAAqC,MAAO,QAAS,WAAY,OAAQ,YAAa,IAAK,QAAS,KAAM,KAE1G,YAAgB,MAAO,QAAS,gBAAiB,KACjD,UAAY,MAAO,IACnB,UAAY,MAAO,IACnB,UAAY,MAAO,IACnB,UAAY,MAAO,IAEnB,uBAAwB,uBAAyB,SAAU,SAAU,IAAK,KAAM,MAAO,QAAS,YAAa,IAAK,QAAS,KAAM,KAAO,cAAe,cAAc,gBAAiB,KAAM,WAAY,KAAM,UAAU,IACxN,qCAAuC,WAAY,QAAS,MAAO,KAEnE,uCACA,yCAD2C,OAAQ,QAGnD,kBAAoB,QAAS,EAAE,IAAI,IAAS,WAAY,MAE3C,aAAb,YAA4B,QAAS,KACrC,gBAAkB,WAAY,OAE9B,WAAa,MAAO,KACpB,YAAc,MAAO,MACrB,eAAiB,MAAO,KAExB,aAAe,WAAY"} \ No newline at end of file diff --git a/assets/plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.min.js b/assets/plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.min.js deleted file mode 100644 index 38a8c83..0000000 --- a/assets/plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){function i(i,a){this.currentView=0,this.minDate,this.maxDate,this._attachedEvents=[],this.element=i,this.$element=t(i),this.params={date:!0,time:!0,format:"YYYY-MM-DD",minDate:null,maxDate:null,currentDate:null,lang:"en",weekStart:0,shortTime:!1,clearButton:!1,nowButton:!1,cancelText:"Cancel",okText:"OK",clearText:"Clear",nowText:"Now",switchOnClick:!1},this.params=t.fn.extend(this.params,a),this.name="dtp_"+this.setName(),this.$element.attr("data-dtp",this.name),e.locale(this.params.lang),this.init()}var a="bootstrapMaterialDatePicker",s="plugin_"+a;e.locale("en"),t.fn[a]=function(e,a){return this.each(function(){t.data(this,s)?("function"==typeof t.data(this,s)[e]&&t.data(this,s)[e](a),"destroy"===e&&delete t.data(this,s)):t.data(this,s,new i(this,e))}),this},i.prototype={init:function(){this.initDays(),this.initDates(),this.initTemplate(),this.initButtons(),this._attachEvent(t(window),"resize",this._centerBox.bind(this)),this._attachEvent(this.$dtpElement.find(".dtp-content"),"click",this._onElementClick.bind(this)),this._attachEvent(this.$dtpElement,"click",this._onBackgroundClick.bind(this)),this._attachEvent(this.$dtpElement.find(".dtp-close > a"),"click",this._onCloseClick.bind(this)),this._attachEvent(this.$element,"focus",this._onFocus.bind(this))},initDays:function(){this.days=[];for(var t=this.params.weekStart;this.days.length<7;t++)t>6&&(t=0),this.days.push(t.toString())},initDates:function(){if(this.$element.val().length>0)"undefined"!=typeof this.params.format&&null!==this.params.format?this.currentDate=e(this.$element.val(),this.params.format).locale(this.params.lang):this.currentDate=e(this.$element.val()).locale(this.params.lang);else if("undefined"!=typeof this.$element.attr("value")&&null!==this.$element.attr("value")&&""!==this.$element.attr("value"))"string"==typeof this.$element.attr("value")&&("undefined"!=typeof this.params.format&&null!==this.params.format?this.currentDate=e(this.$element.attr("value"),this.params.format).locale(this.params.lang):this.currentDate=e(this.$element.attr("value")).locale(this.params.lang));else if("undefined"!=typeof this.params.currentDate&&null!==this.params.currentDate){if("string"==typeof this.params.currentDate)"undefined"!=typeof this.params.format&&null!==this.params.format?this.currentDate=e(this.params.currentDate,this.params.format).locale(this.params.lang):this.currentDate=e(this.params.currentDate).locale(this.params.lang);else if("undefined"==typeof this.params.currentDate.isValid||"function"!=typeof this.params.currentDate.isValid){var t=this.params.currentDate.getTime();this.currentDate=e(t,"x").locale(this.params.lang)}else this.currentDate=this.params.currentDate;this.$element.val(this.currentDate.format(this.params.format))}else this.currentDate=e();if("undefined"!=typeof this.params.minDate&&null!==this.params.minDate)if("string"==typeof this.params.minDate)"undefined"!=typeof this.params.format&&null!==this.params.format?this.minDate=e(this.params.minDate,this.params.format).locale(this.params.lang):this.minDate=e(this.params.minDate).locale(this.params.lang);else if("undefined"==typeof this.params.minDate.isValid||"function"!=typeof this.params.minDate.isValid){var t=this.params.minDate.getTime();this.minDate=e(t,"x").locale(this.params.lang)}else this.minDate=this.params.minDate;else null===this.params.minDate&&(this.minDate=null);if("undefined"!=typeof this.params.maxDate&&null!==this.params.maxDate)if("string"==typeof this.params.maxDate)"undefined"!=typeof this.params.format&&null!==this.params.format?this.maxDate=e(this.params.maxDate,this.params.format).locale(this.params.lang):this.maxDate=e(this.params.maxDate).locale(this.params.lang);else if("undefined"==typeof this.params.maxDate.isValid||"function"!=typeof this.params.maxDate.isValid){var t=this.params.maxDate.getTime();this.maxDate=e(t,"x").locale(this.params.lang)}else this.maxDate=this.params.maxDate;else null===this.params.maxDate&&(this.maxDate=null);this.isAfterMinDate(this.currentDate)||(this.currentDate=e(this.minDate)),this.isBeforeMaxDate(this.currentDate)||(this.currentDate=e(this.maxDate))},initTemplate:function(){this.template='',t("body").find("#"+this.name).length<=0&&(t("body").append(this.template),this&&(this.dtpElement=t("body").find("#"+this.name)),this.$dtpElement=t(this.dtpElement))},initButtons:function(){this._attachEvent(this.$dtpElement.find(".dtp-btn-cancel"),"click",this._onCancelClick.bind(this)),this._attachEvent(this.$dtpElement.find(".dtp-btn-ok"),"click",this._onOKClick.bind(this)),this._attachEvent(this.$dtpElement.find("a.dtp-select-month-before"),"click",this._onMonthBeforeClick.bind(this)),this._attachEvent(this.$dtpElement.find("a.dtp-select-month-after"),"click",this._onMonthAfterClick.bind(this)),this._attachEvent(this.$dtpElement.find("a.dtp-select-year-before"),"click",this._onYearBeforeClick.bind(this)),this._attachEvent(this.$dtpElement.find("a.dtp-select-year-after"),"click",this._onYearAfterClick.bind(this)),this.params.clearButton===!0&&(this._attachEvent(this.$dtpElement.find(".dtp-btn-clear"),"click",this._onClearClick.bind(this)),this.$dtpElement.find(".dtp-btn-clear").removeClass("hidden")),this.params.nowButton===!0&&(this._attachEvent(this.$dtpElement.find(".dtp-btn-now"),"click",this._onNowClick.bind(this)),this.$dtpElement.find(".dtp-btn-now").removeClass("hidden")),this.params.nowButton===!0&&this.params.clearButton===!0?this.$dtpElement.find(".dtp-btn-clear, .dtp-btn-now, .dtp-btn-cancel, .dtp-btn-ok").addClass("btn-xs"):this.params.nowButton!==!0&&this.params.clearButton!==!0||this.$dtpElement.find(".dtp-btn-clear, .dtp-btn-now, .dtp-btn-cancel, .dtp-btn-ok").addClass("btn-sm")},initMeridienButtons:function(){this.$dtpElement.find("a.dtp-meridien-am").off("click").on("click",this._onSelectAM.bind(this)),this.$dtpElement.find("a.dtp-meridien-pm").off("click").on("click",this._onSelectPM.bind(this))},initDate:function(t){this.currentView=0,this.$dtpElement.find(".dtp-picker-calendar").removeClass("hidden"),this.$dtpElement.find(".dtp-picker-datetime").addClass("hidden");var e="undefined"!=typeof this.currentDate&&null!==this.currentDate?this.currentDate:null,i=this.generateCalendar(this.currentDate);if("undefined"!=typeof i.week&&"undefined"!=typeof i.days){var a=this.constructHTMLCalendar(e,i);this.$dtpElement.find("a.dtp-select-day").off("click"),this.$dtpElement.find(".dtp-picker-calendar").html(a),this.$dtpElement.find("a.dtp-select-day").on("click",this._onSelectDate.bind(this)),this.toggleButtons(e)}this._centerBox(),this.showDate(e)},initHours:function(){this.currentView=1,this.showTime(this.currentDate),this.initMeridienButtons(),this.currentDate.hour()<12?this.$dtpElement.find("a.dtp-meridien-am").click():this.$dtpElement.find("a.dtp-meridien-pm").click();var t=this.params.shortTime?"h":"H";this.$dtpElement.find(".dtp-picker-datetime").removeClass("hidden"),this.$dtpElement.find(".dtp-picker-calendar").addClass("hidden");for(var e=this.createSVGClock(!0),i=0;12>i;i++){var a=-(162*Math.sin(2*-Math.PI*(i/12))),s=-(162*Math.cos(2*-Math.PI*(i/12))),n=this.currentDate.format(t)==i?"#8BC34A":"transparent",r=this.currentDate.format(t)==i?"#fff":"#000",h=this.createSVGElement("circle",{id:"h-"+i,"class":"dtp-select-hour",style:"cursor:pointer",r:"30",cx:a,cy:s,fill:n,"data-hour":i}),d=this.createSVGElement("text",{id:"th-"+i,"class":"dtp-select-hour-text","text-anchor":"middle",style:"cursor:pointer","font-weight":"bold","font-size":"20",x:a,y:s+7,fill:r,"data-hour":i});d.textContent=0===i&&this.params.shortTime?12:i,this.toggleTime(i,!0)?(h.addEventListener("click",this._onSelectHour.bind(this)),d.addEventListener("click",this._onSelectHour.bind(this))):(h.className+=" disabled",d.className+=" disabled",d.setAttribute("fill","#bdbdbd")),e.appendChild(h),e.appendChild(d)}if(!this.params.shortTime){for(var i=0;12>i;i++){var a=-(110*Math.sin(2*-Math.PI*(i/12))),s=-(110*Math.cos(2*-Math.PI*(i/12))),n=this.currentDate.format(t)==i+12?"#8BC34A":"transparent",r=this.currentDate.format(t)==i+12?"#fff":"#000",h=this.createSVGElement("circle",{id:"h-"+(i+12),"class":"dtp-select-hour",style:"cursor:pointer",r:"30",cx:a,cy:s,fill:n,"data-hour":i+12}),d=this.createSVGElement("text",{id:"th-"+(i+12),"class":"dtp-select-hour-text","text-anchor":"middle",style:"cursor:pointer","font-weight":"bold","font-size":"22",x:a,y:s+7,fill:r,"data-hour":i+12});d.textContent=i+12,this.toggleTime(i+12,!0)?(h.addEventListener("click",this._onSelectHour.bind(this)),d.addEventListener("click",this._onSelectHour.bind(this))):(h.className+=" disabled",d.className+=" disabled",d.setAttribute("fill","#bdbdbd")),e.appendChild(h),e.appendChild(d)}this.$dtpElement.find("a.dtp-meridien-am").addClass("hidden"),this.$dtpElement.find("a.dtp-meridien-pm").addClass("hidden")}this._centerBox()},initMinutes:function(){this.currentView=2,this.showTime(this.currentDate),this.initMeridienButtons(),this.currentDate.hour()<12?this.$dtpElement.find("a.dtp-meridien-am").click():this.$dtpElement.find("a.dtp-meridien-pm").click(),this.$dtpElement.find(".dtp-picker-calendar").addClass("hidden"),this.$dtpElement.find(".dtp-picker-datetime").removeClass("hidden");for(var t=this.createSVGClock(!1),e=0;60>e;e++){var i=e%5===0?162:158,a=e%5===0?30:20,s=-(i*Math.sin(2*-Math.PI*(e/60))),n=-(i*Math.cos(2*-Math.PI*(e/60))),r=this.currentDate.format("m")==e?"#8BC34A":"transparent",h=this.createSVGElement("circle",{id:"m-"+e,"class":"dtp-select-minute",style:"cursor:pointer",r:a,cx:s,cy:n,fill:r,"data-minute":e});this.toggleTime(e,!1)?h.addEventListener("click",this._onSelectMinute.bind(this)):h.className+=" disabled",t.appendChild(h)}for(var e=0;60>e;e++)if(e%5===0){var s=-(162*Math.sin(2*-Math.PI*(e/60))),n=-(162*Math.cos(2*-Math.PI*(e/60))),r=this.currentDate.format("m")==e?"#fff":"#000",d=this.createSVGElement("text",{id:"tm-"+e,"class":"dtp-select-minute-text","text-anchor":"middle",style:"cursor:pointer","font-weight":"bold","font-size":"20",x:s,y:n+7,fill:r,"data-minute":e});d.textContent=e,this.toggleTime(e,!1)?d.addEventListener("click",this._onSelectMinute.bind(this)):(d.className+=" disabled",d.setAttribute("fill","#bdbdbd")),t.appendChild(d)}this._centerBox()},animateHands:function(){var t=this.currentDate.hour(),e=this.currentDate.minute(),i=this.$dtpElement.find(".hour-hand");i[0].setAttribute("transform","rotate("+360*t/12+")");var a=this.$dtpElement.find(".minute-hand");a[0].setAttribute("transform","rotate("+360*e/60+")")},createSVGClock:function(t){var e=this.params.shortTime?-120:-90,i=this.createSVGElement("svg",{"class":"svg-clock",viewBox:"0,0,400,400"}),a=this.createSVGElement("g",{transform:"translate(200,200) "}),s=this.createSVGElement("circle",{r:"192",fill:"#eee",stroke:"#bdbdbd","stroke-width":2}),n=this.createSVGElement("circle",{r:"15",fill:"#757575"});if(a.appendChild(s),t){var r=this.createSVGElement("line",{"class":"minute-hand",x1:0,y1:0,x2:0,y2:-150,stroke:"#bdbdbd","stroke-width":2}),h=this.createSVGElement("line",{"class":"hour-hand",x1:0,y1:0,x2:0,y2:e,stroke:"#8BC34A","stroke-width":8});a.appendChild(r),a.appendChild(h)}else{var r=this.createSVGElement("line",{"class":"minute-hand",x1:0,y1:0,x2:0,y2:-150,stroke:"#8BC34A","stroke-width":2}),h=this.createSVGElement("line",{"class":"hour-hand",x1:0,y1:0,x2:0,y2:e,stroke:"#bdbdbd","stroke-width":8});a.appendChild(h),a.appendChild(r)}return a.appendChild(n),i.appendChild(a),this.$dtpElement.find("#dtp-svg-clock").empty(),this.$dtpElement.find("#dtp-svg-clock")[0].appendChild(i),this.animateHands(),a},createSVGElement:function(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e)i.setAttribute(a,e[a]);return i},isAfterMinDate:function(t,i,a){var s=!0;if("undefined"!=typeof this.minDate&&null!==this.minDate){var n=e(this.minDate),r=e(t);i||a||(n.hour(0),n.minute(0),r.hour(0),r.minute(0)),n.second(0),r.second(0),n.millisecond(0),r.millisecond(0),a?s=parseInt(r.format("X"))>=parseInt(n.format("X")):(r.minute(0),n.minute(0),s=parseInt(r.format("X"))>=parseInt(n.format("X")))}return s},isBeforeMaxDate:function(t,i,a){var s=!0;if("undefined"!=typeof this.maxDate&&null!==this.maxDate){var n=e(this.maxDate),r=e(t);i||a||(n.hour(0),n.minute(0),r.hour(0),r.minute(0)),n.second(0),r.second(0),n.millisecond(0),r.millisecond(0),a?s=parseInt(r.format("X"))<=parseInt(n.format("X")):(r.minute(0),n.minute(0),s=parseInt(r.format("X"))<=parseInt(n.format("X")))}return s},rotateElement:function(e,i){t(e).css({WebkitTransform:"rotate("+i+"deg)","-moz-transform":"rotate("+i+"deg)"})},showDate:function(t){t&&(this.$dtpElement.find(".dtp-actual-day").html(t.locale(this.params.lang).format("dddd")),this.$dtpElement.find(".dtp-actual-month").html(t.locale(this.params.lang).format("MMM").toUpperCase()),this.$dtpElement.find(".dtp-actual-num").html(t.locale(this.params.lang).format("DD")),this.$dtpElement.find(".dtp-actual-year").html(t.locale(this.params.lang).format("YYYY")))},showTime:function(t){if(t){var e=t.minute(),i=(this.params.shortTime?t.format("hh"):t.format("HH"))+":"+(2==e.toString().length?e:"0"+e)+(this.params.shortTime?" "+t.format("A"):"");this.params.date?this.$dtpElement.find(".dtp-actual-time").html(i):(this.params.shortTime?this.$dtpElement.find(".dtp-actual-day").html(t.format("A")):this.$dtpElement.find(".dtp-actual-day").html(" "),this.$dtpElement.find(".dtp-actual-maxtime").html(i))}},selectDate:function(t){t&&(this.currentDate.date(t),this.showDate(this.currentDate),this.$element.trigger("dateSelected",this.currentDate))},generateCalendar:function(t){var i={};if(null!==t){var a=e(t).locale(this.params.lang).startOf("month"),s=e(t).locale(this.params.lang).endOf("month"),n=a.format("d");i.week=this.days,i.days=[];for(var r=a.date();r<=s.date();r++){if(r===a.date()){var h=i.week.indexOf(n.toString());if(h>0)for(var d=0;h>d;d++)i.days.push(0)}i.days.push(e(a).locale(this.params.lang).date(r))}}return i},constructHTMLCalendar:function(t,i){var a="";a+='
'+t.locale(this.params.lang).format("MMMM YYYY")+"
",a+='';for(var s=0;s"+e(parseInt(i.week[s]),"d").locale(this.params.lang).format("dd").substring(0,1)+"";a+="",a+="";for(var s=0;s"),a+='");return a+="
',0!=i.days[s]&&(a+=this.isBeforeMaxDate(e(i.days[s]),!1,!1)===!1||this.isAfterMinDate(e(i.days[s]),!1,!1)===!1?''+e(i.days[s]).locale(this.params.lang).format("DD")+"":e(i.days[s]).locale(this.params.lang).format("DD")===e(this.currentDate).locale(this.params.lang).format("DD")?''+e(i.days[s]).locale(this.params.lang).format("DD")+"":''+e(i.days[s]).locale(this.params.lang).format("DD")+"",a+="
"},setName:function(){for(var t="",e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",i=0;5>i;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t},isPM:function(){return this.$dtpElement.find("a.dtp-meridien-pm").hasClass("selected")},setElementValue:function(){this.$element.trigger("beforeChange",this.currentDate),"undefined"!=typeof t.material&&this.$element.removeClass("empty"),this.$element.val(e(this.currentDate).locale(this.params.lang).format(this.params.format)),this.$element.trigger("change",this.currentDate)},toggleButtons:function(t){if(t&&t.isValid()){var i=e(t).locale(this.params.lang).startOf("month"),a=e(t).locale(this.params.lang).endOf("month");this.isAfterMinDate(i,!1,!1)?this.$dtpElement.find("a.dtp-select-month-before").removeClass("invisible"):this.$dtpElement.find("a.dtp-select-month-before").addClass("invisible"),this.isBeforeMaxDate(a,!1,!1)?this.$dtpElement.find("a.dtp-select-month-after").removeClass("invisible"):this.$dtpElement.find("a.dtp-select-month-after").addClass("invisible");var s=e(t).locale(this.params.lang).startOf("year"),n=e(t).locale(this.params.lang).endOf("year");this.isAfterMinDate(s,!1,!1)?this.$dtpElement.find("a.dtp-select-year-before").removeClass("invisible"):this.$dtpElement.find("a.dtp-select-year-before").addClass("invisible"),this.isBeforeMaxDate(n,!1,!1)?this.$dtpElement.find("a.dtp-select-year-after").removeClass("invisible"):this.$dtpElement.find("a.dtp-select-year-after").addClass("invisible")}},toggleTime:function(t,i){var a=!1;if(i){var s=e(this.currentDate);s.hour(this.convertHours(t)).minute(0).second(0),a=!(this.isAfterMinDate(s,!0,!1)===!1||this.isBeforeMaxDate(s,!0,!1)===!1)}else{var s=e(this.currentDate);s.minute(t).second(0),a=!(this.isAfterMinDate(s,!0,!0)===!1||this.isBeforeMaxDate(s,!0,!0)===!1)}return a},_attachEvent:function(t,e,i){t.on(e,null,null,i),this._attachedEvents.push([t,e,i])},_detachEvents:function(){for(var t=this._attachedEvents.length-1;t>=0;t--)this._attachedEvents[t][0].off(this._attachedEvents[t][1],this._attachedEvents[t][2]),this._attachedEvents.splice(t,1)},_onFocus:function(){this.currentView=0,this.$element.blur(),this.initDates(),this.show(),this.params.date?(this.$dtpElement.find(".dtp-date").removeClass("hidden"),this.initDate()):this.params.time&&(this.$dtpElement.find(".dtp-time").removeClass("hidden"),this.initHours())},_onBackgroundClick:function(t){t.stopPropagation(),this.hide()},_onElementClick:function(t){t.stopPropagation()},_onKeydown:function(t){27===t.which&&this.hide()},_onCloseClick:function(){this.hide()},_onClearClick:function(){this.currentDate=null,this.$element.trigger("beforeChange",this.currentDate),this.hide(),"undefined"!=typeof t.material&&this.$element.addClass("empty"),this.$element.val(""),this.$element.trigger("change",this.currentDate)},_onNowClick:function(){if(this.currentDate=e(),this.params.date===!0&&(this.showDate(this.currentDate),0===this.currentView&&this.initDate()),this.params.time===!0){switch(this.showTime(this.currentDate),this.currentView){case 1:this.initHours();break;case 2:this.initMinutes()}this.animateHands()}},_onOKClick:function(){switch(this.currentView){case 0:this.params.time===!0?this.initHours():(this.setElementValue(),this.hide());break;case 1:this.initMinutes();break;case 2:this.setElementValue(),this.hide()}},_onCancelClick:function(){if(this.params.time)switch(this.currentView){case 0:this.hide();break;case 1:this.params.date?this.initDate():this.hide();break;case 2:this.initHours()}else this.hide()},_onMonthBeforeClick:function(){this.currentDate.subtract(1,"months"),this.initDate(this.currentDate)},_onMonthAfterClick:function(){this.currentDate.add(1,"months"),this.initDate(this.currentDate)},_onYearBeforeClick:function(){this.currentDate.subtract(1,"years"),this.initDate(this.currentDate)},_onYearAfterClick:function(){this.currentDate.add(1,"years"),this.initDate(this.currentDate)},_onSelectDate:function(e){this.$dtpElement.find("a.dtp-select-day").removeClass("selected"),t(e.currentTarget).addClass("selected"),this.selectDate(t(e.currentTarget).parent().data("date")),this.params.switchOnClick===!0&&this.params.time===!0&&setTimeout(this.initHours.bind(this),200)},_onSelectHour:function(e){if(!t(e.target).hasClass("disabled")){for(var i=t(e.target).data("hour"),a=t(e.target).parent(),s=a.find(".dtp-select-hour"),n=0;n=12&&this.currentDate.subtract(12,"hours")&&this.showTime(this.currentDate),this.toggleTime(1===this.currentView)},_onSelectPM:function(e){t(".dtp-actual-meridien").find("a").removeClass("selected"),t(e.currentTarget).addClass("selected"),this.currentDate.hour()<12&&this.currentDate.add(12,"hours")&&this.showTime(this.currentDate),this.toggleTime(1===this.currentView)},convertHours:function(t){var e=t;return this.params.shortTime===!0&&12>t&&this.isPM()&&(e+=12),e},setDate:function(t){this.params.currentDate=t,this.initDates()},setMinDate:function(t){this.params.minDate=t,this.initDates()},setMaxDate:function(t){this.params.maxDate=t,this.initDates()},destroy:function(){this._detachEvents(),this.$dtpElement.remove()},show:function(){this.$dtpElement.removeClass("hidden"),this._attachEvent(t(window),"keydown",this._onKeydown.bind(this)),this._centerBox()},hide:function(){t(window).off("keydown",null,null,this._onKeydown.bind(this)),this.$dtpElement.addClass("hidden")},_centerBox:function(){var t=(this.$dtpElement.height()-this.$dtpElement.find(".dtp-content").height())/2;this.$dtpElement.find(".dtp-content").css("marginLeft",-(this.$dtpElement.find(".dtp-content").width()/2)+"px"),this.$dtpElement.find(".dtp-content").css("top",t+"px")}}}(jQuery,moment); -//# sourceMappingURL=bootstrap-material-datetimepicker.min.js.map \ No newline at end of file diff --git a/assets/plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.min.js.map b/assets/plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.min.js.map deleted file mode 100644 index 6775742..0000000 --- a/assets/plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap-material-datetimepicker.js"],"names":["$","moment","Plugin","element","options","this","currentView","minDate","maxDate","_attachedEvents","$element","params","date","time","format","currentDate","lang","weekStart","shortTime","clearButton","nowButton","cancelText","okText","clearText","nowText","switchOnClick","fn","extend","name","setName","attr","locale","init","pluginName","pluginDataName","p","each","data","prototype","initDays","initDates","initTemplate","initButtons","_attachEvent","window","_centerBox","bind","$dtpElement","find","_onElementClick","_onBackgroundClick","_onCloseClick","_onFocus","days","i","length","push","toString","val","x","getTime","isAfterMinDate","isBeforeMaxDate","template","append","dtpElement","_onCancelClick","_onOKClick","_onMonthBeforeClick","_onMonthAfterClick","_onYearBeforeClick","_onYearAfterClick","_onClearClick","removeClass","_onNowClick","addClass","initMeridienButtons","off","on","_onSelectAM","_onSelectPM","initDate","d","_date","_calendar","generateCalendar","_template","constructHTMLCalendar","html","_onSelectDate","toggleButtons","showDate","initHours","showTime","hour","click","hFormat","svgClockElement","createSVGClock","Math","sin","PI","y","cos","fill","color","svgHourCircle","createSVGElement","id","class","style","r","cx","cy","data-hour","svgHourText","text-anchor","font-weight","font-size","textContent","toggleTime","addEventListener","_onSelectHour","className","setAttribute","appendChild","initMinutes","s","svgMinuteCircle","data-minute","_onSelectMinute","svgMinuteText","animateHands","H","M","minute","hh","mh","isHour","hl","svgElement","viewBox","svgGElement","transform","svgClockFace","stroke","stroke-width","svgClockCenter","svgMinuteHand","x1","y1","x2","y2","svgHourHand","empty","tag","attrs","el","document","createElementNS","k","checkHour","checkMinute","_return","_minDate","second","millisecond","parseInt","checkTime","_maxDate","rotateElement","deg","css","WebkitTransform","-moz-transform","toUpperCase","minutes","content","selectDate","trigger","startOfMonth","startOf","endOfMonth","endOf","iNumDay","week","iWeek","indexOf","calendar","substring","text","possible","charAt","floor","random","isPM","hasClass","setElementValue","isValid","startOfYear","endOfYear","value","isHours","result","convertHours","ev","_detachEvents","splice","blur","show","e","stopPropagation","hide","_onKeydown","which","subtract","add","currentTarget","parent","setTimeout","target","h","th","m","tm","setDate","setMinDate","setMaxDate","destroy","remove","height","width","jQuery"],"mappings":"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","file":"bootstrap-material-datetimepicker.min.js"} \ No newline at end of file diff --git a/assets/plugins/bootstrap-material-datetimepicker/js/moment.min.js b/assets/plugins/bootstrap-material-datetimepicker/js/moment.min.js deleted file mode 100644 index 1f7c4ac..0000000 --- a/assets/plugins/bootstrap-material-datetimepicker/js/moment.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";function e(){return Qe.apply(null,arguments)}function t(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function n(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function s(e){return void 0===e}function i(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function r(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function a(e,t){var n,s=[];for(n=0;n0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}function P(e,t,n,s){var i=s;"string"==typeof s&&(i=function(){return this[s]()}),e&&(ut[e]=i),t&&(ut[t[0]]=function(){return b(i.apply(this,arguments),t[1],t[2])}),n&&(ut[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function W(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function H(e,t){return e.isValid()?(t=R(t,e.localeData()),ot[t]=ot[t]||function(e){var t,n,s=e.match(rt);for(t=0,n=s.length;t=0&&at.test(e);)e=e.replace(at,n),at.lastIndex=0,s-=1;return e}function C(e,t,n){Yt[e]=S(t)?t:function(e,s){return e&&n?n:t}}function F(e,t){return o(Yt,e)?Yt[e](t._strict,t._locale):new RegExp(function(e){return U(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i}))}(e))}function U(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function L(e,t){var n,s=t;for("string"==typeof e&&(e=[e]),i(t)&&(s=function(e,n){n[t]=g(e)}),n=0;n=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function B(e,t,n){var s=7+t-n;return-((7+J(e,0,s).getUTCDay()-t)%7)+s-1}function Q(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+B(e,s,i);return o<=0?a=V(r=e-1)+o:o>V(e)?(r=e+1,a=o-V(e)):(r=e,a=o),{year:r,dayOfYear:a}}function X(e,t,n){var s,i,r=B(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+K(i=e.year()-1,t,n):a>K(e.year(),t,n)?(s=a-K(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function K(e,t,n){var s=B(e,t,n),i=B(e+1,t,n);return(V(e)-s+i)/7}function ee(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],d=[];for(t=0;t<7;t++)n=l([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),d.push(s),d.push(i),d.push(r);for(a.sort(e),o.sort(e),u.sort(e),d.sort(e),t=0;t<7;t++)o[t]=U(o[t]),u[t]=U(u[t]),d[t]=U(d[t]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function te(){return this.hours()%12||12}function ne(e,t){P(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function se(e,t){return t._meridiemParse}function ie(e){return e?e.toLowerCase().replace("_","-"):e}function re(e){var t=null;if(!Xt[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Jt._abbr;require("./locale/"+e),ae(t)}catch(e){}return Xt[e]}function ae(e,t){var n;return e&&(n=s(t)?ue(e):oe(e,t))&&(Jt=n),Jt._abbr}function oe(e,t){if(null!==t){var n=Qt;if(t.abbr=e,null!=Xt[e])M("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."),n=Xt[e]._config;else if(null!=t.parentLocale){if(null==Xt[t.parentLocale])return Kt[t.parentLocale]||(Kt[t.parentLocale]=[]),Kt[t.parentLocale].push({name:e,config:t}),null;n=Xt[t.parentLocale]._config}return Xt[e]=new k(D(n,t)),Kt[e]&&Kt[e].forEach(function(e){oe(e.name,e.config)}),ae(e),Xt[e]}return delete Xt[e],null}function ue(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Jt;if(!t(e)){if(n=re(e))return n;e=[e]}return function(e){for(var t,n,s,i,r=0;r0;){if(s=re(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&p(i,n,!0)>=t-1)break;t--}r++}return null}(e)}function le(e){var t,n=e._a;return n&&-2===d(e).overflow&&(t=n[xt]<0||n[xt]>11?xt:n[bt]<1||n[bt]>Z(n[Tt],n[xt])?bt:n[Pt]<0||n[Pt]>24||24===n[Pt]&&(0!==n[Wt]||0!==n[Ht]||0!==n[Rt])?Pt:n[Wt]<0||n[Wt]>59?Wt:n[Ht]<0||n[Ht]>59?Ht:n[Rt]<0||n[Rt]>999?Rt:-1,d(e)._overflowDayOfYear&&(tbt)&&(t=bt),d(e)._overflowWeeks&&-1===t&&(t=Ct),d(e)._overflowWeekday&&-1===t&&(t=Ft),d(e).overflow=t),e}function de(e,t,n){return null!=e?e:null!=t?t:n}function he(t){var n,s,i,r,a,o=[];if(!t._d){for(i=function(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}(t),t._w&&null==t._a[bt]&&null==t._a[xt]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=de(t.GG,e._a[Tt],X(pe(),1,4).year),s=de(t.W,1),((i=de(t.E,1))<1||i>7)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=X(pe(),r,a);n=de(t.gg,e._a[Tt],l.year),s=de(t.w,l.week),null!=t.d?((i=t.d)<0||i>6)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||t.e>6)&&(u=!0)):i=r}s<1||s>K(n,r,a)?d(e)._overflowWeeks=!0:null!=u?d(e)._overflowWeekday=!0:(o=Q(n,s,i,r,a),e._a[Tt]=o.year,e._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(a=de(t._a[Tt],i[Tt]),(t._dayOfYear>V(a)||0===t._dayOfYear)&&(d(t)._overflowDayOfYear=!0),s=J(a,0,t._dayOfYear),t._a[xt]=s.getUTCMonth(),t._a[bt]=s.getUTCDate()),n=0;n<3&&null==t._a[n];++n)t._a[n]=o[n]=i[n];for(;n<7;n++)t._a[n]=o[n]=null==t._a[n]?2===n?1:0:t._a[n];24===t._a[Pt]&&0===t._a[Wt]&&0===t._a[Ht]&&0===t._a[Rt]&&(t._nextDay=!0,t._a[Pt]=0),t._d=(t._useUTC?J:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&e>=0&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,o),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Pt]=24),t._w&&void 0!==t._w.d&&t._w.d!==r&&(d(t).weekdayMismatch=!0)}}function ce(e){var t,n,s,i,r,a,o=e._i,u=en.exec(o)||tn.exec(o);if(u){for(d(e).iso=!0,t=0,n=sn.length;t0&&d(t).unusedInput.push(a),o=o.slice(o.indexOf(s)+s.length),l+=s.length),ut[r]?(s?d(t).empty=!1:d(t).unusedTokens.push(r),G(r,s,t)):t._strict&&!s&&d(t).unusedTokens.push(r);d(t).charsLeftOver=u-l,o.length>0&&d(t).unusedInput.push(o),t._a[Pt]<=12&&!0===d(t).bigHour&&t._a[Pt]>0&&(d(t).bigHour=void 0),d(t).parsedDateParts=t._a.slice(0),d(t).meridiem=t._meridiem,t._a[Pt]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0),t):t}(t._locale,t._a[Pt],t._meridiem),he(t),le(t)}else me(t);else ce(t)}function ye(o){var l=o._i,y=o._f;return o._locale=o._locale||ue(o._l),null===l||void 0===y&&""===l?c({nullInput:!0}):("string"==typeof l&&(o._i=l=o._locale.preparse(l)),_(l)?new m(le(l)):(r(l)?o._d=l:t(y)?function(e){var t,n,s,i,r;if(0===e._f.length)return d(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ir&&(t=r),function(e,t,n,s,i){var r=Q(e,t,n,s,i),a=J(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}function Ne(e,t){t[Rt]=g(1e3*("0."+e))}function Ge(e){return e}function Ve(e,t,n,s){var i=ue(),r=l().set(s,t);return i[n](r,e)}function Ee(e,t,n){if(i(e)&&(t=e,e=void 0),e=e||"",null!=t)return Ve(e,t,n,"month");var s,r=[];for(s=0;s<12;s++)r[s]=Ve(e,s,n,"month");return r}function Ie(e,t,n,s){"boolean"==typeof e?(i(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,i(t)&&(n=t,t=void 0),t=t||"");var r=ue(),a=e?r._week.dow:0;if(null!=n)return Ve(t,(n+a)%7,s,"day");var o,u=[];for(o=0;o<7;o++)u[o]=Ve(t,(o+a)%7,s,"day");return u}function Ae(e,t,n,s){var i=xe(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function je(e){return e<0?Math.floor(e):Math.ceil(e)}function Ze(e){return 4800*e/146097}function ze(e){return 146097*e/4800}function $e(e){return function(){return this.as(e)}}function qe(e){return function(){return this.isValid()?this._data[e]:NaN}}function Je(e){return(e>0)-(e<0)||+e}function Be(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=An(this._milliseconds)/1e3,s=An(this._days),i=An(this._months);t=y((e=y(n/60))/60),n%=60,e%=60;var r=y(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=Je(this._months)!==Je(h)?"-":"",m=Je(this._days)!==Je(h)?"-":"",_=Je(this._milliseconds)!==Je(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(o?m+o+"D":"")+(u||l||d?"T":"")+(u?_+u+"H":"")+(l?_+l+"M":"")+(d?_+d+"S":"")}var Qe,Xe;Xe=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s68?1900:2e3)};var Ut,Lt=I("FullYear",!0);Ut=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;tthis?this:e:c()}),hn=["year","quarter","month","week","day","hour","minute","second","millisecond"];De("Z",":"),De("ZZ",""),C("Z",Dt),C("ZZ",Dt),L(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=ke(Dt,e)});var cn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var fn=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,mn=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;xe.fn=ve.prototype,xe.invalid=function(){return xe(NaN)};var _n=We(1,"add"),yn=We(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var gn=v("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});P(0,["gg",2],0,function(){return this.weekYear()%100}),P(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ue("gggg","weekYear"),Ue("ggggg","weekYear"),Ue("GGGG","isoWeekYear"),Ue("GGGGG","isoWeekYear"),Y("weekYear","gg"),Y("isoWeekYear","GG"),x("weekYear",1),x("isoWeekYear",1),C("G",Mt),C("g",Mt),C("GG",mt,dt),C("gg",mt,dt),C("GGGG",pt,ct),C("gggg",pt,ct),C("GGGGG",wt,ft),C("ggggg",wt,ft),N(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=g(e)}),N(["gg","GG"],function(t,n,s,i){n[i]=e.parseTwoDigitYear(t)}),P("Q",0,"Qo","quarter"),Y("quarter","Q"),x("quarter",7),C("Q",lt),L("Q",function(e,t){t[xt]=3*(g(e)-1)}),P("D",["DD",2],"Do","date"),Y("date","D"),x("date",9),C("D",mt),C("DD",mt,dt),C("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),L(["D","DD"],bt),L("Do",function(e,t){t[bt]=g(e.match(mt)[0])});var pn=I("Date",!0);P("DDD",["DDDD",3],"DDDo","dayOfYear"),Y("dayOfYear","DDD"),x("dayOfYear",4),C("DDD",gt),C("DDDD",ht),L(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),P("m",["mm",2],0,"minute"),Y("minute","m"),x("minute",14),C("m",mt),C("mm",mt,dt),L(["m","mm"],Wt);var wn=I("Minutes",!1);P("s",["ss",2],0,"second"),Y("second","s"),x("second",15),C("s",mt),C("ss",mt,dt),L(["s","ss"],Ht);var vn=I("Seconds",!1);P("S",0,0,function(){return~~(this.millisecond()/100)}),P(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),P(0,["SSS",3],0,"millisecond"),P(0,["SSSS",4],0,function(){return 10*this.millisecond()}),P(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),P(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),P(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),P(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),P(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),Y("millisecond","ms"),x("millisecond",16),C("S",gt,lt),C("SS",gt,dt),C("SSS",gt,ht);var Mn;for(Mn="SSSS";Mn.length<=9;Mn+="S")C(Mn,vt);for(Mn="S";Mn.length<=9;Mn+="S")L(Mn,Ne);var Sn=I("Milliseconds",!1);P("z",0,0,"zoneAbbr"),P("zz",0,0,"zoneName");var Dn=m.prototype;Dn.add=_n,Dn.calendar=function(t,n){var s=t||pe(),i=Ye(s,this).startOf("day"),r=e.calendarFormat(this,i)||"sameElse",a=n&&(S(n[r])?n[r].call(this,s):n[r]);return this.format(a||this.localeData().calendar(r,this,pe(s)))},Dn.clone=function(){return new m(this)},Dn.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Ye(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=O(t)){case"year":r=Re(this,s)/12;break;case"month":r=Re(this,s);break;case"quarter":r=Re(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:y(r)},Dn.endOf=function(e){return void 0===(e=O(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},Dn.format=function(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=H(this,t);return this.localeData().postformat(n)},Dn.from=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||pe(e).isValid())?xe({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Dn.fromNow=function(e){return this.from(pe(),e)},Dn.to=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||pe(e).isValid())?xe({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Dn.toNow=function(e){return this.to(pe(),e)},Dn.get=function(e){return e=O(e),S(this[e])?this[e]():this},Dn.invalidAt=function(){return d(this).overflow},Dn.isAfter=function(e,t){var n=_(e)?e:pe(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=O(s(t)?"millisecond":t))?this.valueOf()>n.valueOf():n.valueOf()9999?H(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):S(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this._d.valueOf()).toISOString().replace("Z",H(n,"Z")):H(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},Dn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',s=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=t+'[")]';return this.format(n+s+"-MM-DD[T]HH:mm:ss.SSS"+i)},Dn.toJSON=function(){return this.isValid()?this.toISOString():null},Dn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},Dn.unix=function(){return Math.floor(this.valueOf()/1e3)},Dn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Dn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Dn.year=Lt,Dn.isLeapYear=function(){return E(this.year())},Dn.weekYear=function(e){return Le.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},Dn.isoWeekYear=function(e){return Le.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},Dn.quarter=Dn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},Dn.month=$,Dn.daysInMonth=function(){return Z(this.year(),this.month())},Dn.week=Dn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},Dn.isoWeek=Dn.isoWeeks=function(e){var t=X(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},Dn.weeksInYear=function(){var e=this.localeData()._week;return K(this.year(),e.dow,e.doy)},Dn.isoWeeksInYear=function(){return K(this.year(),1,4)},Dn.date=pn,Dn.day=Dn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},Dn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},Dn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},Dn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},Dn.hour=Dn.hours=Bt,Dn.minute=Dn.minutes=wn,Dn.second=Dn.seconds=vn,Dn.millisecond=Dn.milliseconds=Sn,Dn.utcOffset=function(t,n,s){var i,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=ke(Dt,t)))return this}else Math.abs(t)<16&&!s&&(t*=60);return!this._isUTC&&n&&(i=Oe(this)),this._offset=t,this._isUTC=!0,null!=i&&this.add(i,"m"),r!==t&&(!n||this._changeInProgress?He(this,xe(t-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Oe(this)},Dn.utc=function(e){return this.utcOffset(0,e)},Dn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Oe(this),"m")),this},Dn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=ke(St,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},Dn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?pe(e).utcOffset():0,(this.utcOffset()-e)%60==0)},Dn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Dn.isLocal=function(){return!!this.isValid()&&!this._isUTC},Dn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Dn.isUtc=Te,Dn.isUTC=Te,Dn.zoneAbbr=function(){return this._isUTC?"UTC":""},Dn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},Dn.dates=v("dates accessor is deprecated. Use date instead.",pn),Dn.months=v("months accessor is deprecated. Use month instead",$),Dn.years=v("years accessor is deprecated. Use year instead",Lt),Dn.zone=v("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),Dn.isDSTShifted=v("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var e={};if(f(e,this),(e=ye(e))._a){var t=e._isUTC?l(e._a):pe(e._a);this._isDSTShifted=this.isValid()&&p(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var kn=k.prototype;kn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return S(s)?s.call(t,n):s},kn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},kn.invalidDate=function(){return this._invalidDate},kn.ordinal=function(e){return this._ordinal.replace("%d",e)},kn.preparse=Ge,kn.postformat=Ge,kn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return S(i)?i(e,t,n,s):i.replace(/%d/i,e)},kn.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return S(n)?n(t):n.replace(/%s/i,t)},kn.set=function(e){var t,n;for(n in e)S(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},kn.months=function(e,n){return e?t(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Nt).test(n)?"format":"standalone"][e.month()]:t(this._months)?this._months:this._months.standalone},kn.monthsShort=function(e,n){return e?t(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Nt.test(n)?"format":"standalone"][e.month()]:t(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},kn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=Ut.call(this._shortMonthsParse,a))?i:null:-1!==(i=Ut.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=Ut.call(this._shortMonthsParse,a))?i:-1!==(i=Ut.call(this._longMonthsParse,a))?i:null:-1!==(i=Ut.call(this._longMonthsParse,a))?i:-1!==(i=Ut.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},kn.monthsRegex=function(e){return this._monthsParseExact?(o(this,"_monthsRegex")||q.call(this),e?this._monthsStrictRegex:this._monthsRegex):(o(this,"_monthsRegex")||(this._monthsRegex=It),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},kn.monthsShortRegex=function(e){return this._monthsParseExact?(o(this,"_monthsRegex")||q.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(o(this,"_monthsShortRegex")||(this._monthsShortRegex=Et),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},kn.week=function(e){return X(e,this._week.dow,this._week.doy).week},kn.firstDayOfYear=function(){return this._week.doy},kn.firstDayOfWeek=function(){return this._week.dow},kn.weekdays=function(e,n){return e?t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]:t(this._weekdays)?this._weekdays:this._weekdays.standalone},kn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},kn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},kn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=Ut.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=Ut.call(this._weekdaysParse,a))?i:-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ut.call(this._weekdaysParse,a))?i:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Ut.call(this._minWeekdaysParse,a))?i:-1!==(i=Ut.call(this._weekdaysParse,a))?i:-1!==(i=Ut.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},kn.weekdaysRegex=function(e){return this._weekdaysParseExact?(o(this,"_weekdaysRegex")||ee.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(o(this,"_weekdaysRegex")||(this._weekdaysRegex=zt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},kn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(o(this,"_weekdaysRegex")||ee.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(o(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=$t),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},kn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(o(this,"_weekdaysRegex")||ee.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(o(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=qt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},kn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},kn.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},ae("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=v("moment.lang is deprecated. Use moment.locale instead.",ae),e.langData=v("moment.langData is deprecated. Use moment.localeData instead.",ue);var Yn=Math.abs,On=$e("ms"),Tn=$e("s"),xn=$e("m"),bn=$e("h"),Pn=$e("d"),Wn=$e("w"),Hn=$e("M"),Rn=$e("y"),Cn=qe("milliseconds"),Fn=qe("seconds"),Un=qe("minutes"),Ln=qe("hours"),Nn=qe("days"),Gn=qe("months"),Vn=qe("years"),En=Math.round,In={ss:44,s:45,m:45,h:22,d:26,M:11},An=Math.abs,jn=ve.prototype;return jn.isValid=function(){return this._isValid},jn.abs=function(){var e=this._data;return this._milliseconds=Yn(this._milliseconds),this._days=Yn(this._days),this._months=Yn(this._months),e.milliseconds=Yn(e.milliseconds),e.seconds=Yn(e.seconds),e.minutes=Yn(e.minutes),e.hours=Yn(e.hours),e.months=Yn(e.months),e.years=Yn(e.years),this},jn.add=function(e,t){return Ae(this,e,t,1)},jn.subtract=function(e,t){return Ae(this,e,t,-1)},jn.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=O(e))||"year"===e)return t=this._days+s/864e5,n=this._months+Ze(t),"month"===e?n:n/12;switch(t=this._days+Math.round(ze(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},jn.asMilliseconds=On,jn.asSeconds=Tn,jn.asMinutes=xn,jn.asHours=bn,jn.asDays=Pn,jn.asWeeks=Wn,jn.asMonths=Hn,jn.asYears=Rn,jn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12):NaN},jn._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return r>=0&&a>=0&&o>=0||r<=0&&a<=0&&o<=0||(r+=864e5*je(ze(o)+a),a=0,o=0),u.milliseconds=r%1e3,e=y(r/1e3),u.seconds=e%60,t=y(e/60),u.minutes=t%60,n=y(t/60),u.hours=n%24,a+=y(n/24),i=y(Ze(a)),o+=i,a-=je(ze(i)),s=y(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},jn.clone=function(){return xe(this)},jn.get=function(e){return e=O(e),this.isValid()?this[e+"s"]():NaN},jn.milliseconds=Cn,jn.seconds=Fn,jn.minutes=Un,jn.hours=Ln,jn.days=Nn,jn.weeks=function(){return y(this.days()/7)},jn.months=Gn,jn.years=Vn,jn.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var s=xe(e).abs(),i=En(s.as("s")),r=En(s.as("m")),a=En(s.as("h")),o=En(s.as("d")),u=En(s.as("M")),l=En(s.as("y")),d=i<=In.ss&&["s",i]||i0,d[4]=n,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,d)}(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)},jn.toISOString=Be,jn.toString=Be,jn.toJSON=Be,jn.locale=Ce,jn.localeData=Fe,jn.toIsoString=v("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Be),jn.lang=gn,P("X",0,0,"unix"),P("x",0,0,"valueOf"),C("x",Mt),C("X",/[+-]?\d+(\.\d{1,3})?/),L("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),L("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.20.1",function(e){Qe=e}(pe),e.fn=Dn,e.min=function(){return we("isBefore",[].slice.call(arguments,0))},e.max=function(){return we("isAfter",[].slice.call(arguments,0))},e.now=function(){return Date.now?Date.now():+new Date},e.utc=l,e.unix=function(e){return pe(1e3*e)},e.months=function(e,t){return Ee(e,t,"months")},e.isDate=r,e.locale=ae,e.invalid=c,e.duration=xe,e.isMoment=_,e.weekdays=function(e,t,n){return Ie(e,t,n,"weekdays")},e.parseZone=function(){return pe.apply(null,arguments).parseZone()},e.localeData=ue,e.isDuration=Me,e.monthsShort=function(e,t){return Ee(e,t,"monthsShort")},e.weekdaysMin=function(e,t,n){return Ie(e,t,n,"weekdaysMin")},e.defineLocale=oe,e.updateLocale=function(e,t){if(null!=t){var n,s,i=Qt;null!=(s=re(e))&&(i=s._config),(n=new k(t=D(i,t))).parentLocale=Xt[e],Xt[e]=n,ae(e)}else null!=Xt[e]&&(null!=Xt[e].parentLocale?Xt[e]=Xt[e].parentLocale:null!=Xt[e]&&delete Xt[e]);return Xt[e]},e.locales=function(){return nt(Xt)},e.weekdaysShort=function(e,t,n){return Ie(e,t,n,"weekdaysShort")},e.normalizeUnits=O,e.relativeTimeRounding=function(e){return void 0===e?En:"function"==typeof e&&(En=e,!0)},e.relativeTimeThreshold=function(e,t){return void 0!==In[e]&&(void 0===t?In[e]:(In[e]=t,"s"===e&&(In.ss=t-1),!0))},e.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},e.prototype=Dn,e.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:"YYYY-[W]WW",MONTH:"YYYY-MM"},e}); \ No newline at end of file diff --git a/assets/plugins/bs-stepper/css/bs-stepper-custom.css b/assets/plugins/bs-stepper/css/bs-stepper-custom.css deleted file mode 100644 index e669c08..0000000 --- a/assets/plugins/bs-stepper/css/bs-stepper-custom.css +++ /dev/null @@ -1,231 +0,0 @@ -.bs-stepper { - background-color: #FFF; - box-shadow: 0 4px 24px 0 rgba(34, 41, 47, .1); - border-radius: .5rem -} -.bs-stepper .bs-stepper-header { - padding: 1.5rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - border-bottom: 1px solid rgba(34, 41, 47, .08); - margin: 0 -} -.bs-stepper .bs-stepper-header .line { - -webkit-box-flex: 0; - -webkit-flex: 0; - -ms-flex: 0; - flex: 0; - min-width: auto; - min-height: auto; - background-color: transparent; - margin: 0; - padding: 0 1.75rem; - color: #6E6B7B; - font-size: 1.5rem -} -.bs-stepper .bs-stepper-header .step { - margin-bottom: .25rem; - margin-top: .25rem -} -.bs-stepper .bs-stepper-header .step .step-trigger { - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - padding: 0; - font-weight: 400 -} -.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-box { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - width: 38px; - height: 38px; - padding: .5em 0; - font-weight: 500; - color: #BABFC7; - background-color: rgba(186, 191, 199, .12); - border-radius: .35rem -} -.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label { - text-align: left; - margin: .5rem 0 0 1rem -} -.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-title { - display: inherit; - color: #6E6B7B; - font-weight: 600; - line-height: 1rem; - margin-bottom: 0 -} -.bs-stepper.vertical .bs-stepper-content .content:not(.active), .bs-stepper.vertical .bs-stepper-header .line { - display: none -} -.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-subtitle { - font-weight: 400; - font-size: .85rem; - color: #B9B9C3 -} -.bs-stepper .bs-stepper-header .step .step-trigger:hover { - background-color: transparent -} -.bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-box { - background-color: #7367F0; - color: #FFF; - box-shadow: 0 3px 6px 0 rgba(115, 103, 240, .4) -} -.bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-label .bs-stepper-title { - color: #7367F0 -} -.bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-box { - background-color: rgba(115, 103, 240, .12); - color: #7367F0!important -} -.bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-label .bs-stepper-title { - color: #B9B9C3 -} -.bs-stepper .bs-stepper-header .step.crossed+.line { - color: #7367F0 -} -.bs-stepper .bs-stepper-content { - padding: 1.5rem -} -.bs-stepper .bs-stepper-content .content { - margin-left: 0 -} -.bs-stepper .bs-stepper-content .content .content-header { - margin-bottom: 1rem -} -.bs-stepper.vertical .bs-stepper-header { - border-right: 1px solid #EBE9F1; - border-bottom: none -} -.bs-stepper.vertical .bs-stepper-header .step .step-trigger { - padding: 1rem 0 -} -.bs-stepper.vertical .bs-stepper-content { - width: 100%; - padding-top: 2.5rem -} -.bs-stepper.vertical.wizard-icons .step { - text-align: center -} -.bs-stepper.wizard-modern { - background-color: transparent; - box-shadow: none -} -.bs-stepper.wizard-modern .bs-stepper-header { - border: none -} -.bs-stepper.wizard-modern .bs-stepper-content { - background-color: #FFF; - border-radius: .5rem; - box-shadow: 0 4px 24px 0 rgba(34, 41, 47, .1) -} -.horizontal-wizard, .modern-horizontal-wizard, .modern-vertical-wizard, .vertical-wizard { - margin-bottom: 2.2rem -} -.dark-layout .bs-stepper { - background-color: #283046; - box-shadow: 0 4px 24px 0 rgba(34, 41, 47, .24) -} -.dark-layout .bs-stepper .bs-stepper-header { - border-bottom: 1px solid rgba(59, 66, 83, .08) -} -.dark-layout .bs-stepper .bs-stepper-header .line { - color: #B4B7BD -} -.dark-layout .bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-box { - color: #BABFC7 -} -.dark-layout .bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-title { - color: #B4B7BD -} -.dark-layout .bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-subtitle { - color: #676D7D -} -.dark-layout .bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-box { - background-color: #7367F0; - color: #FFF; - box-shadow: 0 3px 6px 0 rgba(115, 103, 240, .4) -} -.dark-layout .bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-label .bs-stepper-title { - color: #7367F0 -} -.dark-layout .bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-label, .dark-layout .bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-title { - color: #676D7D -} -.dark-layout .bs-stepper.vertical .bs-stepper-header { - border-right-color: #3B4253 -} -.dark-layout .bs-stepper.wizard-modern { - background-color: transparent; - box-shadow: none -} -.dark-layout .bs-stepper.wizard-modern .bs-stepper-header { - border: none -} -.dark-layout .bs-stepper.wizard-modern .bs-stepper-content { - background-color: #283046; - box-shadow: 0 4px 24px 0 rgba(34, 41, 47, .24) -} -html[data-textdirection=rtl] .btn-next, html[data-textdirection=rtl] .btn-prev { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex -} -html[data-textdirection=rtl] .btn-next i, html[data-textdirection=rtl] .btn-next svg, html[data-textdirection=rtl] .btn-prev i, html[data-textdirection=rtl] .btn-prev svg { - -webkit-transform: rotate(-180deg); - -ms-transform: rotate(-180deg); - transform: rotate(-180deg) -} -@media (max-width:992px) { - .bs-stepper .bs-stepper-header { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start - } - .bs-stepper .bs-stepper-header .step .step-trigger { - padding: .5rem 0!important; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row - } - .bs-stepper .bs-stepper-header .line { - display: none - } - .bs-stepper.vertical { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column - } - .bs-stepper.vertical .bs-stepper-header { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start - } - .bs-stepper.vertical .bs-stepper-content { - padding-top: 1.5rem - } -} \ No newline at end of file diff --git a/assets/plugins/bs-stepper/css/bs-stepper.css b/assets/plugins/bs-stepper/css/bs-stepper.css deleted file mode 100644 index 56b830f..0000000 --- a/assets/plugins/bs-stepper/css/bs-stepper.css +++ /dev/null @@ -1,208 +0,0 @@ -/*! - * bsStepper v{version} (https://github.com/Johann-S/bs-stepper) - * Copyright 2018 - {year} Johann-S - * Licensed under MIT (https://github.com/Johann-S/bs-stepper/blob/master/LICENSE) - */ - -.bs-stepper .step-trigger { - display: flex; - flex-wrap: nowrap; - align-items: center; - justify-content: start; - gap: 1rem; - padding: 16px 0px; - color: #6c757d; - text-decoration: none; - white-space: nowrap; - vertical-align: middle; - user-select: none; - background-color: rgb(246 246 246 / 0%); - border: none; - border-radius: .25rem; - transition: background-color .15s ease-out, color .15s ease-out; -} - -.bs-stepper .step-trigger:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.bs-stepper .step-trigger:disabled, -.bs-stepper .step-trigger.disabled { - pointer-events: none; - opacity: .65; -} - -.bs-stepper .step-trigger:focus { - color: #007bff; - outline: none; -} - -.bs-stepper .step-trigger:hover { - text-decoration: none; - background-color: rgba(0, 0, 0, .0); -} - - -.bs-stepper-label { - display: inline-block; - margin: .25rem; -} - -.bs-stepper-header { - display: flex; - align-items: center; -} - - -.bs-stepper-line, -.bs-stepper .line { - flex: 1 0 32px; - min-width: 1px; - min-height: 1px; - margin: auto; - background-color: rgba(0, 0, 0, .12); -} - -.bs-stepper.vertical .bs-stepper-content .content:not(.active), .bs-stepper.vertical .bs-stepper-header .line { - display: none -} - -.bs-stepper-circle { - width: 2.7rem; - height: 2.7rem; - font-size: 18px; - display: flex; - align-items: center; - justify-content: center; - color: #969595; - background-color: #f0f0f0; - border-radius: 50%; -} - -.step .steper-title { - font-size: 17px; -} - -.step .steper-sub-title { - font-size: 13px; -} - -.active .bs-stepper-circle { - color: #ffffff; - background-color: #007bff; -} - -.bs-stepper-content { - padding: 0; -} - - -@media (max-width:992px) { - .bs-stepper.vertical { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column - } - .bs-stepper.vertical .bs-stepper-header { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start - } -} - -@media (max-width: 520px) { - .bs-stepper-content { - padding: 0; - } -} - -.bs-stepper.vertical { - display: flex; -} - -.bs-stepper.vertical .bs-stepper-header { - display: flex; - flex-direction: column; - align-items: stretch; - margin: 0; - padding: 1rem; - background-color: #fbfbfb; - border-right: 1px solid #EBE9F1; - border-bottom: none; - height: auto; -} - -.bs-stepper.vertical .bs-stepper-pane, -.bs-stepper.vertical .content { - display: block; -} - -.bs-stepper.vertical .bs-stepper-pane:not(.fade), -.bs-stepper.vertical .content:not(.fade) { - display: block; - visibility: hidden; -} - -.bs-stepper-pane:not(.fade), -.bs-stepper .content:not(.fade) { - display: none; -} - -.bs-stepper .content.fade, -.bs-stepper-pane.fade { - visibility: hidden; - transition-duration: .3s; - transition-property: opacity; -} - -.bs-stepper-pane.fade.active, -.bs-stepper .content.fade.active { - visibility: visible; - opacity: 1; -} - -.bs-stepper-pane.active:not(.fade), -.bs-stepper .content.active:not(.fade) { - display: block; - visibility: visible; -} - -.bs-stepper-pane.dstepper-block, -.bs-stepper .content.dstepper-block { - display: block; -} - -.bs-stepper:not(.vertical) .bs-stepper-pane.dstepper-none, -.bs-stepper:not(.vertical) .content.dstepper-none { - display: none; -} - -.vertical .bs-stepper-pane.fade.dstepper-none, -.vertical .content.fade.dstepper-none { - display: none; -} - - -/* dark theme */ - -html.dark-theme .bs-stepper.vertical .bs-stepper-header{ - background-color: #31373c; - border-right: 1px solid rgb(255 255 255 / 12%); -} - - -html.dark-theme .step .steper-title { - color: #cdcdce; -} - -html.dark-theme .step .steper-sub-title { - color: #8f8f8f; -} - -html.dark-theme .bs-stepper-circle { - color: #c7cdcf; - background-color: #212529; -} \ No newline at end of file diff --git a/assets/plugins/bs-stepper/css/custom.js b/assets/plugins/bs-stepper/css/custom.js deleted file mode 100644 index f0ddd28..0000000 --- a/assets/plugins/bs-stepper/css/custom.js +++ /dev/null @@ -1 +0,0 @@ -.bs-stepper{background-color:#FFF;box-shadow:0 4px 24px 0 rgba(34,41,47,.1);border-radius:.5rem}.bs-stepper .bs-stepper-header{padding:1.5rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;border-bottom:1px solid rgba(34,41,47,.08);margin:0}.bs-stepper .bs-stepper-header .line{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;min-width:auto;min-height:auto;background-color:transparent;margin:0;padding:0 1.75rem;color:#6E6B7B;font-size:1.5rem}.bs-stepper .bs-stepper-header .step{margin-bottom:.25rem;margin-top:.25rem}.bs-stepper .bs-stepper-header .step .step-trigger{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0;font-weight:400}.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:38px;height:38px;padding:.5em 0;font-weight:500;color:#BABFC7;background-color:rgba(186,191,199,.12);border-radius:.35rem}.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label{text-align:left;margin:.5rem 0 0 1rem}.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-title{display:inherit;color:#6E6B7B;font-weight:600;line-height:1rem;margin-bottom:0}.bs-stepper.vertical .bs-stepper-content .content:not(.active),.bs-stepper.vertical .bs-stepper-header .line{display:none}.bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-subtitle{font-weight:400;font-size:.85rem;color:#B9B9C3}.bs-stepper .bs-stepper-header .step .step-trigger:hover{background-color:transparent}.bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-box{background-color:#7367F0;color:#FFF;box-shadow:0 3px 6px 0 rgba(115,103,240,.4)}.bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-label .bs-stepper-title{color:#7367F0}.bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-box{background-color:rgba(115,103,240,.12);color:#7367F0!important}.bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-label .bs-stepper-title{color:#B9B9C3}.bs-stepper .bs-stepper-header .step.crossed+.line{color:#7367F0}.bs-stepper .bs-stepper-content{padding:1.5rem}.bs-stepper .bs-stepper-content .content{margin-left:0}.bs-stepper .bs-stepper-content .content .content-header{margin-bottom:1rem}.bs-stepper.vertical .bs-stepper-header{border-right:1px solid #EBE9F1;border-bottom:none}.bs-stepper.vertical .bs-stepper-header .step .step-trigger{padding:1rem 0}.bs-stepper.vertical .bs-stepper-content{width:100%;padding-top:2.5rem}.bs-stepper.vertical.wizard-icons .step{text-align:center}.bs-stepper.wizard-modern{background-color:transparent;box-shadow:none}.bs-stepper.wizard-modern .bs-stepper-header{border:none}.bs-stepper.wizard-modern .bs-stepper-content{background-color:#FFF;border-radius:.5rem;box-shadow:0 4px 24px 0 rgba(34,41,47,.1)}.horizontal-wizard,.modern-horizontal-wizard,.modern-vertical-wizard,.vertical-wizard{margin-bottom:2.2rem}.dark-layout .bs-stepper{background-color:#283046;box-shadow:0 4px 24px 0 rgba(34,41,47,.24)}.dark-layout .bs-stepper .bs-stepper-header{border-bottom:1px solid rgba(59,66,83,.08)}.dark-layout .bs-stepper .bs-stepper-header .line{color:#B4B7BD}.dark-layout .bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-box{color:#BABFC7}.dark-layout .bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-title{color:#B4B7BD}.dark-layout .bs-stepper .bs-stepper-header .step .step-trigger .bs-stepper-label .bs-stepper-subtitle{color:#676D7D}.dark-layout .bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-box{background-color:#7367F0;color:#FFF;box-shadow:0 3px 6px 0 rgba(115,103,240,.4)}.dark-layout .bs-stepper .bs-stepper-header .step.active .step-trigger .bs-stepper-label .bs-stepper-title{color:#7367F0}.dark-layout .bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-label,.dark-layout .bs-stepper .bs-stepper-header .step.crossed .step-trigger .bs-stepper-title{color:#676D7D}.dark-layout .bs-stepper.vertical .bs-stepper-header{border-right-color:#3B4253}.dark-layout .bs-stepper.wizard-modern{background-color:transparent;box-shadow:none}.dark-layout .bs-stepper.wizard-modern .bs-stepper-header{border:none}.dark-layout .bs-stepper.wizard-modern .bs-stepper-content{background-color:#283046;box-shadow:0 4px 24px 0 rgba(34,41,47,.24)}html[data-textdirection=rtl] .btn-next,html[data-textdirection=rtl] .btn-prev{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}html[data-textdirection=rtl] .btn-next i,html[data-textdirection=rtl] .btn-next svg,html[data-textdirection=rtl] .btn-prev i,html[data-textdirection=rtl] .btn-prev svg{-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}@media (max-width:992px){.bs-stepper .bs-stepper-header{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.bs-stepper .bs-stepper-header .step .step-trigger{padding:.5rem 0!important;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.bs-stepper .bs-stepper-header .line{display:none}.bs-stepper.vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.bs-stepper.vertical .bs-stepper-header{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.bs-stepper.vertical .bs-stepper-content{padding-top:1.5rem}} \ No newline at end of file diff --git a/assets/plugins/bs-stepper/js/bs-stepper.min.js b/assets/plugins/bs-stepper/js/bs-stepper.min.js deleted file mode 100644 index 1b657e3..0000000 --- a/assets/plugins/bs-stepper/js/bs-stepper.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * bsStepper v1.7.0 (https://github.com/Johann-S/bs-stepper) - * Copyright 2018 - 2019 Johann-S - * Licensed under MIT (https://github.com/Johann-S/bs-stepper/blob/master/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Stepper=e()}(this,function(){"use strict";function t(){return(t=Object.assign||function(t){for(var e=1;e=0?this._currentIndex-1:0;a(this._element,e,this.options,function(){t._currentIndex=e})},s.to=function(t){var e=this,n=t-1,s=n>=0&&n step.hasAttribute('data-target')) - .forEach(step => { - this._stepsContents.push( - this._element.querySelector(step.getAttribute('data-target')) - ) - }) - - detectAnimation(this._stepsContents, this.options) - this._setLinkListeners() - Object.defineProperty(this._element, customProperty, { - value: this, - writable: true - }) - - if (this._steps.length) { - show(this._element, this._currentIndex, this.options, () => {}) - } - } - - // Private - - _setLinkListeners () { - this._steps.forEach(step => { - const trigger = step.querySelector(this.options.selectors.trigger) - - if (this.options.linear) { - this._clickStepLinearListener = buildClickStepLinearListener(this.options) - trigger.addEventListener('click', this._clickStepLinearListener) - } else { - this._clickStepNonLinearListener = buildClickStepNonLinearListener(this.options) - trigger.addEventListener('click', this._clickStepNonLinearListener) - } - }) - } - - // Public - - next () { - const nextStep = (this._currentIndex + 1) <= this._steps.length - 1 ? this._currentIndex + 1 : (this._steps.length - 1) - - show(this._element, nextStep, this.options, () => { - this._currentIndex = nextStep - }) - } - - previous () { - const previousStep = (this._currentIndex - 1) >= 0 ? this._currentIndex - 1 : 0 - - show(this._element, previousStep, this.options, () => { - this._currentIndex = previousStep - }) - } - - to (stepNumber) { - const tempIndex = stepNumber - 1 - const nextStep = tempIndex >= 0 && tempIndex < this._steps.length - ? tempIndex - : 0 - - show(this._element, nextStep, this.options, () => { - this._currentIndex = nextStep - }) - } - - reset () { - show(this._element, 0, this.options, () => { - this._currentIndex = 0 - }) - } - - destroy () { - this._steps.forEach(step => { - const trigger = step.querySelector(this.options.selectors.trigger) - - if (this.options.linear) { - trigger.removeEventListener('click', this._clickStepLinearListener) - } else { - trigger.removeEventListener('click', this._clickStepNonLinearListener) - } - }) - - this._element[customProperty] = undefined - this._element = undefined - this._currentIndex = undefined - this._steps = undefined - this._stepsContents = undefined - this._clickStepLinearListener = undefined - this._clickStepNonLinearListener = undefined - } -} - -export default Stepper diff --git a/assets/plugins/bs-stepper/js/index.spec.js b/assets/plugins/bs-stepper/js/index.spec.js deleted file mode 100644 index 6e32a4d..0000000 --- a/assets/plugins/bs-stepper/js/index.spec.js +++ /dev/null @@ -1,677 +0,0 @@ -/* eslint-env jasmine */ -import Stepper from './index' - -describe('Stepper', () => { - let fixture - - beforeAll(() => { - const fixureNode = document.createElement('div') - fixureNode.setAttribute('id', 'fixture') - - document.body.appendChild(fixureNode) - fixture = document.getElementById('fixture') - }) - - afterEach(() => { - fixture.innerHTML = '' - }) - - describe('constructor', () => { - it('should create a stepper', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - expect(stepperNode.classList.contains('linear')).toBe(true) - expect(stepper._steps.length).toEqual(2) - expect(stepperNode['bsStepper']).toEqual(stepper) - expect(document.querySelector('.step').classList.contains('active')).toBe(true) - expect(document.getElementById('trigger1').getAttribute('aria-selected')).toEqual('true') - expect(document.getElementById('trigger2').getAttribute('aria-selected')).toEqual('false') - expect(stepper.options).toEqual({ - linear: true, - animation: false, - selectors: { - steps: '.step', - trigger: '.step-trigger', - stepper: '.bs-stepper' - } - }) - }) - - it('should do nothing if there is no step', () => { - fixture.innerHTML = '
' - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - expect(stepperNode.classList.contains('linear')).toBe(true) - expect(stepper._steps.length).toEqual(0) - expect(stepperNode['bsStepper']).toEqual(stepper) - }) - - it('should create a non linear stepper', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode, { - linear: false - }) - - expect(stepperNode.classList.contains('linear')).toBe(false) - expect(stepper._steps.length).toEqual(2) - expect(document.querySelector('.step').classList.contains('active')).toBe(true) - expect(stepperNode['bsStepper']).toEqual(stepper) - expect(stepper._clickStepLinearListener).toBeUndefined() - expect(stepper._clickStepNonLinearListener).toBeTruthy() - expect(stepper.options).toEqual({ - linear: false, - animation: false, - selectors: { - steps: '.step', - trigger: '.step-trigger', - stepper: '.bs-stepper' - } - }) - }) - - it('should go to the next step when user click on a step for non linear stepper', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode, { - linear: false - }) - - const trigger2 = document.querySelector('#trigger2') - trigger2.click() - - expect(document.querySelector('#test1').classList.contains('active')).toBe(false) - expect(document.querySelector('#test2').classList.contains('active')).toBe(true) - expect(document.getElementById('trigger1').getAttribute('aria-selected')).toEqual('false') - expect(document.getElementById('trigger2').getAttribute('aria-selected')).toEqual('true') - expect(stepper._currentIndex).toEqual(1) - }) - - it('should call preventDefault when user click on a step for linear stepper', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - const trigger2 = document.querySelector('#trigger2') - trigger2.removeAttribute('disabled') - const clickEvent = document.createEvent('Event') - clickEvent.initEvent('click', true, true) - - spyOn(clickEvent, 'preventDefault') - - trigger2.dispatchEvent(clickEvent) - - expect(clickEvent.preventDefault).toHaveBeenCalled() - expect(stepper._currentIndex).toEqual(0) - }) - - it('should create a stepper with fade animation', done => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode, { - animation: true - }) - - setTimeout(() => { - expect(stepper.options).toEqual({ - linear: true, - animation: true, - selectors: { - steps: '.step', - trigger: '.step-trigger', - stepper: '.bs-stepper' - } - }) - expect(document.querySelector('#test1').classList.contains('fade')).toBe(true) - expect(document.querySelector('#test2').classList.contains('fade')).toBe(true) - done() - }, 10) - }) - - it('should add event listeners on triggers', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const trigger1 = document.querySelector('#trigger1') - const trigger2 = document.querySelector('#trigger2') - - spyOn(trigger1, 'addEventListener') - spyOn(trigger2, 'addEventListener') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - expect(trigger1.addEventListener).toHaveBeenCalled() - expect(trigger2.addEventListener).toHaveBeenCalled() - expect(stepperNode['bsStepper']).toEqual(stepper) - }) - - it('should allow css selector configuration', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode, { - selectors: { - steps: '.custom-step', - trigger: '.custom-step-trigger', - stepper: '.custom-bs-stepper' - } - }) - - expect(stepper.options).toEqual({ - linear: true, - animation: false, - selectors: { - steps: '.custom-step', - trigger: '.custom-step-trigger', - stepper: '.custom-bs-stepper' - } - }) - }) - }) - - describe('next', () => { - it('should go to the next step', done => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - stepperNode.addEventListener('show.bs-stepper', function (event) { - expect(event.detail.indexStep).toEqual(1) - expect(event.detail.to).toEqual(1) - expect(event.detail.from).toEqual(0) - }) - stepperNode.addEventListener('shown.bs-stepper', function (event) { - expect(event.detail.indexStep).toEqual(1) - expect(event.detail.to).toEqual(1) - expect(event.detail.from).toEqual(0) - expect(document.querySelector('#test1').classList.contains('active')).toBe(false) - expect(document.querySelector('#test2').classList.contains('active')).toBe(true) - done() - }) - - stepper.next() - }) - - it('should go to the next step with css selector configuration', done => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode, { - selectors: { - steps: '.custom-step', - trigger: '.custom-step-trigger', - stepper: '.custom-bs-stepper' - } - }) - - expect(stepper.options).toEqual({ - linear: true, - animation: false, - selectors: { - steps: '.custom-step', - trigger: '.custom-step-trigger', - stepper: '.custom-bs-stepper' - } - }) - - stepperNode.addEventListener('show.bs-stepper', function (event) { - expect(event.detail.indexStep).toEqual(1) - }) - stepperNode.addEventListener('shown.bs-stepper', function (event) { - expect(event.detail.indexStep).toEqual(1) - expect(document.querySelector('#test1').classList.contains('active')).toBe(false) - expect(document.querySelector('#test2').classList.contains('active')).toBe(true) - done() - }) - - stepper.next() - }) - - it('should not go to the next step if the show event is default prevented', done => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - const listeners = { - show (event) { - event.preventDefault() - expect(event.detail.indexStep).toEqual(1) - - setTimeout(() => { - expect(listeners.shown).not.toHaveBeenCalled() - expect(stepper._currentIndex).toEqual(0) - done() - }, 10) - }, - shown () { - console.warn('shown called but it should not be the case') - } - } - - spyOn(listeners, 'shown') - - stepperNode.addEventListener('show.bs-stepper', listeners.show) - stepperNode.addEventListener('shown.bs-stepper', listeners.shown) - - stepper.next() - }) - - it('should stay at the end if we call next', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - stepper.next() - stepper.next() - - expect(document.querySelector('#test1').classList.contains('active')).toBe(false) - expect(document.querySelector('#test2').classList.contains('active')).toBe(true) - }) - - it('should keep block class on previous steps for vertical stepper without fade', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - stepper.next() - - expect(document.querySelector('#test2').classList.contains('active')).toBe(true) - expect(document.querySelector('#test2').classList.contains('dstepper-block')).toBe(true) - }) - }) - - describe('previous', () => { - it('should return to the previous step', done => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - const test1 = document.querySelector('#test1') - const test2 = document.querySelector('#test2') - - stepper.next() - - expect(test1.classList.contains('active')).toBe(false) - expect(test2.classList.contains('active')).toBe(true) - - stepperNode.addEventListener('show.bs-stepper', function (event) { - expect(event.detail.indexStep).toEqual(0) - expect(event.detail.to).toEqual(0) - expect(event.detail.from).toEqual(1) - }) - - stepperNode.addEventListener('shown.bs-stepper', function (event) { - expect(event.detail.indexStep).toEqual(0) - expect(event.detail.to).toEqual(0) - expect(event.detail.from).toEqual(1) - expect(test1.classList.contains('active')).toBe(true) - expect(test2.classList.contains('active')).toBe(false) - done() - }) - - stepper.previous() - }) - - it('should stay at the first step if previous called', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const test1 = document.querySelector('#test1') - const test2 = document.querySelector('#test2') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - stepper.previous() - - expect(test1.classList.contains('active')).toBe(true) - expect(test2.classList.contains('active')).toBe(false) - }) - }) - - describe('to', () => { - it('should go to the step number', done => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - const test1 = document.querySelector('#test1') - const test2 = document.querySelector('#test2') - - stepperNode.addEventListener('show.bs-stepper', event => { - expect(event.detail.indexStep).toEqual(1) - expect(event.detail.to).toEqual(1) - expect(event.detail.from).toEqual(0) - }) - - stepperNode.addEventListener('shown.bs-stepper', event => { - expect(event.detail.indexStep).toEqual(1) - expect(event.detail.to).toEqual(1) - expect(event.detail.from).toEqual(0) - expect(test1.classList.contains('active')).toBe(false) - expect(test2.classList.contains('active')).toBe(true) - done() - }) - - stepper.to(2) - }) - - it('should handle wrong inputs', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - const test1 = document.querySelector('#test1') - const test2 = document.querySelector('#test2') - const test3 = document.querySelector('#test3') - - stepper.to(-5) - - expect(test1.classList.contains('active')).toBe(true) - expect(test2.classList.contains('active')).toBe(false) - expect(test3.classList.contains('active')).toBe(false) - - stepper.to(2) - - expect(test1.classList.contains('active')).toBe(false) - expect(test2.classList.contains('active')).toBe(true) - expect(test3.classList.contains('active')).toBe(false) - - stepper.to(stepper._steps.length + 1) - - expect(test1.classList.contains('active')).toBe(true) - expect(test2.classList.contains('active')).toBe(false) - expect(test3.classList.contains('active')).toBe(false) - }) - }) - - describe('reset', () => { - it('should return to the first step', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - const test1 = document.querySelector('#test1') - const test2 = document.querySelector('#test2') - - stepper.next() - - expect(test1.classList.contains('active')).toBe(false) - expect(test2.classList.contains('active')).toBe(true) - - stepper.reset() - - expect(test1.classList.contains('active')).toBe(true) - expect(test2.classList.contains('active')).toBe(false) - }) - }) - - describe('destroy', () => { - it('should clear properties', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode) - - expect(stepperNode['bsStepper']).toEqual(stepper) - expect(stepper._element).toEqual(stepperNode) - expect(stepper._currentIndex).toEqual(0) - expect(stepper._steps.length).toEqual(2) - expect(stepper._stepsContents.length).toEqual(2) - expect(stepper._clickStepLinearListener).toBeTruthy() - expect(stepper._clickStepNonLinearListener).toBeUndefined() - - stepper.destroy() - - expect(stepperNode.bsStepper).toBeUndefined() - expect(stepper._element).toBeUndefined() - expect(stepper._currentIndex).toBeUndefined() - expect(stepper._steps).toBeUndefined() - expect(stepper._stepsContents).toBeUndefined() - expect(stepper._clickStepLinearListener).toBeUndefined() - expect(stepper._clickStepNonLinearListener).toBeUndefined() - }) - - it('should remove event listeners on triggers', () => { - fixture.innerHTML = [ - '
', - '
', - ' ', - '
', - '
', - ' ', - '
', - '
1
', - '
2
', - '
' - ].join('') - - const stepperNode = document.getElementById('myStepper') - const stepper = new Stepper(stepperNode, { linear: false }) - - const trigger1 = document.querySelector('#trigger1') - const trigger2 = document.querySelector('#trigger2') - - spyOn(trigger1, 'removeEventListener') - spyOn(trigger2, 'removeEventListener') - - stepper.destroy() - - expect(trigger1.removeEventListener).toHaveBeenCalled() - expect(trigger2.removeEventListener).toHaveBeenCalled() - }) - }) -}) diff --git a/assets/plugins/bs-stepper/js/listeners.js b/assets/plugins/bs-stepper/js/listeners.js deleted file mode 100644 index 8a92714..0000000 --- a/assets/plugins/bs-stepper/js/listeners.js +++ /dev/null @@ -1,24 +0,0 @@ -import { closest } from './polyfill' -import { customProperty, show } from './util' - -const buildClickStepLinearListener = () => function clickStepLinearListener (event) { - event.preventDefault() -} - -const buildClickStepNonLinearListener = options => function clickStepNonLinearListener (event) { - event.preventDefault() - - const step = closest(event.target, options.selectors.steps) - const stepperNode = closest(step, options.selectors.stepper) - const stepper = stepperNode[customProperty] - const stepIndex = stepper._steps.indexOf(step) - - show(stepperNode, stepIndex, options, () => { - stepper._currentIndex = stepIndex - }) -} - -export { - buildClickStepLinearListener, - buildClickStepNonLinearListener -} diff --git a/assets/plugins/bs-stepper/js/main.js b/assets/plugins/bs-stepper/js/main.js deleted file mode 100644 index b1ef0b0..0000000 --- a/assets/plugins/bs-stepper/js/main.js +++ /dev/null @@ -1,49 +0,0 @@ -var stepper1 -var stepper2 -//var stepper3 -var stepper4 -var stepperForm - - document.addEventListener('DOMContentLoaded', function () { - stepper1 = new Stepper(document.querySelector('#stepper1')) - stepper2 = new Stepper(document.querySelector('#stepper2'), { - linear: false - }) - - stepper3 = new Stepper(document.querySelector('#stepper3')) - - var stepperFormEl = document.querySelector('#stepperForm') - stepperForm = new Stepper(stepperFormEl, { - animation: true - }) - - var btnNextList = [].slice.call(document.querySelectorAll('.btn-next-form')) - var stepperPanList = [].slice.call(stepperFormEl.querySelectorAll('.bs-stepper-pane')) - var inputMailForm = document.getElementById('inputMailForm') - var inputPasswordForm = document.getElementById('inputPasswordForm') - var form = stepperFormEl.querySelector('.bs-stepper-content form') - - btnNextList.forEach(function (btn) { - btn.addEventListener('click', function () { - stepperForm.next() - }) - }) - - stepperFormEl.addEventListener('show.bs-stepper', function (event) { - form.classList.remove('was-validated') - var nextStep = event.detail.indexStep - var currentStep = nextStep - - if (currentStep > 0) { - currentStep-- - } - - var stepperPan = stepperPanList[currentStep] - - if ((stepperPan.getAttribute('id') === 'test-form-1' && !inputMailForm.value.length) - || (stepperPan.getAttribute('id') === 'test-form-2' && !inputPasswordForm.value.length)) { - event.preventDefault() - form.classList.add('was-validated') - } - }) -}) diff --git a/assets/plugins/bs-stepper/js/polyfill.js b/assets/plugins/bs-stepper/js/polyfill.js deleted file mode 100644 index 02eda9d..0000000 --- a/assets/plugins/bs-stepper/js/polyfill.js +++ /dev/null @@ -1,74 +0,0 @@ -let matches = window.Element.prototype.matches -let closest = (element, selector) => element.closest(selector) -let WinEvent = (inType, params) => new window.Event(inType, params) -let createCustomEvent = (eventName, params) => { - const cEvent = new window.CustomEvent(eventName, params) - - return cEvent -} - -/* istanbul ignore next */ -function polyfill () { - if (!window.Element.prototype.matches) { - matches = window.Element.prototype.msMatchesSelector || - window.Element.prototype.webkitMatchesSelector - } - - if (!window.Element.prototype.closest) { - closest = (element, selector) => { - if (!document.documentElement.contains(element)) { - return null - } - - do { - if (matches.call(element, selector)) { - return element - } - - element = element.parentElement || element.parentNode - } while (element !== null && element.nodeType === 1) - - return null - } - } - - if (!window.Event || typeof window.Event !== 'function') { - WinEvent = (inType, params) => { - params = params || {} - const e = document.createEvent('Event') - e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable)) - return e - } - } - - if (typeof window.CustomEvent !== 'function') { - const originPreventDefault = window.Event.prototype.preventDefault - - createCustomEvent = (eventName, params) => { - const evt = document.createEvent('CustomEvent') - - params = params || { bubbles: false, cancelable: false, detail: null } - evt.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail) - evt.preventDefault = function () { - if (!this.cancelable) { - return - } - - originPreventDefault.call(this) - Object.defineProperty(this, 'defaultPrevented', { - get: function () { return true } - }) - } - - return evt - } - } -} - -polyfill() - -export { - closest, - WinEvent, - createCustomEvent -} diff --git a/assets/plugins/bs-stepper/js/util.js b/assets/plugins/bs-stepper/js/util.js deleted file mode 100644 index b772ea8..0000000 --- a/assets/plugins/bs-stepper/js/util.js +++ /dev/null @@ -1,168 +0,0 @@ -import { WinEvent, createCustomEvent } from './polyfill' - -const MILLISECONDS_MULTIPLIER = 1000 - -const ClassName = { - ACTIVE: 'active', - LINEAR: 'linear', - BLOCK: 'dstepper-block', - NONE: 'dstepper-none', - FADE: 'fade', - VERTICAL: 'vertical' -} - -const transitionEndEvent = 'transitionend' -const customProperty = 'bsStepper' - -const show = (stepperNode, indexStep, options, done) => { - const stepper = stepperNode[customProperty] - - if (stepper._steps[indexStep].classList.contains(ClassName.ACTIVE) || stepper._stepsContents[indexStep].classList.contains(ClassName.ACTIVE)) { - return - } - - const showEvent = createCustomEvent('show.bs-stepper', { - cancelable: true, - detail: { - from: stepper._currentIndex, - to: indexStep, - indexStep - } - }) - stepperNode.dispatchEvent(showEvent) - - const activeStep = stepper._steps.filter(step => step.classList.contains(ClassName.ACTIVE)) - const activeContent = stepper._stepsContents.filter(content => content.classList.contains(ClassName.ACTIVE)) - - if (showEvent.defaultPrevented) { - return - } - - if (activeStep.length) { - activeStep[0].classList.remove(ClassName.ACTIVE) - } - if (activeContent.length) { - activeContent[0].classList.remove(ClassName.ACTIVE) - - if (!stepperNode.classList.contains(ClassName.VERTICAL) && !stepper.options.animation) { - activeContent[0].classList.remove(ClassName.BLOCK) - } - } - - showStep(stepperNode, stepper._steps[indexStep], stepper._steps, options) - showContent(stepperNode, stepper._stepsContents[indexStep], stepper._stepsContents, activeContent, done) -} - -const showStep = (stepperNode, step, stepList, options) => { - stepList.forEach(step => { - const trigger = step.querySelector(options.selectors.trigger) - - trigger.setAttribute('aria-selected', 'false') - // if stepper is in linear mode, set disabled attribute on the trigger - if (stepperNode.classList.contains(ClassName.LINEAR)) { - trigger.setAttribute('disabled', 'disabled') - } - }) - - step.classList.add(ClassName.ACTIVE) - const currentTrigger = step.querySelector(options.selectors.trigger) - - currentTrigger.setAttribute('aria-selected', 'true') - // if stepper is in linear mode, remove disabled attribute on current - if (stepperNode.classList.contains(ClassName.LINEAR)) { - currentTrigger.removeAttribute('disabled') - } -} - -const showContent = (stepperNode, content, contentList, activeContent, done) => { - const stepper = stepperNode[customProperty] - const toIndex = contentList.indexOf(content) - const shownEvent = createCustomEvent('shown.bs-stepper', { - cancelable: true, - detail: { - from: stepper._currentIndex, - to: toIndex, - indexStep: toIndex - } - }) - - function complete () { - content.classList.add(ClassName.BLOCK) - content.removeEventListener(transitionEndEvent, complete) - stepperNode.dispatchEvent(shownEvent) - done() - } - - if (content.classList.contains(ClassName.FADE)) { - content.classList.remove(ClassName.NONE) - const duration = getTransitionDurationFromElement(content) - - content.addEventListener(transitionEndEvent, complete) - if (activeContent.length) { - activeContent[0].classList.add(ClassName.NONE) - } - - content.classList.add(ClassName.ACTIVE) - emulateTransitionEnd(content, duration) - } else { - content.classList.add(ClassName.ACTIVE) - content.classList.add(ClassName.BLOCK) - stepperNode.dispatchEvent(shownEvent) - done() - } -} - -const getTransitionDurationFromElement = element => { - if (!element) { - return 0 - } - - // Get transition-duration of the element - let transitionDuration = window.getComputedStyle(element).transitionDuration - const floatTransitionDuration = parseFloat(transitionDuration) - - // Return 0 if element or transition duration is not found - if (!floatTransitionDuration) { - return 0 - } - - // If multiple durations are defined, take the first - transitionDuration = transitionDuration.split(',')[0] - - return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER -} - -const emulateTransitionEnd = (element, duration) => { - let called = false - const durationPadding = 5 - const emulatedDuration = duration + durationPadding - function listener () { - called = true - element.removeEventListener(transitionEndEvent, listener) - } - - element.addEventListener(transitionEndEvent, listener) - window.setTimeout(() => { - if (!called) { - element.dispatchEvent(WinEvent(transitionEndEvent)) - } - - element.removeEventListener(transitionEndEvent, listener) - }, emulatedDuration) -} - -const detectAnimation = (contentList, options) => { - if (options.animation) { - contentList.forEach(content => { - content.classList.add(ClassName.FADE) - content.classList.add(ClassName.NONE) - }) - } -} - -export { - show, - ClassName, - customProperty, - detectAnimation -} diff --git a/assets/plugins/chartjs/js/Chart.extension.js b/assets/plugins/chartjs/js/Chart.extension.js deleted file mode 100644 index 188c844..0000000 --- a/assets/plugins/chartjs/js/Chart.extension.js +++ /dev/null @@ -1,130 +0,0 @@ -// -// Chart extension for making the bars rounded -// Code from: https://codepen.io/jedtrow/full/ygRYgo -// - -Chart.elements.Rectangle.prototype.draw = function() { - - var ctx = this._chart.ctx; - var vm = this._view; - var left, right, top, bottom, signX, signY, borderSkipped, radius; - var borderWidth = vm.borderWidth; - // Set Radius Here - // If radius is large enough to cause drawing errors a max radius is imposed - var cornerRadius = 6; - - if (!vm.horizontal) { - // bar - left = vm.x - vm.width / 2; - right = vm.x + vm.width / 2; - top = vm.y; - bottom = vm.base; - signX = 1; - signY = bottom > top ? 1 : -1; - borderSkipped = vm.borderSkipped || 'bottom'; - } else { - // horizontal bar - left = vm.base; - right = vm.x; - top = vm.y - vm.height / 2; - bottom = vm.y + vm.height / 2; - signX = right > left ? 1 : -1; - signY = 1; - borderSkipped = vm.borderSkipped || 'left'; - } - - // Canvas doesn't allow us to stroke inside the width so we can - // adjust the sizes to fit if we're setting a stroke on the line - if (borderWidth) { - // borderWidth shold be less than bar width and bar height. - var barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)); - borderWidth = borderWidth > barSize ? barSize : borderWidth; - var halfStroke = borderWidth / 2; - // Adjust borderWidth when bar top position is near vm.base(zero). - var borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0); - var borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0); - var borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0); - var borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0); - // not become a vertical line? - if (borderLeft !== borderRight) { - top = borderTop; - bottom = borderBottom; - } - // not become a horizontal line? - if (borderTop !== borderBottom) { - left = borderLeft; - right = borderRight; - } - } - - ctx.beginPath(); - ctx.fillStyle = vm.backgroundColor; - ctx.strokeStyle = vm.borderColor; - ctx.lineWidth = borderWidth; - - // Corner points, from bottom-left to bottom-right clockwise - // | 1 2 | - // | 0 3 | - var corners = [ - [left, bottom], - [left, top], - [right, top], - [right, bottom] - ]; - - // Find first (starting) corner with fallback to 'bottom' - var borders = ['bottom', 'left', 'top', 'right']; - var startCorner = borders.indexOf(borderSkipped, 0); - if (startCorner === -1) { - startCorner = 0; - } - - function cornerAt(index) { - return corners[(startCorner + index) % 4]; - } - - // Draw rectangle from 'startCorner' - var corner = cornerAt(0); - ctx.moveTo(corner[0], corner[1]); - - for (var i = 1; i < 4; i++) { - corner = cornerAt(i); - nextCornerId = i + 1; - if (nextCornerId == 4) { - nextCornerId = 0 - } - - nextCorner = cornerAt(nextCornerId); - - width = corners[2][0] - corners[1][0]; - height = corners[0][1] - corners[1][1]; - x = corners[1][0]; - y = corners[1][1]; - - var radius = cornerRadius; - - // Fix radius being too large - if (radius > height / 2) { - radius = height / 2; - } - if (radius > width / 2) { - radius = width / 2; - } - - ctx.moveTo(x + radius, y); - ctx.lineTo(x + width - radius, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + radius); - ctx.lineTo(x + width, y + height - radius); - ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); - ctx.lineTo(x + radius, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - radius); - ctx.lineTo(x, y + radius); - ctx.quadraticCurveTo(x, y, x + radius, y); - - } - - ctx.fill(); - if (borderWidth) { - ctx.stroke(); - } -}; diff --git a/assets/plugins/chartjs/js/chart.js b/assets/plugins/chartjs/js/chart.js deleted file mode 100644 index d819689..0000000 --- a/assets/plugins/chartjs/js/chart.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Skipped minification because the original files appears to be already minified. - * Original file: /npm/chart.js@4.2.1/dist/chart.umd.js - * - * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - */ -/*! - * Chart.js v4.2.1 - * https://www.chartjs.org - * (c) 2023 Chart.js Contributors - * Released under the MIT License - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return jo},get Decimation(){return Uo},get Filler(){return ha},get Legend(){return fa},get SubTitle(){return ba},get Title(){return pa},get Tooltip(){return La}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function W(t){return!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set;let i,s;for(i=0,s=t.length;i{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=J(Math.min(it(r,a.axis,h).lo,i?s:it(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?J(Math.max(it(r,a.axis,c,!0).hi+1,i?0:it(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class bt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var xt=new bt; -/*! - * @kurkle/color v0.3.0 - * https://github.com/kurkle/color#readme - * (c) 2022 Jukka Kurkela - * Released under the MIT License - */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const 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},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Zt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Jt(t)?t:new Zt(t)}function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(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),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.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=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.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),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.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:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width: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:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function be(t,e){return me(t).getPropertyValue(e)}const xe=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=xe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ye(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const ve=t=>Math.round(10*t)/10;function Me(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=ve(Math.min(h,a,l.maxWidth)),c=ve(Math.min(c,r,l.maxHeight)),h&&!c&&(c=ve(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=ve(Math.floor(c*s))),{width:h,height:c}}function we(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const ke=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Se(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function Pe(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function De(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Ce(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Ee(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);s(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){k(s)||(s=Qe("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>He([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Xe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Qe(Ye(o,t),i),k(n))return Ue(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ti(t).includes(e),ownKeys:t=>ti(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function je(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:$e(t,s),setContext:e=>je(t,e,i,s),override:n=>je(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Xe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),Ue(t,e)&&(e=Ze(n._scopes,n,t,e));return e}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(k(a.index)&&s(t))e=e[a.index%e.length];else if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Ze(s,n,t,o);e.push(je(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Ue(e,h)&&(h=je(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function $e(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ye=(t,e)=>t?t+w(e):e,Ue=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Xe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function qe(t,e,i){return S(t)?t(e,i):t}const Ke=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ge(t,e,i,s,n){for(const o of e){const e=Ke(i,o);if(e){t.add(e);const o=qe(e._fallback,i,n);if(k(o)&&o!==i&&o!==s)return o}else if(!1===e&&k(s)&&i!==s)return null}return!1}function Ze(t,e,i,s){const a=e._rootScopes,r=qe(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Je(h,l,i,r||i,s);return null!==c&&((!k(r)||r===i||(c=Je(h,l,r,c,s),null!==c))&&He(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Je(t,e,i,s,n){for(;i;)i=Ge(t,e,i,s,n);return i}function Qe(t,e){for(const i of e){if(!i)continue;const e=i[t];if(k(e))return e}}function ti(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ei(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function oi(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;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 ai(t,e="x"){const i=ni(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=si(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ai(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,ci=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),di=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,ui={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>hi(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>hi(t)?t:ci(t,.075,.3),easeOutElastic:t=>hi(t)?t:di(t,.075,.3),easeInOutElastic(t){const e=.1125;return hi(t)?t:t<.5?.5*ci(2*t,e,.45):.5+.5*di(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-ui.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*ui.easeInBounce(2*t):.5*ui.easeOutBounce(2*t-1)+.5};function fi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function pi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=fi(t,n,i),r=fi(n,o,i),l=fi(o,e,i),h=fi(a,r,i),c=fi(r,l,i);return fi(h,c,i)}const mi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,bi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function xi(t,e){const i=(""+t).match(mi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function _i(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+a(t)||0;return i}function yi(t){return _i(t,{top:"y",right:"x",bottom:"y",left:"x"})}function vi(t){return _i(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Mi(t){const e=yi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function wi(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(bi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:xi(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=Pe(n),n}function ki(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Pi(t,e){return Object.assign(Object.create(t),e)}function Di(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ci(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Oi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Ai(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ti({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Li(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Ai(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Ai(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hx||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ti({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(Ti({start:_,end:d,loop:u,count:a,style:f})),g}function Ei(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Ii(t,[{start:a,end:r,loop:o}],i,e);return Ii(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Yi={evaluateInteractionItems:Ni,modes:{index(t,e,i,s){const n=ye(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Wi(t,n,o,s,a):ji(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ye(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Wi(t,n,o,s,a):ji(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tWi(t,ye(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ye(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return ji(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>$i(t,ye(e,t),"x",i.intersect,s),y:(t,e,i,s)=>$i(t,ye(e,t),"y",i.intersect,s)}};const Ui=["left","top","right","bottom"];function Xi(t,e){return t.filter((t=>t.pos===e))}function qi(t,e){return t.filter((t=>-1===Ui.indexOf(t.pos)&&t.box.axis===e))}function Ki(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Gi(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ui.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function es(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Ki(Xi(e,"left"),!0),n=Ki(Xi(e,"right")),o=Ki(Xi(e,"top"),!0),a=Ki(Xi(e,"bottom")),r=qi(e,"x"),l=qi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Xi(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);Ji(f,Mi(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Gi(l.concat(h),d);es(r.fullSize,g,d,p),es(l,g,d,p),es(h,g,d,p)&&es(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),ss(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,ss(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class os{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class as extends os{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const rs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ls=t=>null===t||""===t;const hs=!!ke&&{passive:!0};function cs(t,e,i){t.canvas.removeEventListener(e,i,hs)}function ds(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function us(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ds(i.addedNodes,s),e=e&&!ds(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function fs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ds(i.removedNodes,s),e=e&&!ds(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const gs=new Map;let ps=0;function ms(){const t=window.devicePixelRatio;t!==ps&&(ps=t,gs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function bs(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){gs.size||window.addEventListener("resize",ms),gs.set(t,e)}(t,o),a}function xs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){gs.delete(t),gs.size||window.removeEventListener("resize",ms)}(t)}function _s(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=rs[t.type]||t.type,{x:s,y:n}=ye(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,hs)}(s,e,n),n}class ys extends os{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ls(n)){const e=Se(t,"width");void 0!==e&&(t.width=e)}if(ls(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Se(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:us,detach:fs,resize:bs}[e]||_s;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:xs,detach:xs,resize:xs}[e]||cs)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return Me(t,e,i,s)}isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}}function vs(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?as:ys}var Ms=Object.freeze({__proto__:null,_detectPlatform:vs,BasePlatform:os,BasicPlatform:as,DomPlatform:ys});const ws="transparent",ks={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||ws),n=s.valid&&Qt(e||ws);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Ss{constructor(t,e,i,s){const n=e[i];s=ki([t.to,s,n,t.from]);const o=ki([t.from,n,s]);this._active=!0,this._fn=t.fn||ks[t.type||typeof o],this._easing=ui[t.easing]||ui.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=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=ki([t.to,e,s,t.from]),this._from=ki([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new Ss(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(xt.add(this._chart,i),!0):void 0}}function Ds(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Cs(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Es(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Is(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const zs=t=>"reset"===t||"none"===t,Fs=(t,e)=>e?t:Object.assign({},t);class Vs{static defaults={};static datasetElementType=null;static dataElementType=null;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.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=As(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Is(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Rs(t,"x")),o=e.yAxisID=l(i.yAxisID,Rs(t,"y")),a=e.rAxisID=l(i.rAxisID,Rs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Is(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Cs(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Fs(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Ps(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||zs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){zs(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!zs(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ns(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for(Ws(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,js=(t,e)=>Math.min(e||t,t);function $s(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Us(t){return t.drawTicks?t.tickLength:0}function Xs(t,e){if(!t.display)return 0;const i=wi(t.font,e),s=Mi(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function qs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class Ks extends Bs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,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._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Si(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=J(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Us(t.grid)-e.padding-Xs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(J((h.highest.height+6)/o,-1,1)),Math.asin(J(a/r,-1,1))-Math.asin(J(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Xs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Us(n)+o):(t.height=this.maxHeight,t.width=Us(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}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,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+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(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Oe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Us(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(t){return Oe(i,t,p)};let x,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)x=b(this.bottom),w=this.bottom-u,S=x-m,D=b(t.top)+m,O=t.bottom;else if("bottom"===a)x=b(this.top),D=t.top,O=b(t.bottom)-m,w=x+m,S=this.top+u;else if("left"===a)x=b(this.right),M=this.right-u,k=x-m,P=b(t.left)+m,C=t.right;else if("right"===a)x=b(this.left),P=t.left,C=b(t.right)-m,M=x+m,k=this.left+u;else if("x"===e){if("center"===a)x=b((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=x+m,S=w+u}else if("y"===e){if("center"===a)x=b((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}M=x-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class Zs{constructor(){this.controllers=new Gs(Vs,"datasets",!0),this.elements=new Gs(Bs,"elements"),this.plugins=new Gs(Object,"plugins"),this.scales=new Gs(Ks,"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,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function tn(t,e){return e||!1!==t?!0===t?{}:t:null}function en(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function sn(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function nn(t,e){if("x"===t||"y"===t||"r"===t)return t;var i;if(t=e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&nn(t[0].toLowerCase(),e))return t;throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`)}function on(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=function(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=sn(t.type,e),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!o(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=nn(t,e),l=function(t,e){return t===e?"_index_":"_value_"}(r,n),h=i.scales||{};a[t]=x(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||sn(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),x(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];x(e,[ue.scales[e.type],ue.scale])})),a}(t,e)}function an(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const rn=new Map,ln=new Set;function hn(t,e){let i=rn.get(t);return i||(i=e(),rn.set(t,i),ln.add(i)),i}const cn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class dn{constructor(t){this._config=function(t){return(t=t||{}).data=an(t.data),on(t),t}(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=an(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),on(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return hn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return hn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return hn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return hn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>cn(r,t,e)))),e.forEach((t=>cn(r,s,t))),e.forEach((t=>cn(r,re[n]||{},t))),e.forEach((t=>cn(r,ue,t))),e.forEach((t=>cn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),ln.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=un(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=$e(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||fn(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=je(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=un(this._resolverCache,t,i);return o(e)?je(n,e,void 0,s):n}}function un(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:He(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const fn=t=>o(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||S(t[i])),!1);const gn=["top","bottom","left","right","chartArea"];function pn(t,e){return"top"===t||"bottom"===t||-1===gn.indexOf(t)&&"x"===e}function mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function bn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function xn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function _n(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const yn={},vn=t=>{const e=_n(t);return Object.values(yn).filter((t=>t.canvas===e)).pop()};function Mn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class wn{static defaults=ue;static instances=yn;static overrides=re;static registry=Js;static version="4.2.1";static getChart=vn;static register(...t){Js.add(...t),kn()}static unregister(...t){Js.remove(...t),kn()}constructor(t,e){const s=this.config=new dn(e),n=_n(t),o=vn(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.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||vs(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,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 Qs,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],yn[this.id]=this,r&&l?(xt.listen(this,"complete",bn),xt.listen(this,"progress",xn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/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}get registry(){return Js}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():we(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Ae(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,we(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=nn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=nn(o,n),r=l(n.type,e.dtype);void 0!==n.position&&pn(n.position,a)===pn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(Js.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{ns.configure(this,t,t.options),ns.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(mn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{ns.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){Mn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ns.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t){const{xScale:e,yScale:i}=t;if(e&&i)return{left:e.left,right:e.right,top:i.top,bottom:i.bottom}}(t)||this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Re(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&Ie(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Ee(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Yi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={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},i.push(s)),s}getContext(){return this.$context||(this.$context=Pi(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function kn(){return u(wn.instances,(t=>t._plugins.invalidate()))}function Sn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Pn{static override(t){Object.assign(Pn.prototype,t)}constructor(t){this.options=t||{}}init(){}formats(){return Sn()}parse(){return Sn()}format(){return Sn()}add(){return Sn()}diff(){return Sn()}startOf(){return Sn()}endOf(){return Sn()}}var Dn={_date:Pn};function Cn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function An(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};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){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nZ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Z(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),b=g(C,h,d),x=g(C+E,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ei.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Vn=Object.freeze({__proto__:null,BarController:class extends Vs{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return An(t,e,i,s)}parseArrayData(t,e,i,s){return An(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(b-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);b=Math.max(Math.min(b,h),o),d=b+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;b+=t,u-=t}return{size:u,base:b,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,l="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=b?g:{};if(i=x){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),b||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PolarAreaController:Fn,PieController:class extends zn{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},RadarController:class extends Vs{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ei.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Bn(t,e,i,s){const n=_i(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return J(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:J(n.innerStart,0,a),innerEnd:J(n.innerEnd,0,a)}}function Nn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Wn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Bn(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,O=m+y/P,A=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Nn(w,S,a,r);t.arc(e.x,e.y,_,S,b+E)}const i=Nn(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Nn(D,A,a,r);t.arc(e.x,e.y,v,b+E,A+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Nn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=Nn(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Nn(M,k,a,r);t.arc(e.x,e.y,x,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Hn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c}=l,d="inner"===l.borderAlign;if(!h)return;d?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let u=e.endAngle;if(o){Wn(t,e,i,s,u,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,u),o||(Wn(t,e,i,s,u,n),t.stroke())}function jn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function $n(t,e,i){t.lineTo(i.x,i.y)}function Yn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function qn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Xn:Un}const Kn="function"==typeof Path2D;function Gn(t,e,i,s){Kn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),jn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=qn(e);for(const r of n)jn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Zn extends Bs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};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){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;li(this._points,i,t,s,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=Ri(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ei(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?gi:t.tension||"monotone"===t.cubicInterpolationMode?pi:fi}(i);let l,h;for(l=0,h=o.length;l=O||Z(n,a,r),g=tt(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Wn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function ro(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!s(a),x=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),MMath.floor(z(t)),fo=(t,e)=>Math.pow(10,uo(t)+e);function go(t){return 1===t/Math.pow(10,uo(t))}function po(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function mo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=uo(e);let o=function(t,e){let i=uo(e-t);for(;po(t,e,i)>10;)i++;for(;po(t,e,i)<10;)i--;return Math.min(i,uo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:go(g),significand:u}),s}class bo extends Ks{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=ho.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===fo(this.min,0)?fo(this.min,-1):fo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(fo(i,-1)),o(fo(s,1)))),i<=0&&n(fo(s,-1)),s<=0&&o(fo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=mo({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function xo(t){const e=t.ticks;if(e.display&&t.display){const t=Mi(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function _o(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function yo(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Mo(t){return 0===t||180===t?"center":t<180?"left":"right"}function wo(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function ko(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function So(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=Mi(xo(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/xo(this.options))}generateTickLabels(t){ho.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?yo(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;o--){const e=n.setContext(t.getPointLabelContext(o)),a=wi(e.font),{x:r,y:l,textAlign:h,left:c,top:d,right:u,bottom:f}=t._pointLabelItems[o],{backdropColor:g}=e;if(!s(g)){const t=vi(e.borderRadius),s=Mi(e.backdropPadding);i.fillStyle=g;const n=c-s.left,o=d-s.top,a=u-c+s.width,r=f-d+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),We(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}Ve(i,t._pointLabels[o],r,l+a.lineHeight/2,a,{color:e.color,textAlign:h,textBaseline:"middle"})}}(this,a),n.display&&this.ticks.forEach(((t,e)=>{if(0!==e){l=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),s=n.setContext(i),r=o.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),So(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,s,l,a,r)}})),i.display){for(t.save(),r=a-1;r>=0;r--){const s=i.setContext(this.getPointLabelContext(r)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),h=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(h.x,h.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=wi(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Mi(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ve(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}const Do={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}},Co=Object.keys(Do);function Oo(t,e){return t-e}function Ao(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!W(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function To(t,e,i,s){const n=Co.length;for(let o=Co.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Eo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Ro extends Ks{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new Dn._date(t.adapters.date);s.init(e),x(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Ao(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?To(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=Co.length-1;o>=Co.indexOf(i);o--){const i=Co[o];if(Do[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Co[i?Co.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Co.indexOf(t)+1,i=Co.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=J(s,0,o),n=J(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||To(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=W(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;dt-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var zo=Object.freeze({__proto__:null,CategoryScale:class extends Ks{static id="category";static defaults={ticks:{callback:ro}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:J(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:ao(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return ro.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:co,LogarithmicScale:bo,RadialLinearScale:Po,TimeScale:Ro,TimeSeriesScale:class extends Ro{static id="timeseries";static defaults=Ro.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Io(e,this.min),this._tableRange=Io(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot.replace("rgb(","rgba(").replace(")",", 0.5)")));function Bo(t){return Fo[t%Fo.length]}function No(t){return Vo[t%Vo.length]}function Wo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof zn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Bo(e++))),e}(i,e):n instanceof Fn?e=function(t,e){return t.backgroundColor=t.data.map((()=>No(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Bo(e),t.backgroundColor=No(e),++e}(i,e))}}function Ho(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var jo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(Ho(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&Ho(o)))return;var a;const r=Wo(t);s.forEach(r)}};function $o(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Yo(t){t.data.datasets.forEach((t=>{$o(t)}))}var Uo={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Yo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===ki([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=J(it(e,o.axis,a).lo,0,i-1)),s=h?J(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void $o(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}o>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Yo(t)}};function Xo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function qo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function Ko(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function Go(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=qo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new Zn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function Zo(t){return t&&!1!==t.fill}function Jo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function Qo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function ta(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&na(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;Zo(i)&&na(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;Zo(s)&&"beforeDatasetDraw"===i.drawTime&&na(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const ca=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class da extends Bs{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,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,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(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=wi(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=ca(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=ua(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Di(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Re(t,this),this._draw(),Ie(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Di(t.rtl,this.left,this.width),h=wi(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=ca(o,d),b=this.isHorizontal(),x=this._computeTitleHeight();f=b?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:ft(n,this.top+x+c,this.bottom-e[0].height),line:0},Ci(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),b?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+x+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Le(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=vi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?We(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,b?S+k:this.right,t.rtl),function(t,e,i){Ve(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),b)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=ua(y,t)}else f.y+=_})),Oi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=wi(e.font),s=Mi(e.padding);if(!e.display)return;const n=Di(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ve(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=wi(t.font),i=Mi(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=Mi(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ga extends Bs{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){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=Mi(i.padding);const o=s*wi(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=wi(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ve(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var pa={id:"title",_element:ga,start(t,e,i){!function(t,e){const i=new ga({ctx:t.ctx,options:e,chart:t});ns.configure(t,i,e),ns.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ns.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ns.configure(t,s,i),s.options=i},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}};const ma=new WeakMap;var ba={id:"subtitle",start(t,e,i){const s=new ga({ctx:t.ctx,options:i,chart:t});ns.configure(t,s,i),ns.addBox(t,s),ma.set(t,s)},stop(t){ns.removeBox(t,ma.get(t)),ma.delete(t)},beforeUpdate(t,e,i){const s=ma.get(t);ns.configure(t,s,i),s.options=i},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}};const xa={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function va(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ma(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=wi(e.bodyFont),h=wi(e.titleFont),c=wi(e.footerFont),d=o.length,f=n.length,g=s.length,p=Mi(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function wa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function ka(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||wa(t,e,i,s),yAlign:s}}function Sa(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=vi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:J(g,0,s.width-e.width),y:J(p,0,s.height-e.height)}}function Pa(t,e,i){const s=Mi(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Da(t){return _a([],ya(t))}function Ca(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Oa={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Ca(i,t);_a(e.before,ya(Aa(n,"beforeLabel",this,t))),_a(e.lines,Aa(n,"label",this,t)),_a(e.after,ya(Aa(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Da(Aa(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Aa(i,"beforeFooter",this,t),n=Aa(i,"footer",this,t),o=Aa(i,"afterFooter",this,t);let a=[];return a=_a(a,ya(s)),a=_a(a,ya(n)),a=_a(a,ya(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Ca(t.callbacks,e);s.push(Aa(i,"labelColor",this,e)),n.push(Aa(i,"labelPointStyle",this,e)),o.push(Aa(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=xa[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ma(this,i),a=Object.assign({},t,e),r=ka(this.chart,i,a),l=Sa(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=vi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Di(i.rtl,this.x,this.width);for(t.x=Pa(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=wi(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,We(t,{x:e,y:p,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),We(t,{x:i,y:p+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,p,h,l),t.strokeRect(e,p,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,p+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=wi(i.bodyFont);let d=c.lineHeight,f=0;const g=Di(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Pa(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=xa[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ma(this,t),a=Object.assign({},i,this._size),r=ka(e,t,a),l=Sa(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Mi(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=i,this.drawBackground(n,t,s,e),Ci(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Oi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=xa[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var La={id:"tooltip",_element:Ta,positioners:xa,afterInit(t,e,i){i&&(t.tooltip=new Ta({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.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:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.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:Oa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return wn.register(Vn,zo,oo,t),wn.helpers={...Vi},wn._adapters=Dn,wn.Animation=Ss,wn.Animations=Ps,wn.animator=xt,wn.controllers=Js.controllers.items,wn.DatasetController=Vs,wn.Element=Bs,wn.elements=oo,wn.Interaction=Yi,wn.layouts=ns,wn.platforms=Ms,wn.Scale=Ks,wn.Ticks=ae,Object.assign(wn,Vn,zo,oo,t,Ms),wn.Chart=wn,"undefined"!=typeof window&&(window.Chart=wn),wn})); -//# sourceMappingURL=chart.umd.js.map diff --git a/assets/plugins/chartjs/js/chartjs-custom.js b/assets/plugins/chartjs/js/chartjs-custom.js deleted file mode 100644 index 0bfe39d..0000000 --- a/assets/plugins/chartjs/js/chartjs-custom.js +++ /dev/null @@ -1,408 +0,0 @@ -$(function() { - - - // chart1 - var ctx = document.getElementById('chart1').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'line', - data: { - labels: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], - datasets: [{ - label: 'Google', - data: [6, 20, 14, 12, 17, 8, 10], - backgroundColor: [ - '#008cff' - ], - lineTension: 0.4, - borderColor: [ - '#008cff' - ], - borderWidth: 3 - }, - { - label: 'Facebook', - data: [5, 30, 16, 23, 8, 14, 11], - backgroundColor: [ - '#fd3550' - ], - tension: 0.4, - borderColor: [ - '#fd3550' - ], - borderWidth: 3 - }] - }, - options: { - maintainAspectRatio: false, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - scales: { - y: { - beginAtZero: true - } - } - } - }); - - - - // chart2 - var ctx = document.getElementById('chart2').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'bar', - data: { - labels: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], - datasets: [{ - label: 'Google', - data: [18, 25, 14, 12, 17, 8, 10], - backgroundColor: [ - '#0d6efd' - ], - lineTension: 0, - borderColor: [ - '#0d6efd' - ], - borderWidth: 3 - }, - { - label: 'Facebook', - data: [12, 30, 16, 23, 8, 14, 11], - backgroundColor: [ - '#23ac2c' - ], - tension: 0, - borderColor: [ - '#23ac2c' - ], - borderWidth: 3 - }] - }, - options: { - maintainAspectRatio: false, - barPercentage: 0.6, - categoryPercentage: 0.5, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - scales: { - y: { - beginAtZero: true - } - } - } - }); - - - // chart3 - var ctx = document.getElementById('chart3').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'pie', - data: { - labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], - datasets: [{ - data: [12, 19, 3, 5, 2, 3], - backgroundColor: [ - '#0d6efd', - '#6f42c1', - '#d63384', - '#fd7e14', - '#23ac2c', - '#0dcaf0' - ], - borderWidth: 1.5 - }] - }, - options: { - maintainAspectRatio: false, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - - } - }); - - - - // chart4 - var ctx = document.getElementById('chart4').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'doughnut', - data: { - labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], - datasets: [{ - data: [12, 19, 3, 5, 2, 3], - backgroundColor: [ - '#0d6efd', - '#6f42c1', - '#d63384', - '#fd7e14', - '#23ac2c', - '#0dcaf0' - ], - borderWidth: 1 - }] - }, - options: { - maintainAspectRatio: false, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - - } - }); - - - - - // chart5 - var ctx = document.getElementById('chart5').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'radar', - data: { - labels: [ - 'Eating', - 'Drinking', - 'Sleeping', - 'Designing', - 'Coding', - 'Cycling', - 'Running' - ], - datasets: [{ - label: 'My First Dataset', - data: [65, 59, 90, 81, 56, 55, 40], - fill: true, - backgroundColor: 'rgba(255, 99, 132, 0.2)', - borderColor: 'rgb(255, 99, 132)', - pointBackgroundColor: 'rgb(255, 99, 132)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgb(255, 99, 132)' - }, { - label: 'My Second Dataset', - data: [28, 48, 40, 19, 96, 27, 100], - fill: true, - backgroundColor: 'rgba(54, 162, 235, 0.2)', - borderColor: 'rgb(54, 162, 235)', - pointBackgroundColor: 'rgb(54, 162, 235)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgb(54, 162, 235)' - }] - }, - options: { - maintainAspectRatio: false, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - elements: { - line: { - borderWidth: 3 - } - } - }, - }); - - - - - // chart6 - var ctx = document.getElementById('chart6').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'polarArea', - data: { - labels: [ - 'Red', - 'Purple', - 'Yellow', - 'Grey', - 'Green' - ], - datasets: [{ - label: 'My First Dataset', - data: [11, 16, 7, 3, 14], - backgroundColor: [ - '#0d6efd', - '#6f42c1', - '#d63384', - '#fd7e14', - '#23ac2c', - '#0dcaf0' - ], - }] - }, - options: { - maintainAspectRatio: false, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - elements: { - line: { - borderWidth: 3 - } - } - }, - }); - - - - -// chart7 -var ctx = document.getElementById('chart7').getContext('2d'); -var myChart = new Chart(ctx, { - type: 'bar', - data: { - labels: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], - datasets: [{ - label: 'Google', - data: [18, 25, 14, 12, 17, 8, 10], - backgroundColor: [ - '#fd3550' - ], - lineTension: 0, - borderColor: [ - '#fd3550' - ], - borderWidth: 0 - } - ] - }, - options: { - maintainAspectRatio: false, - barPercentage: 0.5, - categoryPercentage: 0.7, - indexAxis: 'y', - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - scales: { - y: { - beginAtZero: true - } - } - } -}); - - - - - // chart8 - var ctx = document.getElementById('chart8').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'line', - data: { - labels: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], - datasets: [{ - type: 'bar', - label: 'Google', - data: [6, 20, 14, 12, 17, 8, 10], - backgroundColor: [ - '#008cff' - ], - lineTension: 0.4, - borderColor: [ - '#008cff' - ], - borderWidth: 1 - }, - { - type: 'line', - label: 'Facebook', - data: [5, 30, 16, 23, 8, 14, 11], - backgroundColor: [ - '#fd3550' - ], - tension: 0.4, - borderColor: [ - '#fd3550' - ], - borderWidth: 4 - }] - }, - options: { - maintainAspectRatio: false, - barPercentage: 0.5, - categoryPercentage: 0.5, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - scales: { - y: { - beginAtZero: true - } - } - } - }); - - - - - // chart9 - var ctx = document.getElementById('chart9').getContext('2d'); - var myChart = new Chart(ctx, { - type: 'line', - data: { - labels: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], - datasets: [{ - label: 'Facebook', - data: [5, 30, 16, 23, 8, 14, 2], - backgroundColor: [ - '#23ac2c' - ], - fill: { - target: 'origin', - above: 'rgb(21 202 32 / 20%)', // Area will be red above the origin - //below: 'rgb(21 202 32 / 100%)' // And blue below the origin - }, - tension: 0.4, - borderColor: [ - '#23ac2c' - ], - borderWidth: 4 - }] - }, - options: { - maintainAspectRatio: false, - barPercentage: 0.5, - categoryPercentage: 0.5, - plugins: { - legend: { - position:'bottom', - display: true, - } - }, - scales: { - y: { - beginAtZero: true - } - } - } - }); - - -}); \ No newline at end of file diff --git a/assets/plugins/datatable/css/dataTables.bootstrap5.min.css b/assets/plugins/datatable/css/dataTables.bootstrap5.min.css deleted file mode 100644 index 8bd8d86..0000000 --- a/assets/plugins/datatable/css/dataTables.bootstrap5.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! Bootstrap 5 integration for DataTables - * - * ©2020 SpryMedia Ltd, all rights reserved. - * License: MIT datatables.net/license/mit - */table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:.85em}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable>thead>tr>th:active,table.dataTable>thead>tr>td:active{outline:none}table.dataTable>thead>tr>th:not(.sorting_disabled),table.dataTable>thead>tr>td:not(.sorting_disabled){padding-right:30px}table.dataTable>thead .sorting,table.dataTable>thead .sorting_asc,table.dataTable>thead .sorting_desc,table.dataTable>thead .sorting_asc_disabled,table.dataTable>thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable>thead .sorting:before,table.dataTable>thead .sorting:after,table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_asc:after,table.dataTable>thead .sorting_desc:before,table.dataTable>thead .sorting_desc:after,table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_asc_disabled:after,table.dataTable>thead .sorting_desc_disabled:before,table.dataTable>thead .sorting_desc_disabled:after{position:absolute;bottom:.9em;display:block;opacity:.3}table.dataTable>thead .sorting:before,table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_desc:before,table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_desc_disabled:before{right:1em;content:"↑"}table.dataTable>thead .sorting:after,table.dataTable>thead .sorting_asc:after,table.dataTable>thead .sorting_desc:after,table.dataTable>thead .sorting_asc_disabled:after,table.dataTable>thead .sorting_desc_disabled:after{right:.5em;content:"↓"}table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_desc:after{opacity:1}table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:last-child{padding-right:0} diff --git a/assets/plugins/datatable/js/dataTables.bootstrap5.min.js b/assets/plugins/datatable/js/dataTables.bootstrap5.min.js deleted file mode 100644 index d82751a..0000000 --- a/assets/plugins/datatable/js/dataTables.bootstrap5.min.js +++ /dev/null @@ -1,188 +0,0 @@ -/*! - DataTables Bootstrap 5 integration - 2020 SpryMedia Ltd - datatables.net/license -*/ -var $jscomp = $jscomp || {}; -$jscomp.scope = {}; -$jscomp.findInternal = function(a, b, c) { - a instanceof String && (a = String(a)); - for (var e = a.length, d = 0; d < e; d++) { - var f = a[d]; - if (b.call(c, f, d, a)) return { - i: d, - v: f - } - } - return { - i: -1, - v: void 0 - } -}; -$jscomp.ASSUME_ES5 = !1; -$jscomp.ASSUME_NO_NATIVE_MAP = !1; -$jscomp.ASSUME_NO_NATIVE_SET = !1; -$jscomp.SIMPLE_FROUND_POLYFILL = !1; -$jscomp.ISOLATE_POLYFILLS = !1; -$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(a, b, c) { - if (a == Array.prototype || a == Object.prototype) return a; - a[b] = c.value; - return a -}; -$jscomp.getGlobal = function(a) { - a = ["object" == typeof globalThis && globalThis, a, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global]; - for (var b = 0; b < a.length; ++b) { - var c = a[b]; - if (c && c.Math == Math) return c - } - throw Error("Cannot find global object"); -}; -$jscomp.global = $jscomp.getGlobal(this); -$jscomp.IS_SYMBOL_NATIVE = "function" === typeof Symbol && "symbol" === typeof Symbol("x"); -$jscomp.TRUST_ES6_POLYFILLS = !$jscomp.ISOLATE_POLYFILLS || $jscomp.IS_SYMBOL_NATIVE; -$jscomp.polyfills = {}; -$jscomp.propertyToPolyfillSymbol = {}; -$jscomp.POLYFILL_PREFIX = "$jscp$"; -var $jscomp$lookupPolyfilledValue = function(a, b) { - var c = $jscomp.propertyToPolyfillSymbol[b]; - if (null == c) return a[b]; - c = a[c]; - return void 0 !== c ? c : a[b] -}; -$jscomp.polyfill = function(a, b, c, e) { - b && ($jscomp.ISOLATE_POLYFILLS ? $jscomp.polyfillIsolated(a, b, c, e) : $jscomp.polyfillUnisolated(a, b, c, e)) -}; -$jscomp.polyfillUnisolated = function(a, b, c, e) { - c = $jscomp.global; - a = a.split("."); - for (e = 0; e < a.length - 1; e++) { - var d = a[e]; - if (!(d in c)) return; - c = c[d] - } - a = a[a.length - 1]; - e = c[a]; - b = b(e); - b != e && null != b && $jscomp.defineProperty(c, a, { - configurable: !0, - writable: !0, - value: b - }) -}; -$jscomp.polyfillIsolated = function(a, b, c, e) { - var d = a.split("."); - a = 1 === d.length; - e = d[0]; - e = !a && e in $jscomp.polyfills ? $jscomp.polyfills : $jscomp.global; - for (var f = 0; f < d.length - 1; f++) { - var l = d[f]; - if (!(l in e)) return; - e = e[l] - } - d = d[d.length - 1]; - c = $jscomp.IS_SYMBOL_NATIVE && "es6" === c ? e[d] : null; - b = b(c); - null != b && (a ? $jscomp.defineProperty($jscomp.polyfills, d, { - configurable: !0, - writable: !0, - value: b - }) : b !== c && ($jscomp.propertyToPolyfillSymbol[d] = $jscomp.IS_SYMBOL_NATIVE ? $jscomp.global.Symbol(d) : $jscomp.POLYFILL_PREFIX + d, d = $jscomp.propertyToPolyfillSymbol[d], $jscomp.defineProperty(e, d, { - configurable: !0, - writable: !0, - value: b - }))) -}; -$jscomp.polyfill("Array.prototype.find", function(a) { - return a ? a : function(b, c) { - return $jscomp.findInternal(this, b, c).v - } -}, "es6", "es3"); -(function(a) { - "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function(b) { - return a(b, window, document) - }) : "object" === typeof exports ? module.exports = function(b, c) { - b || (b = window); - c && c.fn.dataTable || (c = require("datatables.net")(b, c).$); - return a(c, b, b.document) - } : a(jQuery, window, document) -})(function(a, b, c, e) { - var d = a.fn.dataTable; - a.extend(!0, d.defaults, { - dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", - renderer: "bootstrap" - }); - a.extend(d.ext.classes, { - sWrapper: "dataTables_wrapper dt-bootstrap5", - sFilterInput: "form-control form-control-sm", - sLengthSelect: "form-select form-select-sm", - sProcessing: "dataTables_processing card", - sPageButton: "paginate_button page-item" - }); - d.ext.renderer.pageButton.bootstrap = function(f, l, A, B, m, t) { - var u = new d.Api(f), - C = f.oClasses, - n = f.oLanguage.oPaginate, - D = f.oLanguage.oAria.paginate || {}, - h, k, v = 0, - y = function(q, w) { - var x, E = function(p) { - p.preventDefault(); - a(p.currentTarget).hasClass("disabled") || u.page() == p.data.action || u.page(p.data.action).draw("page") - }; - var r = 0; - for (x = w.length; r < x; r++) { - var g = w[r]; - if (Array.isArray(g)) y(q, g); - else { - k = h = ""; - switch (g) { - case "ellipsis": - h = "…"; - k = "disabled"; - break; - case "first": - h = n.sFirst; - k = g + (0 < m ? "" : " disabled"); - break; - case "previous": - h = n.sPrevious; - k = g + (0 < m ? "" : " disabled"); - break; - case "next": - h = n.sNext; - k = g + (m < t - 1 ? "" : " disabled"); - break; - case "last": - h = n.sLast; - k = g + (m < t - 1 ? "" : " disabled"); - break; - default: - h = g + 1, k = m === g ? "active" : "" - } - if (h) { - var F = a("
  • ", { - "class": C.sPageButton + " " + k, - id: 0 === A && "string" === typeof g ? f.sTableId + "_" + g : null - }).append(a("", { - href: "#", - "aria-controls": f.sTableId, - "aria-label": D[g], - "data-dt-idx": v, - tabindex: f.iTabIndex, - "class": "page-link" - }).html(h)).appendTo(q); - f.oApi._fnBindAction(F, { - action: g - }, E); - v++ - } - } - } - }; - try { - var z = a(l).find(c.activeElement).data("dt-idx") - } catch (q) {} - y(a(l).empty().html('